diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl index 5f84dd655..ef2a51d2e 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -16,6 +23,16 @@ ТекущийПользователь = Пользователи.ТекущийПользователь(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + ПараметрыГиперссылки = МодульРаботаСФайлами.ГиперссылкаФайлов(); + ПараметрыГиперссылки.Размещение = "КоманднаяПанель"; + ПараметрыГиперссылки.Владелец = "Объект.БизнесПроцесс"; + МодульРаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаКлиенте @@ -23,6 +40,13 @@ БизнесПроцессыИЗадачиКлиент.ОбновитьДоступностьКомандПринятияКИсполнению(ЭтотОбъект); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -34,7 +58,7 @@ КонецЕсли; Если НЕ ЗаданиеВыполнено И НЕ ЗначениеЗаполнено(ТекущийОбъект.РезультатВыполнения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Укажите причину, по которой задача отклоняется.'"),, "Объект.РезультатВыполнения",, Отказ); @@ -57,6 +81,13 @@ КонецЕсли; КонецЕсли; + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -110,6 +141,40 @@ КонецПроцедуры +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область ОбработчикиКомандФормы @@ -159,6 +224,18 @@ КонецПроцедуры +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl index 74cd41298..dcf0b9c7a 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -16,13 +23,30 @@ ТекущийПользователь = Пользователи.ТекущийПользователь(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + ПараметрыГиперссылки = МодульРаботаСФайлами.ГиперссылкаФайлов(); + ПараметрыГиперссылки.Размещение = "КоманднаяПанель"; + ПараметрыГиперссылки.Владелец = "Объект.БизнесПроцесс"; + МодульРаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) БизнесПроцессыИЗадачиКлиент.ОбновитьДоступностьКомандПринятияКИсполнению(ЭтотОбъект); - + + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -35,14 +59,14 @@ Если НЕ ЗаданиеВыполнено И НЕ ЗаданиеПодтверждено И НЕ ЗначениеЗаполнено(ТекущийОбъект.РезультатВыполнения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Укажите причину, по которой задача возвращается на доработку.'"),, "Объект.РезультатВыполнения",, Отказ); Возврат; ИначеЕсли НЕ ЗаданиеВыполнено И ЗаданиеПодтверждено И НЕ ЗначениеЗаполнено(ТекущийОбъект.РезультатВыполнения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Укажите причину, по которой задача отменяется.'"),, "Объект.РезультатВыполнения",, Отказ); @@ -79,6 +103,13 @@ КонецЕсли; КонецЕсли; + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры #КонецОбласти @@ -102,6 +133,40 @@ КонецПроцедуры +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область ОбработчикиКомандФормы @@ -169,6 +234,18 @@ КонецПроцедуры +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form index 1ec596fd7..753485e44 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form @@ -367,7 +367,6 @@ true false true - ShowInInputField false true true @@ -816,7 +815,6 @@ true false true - ShowInInputField false false true @@ -1752,7 +1750,14 @@ Auto - + + + CommonCommand.ПрисоединенныеФайлы + FormNavigationPanelGoTo + 0 + + + diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl index 9b269def5..e652bea54 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -26,6 +34,15 @@ ИнициализацияФормы(); КонецЕсли; + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + ГиперссылкаФайлов = МодульРаботаСФайлами.ГиперссылкаФайлов(); + ГиперссылкаФайлов.Размещение = "КоманднаяПанель"; + МодульРаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ГиперссылкаФайлов); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаКлиенте @@ -33,6 +50,13 @@ ОбновитьДоступностьКомандОстановки(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -83,6 +107,13 @@ УстановитьСвойстваЭлементовФормы(ЭтотОбъект); КонецЕсли; + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -309,6 +340,40 @@ КонецЕсли; КонецПроцедуры +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область ОбработчикиКомандФормы @@ -347,6 +412,18 @@ ОткрытьНастройкуОтложенногоСтарта(); КонецПроцедуры +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -552,7 +629,7 @@ ДатаОтложенногоСтарта = БизнесПроцессыИЗадачиСервер.ДатаОтложенногоСтартаПроцесса(ПроверяемыйОбъект.Ссылка); Если ПроверяемыйОбъект.СрокИсполнения < ДатаОтложенногоСтарта Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Срок исполнения задания не может быть меньше даты отложенного старта.'"),, "СрокИсполнения", "Объект.СрокИсполнения"); КонецЕсли; @@ -579,17 +656,17 @@ РеквизитыФормыЗаполнены = Истина; Если НЕ ЗначениеЗаполнено(Объект.Исполнитель) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Исполнитель"" не заполнено.'"),, + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Поле ""Исполнитель"" не заполнено.'"),, "Исполнитель", "Объект.Исполнитель"); РеквизитыФормыЗаполнены = Ложь; КонецЕсли; Если НЕ ЗначениеЗаполнено(Объект.Наименование) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Задание"" не заполнено.'"),, + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Поле ""Задание"" не заполнено.'"),, "Исполнитель", "Объект.Наименование"); РеквизитыФормыЗаполнены = Ложь; КонецЕсли; Если НЕ ЗначениеЗаполнено(Объект.СрокИсполнения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Срок"" исполнения не заполнено.'"),, + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Поле ""Срок"" исполнения не заполнено.'"),, "СрокИсполнения", "Объект.СрокИсполнения"); РеквизитыФормыЗаполнены = Ложь; КонецЕсли; diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form index d6c7377dd..7b2fc2004 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form @@ -1270,6 +1270,11 @@ true auto true + + + КоманднаяПанель + + Список 1 diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl index 2ebe6fe94..65fef391c 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl index db3e4cc86..310e80a0a 100644 --- a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl index c5ccb3ac4..36b81f9f2 100644 --- a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -68,10 +76,7 @@ Если ЭтоНовый() Тогда Автор = Пользователи.АвторизованныйПользователь(); - Важность = Перечисления.ВариантыВажностиЗадачи.Обычная; - НаПроверке = Истина; Проверяющий = Пользователи.АвторизованныйПользователь(); - Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Пользователи") Тогда Исполнитель = ДанныеЗаполнения; Иначе @@ -399,4 +404,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/BusinessProcesses/Задание/Задание.mdo b/SSL/src/BusinessProcesses/Задание/Задание.mdo index b31fdea09..e00c08780 100644 --- a/SSL/src/BusinessProcesses/Задание/Задание.mdo +++ b/SSL/src/BusinessProcesses/Задание/Задание.mdo @@ -464,8 +464,9 @@ + true - Enum.СостоянияБизнесПроцессов.EmptyRef + Enum.СостоянияБизнесПроцессов.EnumValue.Активен Use Use diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form index 9d017b905..3c1e20757 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form @@ -145,17 +145,47 @@ Form - - ФормаЗагрузитьКурсыВалют - 43 + + ГруппаЗагрузитьКурсыВалют + 87 + + ФормаЗагрузитьКурсыВалют + 43 + true + true + + true + + + ФормаЗагрузитьКурсыВалютExtendedTooltip + 50 + Label + true + true + + Left + + + Form.Command.ЗагрузитьКурсыВалют + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Загрузить курсы валют</value> + - ФормаЗагрузитьКурсыВалютExtendedTooltip - 50 + ГруппаЗагрузитьКурсыВалютРасширеннаяПодсказка + 88 Label true true @@ -163,13 +193,7 @@ Left - Form.Command.ЗагрузитьКурсыВалют - Normal - Auto - true - true - UserCmds - Auto + Справка @@ -241,6 +265,7 @@ НаименованиеПолное 40 + VeryHigh true true @@ -372,6 +397,7 @@ Курс 38 + VeryHigh <key>ru</key> <value>Курс</value> @@ -648,6 +674,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Список</name> <id>1</id> diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl index c52816c52..110d0eb02 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form index cb9439f3e..713cdeab1 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form @@ -1,67 +1,22 @@ <?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>Объект.НаименованиеПолное</segments> - </dataPath> - <extendedTooltip> - <name>НаименованиеПолноеExtendedTooltip</name> - <id>72</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>НаименованиеПолноеКонтекстноеМеню</name> - <id>23</id> - <autoFill>true</autoFill> - </contextMenu> - <type>InputField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <footerHorizontalAlign>Left</footerHorizontalAlign> - <extInfo xsi:type="form:InputFieldExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <horizontalStretch>true</horizontalStretch> - <chooseType>true</chooseType> - <typeDomainEnabled>true</typeDomainEnabled> - <textEdit>true</textEdit> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <textSize>Normal</textSize> - </extInfo> - </items> <items xsi:type="form:FormGroup"> - <name>ГруппаКодНаименование</name> - <id>148</id> + <name>ГруппаШапка</name> + <id>150</id> <items xsi:type="form:FormField"> - <name>Код</name> - <id>2</id> + <name>НаименованиеПолное</name> + <id>4</id> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Объект.Code</segments> + <segments>Объект.НаименованиеПолное</segments> </dataPath> <extendedTooltip> - <name>КодExtendedTooltip</name> - <id>75</id> + <name>НаименованиеПолноеExtendedTooltip</name> + <id>72</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -70,8 +25,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>КодКонтекстноеМеню</name> - <id>24</id> + <name>НаименованиеПолноеКонтекстноеМеню</name> + <id>23</id> <autoFill>true</autoFill> </contextMenu> <type>InputField</type> @@ -81,9 +36,9 @@ <showInFooter>true</showInFooter> <footerHorizontalAlign>Left</footerHorizontalAlign> <extInfo xsi:type="form:InputFieldExtInfo"> - <width>3</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>true</horizontalStretch> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> @@ -93,20 +48,111 @@ <textSize>Normal</textSize> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>Наименование</name> - <id>3</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаКодНаименование</name> + <id>148</id> + <items xsi:type="form:FormField"> + <name>Код</name> + <id>2</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.Code</segments> + </dataPath> + <extendedTooltip> + <name>КодExtendedTooltip</name> + <id>75</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>КодКонтекстноеМеню</name> + <id>24</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <footerHorizontalAlign>Left</footerHorizontalAlign> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>3</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <borderColor xsi:type="core:ColorRef"> + <color>Style.BorderColor</color> + </borderColor> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Наименование</name> + <id>3</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.Description</segments> + </dataPath> + <extendedTooltip> + <name>НаименованиеExtendedTooltip</name> + <id>76</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>НаименованиеКонтекстноеМеню</name> + <id>22</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <footerHorizontalAlign>Left</footerHorizontalAlign> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>5</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <borderColor xsi:type="core:ColorRef"> + <color>Style.BorderColor</color> + </borderColor> + <textSize>Normal</textSize> + </extInfo> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Объект.Description</segments> - </dataPath> + <title> + <key>ru</key> + <value>Группа код и наименование</value> + - НаименованиеExtendedTooltip - 76 + ГруппаКодНаименованиеРасширеннаяПодсказка + 149 Label true true @@ -114,28 +160,14 @@ Left - - НаименованиеКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - Left - - 5 - true - true - true - true - true - - Style.BorderColor - - Normal + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto true @@ -145,11 +177,11 @@ <key>ru</key> - <value>Группа код и наименование</value> + <value>Шапка</value> - ГруппаКодНаименованиеРасширеннаяПодсказка - 149 + ГруппаШапкаРасширеннаяПодсказка + 151 Label true true @@ -159,7 +191,7 @@ UsualGroup - HorizontalIfPossible + Vertical Auto true true @@ -412,78 +444,116 @@ DontUse - - Наценка - 6 + + ГруппаНаценка + 152 + + Наценка + 6 + true + true + + true + + + Объект.Наценка + + + ru + Коэффициент, применяемый к курсу выбранной валюты для вычисления курса текущей валюты + + + НаценкаExtendedTooltip + 82 + Label + true + true + + Left + + + + НаценкаКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + Left + + 7 + true + true + false + true + true + true + true + + -99 + + + 100 + + + Style.BorderColor + + Normal + + + + ТекстПроцент + 126 + + <key>ru</key> + <value>%</value> + + true + true + + true + + + ru + Коэффициент, который применяется к курсу основной валюты для вычисления курса текущей валюты. + + Button + + ТекстПроцентРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + + ТекстПроцентКонтекстноеМеню + 127 + true + + Label + true + + Left + + true true true - - Объект.Наценка - - - ru - Коэффициент, применяемый к курсу выбранной валюты для вычисления курса текущей валюты - - - НаценкаExtendedTooltip - 82 - Label - true - true - - Left - - - - НаценкаКонтекстноеМеню - 36 - true - - InputField - Enter - true - Left - true - Left - - 7 - true - true - false - true - true - true - true - - -99 - - - 100 - - - Style.BorderColor - - Normal - - - - ТекстПроцент - 126 <key>ru</key> - <value>%</value> + <value>Наценка</value> - true - true - - true - - ТекстПроцентРасширеннаяПодсказка - 128 + ГруппаНаценкаРасширеннаяПодсказка + 153 Label true true @@ -491,15 +561,14 @@ Left - - ТекстПроцентКонтекстноеМеню - 127 - true - - Label - true - - Left + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto true @@ -511,11 +580,7 @@ ru Наценка на курс другой валюты - - ru - Коэффициент, который применяется к курсу основной валюты для вычисления курса текущей валюты. - - Button + None ГруппаНаценкаНаКурсДругойВалютыРасширеннаяПодсказка 120 @@ -651,7 +716,7 @@ Left true - 32 + 35 true true false diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html index 0eedf15e9..b8749c1b0 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html @@ -27,7 +27,11 @@
Укажите Наценку, % - коэффициент, который применяется к курсу основной валюты для вычисления курса текущей валюты.

Расчет по формуле

  • Предусмотрена возможность ввести валюту, курс которой зависит от нескольких валют одновременно.
  • Для этого переключатель Курс валюты установите в положение рассчитывается по формуле. -
  • Задайте способ расчета курса валюты в соответствующем поле, например, (USD+EUR)/2.

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

+
  • Задайте способ расчета курса валюты в соответствующем поле, например, (USD+EUR)/2. +
  • Допустимыми разделителями дробной части чисел в формуле являются знаки точки и запятой, т.е. правильно: +
    • EUR*1.025 +
    • EUR*1,025
  • Но если возникает необходимость использовать функции с двумя и более параметрами, то параметры следует разделять запятыми, а дробные части чисел - точками, например: +
    • Окр(EUR*1.025,2)
  • Подробнее о правилах построения подобных выражений см. раздел справки Язык выражений системы компоновки данных.
  • Просмотр курса валюты

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

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

    • Курсы основных валют можно загрузить с сайта 1С. Если для валюты загрузка невозможна, то переключатель Курс валюты автоматически устанавливается в положение  вводится вручную. diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl index 5e3c669b3..937d7eabe 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -38,6 +45,13 @@ УстановитьДоступностьЭлементов(ЭтотОбъект); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ФормулаРасчетаКурса.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + Элементы.ОсновнаяВалюта.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; + Элементы.ГруппаШапка.ВыравниваниеЭлементовИЗаголовков = + ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/Валюты/ManagerModule.bsl b/SSL/src/Catalogs/Валюты/ManagerModule.bsl index a58ecc69f..a2b9b0dbc 100644 --- a/SSL/src/Catalogs/Валюты/ManagerModule.bsl +++ b/SSL/src/Catalogs/Валюты/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/Валюты/ObjectModule.bsl b/SSL/src/Catalogs/Валюты/ObjectModule.bsl index d643f8cf2..aa9708a3b 100644 --- a/SSL/src/Catalogs/Валюты/ObjectModule.bsl +++ b/SSL/src/Catalogs/Валюты/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -37,7 +45,7 @@ КонецЕсли; Если Отказ Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Курс валюты можно связать только с курсом независимой валюты.'")); КонецЕсли; @@ -57,54 +65,13 @@ Если Не ЭтоНовый() И СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты И РаботаСКурсамиВалют.СписокЗависимыхВалют(Ссылка).Количество() > 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Валюта не может быть подчиненной, так как она является основной для других валют.'")); Отказ = Истина; КонецЕсли; КонецПроцедуры -Процедура ПриЗаписи(Отказ) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если ДополнительныеСвойства.Свойство("ОбновитьКурсы") Тогда - ПараметрыВалюты = Новый Структура; - ПараметрыВалюты.Вставить("ОсновнаяВалюта"); - ПараметрыВалюты.Вставить("Ссылка"); - ПараметрыВалюты.Вставить("Наценка"); - ПараметрыВалюты.Вставить("ДополнительныеСвойства"); - ПараметрыВалюты.Вставить("ФормулаРасчетаКурса"); - ЗаполнитьЗначенияСвойств(ПараметрыВалюты, ЭтотОбъект); - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ПодчиненнаяВалюта", ПараметрыВалюты); - ПараметрыЗадания.Вставить("СпособУстановкиКурса", СпособУстановкиКурса); - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор()); - ПараметрыВыполнения.ОжидатьЗавершение = 0; - ПараметрыВыполнения.ЗапуститьНеВФоне = ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); - - Результат = ДлительныеОперации.ВыполнитьВФоне("РаботаСКурсамиВалют.ОбновитьКурсВалюты", ПараметрыЗадания, ПараметрыВыполнения); - Если Результат.Статус = "Ошибка" Тогда - ВызватьИсключение Результат.КраткоеПредставлениеОшибки; - КонецЕсли; - КонецЕсли; - - Если ДополнительныеСвойства.Свойство("ЗапланироватьКопированиеКурсовВалюты") Тогда - Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса") Тогда - МодульКурсыВалютСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса"); - МодульКурсыВалютСлужебныйВМоделиСервиса.ЗапланироватьКопированиеКурсовВалюты(ЭтотОбъект); - КонецЕсли; - КонецЕсли; - - РаботаСКурсамиВалют.ПроверитьКорректностьКурсаНа01_01_1980(Ссылка); - -КонецПроцедуры - Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда @@ -151,6 +118,79 @@ КонецПроцедуры +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ВыполняетсяФоновыйПересчетКурсов() Тогда + ВызватьИсключение НСтр("ru = 'Не удалось записать валюту, так как еще не завершился фоновый пересчет курсов. + |Попробуйте записать валюту позже.'"); + КонецЕсли; + + Если ДополнительныеСвойства.Свойство("ОбновитьКурсы") Тогда + НачатьФоновоеОбновлениеКурсовВалюты(); + Иначе + РаботаСКурсамиВалют.ПроверитьКорректностьКурсаНа01_01_1980(Ссылка); + КонецЕсли; + + Если ДополнительныеСвойства.Свойство("ЗапланироватьКопированиеКурсовВалюты") Тогда + ЗапланироватьКопированиеКурсовВалюты(); + КонецЕсли; + +КонецПроцедуры + +Функция ВыполняетсяФоновыйПересчетКурсов() + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Наименование", "РаботаСКурсамиВалют.ОбновитьКурсВалюты"); + ПараметрыЗадания.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + Возврат ОбщегоНазначения.ИнформационнаяБазаФайловая() + И ФоновыеЗадания.ПолучитьФоновыеЗадания(ПараметрыЗадания).Количество() > 0; + +КонецФункции + +Процедура НачатьФоновоеОбновлениеКурсовВалюты() + + ПараметрыВалюты = Новый Структура; + ПараметрыВалюты.Вставить("ОсновнаяВалюта"); + ПараметрыВалюты.Вставить("Ссылка"); + ПараметрыВалюты.Вставить("Наценка"); + ПараметрыВалюты.Вставить("ДополнительныеСвойства"); + ПараметрыВалюты.Вставить("ФормулаРасчетаКурса"); + ПараметрыВалюты.Вставить("СпособУстановкиКурса"); + ЗаполнитьЗначенияСвойств(ПараметрыВалюты, ЭтотОбъект); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Валюта", ПараметрыВалюты); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор()); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.ЗапуститьНеВФоне = ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); + + Результат = ДлительныеОперации.ВыполнитьВФоне("РаботаСКурсамиВалют.ОбновитьКурсВалюты", ПараметрыЗадания, ПараметрыВыполнения); + Если Результат.Статус = "Ошибка" Тогда + ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗапланироватьКопированиеКурсовВалюты() + + Перем МодульКурсыВалютСлужебныйВМоделиСервиса; + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса") Тогда + МодульКурсыВалютСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса"); + МодульКурсыВалютСлужебныйВМоделиСервиса.ЗапланироватьКопированиеКурсовВалюты(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form index ba0ac736e..a0118a0e9 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form.form @@ -315,6 +315,9 @@ true + + Список.Ref +
      true
      Catalog.ВариантыОтветовАнкет diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl index a9ac6b0d7..2419d1579 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Form.form index f16e93695..9cc26280e 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Form.form @@ -122,40 +122,6 @@ true - - Ссылка - 14 - true - true - - - Список.Ref - - - СсылкаРасширеннаяПодсказка - 16 - Label - true - true - - Left - - - - СсылкаКонтекстноеМеню - 15 - true - - LabelField - Enter - true - Left - true - - true - true - - Владелец 8 @@ -192,6 +158,40 @@ true + + Ссылка + 14 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 15 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -351,6 +351,9 @@ true + + Список.Ref +
      true
      Catalog.ВариантыОтветовАнкет diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl index b596cee53..679b016da 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,8 +15,8 @@ Возврат; КонецЕсли; - Если НЕ ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + Если НЕ Пользователи.ЭтоСеансВнешнегоПользователя() Тогда + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Варианты ответов анкет используются только внешними пользователями.'"),,,,Отказ); КонецЕсли; diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl index 110c2d416..4e5995c37 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -17,7 +24,7 @@ Иначе ТекстСообщения = НСтр("ru = 'Данная форма предназначена для открытия только из формы элемента плана вида характеристик ""Вопросы для анкетирования""'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); Отказ = Истина; Возврат; diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/ManagerModule.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/ManagerModule.bsl index ff8b8f2e3..a9724815b 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/Изменить/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/Изменить/CommandModule.bsl index 1d423da32..78f4b0c20 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/Изменить/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/Изменить/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl index 4591afebc..1fecec774 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl index 3dfd2cfcd..8f833618e 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl index 2b601d05c..43cab67e5 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl @@ -1,9 +1,22 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(Варианты, ПараметрыВыполненияКоманды) - ВариантыОтчетовКлиент.ОткрытьДиалогСбросаНастроекПользователей(Варианты, ПараметрыВыполненияКоманды.Источник); + Если ТипЗнч(Варианты) <> Тип("Массив") Или Варианты.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите варианты отчетов, для которых необходимо сбросить пользовательские настройки.'")); + Возврат; + КонецЕсли; + + ОткрытьФорму("Справочник.ВариантыОтчетов.Форма.СбросПользовательскихНастроек", + Новый Структура("Варианты", Варианты), ПараметрыВыполненияКоманды.Источник); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl index 3cb499d77..50f2ff279 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl @@ -1,9 +1,22 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(Варианты, ПараметрыВыполненияКоманды) - ВариантыОтчетовКлиент.ОткрытьДиалогСбросаНастроекРазмещения(Варианты, ПараметрыВыполненияКоманды.Источник); + Если ТипЗнч(Варианты) <> Тип("Массив") Или Варианты.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите варианты отчетов программы, для которых необходимо сбросить настройки размещения.'")); + Возврат; + КонецЕсли; + + ОткрытьФорму("Справочник.ВариантыОтчетов.Форма.СбросНастроекРазмещения", + Новый Структура("Варианты", Варианты), ПараметрыВыполненияКоманды.Источник); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form index 491cad09d..1c804f637 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form @@ -30,9 +30,11 @@ ГруппаКолонок 73 + VeryHigh ДеревоПодсистемИспользование 69 + VeryHigh true true @@ -74,6 +76,7 @@ ДеревоПодсистемПредставление 61 + VeryHigh true true diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl index 0a63a80c9..f41fd969a 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -224,8 +232,8 @@ Запрос.УстановитьПараметр("МассивВариантов", ИзменяемыеВарианты.ВыгрузитьЗначения()); Запрос.УстановитьПараметр("ОтчетыПользователя", ВариантыОтчетов.ОтчетыТекущегоПользователя()); Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); - Запрос.УстановитьПараметр("ПредставлениеВажный", ВариантыОтчетовКлиентСервер.ПредставлениеВажный()); - Запрос.УстановитьПараметр("ПредставлениеСмТакже", ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже()); + Запрос.УстановитьПараметр("ПредставлениеВажный", ВариантыОтчетов.ПредставлениеВажный()); + Запрос.УстановитьПараметр("ПредставлениеСмТакже", ВариантыОтчетов.ПредставлениеСмТакже()); Запрос.Текст = ТекстЗапроса; ВременныеТаблицы = Запрос.ВыполнитьПакет(); diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl index 2948ed120..8cc82c2ec 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -12,6 +19,7 @@ Возврат; КонецЕсли; + ОпределитьПоведениеВМобильномКлиенте(); ИзменяемыеВарианты.ЗагрузитьЗначения(Параметры.Варианты); Отфильтровать(); КонецПроцедуры @@ -90,6 +98,15 @@ //////////////////////////////////////////////////////////////////////////////// // Сервер +&НаСервере +Процедура ОпределитьПоведениеВМобильномКлиенте() + Если Не ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Возврат; + КонецЕсли; + + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; +КонецПроцедуры + &НаСервере Процедура Отфильтровать() diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl index 75414bdd4..8cbcfa320 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -18,6 +25,7 @@ Возврат; КонецЕсли; + ОпределитьПоведениеВМобильномКлиенте(); ИзменяемыеВарианты.ЗагрузитьЗначения(Параметры.Варианты); КонецПроцедуры @@ -87,6 +95,15 @@ //////////////////////////////////////////////////////////////////////////////// // Сервер +&НаСервере +Процедура ОпределитьПоведениеВМобильномКлиенте() + Если Не ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Возврат; + КонецЕсли; + + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; +КонецПроцедуры + &НаСервере Функция ЕстьПользовательскиеНастройки(МассивВариантов) Запрос = Новый Запрос; diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form index 27f5eb3dc..f92a0bb65 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form @@ -627,14 +627,14 @@ ГруппаГоризонтальная 23 - ЛеваяКолонка + ГруппаРазделы 92 ДеревоПодсистем 65 <key>ru</key> - <value>Дерево подсистем</value> + <value>Разделы</value> true true @@ -874,10 +874,10 @@ <key>ru</key> - <value>Левая колонка</value> + <value>Все разделы</value> - ЛеваяКолонкаExtendedTooltip + ГруппаРазделыРасширеннаяПодсказка 114 Label true @@ -927,13 +927,17 @@ Наименование 4 + + <key>ru</key> + <value>Наименование</value> + true true true - Список.Description + Список.Наименование НаименованиеExtendedTooltip @@ -1345,121 +1349,9 @@ true - - Ссылка - 134 - true - true - - - Список.Ref - - - СсылкаРасширеннаяПодсказка - 136 - Label - true - true - - Left - - - - СсылкаКонтекстноеМеню - 135 - true - - LabelField - Enter - true - Left - true - - true - true - - - - НаименованияПараметровИОтборов - 150 - - <key>ru</key> - <value>Наименования параметров и отборов</value> - - true - true - - - Список.НаименованияПараметровИОтборов - - - НаименованияПараметровИОтборовРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - - НаименованияПараметровИОтборовКонтекстноеМеню - 151 - true - - LabelField - Enter - true - Left - true - - true - true - - - - НаименованияПолей - 153 - - <key>ru</key> - <value>Наименования полей</value> - - true - true - - - Список.НаименованияПолей - - - НаименованияПолейРасширеннаяПодсказка - 155 - Label - true - true - - Left - - - - НаименованияПолейКонтекстноеМеню - 154 - true - - LabelField - Enter - true - Left - true - - true - true - - true true - - true - + <key>ru</key> <value>Техническая информация</value> @@ -1481,6 +1373,40 @@ <showInCard>true</showInCard> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>Ссылка</name> + <id>134</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </dataPath> + <extendedTooltip> + <name>СсылкаРасширеннаяПодсказка</name> + <id>136</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СсылкаКонтекстноеМеню</name> + <id>135</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> <commandBarLocation>None</commandBarLocation> <autoCommandBar> <name>СписокКоманднаяПанель</name> @@ -1820,6 +1746,56 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>Выбрать</value> + </value> + </mobileDeviceCommandBarContent> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>Просмотр</value> + </value> + </mobileDeviceCommandBarContent> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>Изменить</value> + </value> + </mobileDeviceCommandBarContent> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>РазместитьВРазделах</value> + </value> + </mobileDeviceCommandBarContent> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>Справка</value> + </value> + </mobileDeviceCommandBarContent> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>СписокГруппа1</value> + </value> + </mobileDeviceCommandBarContent> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КомандыСписка</value> + </value> + </mobileDeviceCommandBarContent> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>СброситьНастройкиРазмещения</value> + </value> + </mobileDeviceCommandBarContent> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>СброситьНастройкиПользователей</value> + </value> + </mobileDeviceCommandBarContent> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>УстановитьПометкуУдаления</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Список</name> <id>1</id> @@ -1832,9 +1808,6 @@ <edit> <common>true</common> </edit> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>Список.Description</segments> - </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.Ref</segments> </notDefaultUseAlwaysAttributes> @@ -1850,6 +1823,9 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.КлючЗамеров</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Наименование</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.Отчет</segments> </notDefaultUseAlwaysAttributes> @@ -1859,61 +1835,73 @@ <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ РАЗРЕШЕННЫЕ - Варианты.Ссылка, - Варианты.ВерсияДанных, - Варианты.ПометкаУдаления, - ЕСТЬNULL(ИзКонфигурации.КлючЗамеров, ИзРасширений.КлючЗамеров) КАК КлючЗамеров, - Варианты.Пользовательский, - НЕ Варианты.Пользовательский КАК Предопределенный, - Варианты.Наименование, - НЕ Варианты.ТолькоДляАвтора КАК ДоступенВсемПользователям, - Варианты.Отчет, - Варианты.КлючВарианта, - Варианты.ТипОтчета, - Варианты.Автор, + ВариантыОтчетов.Ссылка, + ВариантыОтчетов.ВерсияДанных, + ВариантыОтчетов.ПометкаУдаления, + ЕСТЬNULL(ВариантыКонфигурации.КлючЗамеров, ВариантыРасширений.КлючЗамеров) КАК КлючЗамеров, + ВариантыОтчетов.Пользовательский, + НЕ ВариантыОтчетов.Пользовательский КАК Предопределенный, ВЫБОР - КОГДА ПОДСТРОКА(Варианты.НаименованияПараметровИОтборов, 1, 1) = "" - ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ИзКонфигурации.НаименованияПараметровИОтборов, ИзРасширений.НаименованияПараметровИОтборов) КАК СТРОКА(1000)) - ИНАЧЕ ВЫРАЗИТЬ(Варианты.НаименованияПараметровИОтборов КАК СТРОКА(1000)) - КОНЕЦ КАК НаименованияПараметровИОтборов, + КОГДА ВариантыОтчетов.Пользовательский + ИЛИ ВариантыОтчетов.ПредопределенныйВариант В ( + НЕОПРЕДЕЛЕНО, + ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка), + ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка)) + ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Наименование, ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + КОГДА &ЭтоОсновнойЯзык + ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ВариантыКонфигурации.Наименование, ВариантыРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияИзКонфигурации.Наименование, ПредставленияИзРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + КОНЕЦ КАК Наименование, + НЕ ВариантыОтчетов.ТолькоДляАвтора КАК ДоступенВсемПользователям, + ВариантыОтчетов.Отчет, + ВариантыОтчетов.КлючВарианта, + ВариантыОтчетов.ТипОтчета, + ВариантыОтчетов.Автор, ВЫБОР - КОГДА ПОДСТРОКА(Варианты.НаименованияПолей, 1, 1) = "" - ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ИзКонфигурации.НаименованияПолей, ИзРасширений.НаименованияПолей) КАК СТРОКА(1000)) - ИНАЧЕ ВЫРАЗИТЬ(Варианты.НаименованияПолей КАК СТРОКА(1000)) - КОНЕЦ КАК НаименованияПолей, - ВЫБОР - КОГДА ПОДСТРОКА(Варианты.Описание, 1, 1) = "" - ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ИзКонфигурации.Описание, ИзРасширений.Описание) КАК СТРОКА(1000)) - ИНАЧЕ ВЫРАЗИТЬ(Варианты.Описание КАК СТРОКА(1000)) + КОГДА &ЭтоОсновнойЯзык + И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = "" + ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) + КОГДА НЕ &ЭтоОсновнойЯзык + И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = "" + ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.Описание, ПредставленияИзРасширений.Описание) КАК СТРОКА(1000)) + ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Описание, ВариантыОтчетов.Описание) КАК СТРОКА(1000)) КОНЕЦ КАК Описание, ВЫБОР - КОГДА Варианты.ТипОтчета = &ТипВнутренний - ТОГДА Варианты.Отчет.Имя - КОГДА Варианты.ТипОтчета = &ТипРасширение - ТОГДА Варианты.Отчет.Имя - КОГДА Варианты.ТипОтчета = &ТипДополнительный - ТОГДА Варианты.Отчет - ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(Варианты.Отчет КАК СТРОКА(150)), 14, 137) + КОГДА ВариантыОтчетов.ТипОтчета В (ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний), + ВариантыОтчетов.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение)) + ТОГДА ВариантыОтчетов.Отчет.Имя + КОГДА ВариантыОтчетов.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный) + ТОГДА ВариантыОтчетов.Отчет + ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(ВариантыОтчетов.Отчет КАК СТРОКА(150)), 14, 137) КОНЕЦ КАК ИмяОтчета, ВЫБОР - КОГДА Варианты.ПометкаУдаления = ИСТИНА + КОГДА ВариантыОтчетов.ПометкаУдаления = ИСТИНА ТОГДА 4 - КОГДА Варианты.Пользовательский = ЛОЖЬ + КОГДА ВариантыОтчетов.Пользовательский = ЛОЖЬ ТОГДА 5 ИНАЧЕ 3 КОНЕЦ КАК ИндексКартинки ИЗ - Справочник.ВариантыОтчетов КАК Варианты - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ИзКонфигурации - ПО Варианты.ПредопределенныйВариант = ИзКонфигурации.Ссылка - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ИзРасширений - ПО Варианты.ПредопределенныйВариант = ИзРасширений.Ссылка + Справочник.ВариантыОтчетов КАК ВариантыОтчетов + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации + ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений + ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов + ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка + И (ПредставленияВариантов.КодЯзыка = &КодЯзыка) + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации + ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка + И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка) + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений + ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка + И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка) ГДЕ - Варианты.Отчет В(&ДоступныеОтчеты) + ВариантыОтчетов.Отчет В(&ДоступныеОтчеты) И ВЫБОР КОГДА Не &ЕстьОтборПоВариантам - ТОГДА НЕ Варианты.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - ИНАЧЕ Варианты.Ссылка В (&ВариантыПользователя) + ТОГДА НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) + ИНАЧЕ ВариантыОтчетов.Ссылка В (&ВариантыПользователя) КОНЕЦ</queryText> <mainTable>Catalog.ВариантыОтчетов</mainTable> <dynamicDataRead>true</dynamicDataRead> @@ -2184,6 +2172,9 @@ <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.Find</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ВыполнитьПоиск</name> @@ -2218,6 +2209,26 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>ТолькоВарианты</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> + <parameters> + <name>СтрокаПоиска</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> + <parameters> + <name>РазделСсылка</name> + <valueType> + <types>CatalogRef.ИдентификаторыОбъектовРасширений</types> + <types>CatalogRef.ИдентификаторыОбъектовМетаданных</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl index 262f68813..1553a92af 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -1,14 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + ОпределитьПоведениеВМобильномКлиенте(); ПараметрыКлиента = ВариантыОтчетов.ПараметрыКлиента(); - ВключаяПодчиненные = Истина; ДеревоЗначений = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя().Скопировать(); @@ -21,35 +30,26 @@ РежимРаботыФормы = "Выбор"; РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Элементы.Список.Отображение = ОтображениеТаблицы.Список; - ИначеЕсли Параметры.Свойство("РазделСсылка") Или Параметры.Свойство("РазделСсылка") Тогда + ИначеЕсли Параметры.РазделСсылка <> Неопределено Тогда РежимРаботыФормы = "ВсеОтчетыРаздела"; - МассивОбхода = Новый Массив; - МассивОбхода.Добавить(ДеревоПодсистем.ПолучитьЭлементы()[0]); - Пока МассивОбхода.Количество() > 0 Цикл - СтрокиРодителя = МассивОбхода[0].ПолучитьЭлементы(); - МассивОбхода.Удалить(0); - Для Каждого СтрокаДерева Из СтрокиРодителя Цикл - Если СтрокаДерева.Ссылка = Параметры.РазделСсылка Тогда - Элементы.ДеревоПодсистем.ТекущаяСтрока = СтрокаДерева.ПолучитьИдентификатор(); - МассивОбхода.Очистить(); + РодительскиеЭлементы = Новый Массив; + РодительскиеЭлементы.Добавить(ДеревоПодсистем.ПолучитьЭлементы()[0]); + Пока РодительскиеЭлементы.Количество() > 0 Цикл + РодительскийЭлемент = РодительскиеЭлементы[0].ПолучитьЭлементы(); + РодительскиеЭлементы.Удалить(0); + Для Каждого ДочернийЭлемент Из РодительскийЭлемент Цикл + Если ДочернийЭлемент.Ссылка = Параметры.РазделСсылка Тогда + Элементы.ДеревоПодсистем.ТекущаяСтрока = ДочернийЭлемент.ПолучитьИдентификатор(); + РодительскиеЭлементы.Очистить(); Прервать; - Иначе - МассивОбхода.Добавить(СтрокаДерева); КонецЕсли; + РодительскиеЭлементы.Добавить(ДочернийЭлемент); КонецЦикла; КонецЦикла; Иначе РежимРаботыФормы = "Список"; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "Изменить", - "Отображение", - ОтображениеКнопки.КартинкаИТекст); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "РазместитьВРазделах", - "ТолькоВоВсехДействиях", - Ложь); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Изменить", "Отображение", ОтображениеКнопки.КартинкаИТекст); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "РазместитьВРазделах", "ТолькоВоВсехДействиях", Ложь); КонецЕсли; ГлобальныеНастройки = ВариантыОтчетов.ГлобальныеНастройки(); @@ -63,28 +63,9 @@ УстановитьСвойствоСпискаПоПараметруФормы("МножественныйВыбор"); УстановитьСвойствоСпискаПоПараметруФормы("ТекущаяСтрока"); - Если Параметры.РежимВыбора Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "ВЫБРАТЬ", - "КнопкаПоУмолчанию", - Истина); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "ВЫБРАТЬ", - "Видимость", - Ложь); - КонецЕсли; - - ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); - Если Не ПолныеПраваНаВарианты Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "ОтборТипОтчета", - "Видимость", - Ложь); - КонецЕсли; + Элементы.Выбрать.КнопкаПоУмолчанию = Параметры.РежимВыбора; + Элементы.Выбрать.Видимость = Параметры.РежимВыбора; + Элементы.ОтборТипОтчета.Видимость = ВариантыОтчетов.ПолныеПраваНаВарианты(); СписокВыбора = Элементы.ОтборТипОтчета.СписокВыбора; СписокВыбора.Добавить(1, НСтр("ru = 'Все, кроме внешних'")); @@ -93,21 +74,14 @@ СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Дополнительный, НСтр("ru = 'Дополнительные'")); СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внешний, НСтр("ru = 'Внешние'")); - Параметры.Свойство("СтрокаПоиска", СтрокаПоиска); + СтрокаПоиска = Параметры.СтрокаПоиска; Если Параметры.Отбор.Свойство("ТипОтчета", ОтборТипОтчета) Тогда Параметры.Отбор.Удалить("ТипОтчета"); КонецЕсли; - Если Параметры.Свойство("ТолькоВарианты") Тогда - Если Параметры.ТолькоВарианты Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, - "КлючВарианта", - "", - ВидСравненияКомпоновкиДанных.НеРавно, - , - , - РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - КонецЕсли; + Если Параметры.ТолькоВарианты Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, + "КлючВарианта", "", ВидСравненияКомпоновкиДанных.НеРавно,,, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); КонецЕсли; ПерсональныеНастройкиСписка = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( @@ -117,11 +91,10 @@ Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(ПерсональныеНастройкиСписка.СтрокаПоискаСписокВыбора); КонецЕсли; - Список.Параметры.УстановитьЗначениеПараметра("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); - Список.Параметры.УстановитьЗначениеПараметра("ТипРасширение", Перечисления.ТипыОтчетов.Расширение); - Список.Параметры.УстановитьЗначениеПараметра("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); Список.Параметры.УстановитьЗначениеПараметра("ДоступныеОтчеты", ВариантыОтчетов.ОтчетыТекущегоПользователя()); Список.Параметры.УстановитьЗначениеПараметра("ОтключенныеВариантыПрограммы", Новый Массив(ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы())); + Список.Параметры.УстановитьЗначениеПараметра("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); + Список.Параметры.УстановитьЗначениеПараметра("КодЯзыка", ТекущийЯзык().КодЯзыка); ТекущийЭлемент = Элементы.Список; @@ -140,7 +113,7 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() + Если ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияИзменениеВарианта() Или ИмяСобытия = "Запись_НаборКонстант" Тогда ДеревоПодсистемТекущаяСтрока = -1; ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина); @@ -196,6 +169,11 @@ &НаКлиенте Процедура ДеревоПодсистемПриАктивизацииСтроки(Элемент) ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина); + +#Если МобильныйКлиент Тогда + ПодключитьОбработчикОжидания("УстановитьЗаголовокДереваПодсистем", 0.1, Истина); + ТекущийЭлемент = Элементы.Список; +#КонецЕсли КонецПроцедуры &НаКлиенте @@ -319,6 +297,18 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере +Процедура ОпределитьПоведениеВМобильномКлиенте() + Если Не ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Возврат; + КонецЕсли; + + Элементы.СтрокаПоиска.Ширина = 0; + Элементы.СтрокаПоиска.РастягиватьПоГоризонтали = Неопределено; + Элементы.СтрокаПоиска.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + Элементы.ВыполнитьПоиск.Отображение = ОтображениеКнопки.Картинка; +КонецПроцедуры + &НаСервере Процедура ДеревоПодсистемЗаполнитьПолноеПредставление(НаборСтрок, ПредставлениеРодителя = "") Для Каждого СтрокаДерева Из НаборСтрок Цикл @@ -462,40 +452,41 @@ ВсеПодсистемы = Не ЗначениеЗаполнено(СтрокаДерева.ПолноеИмя); ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); Если ЗначениеЗаполнено(СтрокаПоиска) Тогда ПараметрыПоиска.Вставить("СтрокаПоиска", СтрокаПоиска); Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; Иначе Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать; КонецЕсли; - ПараметрыПоиска.Вставить("ЖесткийОтборПоПодсистемам", Не ВсеПодсистемы); Если Не ВсеПодсистемы Или ЗначениеЗаполнено(СтрокаПоиска) Тогда - МассивПодсистем = Новый Массив; + ПодсистемыОтчетов = Новый Массив; Если Не ВсеПодсистемы Тогда - МассивПодсистем.Добавить(СтрокаДерева.Ссылка); + ПодсистемыОтчетов.Добавить(СтрокаДерева.Ссылка); КонецЕсли; Если ВсеПодсистемы Или ВключаяПодчиненные Тогда - ДобавитьРекурсивно(МассивПодсистем, СтрокаДерева.ПолучитьЭлементы()); + ДобавитьРекурсивно(ПодсистемыОтчетов, СтрокаДерева.ПолучитьЭлементы()); КонецЕсли; - ПараметрыПоиска.Вставить("Подсистемы", МассивПодсистем); + ПараметрыПоиска.Вставить("Подсистемы", ПодсистемыОтчетов); КонецЕсли; Если ЗначениеЗаполнено(ОтборТипОтчета) Тогда - МассивТиповОтчетов = Новый Массив; + ТипыОтчетов = Новый Массив; Если ОтборТипОтчета = 1 Тогда - МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Внутренний); - МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Расширение); - МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Дополнительный); + ТипыОтчетов.Добавить(Перечисления.ТипыОтчетов.Внутренний); + ТипыОтчетов.Добавить(Перечисления.ТипыОтчетов.Расширение); + ТипыОтчетов.Добавить(Перечисления.ТипыОтчетов.Дополнительный); Иначе - МассивТиповОтчетов.Добавить(ОтборТипОтчета); + ТипыОтчетов.Добавить(ОтборТипОтчета); КонецЕсли; - ПараметрыПоиска.Вставить("ТипыОтчетов", МассивТиповОтчетов); + ПараметрыПоиска.Вставить("ТипыОтчетов", ТипыОтчетов); КонецЕсли; - РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); - ВариантыПользователя = ?(РезультатПоиска = Неопределено, Новый Массив, РезультатПоиска.Ссылки); - Список.Параметры.УстановитьЗначениеПараметра("ЕстьОтборПоВариантам", РезультатПоиска <> Неопределено); - Список.Параметры.УстановитьЗначениеПараметра("ВариантыПользователя", ВариантыПользователя); + ЕстьОтборПоВариантам = ПараметрыПоиска.Количество() > 0; + ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); + ПараметрыПоиска.Вставить("ЖесткийОтборПоПодсистемам", Не ВсеПодсистемы); + + РезультатПоиска = ВариантыОтчетов.НайтиВариантыОтчетов(ПараметрыПоиска); + Список.Параметры.УстановитьЗначениеПараметра("ЕстьОтборПоВариантам", ЕстьОтборПоВариантам); + Список.Параметры.УстановитьЗначениеПараметра("ВариантыПользователя", РезультатПоиска.Ссылки); КонецПроцедуры @@ -506,6 +497,13 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура УстановитьЗаголовокДереваПодсистем() + Элементы.ГруппаРазделы.Заголовок = ?(Элементы.ДеревоПодсистем.ТекущиеДанные = Неопределено, + НСтр("ru = 'Все разделы'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), + Элементы.ДеревоПодсистем.ТекущиеДанные.Представление); +КонецПроцедуры + &НаСервере Процедура ДобавитьРекурсивно(МассивПодсистем, КоллекцияСтрокДерева) Для Каждого СтрокаДерева Из КоллекцияСтрокДерева Цикл @@ -648,7 +646,7 @@ Замер = Новый Структура("МодульОценкаПроизводительностиКлиент, Идентификатор"); Замер.МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); - Замер.Идентификатор = Замер.МодульОценкаПроизводительностиКлиент.НачатьЗамерВремени(Ложь, Имя); + Замер.Идентификатор = Замер.МодульОценкаПроизводительностиКлиент.ЗамерВремени(Имя, Ложь, Ложь); Замер.МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(Замер.Идентификатор, Комментарий); Возврат Замер; КонецФункции diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form index 2d58b8118..3404ba251 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form @@ -32,6 +32,10 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>Opening</event> + <name>НаименованиеОткрытие</name> + </handlers> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> @@ -78,6 +82,10 @@ <event>StartChoice</event> <name>ОписаниеНачалоВыбора</name> </handlers> + <handlers> + <event>Opening</event> + <name>ОписаниеОткрытие</name> + </handlers> <autoMaxWidth>true</autoMaxWidth> <height>2</height> <autoMaxHeight>true</autoMaxHeight> @@ -324,9 +332,11 @@ <items xsi:type="form:FormGroup"> <name>ГруппаКолонок</name> <id>83</id> + <displayImportance>VeryHigh</displayImportance> <items xsi:type="form:FormField"> <name>ДеревоПодсистемИспользование</name> <id>104</id> + <displayImportance>VeryHigh</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -366,6 +376,7 @@ <items xsi:type="form:FormField"> <name>ДеревоПодсистемПредставление</name> <id>86</id> + <displayImportance>VeryHigh</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -591,6 +602,7 @@ <initialTreeView>ExpandAllLevels</initialTreeView> <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> + <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> </items> <items xsi:type="form:FormField"> @@ -1168,6 +1180,300 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> + <items xsi:type="form:Table"> + <name>Представления</name> + <id>244</id> + <title> + <key>ru</key> + <value>Представления</value> + + true + true + + true + + + Объект.Представления + + None + + ПредставленияНомерСтроки + 257 + true + true + + true + + + Объект.Представления.LineNumber + + + ПредставленияНомерСтрокиРасширеннаяПодсказка + 259 + Label + true + true + + Left + + + + ПредставленияНомерСтрокиКонтекстноеМеню + 258 + true + + LabelField + Auto + true + Left + true + + true + true + + + + ПредставленияКодЯзыка + 260 + true + true + + true + + + Объект.Представления.КодЯзыка + + + ПредставленияКодЯзыкаРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + + ПредставленияКодЯзыкаКонтекстноеМеню + 261 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПредставленияНаименование + 263 + true + true + + true + + + Объект.Представления.Наименование + + + ПредставленияНаименованиеРасширеннаяПодсказка + 265 + Label + true + true + + Left + + + + ПредставленияНаименованиеКонтекстноеМеню + 264 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПредставленияОписание + 266 + true + true + + true + + + Объект.Представления.Описание + + + ПредставленияОписаниеРасширеннаяПодсказка + 268 + Label + true + true + + Left + + + + ПредставленияОписаниеКонтекстноеМеню + 267 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПредставленияКоманднаяПанель + 246 + Left + true + + + ПредставленияСтрокаПоиска + 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 + + + + ПредставленияРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + + ПредставленияКонтекстноеМеню + 245 + true + + HierarchicalList + true + true + true + true + true + 3 + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + + ИнтерактивнаяПометкаУдаления 241 @@ -1227,7 +1533,7 @@ Collapsible true Button - StrongSeparation + NormalSeparation true true auto @@ -1818,21 +2124,6 @@ true - - СвойстваПредопределенного - - <key>ru</key> - <value>Свойства предопределенного</value> - - 10 - - - true - - - true - - ПараметрыОткрытияФормыОтчета @@ -1865,6 +2156,58 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ПредопределеннаяВидимостьПоУмолчанию</name> + <title> + <key>ru</key> + <value>Предопределенная видимость по умолчанию</value> + + 13 + + Boolean + + + true + + + true + + + + ПредопределенноеОписание + + <key>ru</key> + <value>Предопределенное описание</value> + + 14 + + String + + + + true + + + true + + + + ЭтоПредопределенный + + <key>ru</key> + <value>Это предопределенный</value> + + 15 + + Boolean + + + true + + + true + + diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl index 5af65fdb8..71422ed5a 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -14,10 +22,19 @@ ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); Доступен = ?(Объект.ТолькоДляАвтора, "1", "2"); - - // Чтение свойств предопределенного; - // Заполнение реквизитов, связанных с предопределенным объектом при открытии. - ПрочитатьСвойстваПредопределенного(Истина); + ЭтоПредопределенный = Не Объект.Пользовательский + И (Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний + Или Объект.ТипОтчета = Перечисления.ТипыОтчетов.Расширение) + И ЗначениеЗаполнено(Объект.ПредопределенныйВариант); + + Если ЭтоПредопределенный Тогда + ПредопределенныйВариант = Объект.ПредопределенныйВариант.ПолучитьОбъект(); + ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ПредопределенныйВариант); + + ПредопределеннаяВидимостьПоУмолчанию = ПредопределенныйВариант.ВидимостьПоУмолчанию; + ПредопределенноеОписание = ПредопределенныйВариант.Описание; + ЗаполнитьИзПредопределенного(); + КонецЕсли; ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); ПравоНаЭтотВариант = ПолныеПраваНаВарианты Или Объект.Автор = Пользователи.АвторизованныйПользователь(); @@ -59,6 +76,11 @@ ПерезаполнитьДерево(Ложь); + ЛокализуемыеЭлементы = Новый Массив; + ЛокализуемыеЭлементы.Добавить(Элементы.Наименование); + ЛокализуемыеЭлементы.Добавить(Элементы.Описание); + ЛокализацияСервер.ПриСозданииНаСервере(ЛокализуемыеЭлементы); + КонецПроцедуры &НаКлиенте @@ -72,7 +94,7 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если Источник <> ЭтотОбъект - И (ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() + И (ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияИзменениеВарианта() Или ИмяСобытия = "Запись_НаборКонстант") Тогда ПерезаполнитьДерево(Истина); Элементы.ДеревоПодсистем.Развернуть(ДеревоПодсистем.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина); @@ -82,11 +104,10 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // Запись свойств, связанных с предопределенным вариантом отчета. - Если ТипЗнч(СвойстваПредопределенного) = Тип("ФиксированнаяСтруктура") Тогда + Если ЭтоПредопределенный Тогда ТекущийОбъект.ВидимостьПоУмолчаниюПереопределена = - Объект.ВидимостьПоУмолчанию <> СвойстваПредопределенного.ВидимостьПоУмолчанию; - - Если Не ПустаяСтрока(Объект.Описание) И НРег(СокрЛП(Объект.Описание)) = НРег(СокрЛП(СвойстваПредопределенного.Описание)) Тогда + Объект.ВидимостьПоУмолчанию <> ПредопределеннаяВидимостьПоУмолчанию; + Если Не ПустаяСтрока(Объект.Описание) И НРег(СокрЛП(Объект.Описание)) = НРег(СокрЛП(ПредопределенноеОписание)) Тогда ТекущийОбъект.Описание = ""; КонецЕсли; КонецЕсли; @@ -99,19 +120,21 @@ ИзмененныеРазделы = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("Модифицированность", Истина), Истина); КонецЕсли; ВариантыОтчетов.ДеревоПодсистемЗаписать(ТекущийОбъект, ИзмененныеРазделы); + + ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); + КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) ПерезаполнитьДерево(Ложь); - ПрочитатьСвойстваПредопределенного(Ложь); + ЗаполнитьИзПредопределенного(); + ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - ПараметрОповещения = Новый Структура("Ссылка, Наименование, Автор, Описание"); - ЗаполнитьЗначенияСвойств(ПараметрОповещения, Объект); - Оповестить(ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта(), ПараметрОповещения, ЭтотОбъект); + ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы(Объект.Ссылка, ЭтотОбъект); СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "ДеревоПодсистем", "*", Истина); КонецПроцедуры @@ -124,6 +147,8 @@ МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом + + ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры @@ -142,6 +167,16 @@ Объект.ТолькоДляАвтора = (ЭтотОбъект.Доступен = "1"); КонецПроцедуры +&НаКлиенте +Процедура НаименованиеОткрытие(Элемент, СтандартнаяОбработка) + ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Наименование", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ОписаниеОткрытие(Элемент, СтандартнаяОбработка) + ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Описание", СтандартнаяОбработка); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоПодсистем @@ -181,29 +216,18 @@ КонецФункции &НаСервере -Процедура ПрочитатьСвойстваПредопределенного(ПервоеЧтение) - Если ПервоеЧтение Тогда - Если Не Объект.Пользовательский - И (Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний - Или Объект.ТипОтчета = Перечисления.ТипыОтчетов.Расширение) - И ЗначениеЗаполнено(Объект.ПредопределенныйВариант) Тогда // Чтение настроек предопределенного. - Сведения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.ПредопределенныйВариант, "ВидимостьПоУмолчанию, Описание"); - СвойстваПредопределенного = Новый ФиксированнаяСтруктура(Сведения); - Иначе - Возврат; // Не предопределенный. - КонецЕсли; - Иначе - Если ТипЗнч(СвойстваПредопределенного) <> Тип("ФиксированнаяСтруктура") Тогда - Возврат; // Не предопределенный. - КонецЕсли; - КонецЕсли; +Процедура ЗаполнитьИзПредопределенного() + Если Не ЭтоПредопределенный Тогда + Возврат; + КонецЕсли; + Если Объект.ВидимостьПоУмолчаниюПереопределена = Ложь Тогда - Объект.ВидимостьПоУмолчанию = СвойстваПредопределенного.ВидимостьПоУмолчанию; + Объект.ВидимостьПоУмолчанию = ПредопределеннаяВидимостьПоУмолчанию; КонецЕсли; Если ПустаяСтрока(Объект.Описание) Тогда - Объект.Описание = СвойстваПредопределенного.Описание; + Объект.Описание = ПредопределенноеОписание; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl index 49a07b351..13f40f0fc 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -54,10 +62,9 @@ #Область ОбработчикиСобытий -Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) // Переопределение для целей избранного - вместо карточки с настройками размещения отчета будет открываться его // основная форма. Если ВидФормы = "ФормаОбъекта" Тогда @@ -103,9 +110,33 @@ ВыбраннаяФорма = ПолноеИмяОтчета + ".Форма"; ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Параметры, ПараметрыОткрытия); КонецЕсли; - +КонецПроцедуры + #КонецЕсли + +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) + Поля.Добавить("Наименование"); + Поля.Добавить("Ссылка"); + Поля.Добавить("Пользовательский"); + Поля.Добавить("ПредопределенныйВариант"); + Поля.Добавить("ТипОтчета"); + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + + ЭтоПредопределенный = Не Данные.Пользовательский + И (Данные.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний + Или Данные.ТипОтчета = Перечисления.ТипыОтчетов.Расширение) + И ЗначениеЗаполнено(Данные.ПредопределенныйВариант); + + Если ЭтоПредопределенный Тогда + Данные.Ссылка = Данные.ПредопределенныйВариант; + КонецЕсли; + ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl index b80c16fec..65e4f1100 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -13,7 +21,7 @@ Если Наименование <> "" И ВариантыОтчетов.НаименованиеЗанято(Отчет, Ссылка, Наименование) Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" занято, необходимо указать другое наименование.'"), Наименование), , "Наименование"); @@ -39,7 +47,7 @@ Если ПометкаУдаления Тогда ТекстОшибки = НСтр("ru = 'Пометка на удаление предопределенного варианта отчета запрещена.'"); Иначе - ТекстОшибки = НСтр("ru = 'Снятие пометки удаления предопределенного варианта отчета запрещена.'"); + ТекстОшибки = НСтр("ru = 'Снятие пометки удаления предопределенного варианта отчета запрещено.'"); КонецЕсли; ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -65,50 +73,48 @@ КонецЕсли; Если ПользователемИзмененаПометкаУдаления Тогда - Если Пользовательский Тогда - ИнтерактивнаяПометкаУдаления = ПометкаУдаления; - Иначе - ИнтерактивнаяПометкаУдаления = Ложь; - КонецЕсли; + ИнтерактивнаяПометкаУдаления = ?(Пользовательский, ПометкаУдаления, Ложь); КонецЕсли; // Удаление из табличной части подсистем, помеченных на удаление. - МассивУдаляемыхСтрок = Новый Массив; + УдаляемыеСтроки = Новый Массив; Для Каждого СтрокаРазмещения Из Размещение Цикл Если СтрокаРазмещения.Подсистема.ПометкаУдаления = Истина Тогда - МассивУдаляемыхСтрок.Добавить(СтрокаРазмещения); + УдаляемыеСтроки.Добавить(СтрокаРазмещения); КонецЕсли; КонецЦикла; - Для Каждого СтрокаРазмещения Из МассивУдаляемыхСтрок Цикл + Для Каждого СтрокаРазмещения Из УдаляемыеСтроки Цикл Размещение.Удалить(СтрокаРазмещения); КонецЦикла; - // Заполнение реквизитов "НаименованияПолей" и "НаименованияПараметровИОтборов". - ПроиндексироватьНастройки(); + ЗаполнитьПоляДляПоиска(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -Процедура ПроиндексироватьНастройки() +Процедура ПриЧтенииПредставленийНаСервере() Экспорт + + ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); + +КонецПроцедуры + +// Заполнение реквизитов НаименованияПолей и НаименованияПараметровИОтборов. +Процедура ЗаполнитьПоляДляПоиска() Дополнительный = (ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный); Если Не Пользовательский И Не Дополнительный Тогда - // Для предопределенных вариантов отчетов данные хранятся в неразделенном справочнике. - НаименованияПолей = ""; - НаименованияПараметровИОтборов = ""; Возврат; КонецЕсли; - Если Дополнительный И БезопасныйРежим() = Ложь Тогда - Возврат; // Оставить текущие настройки. - КонецЕсли; + Попытка - ВариантыОтчетов.ПроиндексироватьСодержимоеСхемы(ЭтотОбъект); + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + ВариантыОтчетов.ЗаполнитьПоляДляПоиска(ЭтотОбъект); Исключение ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось проиндексировать схему варианта ""%1"" отчета ""%2"":'"), - КлючВарианта, - Строка(Отчет)); + КлючВарианта, Строка(Отчет)); ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ВариантыОтчетов.ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки, Ссылка); КонецПопытки; @@ -160,7 +166,7 @@ ТекстОшибки = НеЗаполненоПоле("Отчет"); ИначеЕсли Не ЗначениеЗаполнено(ТипОтчета) Тогда ТекстОшибки = НеЗаполненоПоле("ТипОтчета"); - ИначеЕсли ТипОтчета <> ВариантыОтчетовКлиентСервер.ТипОтчета(Отчет) Тогда + ИначеЕсли ТипОтчета <> ВариантыОтчетов.ТипОтчета(Отчет) Тогда ТекстОшибки = НСтр("ru = 'Противоречивые значения полей ""%1"" и ""%2""'"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, "ТипОтчета", "Отчет"); ИначеЕсли Не ЗначениеЗаполнено(ПредопределенныйВариант) @@ -178,4 +184,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo index 717c7e6af..5031c2217 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -335,6 +335,7 @@ ru Выводится в панели отчетов как подсказка. + true @@ -700,6 +701,80 @@ Use + + + + + + Представления + + ru + Представления + + + Use + LineNumber + + Use + + + + + КодЯзыка + + ru + Код языка + + + String + + 10 + + + + + Use + Index + Use + + + Наименование + + ru + Наименование + + + String + + 150 + + + + ru + Наименование варианта отчета + + + + Use + Index + Use + + + Описание + + ru + Описание + + + String + + + + + Use + Use + + РазмещениеВРазделах diff --git a/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl index f48bb3f9e..2e6d13478 100644 --- a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -84,8 +92,10 @@ КонецЕсли; УстановленныеРасширения = Новый Структура; - УстановленныеРасширения.Вставить("Основные", КонтрольныеСуммыРасширений(Основные)); + УстановленныеРасширения.Вставить("Основные", КонтрольныеСуммыРасширений(Основные)); УстановленныеРасширения.Вставить("Исправления", КонтрольныеСуммыРасширений(Исправления)); + УстановленныеРасширения.Вставить("ОсновныеСостояние", КонтрольныеСуммыРасширений(Основные, Истина)); + УстановленныеРасширения.Вставить("ИсправленияСостояние", КонтрольныеСуммыРасширений(Исправления, Истина)); Возврат Новый ФиксированнаяСтруктура(УстановленныеРасширения); @@ -98,8 +108,8 @@ УстановленныеРасширения = УстановленныеРасширения(); - Возврат ПараметрыСеанса.УстановленныеРасширения.Основные <> УстановленныеРасширения.Основные - Или ПараметрыСеанса.УстановленныеРасширения.Исправления <> УстановленныеРасширения.Исправления; + Возврат ПараметрыСеанса.УстановленныеРасширения.ОсновныеСостояние <> УстановленныеРасширения.ОсновныеСостояние + Или ПараметрыСеанса.УстановленныеРасширения.ИсправленияСостояние <> УстановленныеРасширения.ИсправленияСостояние; КонецФункции @@ -398,21 +408,29 @@ // // Параметры: // Расширения - Массив - получить контрольные суммы указанных расширений. +// УчитыватьСостояниеРасширений - Булево - учитывать признаки Активно и БезопасныйРежим. // // Возвращаемое значение: // Строка - строки вида "<Имя расширения> (<Версия расширения>) <Контрольная сумма>". // -Функция КонтрольныеСуммыРасширений(Расширения) +Функция КонтрольныеСуммыРасширений(Расширения, УчитыватьСостояниеРасширений = Ложь) Список = Новый СписокЗначений; Для Каждого Расширение Из Расширения Цикл - КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); - Список.Добавить(Расширение.Имя + " (" + Расширение.Версия + ") " + КонтрольнаяСумма); + КонтрольнаяСумма = Расширение.Имя + " (" + Расширение.Версия + ") " + Base64Строка(Расширение.ХешСумма); + Если УчитыватьСостояниеРасширений Тогда + КонтрольнаяСумма = КонтрольнаяСумма + + " Активно:" + Расширение.Активно + + " БезопасныйРежим:" + Расширение.БезопасныйРежим + + " ПередаватьВПодчиненныеУзлыРИБ:" + Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе; + КонецЕсли; + Список.Добавить(КонтрольнаяСумма); КонецЦикла; Если Список.Количество() <> 0 Тогда - Список.Добавить("#" + Метаданные.Имя + " (" + Метаданные.Версия + ")"); + КонтрольнаяСумма = "#" + Метаданные.Имя + " (" + Метаданные.Версия + ")"; + Список.Добавить(КонтрольнаяСумма); КонецЕсли; КонтрольныеСуммы = ""; diff --git a/SSL/src/Catalogs/ВерсииРасширений/ObjectModule.bsl b/SSL/src/Catalogs/ВерсииРасширений/ObjectModule.bsl index f8092f582..1b8493fa8 100644 --- a/SSL/src/Catalogs/ВерсииРасширений/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВерсииРасширений/ObjectModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -33,4 +40,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Attributes/Список/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Attributes/Список/ExtInfo/ListSettings.dcss rename to SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Attributes/Список/ExtInfo/ListSettings.dcss diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Form.form similarity index 78% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form rename to SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Form.form index 6d8a42f40..f1075685b 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Form.form @@ -20,26 +20,252 @@ None Copy - КартинкаИНаименование - 67 - - СписокИндексКартинкиТекущий - 68 - - <key>ru</key> - <value>Индекс картинки</value> - + ГруппаВертикально + 114 + + ГруппаОсновное + 116 + + СписокАвтор + 49 + VeryHigh + true + true + + true + + + Список.Автор + + + ru + Пользователь, который добавил версию файла в список + + + СписокАвторРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + + СписокАвторКонтекстноеМеню + 50 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокВладелец + 47 + Usual + true + + true + + + Список.Владелец + + + СписокВладелецРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + СписокВладелецКонтекстноеМеню + 48 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокНомерВерсии + 57 + Usual + true + true + + true + + + Список.НомерВерсии + + + ru + Номер версии файла + + + СписокНомерВерсииРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + СписокНомерВерсииКонтекстноеМеню + 58 + true + + InputField + Auto + true + Left + true + + 12 + true + true + false + true + true + true + true + Normal + + + + СписокДатаСоздания + 53 + Usual + true + true + + true + + + Список.ДатаСоздания + + + ru + Дата добавления версии файла в список + + + СписокДатаСозданияРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + + СписокДатаСозданияКонтекстноеМеню + 54 + true + + InputField + Auto + true + Left + true + + 15 + true + true + false + true + true + true + true + Normal + + + + СписокРазмер + 55 + Usual + true + true + + true + + + Список.Размер + + + ru + Размер версии файла в байтах + + + СписокРазмерРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + СписокРазмерКонтекстноеМеню + 56 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - Список.ИндексКартинкиТекущий - + + <key>ru</key> + <value>Основное</value> + - СписокИндексКартинкиТекущийРасширеннаяПодсказка - 91 + ГруппаОсновноеРасширеннаяПодсказка + 117 Label true true @@ -47,48 +273,31 @@ Left - - СписокИндексКартинкиТекущийКонтекстноеМеню - 69 - true - - PictureField - Auto - Left - true - - 15 - true - true - true - true - - CommonPicture.КоллекцияПиктограммФайлов - - - - 1 - + ColumnGroup + + auto + true - СписокАвтор - 49 + СписокКомментарий + 51 + VeryLow true true true - Список.Автор + Список.Комментарий ru - Пользователь, который добавил версию файла в список + Комментарий к версии файла - СписокАвторРасширеннаяПодсказка - 92 + СписокКомментарийРасширеннаяПодсказка + 95 Label true true @@ -97,13 +306,13 @@ - СписокАвторКонтекстноеМеню - 50 + СписокКомментарийКонтекстноеМеню + 52 true InputField Auto - true + true Left true @@ -113,6 +322,9 @@ true true true + + Style.ПоясняющийТекст + Normal @@ -123,11 +335,11 @@
      <key>ru</key> - <value>Картинка и наименование</value> + <value>Вертикально</value> - КартинкаИНаименованиеExtendedTooltip - 90 + ГруппаВертикальноРасширеннаяПодсказка + 115 Label true true @@ -137,239 +349,15 @@ ColumnGroup - InCell + Vertical auto true - - СписокВладелец - 47 - true - - true - - - Список.Владелец - - - СписокВладелецРасширеннаяПодсказка - 93 - Label - true - true - - Left - - - - СписокВладелецКонтекстноеМеню - 48 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СписокНомерВерсии - 57 - true - true - - true - - - Список.НомерВерсии - - - ru - Номер версии файла - - - СписокНомерВерсииРасширеннаяПодсказка - 94 - Label - true - true - - Left - - - - СписокНомерВерсииКонтекстноеМеню - 58 - true - - InputField - Auto - true - Left - true - - 12 - true - true - false - true - true - true - true - Normal - - - - СписокКомментарий - 51 - true - true - - true - - - Список.Комментарий - - - ru - Комментарий к версии файла - - - СписокКомментарийРасширеннаяПодсказка - 95 - Label - true - true - - Left - - - - СписокКомментарийКонтекстноеМеню - 52 - true - - InputField - Auto - true - Left - true - - true - 1 - true - true - true - true - true - Normal - - - - СписокДатаСоздания - 53 - true - true - - true - - - Список.ДатаСоздания - - - ru - Дата добавления версии файла в список - - - СписокДатаСозданияРасширеннаяПодсказка - 96 - Label - true - true - - Left - - - - СписокДатаСозданияКонтекстноеМеню - 54 - true - - InputField - Auto - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - - - СписокРазмер - 55 - true - true - - true - - - Список.Размер - - - ru - Размер версии файла в байтах - - - СписокРазмерРасширеннаяПодсказка - 97 - Label - true - true - - Left - - - - СписокРазмерКонтекстноеМеню - 56 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - СписокСсылка 59 + VeryLow true true @@ -723,13 +711,19 @@ true true true + + Список.ИндексКартинки + + + CommonPicture.КоллекцияПиктограммФайлов + Style.BorderColor None None None - SelectionPresentation + SelectionPresentationAndChoice true 60 @@ -1018,6 +1012,9 @@ true + + Список.ИндексКартинкиТекущий + Список.Владелец @@ -1027,9 +1024,6 @@ Список.ИндексКартинки - - Список.ИндексКартинкиТекущий - Список.Код @@ -1060,6 +1054,7 @@ Список.ЭтоТекущая +
      true
      ВЫБРАТЬ РАЗРЕШЕННЫЕ ВерсииФайловПереопределяемый.Код КАК Код, @@ -1069,12 +1064,11 @@ ВерсииФайловПереопределяемый.ДатаСоздания КАК ДатаСоздания, ВерсииФайловПереопределяемый.ПолноеНаименование КАК ПолноеНаименование, ВерсииФайловПереопределяемый.РодительскаяВерсия КАК РодительскаяВерсия, - ВерсииФайловПереопределяемый.ИндексКартинки КАК ИндексКартинки, ВЫБОР КОГДА ВерсииФайловПереопределяемый.ПометкаУдаления ТОГДА ВерсииФайловПереопределяемый.ИндексКартинки + 1 ИНАЧЕ ВерсииФайловПереопределяемый.ИндексКартинки - КОНЕЦ КАК ИндексКартинкиТекущий, + КОНЕЦ КАК ИндексКартинки, ВерсииФайловПереопределяемый.ПометкаУдаления КАК ПометкаУдаления, ВерсииФайловПереопределяемый.Владелец КАК Владелец, ВерсииФайловПереопределяемый.Ссылка КАК Ссылка, @@ -1317,4 +1311,5 @@ + diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Help/ru.html b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Help/ru.html similarity index 100% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Help/ru.html rename to SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Help/ru.html diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl similarity index 91% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl rename to SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl index a14064311..3ff4952fd 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсииФайла/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl @@ -1,12 +1,10 @@ -#Область ОписаниеПеременных - -&НаКлиенте -Перем Ссылка1; - -&НаКлиенте -Перем Ссылка2; - -#КонецОбласти +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -28,7 +26,7 @@ КонецЕсли; ВидимостьКомандыСравнить = - Не ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); + Не ОбщегоНазначения.ЭтоLinuxКлиент() И Не ОбщегоНазначения.ЭтоВебКлиент(); Элементы.ФормаСравнить.Видимость = ВидимостьКомандыСравнить; Элементы.КонтекстноеМенюСписокСравнить.Видимость = ВидимостьКомандыСравнить; @@ -37,10 +35,11 @@ Список.Параметры.УстановитьЗначениеПараметра("Владелец", Параметры.Файл); ВладелецВерсии = Параметры.Файл; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Элементы.ФормаОткрытьВерсию.Картинка = БиблиотекаКартинок.Лупа; Элементы.ФормаОткрытьВерсию.Отображение = ОтображениеКнопки.Картинка; + Элементы.СписокКомментарий.Видимость = Ложь; КонецЕсли; @@ -155,15 +154,15 @@ КонецЕсли; Если ЧислоВыделенныхСтрок = 2 Тогда - Ссылка1 = Элементы.Список.ВыделенныеСтроки[0]; - Ссылка2 = Элементы.Список.ВыделенныеСтроки[1]; + ПервыйФайл = Элементы.Список.ВыделенныеСтроки[0]; + ВторойФайл = Элементы.Список.ВыделенныеСтроки[1]; ИначеЕсли ЧислоВыделенныхСтрок = 1 Тогда - Ссылка1 = Элементы.Список.ТекущиеДанные.Ссылка; - Ссылка2 = Элементы.Список.ТекущиеДанные.РодительскаяВерсия; + ПервыйФайл = Элементы.Список.ТекущиеДанные.Ссылка; + ВторойФайл = Элементы.Список.ТекущиеДанные.РодительскаяВерсия; КонецЕсли; Расширение = НРег(Элементы.Список.ТекущиеДанные.Расширение); - РаботаСФайламиСлужебныйКлиент.СравнитьФайлы(УникальныйИдентификатор, Ссылка1, Ссылка2, Расширение, ВладелецВерсии); + РаботаСФайламиСлужебныйКлиент.СравнитьФайлы(УникальныйИдентификатор, ПервыйФайл, ВторойФайл, Расширение, ВладелецВерсии); КонецПроцедуры @@ -258,12 +257,11 @@ | ВерсииФайлов.ДатаСоздания КАК ДатаСоздания, | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, | ВерсииФайлов.РодительскаяВерсия КАК РодительскаяВерсия, - | ВерсииФайлов.ИндексКартинки, | ВЫБОР | КОГДА ВерсииФайлов.ПометкаУдаления | ТОГДА ВерсииФайлов.ИндексКартинки + 1 | ИНАЧЕ ВерсииФайлов.ИндексКартинки - | КОНЕЦ КАК ИндексКартинкиТекущий, + | КОНЕЦ КАК ИндексКартинки, | ВерсииФайлов.ПометкаУдаления КАК ПометкаУдаления, | ВерсииФайлов.Владелец КАК Владелец, | ВерсииФайлов.Ссылка КАК Ссылка, diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form index 09acbb2b6..8cadab30f 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form @@ -83,20 +83,294 @@ true false None - - СписокВладелец - 39 + + ГруппаВертикально + 51 + + ГруппаОсновное + 53 + + СписокВладелец + 39 + VeryHigh + true + true + + true + + + Список.Владелец + + + СписокВладелецРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + СписокВладелецКонтекстноеМеню + 40 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокНомерВерсии + 19 + VeryHigh + true + true + + true + + + Список.НомерВерсии + + + СписокНомерВерсииРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СписокНомерВерсииКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + Left + + 11 + true + true + true + true + true + + Style.BorderColor + + Normal + + + + СписокАвтор + 21 + true + true + + true + + + Список.Автор + + + СписокАвторРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + СписокАвторКонтекстноеМеню + 22 + true + + InputField + Enter + true + Left + true + + 15 + true + true + true + true + true + Normal + + + + СписокДатаСоздания + 23 + true + true + + true + + + Список.ДатаСоздания + + + СписокДатаСозданияРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + СписокДатаСозданияКонтекстноеМеню + 24 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + Normal + + + + СписокРазмер + 25 + true + true + + true + + + Список.Размер + + + СписокРазмерРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СписокРазмерКонтекстноеМеню + 26 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Основное</value> + + + ГруппаОсновноеРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + Комментарий + 55 + true + true + + true + + + Список.Комментарий + + + КомментарийРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 56 + true + + LabelField + Enter + true + Left + true + + true + true + + Style.ПоясняющийТекст + + + true true true - - Список.Владелец - + + <key>ru</key> + <value>Вертикально</value> + - СписокВладелецРасширеннаяПодсказка - 41 + ГруппаВертикальноРасширеннаяПодсказка + 52 Label true true @@ -104,187 +378,11 @@ Left - - СписокВладелецКонтекстноеМеню - 40 - true - - LabelField - Enter - true - Left - true - - true - true - -
      - - СписокНомерВерсии - 19 - true - true - - true - - - Список.НомерВерсии - - - СписокНомерВерсииРасширеннаяПодсказка - 28 - Label - true - true - - Left - - - - СписокНомерВерсииКонтекстноеМеню - 20 - true - - InputField - Enter - true - Left - true - Left - - 11 - true - true - true - true - true - - Style.BorderColor - - Normal - - - - СписокАвтор - 21 - true - true - - true - - - Список.Автор - - - СписокАвторРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - - СписокАвторКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - - 15 - true - true - true - true - true - Normal - - - - СписокДатаСоздания - 23 - true - true - - true - - - Список.ДатаСоздания - - - СписокДатаСозданияРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - СписокДатаСозданияКонтекстноеМеню - 24 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal - - - - СписокРазмер - 25 - true - true - - true - - - Список.Размер - - - СписокРазмерРасширеннаяПодсказка - 31 - Label - true - true - - Left - - - - СписокРазмерКонтекстноеМеню - 26 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal + ColumnGroup + + Vertical + auto + true @@ -430,7 +528,6 @@ AutoUse true true - false Auto Auto true @@ -473,6 +570,11 @@ true auto true + + + КоманднаяПанель + + Список 1 @@ -494,10 +596,11 @@ ВерсииФайлов.Ссылка КАК Ссылка, ВерсииФайлов.Владелец КАК Владелец, ВерсииФайлов.ПометкаУдаления КАК ПометкаУдаления, - ВерсииФайлов.НомерВерсии, - ВерсииФайлов.Размер, - ВерсииФайлов.Автор, - ВерсииФайлов.ДатаСоздания + ВерсииФайлов.НомерВерсии КАК НомерВерсии, + ВерсииФайлов.Размер КАК Размер, + ВерсииФайлов.Автор КАК Автор, + ВерсииФайлов.ДатаСоздания КАК ДатаСоздания, + ВерсииФайлов.Комментарий КАК Комментарий ИЗ Справочник.ВерсииФайлов КАК ВерсииФайлов Catalog.ВерсииФайлов diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl index 45a32eaf5..da0175487 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -24,6 +32,10 @@ ЭлементОтбораДанных.ПравоеЗначение = Истина; ЭлементОтбораДанных.Использование = Истина; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Комментарий.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form index ac65ab863..7f7434cb3 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form @@ -162,24 +162,342 @@ Copy Create Delete - - СписокПолноеНаименование - 8 + + ГруппаВертикально + 64 + + ГруппаОсновное + 66 + VeryHigh + + СписокПолноеНаименование + 8 + VeryHigh + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + Список.ПолноеНаименование + + + СписокПолноеНаименованиеРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + СписокПолноеНаименованиеКонтекстноеМеню + 9 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокРасширение + 30 + true + true + + + Список.Расширение + + + СписокРасширениеРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + СписокРасширениеКонтекстноеМеню + 31 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокВладелец + 16 + true + true + + + Список.Owner + + + СписокВладелецРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + СписокВладелецКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокАвтор + 18 + true + true + + true + + + Список.Автор + + + СписокАвторРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + СписокАвторКонтекстноеМеню + 19 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокДатаСоздания + 22 + true + true + + true + + + Список.ДатаСоздания + + + СписокДатаСозданияРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + СписокДатаСозданияКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокРазмер + 24 + true + true + + true + + + Список.Размер + + + СписокРазмерРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + СписокРазмерКонтекстноеМеню + 25 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокНомерВерсии + 26 + true + true + + true + + + Список.НомерВерсии + + + СписокНомерВерсииРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + СписокНомерВерсииКонтекстноеМеню + 27 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Основное</value> + + + ГруппаОсновноеРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + СписокКомментарий + 20 + true + true + + true + + + Список.Комментарий + + + СписокКомментарийРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + СписокКомментарийКонтекстноеМеню + 21 + true + + LabelField + Enter + true + Left + true + + true + true + + Style.ПоясняющийТекст + + + + true + true + + true + <key>ru</key> - <value>Наименование</value> + <value>Вертикально</value> - true - true - - true - - - Список.ПолноеНаименование - - СписокПолноеНаименованиеРасширеннаяПодсказка - 39 + ГруппаВертикальноРасширеннаяПодсказка + 65 Label true true @@ -187,301 +505,13 @@ Left - - СписокПолноеНаименованиеКонтекстноеМеню - 9 - true - - LabelField - Enter - true - Left - true - - true - true + ColumnGroup + + Vertical + auto + true - - СписокРасширение - 30 - true - true - - - Список.Расширение - - - СписокРасширениеРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - - СписокРасширениеКонтекстноеМеню - 31 - true - - LabelField - Enter - true - Left - true - - true - true - - - - СписокВладелец - 16 - true - true - - - Список.Owner - - - СписокВладелецРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - - СписокВладелецКонтекстноеМеню - 17 - true - - LabelField - Enter - true - Left - true - - true - true - - - - СписокАвтор - 18 - true - true - - true - - - Список.Автор - - - СписокАвторРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - - СписокАвторКонтекстноеМеню - 19 - true - - LabelField - Enter - true - Left - true - - true - true - - - - СписокКомментарий - 20 - true - true - - true - - - Список.Комментарий - - - СписокКомментарийРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - - СписокКомментарийКонтекстноеМеню - 21 - true - - LabelField - Enter - true - Left - true - - true - 1 - true - - - - СписокДатаСоздания - 22 - true - true - - true - - - Список.ДатаСоздания - - - СписокДатаСозданияРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - - СписокДатаСозданияКонтекстноеМеню - 23 - true - - LabelField - Enter - true - Left - true - - true - true - - - - СписокРазмер - 24 - true - true - - true - - - Список.Размер - - - СписокРазмерРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - - СписокРазмерКонтекстноеМеню - 25 - true - - LabelField - Enter - true - Left - true - - true - true - - - - СписокНомерВерсии - 26 - true - true - - true - - - Список.НомерВерсии - - - СписокНомерВерсииРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - - СписокНомерВерсииКонтекстноеМеню - 27 - true - - LabelField - Enter - true - Left - true - - true - true - - - - СписокПометкаУдаления - 28 - true - true - - - Список.DeletionMark - - - СписокПометкаУдаленияРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - - СписокПометкаУдаленияКонтекстноеМеню - 29 - true - - CheckBoxField - Enter - true - Left - true - - СписокСсылка 48 @@ -775,6 +805,11 @@ true auto true + + + КоманднаяПанель + + Список 1 diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl index 87d3657f0..cd0245f63 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -21,6 +28,10 @@ ЭлементОтбораДанных.ПравоеЗначение = Истина; ЭлементОтбораДанных.Использование = Истина; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.СписокКомментарий.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl index eadfa03cb..63361ecf0 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -36,6 +44,8 @@ |ГДЕ | ИзменениеОбъектаРазрешено(Владелец.ВладелецФайла)"; + Ограничение.ТекстДляВнешнихПользователей = Ограничение.Текст; + КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом @@ -44,8 +54,6 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -56,3 +64,5 @@ КонецПроцедуры #КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl index af52f1ab5..e82bae270 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -20,10 +28,6 @@ РодительскаяВерсия = Владелец.ТекущаяВерсия; КонецЕсли; - Если Не ЭтоНовый() Тогда - УстановленаПометкаУдаления = ПометкаУдаления И Не ПометкаУдаленияВИБ(); - КонецЕсли; - // Выполним установку индекса пиктограммы при записи объекта. ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); @@ -103,7 +107,7 @@ Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка удаления файла.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,, Файл, ОписаниеОшибки()); @@ -122,37 +126,6 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции - -// Возвращает текущее значение пометки удаления в информационной базе. -Функция ПометкаУдаленияВИБ() - - УстановитьПривилегированныйРежим(Истина); - ИмяСправочникаВерсийФайлов = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).Имя; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.ПометкаУдаления - |ИЗ - | Справочник." + ИмяСправочникаВерсийФайлов + " КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.Ссылка = &Ссылка"; - - Запрос.УстановитьПараметр("Ссылка", Ссылка); - - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Возврат Выборка.ПометкаУдаления; - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -#КонецОбласти - +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo b/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo index ffcf7496c..e5e24dfb5 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo +++ b/SSL/src/Catalogs/ВерсииФайлов/ВерсииФайлов.mdo @@ -148,6 +148,7 @@ Автор + CatalogRef.ВнешниеПользователи CatalogRef.УчетныеЗаписиСинхронизацииФайлов CatalogRef.Пользователи @@ -776,4 +777,18 @@ PersonalComputer MobileDevice + + ВерсииФайла + + ru + Версии файла + + + + ru + + + PersonalComputer + MobileDevice + diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl index 75e3ea90e..a045524ac 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form index a53da3f19..16007c563 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form @@ -32,34 +32,6 @@ Auto - - КоманднаяПанель - 44 - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - КоманднаяПанельРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - CommandBar - - Left - Form - - Список 1 @@ -80,112 +52,25 @@ None CreateFolder MoveItem - - Представление - 40 - - Пиктограмма - 28 - - <key>ru</key> - <value>Пиктограмма</value> - - true - true - - true - - - Список.ИндексПиктограммы - - None - - ПиктограммаРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - - ПиктограммаКонтекстноеМеню - 29 - true - - PictureField - Enter - true - Left - true - - 2 - true - true - true - true - - CommonPicture.ВидыКонтактнойИнформации - - - - 1 - - - - - Наименование - 37 - - <key>ru</key> - <value>Вид контактной информации</value> - - true - true - - true - - - Список.Description - - - НаименованиеРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - - НаименованиеКонтекстноеМеню - 38 - true - - LabelField - Enter - true - Left - true - - true - true - - + + Наименование + 37 + VeryHigh + + <key>ru</key> + <value>Вид контактной информации</value> + true true true - - <key>ru</key> - <value>Представление</value> - + + Список.Наименование + - ПредставлениеРасширеннаяПодсказка - 41 + НаименованиеРасширеннаяПодсказка + 39 Label true true @@ -193,11 +78,20 @@ Left - ColumnGroup - - InCell - auto - true + + НаименованиеКонтекстноеМеню + 38 + true + + LabelField + Enter + true + Left + true + + true + true + false @@ -354,10 +248,15 @@ ExpandAllLevels true true + + Список.ИндексПиктограммы + + + CommonPicture.ВидыКонтактнойИнформации + Style.BorderColor - SelectionPresentationAndChoice true 60 @@ -370,12 +269,11 @@ ГруппаПользовательскихНастроек - Top - true ФормаКоманднаяПанель -1 Left + true OnCreateAtServer @@ -468,7 +366,11 @@ СправочникВидыКонтактнойИнформации.Предопределенный, СправочникВидыКонтактнойИнформации.Родитель, СправочникВидыКонтактнойИнформации.ЭтоГруппа, - СправочникВидыКонтактнойИнформации.Наименование, + ВЫБОР + КОГДА &ЭтоОсновнойЯзык + ТОГДА СправочникВидыКонтактнойИнформации.Наименование + ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ВидыКонтактнойИнформацииПредставления.Наименование, СправочникВидыКонтактнойИнформации.Наименование) КАК СТРОКА(150)) + КОНЕЦ КАК Наименование, СправочникВидыКонтактнойИнформации.Тип, СправочникВидыКонтактнойИнформации.РеквизитДопУпорядочивания, СправочникВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге, @@ -477,6 +379,9 @@ СправочникВидыКонтактнойИнформации.Используется ИЗ Справочник.ВидыКонтактнойИнформации КАК СправочникВидыКонтактнойИнформации + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКонтактнойИнформации.Представления КАК ВидыКонтактнойИнформацииПредставления + ПО (ВидыКонтактнойИнформацииПредставления.Ссылка = СправочникВидыКонтактнойИнформации.Ссылка) + И ВидыКонтактнойИнформацииПредставления.КодЯзыка = &КодЯзыка ГДЕ СправочникВидыКонтактнойИнформации.Используется И ЕстьNULL(СправочникВидыКонтактнойИнформации.Родитель.Используется, Истина) diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl index 8ee190726..ea368a741 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -14,19 +21,8 @@ ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Для каждого ЭлементФормы Из Элементы.КоманднаяПанель.ПодчиненныеЭлементы Цикл - - Элементы.Переместить(ЭлементФормы, Элементы.ФормаКоманднаяПанель); - - КонецЦикла; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь); - - КонецЕсли; + Список.Параметры.УстановитьЗначениеПараметра("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); + Список.Параметры.УстановитьЗначениеПараметра("КодЯзыка", ТекущийЯзык().КодЯзыка); КонецПроцедуры @@ -67,7 +63,6 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды - #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form index c9be1d101..e0fb60607 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form.form @@ -121,6 +121,10 @@ Left true + + Opening + НаименованиеОткрытие + true true true @@ -1168,6 +1172,10 @@ AfterWriteAtServer ПослеЗаписиНаСервере + + OnReadAtServer + ПриЧтенииНаСервере + BeforeWriteAtServer ПередЗаписьюНаСервере diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html index c20f614ef..4108b98f6 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html @@ -10,7 +10,7 @@
    • Адрес электронной почты - поле с таким типом контактной информации предназначено для хранения адреса электронной почты. Реквизит используется при отправке электронных писем из программы.
    • -
      Веб-страница - поле с таким типом контактной информации предназначено для хранения адресов веб страниц.
      +
      Веб-страница - поле с таким типом контактной информации предназначено для хранения адресов веб страниц. Позволяет прикрепить гиперссылки на интернет-страницы, после этого ссылки будут храниться в базе с возможностью перехода по ним.
    • Факс - поле с таким типом контактной информации предназначено для хранения номеров факсов в виде произвольной строки, или в соответствии с шаблоном ввода номера факса. Реквизит используется в печатных формах документов.
    • diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl index f5aa52b14..5328fb3a8 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -32,7 +40,7 @@ Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; Элементы.РазрешитьВводНесколькихЗначений.Доступность = Ложь; Элементы.ГруппаНаименованиеНастройкиПоТипам.Доступность = Ложь; - Элементы.ХранитьИсториюИзменений.Доступность = Ложь; + Элементы.ХранитьИсториюИзменений.Доступность = Ложь; КонецЕсли; Элементы.ГруппаХранитьИсториюИзменений.Видимость = Ложь; @@ -62,6 +70,8 @@ ДоступныДополнительныеНастройкиАдреса = (Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено И Метаданные.Обработки["РасширенныйВводКонтактнойИнформации"].Формы.Найти("НастройкиАдреса") <> Неопределено); + + ЛокализацияСервер.ПриСозданииНаСервере(Элементы.Наименование); КонецПроцедуры @@ -70,6 +80,13 @@ ИзменитьОтображениеПриИзмененииТипа(); КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + +КонецПроцедуры + &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) @@ -77,6 +94,8 @@ Отказ = Истина; КонецЕсли; + ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); + КонецПроцедуры &НаСервере @@ -90,6 +109,8 @@ КонецЕсли; КонецЕсли; + ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецПроцедуры &НаСервере @@ -164,6 +185,13 @@ КонецПроцедуры +&НаКлиенте +Процедура НаименованиеОткрытие(Элемент, СтандартнаяОбработка) + + ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Наименование", СтандартнаяОбработка); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -183,7 +211,9 @@ &НаКлиенте Процедура ДополнительныеНастройкиАдреса(Команда) ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПослеЗакрытияФормыНастроекАдреса", ЭтотОбъект); - ПараметрыФормы = Новый Структура("Объект", Объект); + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("Объект", Объект); + ПараметрыФормы.Вставить("ТолькоПросмотр", ЭтотОбъект.ТолькоПросмотр); ИмяФормыНастройкиАдреса = "Обработка.РасширенныйВводКонтактнойИнформации.Форма.НастройкиАдреса"; ОткрытьФорму(ИмяФормыНастройкиАдреса, ПараметрыФормы,,,,, ОповещениеОЗакрытие); КонецПроцедуры @@ -216,6 +246,10 @@ ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Другое") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Другое; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; + ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда + Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Прочие; + Элементы.РедактированиеТолькоВДиалоге.Видимость = Ложь; + Элементы.ГруппаХранитьИсториюИзменений.Видимость = Ложь; Иначе Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Прочие; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl index a528ad0cd..499a49619 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -41,7 +49,19 @@ #КонецОбласти -#Область ОбработчикиОбновления +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); +КонецПроцедуры + +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции // Регистрирует к обработке виды контактной информации другое у которых необходимо заполнить поле ВидПоляДругое. // diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl index f24c3f089..550266da0 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl @@ -1,8 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; @@ -13,8 +22,12 @@ Отказ = Истина; ВызватьИсключение Результат.ТекстОшибки; КонецЕсли; + ИмяГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Родитель, "ИмяПредопределенногоВида"); + Если ПустаяСтрока(ИмяГруппы) Тогда + ИмяГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Родитель, "ИмяПредопределенныхДанных"); + КонецЕсли; КонецЕсли; - + КонецПроцедуры Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) @@ -31,4 +44,16 @@ #КонецОбласти +#Область ОбработчикиСобытий + +Процедура ПриЧтенииПредставленийНаСервере() Экспорт + + ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo index 12b6d5372..e8e2c9657 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo @@ -88,6 +88,18 @@ Use Description + + ru + Наименование + + + en + Name + + + de + Benennung + ru Наименование вида контактной информации @@ -122,7 +134,7 @@ true 3 true - 100 + 150 String AsDescription @@ -189,6 +201,7 @@ ru Внешний вид поля другое на форме + true @@ -534,6 +547,108 @@ Use Use + + ИмяПредопределенногоВида + + ru + Имя предопределенного вида + + + String + + 150 + + + + + + Use + ForFolderAndItem + Use + + + ИмяГруппы + + ru + Имя группы + + + String + + 150 + + + + + + Use + Use + + + + + + + Представления + + ru + Представления + + + Use + LineNumber + + Use + + + + + КодЯзыка + + ru + Код языка + + + String + + 10 + + + + ru + Код языка представления реквизита + + + + ShowError + Use + Index + Use + + + Наименование + + ru + Наименование + + + String + + 150 + + + + ru + Представление реквизита на другом языке + + + + Use + Index + Use + + ForFolderAndItem + ФормаСписка diff --git a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Module.bsl index eb1df4a90..ca4c221fe 100644 --- a/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl b/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl index b59bb06c4..556f804ca 100644 --- a/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыПроверок/ManagerModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда diff --git a/SSL/src/Catalogs/ВидыПроверок/ObjectModule.bsl b/SSL/src/Catalogs/ВидыПроверок/ObjectModule.bsl index 8b1378917..e69de29bb 100644 --- a/SSL/src/Catalogs/ВидыПроверок/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВидыПроверок/ObjectModule.bsl @@ -1 +0,0 @@ - diff --git a/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo b/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo index 64b4ae2a7..0a69eff0d 100644 --- a/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo +++ b/SSL/src/Catalogs/ВидыПроверок/ВидыПроверок.mdo @@ -329,10 +329,6 @@ 128 - - ru - Имя свойства. - Use @@ -359,10 +355,6 @@ - - ru - Значение свойства. - Use diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl index f2be08130..eec441656 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl index 6266f6a72..77d4a9dcc 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Module.bsl index d9f29a67e..f4e4f1dee 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -10,6 +17,16 @@ Возврат; КонецЕсли; + Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.ВнешниеКомпоненты) Тогда + + Элементы.ФормаОбновитьИзФайла.Видимость = Ложь; + Элементы.ФормаСохранитьКак.Видимость = Ложь; + Элементы.ОбновитьСПортала1СИТС.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюОбновитьИзФайла.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюСохранитьКак.Видимость = Ложь; + + КонецЕсли; + Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала() Тогда Элементы.ОбновлятьСПортала1СИТС.Видимость = Ложь; diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl index df7a2e910..15105a768 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -20,9 +27,17 @@ Если ЭтоНовый Тогда Параметры.ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии = Истина; КонецЕсли; - + УстановитьВидимостьДоступность(); + Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.ВнешниеКомпоненты) Тогда + + Элементы.ФормаОбновитьИзФайла.Видимость = Ложь; + Элементы.ФормаСохранитьКак.Видимость = Ложь; + Элементы.ОбновитьСПортала1СИТС.Видимость = Ложь; + + КонецЕсли; + Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала() Тогда Элементы.ОбновлятьСПортала1СИТС.Видимость = Ложь; @@ -212,31 +227,29 @@ Возврат; КонецЕсли; - ПараметрыДиалога = Новый Структура; - ПараметрыДиалога.Вставить("Режим", РежимДиалогаВыбораФайла.Открытие); - ПараметрыДиалога.Вставить("Заголовок", НСтр("ru = 'Выберите файл внешней компоненты'")); - ПараметрыДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя компонента (*.zip)|*.zip|Все файлы(*.*)|*.*'")); - Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеПомещенияФайла", ЭтотОбъект, Контекст); - СтандартныеПодсистемыКлиент.ПоказатьПомещениеФайла(Оповещение, - УникальныйИдентификатор, Объект.ИмяФайла, ПараметрыДиалога); + + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Внешняя компонента (*.zip)|*.zip|Все файлы(*.*)|*.*'"); + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл внешней компоненты'"); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + + ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки, Объект.ИмяФайла); КонецПроцедуры // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. &НаКлиенте -Процедура ЗагрузитьКомпонентуПослеПомещенияФайла(ПомещенныеФайлы, Контекст) Экспорт +Процедура ЗагрузитьКомпонентуПослеПомещенияФайла(ПомещенныйФайл, Контекст) Экспорт - Если ПомещенныеФайлы = Неопределено Или ПомещенныеФайлы.Количество() = 0 Тогда + Если ПомещенныйФайл = Неопределено Тогда ЗагрузитьКомпонентуПриОтображенииОшибки(НСтр("ru = 'Файл не удалось загрузить на сервер.'")); Возврат; КонецЕсли; - ОписаниеФайла = ПомещенныеФайлы[0]; - ПараметрыЗагрузки = Новый Структура; - ПараметрыЗагрузки.Вставить("АдресХранилищаФайла", ОписаниеФайла.Хранение); - ПараметрыЗагрузки.Вставить("ИмяФайла", ТолькоИмяФайла(ОписаниеФайла.Имя)); + ПараметрыЗагрузки.Вставить("АдресХранилищаФайла", ПомещенныйФайл.Хранение); + ПараметрыЗагрузки.Вставить("ИмяФайла", ТолькоИмяФайла(ПомещенныйФайл.Имя)); Результат = ЗагрузитьКомпонентуИзФайлаНаСервере(ПараметрыЗагрузки); Если Результат.Загружена И ЭтоАдресВременногоХранилища(АдресДвоичныхДанныхКомпоненты)Тогда @@ -432,7 +445,6 @@ // Доступность кнопки Сохранить в файл Элементы.ФормаСохранитьКак.Доступность = Не ЭтоНовый; - Элементы.ОбновитьСПортала1СИТС.Доступность = Не ЭтоНовый; // Зависимость использования и автоматического обновления. КомпонентаОтключена = (Объект.Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена); diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl index 5fe05311a..8eba03d5c 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl index f3cbc7da6..39d17ac8b 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -61,13 +69,15 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.Текст = "ВЫБРАТЬ | МАКСИМУМ(ВнешниеКомпоненты.ДатаВерсии) КАК ДатаВерсии |ИЗ | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты |ГДЕ - | ВнешниеКомпоненты.Идентификатор = &Идентификатор"; + | ВнешниеКомпоненты.Идентификатор = &Идентификатор + | И ВнешниеКомпоненты.Ссылка <> &Ссылка"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); @@ -124,4 +134,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo b/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo index 771120f10..880d5639e 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ВнешниеКомпоненты.mdo @@ -252,10 +252,6 @@ Boolean - - ru - Обновлять с Портала 1С:ИТС - diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl index 755dc70e1..4a259120b 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form index 84df55c6e..4fe16bbf5 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form @@ -142,11 +142,13 @@ Form.Command.ЗавершитьИЗакрыть - Auto true true true UserCmds + + StdPicture.WriteAndClose + Auto @@ -579,7 +581,7 @@ - Группа + ГруппаСодержимое 24 ГруппыИПользователи @@ -850,6 +852,7 @@ CommonPicture.СостоянияПользователей + SelectionPresentationAndChoice true 60 @@ -985,7 +988,7 @@ <key>ru</key> - <value>Группы</value> + <value>Группы пользователей</value> ГруппаГруппыExtendedTooltip @@ -1845,10 +1848,10 @@ <key>ru</key> - <value>Группа</value> + <value>Содержимое</value> - ГруппаExtendedTooltip + ГруппаСодержимоеРасширеннаяПодсказка 109 Label true @@ -2244,6 +2247,11 @@ true auto true + + + КоманднаяПанель + + ВнешниеПользователиСписок diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index 0c7b1ca9e..3f001e9b3 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // ИСПОЛЬЗОВАНИЕ ФОРМЫ // // @@ -56,7 +64,7 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( ВнешниеПользователиСписок, "ИдентификаторПользователяИБ", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(), ВидСравненияКомпоновкиДанных.НеРавно); КонецЕсли; @@ -81,11 +89,6 @@ ХранимыеПараметры.Вставить("ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); - Если Не ПравоДоступа("Добавление", Метаданные.Справочники.ВнешниеПользователи) Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "СоздатьВнешнегоПользователя", "Видимость", Ложь); - КонецЕсли; - Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыВнешнихПользователей) Тогда Элементы.ВнешниеПользователиСписокКонтекстноеМенюНазначитьГруппы.Видимость = Ложь; Элементы.НазначитьГруппы.Видимость = Ложь; @@ -160,7 +163,7 @@ ОписаниеОбъекта = Новый Структура; ОписаниеОбъекта.Вставить("Ссылка", Справочники.Пользователи.ПустаяСсылка()); - ОписаниеОбъекта.Вставить("ИдентификаторПользователяИБ", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОписаниеОбъекта.Вставить("ИдентификаторПользователяИБ", ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(ОписаниеОбъекта); Если Не УровеньДоступа.УправлениеСписком Тогда @@ -172,6 +175,9 @@ ТолькоПросмотр = Истина; КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ЗавершитьИЗакрыть.Отображение = ОтображениеКнопки.Картинка; + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -181,6 +187,12 @@ ПроверкаИзмененияТекущегоЭлементаФормы(); КонецЕсли; + #Если МобильныйКлиент Тогда + Если ХранимыеПараметры.Свойство("ИспользоватьГруппы") И ХранимыеПараметры.ИспользоватьГруппы Тогда + Элементы.ГруппаГруппы.Заголовок = Строка(Элементы.ГруппыВнешнихПользователей.ТекущиеДанные.Ссылка); + КонецЕсли; +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -260,6 +272,13 @@ ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтотОбъект); +#Если МобильныйКлиент Тогда + Если ХранимыеПараметры.Свойство("РасширенныйПодбор") И Не ХранимыеПараметры.РасширенныйПодбор Тогда + Элементы.ГруппаГруппы.Заголовок = Строка(Элементы.ГруппыВнешнихПользователей.ТекущиеДанные.Ссылка); + ТекущийЭлемент = Элементы.ВнешниеПользователиСписок; + КонецЕсли; +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -696,7 +715,7 @@ ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ВозможноСменитьТолькоСвойПароль", Не Пользователи.ЭтоПолноправныйПользователь()); @@ -819,7 +838,15 @@ Элементы.ВыбранныеПользователиИГруппы.Видимость = Истина; ИспользоватьГруппыПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"); Элементы.ГруппаВыбратьГруппу.Видимость = ИспользоватьГруппыПользователей; - Если ИспользоватьГруппыПользователей Тогда + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ГруппыИПользователи.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + Элементы.ГруппыИПользователи.ВажностьПриОтображении = ВажностьПриОтображении.ОченьВысокая; + Элементы.ГруппаСодержимое.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + Элементы.ГруппаВыбратьГруппу.Видимость = Ложь; + Элементы.ГруппаВыбратьПользователя.Видимость = Ложь; + Элементы.Переместить(Элементы.ВыбранныеПользователиИГруппы, Элементы.ГруппаСодержимое, Элементы.ВыбранныеПользователиИГруппы); + ИначеЕсли ИспользоватьГруппыПользователей Тогда Элементы.ГруппыИПользователи.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; Элементы.ВнешниеПользователиСписок.Высота = 5; Элементы.ГруппыВнешнихПользователей.Высота = 3; diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form index fe883d85e..1c7dea4a8 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form @@ -1996,11 +1996,13 @@ </extInfo> </extendedTooltip> <commandName>Form.Command.ЗаписатьИЗакрыть</commandName> - <representation>PictureAndText</representation> <defaultButton>true</defaultButton> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.WriteAndClose</picture> + </picture> <representationInContextMenu>Auto</representationInContextMenu> </items> <items xsi:type="form:FormGroup"> @@ -3000,7 +3002,6 @@ </handler> </action> <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> - <modifiesStoredData>true</modifiesStoredData> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -3020,7 +3021,6 @@ </handler> </action> <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> - <modifiesStoredData>true</modifiesStoredData> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index 45a484aa8..b6005ed74 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -133,6 +140,10 @@ Элементы.ПотребоватьСменуПароляПриВходе.РасширеннаяПодсказка.Заголовок = ПользователиСлужебный.ПодсказкаПотребоватьСменуПароляПриВходе(Истина); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ФормаЗаписатьИЗакрыть.Отображение = ОтображениеКнопки.Картинка; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -234,7 +245,21 @@ И ДействияВФорме.СвойстваЭлемента <> "Редактирование" И ДействияВФорме.СвойстваПользователяИБ <> "Редактирование"; - ПользователиСлужебныйКлиентСервер.УстановитьДоступностьКнопкиЗаписатьИЗакрыть(ЭтотОбъект); + + ДоступностьКнопки = Не ТолькоПросмотр И ПравоДоступа("Редактирование", + Метаданные.Справочники.ВнешниеПользователи); + + Если Элементы.ФормаЗаписатьИЗакрыть.Доступность <> ДоступностьКнопки Тогда + Элементы.ФормаЗаписатьИЗакрыть.Доступность = ДоступностьКнопки; + КонецЕсли; + + Если Элементы.ИзменитьОграничениеНаВходВПрограмму.Доступность <> ДоступностьКнопки Тогда + Элементы.ИзменитьОграничениеНаВходВПрограмму.Доступность = ДоступностьКнопки; + КонецЕсли; + + Если Элементы.СменитьПароль.Доступность <> ДоступностьКнопки Тогда + Элементы.СменитьПароль.Доступность = ДоступностьКнопки; + КонецЕсли; Элементы.РекомендуетсяПроверитьНастройкиДляВхода.Видимость = УровеньДоступа.ИзменениеРазрешенияНаВход @@ -407,7 +432,7 @@ Если ПользователиСлужебный.ОбъектАвторизацииИспользуется( Объект.ОбъектАвторизации, Объект.Ссылка, , , ТекстОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( ТекстОшибки, , "Объект.ОбъектАвторизации", , Отказ); КонецЕсли; @@ -415,18 +440,18 @@ И ЗначениеЗаполнено(СрокДействия) И СрокДействия <= НачалоДня(ТекущаяДатаСеанса()) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Ограничение должно быть до завтра или более.'"),, "ВходВПрограммуРазрешен",, Отказ); КонецЕсли; Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ОписаниеПользователяИБ = ОписаниеПользователяИБ(); ОписаниеПользователяИБ.Вставить("ИдентификаторПользователяИБ", Объект.ИдентификаторПользователяИБ); - ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(ОписаниеПользователяИБ, Отказ); + ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(ОписаниеПользователяИБ, Отказ, Истина); ТекстСообщения = ""; Если ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора(Неопределено, ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( ТекстСообщения, , "ВходВПрограммуРазрешен", , Отказ); КонецЕсли; КонецЕсли; @@ -722,7 +747,6 @@ Процедура ОбновитьИмяДляВхода(Форма, ПриИзмененииНаименования = Ложь) Элементы = Форма.Элементы; - Объект = Форма.Объект; Если Форма.ПользовательИБСуществует Тогда Возврат; @@ -772,18 +796,22 @@ Возврат; КонецЕсли; + Модифицированность = Истина; + ПользовательИБПароль = Результат.НовыйПароль; ПользовательИБСтарыйПароль = Результат.СтарыйПароль; - УстановитьНаличиеПароля(ЭтотОбъект, ЗначениеЗаполнено(ПользовательИБПароль)); + УстановитьНаличиеПароля(ЭтотОбъект, ЗначениеЗаполнено(ПользовательИБПароль), + ПользователиКлиент.АвторизованныйПользователь()); + УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен) +Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен, АвторизованныйПользователь) - ПользователиСлужебныйКлиентСервер.УстановитьНаличиеПароля(Форма, ПарольУстановлен); + ПользователиСлужебныйКлиентСервер.УстановитьНаличиеПароля(Форма, ПарольУстановлен, АвторизованныйПользователь); КонецПроцедуры @@ -1078,7 +1106,7 @@ |Роли")); КонецЕсли; Объект.ИдентификаторПользователяИБ = Неопределено; - УстановитьНаличиеПароля(ЭтотОбъект, Ложь); + УстановитьНаличиеПароля(ЭтотОбъект, Ложь, Пользователи.АвторизованныйПользователь()); Иначе ПрочитанныеСвойства = Пользователи.СвойстваПользователяИБ(Объект.ИдентификаторПользователяИБ); Если ПрочитанныеСвойства <> Неопределено Тогда @@ -1138,9 +1166,11 @@ КонецЕсли; Если ПрочитанныеСвойства = Неопределено Тогда - УстановитьНаличиеПароля(ЭтотОбъект, Ложь); + УстановитьНаличиеПароля(ЭтотОбъект, Ложь, + Пользователи.АвторизованныйПользователь()); Иначе - УстановитьНаличиеПароля(ЭтотОбъект, ПрочитанныеСвойства.ПарольУстановлен); + УстановитьНаличиеПароля(ЭтотОбъект, ПрочитанныеСвойства.ПарольУстановлен, + Пользователи.АвторизованныйПользователь()); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl index fa8d70d56..4afc01706 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -49,8 +57,6 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) @@ -71,7 +77,7 @@ НайденныйВнешнийПользователь = Неопределено; ЕстьПравоДобавленияВнешнегоПользователя = Ложь; - ОбъектАвторизацииИспользуется = ПользователиСлужебныйВызовСервера.ОбъектАвторизацииИспользуется( + ОбъектАвторизацииИспользуется = ПользователиСлужебный.ОбъектАвторизацииИспользуется( Параметры.ОбъектАвторизации, Неопределено, НайденныйВнешнийПользователь, @@ -97,3 +103,5 @@ КонецПроцедуры #КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl index 5d00882bf..ba5692ef6 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -71,7 +79,7 @@ И ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя) Тогда Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей"); + Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей"); Блокировка.Заблокировать(); ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя.ПолучитьОбъект(); @@ -153,4 +161,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo index a81aad5aa..b080b0d05 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo +++ b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo @@ -103,9 +103,9 @@ <characteristics> <characteristicTypes>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты</characteristicTypes> <keyField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство</keyField> - <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref</typesFilterField> - <typesFilterValue xsi:type="core:ReferenceValue"> - <value>Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_ВнешниеПользователи</value> + <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора</typesFilterField> + <typesFilterValue xsi:type="core:StringValue"> + <value>Справочник_ВнешниеПользователи</value> </typesFilterValue> <dataPathField>-1</dataPathField> <multipleValuesUseField>-1</multipleValuesUseField> @@ -119,9 +119,9 @@ <characteristics> <characteristicTypes>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения</characteristicTypes> <keyField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство</keyField> - <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref</typesFilterField> - <typesFilterValue xsi:type="core:ReferenceValue"> - <value>Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_ВнешниеПользователи</value> + <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора</typesFilterField> + <typesFilterValue xsi:type="core:StringValue"> + <value>Справочник_ВнешниеПользователи</value> </typesFilterValue> <dataPathField>-1</dataPathField> <multipleValuesUseField>-1</multipleValuesUseField> diff --git a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl index 12df898c7..7c24de3b0 100644 --- a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl index 849dfe2b2..9b62bbaec 100644 --- a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -14,4 +22,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl index abfeb8fe5..ce85a0ebc 100644 --- a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo index 8ee743308..c516600d7 100644 --- a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo @@ -477,6 +477,7 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> <fillValue xsi:type="core:UndefinedValue"/> <indexing>Index</indexing> <dataHistory>Use</dataHistory> diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Commands/ГруппыВнешнегоПользователя/CommandModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Commands/ГруппыВнешнегоПользователя/CommandModule.bsl index cd091a6bc..5f7289bcd 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Commands/ГруппыВнешнегоПользователя/CommandModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Commands/ГруппыВнешнегоПользователя/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl index 798117307..1919d1ed7 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl index f031ed388..a48cc6b11 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl index 6d45ac7c5..e45882938 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl index 07d54e3eb..7a4ec49c9 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -407,4 +415,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl index da3cea09d..e16763382 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl index bcc844531..a67354634 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl index bef5eed71..b0a496857 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -53,7 +60,7 @@ Если Объект.Ссылка <> РодительПерсональныхГруппДоступа И Объект.Наименование = НаименованиеПерсональныхГруппДоступа Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Это наименование зарезервировано.'"), , "Объект.Наименование", diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl index a103328de..761d5167d 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -51,8 +58,6 @@ Элементы.Профиль.Видимость = Ложь; КонецЕсли; - СписокНедоступныхГрупп = Новый СписокЗначений; - Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда // Скрытие группы доступа Администраторы. ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index d22b53e0c..ad29d8efa 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -61,7 +68,8 @@ КонецЕсли; КонецЕсли; - ПользователиСлужебныйКлиентСервер.УстановитьДоступностьКнопкиЗаписатьИЗакрыть(ЭтотОбъект); + Элементы.ФормаЗаписатьИЗакрыть.Доступность = Не ТолькоПросмотр + И ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыДоступа); КонецПроцедуры @@ -71,7 +79,7 @@ Если ОтветНаВопросПриОткрытииФормы = "УстановитьТолькоПросмотр" Тогда ОтветНаВопросПриОткрытииФормы = ""; ТолькоПросмотр = Истина; - ПользователиСлужебныйКлиентСервер.УстановитьДоступностьКнопкиЗаписатьИЗакрыть(ЭтотОбъект); + Элементы.ФормаЗаписатьИЗакрыть.Доступность = Ложь; КонецЕсли; Если ОтветНаВопросПриОткрытииФормы = "УстановитьПрофильАдминистратор" Тогда @@ -595,7 +603,6 @@ &НаКлиенте Процедура ПользователиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - ЕстьИзменения = Ложь; Если РежимПодбора Тогда ПользователиГруппы.ПолучитьЭлементы().Очистить(); КонецЕсли; @@ -969,7 +976,7 @@ Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда ТолькоПросмотр = Истина; - ПользователиСлужебныйКлиентСервер.УстановитьДоступностьКнопкиЗаписатьИЗакрыть(ЭтотОбъект); + Элементы.ФормаЗаписатьИЗакрыть.Доступность = Ложь; КонецЕсли; Иначе Если ЗначениеЗаполнено(ТекущийОбъект.Пользователь) Тогда @@ -1088,7 +1095,6 @@ ИначеЕсли ТипЗнч(СтрокаДерева.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда - УдалитьГруппу = Ложь; Для Каждого УчастникГруппы Из СтрокаДерева.ПолучитьЭлементы() Цикл Если МассивТипов.Найти(ТипЗнч(УчастникГруппы.Пользователь.ОбъектАвторизации)) = Неопределено Тогда @@ -1164,8 +1170,6 @@ ВидДоступа = Объект.ВидыДоступа[Индекс].ВидДоступа; Отбор = Новый Структура("ВидДоступа", ВидДоступа); - - СвойстваВидаДоступаВПрофиле = ВидыДоступаПрофиля.НайтиСтроки(Отбор); СвойстваВидаДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(ВидДоступа); Если СвойстваВидаДоступа = Неопределено @@ -1208,10 +1212,6 @@ КонецЦикла; КонецЕсли; - Если ИзменилсяСоставВидовДоступа Тогда - ТекущийВидДоступа = Неопределено; - КонецЕсли; - УправлениеДоступомСлужебныйКлиентСервер.ЗаполнитьСвойстваВидовДоступаВФорме(ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl index bccef5caa..2caa1f410 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -151,8 +159,6 @@ Индекс = ВидыДоступаПрофиля.Количество() - 1; Пока Индекс >= 0 Цикл Строка = ВидыДоступаПрофиля[Индекс]; - - Отбор = Новый Структура("ВидДоступа", Строка.ВидДоступа); СвойстваВидаДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(Строка.ВидДоступа); Если СвойстваВидаДоступа = Неопределено Тогда @@ -427,8 +433,7 @@ | И НЕ ГруппыДоступа.ЭтоГруппа"; РезультатЗапроса = Запрос.Выполнить(); - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); КонецФункции diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl index 8b68fb631..46baf3bc2 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -262,4 +270,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl index 3d53198c6..f1502d5a7 100644 --- a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl index 72e5b4907..00650dff5 100644 --- a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -54,4 +62,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыПользователей/Commands/ГруппыПользователя/CommandModule.bsl b/SSL/src/Catalogs/ГруппыПользователей/Commands/ГруппыПользователя/CommandModule.bsl index cd091a6bc..5f7289bcd 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Commands/ГруппыПользователя/CommandModule.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Commands/ГруппыПользователя/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl index 4e050ae9a..fdf77e2d0 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form index 791eb07fe..be42e22e5 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form @@ -828,6 +828,7 @@ <borderColor xsi:type="core:ColorRef"> <color>Style.BorderColor</color> </borderColor> + <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <rowFilter xsi:type="core:UndefinedValue"/> </items> diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl index 2bb2f087c..5729800aa 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl @@ -1,4 +1,11 @@ - +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl index 3dc6e4465..ab67c79e6 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -195,4 +203,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl index e505fa157..e06790c0b 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -10,12 +18,6 @@ ЗаполнитьТаблицы(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl index 27fc5ee83..8ee94376f 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПроверкаДополнительныхОтчетовИОбработок/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиКомандФормы &НаКлиенте diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Module.bsl index 703eafae7..038c31c2c 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -16,7 +23,7 @@ ИспользуемыеРазделы = ДополнительныеОтчетыИОбработки.РазделыДополнительныхОтчетов(); КонецЕсли; - РабочийСтол = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(); + РабочийСтол = ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы(); Для Каждого Раздел Из ИспользуемыеРазделы Цикл НоваяСтрока = Разделы.Добавить(); @@ -39,12 +46,6 @@ КонецЕсли; КонецЦикла; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form index a1db561cb..32776670a 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form @@ -1516,7 +1516,6 @@ <rowPictureDataPath xsi:type="form:DataPath"> <segments>Список.DefaultPicture</segments> </rowPictureDataPath> - <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl index ed0038ca1..7aafd6575 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -22,7 +30,6 @@ СписокВыбораПубликаций = Элементы.ПубликацияОтбор.СписокВыбора; ВидИспользуется = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; - ВидОтключена = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; ВидРежимОтладки = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки; ДоступныеВидыПубликации = ДополнительныеОтчетыИОбработкиПовтИсп.ДоступныеВидыПубликации(); @@ -111,20 +118,6 @@ Элементы.ГруппаПояснениеСервис.Видимость = ОбщегоНазначения.РазделениеВключено(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Для каждого ЭлементФормы Из Элементы.КоманднаяПанель.ПодчиненныеЭлементы Цикл - - Элементы.Переместить(ЭлементФормы, Элементы.ФормаКоманднаяПанель); - - КонецЦикла; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index 26a4a35f5..53fb44463 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -17,7 +25,7 @@ Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма И Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Работа с печатными формами не поддерживается.'")); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Работа с печатными формами не поддерживается.'")); Возврат; КонецЕсли; @@ -84,7 +92,7 @@ КлиентскийКэш = Новый Структура; Если ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии Тогда - ПодключитьОбработчикОжидания("ОбновлениеИзФайлаЗапуск", 0.1, Истина); + ПодключитьОбработчикОжидания("ОбновитьИзФайла", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -204,7 +212,7 @@ Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ОшибкаПодключения") Тогда ТекстСообщения = ТекущийОбъект.ДополнительныеСвойства.ОшибкаПодключения; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); КонецЕсли; ЭтоНовый = Ложь; Если РегистрацияОбработки Тогда @@ -372,7 +380,7 @@ &НаКлиенте Процедура ЗагрузитьИзФайла(Команда) - ОбновлениеИзФайлаЗапуск(); + ОбновитьИзФайла(); КонецПроцедуры &НаКлиенте @@ -551,50 +559,51 @@ КонецПроцедуры &НаКлиенте -Процедура ОбновлениеИзФайлаЗапуск() - Оповещение = Новый ОписаниеОповещения("ОбновлениеИзФайлаПослеПодтверждения", ЭтотОбъект); +Процедура ОбновитьИзФайла() + Оповещение = Новый ОписаниеОповещения("ОбновитьИзФайлаПослеПодтверждения", ЭтотОбъект); ПараметрыФормы = Новый Структура("Ключ", "ПередДобавлениемДополнительногоОтчетаИлиОбработки"); ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); КонецПроцедуры &НаКлиенте -Процедура ОбновлениеИзФайлаПослеПодтверждения(Ответ, ПараметрыРегистрации) Экспорт +Процедура ОбновитьИзФайлаПослеПодтверждения(Ответ, ПараметрыРегистрации) Экспорт Если Ответ <> "Продолжить" Тогда - ОбновлениеИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); + ОбновитьИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); Возврат; КонецЕсли; ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Успех", Ложь); ПараметрыРегистрации.Вставить("АдресДанныхОбработки", АдресДанныхОбработки); - Обработчик = Новый ОписаниеОповещения("ОбновлениеИзФайлаПослеВыбораФайла", ЭтотОбъект, ПараметрыРегистрации); - ПараметрыДиалога = Новый Структура("Режим, Фильтр, ИндексФильтра, Заголовок"); - ПараметрыДиалога.Режим = РежимДиалогаВыбораФайла.Открытие; - ПараметрыДиалога.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); + Обработчик = Новый ОписаниеОповещения("ОбновитьИзФайлаПослеВыбораФайла", ЭтотОбъект, ПараметрыРегистрации); + + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + Если Объект.Ссылка.Пустая() Тогда - ПараметрыДиалога.ИндексФильтра = 0; - ПараметрыДиалога.Заголовок = НСтр("ru = 'Выберите файл внешнего отчета или обработки'"); + ПараметрыЗагрузки.Диалог.ИндексФильтра = 0; + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл внешнего отчета или обработки'"); ИначеЕсли Объект.Вид = ВидДополнительныйОтчет Или Объект.Вид = ВидОтчет Тогда - ПараметрыДиалога.ИндексФильтра = 1; - ПараметрыДиалога.Заголовок = НСтр("ru = 'Выберите файл внешнего отчета'"); + ПараметрыЗагрузки.Диалог.ИндексФильтра = 1; + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл внешнего отчета'"); Иначе - ПараметрыДиалога.ИндексФильтра = 2; - ПараметрыДиалога.Заголовок = НСтр("ru = 'Выберите файл внешней обработки'"); + ПараметрыЗагрузки.Диалог.ИндексФильтра = 2; + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл внешней обработки'"); КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьПомещениеФайла(Обработчик, УникальныйИдентификатор, Объект.ИмяФайла, ПараметрыДиалога); + ФайловаяСистемаКлиент.ЗагрузитьФайл(Обработчик, ПараметрыЗагрузки, Объект.ИмяФайла); + КонецПроцедуры &НаКлиенте -Процедура ОбновлениеИзФайлаПослеВыбораФайла(ПомещенныеФайлы, ПараметрыРегистрации) Экспорт - Если ПомещенныеФайлы = Неопределено Или ПомещенныеФайлы.Количество() = 0 Тогда - ОбновлениеИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); +Процедура ОбновитьИзФайлаПослеВыбораФайла(ОписаниеФайла, ПараметрыРегистрации) Экспорт + Если ОписаниеФайла = Неопределено Тогда + ОбновитьИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); Возврат; КонецЕсли; - ОписаниеФайла = ПомещенныеФайлы[0]; - Ключи = Новый Структура("ИмяФайла, ЭтоОтчет, ОтключатьПубликацию, ОтключатьКонфликтующие, Конфликтующие"); ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыРегистрации, Ключи, Ложь); @@ -612,7 +621,7 @@ ПараметрыРегистрации.ЭтоОтчет = Ложь; Иначе ПараметрыРегистрации.Успех = Ложь; - ОбработчикРезультата = Новый ОписаниеОповещения("ОбновлениеИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации); + ОбработчикРезультата = Новый ОписаниеОповещения("ОбновитьИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации); ТекстПредупреждения = НСтр("ru = 'Расширение файла не соответствует расширению внешнего отчета (ERF) или обработки (EPF).'"); ПараметрыВозврата = Новый Структура; ПараметрыВозврата.Вставить("Обработчик", ОбработчикРезультата); @@ -624,7 +633,7 @@ ПараметрыРегистрации.АдресДанныхОбработки = ОписаниеФайла.Хранение; - ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации); + ОбновитьИзФайлаИСообщить(ПараметрыРегистрации); КонецПроцедуры &НаКлиенте @@ -635,38 +644,35 @@ КонецПроцедуры &НаКлиенте -Процедура ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации) - // Вызов сервера. - ОбновлениеИзФайлаМеханикаНаСервере(ПараметрыРегистрации); +Процедура ОбновитьИзФайлаИСообщить(ПараметрыРегистрации) + + ОбновитьИзФайлаНаСервере(ПараметрыРегистрации); Если ПараметрыРегистрации.ОтключатьКонфликтующие Тогда // Отключается несколько объектов, потому динамические списки надо обновить. ОповеститьОбИзменении(Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки")); КонецЕсли; - // Обработка результата работы сервера. Если ПараметрыРегистрации.Успех Тогда ОповещениеЗаголовок = ?(ПараметрыРегистрации.ЭтоОтчет, НСтр("ru = 'Файл внешнего отчета загружен'"), НСтр("ru = 'Файл внешней обработки загружен'")); ОповещениеСсылка = ?(ЭтоНовый, "", ПолучитьНавигационнуюСсылку(Объект.Ссылка)); ОповещениеТекст = ПараметрыРегистрации.ИмяФайла; ПоказатьОповещениеПользователя(ОповещениеЗаголовок, ОповещениеСсылка, ОповещениеТекст); - ОбновлениеИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); + ОбновитьИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); + ИначеЕсли ПараметрыРегистрации.ИмяОбъектаЗанято Тогда // Разбор причины отказа загрузки обработки и отображение информации пользователю. + ПоказатьКонфликты(ПараметрыРегистрации); Иначе - // Разбор причины отказа загрузки обработки и отображение информации пользователю. - Если ПараметрыРегистрации.ИмяОбъектаЗанято Тогда - ОбновлениеИзФайлаПоказатьКонфликты(ПараметрыРегистрации); - Иначе - ОбработчикРезультата = Новый ОписаниеОповещения("ОбновлениеИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации); - ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); - ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; - СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработчикРезультата, ПараметрыРегистрации.ТекстОшибки, - РежимДиалогаВопрос.ОК, ПараметрыВопроса); - КонецЕсли; + ОбработчикРезультата = Новый ОписаниеОповещения("ОбновитьИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации); + ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); + ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработчикРезультата, ПараметрыРегистрации.ТекстОшибки, + РежимДиалогаВопрос.ОК, ПараметрыВопроса); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ОбновлениеИзФайлаПоказатьКонфликты(ПараметрыРегистрации) +Процедура ПоказатьКонфликты(ПараметрыРегистрации) + Если ПараметрыРегистрации.КоличествоКонфликтующих > 1 Тогда Если ПараметрыРегистрации.ЭтоОтчет Тогда ЗаголовокВопроса = НСтр("ru = 'Конфликты при загрузке внешнего отчета'"); @@ -729,21 +735,20 @@ КнопкиВопроса.Добавить("ОтменитьИОткрыть", ПредставлениеКнопкиОткрыть); КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена); - Обработчик = Новый ОписаниеОповещения("ОбновлениеИзФайлаРазрешениеКонфликтов", ЭтотОбъект, ПараметрыРегистрации); - + Обработчик = Новый ОписаниеОповещения("ОбновитьИзФайлаРазрешениеКонфликтов", ЭтотОбъект, ПараметрыРегистрации); ПоказатьВопрос(Обработчик, ТекстВопроса, КнопкиВопроса, , "ПродолжитьБезПубликации", ЗаголовокВопроса); КонецПроцедуры &НаКлиенте -Процедура ОбновлениеИзФайлаРазрешениеКонфликтов(Ответ, ПараметрыРегистрации) Экспорт +Процедура ОбновитьИзФайлаРазрешениеКонфликтов(Ответ, ПараметрыРегистрации) Экспорт Если Ответ = "ПродолжитьБезПубликации" Тогда // Повторный вызов сервера (публикация в режиме отладки) и обработка результата. ПараметрыРегистрации.ОтключатьПубликацию = Истина; - ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации); + ОбновитьИзФайлаИСообщить(ПараметрыРегистрации); ИначеЕсли Ответ = "ОтключитьКонфликтующие" Тогда // Повторный вызов сервера (с переводом конфликтующих в режим отладки) и обработка результата. ПараметрыРегистрации.ОтключатьКонфликтующие = Истина; - ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации); + ОбновитьИзФайлаИСообщить(ПараметрыРегистрации); ИначеЕсли Ответ = "ОтменитьИОткрыть" Тогда // Отмена и показ конфликтующих. // Список показывается когда конфликтует более одного элемента. @@ -769,15 +774,15 @@ ФормаПараметры = Новый Структура; ФормаПараметры.Вставить("Ключ", ПараметрыРегистрации.Конфликтующие[0].Значение); КонецЕсли; - ОбновлениеИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); + ОбновитьИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); ОткрытьФорму(ФормаИмя, ФормаПараметры, Неопределено, Истина); Иначе // Отмена. - ОбновлениеИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); + ОбновитьИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ОбновлениеИзФайлаЗавершение(ПустойРезультат, ПараметрыРегистрации) Экспорт +Процедура ОбновитьИзФайлаЗавершение(ПустойРезультат, ПараметрыРегистрации) Экспорт Если ПараметрыРегистрации = Неопределено Или ПараметрыРегистрации.Успех = Ложь Тогда Если ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии И Открыта() Тогда Закрыть(); @@ -865,7 +870,7 @@ Если ДополнительныеОтчетыИОбработкиКлиентСервер.РасписаниеЗадано(Расписание) Тогда Модифицированность = Истина; ЭлементКоманда.РегламентноеЗаданиеИспользование = Истина; - ЭлементКоманда.РегламентноеЗаданиеПредставление = СтандартныеПодсистемыКлиентСервер.ПредставлениеРасписания(Расписание); + ЭлементКоманда.РегламентноеЗаданиеПредставление = Строка(Расписание); Иначе ЭлементКоманда.РегламентноеЗаданиеПредставление = НСтр("ru = 'Не заполнено'"); Если ЭлементКоманда.РегламентноеЗаданиеИспользование Тогда @@ -1054,12 +1059,10 @@ КонецФункции &НаСервере -Процедура ОбновлениеИзФайлаМеханикаНаСервере(ПараметрыРегистрации) +Процедура ОбновитьИзФайлаНаСервере(ПараметрыРегистрации) ОбъектСправочника = РеквизитФормыВЗначение("Объект"); КомандыСохраненные = ОбъектСправочника.Команды.Выгрузить(); - РезультатРегистрации = ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработку(ОбъектСправочника, ПараметрыРегистрации); - АдресРазрешений = ПоместитьВоВременноеХранилище(ОбъектСправочника.Разрешения.Выгрузить(), ЭтотОбъект.УникальныйИдентификатор); ЗначениеВРеквизитФормы(ОбъектСправочника, "Объект"); @@ -1068,7 +1071,6 @@ Если ПараметрыРегистрации.Успех Тогда ЗаполнитьКоманды(КомандыСохраненные); ИначеЕсли ПараметрыРегистрации.ИмяОбъектаЗанято Тогда - // Представление занявших объектов. ПредставлениеЗанявших = ""; Для Каждого ЭлементСписка Из ПараметрыРегистрации.Конфликтующие Цикл Если СтрДлина(ПредставлениеЗанявших) > 80 Тогда @@ -1080,7 +1082,6 @@ + """" + СокрЛП(ЭлементСписка.Представление) + """"; КонецЦикла; ПараметрыРегистрации.Вставить("ПредставлениеЗанявших", ПредставлениеЗанявших); - // Количество занявших объектов. ПараметрыРегистрации.Вставить("КоличествоКонфликтующих", ПараметрыРегистрации.Конфликтующие.Количество()); КонецЕсли; @@ -1451,7 +1452,7 @@ РегламентноеЗадание = РегламентныеЗаданияСервер.Задание(РегламентноеЗаданиеGUID); Если РегламентноеЗадание <> Неопределено Тогда ЭлементКоманда.РегламентноеЗаданиеGUID = РегламентноеЗаданиеGUID; - ЭлементКоманда.РегламентноеЗаданиеПредставление = СтандартныеПодсистемыКлиентСервер.ПредставлениеРасписания(РегламентноеЗадание.Расписание); + ЭлементКоманда.РегламентноеЗаданиеПредставление = Строка(РегламентноеЗадание.Расписание); ЭлементКоманда.РегламентноеЗаданиеИспользование = РегламентноеЗадание.Использование; ЭлементКоманда.РегламентноеЗаданиеРасписание.Вставить(0, РегламентноеЗадание.Расписание); КонецЕсли; @@ -1502,7 +1503,7 @@ Исключение ТекстОшибки = НСтр("ru = 'Не удалось получить список вариантов отчета из-за ошибки, возникшей при подключении этого отчета:'"); ТекстСообщения = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); Возврат; КонецПопытки; diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl index 8a35a2ea0..acc37f890 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index ab500c5e0..48610b8bc 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -21,7 +29,7 @@ Если НЕ ДополнительныеОтчетыИОбработки.ПроверитьГлобальнаяОбработка(Вид) Тогда Если НЕ ИспользоватьДляФормыОбъекта И НЕ ИспользоватьДляФормыСписка И Публикация <> Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Необходимо отключить публикацию или выбрать для использования как минимум одну из форм'") , , @@ -85,7 +93,7 @@ ИмяОбъекта, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Наименование")); КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Публикация"); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "Объект.Публикация"); КонецЕсли; КонецЕсли; @@ -100,8 +108,7 @@ Возврат; КонецЕсли; - // Вызывается непосредственно до записи объекта в базу данных. - ДополнительныеОтчетыИОбработки.ПередЗаписьюДополнительнойОбработки(ЭтотОбъект, Отказ); + ИнтеграцияСТехнологиейСервиса.ПередЗаписьюДополнительнойОбработки(ЭтотОбъект, Отказ); Если ЭтоНовый() И НЕ ДополнительныеОтчетыИОбработки.ПравоДобавления(ЭтотОбъект) Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для добавления дополнительных отчетов или обработок.'"); @@ -109,7 +116,7 @@ // Предварительные проверки Если НЕ ЭтоНовый() И Вид <> ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Вид") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Невозможно сменить вид существующего дополнительного отчета или обработки.'"),,,, Отказ); Возврат; @@ -136,7 +143,7 @@ КонецПроцедуры Процедура ПриЗаписи(Отказ) - // Вызывается непосредственно после записи объекта в базу данных. + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; @@ -167,8 +174,6 @@ КонецПроцедуры Процедура ПередУдалением(Отказ) - // Вызывается непосредственно перед удалением объекта из базы данных. - ДополнительныеОтчетыИОбработки.ПередУдалениемДополнительнойОбработки(ЭтотОбъект, Отказ); Если ОбменДанными.Загрузка Тогда Возврат; @@ -177,9 +182,21 @@ Возврат; КонецЕсли; + ИнтеграцияСТехнологиейСервиса.ПередУдалениемДополнительнойОбработки(ЭтотОбъект, Отказ); + Если ДополнительныеОтчетыИОбработки.ПроверитьГлобальнаяОбработка(Вид) Тогда - ПередУдалениемГлобальнойОбработки(Отказ); + + УстановитьПривилегированныйРежим(Истина); + // Удаление всех заданий. + Для Каждого Команда Из Команды Цикл + Если ЗначениеЗаполнено(Команда.РегламентноеЗаданиеGUID) Тогда + РегламентныеЗаданияСервер.УдалитьЗадание(Команда.РегламентноеЗаданиеGUID); + КонецЕсли; + КонецЦикла; + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -256,7 +273,7 @@ Иначе // Удалить. РегламентныеЗаданияСервер.УдалитьЗадание(АктуальнаяКоманда.РегламентноеЗаданиеGUID); - Команда.РегламентноеЗаданиеGUID = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + Команда.РегламентноеЗаданиеGUID = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); КонецЕсли; КонецЕсли; КонецЦикла; @@ -271,7 +288,6 @@ КонецЕсли; ПубликацияВключена = (Публикация <> Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена); - ТеснаяИнтеграцияСПодсистемойВМоделиСервиса = ДополнительныеОтчетыИОбработки.ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса(); // Регламентные задания необходимо изменять в привилегированном режиме. УстановитьПривилегированныйРежим(Истина); @@ -297,9 +313,7 @@ Изменения.Вставить("Параметры", ПараметрыПроцедуры); - Если ТеснаяИнтеграцияСПодсистемойВМоделиСервиса Тогда - ИнтеграцияСТехнологиейСервиса.ПередОбновлениемЗадания(ЭтотОбъект, Команда, Задание, Изменения); - КонецЕсли; + ИнтеграцияСТехнологиейСервиса.ПередОбновлениемЗадания(ЭтотОбъект, Команда, Задание, Изменения); Если Изменения <> Неопределено Тогда РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения); КонецЕсли; @@ -307,18 +321,6 @@ КонецПроцедуры -Процедура ПередУдалениемГлобальнойОбработки(Отказ) - // Регламентные задания необходимо изменять в привилегированном режиме. - УстановитьПривилегированныйРежим(Истина); - - // Удаление всех заданий. - Для Каждого Команда Из Команды Цикл - Если ЗначениеЗаполнено(Команда.РегламентноеЗаданиеGUID) Тогда - РегламентныеЗаданияСервер.УдалитьЗадание(Команда.РегламентноеЗаданиеGUID); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Работа с регламентными заданиями. @@ -347,8 +349,6 @@ ТаблицаНазначение.Свернуть("ОбъектНазначения"); Назначение.Загрузить(ТаблицаНазначение); - ОбновлениеРегистраНазначение = Новый Структура("МассивСсылок"); - СсылкиОбъектовМетаданных = ТаблицаНазначение.ВыгрузитьКолонку("ОбъектНазначения"); Если НЕ ЭтоНовый() Тогда @@ -401,4 +401,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Form.form index 83eedd920..f380b22b5 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Form.form @@ -281,6 +281,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <mainTable>Catalog.ЗакладкиВзаимодействий</mainTable> diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl index 5841932f6..31030af38 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl index 636c8c6b4..4794ec657 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -38,7 +45,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура КомпоновщикНастроекНастройкиОтборПриИзменении(Элемент) diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl index e2eac41cf..a153b86a8 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl b/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl index dcfc4b62d..c03e6db84 100644 --- a/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl +++ b/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl index 47fc0c228..e7ea8fea2 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl index f0b665c35..c8c84eccf 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -48,7 +55,7 @@ #КонецОбласти -#Область ОбработчикиСобытийТаблицыСписок +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form index 7737ba1f2..55ad505ff 100644 --- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form @@ -620,6 +620,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl index 9d0659961..92e717b57 100644 --- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl index 8c6150333..7de1aff2c 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form index a9b40788b..a9b768e2c 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form @@ -582,6 +582,10 @@ <event>AfterWrite</event> <name>ПослеЗаписи</name> </handlers> + <handlers> + <event>AfterWriteAtServer</event> + <name>ПослеЗаписиНаСервере</name> + </handlers> <handlers> <event>OnReadAtServer</event> <name>ПриЧтенииНаСервере</name> diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl index b7d55b836..3f40b7622 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -55,9 +62,13 @@ КонецПроцедуры +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + Элементы.ДатаЗаметки.Заголовок = НСтр("ru = 'Записано'") + ": " + Формат(Объект.ДатаИзменения, "ДЛФ=DDT"); +КонецПроцедуры + &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - Элементы.ДатаЗаметки.Заголовок = НСтр("ru = 'Записано'") + ": " + Формат(Объект.ДатаИзменения, "ДЛФ=DDT"); ОповеститьОбИзменении(Объект.Ссылка); КонецПроцедуры diff --git a/SSL/src/Catalogs/Заметки/ManagerModule.bsl b/SSL/src/Catalogs/Заметки/ManagerModule.bsl index 9caa07f80..230332791 100644 --- a/SSL/src/Catalogs/Заметки/ManagerModule.bsl +++ b/SSL/src/Catalogs/Заметки/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/Заметки/ObjectModule.bsl b/SSL/src/Catalogs/Заметки/ObjectModule.bsl index 3904c77cc..920e036ff 100644 --- a/SSL/src/Catalogs/Заметки/ObjectModule.bsl +++ b/SSL/src/Catalogs/Заметки/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -11,7 +19,7 @@ КонецЕсли; Если ЗначениеЗаполнено(Родитель) И Родитель.Автор <> Автор Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Нельзя указывать группу другого пользователя.'")); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Нельзя указывать группу другого пользователя.'")); Отказ = Истина; Возврат; КонецЕсли; @@ -42,4 +50,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl index abfeb8fe5..ce85a0ebc 100644 --- a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo index c7f7ccd8d..2caa86fb6 100644 --- a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo @@ -477,6 +477,7 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> <fillValue xsi:type="core:UndefinedValue"/> <indexing>Index</indexing> <dataHistory>Use</dataHistory> diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl index 0d7df5daa..6da2802a8 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form index 88e0c5d78..0263832ce 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form @@ -32,240 +32,6 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>КоманднаяПанель</name> - <id>43</id> - <items xsi:type="form:FormGroup"> - <name>ОсновныеКоманды</name> - <id>47</id> - <items xsi:type="form:Button"> - <name>ФормаВыбрать</name> - <id>17</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <defaultItem>true</defaultItem> - <extendedTooltip> - <name>ФормаВыбратьExtendedTooltip</name> - <id>24</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.StandardCommand.Choose</commandName> - <representation>Auto</representation> - <defaultButton>true</defaultButton> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>ФормаСоздать</name> - <id>10</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаСоздатьExtendedTooltip</name> - <id>25</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>18</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаСоздатьГруппуExtendedTooltip</name> - <id>26</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>21</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаСкопироватьExtendedTooltip</name> - <id>27</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>23</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаИзменитьExtendedTooltip</name> - <id>28</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> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <title> - <key>ru</key> - <value>Основные команды</value> - - - ОсновныеКомандыРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - - - ДополнительныеКоманды - 12 - true - true - - true - - - <key>ru</key> - <value>Дополнительные команды</value> - - - ДополнительныеКомандыРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - - Form - - - - ФормаСправка - 13 - true - true - - true - - - ФормаСправкаExtendedTooltip - 30 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - КоманднаяПанельРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - CommandBar - - Left - - Свойство 6 @@ -341,7 +107,7 @@ true - Список.Description + Список.Наименование true @@ -624,6 +390,213 @@ ФормаКоманднаяПанель -1 + + ОсновныеКоманды + 47 + + ФормаВыбрать + 17 + true + true + + true + + true + + ФормаВыбратьExtendedTooltip + 24 + Label + true + true + + Left + + + Form.StandardCommand.Choose + Auto + true + true + true + UserCmds + Auto + + + ФормаСоздать + 10 + true + true + + true + + + ФормаСоздатьExtendedTooltip + 25 + Label + true + true + + Left + + + Form.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСоздатьГруппу + 18 + true + true + + true + + + ФормаСоздатьГруппуExtendedTooltip + 26 + Label + true + true + + Left + + + Form.StandardCommand.CreateFolder + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСкопировать + 21 + true + true + + true + + + ФормаСкопироватьExtendedTooltip + 27 + Label + true + true + + Left + + + Form.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменить + 23 + true + true + + true + + + ФормаИзменитьExtendedTooltip + 28 + Label + true + true + + Left + + + Form.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Основные команды</value> + + + ОсновныеКомандыРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + + + ДополнительныеКоманды + 12 + true + true + + true + + + <key>ru</key> + <value>Дополнительные команды</value> + + + ДополнительныеКомандыРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + Form + + + + ФормаСправка + 13 + true + true + + true + + + ФормаСправкаExtendedTooltip + 30 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left @@ -675,10 +648,17 @@ Значения.Владелец, Значения.Родитель, Значения.ЭтоГруппа, - Значения.Наименование, + ВЫБОР + КОГДА &ЭтоОсновнойЯзык + ТОГДА Значения.Наименование + ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЗначенияПредставления.Наименование, Значения.Наименование) КАК СТРОКА(150)) + КОНЕЦ КАК Наименование, Значения.Вес ИЗ - Справочник.ЗначенияСвойствОбъектов КАК Значения + Справочник.ЗначенияСвойствОбъектов КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЗначенияСвойствОбъектов.Представления КАК ЗначенияПредставления + ПО (ЗначенияПредставления.Ссылка = Значения.Ссылка) + И ЗначенияПредставления.КодЯзыка = &КодЯзыка Catalog.ЗначенияСвойствОбъектов true true diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl index 95a11fa67..49fb21831 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -46,14 +53,10 @@ ПриИзмененииСвойства(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.ОсновныеКоманды, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ДополнительныеКоманды, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ФормаСправка, Элементы.ФормаКоманднаяПанель); - - КонецЕсли; - + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + Список, "ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + Список, "КодЯзыка", ТекущийЯзык().КодЯзыка, Истина); КонецПроцедуры &НаКлиенте @@ -158,8 +161,15 @@ СтрокаЗаголовка = ""; Если ЗначениеЗаполнено(Свойство) Тогда - СтрокаЗаголовка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - Свойство, "ЗаголовокФормыВыбораЗначения"); + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда + СтрокаЗаголовка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + Свойство, "ЗаголовокФормыВыбораЗначения"); + Иначе + Реквизиты = Новый Массив; + Реквизиты.Добавить("ЗаголовокФормыВыбораЗначения"); + ЗначенияРеквизитов = УправлениеСвойствамиСлужебный.ЛокализованныеЗначенияРеквизитов(Свойство, Реквизиты); + СтрокаЗаголовка = ЗначенияРеквизитов.ЗаголовокФормыВыбораЗначения; + КонецЕсли; КонецЕсли; Если ПустаяСтрока(СтрокаЗаголовка) Тогда diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form index 96f9dff1a..58ab034b5 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form @@ -32,6 +32,10 @@ Left true + + Opening + НаименованиеОткрытие + true true true @@ -274,5 +278,9 @@ OnReadAtServer ПриЧтенииНаСервере + + BeforeWriteAtServer + ПередЗаписьюНаСервере + diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl index 9d7a5fc4a..933139f29 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -35,6 +42,10 @@ УстановитьЗаголовок(); + ЛокализуемыеЭлементы = Новый Массив; + ЛокализуемыеЭлементы.Добавить(Элементы.Наименование); + ЛокализацияСервер.ПриСозданииНаСервере(ЛокализуемыеЭлементы); + КонецПроцедуры &НаКлиенте @@ -53,10 +64,16 @@ КонецПроцедуры +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); +КонецПроцедуры + &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) УстановитьЗаголовок(); + ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры @@ -70,14 +87,23 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом + + ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); +КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура НаименованиеОткрытие(Элемент, СтандартнаяОбработка) + ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Наименование", СтандартнаяОбработка); КонецПроцедуры #КонецОбласти @@ -87,8 +113,15 @@ &НаСервере Процедура УстановитьЗаголовок() - ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - Объект.Владелец, "Заголовок, ЗаголовокФормыЗначения"); + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда + ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + Объект.Владелец, "Заголовок, ЗаголовокФормыЗначения"); + Иначе + Реквизиты = Новый Массив; + Реквизиты.Добавить("Заголовок"); + Реквизиты.Добавить("ЗаголовокФормыЗначения"); + ЗначенияРеквизитов = УправлениеСвойствамиСлужебный.ЛокализованныеЗначенияРеквизитов(Объект.Владелец, Реквизиты); + КонецЕсли; ИмяСвойства = СокрЛП(ЗначенияРеквизитов.ЗаголовокФормыЗначения); diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl index 5d2001588..67d3351c5 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -43,3 +51,11 @@ #КонецОбласти #КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl index b22060c04..de85103de 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -22,7 +30,7 @@ Если ЭтоНовый() Тогда ВызватьИсключение ОписаниеОшибки; Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки); + ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки); КонецЕсли; КонецЕсли; КонецЕсли; @@ -31,4 +39,14 @@ #КонецОбласти -#КонецЕсли +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ПриЧтенииПредставленийНаСервере() Экспорт + ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); +КонецПроцедуры + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo index 04fa21839..0735e4493 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo @@ -190,6 +190,59 @@ Use Use + + + + + + Представления + + ru + Представления + + + Use + LineNumber + + Use + + + + + КодЯзыка + + ru + Код языка + + + String + + 10 + + + + + Use + Use + + + Наименование + + ru + Наименование + + + String + + 100 + + + + + Use + Use + + ФормаЭлемента diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form index c6df57708..e63c1d8c2 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form @@ -32,214 +32,6 @@ Auto - - КоманднаяПанель - 42 - - ОсновныеКоманды - 44 - - ФормаВыбрать - 17 - true - true - - true - - true - - ФормаВыбратьExtendedTooltip - 24 - Label - true - true - - Left - - - Form.StandardCommand.Choose - Auto - true - true - true - UserCmds - Auto - - - ФормаСоздать - 10 - true - true - - true - - - ФормаСоздатьExtendedTooltip - 25 - Label - true - true - - Left - - - Form.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСкопировать - 21 - true - true - - true - - - ФормаСкопироватьExtendedTooltip - 26 - Label - true - true - - Left - - - Form.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - ФормаИзменить - 23 - true - true - - true - - - ФормаИзменитьExtendedTooltip - 27 - Label - true - true - - Left - - - Form.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Основные команды</value> - - - ОсновныеКомандыРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - - - - ДополнительныеКоманды - 12 - true - true - - true - - - <key>ru</key> - <value>Дополнительные команды</value> - - - ДополнительныеКомандыРасширеннаяПодсказка - 28 - Label - true - true - - Left - - - - Form - - - - ФормаСправка - 13 - true - true - - true - - - ФормаСправкаExtendedTooltip - 29 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - КоманднаяПанельРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - CommandBar - - Left - - Свойство 6 @@ -315,7 +107,7 @@ true - Список.Description + Список.Наименование true @@ -590,6 +382,187 @@ ФормаКоманднаяПанель -1 + + ОсновныеКоманды + 44 + + ФормаВыбрать + 17 + true + true + + true + + true + + ФормаВыбратьExtendedTooltip + 24 + Label + true + true + + Left + + + Form.StandardCommand.Choose + Auto + true + true + true + UserCmds + Auto + + + ФормаСоздать + 10 + true + true + + true + + + ФормаСоздатьExtendedTooltip + 25 + Label + true + true + + Left + + + Form.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСкопировать + 21 + true + true + + true + + + ФормаСкопироватьExtendedTooltip + 26 + Label + true + true + + Left + + + Form.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменить + 23 + true + true + + true + + + ФормаИзменитьExtendedTooltip + 27 + Label + true + true + + Left + + + Form.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Основные команды</value> + + + ОсновныеКомандыРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + + + ДополнительныеКоманды + 12 + true + true + + true + + + <key>ru</key> + <value>Дополнительные команды</value> + + + ДополнительныеКомандыРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + Form + + + + ФормаСправка + 13 + true + true + + true + + + ФормаСправкаExtendedTooltip + 29 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left @@ -622,20 +595,39 @@ true + + Список.ПолноеНаименование + Список.Parent Список.Ref - - Список.ПолноеНаименование -
      true
      + ВЫБРАТЬ + Значения.Ссылка, + Значения.ВерсияДанных, + Значения.ПометкаУдаления, + Значения.Предопределенный, + Значения.Владелец, + Значения.Родитель, + ВЫБОР + КОГДА &ЭтоОсновнойЯзык + ТОГДА Значения.Наименование + ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЗначенияПредставления.Наименование, Значения.Наименование) КАК СТРОКА(150)) + КОНЕЦ КАК Наименование, + Значения.Вес +ИЗ + Справочник.ЗначенияСвойствОбъектовИерархия КАК Значения + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЗначенияСвойствОбъектовИерархия.Представления КАК ЗначенияПредставления + ПО (ЗначенияПредставления.Ссылка = Значения.Ссылка) + И ЗначенияПредставления.КодЯзыка = &КодЯзыка Catalog.ЗначенияСвойствОбъектовИерархия true true + true true true diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl index 2d5eb8d51..59cdac27e 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -29,13 +36,10 @@ ПриИзмененииСвойства(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.ОсновныеКоманды, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ДополнительныеКоманды, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ФормаСправка, Элементы.ФормаКоманднаяПанель); - - КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + Список, "ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + Список, "КодЯзыка", ТекущийЯзык().КодЯзыка, Истина); КонецПроцедуры @@ -111,8 +115,15 @@ СтрокаЗаголовка = ""; Если ЗначениеЗаполнено(Свойство) Тогда - СтрокаЗаголовка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - Свойство, "ЗаголовокФормыВыбораЗначения"); + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда + СтрокаЗаголовка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + Свойство, "ЗаголовокФормыВыбораЗначения"); + Иначе + Реквизиты = Новый Массив; + Реквизиты.Добавить("ЗаголовокФормыВыбораЗначения"); + ЗначенияРеквизитов = УправлениеСвойствамиСлужебный.ЛокализованныеЗначенияРеквизитов(Свойство, Реквизиты); + СтрокаЗаголовка = ЗначенияРеквизитов.ЗаголовокФормыВыбораЗначения; + КонецЕсли; КонецЕсли; Если ПустаяСтрока(СтрокаЗаголовка) Тогда @@ -176,7 +187,7 @@ КонецЕсли; Если ТипЗнч(ТипЗначения) = Тип("ОписаниеТипов") - И ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда + И ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")) Тогда Элементы.Список.ИзменятьСоставСтрок = Истина; Иначе diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form index b9ac1d488..38359f79f 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form @@ -32,6 +32,10 @@ Left true + + Opening + НаименованиеОткрытие + true true true @@ -268,5 +272,9 @@ OnReadAtServer ПриЧтенииНаСервере
      + + BeforeWriteAtServer + ПередЗаписьюНаСервере + diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl index 794063920..3d9ac2eb9 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -35,6 +42,10 @@ УстановитьЗаголовок(); + ЛокализуемыеЭлементы = Новый Массив; + ЛокализуемыеЭлементы.Добавить(Элементы.Наименование); + ЛокализацияСервер.ПриСозданииНаСервере(ЛокализуемыеЭлементы); + КонецПроцедуры &НаКлиенте @@ -53,10 +64,16 @@ КонецПроцедуры +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); +КонецПроцедуры + &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) УстановитьЗаголовок(); + ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецПроцедуры @@ -70,14 +87,23 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом + + ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); +КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура НаименованиеОткрытие(Элемент, СтандартнаяОбработка) + ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Наименование", СтандартнаяОбработка); КонецПроцедуры #КонецОбласти @@ -87,8 +113,15 @@ &НаСервере Процедура УстановитьЗаголовок() - ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - Объект.Владелец, "Заголовок, ЗаголовокФормыЗначения"); + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда + ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + Объект.Владелец, "Заголовок, ЗаголовокФормыЗначения"); + Иначе + Реквизиты = Новый Массив; + Реквизиты.Добавить("Заголовок"); + Реквизиты.Добавить("ЗаголовокФормыЗначения"); + ЗначенияРеквизитов = УправлениеСвойствамиСлужебный.ЛокализованныеЗначенияРеквизитов(Объект.Владелец, Реквизиты); + КонецЕсли; ИмяСвойства = СокрЛП(ЗначенияРеквизитов.ЗаголовокФормыЗначения); diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl index 5d2001588..586387fcc 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -43,3 +51,12 @@ #КонецОбласти #КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl index b22060c04..de85103de 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -22,7 +30,7 @@ Если ЭтоНовый() Тогда ВызватьИсключение ОписаниеОшибки; Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки); + ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки); КонецЕсли; КонецЕсли; КонецЕсли; @@ -31,4 +39,14 @@ #КонецОбласти -#КонецЕсли +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ПриЧтенииПредставленийНаСервере() Экспорт + ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); +КонецПроцедуры + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo index 366e342d0..5cdca5a0b 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo @@ -189,6 +189,59 @@ Use Use + + + + + + Представления + + ru + Представления + + + Use + LineNumber + + Use + + + + + КодЯзыка + + ru + Код языка + + + String + + 10 + + + + + Use + Use + + + Наименование + + ru + Наименование + + + String + + 150 + + + + + Use + Use + + ФормаЭлемента diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl index 1872c963a..5897a5e9c 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl index ed2976380..aaeae666e 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index 4ec4c65fb..351bc2c5f 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -332,7 +340,7 @@ КонецПроцедуры // См. ОбщегоНазначения.ИдентификаторыОбъектовМетаданных. -Функция ИдентификаторыОбъектовМетаданных(ПолныеИменаОбъектовМетаданных, КромеНесуществующих = Ложь, ОдинЭлемент = Ложь) Экспорт +Функция ИдентификаторыОбъектовМетаданных(ОписаниеОбъектовМетаданных, КромеНесуществующих = Ложь, ОдинЭлемент = Ложь) Экспорт УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); @@ -342,8 +350,31 @@ Результат = Новый Соответствие; ПолныеИменаБезКэша = Новый Массив; - Для Каждого ПолноеИмя Из ПолныеИменаОбъектовМетаданных Цикл + Для Каждого ОписаниеОбъектаМетаданных Из ОписаниеОбъектовМетаданных Цикл + + ТипОписанияОбъектаМетаданных = ТипЗнч(ОписаниеОбъектаМетаданных); + Если ТипОписанияОбъектаМетаданных = Тип("Тип") Тогда + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ОписаниеОбъектаМетаданных); + Если ОбъектМетаданных = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректное значение параметра ОписаниеОбъектовМетаданных функции ОбщегоНазначения.ИдентификаторыОбъектовМетаданных: + |Указан несуществующий объект метаданных: ""%1"".'"), + ОписаниеОбъектаМетаданных); + КонецЕсли; + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ИначеЕсли ТипОписанияОбъектаМетаданных = Тип("Строка") Тогда + ПолноеИмя = ОписаниеОбъектаМетаданных; + ИначеЕсли ТипОписанияОбъектаМетаданных = Тип("ОбъектМетаданных") Тогда + ПолноеИмя = ОписаниеОбъектаМетаданных.ПолноеИмя(); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректный тип параметра ОписаниеОбъектовМетаданных функции ОбщегоНазначения.ИдентификаторыОбъектовМетаданных: + |""%1""'"), + ТипОписанияОбъектаМетаданных); + КонецЕсли; Идентификатор = ИдентификаторыПоПолнымИменам.Получить(ПолноеИмя); + Если Идентификатор = Неопределено Тогда ПолныеИменаБезКэша.Добавить(ПолноеИмя); Иначе @@ -367,119 +398,7 @@ КонецФункции -// Возвращает объект метаданных по переданному идентификатору. -// -// Параметры: -// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификатор -// объекта метаданных конфигурации или расширения конфигурации. -// -// КромеНесуществующихИНедоступных - Булево - если Истина тогда, когда объект метаданных -// не существует или не доступен, возвращает Null или Неопределено -// вместо вызова исключения. -// -// Возвращаемое значение: -// ОбъектМетаданных - объект метаданных, соответствующий идентификатору. -// -// Null - возвращается, когда КромеНесуществующихИНедоступных = Истина. Обозначает, что -// для указанного идентификатора объект метаданных не существует (идентификатор устарел). -// -// Неопределено - возвращается, когда КромеНесуществующихИНедоступных = Истина. Обозначает, -// что идентификатор действующий, но в текущем сеансе ОбъектМетаданных не может быть получен. -// Для расширений конфигурации это значит, что расширение установлено, но не подключено, -// либо потому что перезапуск еще не выполнен, либо при подключении произошла ошибка. -// Для конфигурации это значит , что в новом сеансе (новом динамическом поколении) объект -// метаданных имеется, а в текущем (старом) сеансе нет. -// -Функция ОбъектМетаданныхПоИдентификатору(Идентификатор, КромеНесуществующихИНедоступных = Ложь) Экспорт - - Идентификаторы = Новый Массив; - Идентификаторы.Добавить(Идентификатор); - - ОбъектыМетаданных = ОбъектыМетаданныхПоИдентификаторам(Идентификаторы, КромеНесуществующихИНедоступных); - - Возврат ОбъектыМетаданных.Получить(Идентификатор); - -КонецФункции - -// Возвращает объекты метаданных по переданным идентификаторам. -// -// Параметры: -// Идентификаторы - Массив - со значениями: -// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификаторы -// объектов метаданных конфигурации или расширений конфигурации. -// -// КромеНесуществующихИНедоступных - Булево - если Истина тогда, когда объект метаданных -// не существует или не доступен, возвращает Null или Неопределено -// вместо вызова исключения. -// -// Возвращаемое значение: -// Соответствие - со свойствами: -// * Ключ - переданный идентификатор, -// * Значение - ОбъектМетаданных - объект метаданных, соответствующий идентификатору. -// - Null - возвращается, когда КромеНесуществующихИНедоступных = Истина. Обозначает, что -// для указанного идентификатора объект метаданных не существует (идентификатор устарел). -// - Неопределено - возвращается, когда КромеНесуществующихИНедоступных = Истина. Обозначает, -// что идентификатор действующий, но в текущем сеансе ОбъектМетаданных не может быть получен. -// Для расширений конфигурации это значит, что расширение установлено, но не подключено, -// либо потому что перезапуск еще не выполнен, либо при подключении произошла ошибка. -// Для конфигурации это значит , что в новом сеансе (новом динамическом поколении) объект -// метаданных имеется, а в текущем (старом) сеансе нет. -// -Функция ОбъектыМетаданныхПоИдентификаторам(Идентификаторы, КромеНесуществующихИНедоступных = Ложь) Экспорт - - УстановитьОтключениеБезопасногоРежима(Истина); - УстановитьПривилегированныйРежим(Истина); - ОписаниеОбъектовМетаданныхПоИдентификаторам = КэшИдентификаторов().ОписаниеОбъектовМетаданныхПоИдентификаторам; - УстановитьПривилегированныйРежим(Ложь); - УстановитьОтключениеБезопасногоРежима(Ложь); - - Результат = Новый Соответствие; - ИдентификаторыБезКэша = Новый Массив; - Для Каждого Идентификатор Из Идентификаторы Цикл - Описание = ОписаниеОбъектовМетаданныхПоИдентификаторам.Получить(Идентификатор); - - Если Описание = Неопределено - Или Не КромеНесуществующихИНедоступных - И Описание.Ключ = Неопределено Тогда - - ИдентификаторыБезКэша.Добавить(Идентификатор); - - ИначеЕсли Описание.Ключ = Неопределено Тогда - Результат.Вставить(Идентификатор, Описание.Объект); - - ИначеЕсли ТипЗнч(Описание.Ключ) = Тип("Тип") Тогда - Результат.Вставить(Идентификатор, Метаданные.НайтиПоТипу(Описание.Ключ)); - Иначе - Результат.Вставить(Идентификатор, Метаданные.НайтиПоПолномуИмени(Описание.Ключ)); - КонецЕсли; - КонецЦикла; - - Если ИдентификаторыБезКэша.Количество() = 0 Тогда - Возврат Результат; - КонецЕсли; - - ОбъектыМетаданныхПоИдентификаторам = ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора(ИдентификаторыБезКэша, - КромеНесуществующихИНедоступных); - - Для Каждого КлючИЗначение Из ОбъектыМетаданныхПоИдентификаторам Цикл - ОписаниеОбъектаМетаданных = КлючИЗначение.Значение; - Если ТипЗнч(ОписаниеОбъектаМетаданных) = Тип("Структура") Тогда - Результат.Вставить(КлючИЗначение.Ключ, ОписаниеОбъектаМетаданных.Объект); - ОписаниеОбъектаМетаданных.Объект = Неопределено; - Иначе - Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - ОписаниеОбъектаМетаданных = Новый Структура("Объект, Ключ", КлючИЗначение.Значение) - КонецЕсли; - ОписаниеОбъектовМетаданныхПоИдентификаторам.Вставить(КлючИЗначение.Ключ, ОписаниеОбъектаМетаданных); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Возвращает ссылки на объекты метаданных, найденный по полному имени удаленного объекта метаданных. +// Возвращает ссылки на объект метаданных, найденный по полному имени удаленного объекта метаданных. // Используется когда требуется сделать замену старой ссылки на новую или очистить ее. // // Параметры: @@ -623,11 +542,6 @@ И ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - ТекстОшибки = - НСтр("ru = 'Невозможно обновить идентификаторы объектов расширений - |в сеансе неразделенного пользователя, так как - |расширения для разделенных пользователей не подключены.'"); - ВызватьИсключениеПоОшибке(Истина, ОписаниеОшибкиИдентификаторыОбъектовРасширенийНедоступныВНеразделенномРежиме()); КонецЕсли; @@ -667,10 +581,8 @@ ОбъектМетаданных = Метаданные.НайтиПоТипу(ОписаниеОбъектаМетаданных); Если ОбъектМетаданных = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). - | - |Объект метаданных не найден по типу: - |""%1"".'"), + НСтр("ru = 'Некорректное значение параметра ОписаниеОбъектаМетаданных в функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных. + |Указан несуществующий объект метаданных: ""%1"".'"), ОписаниеОбъектаМетаданных); Иначе ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); @@ -683,9 +595,7 @@ ПолноеИмяОбъектаМетаданных = ОписаниеОбъектаМетаданных.ПолноеИмя(); Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). - | - |Указан недопустимый тип параметра ОписаниеОбъектаМетаданных: + НСтр("ru = 'Некорректный тип параметра ОписаниеОбъектаМетаданных в функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных: |""%1"".'"), ТипОписанияОбъектаМетаданных); КонецЕсли; @@ -697,6 +607,71 @@ КонецФункции +// См. ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору. +Функция ОбъектМетаданныхПоИдентификатору(Идентификатор, ВызыватьИсключение) Экспорт + + Идентификаторы = Новый Массив; + Идентификаторы.Добавить(Идентификатор); + + ОбъектыМетаданных = ОбъектыМетаданныхПоИдентификаторам(Идентификаторы, ВызыватьИсключение); + + Возврат ОбъектыМетаданных.Получить(Идентификатор); + +КонецФункции + +// См. ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам. +Функция ОбъектыМетаданныхПоИдентификаторам(Идентификаторы, ВызыватьИсключение) Экспорт + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + ОписаниеОбъектовМетаданныхПоИдентификаторам = КэшИдентификаторов().ОписаниеОбъектовМетаданныхПоИдентификаторам; + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Результат = Новый Соответствие; + ИдентификаторыБезКэша = Новый Массив; + Для Каждого Идентификатор Из Идентификаторы Цикл + Описание = ОписаниеОбъектовМетаданныхПоИдентификаторам.Получить(Идентификатор); + + Если Описание = Неопределено + Или ВызыватьИсключение + И Описание.Ключ = Неопределено Тогда + + ИдентификаторыБезКэша.Добавить(Идентификатор); + + ИначеЕсли Описание.Ключ = Неопределено Тогда + Результат.Вставить(Идентификатор, Описание.Объект); + + ИначеЕсли ТипЗнч(Описание.Ключ) = Тип("Тип") Тогда + Результат.Вставить(Идентификатор, Метаданные.НайтиПоТипу(Описание.Ключ)); + Иначе + Результат.Вставить(Идентификатор, Метаданные.НайтиПоПолномуИмени(Описание.Ключ)); + КонецЕсли; + КонецЦикла; + + Если ИдентификаторыБезКэша.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + ОбъектыМетаданныхПоИдентификаторам = ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора(ИдентификаторыБезКэша, + ВызыватьИсключение); + + Для Каждого КлючИЗначение Из ОбъектыМетаданныхПоИдентификаторам Цикл + ОписаниеОбъектаМетаданных = КлючИЗначение.Значение; + Если ТипЗнч(ОписаниеОбъектаМетаданных) = Тип("Структура") Тогда + Результат.Вставить(КлючИЗначение.Ключ, ОписаниеОбъектаМетаданных.Объект); + ОписаниеОбъектаМетаданных.Объект = Неопределено; + Иначе + Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + ОписаниеОбъектаМетаданных = Новый Структура("Объект, Ключ", КлючИЗначение.Значение) + КонецЕсли; + ОписаниеОбъектовМетаданныхПоИдентификаторам.Вставить(КлючИЗначение.Ключ, ОписаниеОбъектаМетаданных); + КонецЦикла; + + Возврат Результат; + +КонецФункции + // См. ОбщегоНазначения.ДобавитьПереименование. Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт @@ -1289,9 +1264,9 @@ И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда ИмяСобытия = НСтр("ru = 'Идентификаторы объектов метаданных.Требуется загрузить критичные изменения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , СписокКритичныхИзменений); + ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , СписокКритичныхИзменений); ВызватьИсключениеПоОшибке(ОбъектыРасширений, НСтр("ru = 'Критичные изменения могут быть выполнены только @@ -1304,16 +1279,13 @@ Если Не ТолькоПроверка Тогда Если ЗначениеЗаполнено(СписокКритичныхИзменений) Тогда - ЗаписьЖурналаРегистрации(?(ОбъектыРасширений, + ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(?(ОбъектыРасширений, НСтр("ru = 'Идентификаторы объектов расширений.Выполнены критичные изменения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), НСтр("ru = 'Идентификаторы объектов метаданных.Выполнены критичные изменения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())), - УровеньЖурналаРегистрации.Информация, - , - , - СписокКритичныхИзменений, - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + ОбщегоНазначения.КодОсновногоЯзыка())), + УровеньЖурналаРегистрации.Информация,,, + СписокКритичныхИзменений); КонецЕсли; Если Не ОбъектыРасширений @@ -2234,11 +2206,19 @@ Отбор = Новый Структура; Отбор.Вставить("ЭтоНовый", Истина); Отбор.Вставить("Родитель", ПодсистемаСтандартныеПодсистемы); - НайденныеОписания = Выгрузка.НайтиСтроки(Отбор); + НаследующиеПодсистемы = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриОпределенииНаследованияПодсистем(Выгрузка, НаследующиеПодсистемы); + КонецЕсли; + НовыеПодсистемы = Новый Массив; Для Каждого Описание Из НайденныеОписания Цикл + Если НаследующиеПодсистемы.Найти(Описание) <> Неопределено Тогда + Продолжить; + КонецЕсли; НовыеПодсистемы.Добавить(Описание.ПолноеИмя); КонецЦикла; @@ -2851,7 +2831,7 @@ КонецФункции // Для функций ОбъектМетаданныхПоИдентификатору, ОбъектыМетаданныхПоИдентификаторам. -Функция ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора(Идентификаторы, КромеНесуществующихИНедоступных) +Функция ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора(Идентификаторы, ВызыватьИсключение) Если Идентификаторы.Количество() = 0 Тогда Возврат Новый Соответствие; @@ -2894,7 +2874,7 @@ Попытка ОбъектыМетаданных = ОбъектыМетаданныхПоИдентификаторамБезПопыткиПовтора(Идентификаторы, - ИдентификаторыКонфигурации, ИдентификаторыРасширений, КромеНесуществующихИНедоступных); + ИдентификаторыКонфигурации, ИдентификаторыРасширений, ВызыватьИсключение); Исключение Если Не ОбщегоНазначения.РазделениеВключено() Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -2909,7 +2889,7 @@ Если ОбъектыМетаданных = Неопределено Тогда ОбновитьДанныеСправочника(); ОбъектыМетаданных = ОбъектыМетаданныхПоИдентификаторамБезПопыткиПовтора(Идентификаторы, - ИдентификаторыКонфигурации, ИдентификаторыРасширений, КромеНесуществующихИНедоступных); + ИдентификаторыКонфигурации, ИдентификаторыРасширений, ВызыватьИсключение); КонецЕсли; Возврат ОбъектыМетаданных; @@ -2918,7 +2898,7 @@ // Для функции ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора. Функция ОбъектыМетаданныхПоИдентификаторамБезПопыткиПовтора(Идентификаторы, - ИдентификаторыКонфигурации, ИдентификаторыРасширений, КромеНесуществующихИНедоступных) + ИдентификаторыКонфигурации, ИдентификаторыРасширений, ВызыватьИсключение) УстановитьПривилегированныйРежим(Истина); @@ -2977,16 +2957,16 @@ Если Выгрузка.Количество() < ВсегоИдентификаторов Тогда Для Каждого Идентификатор Из Идентификаторы Цикл Если Выгрузка.Найти(Идентификатор, "Ссылка") = Неопределено Тогда - Если КромеНесуществующихИНедоступных Тогда + Если ВызыватьИсключение Тогда + Прервать; + Иначе // Объект метаданных не существует. ОбъектыМетаданныхИдентификаторов.Вставить(Идентификатор, Null); Продолжить; - Иначе - Прервать; КонецЕсли; КонецЕсли; КонецЦикла; - Если Не КромеНесуществующихИНедоступных Тогда + Если ВызыватьИсключение Тогда ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Идентификатор ""%1"" |не найден в справочнике ""%2"".'"), @@ -3009,10 +2989,7 @@ Если Свойства.ОбъектРасширений И Не Свойства.ПометкаУдаления Тогда // Возможно расширение не удалось подключить. - Если КромеНесуществующихИНедоступных Тогда - ОбъектыМетаданныхИдентификаторов.Вставить(Свойства.Ссылка, Неопределено); - Продолжить; - Иначе + Если ВызыватьИсключение Тогда Отбор = Новый Структура("Имя", Свойства.ИмяРасширения); Если РасширенияКонфигурации.Получить(Отбор, ИсточникРасширенийКонфигурации.СеансОтключенные).Количество() > 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -3025,19 +3002,22 @@ |Требуется перезапустить сеанс.'"), Свойства.ИмяРасширения); КонецЕсли; + Иначе + ОбъектыМетаданныхИдентификаторов.Вставить(Свойства.Ссылка, Неопределено); + Продолжить; КонецЕсли; ИначеЕсли Не Свойства.ОбъектРасширений И ВерсияПрограммыОбновленаДинамически Тогда // Возможно объект метаданных будет доступен после перезапуска. - Если КромеНесуществующихИНедоступных Тогда - ОбъектыМетаданныхИдентификаторов.Вставить(Свойства.Ссылка, Неопределено); - Продолжить; - Иначе + Если ВызыватьИсключение Тогда // Стандартное исключение по причине динамического обновления. СтандартныеПодсистемыСервер.ПотребоватьПерезапускСеансаПоПричинеДинамическогоОбновленияВерсииПрограммы(); + Иначе + ОбъектыМетаданныхИдентификаторов.Вставить(Свойства.Ссылка, Неопределено); + Продолжить; КонецЕсли; - ИначеЕсли КромеНесуществующихИНедоступных Тогда + ИначеЕсли Не ВызыватьИсключение Тогда // Объект метаданных не существует. ОбъектыМетаданныхИдентификаторов.Вставить(Свойства.Ссылка, Null); Продолжить; @@ -3680,9 +3660,9 @@ ЗаписьЖурналаРегистрации( ?(ОбъектыРасширений, НСтр("ru = 'Идентификаторы объектов расширений.Замена идентификатора'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), НСтр("ru = 'Идентификаторы объектов метаданных.Замена идентификатора'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())), + ОбщегоНазначения.КодОсновногоЯзыка())), УровеньЖурналаРегистрации.Ошибка, , , diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl index 76165273c..c0bbb6527 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl @@ -1,19 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) + // Проверка ОбменДанными.Загрузка выполняется в вызываемой процедуре. Справочники.ИдентификаторыОбъектовМетаданных.ПередЗаписьюОбъекта(ЭтотОбъект); КонецПроцедуры Процедура ПередУдалением(Отказ) + // Проверка ОбменДанными.Загрузка выполняется в вызываемой процедуре. Справочники.ИдентификаторыОбъектовМетаданных.ПередУдалениемОбъекта(ЭтотОбъект); КонецПроцедуры #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Module.bsl index 1872c963a..5897a5e9c 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Module.bsl index ed2976380..aaeae666e 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl index a9cfc76f6..311f4895d 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -38,6 +46,49 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПолныеИменаТаблицСДанными() Экспорт + + Таблицы = Новый Массив; + + Если Не ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) Тогда + Возврат Таблицы; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК ВерсииИдентификаторов + |ГДЕ + | ВерсииИдентификаторов.ВерсияРасширений = &ВерсияРасширений + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВерсииИдентификаторов.ПолноеИмяОбъекта КАК ПолноеИмяОбъекта + |ИЗ + | РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК ВерсииИдентификаторов + |ГДЕ + | ВерсииИдентификаторов.ВерсияРасширений = &ВерсияРасширений + | И ВерсииИдентификаторов.Идентификатор.БезДанных = ЛОЖЬ"; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если РезультатыЗапроса[0].Пустой() Тогда + Справочники.ИдентификаторыОбъектовМетаданных.ДанныеОбновлены(Истина, Истина); + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + КонецЕсли; + + Возврат РезультатыЗапроса[1].Выгрузить().ВыгрузитьКолонку("ПолноеИмяОбъекта"); + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Процедура обновляет данные справочника по метаданным конфигурации. diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ObjectModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ObjectModule.bsl index 76165273c..c0bbb6527 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ObjectModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ObjectModule.bsl @@ -1,19 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) + // Проверка ОбменДанными.Загрузка выполняется в вызываемой процедуре. Справочники.ИдентификаторыОбъектовМетаданных.ПередЗаписьюОбъекта(ЭтотОбъект); КонецПроцедуры Процедура ПередУдалением(Отказ) + // Проверка ОбменДанными.Загрузка выполняется в вызываемой процедуре. Справочники.ИдентификаторыОбъектовМетаданных.ПередУдалениемОбъекта(ЭтотОбъект); КонецПроцедуры #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl index 3fcdc5d62..5739019a2 100644 --- a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -15,6 +22,11 @@ КонецЦикла; РасписаниеРаботы.Сортировать("ВремяНачала"); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + Элементы.ФормаОтмена.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -36,7 +48,7 @@ Возврат; КонецЕсли; - ГрафикиРаботыКлиентСервер.ВосстановитьПорядокСтрокКоллекцииПослеРедактирования(РасписаниеРаботы, "ВремяНачала", Элемент.ТекущиеДанные); + ГрафикиРаботыКлиент.ВосстановитьПорядокСтрокКоллекцииПослеРедактирования(РасписаниеРаботы, "ВремяНачала", Элемент.ТекущиеДанные); КонецПроцедуры @@ -76,13 +88,13 @@ ИндексСтроки = РасписаниеРаботы.Индекс(СтрокаРасписания); Если СтрокаРасписания.ВремяНачала > СтрокаРасписания.ВремяОкончания И ЗначениеЗаполнено(СтрокаРасписания.ВремяОкончания) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Время начала больше времени окончания'"), , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("РасписаниеРаботы[%1].ВремяОкончания", ИндексСтроки), , Отказ); КонецЕсли; Если СтрокаРасписания.ВремяНачала = СтрокаРасписания.ВремяОкончания Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Длительность интервала не определена'"), , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("РасписаниеРаботы[%1].ВремяОкончания", ИндексСтроки), , Отказ); @@ -90,7 +102,7 @@ Если ОкончаниеДня <> Неопределено Тогда Если ОкончаниеДня > СтрокаРасписания.ВремяНачала Или Не ЗначениеЗаполнено(ОкончаниеДня) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Обнаружены пересекающиеся интервалы'"), , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("РасписаниеРаботы[%1].ВремяНачала", ИндексСтроки), , Отказ); diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form index 3879af5a1..985b0afb9 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form @@ -475,6 +475,11 @@ true auto true + + + КоманднаяПанель + + Список 1 diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl index e1675042a..e12c72be7 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -18,37 +25,11 @@ ЕстьГрупповоеИзменениеРеквизитов = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов"); Элементы.СписокИзменитьВыделенные.Видимость = ЕстьГрупповоеИзменениеРеквизитов И МожноРедактировать; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Для каждого ЭлементФормы Из Элементы.КоманднаяПанель.ПодчиненныеЭлементы Цикл - - Элементы.Переместить(ЭлементФормы, Элементы.ФормаКоманднаяПанель); - - КонецЦикла; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры #КонецОбласти -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура ИзменитьВыделенные(Команда) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда - МодульГрупповоеИзменениеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ГрупповоеИзменениеОбъектовКлиент"); - МодульГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список); - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаСервереБезКонтекста Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) @@ -150,6 +131,18 @@ #КонецОбласти +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ИзменитьВыделенные(Команда) + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда + МодульГрупповоеИзменениеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ГрупповоеИзменениеОбъектовКлиент"); + МодульГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form index 74873aa30..c991cf1ca 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form @@ -92,28 +92,21 @@ ПериодГруппа 221 - - ДатаНачала - 171 + + НадписьПериодЗаполнения + 375 <key>ru</key> - <value>Период заполнения графика с</value> + <value>Период заполнения графика</value> true true true - - Объект.ДатаНачала - - - OnChange - ДатаНачалаПриИзменении - - ДатаНачалаExtendedTooltip - 306 + НадписьПериодЗаполненияРасширеннаяПодсказка + 377 Label true true @@ -122,43 +115,128 @@ - ДатаНачалаКонтекстноеМеню - 172 + НадписьПериодЗаполненияКонтекстноеМеню + 376 true - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal + Label + true + true + + Left - - ДатаОкончания - 219 - - <key>ru</key> - <value>по</value> - + + ГруппаДаты + 378 + + ДатаНачала + 171 + + <key>ru</key> + <value>с</value> + + true + true + + true + + + Объект.ДатаНачала + + + OnChange + ДатаНачалаПриИзменении + + + ДатаНачалаExtendedTooltip + 306 + Label + true + true + + Left + + + + ДатаНачалаКонтекстноеМеню + 172 + true + + InputField + Enter + true + Left + true + + 8 + true + true + true + true + true + true + Normal + + + + ДатаОкончания + 219 + + <key>ru</key> + <value>по</value> + + true + true + + true + + + Объект.ДатаОкончания + + + ДатаОкончанияExtendedTooltip + 307 + Label + true + true + + Left + + + + ДатаОкончанияКонтекстноеМеню + 220 + true + + InputField + Enter + true + Left + true + + 8 + true + true + true + true + true + true + Normal + + true true true - - Объект.ДатаОкончания - + + <key>ru</key> + <value>Период</value> + - ДатаОкончанияExtendedTooltip - 307 + ГруппаДатыРасширеннаяПодсказка + 379 Label true true @@ -166,24 +244,14 @@ Left - - ДатаОкончанияКонтекстноеМеню - 220 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto true @@ -520,7 +588,7 @@ Left true - 6 + 5 true true false @@ -569,6 +637,58 @@ Left + + ДатаОтсчета + 229 + + <key>ru</key> + <value>начиная с</value> + + true + true + + true + + + Объект.ДатаОтсчета + + + OnChange + ДатаОтсчетаПриИзменении + + + ДатаОтсчетаExtendedTooltip + 321 + Label + true + true + + Left + + + + ДатаОтсчетаКонтекстноеМеню + 230 + true + + InputField + true + Enter + true + Left + true + + 8 + true + true + true + true + true + true + true + Normal + + true true @@ -590,7 +710,7 @@
      UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -598,57 +718,6 @@ Auto
      - - ДатаОтсчета - 229 - - <key>ru</key> - <value>начиная с</value> - - true - true - - true - - - Объект.ДатаОтсчета - - - OnChange - ДатаОтсчетаПриИзменении - - - ДатаОтсчетаExtendedTooltip - 321 - Label - true - true - - Left - - - - ДатаОтсчетаКонтекстноеМеню - 230 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - true true @@ -1284,6 +1353,10 @@ ГоризонтПланирования 236 + + <key>ru</key> + <value>Горизонт планирования, мес.</value> + true true @@ -1292,11 +1365,6 @@ Объект.ГоризонтПланирования - - ru - мес. - - ShowRight OnChange ГоризонтПланированияПриИзменении diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index 6ce1b4a91..694ffc2a9 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -169,7 +177,7 @@ КонецЕсли; Если Объект.ШаблонЗаполнения.НайтиСтроки(Новый Структура("ДеньВключенВГрафик", Истина)).Количество() = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Не отмечены дни, включаемые в график работы'"), , "Объект.ШаблонЗаполнения", , Отказ); КонецЕсли; @@ -398,16 +406,16 @@ Если ДниГрафика.Получить(ВыбраннаяДата) = Неопределено Тогда // Включаем в график - ГрафикиРаботыКлиентСервер.ВставитьВФиксированноеСоответствие(ДниГрафика, ВыбраннаяДата, Истина); + ГрафикиРаботыКлиент.ВставитьВФиксированноеСоответствие(ДниГрафика, ВыбраннаяДата, Истина); ДеньВключенВГрафик = Истина; Иначе // Исключаем из графика - ГрафикиРаботыКлиентСервер.УдалитьИзФиксированногоСоответствия(ДниГрафика, ВыбраннаяДата); + ГрафикиРаботыКлиент.УдалитьИзФиксированногоСоответствия(ДниГрафика, ВыбраннаяДата); ДеньВключенВГрафик = Ложь; КонецЕсли; // Фиксируем ручное изменение на дату. - ГрафикиРаботыКлиентСервер.ВставитьВФиксированноеСоответствие(ДниИзмененные, ВыбраннаяДата, ДеньВключенВГрафик); + ГрафикиРаботыКлиент.ВставитьВФиксированноеСоответствие(ДниИзмененные, ВыбраннаяДата, ДеньВключенВГрафик); Элементы.ГрафикРаботы.Обновить(); diff --git a/SSL/src/Catalogs/Календари/ManagerModule.bsl b/SSL/src/Catalogs/Календари/ManagerModule.bsl index 6f5305633..dbba09512 100644 --- a/SSL/src/Catalogs/Календари/ManagerModule.bsl +++ b/SSL/src/Catalogs/Календари/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/Catalogs/Календари/ObjectModule.bsl b/SSL/src/Catalogs/Календари/ObjectModule.bsl index 39c4431df..163b69701 100644 --- a/SSL/src/Catalogs/Календари/ObjectModule.bsl +++ b/SSL/src/Catalogs/Календари/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -53,4 +61,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаВыбора/Module.bsl index cd18ecc77..fcba699d2 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -26,14 +33,6 @@ ПереключитьВидимостьНедействующихБанков(Ложь); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСоздать", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСоздатьГруппу", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗагрузитьКлассификатор", "Заголовок", НСтр("ru ='Загрузить'")); - - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаСписка/Form.form index b7ba79c8b..2fe734c6e 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаСписка/Form.form @@ -491,32 +491,6 @@ ФормаКоманднаяПанель -1 - - ФормаСоздатьМобильныйКлиент - 40 - true - - true - - - ФормаСоздатьМобильныйКлиентРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - Left @@ -533,6 +507,11 @@ true auto true + + + КоманднаяПанель + + Список 1 diff --git a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаСписка/Module.bsl index 1f8bb9010..17860459b 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -24,25 +31,6 @@ ТолькоПросмотр = Истина; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Для каждого ЭлементФормы Из Элементы.КоманднаяПанель.ПодчиненныеЭлементы Цикл - - Элементы.Переместить(ЭлементФормы, Элементы.ФормаКоманднаяПанель); - - КонецЦикла; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗагрузитьКлассификатор", "Заголовок", НСтр("ru ='Загрузить'")); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗагрузитьКлассификатор", "КнопкаПоУмолчанию", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗагрузитьКлассификатор", "АктивизироватьПоУмолчанию", Истина); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСоздать", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСоздатьМобильныйКлиент", "Видимость", Истина); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Form.form index 34ea4a4f1..856b40027 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Form.form @@ -551,7 +551,6 @@ 30 true true - false true true true @@ -744,6 +743,7 @@ Объект.ГородМеждународный + Left ГородМеждународныйРасширеннаяПодсказка 56 @@ -768,7 +768,6 @@ 30 true true - false true true true diff --git a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Module.bsl index 83926739c..565d6dfcd 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -17,6 +24,12 @@ Элементы.НадписьДеятельностьБанкаПрекращена.Заголовок = РаботаСБанками.ПояснениеНедействительногоБанка(Объект.Ссылка); КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ГруппаШапка.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.ГруппаРеквизитыДляПлатежейВнутриСтраны.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.ГруппаРеквизитыДляМеждународныхПлатежей.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + КонецЕсли; + КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl b/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl index 870bf3df1..a383ec49a 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl +++ b/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form index f423c0900..93e44f698 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form @@ -18,13 +18,52 @@ true None - Ссылка - 6 + Наименование + 19 true true true + + Список.Description + + + НаименованиеРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Ссылка + 6 + true + true + Список.Ref diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl index 227f5615e..df48c2886 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl index be15a3be0..9984a85a6 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl index fc1de3fd3..aa7d6d2ee 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl b/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl index c85e551a2..0898a1b0b 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -51,7 +59,7 @@ "Справочник.КлючевыеОперации.МодульОбъекта.ПередЗаписью", УровеньЖурналаРегистрации.Ошибка, ТекстСообщения); - ОценкаПроизводительностиКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОценкаПроизводительностиСлужебный.СообщитьПользователю(ТекстСообщения); Отказ = Истина; КонецЕсли; @@ -59,4 +67,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Form.form index a34db42df..01bc0a9eb 100644 --- a/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Form.form @@ -445,6 +445,9 @@ true + + Список.Ref +
      true
      Catalog.КлючиДоступа diff --git a/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Module.bsl index 9da34062b..26c188b68 100644 --- a/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаЭлемента/Module.bsl index abc44d15d..3fa27bfb4 100644 --- a/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/КлючиДоступа/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/КлючиДоступа/КлючиДоступа.mdo b/SSL/src/Catalogs/КлючиДоступа/КлючиДоступа.mdo index 2a44a701b..573f6ce66 100644 --- a/SSL/src/Catalogs/КлючиДоступа/КлючиДоступа.mdo +++ b/SSL/src/Catalogs/КлючиДоступа/КлючиДоступа.mdo @@ -118,6 +118,7 @@ Список
      + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/Catalogs/НаборыГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/НаборыГруппДоступа/Forms/ФормаСписка/Module.bsl index 08a5cd4de..0f5d71466 100644 --- a/SSL/src/Catalogs/НаборыГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/НаборыГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/НаборыГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/НаборыГруппДоступа/Forms/ФормаЭлемента/Module.bsl index b4759e5fa..3a8aac1f2 100644 --- a/SSL/src/Catalogs/НаборыГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/НаборыГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -55,7 +63,7 @@ &НаСервере Процедура ДобавитьЭлементСписка(СписокВыбора, ИмяСправочника) - ПустойИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + ПустойИдентификатор = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); СписокВыбора.Добавить(Справочники[ИмяСправочника].ПолучитьСсылку(ПустойИдентификатор), Метаданные.Справочники[ИмяСправочника].Представление()); diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl index 7aef7ef64..c3fdfb53e 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form index c82253b60..c8c786aec 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form @@ -98,543 +98,12 @@ Auto - - КоманднаяПанельФормы - 92 - - СвойстваТолькоСоздать - 101 - - <key>ru</key> - <value>Создать</value> - - true - true - - true - - - СвойстваТолькоСоздатьExtendedTooltip - 105 - Label - true - true - - Left - - - Form.Command.Создать - Normal - Auto - true - true - UserCmds - - StdPicture.CreateListItem - - Auto - - - СвойстваПодменюДобавить - 80 - - СвойстваСоздать - 62 - true - true - - true - - - СвойстваСоздатьExtendedTooltip - 107 - Label - true - true - - Left - - - Form.Command.Создать - Normal - Auto - true - true - UserCmds - Auto - - - ДобавитьИзНабора - 165 - true - true - - true - - - ДобавитьИзНабораРасширеннаяПодсказка - 166 - Label - true - true - - Left - - - Form.Command.ДобавитьИзНабора - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Добавить</value> - - - СвойстваПодменюДобавитьExtendedTooltip - 106 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - - СвойстваГруппаКнопокДействия - 57 - - СвойстваСкопировать - 65 - true - true - - true - - - СвойстваСкопироватьExtendedTooltip - 111 - Label - true - true - - Left - - - Form.Command.Скопировать - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СвойстваИзменить - 66 - true - true - - true - - - СвойстваИзменитьExtendedTooltip - 112 - Label - true - true - - Left - - - Form.Command.Изменить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СвойстваПометитьНаУдаление - 67 - true - true - - true - - - СвойстваПометитьНаУдалениеExtendedTooltip - 113 - Label - true - true - - Left - - - Form.Command.ПометитьНаУдаление - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Свойства группа кнопок 2</value> - - - СвойстваГруппаКнопокДействияРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - - - - СвойстваГруппаКнопокПорядок - 56 - - СвойстваПереместитьВверх - 63 - true - true - - true - - - СвойстваПереместитьВверхExtendedTooltip - 115 - Label - true - true - - Left - - - Form.Command.ПереместитьВверх - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СвойстваПереместитьВниз - 64 - true - true - - true - - - СвойстваПереместитьВнизExtendedTooltip - 116 - Label - true - true - - Left - - - Form.Command.ПереместитьВниз - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Свойства группа кнопок порядок</value> - - - СвойстваГруппаКнопокПорядокРасширеннаяПодсказка - 114 - Label - true - true - - Left - - - - - - ПоискИУдалениеДублей - 169 - true - true - - true - - - ПоискИУдалениеДублейРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - Form.Command.ПоискИУдалениеДублей - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокНайти - 36 - true - true - - true - - - СписокНайтиExtendedTooltip - 117 - Label - true - true - - Left - - - Form.Item.НаборыСвойств.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - СписокОтменитьПоиск - 37 - true - true - - true - - - СписокОтменитьПоискExtendedTooltip - 118 - Label - true - true - - Left - - - Form.Item.НаборыСвойств.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - - ГруппаКнопокКопирование - 177 - - КопироватьРеквизит - 183 - true - true - - true - - - КопироватьРеквизитРасширеннаяПодсказка - 184 - Label - true - true - - Left - - - Form.Command.КопироватьРеквизит - Normal - Auto - true - true - UserCmds - Auto - - - ВставитьРеквизит - 181 - true - true - - true - - - ВставитьРеквизитРасширеннаяПодсказка - 182 - Label - true - true - - Left - - - Form.Command.ВставитьРеквизит - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Кнопок копирование</value> - - - ГруппаКнопокКопированиеРасширеннаяПодсказка - 178 - Label - true - true - - Left - - - - - - ФормаИзменитьФорму - 79 - true - true - - true - - - ФормаИзменитьФормуExtendedTooltip - 119 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСправка - 78 - true - true - - true - - - ФормаСправкаExtendedTooltip - 120 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель формы</value> - - - КоманднаяПанельФормыExtendedTooltip - 104 - Label - true - true - - Left - - - CommandBar - - Left - - ГруппаСвойства 70 НаборыСвойств 1 - VeryHigh <key>ru</key> <value>Наборы свойств</value> @@ -707,7 +176,7 @@ <enabled>true</enabled> <userVisible/> <dataPath xsi:type="form:DataPath"> - <segments>НаборыСвойств.Ref</segments> + <segments>НаборыСвойств.Ссылка</segments> </dataPath> <extendedTooltip> <name>СсылкаРасширеннаяПодсказка</name> @@ -869,7 +338,7 @@ <borderColor xsi:type="core:ColorRef"> <color>Style.BorderColor</color> </borderColor> - <currentRowUse>SelectionPresentationAndChoice</currentRowUse> + <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> @@ -882,44 +351,9 @@ <userSettingsGroup>ГруппаПользовательскихНастроек</userSettingsGroup> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>КоманднаяПанельФормыМобильныйКлиент</name> - <id>185</id> - <displayImportance>VeryHigh</displayImportance> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <title> - <key>ru</key> - <value>Командная панель формы мобильный клиент</value> - - - КоманднаяПанельФормыМобильныйКлиентРасширеннаяПодсказка - 186 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - WeakSeparation - true - true - Auto - Auto - - Свойства 38 - VeryHigh <key>ru</key> <value>Свойства</value> @@ -941,6 +375,10 @@ <items xsi:type="form:FormField"> <name>СвойстваЗаголовок</name> <id>41</id> + <title> + <key>ru</key> + <value>Имя</value> + true true @@ -970,7 +408,6 @@ Left true - 10 true true true @@ -1016,7 +453,6 @@ Left true - 20 true true true @@ -1613,7 +1049,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -1621,13 +1057,517 @@ Auto - None - false + Top + true ФормаКоманднаяПанель -1 + + СвойстваТолькоСоздать + 101 + + <key>ru</key> + <value>Создать</value> + + true + true + + true + + + СвойстваТолькоСоздатьExtendedTooltip + 105 + Label + true + true + + Left + + + Form.Command.Создать + Normal + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + СвойстваПодменюДобавить + 80 + + СвойстваСоздать + 62 + true + true + + true + + + СвойстваСоздатьExtendedTooltip + 107 + Label + true + true + + Left + + + Form.Command.Создать + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьИзНабора + 165 + true + true + + true + + + ДобавитьИзНабораРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + Form.Command.ДобавитьИзНабора + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавить</value> + + + СвойстваПодменюДобавитьExtendedTooltip + 106 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Normal + + + + СвойстваГруппаКнопокДействия + 57 + + СвойстваСкопировать + 65 + true + true + + true + + + СвойстваСкопироватьExtendedTooltip + 111 + Label + true + true + + Left + + + Form.Command.Скопировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СвойстваИзменить + 66 + true + true + + true + + + СвойстваИзменитьExtendedTooltip + 112 + Label + true + true + + Left + + + Form.Command.Изменить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СвойстваПометитьНаУдаление + 67 + true + true + + true + + + СвойстваПометитьНаУдалениеExtendedTooltip + 113 + Label + true + true + + Left + + + Form.Command.ПометитьНаУдаление + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Свойства группа кнопок 2</value> + + + СвойстваГруппаКнопокДействияРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + + + + СвойстваГруппаКнопокПорядок + 56 + + СвойстваПереместитьВверх + 63 + true + true + + true + + + СвойстваПереместитьВверхExtendedTooltip + 115 + Label + true + true + + Left + + + Form.Command.ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СвойстваПереместитьВниз + 64 + true + true + + true + + + СвойстваПереместитьВнизExtendedTooltip + 116 + Label + true + true + + Left + + + Form.Command.ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Свойства группа кнопок порядок</value> + + + СвойстваГруппаКнопокПорядокРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + + + ПоискИУдалениеДублей + 169 + true + true + + true + + + ПоискИУдалениеДублейРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + Form.Command.ПоискИУдалениеДублей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокНайти + 36 + true + true + + true + + + СписокНайтиExtendedTooltip + 117 + Label + true + true + + Left + + + Form.Item.НаборыСвойств.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + СписокОтменитьПоиск + 37 + true + true + + true + + + СписокОтменитьПоискExtendedTooltip + 118 + Label + true + true + + Left + + + Form.Item.НаборыСвойств.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаКнопокКопирование + 177 + + КопироватьРеквизит + 183 + true + true + + true + + + КопироватьРеквизитРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + Form.Command.КопироватьРеквизит + Normal + Auto + true + true + UserCmds + Auto + + + ВставитьРеквизит + 181 + true + true + + true + + + ВставитьРеквизитРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + Form.Command.ВставитьРеквизит + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Кнопок копирование</value> + + + ГруппаКнопокКопированиеРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + + + + ФормаИзменитьФорму + 79 + true + true + + true + + + ФормаИзменитьФормуExtendedTooltip + 119 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 78 + true + true + + true + + + ФормаСправкаExtendedTooltip + 120 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left - true NotificationProcessing @@ -1665,38 +1605,44 @@ true - НаборыСвойств.IsFolder + НаборыСвойств.Родитель - НаборыСвойств.Parent + НаборыСвойств.Ссылка - НаборыСвойств.Ref + НаборыСвойств.ЭтоГруппа
      true
      ВЫБРАТЬ - Наборы.Ссылка, - Наборы.ВерсияДанных, - Наборы.ПометкаУдаления, - Наборы.Предопределенный, - Наборы.Родитель, - Наборы.ЭтоГруппа, - Наборы.Наименование, - Наборы.Используется, + Наборы.Ссылка КАК Ссылка, + Наборы.ВерсияДанных КАК ВерсияДанных, + Наборы.ПометкаУдаления КАК ПометкаУдаления, + Наборы.Предопределенный КАК Предопределенный, + Наборы.Родитель КАК Родитель, + Наборы.ЭтоГруппа КАК ЭтоГруппа, + Наборы.Наименование КАК Наименование, + Наборы.Используется КАК Используется, ВЫБОР КОГДА Наборы.ЭтоГруппа - ТОГДА Наборы.Наименование + ТОГДА ПРЕДСТАВЛЕНИЕ(Наборы.Ссылка) КОГДА &ЭтоНаборыДополнительныхСведений ТОГДА ВЫБОР КОГДА Наборы.КоличествоСведений = "" - ТОГДА Наборы.Наименование - ИНАЧЕ Наборы.Наименование + " (" + Наборы.КоличествоСведений + ")" + ТОГДА ПРЕДСТАВЛЕНИЕ(Наборы.Ссылка) + КОГДА Наборы.КоличествоСведений <> "" + И &ЭтоОсновнойЯзык + ТОГДА Наборы.Наименование + " (" + Наборы.КоличествоСведений + ")" + ИНАЧЕ (ВЫРАЗИТЬ(ЕСТЬNULL(НаборыПредставления.Наименование, Наборы.Наименование) КАК СТРОКА(150))) + " (" + Наборы.КоличествоСведений + ")" КОНЕЦ ИНАЧЕ ВЫБОР КОГДА Наборы.КоличествоРеквизитов = "" - ТОГДА Наборы.Наименование - ИНАЧЕ Наборы.Наименование + " (" + Наборы.КоличествоРеквизитов + ")" + ТОГДА ПРЕДСТАВЛЕНИЕ(Наборы.Ссылка) + КОГДА Наборы.КоличествоСведений <> "" + И &ЭтоОсновнойЯзык + ТОГДА Наборы.Наименование + " (" + Наборы.КоличествоРеквизитов + ")" + ИНАЧЕ (ВЫРАЗИТЬ(ЕСТЬNULL(НаборыПредставления.Наименование, Наборы.Наименование) КАК СТРОКА(150))) + " (" + Наборы.КоличествоРеквизитов + ")" КОНЕЦ КОНЕЦ КАК Представление, ВЫБОР @@ -1710,6 +1656,9 @@ КОНЕЦ КАК НомерКартинки ИЗ Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.Представления КАК НаборыПредставления + ПО (НаборыПредставления.Ссылка = Наборы.Ссылка) + И (НаборыПредставления.КодЯзыка = &КодЯзыка) ГДЕ ВЫБОР КОГДА Наборы.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) @@ -1717,7 +1666,7 @@ ИНАЧЕ Наборы.Родитель В (&Наборы) КОНЕЦ И Наборы.Используется - И ЕСТЬNULL(Наборы.Родитель.Используется, ИСТИНА) + И ЕСТЬNULL(Наборы.Родитель.Используется, ИСТИНА) Catalog.НаборыДополнительныхРеквизитовИСведений true true @@ -2061,6 +2010,23 @@ true + + ВажностьУстановлена + + <key>ru</key> + <value>Важность установлена</value> + + 11 + + Boolean + + + true + + + true + + ПереместитьВверх diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl index 1423369ec..31f7cce56 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -21,7 +28,6 @@ КонецЕсли; ЦветФормы = Элементы.Свойства.ЦветФона; - ОформитьНаборыИСвойства(); НастроитьИспользованиеКоманд(); @@ -32,16 +38,11 @@ Элементы.ПоискИУдалениеДублей.Видимость = Ложь; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.КоманднаяПанельФормы, Элементы.КоманднаяПанельФормыМобильныйКлиент); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НаборыСвойств", "Шапка", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НаборыСвойств", "АвтоМаксимальнаяВысота", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НаборыСвойств", "МаксимальнаяВысота", 5); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КопироватьРеквизит", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВставитьРеквизит", "ТолькоВоВсехДействиях", Истина); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.НаборыСвойств.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; + Элементы.НаборыСвойств.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.Свойства.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.СвойстваПодменюДобавить.Отображение = ОтображениеКнопки.Картинка; КонецЕсли; КонецПроцедуры @@ -386,9 +387,9 @@ // Оформление недоступных групп наборов, которые безусловно отображаются платформой, как часть дерева групп. ЭлементУсловногоОформления = НаборыСвойств.УсловноеОформление.Элементы.Добавить(); - ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; - ЭлементЦветаОформления.Использование = Истина; + ЭлементВидимость = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Видимость"); + ЭлементВидимость.Значение = Ложь; + ЭлементВидимость.Использование = Истина; ГруппаЭлементовОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаЭлементовОтбораДанных.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; @@ -519,7 +520,6 @@ МетаданныеТабличнаяЧасть = Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений.ТабличныеЧасти.ДополнительныеСведения; - Элементы.СвойстваЗаголовок.Заголовок = МетаданныеТабличнаяЧасть.Реквизиты.Свойство.Синоним; Элементы.СвойстваЗаголовок.Подсказка = МетаданныеТабличнаяЧасть.Реквизиты.Свойство.Подсказка; Элементы.СвойстваЗаполнятьОбязательно.Видимость = Ложь; @@ -547,7 +547,6 @@ МетаданныеТабличнаяЧасть = Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений.ТабличныеЧасти.ДополнительныеРеквизиты; - Элементы.СвойстваЗаголовок.Заголовок = МетаданныеТабличнаяЧасть.Реквизиты.Свойство.Синоним; Элементы.СвойстваЗаголовок.Подсказка = МетаданныеТабличнаяЧасть.Реквизиты.Свойство.Подсказка; Элементы.СвойстваЗаполнятьОбязательно.Видимость = Истина; @@ -596,6 +595,12 @@ ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( НаборыСвойств, "Наборы", ДоступныеНаборы, Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НаборыСвойств, "ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык, Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НаборыСвойств, "КодЯзыка", ТекущийЯзык().КодЯзыка, Истина); ПриИзмененииТекущегоНабораНаСервере(); @@ -616,6 +621,15 @@ ПриИзмененииТекущегоНабораНаСервере(); КонецЕсли; +#Если МобильныйКлиент Тогда + ТекущийЭлемент = Элементы.Свойства; + Если Не ВажностьУстановлена Тогда + Элементы.НаборыСвойств.ВажностьПриОтображении = ВажностьПриОтображении.ОченьНизкая; + ВажностьУстановлена = Истина; + КонецЕсли; + Элементы.Свойства.Заголовок = Строка(ТекущийНабор); +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -738,13 +752,19 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("Набор", ТекущийНабор); + Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); + Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); Запрос.Текст = "ВЫБРАТЬ | СвойстваНаборов.НомерСтроки, | СвойстваНаборов.Свойство, | СвойстваНаборов.ПометкаУдаления, - | ЕСТЬNULL(Свойства.Заголовок, ПРЕДСТАВЛЕНИЕ(СвойстваНаборов.Свойство)) КАК Заголовок, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.Заголовок + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, Свойства.Заголовок) КАК СТРОКА(150)) + | КОНЕЦ КАК Заголовок, | Свойства.ВладелецДополнительныхЗначений, | Свойства.ЗаполнятьОбязательно, | Свойства.ТипЗначения КАК ТипЗначения, @@ -764,6 +784,9 @@ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства | ПО СвойстваНаборов.Свойство = Свойства.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления + | ПО (СвойстваПредставления.Ссылка = Свойства.Ссылка) + | И СвойстваПредставления.КодЯзыка = &КодЯзыка |ГДЕ | СвойстваНаборов.Ссылка = &Набор | @@ -837,7 +860,7 @@ КонецЕсли; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 4 - | ЗначенияСвойствОбъектов.Наименование КАК Наименование + | ПРЕДСТАВЛЕНИЕ(ЗначенияСвойствОбъектов.Ссылка) КАК Наименование |ИЗ | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ @@ -848,7 +871,7 @@ |ОБЪЕДИНИТЬ | |ВЫБРАТЬ ПЕРВЫЕ 4 - | ЗначенияСвойствОбъектовИерархия.Наименование + | ПРЕДСТАВЛЕНИЕ(ЗначенияСвойствОбъектовИерархия.Ссылка) КАК Наименование |ИЗ | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектовИерархия |ГДЕ diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl index b3cbad593..4711c3a23 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl index 23bc4c507..18d07883b 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -25,6 +33,47 @@ #КонецОбласти +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) + Поля.Добавить("ИмяПредопределенногоНабора"); + Поля.Добавить("Наименование"); + Поля.Добавить("Ссылка"); + Поля.Добавить("Родитель"); + + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Данные.Родитель) Тогда + ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Данные.ИмяПредопределенногоНабора) Тогда + ИмяНабора = Данные.ИмяПредопределенногоНабора; + Иначе +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + ИмяНабора = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Данные.Ссылка, "ИмяПредопределенныхДанных"); +#Иначе + ИмяНабора = ""; +#КонецЕсли + КонецЕсли; + Представление = ПредставлениеНабораВерхнегоУровня(ИмяНабора, Данные); + + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +#КонецОбласти + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область СлужебныйПрограммныйИнтерфейс // Обновляет состав наименований предопределенных наборов в @@ -38,7 +87,7 @@ УстановитьПривилегированныйРежим(Истина); - ПредопределенныеНаборы = ПредопределенныеНаборы(); + ПредопределенныеНаборы = ПредопределенныеНаборыСвойств(); НачатьТранзакцию(); Попытка @@ -67,27 +116,276 @@ КонецПроцедуры - - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -Функция ПредопределенныеНаборы() +Процедура ОбработатьНаборыСвойствДляПереходаНаНовуюВерсию(Параметры) Экспорт - ПредопределенныеНаборы = Новый Соответствие; + ПредопределенныеНаборыСвойств = УправлениеСвойствамиПовтИсп.ПредопределенныеНаборыСвойств(); + ПроблемныхОбъектов = 0; - ИменаПредопределенных = Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений.ПолучитьИменаПредопределенных(); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Наборы.Ссылка КАК Ссылка, + | Наборы.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | Наборы.ДополнительныеРеквизиты.( + | Свойство КАК Свойство + | ) КАК ДополнительныеРеквизиты, + | Наборы.ДополнительныеСведения.( + | Свойство КАК Свойство + | ) КАК ДополнительныеСведения, + | Наборы.Родитель КАК Родитель, + | Наборы.ЭтоГруппа КАК ЭтоГруппа + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы + |ГДЕ + | Наборы.Предопределенный = ИСТИНА"; + Результат = Запрос.Выполнить().Выгрузить(); - Для каждого Имя Из ИменаПредопределенных Цикл - ПредопределенныеНаборы.Вставить( - Имя, УправлениеСвойствамиСлужебный.НаименованиеПредопределенногоНабора(Имя)); + Для Каждого ОбновляемыйНабор Из Результат Цикл + + НачатьТранзакцию(); + Попытка + Если Не ЗначениеЗаполнено(ОбновляемыйНабор.ИмяПредопределенныхДанных) Тогда + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + Если Не СтрНачинаетсяС(ОбновляемыйНабор.ИмяПредопределенныхДанных, "Удалить") Тогда + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + Если ОбновляемыйНабор.ДополнительныеРеквизиты.Количество() = 0 + И ОбновляемыйНабор.ДополнительныеСведения.Количество() = 0 Тогда + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + ИмяНабора = Сред(ОбновляемыйНабор.ИмяПредопределенныхДанных, 8, СтрДлина(ОбновляемыйНабор.ИмяПредопределенныхДанных) - 7); + ОписаниеНовогоНабора = ПредопределенныеНаборыСвойств.Получить(ИмяНабора); + Если ОписаниеНовогоНабора = Неопределено Тогда + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + НовыйНабор = ОписаниеНовогоНабора.Ссылка; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.НаборыДополнительныхРеквизитовИСведений"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", НовыйНабор); + Блокировка.Заблокировать(); + + // Заполнение нового набора. + НовыйНаборОбъект = НовыйНабор.ПолучитьОбъект(); + Если ОбновляемыйНабор.ЭтоГруппа <> НовыйНаборОбъект.ЭтоГруппа Тогда + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + НовыйНаборОбъект.ДополнительныеРеквизиты.Загрузить(ОбновляемыйНабор.ДополнительныеРеквизиты); + НовыйНаборОбъект.ДополнительныеСведения.Загрузить(ОбновляемыйНабор.ДополнительныеСведения); + + // Обновление реквизитов и сведений. + Если Не ОбновляемыйНабор.ЭтоГруппа Тогда + Для Каждого СтрокаТаблицы Из ОбновляемыйНабор.ДополнительныеРеквизиты Цикл + РеквизитОбъект = СтрокаТаблицы.Свойство.ПолучитьОбъект(); + Если Не ЗначениеЗаполнено(РеквизитОбъект.НаборСвойств) Тогда + Продолжить; + КонецЕсли; + РеквизитОбъект.НаборСвойств = НовыйНабор; + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(РеквизитОбъект); + КонецЦикла; + + Для Каждого СтрокаТаблицы Из ОбновляемыйНабор.ДополнительныеСведения Цикл + СвойствоОбъект = СтрокаТаблицы.Свойство.ПолучитьОбъект(); + Если Не ЗначениеЗаполнено(СвойствоОбъект.НаборСвойств) Тогда + Продолжить; + КонецЕсли; + СвойствоОбъект.НаборСвойств = НовыйНабор; + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(СвойствоОбъект); + КонецЦикла; + КонецЕсли; + + Если Не ОбновляемыйНабор.ЭтоГруппа Тогда + КоличествоРеквизитов = Формат(НовыйНаборОбъект.ДополнительныеРеквизиты.НайтиСтроки( + Новый Структура("ПометкаУдаления", Ложь)).Количество(), "ЧГ="); + КоличествоСведений = Формат(НовыйНаборОбъект.ДополнительныеСведения.НайтиСтроки( + Новый Структура("ПометкаУдаления", Ложь)).Количество(), "ЧГ="); + + НовыйНаборОбъект.КоличествоРеквизитов = КоличествоРеквизитов; + НовыйНаборОбъект.КоличествоСведений = КоличествоСведений; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(НовыйНаборОбъект); + + // Очистка старого набора. + УстаревшийНаборОбъект = ОбновляемыйНабор.Ссылка.ПолучитьОбъект(); + УстаревшийНаборОбъект.ДополнительныеРеквизиты.Очистить(); + УстаревшийНаборОбъект.ДополнительныеСведения.Очистить(); + УстаревшийНаборОбъект.Используется = Ложь; + + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(УстаревшийНаборОбъект); + + Если ОбновляемыйНабор.ЭтоГруппа Тогда + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Родитель", ОбновляемыйНабор.Ссылка); + Запрос.Текст = + "ВЫБРАТЬ + | НаборыДополнительныхРеквизитовИСведений.Ссылка КАК Ссылка + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений КАК НаборыДополнительныхРеквизитовИСведений + |ГДЕ + | НаборыДополнительныхРеквизитовИСведений.Родитель = &Родитель + | И НаборыДополнительныхРеквизитовИСведений.Предопределенный = ЛОЖЬ"; + ПереносимыеНаборы = Запрос.Выполнить().Выгрузить(); + Для Каждого Строка Из ПереносимыеНаборы Цикл + НаборОбъект = Строка.Ссылка.ПолучитьОбъект(); + НаборОбъект.Родитель = НовыйНабор; + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(НаборОбъект); + КонецЦикла; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + ПроблемныхОбъектов = ПроблемныхОбъектов + 1; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать набор свойств: %1 по причине: + |%2'"), + ОбновляемыйНабор.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений, ОбновляемыйНабор.Ссылка, ТекстСообщения); + КонецПопытки; + КонецЦикла; - Возврат Новый ФиксированноеСоответствие(ПредопределенныеНаборы); + Если ПроблемныхОбъектов <> 0 Тогда + ТекстСообщения = НСтр("ru = 'Процедура ОбработатьНаборыСвойствДляПереходаНаНовуюВерсию завершилась с ошибкой. Не все наборы свойств удалось обновить.'"); + ВызватьИсключение ТекстСообщения; + КонецЕсли; -КонецФункции + Параметры.ОбработкаЗавершена = Истина; + +КонецПроцедуры + + #КонецОбласти #КонецЕсли + +#Область СлужебныеПроцедурыИФункции + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Функция ПредопределенныеНаборыСвойств() Экспорт + + ДеревоНаборов = Новый ДеревоЗначений; + ДеревоНаборов.Колонки.Добавить("Имя"); + ДеревоНаборов.Колонки.Добавить("ЭтоГруппа", Новый ОписаниеТипов("Булево")); + ДеревоНаборов.Колонки.Добавить("Используется"); + ДеревоНаборов.Колонки.Добавить("Идентификатор"); + ИнтеграцияПодсистемБСП.ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов); + УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов); + + НаименованияНаборовСвойств = УправлениеСвойствамиСлужебный.НаименованияНаборовСвойств(); + Наименования = НаименованияНаборовСвойств[ТекущийЯзык().КодЯзыка]; + + НаборыСвойств = Новый Соответствие; + Для Каждого Набор Из ДеревоНаборов.Строки Цикл + СвойстваНабора = СвойстваНабора(НаборыСвойств, Набор); + Для Каждого ДочернийНабор Из Набор.Строки Цикл + СвойстваДочернегоНабора = СвойстваНабора(НаборыСвойств, ДочернийНабор, СвойстваНабора.Ссылка, Наименования); + СвойстваНабора.ДочерниеНаборы.Вставить(ДочернийНабор.Имя, СвойстваДочернегоНабора); + КонецЦикла; + СвойстваНабора.ДочерниеНаборы = Новый ФиксированноеСоответствие(СвойстваНабора.ДочерниеНаборы); + НаборыСвойств[СвойстваНабора.Имя] = Новый ФиксированнаяСтруктура(НаборыСвойств[СвойстваНабора.Имя]); + НаборыСвойств[СвойстваНабора.Ссылка] = Новый ФиксированнаяСтруктура(НаборыСвойств[СвойстваНабора.Ссылка]); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(НаборыСвойств); + +КонецФункции + +Функция СвойстваНабора(НаборыСвойств, Набор, Родитель = Неопределено, Наименования = Неопределено) + + ЗаголовокОшибки = + НСтр("ru = 'Ошибка в процедуре ПриСозданииПредопределенныхНаборовСвойств + |общего модуля УправлениеСвойствамиПереопределяемый.'") + + Символы.ПС + + Символы.ПС; + + Если Не ЗначениеЗаполнено(Набор.Имя) Тогда + ВызватьИсключение ЗаголовокОшибки + НСтр("ru = 'Имя набора свойств не заполнено.'"); + КонецЕсли; + + Если НаборыСвойств.Получить(Набор.Имя) <> Неопределено Тогда + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Имя набора свойств ""%1"" уже определено.'"), + Набор.Имя); + КонецЕсли; + + Если Не ЗначениеЗаполнено(Набор.Идентификатор) Тогда + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатор набора свойств ""%1"" не заполнен.'"), + Набор.Имя); + КонецЕсли; + + НаборСсылка = ПолучитьСсылку(Набор.Идентификатор); + + Если НаборыСвойств.Получить(НаборСсылка) <> Неопределено Тогда + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатор ""%1"" набора свойств + |""%2"" уже используется для набора ""%3"".'"), + Набор.Идентификатор, Набор.Имя, НаборыСвойств.Получить(НаборСсылка).Имя); + КонецЕсли; + + СвойстваНабора = Новый Структура; + СвойстваНабора.Вставить("Имя", Набор.Имя); + СвойстваНабора.Вставить("ЭтоГруппа", Набор.ЭтоГруппа); + СвойстваНабора.Вставить("Используется", Набор.Используется); + СвойстваНабора.Вставить("Ссылка", НаборСсылка); + СвойстваНабора.Вставить("Родитель", Родитель); + СвойстваНабора.Вставить("ДочерниеНаборы", ?(Родитель = Неопределено, Новый Соответствие, Неопределено)); + Если Наименования = Неопределено Тогда + СвойстваНабора.Вставить("Наименование", ПредставлениеНабораВерхнегоУровня(Набор.Имя)); + Иначе + СвойстваНабора.Вставить("Наименование", Наименования[Набор.Имя]); + КонецЕсли; + + Если Родитель <> Неопределено Тогда + СвойстваНабора = Новый ФиксированнаяСтруктура(СвойстваНабора); + КонецЕсли; + НаборыСвойств.Вставить(СвойстваНабора.Имя, СвойстваНабора); + НаборыСвойств.Вставить(СвойстваНабора.Ссылка, СвойстваНабора); + + Возврат СвойстваНабора; + +КонецФункции + +#КонецЕсли + +// АПК:361-выкл нет обращения к серверному коду. +Функция ПредставлениеНабораВерхнегоУровня(ИмяПредопределенного, СвойстваНабора = Неопределено) + + Представление = ""; + Позиция = СтрНайти(ИмяПредопределенного, "_"); + ПерваяЧастьИмени = Лев(ИмяПредопределенного, Позиция - 1); + ВтораяЧастьИмени = Прав(ИмяПредопределенного, СтрДлина(ИмяПредопределенного) - Позиция); + + ПолноеИмя = ПерваяЧастьИмени + "." + ВтораяЧастьИмени; + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); + Если ОбъектМетаданных = Неопределено Тогда + Возврат Представление; + КонецЕсли; + + Если ЗначениеЗаполнено(ОбъектМетаданных.ПредставлениеСписка) Тогда + Представление = ОбъектМетаданных.ПредставлениеСписка; + ИначеЕсли ЗначениеЗаполнено(ОбъектМетаданных.Синоним) Тогда + Представление = ОбъектМетаданных.Синоним; + ИначеЕсли СвойстваНабора <> Неопределено Тогда + Представление = СвойстваНабора.Наименование; + КонецЕсли; + + Возврат Представление; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl index 0e5cc0136..c1dd7ccce 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -8,8 +16,21 @@ Возврат; КонецЕсли; - Если НЕ ЭтоГруппа Тогда + Если ЭтоГруппа Тогда + Для Каждого ДополнительныйРеквизит Из ДополнительныеРеквизиты Цикл + Если ДополнительныйРеквизит.ИмяПредопределенногоНабора <> ИмяПредопределенногоНабора Тогда + ДополнительныйРеквизит.ИмяПредопределенногоНабора = ИмяПредопределенногоНабора; + КонецЕсли; + КонецЦикла; + + Для Каждого ДополнительноеСведение Из ДополнительныеСведения Цикл + Если ДополнительноеСведение.ИмяПредопределенногоНабора <> ИмяПредопределенногоНабора Тогда + ДополнительноеСведение.ИмяПредопределенногоНабора = ИмяПредопределенногоНабора; + КонецЕсли; + КонецЦикла; + + Иначе // Удаление дублей и пустых строк. ВыбранныеСвойства = Новый Соответствие; УдаляемыеСвойства = Новый Массив; @@ -78,4 +99,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo index da1f4cf11..ccd3e8848 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo @@ -126,70 +126,70 @@ <defaultPresentation>AsDescription</defaultPresentation> <predefined> <items id="eeaea31c-d100-438b-8315-bd801571fb84"> - <name>Справочник_ВнешниеПользователи</name> + <name>УдалитьСправочник_ВнешниеПользователи</name> <description>Внешние пользователи</description> <code xsi:type="core:StringValue"> <value></value> </code> </items> <items id="be950181-561c-47a1-8ed2-d240d175ce5f"> - <name>Документ_Встреча</name> + <name>УдалитьДокумент_Встреча</name> <description>Встреча</description> <code xsi:type="core:StringValue"> <value></value> </code> </items> <items id="f00b4fb9-334e-4a18-b5bc-0e56b18e66a2"> - <name>Документ_ЗапланированноеВзаимодействие</name> + <name>УдалитьДокумент_ЗапланированноеВзаимодействие</name> <description>Запланированное взаимодействие</description> <code xsi:type="core:StringValue"> <value></value> </code> </items> <items id="4b1f6bdf-16e9-480e-8012-6474f53e56ac"> - <name>Справочник_ПапкиФайлов</name> + <name>УдалитьСправочник_ПапкиФайлов</name> <description>Папка</description> <code xsi:type="core:StringValue"> <value></value> </code> </items> <items id="09343521-4f35-4e03-97e0-96ee8bf911c6"> - <name>Справочник_Пользователи</name> + <name>УдалитьСправочник_Пользователи</name> <description>Пользователи</description> <code xsi:type="core:StringValue"> <value></value> </code> </items> <items id="e528d7dc-346b-4deb-92ec-b6cefa78c66f"> - <name>Документ_СообщениеSMS</name> + <name>УдалитьДокумент_СообщениеSMS</name> <description>Сообщение SMS</description> <code xsi:type="core:StringValue"> <value></value> </code> </items> <items id="95fb09ad-333d-4be6-aa1f-ab5195d20a38"> - <name>Документ_ТелефонныйЗвонок</name> + <name>УдалитьДокумент_ТелефонныйЗвонок</name> <description>Телефонный звонок</description> <code xsi:type="core:StringValue"> <value></value> </code> </items> <items id="00e33f58-9a02-471c-968b-22cb087ac0f8"> - <name>Справочник_Файлы</name> + <name>УдалитьСправочник_Файлы</name> <description>Файл</description> <code xsi:type="core:StringValue"> <value></value> </code> </items> <items id="db5de384-751b-41d1-be73-ca7a03ba3869"> - <name>Документ_ЭлектронноеПисьмоВходящее</name> + <name>УдалитьДокумент_ЭлектронноеПисьмоВходящее</name> <description>Электронное письмо входящее</description> <code xsi:type="core:StringValue"> <value></value> </code> </items> <items id="ea29cfd1-ab78-4d2f-aa5c-338ea6f9172e"> - <name>Документ_ЭлектронноеПисьмоИсходящее</name> + <name>УдалитьДокумент_ЭлектронноеПисьмоИсходящее</name> <description>Электронное письмо исходящее</description> <code xsi:type="core:StringValue"> <value></value> @@ -268,6 +268,24 @@ <use>ForFolderAndItem</use> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="849f00c3-2f18-414c-97f6-32a99173fab9"> + <name>ИмяПредопределенногоНабора</name> + <synonym> + <key>ru</key> + <value>Имя предопределенного набора</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>150</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:StringValue"/> + <use>ForFolderAndItem</use> + <dataHistory>Use</dataHistory> + </attributes> <tabularSections uuid="b456d820-8034-4381-960d-66d9f86b0a4b"> <producedTypes> <objectType typeId="fb3fdc57-82e3-4fa7-bccd-b12e88c2fc2f" valueTypeId="63d4cced-9612-4b30-ae1f-23e3f330d6c5"/> @@ -326,6 +344,23 @@ <dataHistory>Use</dataHistory> <fullTextSearch>Use</fullTextSearch> </attributes> + <attributes uuid="a587cade-4c91-4769-9c6a-a4fb4fe94196"> + <name>ИмяПредопределенногоНабора</name> + <synonym> + <key>ru</key> + <value>Имя предопределенного набора</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>150</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> <use>ForFolderAndItem</use> </tabularSections> <tabularSections uuid="1a7c774d-5b86-4051-b797-3081e19fa30a"> @@ -386,8 +421,78 @@ <dataHistory>Use</dataHistory> <fullTextSearch>Use</fullTextSearch> </attributes> + <attributes uuid="1300c46e-24d4-45cf-a899-3d26b5cf0b50"> + <name>ИмяПредопределенногоНабора</name> + <synonym> + <key>ru</key> + <value>Имя предопределенного набора</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>150</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> <use>ForFolderAndItem</use> </tabularSections> + <tabularSections uuid="4cde6fdc-85fa-4c00-896c-51a68f5f10a5"> + <producedTypes> + <objectType typeId="ad4406b3-7f87-4147-bbd6-cfa09ca37b20" valueTypeId="aaaa0103-e44e-4c93-b11e-54a0539b7dc9"/> + <rowType typeId="f0af5b08-b962-435c-bc6b-f945a6d8449f" valueTypeId="38b6d370-4b9b-4fc5-bb42-2ab7af9d5c3f"/> + </producedTypes> + <name>Представления</name> + <synonym> + <key>ru</key> + <value>Представления</value> + </synonym> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <attributes uuid="f41de07b-cba3-4bb8-9ec0-64ec59753f84"> + <name>КодЯзыка</name> + <synonym> + <key>ru</key> + <value>Код языка</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>10</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="f78a5650-4d6c-4c17-95e0-e95cf8d9ad4b"> + <name>Наименование</name> + <synonym> + <key>ru</key> + <value>Наименование</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>150</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + </tabularSections> <forms uuid="c5b3ca21-8f7b-4933-853c-7d95b17b5631"> <name>ФормаЭлемента</name> <synonym> diff --git a/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl b/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl index 3a889d042..34b706563 100644 --- a/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Module.bsl index 3ed644ae3..5c4e322f5 100644 --- a/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Module.bsl index a502e3334..5f2ef35d1 100644 --- a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form index 2d6b00561..ca3280fa8 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Form.form @@ -323,6 +323,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Список</name> <id>1</id> diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Module.bsl index ac9b067ff..44e9c4662 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -12,18 +19,6 @@ Элементы.Список.ТекущаяСтрока = Параметры.ТекущаяПапка; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Для каждого ЭлементФормы Из Элементы.КоманднаяПанель.ПодчиненныеЭлементы Цикл - - Элементы.Переместить(ЭлементФормы, Элементы.ФормаКоманднаяПанель); - - КонецЦикла; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаСписка/Form.form index 76e8ead99..251493457 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаСписка/Form.form @@ -151,6 +151,40 @@ <autoMaxHeight>true</autoMaxHeight> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>Ссылка</name> + <id>24</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </dataPath> + <extendedTooltip> + <name>СсылкаРасширеннаяПодсказка</name> + <id>26</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СсылкаКонтекстноеМеню</name> + <id>25</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> <commandBarLocation>None</commandBarLocation> <autoCommandBar> <name>СписокКоманднаяПанель</name> @@ -298,6 +332,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Список</name> <id>1</id> @@ -310,6 +349,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <mainTable>Catalog.ПапкиФайлов</mainTable> diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form index 9bcb3abdc..b52c9f53e 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form @@ -93,7 +93,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> - <group>HorizontalIfPossible</group> + <group>AlwaysHorizontal</group> <verticalAlign>Center</verticalAlign> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl index 0d9609e33..a52d73eb1 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -27,6 +34,7 @@ ОбновитьПояснениеОблачногоСервиса(); Элементы.ФормаНастроитьСинхронизацию.Видимость = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов); + Элементы.Ответственный.Видимость = ТипЗнч(Пользователи.АвторизованныйПользователь()) <> Тип("СправочникСсылка.ВнешниеПользователи"); КонецПроцедуры @@ -224,7 +232,6 @@ ОчиститьСообщения(); - Каталог = ""; Режим = РежимДиалогаВыбораФайла.ВыборКаталога; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); @@ -251,7 +258,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный путь или отсутствуют права на запись в каталог ""%1""'"), ИмяКаталога); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "РабочийКаталог"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , "РабочийКаталог"); Возврат; КонецПопытки; diff --git a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl index 2ff5ad20b..27574a7da 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -38,6 +46,8 @@ |ГДЕ | ИзменениеОбъектаРазрешено(Ссылка)"; + Ограничение.ТекстДляВнешнихПользователей = Ограничение.Текст; + КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом @@ -46,8 +56,6 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -63,3 +71,5 @@ КонецПроцедуры #КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl index e0b93ca06..9314db500 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -150,7 +158,7 @@ Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) ДатаСоздания = ТекущаяДатаСеанса(); - Ответственный = Пользователи.ТекущийПользователь(); + Ответственный = Пользователи.АвторизованныйПользователь(); КонецПроцедуры Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) @@ -160,11 +168,13 @@ Отказ = Истина; Текст = НСтр("ru = 'Наименование папки содержит запрещенные символы ( \ / : * ? "" < > | .. )'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст, ЭтотОбъект, "Наименование"); + ОбщегоНазначения.СообщитьПользователю(Текст, ЭтотОбъект, "Наименование"); КонецЕсли; КонецПроцедуры #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo b/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo index 7a2e7ea16..3731527c3 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo +++ b/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo @@ -115,9 +115,9 @@ <characteristics> <characteristicTypes>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты</characteristicTypes> <keyField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство</keyField> - <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref</typesFilterField> - <typesFilterValue xsi:type="core:ReferenceValue"> - <value>Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_ПапкиФайлов</value> + <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора</typesFilterField> + <typesFilterValue xsi:type="core:StringValue"> + <value>Справочник_ПапкиФайлов</value> </typesFilterValue> <dataPathField>-1</dataPathField> <multipleValuesUseField>-1</multipleValuesUseField> @@ -131,9 +131,9 @@ <characteristics> <characteristicTypes>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения</characteristicTypes> <keyField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство</keyField> - <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref</typesFilterField> - <typesFilterValue xsi:type="core:ReferenceValue"> - <value>Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_ПапкиФайлов</value> + <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора</typesFilterField> + <typesFilterValue xsi:type="core:StringValue"> + <value>Справочник_ПапкиФайлов</value> </typesFilterValue> <dataPathField>-1</dataPathField> <multipleValuesUseField>-1</multipleValuesUseField> diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form index c5ff47177..38e6962ac 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Form.form @@ -275,6 +275,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <mainTable>Catalog.ПапкиЭлектронныхПисем</mainTable> diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl deleted file mode 100644 index 8b1378917..000000000 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl +++ /dev/null @@ -1 +0,0 @@ - diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Form.form index 3be88fc79..787e09976 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Form.form @@ -283,6 +283,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.ПредопределеннаяПапка</segments> </notDefaultUseAlwaysAttributes> diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl index 87f63a0e0..99d493b1b 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl index f65dcf399..2ce783003 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl index bbbf37c6e..936d5d76f 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl index ba6de58ca..5887c2556 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -13,15 +21,15 @@ КонецЕсли; Если НЕ Взаимодействия.ПользовательЯвляетсяОтветственнымЗаВедениеПапок(Владелец) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Данная операция доступна только ответственному за ведение папок для данной учетной записи'"), Ссылка,,,Отказ); ИначеЕсли ПредопределеннаяПапка И ПометкаУдаления И (НЕ Владелец.ПометкаУдаления) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Нельзя установить пометку удаления для предопределенной папки'"), Ссылка,,,Отказ); ИначеЕсли ПредопределеннаяПапка И (Не Родитель.Пустая()) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Нельзя переместить предопределенную папку в другую папку'"), Ссылка,,,Отказ); КонецЕсли; @@ -52,4 +60,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Commands/ПользователиИнформационнойБазы/CommandModule.bsl b/SSL/src/Catalogs/Пользователи/Commands/ПользователиИнформационнойБазы/CommandModule.bsl index 4296ba574..d3bdf673a 100644 --- a/SSL/src/Catalogs/Пользователи/Commands/ПользователиИнформационнойБазы/CommandModule.bsl +++ b/SSL/src/Catalogs/Пользователи/Commands/ПользователиИнформационнойБазы/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Module.bsl index 50c7af320..f3ca18ba8 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -65,13 +72,11 @@ ПоказатьПредупреждение(, НСтр("ru = 'Выберите домен.'")); Возврат; КонецЕсли; - ИмяДомена = Элементы.ТаблицаДоменов.ТекущиеДанные.ИмяДомена; Если Элементы.ТаблицаПользователейДомена.ТекущиеДанные = Неопределено Тогда ПоказатьПредупреждение(, НСтр("ru = 'Выберите пользователя домена.'")); Возврат; КонецЕсли; - ИмяПользователя = Элементы.ТаблицаПользователейДомена.ТекущиеДанные.ИмяПользователя; СкомпоноватьРезультатИЗакрытьФорму(); diff --git a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl index 50cd5cf31..644285d9b 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Module.bsl @@ -1,15 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Элементы.Срок.Подсказка = Метаданные.РегистрыСведений.СведенияОПользователях.Ресурсы.СрокДействия.Подсказка; - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - КонецЕсли; + Элементы.Срок.Подсказка + = Метаданные.РегистрыСведений.СведенияОПользователях.Ресурсы.СрокДействия.Подсказка; КонецПроцедуры @@ -65,22 +68,24 @@ Если ВидСрока = "ДоДаты" Тогда Если Не ЗначениеЗаполнено(Срок) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Дата не указана.'"),, "Срок"); Возврат; ИначеЕсли Срок <= НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Ограничение должно быть до завтра или более.'"),, "Срок"); Возврат; КонецЕсли; КонецЕсли; + ВладелецФормы.Модифицированность = Истина; ВладелецФормы.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода = Просрочка; ВладелецФормы.СрокДействия = Срок; ВладелецФормы.СрокДействияНеОграничен = (ВидСрока = "НеОграничен"); - Закрыть(); + Элементы.ФормаОК.Доступность = Ложь; + ПодключитьОбработчикОжидания("ЗакрытьФорму", 0.1, Истина); КонецПроцедуры @@ -109,4 +114,11 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗакрытьФорму() + + Закрыть(); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl index c788e91cd..079071cf3 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -26,16 +33,6 @@ ЗаполнитьПользователейИБ(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Элементы.Переместить(Элементы.КоманднаяПанель, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Вид", ВидГруппыФормы.ГруппаКнопок); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -277,7 +274,7 @@ &НаСервере Процедура ЗаполнитьПользователейИБ() - ПустойУникальныйИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + ПустойУникальныйИдентификатор = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); Если Элементы.ПользователиИБ.ТекущаяСтрока <> Неопределено Тогда Строка = ПользователиИБ.НайтиПоИдентификатору(Элементы.ПользователиИБ.ТекущаяСтрока); @@ -392,8 +389,8 @@ Попытка Пользователи.УдалитьПользователяИБ(ИдентификаторПользователяИБ); Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , , , Отказ); - КонецПопытки; + ОбщегоНазначения.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , , , Отказ); + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl index a5baea76c..3c4f3b9a6 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/СменаПочты/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form index bf3c863d0..88d57a018 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form @@ -53,11 +53,13 @@ </extInfo> </extendedTooltip> <commandName>Form.Command.ЗавершитьИЗакрыть</commandName> - <representation>Auto</representation> <defaultButton>true</defaultButton> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.WriteAndClose</picture> + </picture> <representationInContextMenu>Auto</representationInContextMenu> </items> <items xsi:type="form:Button"> @@ -492,7 +494,7 @@ </extInfo> </items> <items xsi:type="form:FormGroup"> - <name>Группа</name> + <name>ГруппаСодержимое</name> <id>24</id> <items xsi:type="form:FormGroup"> <name>ГруппыИПользователи</name> @@ -500,10 +502,11 @@ <items xsi:type="form:FormGroup"> <name>ГруппаГруппы</name> <id>75</id> - <displayImportance>VeryHigh</displayImportance> + <displayImportance>VeryLow</displayImportance> <items xsi:type="form:Table"> <name>ГруппыПользователей</name> <id>25</id> + <displayImportance>VeryHigh</displayImportance> <title> <key>ru</key> <value>Группы пользователей</value> @@ -899,7 +902,7 @@ </userVisible> <title> <key>ru</key> - <value>Группы</value> + <value>Группы пользователей</value> ГруппаГруппыExtendedTooltip @@ -1529,6 +1532,7 @@ ВыбранныеПользователиИГруппы 77 + VeryLow СписокВыбранныхПользователейИГрупп 78 @@ -1760,10 +1764,10 @@ <key>ru</key> - <value>Группа</value> + <value>Содержимое</value> - ГруппаExtendedTooltip + ГруппаСодержимоеРасширеннаяПодсказка 108 Label true @@ -2163,6 +2167,11 @@ true auto true + + + КоманднаяПанель + + ПользователиСписок diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index af06f910a..9a445b80d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // ИСПОЛЬЗОВАНИЕ ФОРМЫ // // @@ -52,7 +60,7 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( ПользователиСписок, "ИдентификаторПользователяИБ", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(), ВидСравненияКомпоновкиДанных.НеРавно); КонецЕсли; @@ -88,11 +96,6 @@ ХранимыеПараметры.Вставить( "ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); - Если Не ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "СоздатьПользователя", "Видимость", Ложь); - КонецЕсли; - РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Не РазделениеВключено) Тогда Если Элементы.Найти("ПользователиИБ") <> Неопределено Тогда @@ -159,7 +162,7 @@ ОписаниеОбъекта = Новый Структура; ОписаниеОбъекта.Вставить("Ссылка", Справочники.Пользователи.ПустаяСсылка()); - ОписаниеОбъекта.Вставить("ИдентификаторПользователяИБ", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОписаниеОбъекта.Вставить("ИдентификаторПользователяИБ", ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователя(ОписаниеОбъекта); Если Не УровеньДоступа.УправлениеСписком Тогда @@ -172,20 +175,8 @@ Элементы.ГруппыПользователей.ТолькоПросмотр = Истина; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Элементы.Переместить(Элементы.КоманднаяПанель, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Вид", ВидГруппыФормы.ГруппаКнопок); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппыПользователей", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Авто); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппыПользователей", "ВариантУправленияВысотой", ВариантУправленияВысотойТаблицы.ВСтрокахТаблицы); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппыПользователей", "РастягиватьПоВертикали", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппыПользователей", "Высота", 4); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппыПользователей", "АвтоМаксимальнаяВысота", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппыПользователей", "МаксимальнаяВысота", 4); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПользователиСписок", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Авто); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ЗавершитьИЗакрыть", "Заголовок", НСтр("ru ='Завершить'")); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ЗавершитьИЗакрыть.Отображение = ОтображениеКнопки.Картинка; КонецЕсли; КонецПроцедуры @@ -197,6 +188,12 @@ ПроверкаИзмененияТекущегоЭлементаФормы(); КонецЕсли; +#Если МобильныйКлиент Тогда + Если ХранимыеПараметры.Свойство("ИспользоватьГруппы") И ХранимыеПараметры.ИспользоватьГруппы Тогда + Элементы.ГруппаГруппы.Заголовок = Строка(Элементы.ГруппыПользователей.ТекущиеДанные.Ссылка); + КонецЕсли; +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -658,7 +655,7 @@ ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ВозможноСменитьТолькоСвойПароль", Не Пользователи.ЭтоПолноправныйПользователь()); @@ -760,11 +757,19 @@ Пользователи.ЗаполнитьНомераКартинокПользователей(ВыбранныеПользователиИГруппы, "Пользователь", "НомерКартинки"); ХранимыеПараметры.Вставить("ЗаголовокФормыПодбора", ПараметрыРасширеннойФормыПодбора.ЗаголовокФормыПодбора); // Установка параметров расширенной формы подбора. - Элементы.ЗавершитьИЗакрыть.Видимость = Истина; - Элементы.ГруппаВыбратьПользователя.Видимость = Истина; + Элементы.ЗавершитьИЗакрыть.Видимость = Истина; + Элементы.ГруппаВыбратьПользователя.Видимость = Истина; // Включение видимости списка выбранных пользователей. Элементы.ВыбранныеПользователиИГруппы.Видимость = Истина; - Если ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей") Тогда + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ГруппыИПользователи.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + Элементы.ГруппыИПользователи.ВажностьПриОтображении = ВажностьПриОтображении.ОченьВысокая; + Элементы.ГруппаСодержимое.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + Элементы.ГруппаВыбратьГруппу.Видимость = Ложь; + Элементы.ГруппаВыбратьПользователя.Видимость = Ложь; + Элементы.Переместить(Элементы.ВыбранныеПользователиИГруппы, Элементы.ГруппаСодержимое, Элементы.ВыбранныеПользователиИГруппы); + ИначеЕсли ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей") Тогда Элементы.ГруппыИПользователи.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; Элементы.ПользователиСписок.Высота = 5; Элементы.ГруппыПользователей.Высота = 3; @@ -962,6 +967,12 @@ ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтотОбъект); +#Если МобильныйКлиент Тогда + Если ХранимыеПараметры.Свойство("РасширенныйПодбор") И Не ХранимыеПараметры.РасширенныйПодбор Тогда + Элементы.ГруппаГруппы.Заголовок = Строка(Элементы.ГруппыПользователей.ТекущиеДанные.Ссылка); + ТекущийЭлемент = Элементы.ПользователиСписок; + КонецЕсли; +#КонецЕсли КонецПроцедуры &НаСервере @@ -986,7 +997,6 @@ Процедура ГруппыПользователейПеретаскиваниеЗавершение(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Нет Тогда - Отказ = Истина; Возврат; КонецЕсли; diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index c91be6ed5..6ce334a0e 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -2493,11 +2493,13 @@ </extInfo> </extendedTooltip> <commandName>Form.Command.ЗаписатьИЗакрыть</commandName> - <representation>PictureAndText</representation> <defaultButton>true</defaultButton> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.WriteAndClose</picture> + </picture> <representationInContextMenu>Auto</representationInContextMenu> </items> <items xsi:type="form:FormGroup"> @@ -3397,6 +3399,41 @@ </edit> <savedData>true</savedData> </attributes> + <attributes> + <name>ПредлагатьОбсуждения</name> + <title> + <key>ru</key> + <value>Предлагать обсуждения</value> + + 43 + + Boolean + + + true + + + true + + + + ПредлагатьОбсужденияТекст + + <key>ru</key> + <value>Предлагать обсуждения текст</value> + + 44 + + String + + + + true + + + true + + ПоказатьТолькоВыбранныеРоли @@ -3543,7 +3580,6 @@ <name>СменитьПароль</name> </handler> </action> - <modifiesStoredData>true</modifiesStoredData> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -3562,7 +3598,6 @@ <name>ИзменитьОграничениеНаВходВПрограмму</name> </handler> </action> - <modifiesStoredData>true</modifiesStoredData> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index 4091a0a58..76333b122 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -168,14 +176,14 @@ Элементы.ПотребоватьСменуПароляПриВходе.РасширеннаяПодсказка.Заголовок = ПользователиСлужебный.ПодсказкаПотребоватьСменуПароляПриВходе(Ложь); - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Отображение", ОтображениеКнопки.Картинка); - - Элементы.Комментарий.ПодсказкаВвода = НСтр("ru ='Произвольный текст'"); - + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ФормаЗаписатьИЗакрыть.Отображение = ОтображениеКнопки.Картинка; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + МодульОбсужденияСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебный"); + МодульОбсужденияСлужебный.ПриСозданииНаСервереПользователя(Отказ, ЭтотОбъект, Объект); КонецЕсли; КонецПроцедуры @@ -262,31 +270,30 @@ Возврат; КонецЕсли; - Если ВходВПрограммуРазрешен Тогда + Если Не ПараметрыЗаписи.Свойство("СПустымСпискомРолей") + И ВходВПрограммуРазрешен + И ДействияВФорме.Роли = "Редактирование" + И ПользовательИБРоли.Количество() = 0 Тогда + + Отказ = Истина; + ПоказатьВопрос( + Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗаписиСПустымСпискомРолей", ЭтотОбъект, ПараметрыЗаписи), + НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"), + РежимДиалогаВопрос.ДаНет, + , + , + ЗаголовокВопросов); + Возврат; + КонецЕсли; + + Если Не ПараметрыЗаписи.Свойство("ССозданиемПервогоАдминистратора") + И ЗначениеЗаполнено(ПользовательИБИмя) + И СписокПользователейИБПустой() Тогда - Если ДействияВФорме.Роли = "Редактирование" - И ПользовательИБРоли.Количество() = 0 Тогда - - Если НЕ ПараметрыЗаписи.Свойство("СПустымСпискомРолей") Тогда - Отказ = Истина; - ПоказатьВопрос( - Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗаписиСПустымСпискомРолей", ЭтотОбъект, ПараметрыЗаписи), - НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"), - РежимДиалогаВопрос.ДаНет, - , - , - ЗаголовокВопросов); - Возврат; - КонецЕсли; - КонецЕсли; - - // Обработка записи первого администратора. - Если НЕ ПараметрыЗаписи.Свойство("ССозданиемПервогоАдминистратора") Тогда - Отказ = Истина; - ПараметрыЗаписиПриПроверкеПервогоАдминистратора = ПараметрыЗаписи; - ПодключитьОбработчикОжидания("ПроверитьПервогоАдминистратора", 0.1, Истина); - Возврат; - КонецЕсли; + Отказ = Истина; + ПараметрыЗаписиПриПроверкеПервогоАдминистратора = ПараметрыЗаписи; + ПодключитьОбработчикОжидания("ПроверитьПервогоАдминистратора", 0.1, Истина); + Возврат; КонецЕсли; Если СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().РазделениеВключено @@ -411,10 +418,15 @@ ГруппаНовогоПользователя = Неопределено; КонецЕсли; - Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда - ПодключитьОбработчикОжидания("ЗакрытьФорму", 0.1, Истина); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + ОписаниеЗавершения = Новый ОписаниеОповещения("ПослеЗаписиЗавершение", ЭтотОбъект, ПараметрыЗаписи); + МодульОбсужденияСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбсужденияСлужебныйКлиент"); + МодульОбсужденияСлужебныйКлиент.ПослеЗаписиПользователя(ЭтотОбъект, ОписаниеЗавершения); + Возврат; КонецЕсли; + ПослеЗаписиЗавершение(Неопределено, ПараметрыЗаписи); + КонецПроцедуры &НаСервере @@ -423,14 +435,14 @@ Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ОписаниеПользователяИБ = ОписаниеПользователяИБ(); ОписаниеПользователяИБ.Вставить("ИдентификаторПользователяИБ", Объект.ИдентификаторПользователяИБ); - ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(ОписаниеПользователяИБ, Отказ); + ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(ОписаниеПользователяИБ, Отказ, Ложь); КонецЕсли; Если ВходВПрограммуРазрешен И ЗначениеЗаполнено(СрокДействия) И СрокДействия <= НачалоДня(ТекущаяДатаСеанса()) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Ограничение должно быть до завтра или более.'"),, "ВходВПрограммуРазрешен",, Отказ); КонецЕсли; @@ -709,7 +721,7 @@ Если ЗначениеЗаполнено(ЭтотОбъект[СтрокаEMail.ИмяРеквизита]) Тогда ПользовательИБПароль = "" + Новый УникальныйИдентификатор + "qQ"; - УстановитьНаличиеПароля(ЭтотОбъект, Истина); + УстановитьНаличиеПароля(ЭтотОбъект, Истина, ПользователиКлиент.АвторизованныйПользователь()); КонецЕсли; УстановитьДоступностьСвойств(ЭтотОбъект); @@ -841,7 +853,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.АвтоПодбор(Текст, ДанныеВыбора, СтандартнаяОбработка); + МодульУправлениеКонтактнойИнформациейКлиент.АвтоПодборАдреса(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка); КонецПроцедуры @@ -1099,7 +1111,20 @@ И ДействияВФорме.КонтактнаяИнформация <> "Редактирование" И ДействияВФорме.СвойстваПользователяИБ <> "Редактирование"; - ПользователиСлужебныйКлиентСервер.УстановитьДоступностьКнопкиЗаписатьИЗакрыть(ЭтотОбъект); + ДоступностьКнопки = Не ТолькоПросмотр И ПравоДоступа("Редактирование", + Метаданные.Справочники.Пользователи); + + Если Элементы.ФормаЗаписатьИЗакрыть.Доступность <> ДоступностьКнопки Тогда + Элементы.ФормаЗаписатьИЗакрыть.Доступность = ДоступностьКнопки; + КонецЕсли; + + Если Элементы.ИзменитьОграничениеНаВходВПрограмму.Доступность <> ДоступностьКнопки Тогда + Элементы.ИзменитьОграничениеНаВходВПрограмму.Доступность = ДоступностьКнопки; + КонецЕсли; + + Если Элементы.СменитьПароль.Доступность <> ДоступностьКнопки Тогда + Элементы.СменитьПароль.Доступность = ДоступностьКнопки; + КонецЕсли; Элементы.Наименование.ТолькоПросмотр = Не (ДействияВФорме.СвойстваЭлемента = "Редактирование" И УровеньДоступа.УправлениеСписком); @@ -1180,7 +1205,6 @@ Процедура ОбновитьИмяДляВхода(Форма, ПриИзмененииНаименования = Ложь) Элементы = Форма.Элементы; - Объект = Форма.Объект; Если Форма.ПользовательИБСуществует Тогда Возврат; @@ -1239,6 +1263,8 @@ Возврат; КонецЕсли; + Модифицированность = Истина; + ПользовательИБПароль = Результат.НовыйПароль; ПользовательИБСтарыйПароль = Результат.СтарыйПароль; @@ -1247,15 +1273,17 @@ КонецЕсли; УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); - УстановитьНаличиеПароля(ЭтотОбъект, ЗначениеЗаполнено(ПользовательИБПароль)); + УстановитьНаличиеПароля(ЭтотОбъект, ЗначениеЗаполнено(ПользовательИБПароль), + ПользователиКлиент.АвторизованныйПользователь()); + УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен) +Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен, АвторизованныйПользователь) - ПользователиСлужебныйКлиентСервер.УстановитьНаличиеПароля(Форма, ПарольУстановлен); + ПользователиСлужебныйКлиентСервер.УстановитьНаличиеПароля(Форма, ПарольУстановлен, АвторизованныйПользователь); КонецПроцедуры @@ -1465,6 +1493,16 @@ КонецФункции +&НаСервереБезКонтекста +Функция СписокПользователейИБПустой() + + УстановитьПривилегированныйРежим(Истина); + + Возврат Не ЗначениеЗаполнено(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) + И ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0; + +КонецФункции + &НаКлиентеНаСервереБезКонтекста Процедура УстановитьНеобходимостьСинхронизацииССервисом(Форма) @@ -1510,11 +1548,16 @@ &НаКлиенте Процедура ПослеПодтвержденияСозданияПервогоАдминистратора(Ответ, ПараметрыЗаписи) Экспорт - Если Ответ <> КодВозвратаДиалога.Нет Тогда - ПараметрыЗаписи.Вставить("ССозданиемПервогоАдминистратора"); - Записать(ПараметрыЗаписи); + Если Ответ <> КодВозвратаДиалога.Да Тогда + Возврат; КонецЕсли; + ВходВПрограммуРазрешен = Истина; + ПользовательИБАутентификацияСтандартная = Истина; + + ПараметрыЗаписи.Вставить("ССозданиемПервогоАдминистратора"); + Записать(ПараметрыЗаписи); + КонецПроцедуры &НаКлиенте @@ -1529,6 +1572,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеЗаписиЗавершение(Результат, ПараметрыЗаписи) Экспорт + + Если ПараметрыЗаписи <> Неопределено И ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда + ПодключитьОбработчикОжидания("ЗакрытьФорму", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ЗакрытьФорму() @@ -1613,7 +1665,7 @@ Возврат; КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Не заполнен адрес электронной почты'"),, СтрокаEMail.ИмяРеквизита,, Отказ); @@ -1726,7 +1778,7 @@ |Роли")); КонецЕсли; Объект.ИдентификаторПользователяИБ = Неопределено; - УстановитьНаличиеПароля(ЭтотОбъект, Ложь); + УстановитьНаличиеПароля(ЭтотОбъект, Ложь, Пользователи.АвторизованныйПользователь()); Иначе ПрочитанныеСвойства = Пользователи.СвойстваПользователяИБ(Объект.ИдентификаторПользователяИБ); Если ПрочитанныеСвойства <> Неопределено Тогда @@ -1774,9 +1826,11 @@ КонецЕсли; Если ПрочитанныеСвойства = Неопределено Тогда - УстановитьНаличиеПароля(ЭтотОбъект, Ложь); + УстановитьНаличиеПароля(ЭтотОбъект, Ложь, + Пользователи.АвторизованныйПользователь()); Иначе - УстановитьНаличиеПароля(ЭтотОбъект, ПрочитанныеСвойства.ПарольУстановлен); + УстановитьНаличиеПароля(ЭтотОбъект, ПрочитанныеСвойства.ПарольУстановлен, + Пользователи.АвторизованныйПользователь()); КонецЕсли; КонецЕсли; @@ -1931,7 +1985,6 @@ Элементы = Форма.Элементы; Объект = Форма.Объект; - ДействияВФорме = Форма.ДействияВФорме; УровеньДоступа = Форма.УровеньДоступа; ДействияСПользователемСервиса = Форма.ДействияСПользователемСервиса; diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl index df8b5d7a5..5336be6fe 100644 --- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -47,8 +55,6 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) @@ -64,3 +70,5 @@ КонецПроцедуры #КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl index ca9c1d056..29c83646b 100644 --- a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -87,7 +95,7 @@ И ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоПользователя) Тогда Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей"); + Блокировка.Добавить("Справочник.ГруппыПользователей"); Блокировка.Заблокировать(); ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоПользователя.ПолучитьОбъект(); @@ -161,4 +169,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Пользователи.mdo b/SSL/src/Catalogs/Пользователи/Пользователи.mdo index b916c0caf..204ff4556 100644 --- a/SSL/src/Catalogs/Пользователи/Пользователи.mdo +++ b/SSL/src/Catalogs/Пользователи/Пользователи.mdo @@ -123,9 +123,9 @@ <characteristics> <characteristicTypes>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты</characteristicTypes> <keyField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство</keyField> - <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref</typesFilterField> - <typesFilterValue xsi:type="core:ReferenceValue"> - <value>Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_Пользователи</value> + <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора</typesFilterField> + <typesFilterValue xsi:type="core:StringValue"> + <value>Справочник_Пользователи</value> </typesFilterValue> <dataPathField>-1</dataPathField> <multipleValuesUseField>-1</multipleValuesUseField> @@ -139,9 +139,9 @@ <characteristics> <characteristicTypes>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения</characteristicTypes> <keyField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство</keyField> - <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref</typesFilterField> - <typesFilterValue xsi:type="core:ReferenceValue"> - <value>Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_Пользователи</value> + <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора</typesFilterField> + <typesFilterValue xsi:type="core:StringValue"> + <value>Справочник_Пользователи</value> </typesFilterValue> <dataPathField>-1</dataPathField> <multipleValuesUseField>-1</multipleValuesUseField> diff --git a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl index 8dd4c99b3..d093274c4 100644 --- a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl b/SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl index d5880c6a7..abb1a7de0 100644 --- a/SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -19,4 +27,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl index 03966aefa..28d261349 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -85,13 +92,13 @@ КонецЦикла; Если Не ВыбраноХотьОдноПравило Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Необходимо выбрать хотя бы одно правило для применения'"),,"Список"); Отказ = Истина; КонецЕсли; Если ДляПисемВПапке.Пустая() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не выбрана папка к письмам которой будут применены правила'"),,"ДляПисемВПапке"); Отказ = Истина; КонецЕсли; @@ -183,7 +190,7 @@ Результат = ПолучитьИзВременногоХранилища(АдресРезультата); Если ТипЗнч(Результат) = Тип("Строка") И ЗначениеЗаполнено(Результат) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат); + ОбщегоНазначения.СообщитьПользователю(Результат); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl index 612680af6..5bd4836f4 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -47,7 +54,7 @@ И ЗначениеЗаполнено(МассивЭлементовОтбора[0].ПравоеЗначение) Тогда ПараметрыФормы.Вставить("УчетнаяЗапись",МассивЭлементовОтбора[0].ПравоеЗначение); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не установлен отбор по владельцу(учетной записи) правил.'")); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не установлен отбор по владельцу(учетной записи) правил.'")); Возврат; КонецЕсли; diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index eaf05cb55..95fde3bf0 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl index 5ae458dbc..c8d3fcd7e 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl index 6e802459f..7a3a2debc 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -8,13 +16,17 @@ Возврат; КонецЕсли; - Если НЕ Взаимодействия.ПользовательЯвляетсяОтветственнымЗаВедениеПапок(Владелец) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Данная операция доступна только ответственному за ведение папок для данной учетной записи'"), - Ссылка,,,Отказ); + Если Не Взаимодействия.ПользовательЯвляетсяОтветственнымЗаВедениеПапок(Владелец) Тогда + ОбщегоНазначения.СообщитьПользователю( + НСтр("ru = 'Данная операция доступна только ответственному за ведение папок для данной учетной записи'"), + Ссылка,,, + Отказ); КонецЕсли; КонецПроцедуры #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl index 4bc7ddbb6..9421885fb 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -65,7 +72,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) @@ -82,19 +89,17 @@ Возврат; КонецЕсли; - ПредставлениеОбщегоРасписания = ДополнительныеСвойстваКомпоновщика.ПредставлениеОбщегоРасписания; - КлючиСтрок = Строки.ПолучитьКлючи(); Для Каждого КлючСтроки Из КлючиСтрок Цикл ДанныеСтроки = Строки[КлючСтроки].Данные; Если ДанныеСтроки.ЭтоГруппа Тогда Продолжить; КонецЕсли; - Если ДанныеСтроки.СпособВыполнения = Перечисления.СпособВыполненияПроверки.Вручную Тогда + Если ДанныеСтроки.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.Вручную Тогда ДанныеСтроки.РегламентноеЗаданиеПредставление = НСтр("ru = 'Вручную'"); - ИначеЕсли ДанныеСтроки.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОбщемуРасписанию Тогда + ИначеЕсли ДанныеСтроки.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.ПоОбщемуРасписанию Тогда ДанныеСтроки.РегламентноеЗаданиеПредставление = НСтр("ru = 'По общему расписанию'") - ИначеЕсли ДанныеСтроки.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОтдельномуРасписанию Тогда + ИначеЕсли ДанныеСтроки.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.ПоОтдельномуРасписанию Тогда ИдентификаторЗадания = ДанныеСтроки.ИдентификаторРегламентногоЗадания; Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Тогда ДанныеСтроки.РегламентноеЗаданиеПредставление = НСтр("ru = 'Расписание не задано'"); diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl index 97743a2d1..2d43247ea 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -71,7 +78,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПредставлениеИндивидуальногоРасписанияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) @@ -402,7 +409,7 @@ Если СелекторРасписания = 0 Тогда - Если Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОбщемуРасписанию Тогда + Если Объект.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.ПоОбщемуРасписанию Тогда СелекторРасписания = 1; @@ -410,7 +417,7 @@ Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; Элементы.ПредставлениеОбщегоРасписания.Доступность = Истина; - ИначеЕсли Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОтдельномуРасписанию Тогда + ИначеЕсли Объект.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.ПоОтдельномуРасписанию Тогда СелекторРасписания = 2; @@ -422,14 +429,14 @@ ИначеЕсли СелекторРасписания = 1 Тогда - Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОбщемуРасписанию; + Объект.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.ПоОбщемуРасписанию; Элементы.СелекторРасписания.Доступность = Истина; Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; Элементы.ПредставлениеОбщегоРасписания.Доступность = Истина; ИначеЕсли СелекторРасписания = 2 Тогда - Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОтдельномуРасписанию; + Объект.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.ПоОтдельномуРасписанию; Элементы.СелекторРасписания.Доступность = Истина; Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Истина; Элементы.ПредставлениеОбщегоРасписания.Доступность = Ложь; @@ -441,7 +448,7 @@ &НаСервере Процедура СкрытьНастройкиРасписанияНаСервере() - Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.Вручную; + Объект.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.Вручную; Элементы.СелекторРасписания.Доступность = Ложь; Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; Элементы.ПредставлениеОбщегоРасписания.Доступность = Ложь; @@ -451,7 +458,7 @@ &НаСервере Процедура УстановитьНачальныеНастройкиРасписания() - Если Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОбщемуРасписанию Тогда + Если Объект.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.ПоОбщемуРасписанию Тогда ВыполняетсяВФонеПоРасписанию = Истина; СелекторРасписания = 1; @@ -460,7 +467,7 @@ Элементы.ПредставлениеИндивидуальногоРасписания.Доступность = Ложь; Элементы.ПредставлениеОбщегоРасписания.Доступность = Истина; - ИначеЕсли Объект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОтдельномуРасписанию Тогда + ИначеЕсли Объект.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.ПоОтдельномуРасписанию Тогда ВыполняетсяВФонеПоРасписанию = Истина; СелекторРасписания = 2; diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/ManagerModule.bsl index 879cd1b04..ed008535a 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/ManagerModule.bsl @@ -1,7 +1,14 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область ОбработчикиОбновления +#Область СлужебныеПроцедурыИФункции Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl index 3df114a8b..73bd4e4e1 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -68,4 +76,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo b/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo index c30af73f4..6ea24143f 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/ПравилаПроверкиУчета.mdo @@ -150,10 +150,6 @@ <type> <types>EnumRef.ВажностьПроблемыУчета</types> </type> - <toolTip> - <key>ru</key> - <value>Важность проблемы.</value> - </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <fillChecking>ShowError</fillChecking> @@ -253,7 +249,7 @@ <value>Способ выполнения</value> </synonym> <type> - <types>EnumRef.СпособВыполненияПроверки</types> + <types>EnumRef.СпособыВыполненияПроверки</types> </type> <toolTip> <key>ru</key> @@ -315,10 +311,6 @@ <types>Date</types> <dateQualifiers/> </type> - <toolTip> - <key>ru</key> - <value>Дата начала проверки.</value> - </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <fillValue xsi:type="core:UndefinedValue"/> diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl index 2f0bb2540..cea2e3a71 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -45,4 +53,14 @@ #КонецОбласти -#КонецЕсли \ No newline at end of file +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + + ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl index 5bf541418..c5dd171f7 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -30,4 +38,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo index a03ef132e..ca5bd01c2 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo @@ -414,4 +414,138 @@ <indexing>Index</indexing> </attributes> </tabularSections> + <tabularSections uuid="b67a509d-bb0f-427e-b447-4d4617078d6a"> + <producedTypes> + <objectType typeId="4f131f9c-396f-4931-ab33-38c852a7734a" valueTypeId="3976af13-4f3c-4759-9171-e0e0a5fd7d43"/> + <rowType typeId="8635122c-5e9d-46fe-bcb3-c21bca1aaeda" valueTypeId="32b75e4e-8ea7-4d6e-aa87-4a252c0f5443"/> + </producedTypes> + <name>Представления</name> + <synonym> + <key>ru</key> + <value>Представления</value> + </synonym> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <attributes uuid="968ecfca-cf06-4952-83c1-a151e46c78a9"> + <name>КодЯзыка</name> + <synonym> + <key>ru</key> + <value>Код языка</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>10</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="4945c734-a47d-44e9-8a7f-94b31911c1ce"> + <name>Наименование</name> + <synonym> + <key>ru</key> + <value>Наименование</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>150</length> + </stringQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Наименование варианта отчета</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="20a194e9-06cf-4013-bfa4-bc15554a54d0"> + <name>Описание</name> + <synonym> + <key>ru</key> + <value>Описание</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="ab4f3d3d-bb5a-4dbc-b699-808458036b00"> + <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"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="09761456-2273-437f-9316-0391cfaa81b3"> + <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"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="93922abc-98b9-4b3d-a5c8-7294378a69e1"> + <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"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + </tabularSections> </mdclass:Catalog> diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl index 2f0bb2540..cea2e3a71 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -45,4 +53,14 @@ #КонецОбласти -#КонецЕсли \ No newline at end of file +#КонецЕсли + +#Область ОбработчикиСобытий + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + + ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ObjectModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ObjectModule.bsl index d19bc6586..a9bd07a4e 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -27,4 +35,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo index 2f7f31dd4..0a5fac72d 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo @@ -415,4 +415,138 @@ <indexing>Index</indexing> </attributes> </tabularSections> + <tabularSections uuid="0f46b124-1575-4984-9bc1-b5e4696efc74"> + <producedTypes> + <objectType typeId="86ca890f-7116-4710-9e2e-d2e391cb31eb" valueTypeId="ebcb6fb9-f092-48af-a08d-c1673d7ad787"/> + <rowType typeId="b2df3b46-df3f-46ce-af28-fcfdf6ed2df7" valueTypeId="1e8b3669-02e9-4fdd-b320-c9f9df31ea56"/> + </producedTypes> + <name>Представления</name> + <synonym> + <key>ru</key> + <value>Представления</value> + </synonym> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <attributes uuid="a0183a0b-1459-4b32-924c-6ea156f02125"> + <name>КодЯзыка</name> + <synonym> + <key>ru</key> + <value>Код языка</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>10</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="fc2dc619-41e0-4cce-a080-d5c8de5029a8"> + <name>Наименование</name> + <synonym> + <key>ru</key> + <value>Наименование</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>150</length> + </stringQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Наименование варианта отчета</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="9609e5fb-fd11-463c-8679-9b10fc0993ed"> + <name>Описание</name> + <synonym> + <key>ru</key> + <value>Описание</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="f438b941-2aae-4c67-81dc-340f6acc25b1"> + <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"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="48075630-2041-48c3-9eb0-d2107cfcb249"> + <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"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="7d7e7e13-eb42-420d-9bfc-14fab901c3c1"> + <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"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + </tabularSections> </mdclass:Catalog> diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form index a1ecd1c73..8f6590a6b 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form @@ -1,5 +1,5 @@ <?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"> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> <items xsi:type="form:FormGroup"> <name>Отступ</name> <id>29</id> @@ -60,10 +60,6 @@ <maxWidth>75</maxWidth> <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> - <font xsi:type="core:FontRef"> - <font>Style.NormalTextFont</font> - <scale>110</scale> - </font> <extInfo xsi:type="form:LabelDecorationExtInfo"> <horizontalAlign>Left</horizontalAlign> </extInfo> diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl index 571703fa3..3e6e24fdc 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -10,6 +17,14 @@ Заголовок = Параметры.ЗаголовокФормы; + ШиринаЗаголовка = СтрДлина(Заголовок); + Если ШиринаЗаголовка > 80 Тогда + ШиринаЗаголовка = 80; + КонецЕсли; + Если ШиринаЗаголовка > 35 Тогда + Ширина = ШиринаЗаголовка; + КонецЕсли; + ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(,, Ложь); ОшибкаНаКлиенте = Параметры.ОшибкаНаКлиенте; diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form index 2b0d19736..043426403 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form @@ -57,6 +57,40 @@ <autoMaxHeight>true</autoMaxHeight> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>Ссылка</name> + <id>25</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </dataPath> + <extendedTooltip> + <name>СсылкаРасширеннаяПодсказка</name> + <id>27</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СсылкаКонтекстноеМеню</name> + <id>26</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> <commandBarLocation>None</commandBarLocation> <autoCommandBar> <name>СписокКоманднаяПанель</name> @@ -295,6 +329,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <mainTable>Catalog.ПрограммыЭлектроннойПодписиИШифрования</mainTable> diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl index e439b86b3..cb6d67519 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -87,7 +95,7 @@ Если Не Запрос.Выполнить().Пустой() Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Программа с указанным именем и типом уже добавлена в список.'"), , "Объект.ИмяПрограммы"); @@ -111,12 +119,11 @@ Процедура НаименованиеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ИнформацияМодуля = Неопределено; Если ВыбранноеЗначение = "" Тогда Объект.Наименование = ""; Объект.ИмяПрограммы = ""; - Объект.ТипПрограммы = ""; + Объект.ТипПрограммы = 0; Объект.АлгоритмПодписи = ""; Объект.АлгоритмХеширования = ""; Объект.АлгоритмШифрования = ""; @@ -218,8 +225,8 @@ Возврат; КонецЕсли; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + ПерсональныеНастройки = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки(); ПутьКПрограмме = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить( Объект.Ссылка); Иначе @@ -252,7 +259,7 @@ Если ИнформацияМодуля <> Неопределено И Объект.ИмяПрограммы <> ИнформацияМодуля.Имя - И ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + И ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда ИнформацияМодуля = Неопределено; КонецЕсли; diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl index 2813e6583..1a82803ab 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -1,4 +1,13 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем @@ -22,7 +31,6 @@ #КонецОбласти #КонецОбласти -#КонецЕсли #Область ОбработчикиСобытий @@ -32,9 +40,11 @@ СтандартнаяОбработка = Ложь; Параметры.Вставить("ПоказатьСтраницуПрограммы"); ВыбраннаяФорма = Метаданные.ОбщиеФормы.НастройкиЭлектроннойПодписиИШифрования; + ИначеЕсли Параметры.Свойство("Ключ") - И Параметры.Ключ.ЭтоПрограммаОблачногоСервиса - И Метаданные.Обработки.Найти("ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата") <> Неопределено Тогда + И Параметры.Ключ.ЭтоПрограммаОблачногоСервиса + И Метаданные.Обработки.Найти("ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата") <> Неопределено Тогда + СтандартнаяОбработка = Ложь; ВыбраннаяФорма = "Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.ПрограммаВОблачномСервисе"; КонецЕсли; @@ -42,14 +52,15 @@ КонецПроцедуры Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - Если Не ЭлектроннаяПодписьСлужебныйВызовСервера.ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда + + Если Не ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда Параметры.Отбор.Вставить("ЭтоПрограммаОблачногоСервиса", Ложь); КонецЕсли; + КонецПроцедуры #КонецОбласти -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции Функция ПоставляемыеНастройкиПрограмм() Экспорт @@ -303,4 +314,5 @@ КонецПроцедуры #КонецОбласти + #КонецЕсли diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl index 209e687ae..6b47e5a8f 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ObjectModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -23,4 +30,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Module.bsl index e5c97ea8b..443526288 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -23,17 +30,6 @@ Элементы.Создать.Вид = ВидГруппыФормы.ГруппаКнопок; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.КоманднаяПанель, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Вид", ВидГруппыФормы.ГруппаКнопок); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Создать", "Картинка", БиблиотекаКартинок.СоздатьЭлементСписка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Создать", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СоздатьКалендарь", "Картинка", БиблиотекаКартинок.Пустая); - - КонецЕсли; - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form index 51d944e1a..79c5d18ce 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form @@ -254,7 +254,6 @@ <textSize>Normal</textSize> </extInfo> </items> - <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl index e9dc5ba84..7acc8ba27 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -62,7 +69,7 @@ Если ЕстьБазовыйКалендарь И Не ЗначениеЗаполнено(Объект.БазовыйКалендарь) Тогда ТекстСообщения = НСтр("ru = 'Федеральный календарь не заполнен.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , "Объект.БазовыйКалендарь", Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , "Объект.БазовыйКалендарь", Отказ); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index 6629d5b54..941758b8a 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -647,7 +654,7 @@ Попытка Возврат ПроизводственныеКалендариИзФайлаКлассификатора(); Исключение - ИмяСобытия = НСтр("ru = 'Календарные графики.Получение календарей из классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ИмяСобытия = НСтр("ru = 'Календарные графики.Получение календарей из классификатора'", ОбщегоНазначения.КодОсновногоЯзыка()); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить список производственных календарей из классификатора. |Список календарей получен из поставляемого макета. @@ -684,7 +691,7 @@ ТаблицаКалендарей = ДанныеКлассификатора["ПроизводственныеКалендари"].Данные; - Возврат ТаблицаКалендарей; + Возврат ТаблицаКалендарей; КонецФункции diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl index 722885c57..23c476011 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -29,7 +37,7 @@ // Запрещаем ссылку на самого себя. Если Ссылка = БазовыйКалендарь Тогда ТекстСообщения = НСтр("ru = 'В качестве базового не может быть выбран тот же самый календарь.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , "Объект.БазовыйКалендарь", Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , "Объект.БазовыйКалендарь", Отказ); Возврат; КонецЕсли; @@ -56,10 +64,12 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Календарь уже является базовым для календаря «%1» и не может зависеть от другого.'"), Выборка.Ссылка); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Выборка.Ссылка, , "Объект.БазовыйКалендарь", Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Выборка.Ссылка, , "Объект.БазовыйКалендарь", Отказ); КонецПроцедуры #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Commands/ГруппыДоступа/CommandModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Commands/ГруппыДоступа/CommandModule.bsl index 9669b328f..772034ca5 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Commands/ГруппыДоступа/CommandModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Commands/ГруппыДоступа/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl index bcc844531..a67354634 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl index 9ea1a9470..a9ce619d6 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl index 04aede4dc..61e4933bb 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -56,7 +63,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовУправленияФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПоказатьПрофилиПриИзменении(Элемент) @@ -134,13 +141,13 @@ Если ПоказатьПрофили = "Поставляемые" Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Ссылка.ИдентификаторПоставляемыхДанных", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(), ВидСравненияКомпоновкиДанных.НеРавно, , Истина); ИначеЕсли ПоказатьПрофили = "Непоставляемые" Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Ссылка.ИдентификаторПоставляемыхДанных", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(), ВидСравненияКомпоновкиДанных.Равно, , Истина); Иначе ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index 232d99d65..03e8f8004 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -57,7 +64,8 @@ ТолькоПросмотр = Истина; КонецЕсли; - ПользователиСлужебныйКлиентСервер.УстановитьДоступностьКнопкиЗаписатьИЗакрыть(ЭтотОбъект); + Элементы.ФормаЗаписатьИЗакрыть.Доступность = Не ТолькоПросмотр + И ПравоДоступа("Редактирование", Метаданные.Справочники.ПрофилиГруппДоступа); КонецПроцедуры @@ -78,8 +86,6 @@ УправлениеДоступомСлужебный.ПриПовторномЧтенииНаСервереФормыРедактированияРазрешенныхЗначений( ЭтотОбъект, ТекущийОбъект); - ОбновитьГруппыДоступаПрофиля = Ложь; - УстановитьДоступностьОписанияИВосстановленияПоставляемогоПрофиля(ТекущийОбъект); // СтандартныеПодсистемы.УправлениеДоступом diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl index 2abb56bdc..cfd2d288c 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -198,13 +206,11 @@ ОписанияПрофилей = ПоставляемыеПрофили.ОписанияПрофилейМассив; ПараметрыОбновления = ПоставляемыеПрофили.ПараметрыОбновления; - - ОбновленныеПрофили = Новый Массив; - ОбновленныеГруппыДоступа = Новый Массив; + ОбновленныеПрофили = Новый Массив; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Запрос.Текст = "ВЫБРАТЬ | ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен КАК ПоставляемыйПрофильИзменен, @@ -416,7 +422,7 @@ Запрос.УстановитьПараметр("Ссылка", Профиль); Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Запрос.Текст = "ВЫБРАТЬ @@ -429,12 +435,6 @@ Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - - ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПоставляемыхПрофилей(); - - СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить( - Строка(Выборка.ИдентификаторПоставляемыхДанных)); - Возврат Строка(Выборка.ИдентификаторПоставляемыхДанных); КонецЕсли; @@ -670,8 +670,8 @@ Продолжить; КонецЕсли; - ОписаниеРолей = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( - ОписаниеПрофиля.Роли.ВыгрузитьКолонку("Роль"), Истина); + ОписаниеРолей = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам( + ОписаниеПрофиля.Роли.ВыгрузитьКолонку("Роль"), Ложь); Для Каждого ОписаниеРоли Из ОписаниеРолей Цикл Если ОписаниеРоли.Значение = Неопределено Тогда @@ -914,7 +914,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Запрос.УстановитьПараметр("СсылкиПоставляемыхПрофилей", СсылкиПоставляемыхПрофилей); Запрос.Текст = diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl index 941cb15c2..7e7a8aebf 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -318,54 +326,56 @@ Процедура ПроверитьОднозначностьПоставляемыхДанных(ПроверкаЗаполнения = Ложь, Отказ = Ложь) // Проверка однозначности поставляемых данных. - Если ИдентификаторПоставляемыхДанных <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда - УстановитьПривилегированныйРежим(Истина); + Если Не ЗначениеЗаполнено(ИдентификаторПоставляемыхДанных) Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИдентификаторПоставляемыхДанных", ИдентификаторПоставляемыхДанных); + Запрос.Текст = + "ВЫБРАТЬ + | ПрофилиГруппДоступа.Ссылка КАК Ссылка, + | ПрофилиГруппДоступа.Наименование КАК Наименование + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных = &ИдентификаторПоставляемыхДанных"; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Количество() > 1 Тогда - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ИдентификаторПоставляемыхДанных", ИдентификаторПоставляемыхДанных); - Запрос.Текст = - "ВЫБРАТЬ - | ПрофилиГруппДоступа.Ссылка КАК Ссылка, - | ПрофилиГруппДоступа.Наименование КАК Наименование - |ИЗ - | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа - |ГДЕ - | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных = &ИдентификаторПоставляемыхДанных"; + КраткоеПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи профиля ""%1"". + |Поставляемый профиль уже существует:'"), + Наименование); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Количество() > 1 Тогда - - КраткоеПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи профиля ""%1"". - |Поставляемый профиль уже существует:'"), - Наименование); - - ПодробноеПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи профиля ""%1"". - |Идентификатор поставляемых данных ""%2"" уже используется в профиле:'"), - Наименование, - Строка(ИдентификаторПоставляемыхДанных)); - - Пока Выборка.Следующий() Цикл - Если Выборка.Ссылка <> Ссылка Тогда - - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки - + Символы.ПС + """" + Выборка.Наименование + """."; - - ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки - + Символы.ПС + """" + Выборка.Наименование + """ (" - + Строка(Выборка.Ссылка.УникальныйИдентификатор())+ ")." - КонецЕсли; - КонецЦикла; - - Если ПроверкаЗаполнения Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки,,,, Отказ); - Иначе - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Управление доступом.Нарушение однозначности поставляемого профиля'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки); + ПодробноеПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи профиля ""%1"". + |Идентификатор поставляемых данных ""%2"" уже используется в профиле:'"), + Наименование, + Строка(ИдентификаторПоставляемыхДанных)); + + Пока Выборка.Следующий() Цикл + Если Выборка.Ссылка <> Ссылка Тогда + + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки + + Символы.ПС + """" + Выборка.Наименование + """."; + + ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки + + Символы.ПС + """" + Выборка.Наименование + """ (" + + Строка(Выборка.Ссылка.УникальныйИдентификатор())+ ")." КонецЕсли; + КонецЦикла; + + Если ПроверкаЗаполнения Тогда + ОбщегоНазначения.СообщитьПользователю(КраткоеПредставлениеОшибки,,,, Отказ); + Иначе + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Управление доступом.Нарушение однозначности поставляемого профиля'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки); КонецЕсли; КонецЕсли; @@ -373,4 +383,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаВыбора/Form.form index 08d5cda07..6468a8390 100644 --- a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаВыбора/Form.form @@ -124,6 +124,45 @@ <autoMaxHeight>true</autoMaxHeight> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>Ссылка</name> + <id>22</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </dataPath> + <extendedTooltip> + <name>СсылкаРасширеннаяПодсказка</name> + <id>24</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СсылкаКонтекстноеМеню</name> + <id>23</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> <commandBarLocation>None</commandBarLocation> <autoCommandBar> <name>СписокКоманднаяПанель</name> @@ -284,6 +323,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <mainTable>Catalog.ПрофилиКлючевыхОпераций</mainTable> diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаСписка/Form.form index 52171e771..d941e8a33 100644 --- a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаСписка/Form.form @@ -124,6 +124,45 @@ <autoMaxHeight>true</autoMaxHeight> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>Ссылка</name> + <id>25</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </dataPath> + <extendedTooltip> + <name>СсылкаРасширеннаяПодсказка</name> + <id>27</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СсылкаКонтекстноеМеню</name> + <id>26</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> <commandBarLocation>None</commandBarLocation> <autoCommandBar> <name>СписокКоманднаяПанель</name> @@ -283,6 +322,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <mainTable>Catalog.ПрофилиКлючевыхОпераций</mainTable> diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl index aa511a38f..4ec287b1c 100644 --- a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/Forms/ФормаЭлемента/Module.bsl @@ -1,28 +1,34 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗагрузитьПрофильКлючевыхОпераций(Команда) - - ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ДиалогВыбора.Заголовок = НСтр("ru = 'Выберите файл профиля ключевых операций'"); - ДиалогВыбора.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; - + + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл профиля ключевых операций'"); + ПараметрыЗагрузки.Диалог.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; + ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораФайлаЗавершение", ЭтотОбъект, Неопределено); - ДиалогВыбора.Показать(ОписаниеОповещения); - + ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения, ПараметрыЗагрузки); + КонецПроцедуры &НаКлиенте Процедура СохранитьПрофильКлючевыхОпераций(Команда) - - ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - ДиалогВыбора.Заголовок = НСтр("ru = 'Сохранить профиль ключевых операций в файл'"); - ДиалогВыбора.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; - - ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогСохраненияФайлаЗавершение", ЭтотОбъект, Неопределено); - ДиалогВыбора.Показать(ОписаниеОповещения); - + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Сохранить профиль ключевых операций в файл'"); + ПараметрыСохранения.Диалог.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; + + ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, СохранитьПрофильКлючевыхОперацийНаСервере(), "", ПараметрыСохранения); + КонецПроцедуры &НаКлиенте @@ -35,32 +41,15 @@ #Область СлужебныеПроцедурыИФункции &НаКлиенте -Процедура ДиалогВыбораФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт - - Если ВыбранныеФайлы <> Неопределено Тогда - - Если НЕ ЗначениеЗаполнено(Объект.Наименование) Тогда - ФайлИмя = Новый Файл(ВыбранныеФайлы[0]); - Объект.Наименование = ФайлИмя.ИмяБезРасширения; - КонецЕсли; - - ДвоичныеДанные = Новый ДвоичныеДанные(ВыбранныеФайлы[0]); - АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); - ЗагрузитьПрофильКлючевыхОперацийНаСервере(АдресХранилища); - Модифицированность = Истина; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ДиалогСохраненияФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт - - Если ВыбранныеФайлы <> Неопределено Тогда - АдресХранилища = СохранитьПрофильКлючевыхОперацийНаСервере(); - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища); - ДвоичныеДанные.Записать(ВыбранныеФайлы[0]); - КонецЕсли; - +Процедура ДиалогВыбораФайлаЗавершение(ВыбранныйФайл, ДополнительныеПараметры) Экспорт + + Если ВыбранныйФайл = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗагрузитьПрофильКлючевыхОперацийНаСервере(ВыбранныйФайл.Хранение); + Модифицированность = Истина; + КонецПроцедуры &НаСервере @@ -97,7 +86,7 @@ КонецФункции &НаСервере -Функция ЗагрузитьПрофильКлючевыхОперацийНаСервере(АдресХранилища) +Процедура ЗагрузитьПрофильКлючевыхОперацийНаСервере(АдресХранилища) ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища); @@ -122,7 +111,7 @@ ЧтениеXML.Закрыть(); УдалитьФайлы(ИмяВременногоФайла); -КонецФункции +КонецПроцедуры &НаСервере Процедура ЗагрузитьОбъектXDTO(ОбъектXDTO, Колонки) diff --git a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ObjectModule.bsl index 8b1378917..e69de29bb 100644 --- a/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиКлючевыхОпераций/ObjectModule.bsl @@ -1 +0,0 @@ - diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl index d714ad3ec..fdc864169 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl index 69febf150..93d2bb90c 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl index 2fe0537ea..1fe925993 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -18,13 +26,6 @@ ЭтотОбъект.Каталог = "/каталог/"; КонецЕсли; ВидимостьДоступность(ЭтотОбъект); - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаОК", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); - - КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -33,7 +34,7 @@ &НаКлиенте Процедура СерверИКаталогПриИзменении(Элемент) - ЗаполнитьЗначенияСвойств(ЭтотОбъект, РассылкаОтчетовКлиентСервер.РазобратьFTPАдрес(СерверИКаталог), "Сервер, Каталог"); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, РассылкаОтчетовКлиент.РазобратьFTPАдрес(СерверИКаталог), "Сервер, Каталог"); ВидимостьДоступность(ЭтотОбъект); КонецПроцедуры @@ -80,7 +81,7 @@ Процедура ЗаполнитьЗавершение(РезультатВвода, ДополнительныеПараметры) Экспорт Если РезультатВвода <> Неопределено Тогда ПарольДоВвода = Пароль; - ЗаполнитьЗначенияСвойств(ЭтотОбъект, РассылкаОтчетовКлиентСервер.РазобратьFTPАдрес(РезультатВвода)); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, РассылкаОтчетовКлиент.РазобратьFTPАдрес(РезультатВвода)); Если Пароль = ПарольСкрыт() Тогда Пароль = ПарольДоВвода; КонецЕсли; diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form index 7eac01918..ca81dc688 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form @@ -681,6 +681,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>ГруппаКоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>ВидПочтовогоАдресаПолучателей</name> <title> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl index 55b104d69..736c1e08f 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -26,18 +34,6 @@ Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла") Тогда Элементы.ВставитьИзБуфераОбмена.Видимость = Ложь; КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.ГруппаКоманднаяПанель, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаКоманднаяПанель", "Вид", ВидГруппыФормы.ГруппаКнопок); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВставитьИзБуфераОбмена", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПолучателиУстановитьПометки", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПолучателиСнятьПометки", "ТолькоВоВсехДействиях", Истина); - - КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -324,8 +320,8 @@ Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); Если Найденные.Количество() = 1 Тогда СтрокаПолучатель = Найденные[0]; - ИдентификаторОбъектаМетаданных = СтрокаПолучатель.ИдентификаторОбъектаМетаданных; - ПутьФормыВыбора = СтрокаПолучатель.ПутьФормыВыбора; + ИдентификаторОбъектаМетаданных = СтрокаПолучатель.ИдентификаторОбъектаМетаданных; + ПутьФормыВыбора = СтрокаПолучатель.ПутьФормыВыбора; ГруппаКонтактнойИнформацииТипаПолучателей = СтрокаПолучатель.ГруппаКИ; // ГруппаКИ используется для поля "ВидПочтовогоАдресаПолучателей" в "СвязиПараметровВыбора.Отбор". Иначе diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form index b569478de..fc65b4e70 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form @@ -55,6 +55,40 @@ <autoMaxHeight>true</autoMaxHeight> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>Ссылка</name> + <id>21</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible/> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </dataPath> + <extendedTooltip> + <name>СсылкаРасширеннаяПодсказка</name> + <id>23</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СсылкаКонтекстноеМеню</name> + <id>22</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> <commandBarLocation>None</commandBarLocation> <autoCommandBar> <name>СписокКоманднаяПанель</name> @@ -277,6 +311,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <mainTable>Catalog.РассылкиОтчетов</mainTable> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Module.bsl index b2786531d..68527a63f 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl index 71a5b59b3..076bfad6b 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form index 56424de73..56336ae29 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form @@ -1127,6 +1127,7 @@ <items xsi:type="form:FormField"> <name>Наименование</name> <id>6</id> + <displayImportance>Usual</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -1165,6 +1166,7 @@ <items xsi:type="form:FormField"> <name>Подготовлена</name> <id>14</id> + <displayImportance>VeryHigh</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -1915,6 +1917,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Список</name> <id>1</id> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl index 9d665de2d..86c4fcf84 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -43,13 +51,6 @@ ЗаполнитьПараметрСписка("МножественныйВыбор"); ЗаполнитьПараметрСписка("ТекущаяСтрока"); - Если Параметры.РежимВыбора Тогда - РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФОРМАВЫБРАТЬ", "КнопкаПоУмолчанию", Истина); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФОРМАВЫБРАТЬ", "Видимость", Ложь); - КонецЕсли; - Если Не ПравоДоступа("Изменение", Метаданные.Справочники.РассылкиОтчетов) Тогда // Режим показа только личных рассылок - скрываются группы и лишние колонки. Элементы.Список.Отображение = ОтображениеТаблицы.Список; @@ -75,15 +76,6 @@ Если Не ПравоДоступа("ЖурналРегистрации", Метаданные) Тогда Элементы.СобытияРассылки.Видимость = Ложь; КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.КоманднаяПанель, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Вид", ВидГруппыФормы.ГруппаКнопок); - - КонецЕсли; - КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form index b57f50070..7c919f611 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form @@ -882,6 +882,7 @@ <verticalStretch>true</verticalStretch> <enableStartDrag>true</enableStartDrag> <enableDrag>true</enableDrag> + <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <rowFilter xsi:type="core:UndefinedValue"/> </items> @@ -4426,7 +4427,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> - <group>HorizontalIfPossible</group> + <group>AlwaysHorizontal</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -4594,7 +4595,7 @@ </extendedTooltip> <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> - <group>HorizontalIfPossible</group> + <group>AlwaysHorizontal</group> <showTitle>auto</showTitle> <scrollOnCompress>false</scrollOnCompress> </extInfo> @@ -4769,7 +4770,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> - <group>HorizontalIfPossible</group> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl index 3d4b6fcfb..a5cc0d0bb 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -106,7 +114,7 @@ Отказ = Истина; ПараметрыЖурнала = Новый Структура; - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Открытие формы элемента'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Открытие формы элемента'", ОбщегоНазначения.КодОсновногоЯзыка())); ПараметрыЖурнала.Вставить("Данные", Неопределено); ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов); @@ -219,7 +227,7 @@ ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор(); ТекстОшибки = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки); Если ТекстОшибки <> "" Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Отчеты[0].Представление"); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "Объект.Отчеты[0].Представление"); КонецЕсли; КонецЕсли; @@ -232,11 +240,11 @@ Строка.НеОтправлятьПустой = Не Строка.ОтправлятьЕслиПустой; КонецЦикла; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандаЗаписатьИЗакрыть", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандаЗаписатьИЗакрыть", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.КомандаЗаписатьИЗакрыть.Отображение = ОтображениеКнопки.Картинка; + Элементы.ДругиеСпособыДоставки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно; + Элементы.ИспользоватьСетевойКаталог.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно; + Элементы.ИспользоватьПапку.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно; КонецЕсли; КонецПроцедуры @@ -262,13 +270,13 @@ Если Не ЗначениеЗаполнено(Объект.Наименование) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не введено наименование'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.Наименование"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.Наименование"); КонецЕсли; Если Объект.ИспользоватьЭлектроннуюПочту И Не Объект.Личная Тогда Если Не ЗначениеЗаполнено(ТипПолучателейРассылки) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не выбран тип получателей'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ТипПолучателейРассылки"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ТипПолучателейРассылки"); КонецЕсли; КонецЕсли; @@ -276,13 +284,13 @@ Если Объект.Отчеты.Количество() = 0 Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не выбрано ни одного отчета'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.Отчеты"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.Отчеты"); КонецЕсли; Если Не ЗначениеЗаполнено(Объект.ПериодичностьРасписания) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не выбрана периодичность запуска'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.ПериодичностьРасписания"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.ПериодичностьРасписания"); КонецЕсли; Если Объект.ИспользоватьFTPРесурс Тогда @@ -291,7 +299,7 @@ Или Не ЗначениеЗаполнено(Объект.FTPКаталог) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не введен FTP адрес'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "FTPСерверИКаталог"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "FTPСерверИКаталог"); КонецЕсли; КонецЕсли; @@ -299,12 +307,12 @@ Если Не ЗначениеЗаполнено(Объект.СетевойКаталогWindows) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не введен сетевой каталог Windows'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.СетевойКаталогWindows"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.СетевойКаталогWindows"); КонецЕсли; Если Не ЗначениеЗаполнено(Объект.СетевойКаталогLinux) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не введен сетевой каталог Linux'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.СетевойКаталогLinux"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.СетевойКаталогLinux"); КонецЕсли; КонецЕсли; @@ -312,7 +320,7 @@ Если Не ЗначениеЗаполнено(Объект.Папка) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не выбрана папка'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.Папка"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.Папка"); КонецЕсли; КонецЕсли; @@ -321,7 +329,7 @@ Если Не ЗначениеЗаполнено(Объект.ВидПочтовогоАдресаПолучателей) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не выбран почтовый адрес'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.ВидПочтовогоАдресаПолучателей"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.ВидПочтовогоАдресаПолучателей"); КонецЕсли; Иначе Если Не ПолучателиУказаны(Объект.Получатели) Тогда @@ -330,13 +338,13 @@ Если Не ЗначениеЗаполнено(Объект.ВидПочтовогоАдресаПолучателей) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не выбран тип почтового адреса получателей'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ПолучателиРассылки"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ПолучателиРассылки"); КонецЕсли; КонецЕсли; Если Не ЗначениеЗаполнено(Объект.УчетнаяЗапись) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не выбрана учетная запись для отправки'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.УчетнаяЗапись"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.УчетнаяЗапись"); КонецЕсли; КонецЕсли; КонецЕсли; @@ -447,7 +455,7 @@ НСтр("ru = 'Для отчета ''%1'' заполнены не все настройки, обязательные для заполнения. Необходимо заполнить все обязательные настройки или снять флажок ''Подготовлена''.'"), Строка(СтрокаОтчеты.Отчет)); Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление"; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); КонецЕсли; КонецЕсли; // СтрокаОтчеты.СКД @@ -464,7 +472,7 @@ НСтр("ru = 'В настройках отчета ''%1'' задан отбор по получателю рассылки. Необходимо отключить этот отбор или изменить вид рассылки на ''Свой отчет для каждого получателя''.'"), Строка(СтрокаОтчеты.Отчет)); Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление"; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); КонецЕсли; Если Объект.Персонализирована И НЕ ОтчетПерсонализирован Тогда @@ -473,7 +481,7 @@ НСтр("ru = 'В настройках отчета ""%1"" не указан отбор по получателю рассылки.'"), Строка(СтрокаОтчеты.Отчет)); Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление"; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); КонецЕсли; КонецЦикла; @@ -698,7 +706,7 @@ &НаКлиенте Процедура FTPСерверИКаталогПриИзменении(Элемент) - ВыбранноеЗначение = РассылкаОтчетовКлиентСервер.РазобратьFTPАдрес(FTPСерверИКаталог); + ВыбранноеЗначение = РассылкаОтчетовКлиент.РазобратьFTPАдрес(FTPСерверИКаталог); FTPСерверИКаталогОбработкаВыбора(Элемент, ВыбранноеЗначение, Истина); КонецПроцедуры @@ -746,7 +754,7 @@ СтандартнаяОбработка = Ложь; ПолныйАдрес = "ftp://"+ Объект.FTPСервер +":"+ Формат(Объект.FTPПорт, "ЧН=21; ЧГ=0") + Объект.FTPКаталог; - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(ПолныйАдрес); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(ПолныйАдрес); КонецПроцедуры @@ -1156,7 +1164,7 @@ Если Не ЗначениеЗаполнено(Объект.ТипПолучателейРассылки) Тогда ТекстОшибки = НСтр("ru = 'Для ввода получателей необходимо выбрать их тип'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ТипПолучателейРассылки"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , "ТипПолучателейРассылки"); Возврат; КонецЕсли; @@ -1270,7 +1278,6 @@ КонецЦикла; КонецЕсли; - Получатель = Неопределено; Если Объект.Персонализирована Тогда Если Не ПолучателиУказаны(Объект.Получатели) Тогда Возврат; @@ -1330,14 +1337,14 @@ ПредставлениеВида = Элементы.ВидРассылки.СписокВыбора.НайтиПоЗначению("Персонализирована").Представление; СообщениеТекст = НСтр("ru = 'Использовать получателя в параметрах возможно только для вида рассылки ""%1""'"); СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеТекст, ПредставлениеВида); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеТекст, , "ВидРассылки"); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеТекст, , "ВидРассылки"); Возврат; КонецЕсли; // Получение основного типа получателей. КоличествоТипов = ТипПолучателейРассылки.Типы().Количество(); Если КоличествоТипов <> 1 И КоличествоТипов <> 2 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Получатели"" не заполнено'"), , "ТипПолучателейРассылки"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Поле ""Получатели"" не заполнено'"), , "ТипПолучателейРассылки"); Возврат; КонецЕсли; @@ -1566,7 +1573,7 @@ Процедура ЗаполнитьРасписаниеПоШаблону(Команда) Обработчик = Новый ОписаниеОповещения("ЗаполнитьРасписаниеПоШаблонуЗавершение", ЭтотОбъект); - СписокВариантов = РассылкаОтчетовКлиентСервер.СписокВариантовЗаполненияРасписаний(); + СписокВариантов = РассылкаОтчетовКлиент.СписокВариантовЗаполненияРасписаний(); СписокВариантов.ПоказатьВыборЭлемента(Обработчик, НСтр("ru = 'Выберите шаблон расписания'")); КонецПроцедуры @@ -1585,7 +1592,6 @@ Переменные.Вставить("ТекстФормата", ""); ДлинаПрефикса = СтрДлина(Переменные.Префикс); - ДлинаПостфикса = СтрДлина(Переменные.Постфикс); ПозицияПрефикса = СтрНайти(Переменные.СтарыйТекст, Переменные.Префикс); ПозицияПостфикса = СтрНайти(Переменные.СтарыйТекст, Переменные.Постфикс); @@ -1613,7 +1619,7 @@ СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Использование получателя в тексте шаблона возможно только для вида рассылки ""%1""'"), Элементы.ВидРассылки.СписокВыбора.НайтиПоЗначению("Персонализирована").Представление); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеТекст, , "ВидРассылки"); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеТекст, , "ВидРассылки"); Возврат; КонецЕсли; @@ -1706,14 +1712,6 @@ &НаКлиенте Процедура ПредпросмотрШаблона(Команда) - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоказатьПредупреждение(, НСтр("ru ='Предварительный просмотр шаблона доступен в толстом, тонком или ВЕБ-клиенте.'")); - Возврат; - - КонецЕсли; - ДобавитьШаблон(); Если ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент Тогда @@ -2018,7 +2016,6 @@ НовыйФрагмент = Переменные.Префикс + СтрокаРезультат + Переменные.Постфикс; СтарыйФрагмент = Переменные.Префикс + Переменные.ТекстФормата + Переменные.Постфикс; - ВыделенныйТекст = Переменные.СтарыйТекст; Если Переменные.Элемент = Элементы.ТекстПисьмаФорматированныйДокумент Тогда ЗаменаВыполнена = Ложь; @@ -2123,8 +2120,8 @@ &НаКлиенте Функция ВыборПодборПеретаскиваниеЭлементаВТабличнуюЧасть(ЭлементПодбора, ТабличнаяЧасть, ИмяРеквизита, СтруктураЗаполнения, Уникальность = Истина) - ПереданаСтруктура = (ТипЗнч(ЭлементПодбора) = Тип("Структура")); - Если ПереданаСтруктура Или ТипЗнч(ЭлементПодбора) = Тип("ДанныеФормыЭлементКоллекции") Тогда + + Если (ТипЗнч(ЭлементПодбора) = Тип("Структура")) Или ТипЗнч(ЭлементПодбора) = Тип("ДанныеФормыЭлементКоллекции") Тогда Если ЭлементПодбора.Свойство(ИмяРеквизита) Тогда ЗначениеРеквизита = ЭлементПодбора[ИмяРеквизита]; Иначе @@ -2144,7 +2141,7 @@ СтрокаТаблицы = ТабличнаяЧасть.Добавить(); СтрокаТаблицы[ИмяРеквизита] = ЗначениеРеквизита; ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтруктураЗаполнения); - Если ПереданаСтруктура Тогда + Если (ТипЗнч(ЭлементПодбора) = Тип("Структура")) Тогда Для Каждого КлючИЗначение Из ЭлементПодбора Цикл Если СтруктураЗаполнения.Свойство(КлючИЗначение.Ключ) Тогда ЭлементПодбора.Удалить(ЭлементПодбора.Ключ); @@ -2178,7 +2175,7 @@ КонецФункции &НаКлиенте -Функция ВыбратьФормат(СсылкаНаОтчет, ОбработчикРезультата) +Процедура ВыбратьФормат(СсылкаНаОтчет, ОбработчикРезультата) // Для хранения всех форматов, выбранных пользователем, используется табличная часть ФорматыОтчетов. // При этом, для форматов "по умолчанию" используется пустое значение реквизита Отчет. // В зависимости от типа внедрения реквизит Отчет может принимать значение Неопределено или ПустаяСсылка. @@ -2219,7 +2216,7 @@ СписокФорматов.ПоказатьОтметкуЭлементов(Обработчик, ЗаголовокДиалога); -КонецФункции +КонецПроцедуры &НаКлиенте Процедура ОчиститьФормат(СсылкаНаОтчет) @@ -2623,11 +2620,27 @@ Если Изменения = "" Или Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРасписание Тогда Элементы.ПредставлениеРасписания.Видимость = Объект.ВыполнятьПоРасписанию; Если Объект.ВыполнятьПоРасписанию Тогда - Элементы.ПредставлениеРасписания.Заголовок = СтандартныеПодсистемыКлиентСервер.ПредставлениеРасписания(Форма.Расписание); + Элементы.ПредставлениеРасписания.Заголовок = ПредставлениеРасписания(Форма.Расписание); КонецЕсли; КонецЕсли; КонецПроцедуры +// Формирует представление расписания регламентного задания. +// +// Параметры: +// Расписание - РасписаниеРегламентногоЗадания - Расписание. +// +// Возвращаемое значение: +// Строка - Представление расписания. +// +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеРасписания(Расписание) + ПредставлениеРасписания = Строка(Расписание); + ПредставлениеРасписания = ВРег(Лев(ПредставлениеРасписания, 1)) + Сред(ПредставлениеРасписания, 2); + ПредставлениеРасписания = СтрЗаменить(СтрЗаменить(ПредставлениеРасписания, " ", " "), " ]", "]") + "."; + Возврат ПредставлениеРасписания; +КонецФункции + &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеПолучателей(Форма) Получатели = Форма.Объект.Получатели; @@ -2679,7 +2692,11 @@ Если Не Форма.Модифицированность Тогда Форма.ФормаБылаМодифицированаНаСервере = Истина; Если ЗначениеЗаполнено(Текст) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст, , Поле, ПутьКДанным); + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = Текст; + Сообщение.Поле = Поле; + Сообщение.ПутьКДанным = ПутьКДанным; + Сообщение.Сообщить(); КонецЕсли; КонецЕсли; КонецПроцедуры @@ -2691,14 +2708,22 @@ &НаКлиентеНаСервереБезКонтекста Функция ПолучателиУказаны(Получатели) + Для Каждого СтрокаТаблицы Из Получатели Цикл Если Не СтрокаТаблицы.Исключен Тогда Возврат Истина; КонецЕсли; КонецЦикла; + ТекстСообщения = НСтр("ru = 'Не выбрано ни одного получателя'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ПолучателиРассылки"); + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщения; + Сообщение.Поле = "ПолучателиРассылки"; + Сообщение.Сообщить(); + Возврат Ложь; + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -2924,7 +2949,7 @@ // Сборка текста ошибок. Если СтруктураВыбора.СОшибками.Количество > 0 Тогда - СтруктураВыбора.СОшибками.Текст = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(МассивОшибок); + СтруктураВыбора.СОшибками.Текст = РассылкаОтчетов.СтрокаСообщенийПользователю(МассивОшибок); КонецЕсли; КонецПроцедуры @@ -2936,7 +2961,7 @@ УстановитьПривилегированныйРежим(Истина); ПараметрыЖурнала = Новый Структура; - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Проверка способа доставки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Проверка способа доставки'", ОбщегоНазначения.КодОсновногоЯзыка())); ПараметрыЖурнала.Вставить("Данные", Рассылка); ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов); ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); @@ -2984,7 +3009,7 @@ РезультатВыполнения.Текст = НСтр("ru = 'Тест способа доставки успешно пройден.'"); Иначе РезультатВыполнения.Текст = НСтр("ru = 'Тест способа доставки не пройден.'"); - РезультатВыполнения.Подробно = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); + РезультатВыполнения.Подробно = РассылкаОтчетов.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); КонецЕсли; Возврат РезультатВыполнения; @@ -3049,39 +3074,40 @@ КонецПроцедуры -&НаСервереБезКонтекста +&НаСервере Функция ПолучитьКэш() + // Преобразование наименований в значения. ДниНедели = Новый Соответствие; - ДниНедели.Вставить("Понедельник", 1); - ДниНедели.Вставить("Вторник", 2); - ДниНедели.Вставить("Среда", 3); - ДниНедели.Вставить("Четверг", 4); - ДниНедели.Вставить("Пятница", 5); - ДниНедели.Вставить("Суббота", 6); - ДниНедели.Вставить("Воскресенье", 7); + ДниНедели.Вставить(Элементы.Понедельник.Имя, 1); + ДниНедели.Вставить(Элементы.Вторник.Имя, 2); + ДниНедели.Вставить(Элементы.Среда.Имя, 3); + ДниНедели.Вставить(Элементы.Четверг.Имя, 4); + ДниНедели.Вставить(Элементы.Пятница.Имя, 5); + ДниНедели.Вставить(Элементы.Суббота.Имя, 6); + ДниНедели.Вставить(Элементы.Воскресенье.Имя, 7); ДниНедели = Новый ФиксированноеСоответствие(ДниНедели); Месяцы = Новый Соответствие; - Месяцы.Вставить("Январь", 1); - Месяцы.Вставить("Февраль", 2); - Месяцы.Вставить("Март", 3); - Месяцы.Вставить("Апрель", 4); - Месяцы.Вставить("Май", 5); - Месяцы.Вставить("Июнь", 6); - Месяцы.Вставить("Июль", 7); - Месяцы.Вставить("Август", 8); - Месяцы.Вставить("Сентябрь", 9); - Месяцы.Вставить("Октябрь", 10); - Месяцы.Вставить("Ноябрь", 11); - Месяцы.Вставить("Декабрь", 12); + Месяцы.Вставить(Элементы.Январь.Имя, 1); + Месяцы.Вставить(Элементы.Февраль.Имя, 2); + Месяцы.Вставить(Элементы.Март.Имя, 3); + Месяцы.Вставить(Элементы.Апрель.Имя, 4); + Месяцы.Вставить(Элементы.Май.Имя, 5); + Месяцы.Вставить(Элементы.Июнь.Имя, 6); + Месяцы.Вставить(Элементы.Июль.Имя, 7); + Месяцы.Вставить(Элементы.Август.Имя, 8); + Месяцы.Вставить(Элементы.Сентябрь.Имя, 9); + Месяцы.Вставить(Элементы.Октябрь.Имя, 10); + Месяцы.Вставить(Элементы.Ноябрь.Имя, 11); + Месяцы.Вставить(Элементы.Декабрь.Имя, 12); Месяцы = Новый ФиксированноеСоответствие(Месяцы); // Умолчания для полей, поддерживающих шаблоны заполнения. Шаблоны = Новый ФиксированнаяСтруктура("Тема, Текст, ИмяАрхива", - РассылкаОтчетовКлиентСервер.ШаблонТемы(), - РассылкаОтчетовКлиентСервер.ШаблонТекста(), - РассылкаОтчетовКлиентСервер.ШаблонИмениАрхива()); + РассылкаОтчетов.ШаблонТемы(), + РассылкаОтчетов.ШаблонТекста(), + РассылкаОтчетов.ШаблонИмениАрхива()); // Структура кэша. Кэш = Новый Структура; @@ -3148,7 +3174,7 @@ ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор(); СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, Истина, ПользовательскиеНастройкиКД); Если СтрокаПредупреждения <> "" Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаПредупреждения, , "Объект.Отчеты["+ Индекс +"].Представление"); + ОбщегоНазначения.СообщитьПользователю(СтрокаПредупреждения, , "Объект.Отчеты["+ Индекс +"].Представление"); КонецЕсли; КонецЦикла; КонецПроцедуры @@ -3214,7 +3240,7 @@ Функция ИнициализироватьОтчет(СтрокаОтчеты, ДобавитьДежурнуюФразу, ПользовательскиеНастройки, Интерактивно = Истина) // Параметры журнала ПараметрыЖурнала = Новый Структура; - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Инициализация отчета'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Инициализация отчета'", ОбщегоНазначения.КодОсновногоЯзыка())); ПараметрыЖурнала.Вставить("Данные", ?(ЗначениеЗаполнено(Объект.Ссылка), Объект.Ссылка, СтрокаОтчеты.Отчет)); ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов); ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); @@ -3228,7 +3254,7 @@ ЭтотОбъект.УникальныйИдентификатор); ПараметрыОтчета.Вставить("МассивОшибок", ПараметрыЖурнала.МассивОшибок); - ПараметрыОтчета.Ошибки = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыОтчета.МассивОшибок, ДобавитьДежурнуюФразу); + ПараметрыОтчета.Ошибки = РассылкаОтчетов.СтрокаСообщенийПользователю(ПараметрыОтчета.МассивОшибок, ДобавитьДежурнуюФразу); Если ПараметрыОтчета.Инициализирован Тогда СтрокаОтчеты.СКД = ПараметрыОтчета.СКД; @@ -3352,7 +3378,7 @@ Элементы.Отчеты.ТекущаяСтрока = ИдентификаторСтроки; СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, Истина, ПользовательскиеНастройкиКД); Если СтрокаПредупреждения <> "" Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаПредупреждения, , "Объект.Отчеты["+ ИндексСтроки +"].Представление"); + ОбщегоНазначения.СообщитьПользователю(СтрокаПредупреждения, , "Объект.Отчеты["+ ИндексСтроки +"].Представление"); Иначе ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторСтроки); КонецЕсли; @@ -3504,14 +3530,16 @@ КонецФункции &НаСервере -Функция ЗафиксироватьЗначенияРеквизитовДоИзменения() +Процедура ЗафиксироватьЗначенияРеквизитовДоИзменения() + ИменаРеквизитов = "ИспользоватьПапку, ИспользоватьЭлектроннуюПочту, ТолькоУведомить, Архивировать"; ИменаРеквизитов = ИменаРеквизитов + ", ИспользоватьСетевойКаталог, СетевойКаталогWindows, СетевойКаталогLinux"; ИменаРеквизитов = ИменаРеквизитов + ", ИспользоватьFTPРесурс, FTPСервер, FTPКаталог"; ЗначенияРеквизитовДоИзменения = Новый Структура(ИменаРеквизитов); ЗаполнитьЗначенияСвойств(ЗначенияРеквизитовДоИзменения, Объект); ЗначенияРеквизитовДоИзменения = Новый ФиксированнаяСтруктура(ЗначенияРеквизитовДоИзменения); -КонецФункции + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Копия команды "Выполнить сейчас" для поддержки асинхронности. diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl index c0b2d60e2..3d029a490 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl index 70d209dcc..cad965876 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -137,4 +145,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl index 0c3954f3e..e939794bb 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -16,16 +24,18 @@ Список, "ВнешняяРоль", Истина, , , Истина); КонецЕсли; - ЭтоВнешнийПользователь = ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя(); + ЭтоВнешнийПользователь = Пользователи.ЭтоСеансВнешнегоПользователя(); + Если ЭтоВнешнийПользователь Тогда - Если Элементы.КоманднаяПанель.ПодчиненныеЭлементы.Найти("ФормаИзменить") <> Неопределено Тогда - Элементы.КоманднаяПанель.ПодчиненныеЭлементы.ФормаИзменить.Видимость = Ложь; - КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы.КоманднаяПанель.ПодчиненныеЭлементы, "ФормаИзменить", + "Видимость", Ложь); СтрокаОтбораВТекстеЗапроса = ОпределитьОтборДляВнешнегоПользователя(); Иначе + СтрокаОтбораВТекстеЗапроса = " ГДЕ РолиИсполнителейНазначениеПереопределяемый.ТипПользователей = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; + КонецЕсли; СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); @@ -56,7 +66,7 @@ &НаСервере Функция ОпределитьОтборДляВнешнегоПользователя() - ТекущийВнешнийПользователь = ПользователиКлиентСервер.ТекущийВнешнийПользователь(); + ТекущийВнешнийПользователь = ВнешниеПользователи.ТекущийВнешнийПользователь(); СтрокаОтбораВТекстеЗапроса = СтрЗаменить(" ГДЕ РолиИсполнителейНазначениеПереопределяемый.ТипПользователей = ЗНАЧЕНИЕ(Справочник.%Имя%.ПустаяСсылка)", "%Имя%", ТекущийВнешнийПользователь.ОбъектАвторизации.Метаданные().Имя); diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl index 846ca09d9..8f760923a 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl index 21faf145a..f852713fc 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -38,7 +45,7 @@ Для каждого СтрокаТаблицы Из Объект.Назначение Цикл Если ТипЗнч(СтрокаТаблицы.ТипПользователей) <> ТипЗнч(Справочники.Пользователи.ПустаяСсылка()) Тогда НаименованиеНазначения = Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТаблицы.ТипПользователей)).Представление(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль не может использоваться с обязательным уточнением для назначения: %1.'"), НаименованиеНазначения ),,, "ИспользуетсяСОбъектамиАдресации", Отказ); КонецЕсли; @@ -59,7 +66,7 @@ &НаКлиенте Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl index 214accdc3..d63514ee1 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -29,16 +37,14 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда - ТекущийПользователь = ПользователиКлиентСервер.ТекущийВнешнийПользователь(); + Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда + ТекущийПользователь = ВнешниеПользователи.ТекущийВнешнийПользователь(); ОбъектАвторизации = Справочники[ТекущийПользователь.ОбъектАвторизации.Метаданные().Имя].ПустаяСсылка(); Иначе ОбъектАвторизации = Справочники.Пользователи.ПустаяСсылка(); @@ -63,4 +69,6 @@ КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl index a30283739..86152b196 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -5,7 +13,7 @@ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если НЕ ИспользуетсяСОбъектамиАдресации И НЕ ИспользуетсяБезОбъектовАдресации Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Не указаны допустимые способы назначения исполнителей на роль: совместно с объектами адресации, без них или обоими способами.'"), ЭтотОбъект, "ИспользуетсяБезОбъектовАдресации",,Отказ); Возврат; @@ -17,7 +25,7 @@ ЗаданыТипыОсновногоОбъектаАдресации = ТипыОсновногоОбъектаАдресации <> Неопределено И НЕ ТипыОсновногоОбъектаАдресации.Пустая(); Если НЕ ЗаданыТипыОсновногоОбъектаАдресации Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не указаны типы основного объекта адресации.'"), + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не указаны типы основного объекта адресации.'"), ЭтотОбъект, "ТипыОсновногоОбъектаАдресации",,Отказ); КонецЕсли; @@ -48,4 +56,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl index 5d1d76be5..a504aab12 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -56,10 +64,7 @@ Заголовок = НСтр("ru = 'Добавление сертификата для подписания данных'"); КонецЕсли; - ОбщиеНастройки = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); - СоздаватьЭлектронныеПодписиНаСервере = ОбщиеНастройки.СоздаватьЭлектронныеПодписиНаСервере; - - Если СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда Элементы.ГруппаСертификаты.Заголовок = НСтр("ru = 'Личные сертификаты на компьютере и сервере'"); КонецЕсли; @@ -138,7 +143,7 @@ И Не ЗначениеЗаполнено(СертификатОрганизация) Тогда ТекстСообщения = НСтр("ru = 'Поле Организация не заполнено.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "СертификатОрганизация",, Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, "СертификатОрганизация",, Отказ); КонецЕсли; КонецПроцедуры @@ -286,7 +291,7 @@ ОбновитьСписокСертификатов(Новый ОписаниеОповещения( "ДалееПослеОбновленияСпискаСертификатов", ЭтотОбъект, Контекст)); Иначе - ДалееПослеОбновленияСпискаСертификатов(, Контекст); + ДалееПослеОбновленияСпискаСертификатов(Неопределено, Контекст); КонецЕсли; КонецПроцедуры @@ -321,8 +326,6 @@ Контекст.Вставить("ОшибкаНаСервере", Новый Структура); Контекст.Вставить("ОшибкаНаКлиенте", Новый Структура); - СертификатЗаписан = Ложь; - Если СертификатНаСервере И ПроверитьСертификатИЗаписатьВСправочник(СвойстваПароля.Значение, Контекст.ОшибкаНаСервере) Тогда @@ -418,11 +421,12 @@ #Область СлужебныеПроцедурыИФункции +// АПК:78-выкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. &НаКлиенте Процедура ПродолжитьОткрытие(Оповещение, ОбщиеВнутренниеДанные) Экспорт +// АПК:78-вкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. ВнутренниеДанные = ОбщиеВнутренниеДанные; - ОбработкаПродолжения = Новый ОписаниеОповещения("ПродолжитьОткрытие", ЭтотОбъект); ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, ВнутренниеДанные, СвойстваПароля); Контекст = Новый Структура; @@ -431,7 +435,7 @@ Если ОтпечатокВыбранногоСертификатаНеНайден = Неопределено Или ОтпечатокВыбранногоСертификатаНеНайден = Истина Тогда - ПродолжитьОткрытиеПослеПереходаКВыборуТекущегоСертификата(, Контекст); + ПродолжитьОткрытиеПослеПереходаКВыборуТекущегоСертификата(Неопределено, Контекст); Иначе ПерейтиКВыборуТекущегоСертификата(Новый ОписаниеОповещения( "ПродолжитьОткрытиеПослеПереходаКВыборуТекущегоСертификата", ЭтотОбъект, Контекст)); @@ -466,8 +470,8 @@ СертификатОтпечаток = Отпечаток; - ЭлектроннаяПодписьКлиентСервер.ЗаполнитьОписаниеДанныхСертификата(СертификатОписаниеДанных, - СертификатКриптографии); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОписаниеДанныхСертификата(СертификатОписаниеДанных, + ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии)); СохраненныеСвойства = СохраненныеСвойстваСертификата(Отпечаток, СертификатАдрес, СертификатПараметрыРеквизитов); @@ -639,6 +643,7 @@ ПерейтиКВыборуТекущегоСертификатаПослеВыгрузкиСертификата(РезультатПоиска.Сертификат.Сертификат, Контекст); КонецПроцедуры + // Продолжение процедуры ПерейтиКВыборуТекущегоСертификата. &НаКлиенте Процедура ПерейтиКВыборуТекущегоСертификатаПослеВыгрузкиСертификата(ВыгруженныеДанные, Контекст) Экспорт @@ -647,8 +652,8 @@ СертификатОтпечаток = Контекст.ТекущиеДанные.Отпечаток; - ЭлектроннаяПодписьКлиентСервер.ЗаполнитьОписаниеДанныхСертификата(СертификатОписаниеДанных, - Контекст.СертификатКриптографии); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОписаниеДанныхСертификата(СертификатОписаниеДанных, + ЭлектроннаяПодписьКлиент.СвойстваСертификата(Контекст.СертификатКриптографии)); Контекст.СохраненныеСвойства = СохраненныеСвойстваСертификата(Контекст.ТекущиеДанные.Отпечаток, СертификатАдрес, СертификатПараметрыРеквизитов); @@ -781,7 +786,7 @@ Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", ""); Контекст.ОшибкаНаКлиенте.Вставить("Ошибки", Новый Массив); - Контекст.Вставить("ОписанияПрограмм", ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ОписанияПрограмм); + Контекст.Вставить("ОписанияПрограмм", ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм); Контекст.Вставить("Индекс", -1); ПроверитьСертификатЦиклНачало(Контекст); @@ -959,7 +964,7 @@ ОписаниеОшибки = ""; - ОписанияПрограмм = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ОписанияПрограмм; + ОписанияПрограмм = ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм; Для каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл ОшибкаМенеджера = Новый Структура; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Module.bsl index 0607d8019..9f87107c5 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,13 +15,11 @@ Возврат; КонецЕсли; - ОбщиеНастройки = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); - - Если ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно + Если ЭлектроннаяПодпись.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно И Не Параметры.СкрытьЗаявление Тогда СпособДобавленияСертификата = "ЗаявлениеНаВыпускСертификата"; - Если Не ОбщиеНастройки.ИспользоватьШифрование Тогда + Если Не ЭлектроннаяПодпись.ИспользоватьШифрование() Тогда Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаСпособДобавленияСертификатаБезШифрования; КонецЕсли; Иначе @@ -27,13 +32,13 @@ Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаНазначение; КонецЕсли; - Если Не ОбщиеНастройки.ИспользоватьЭлектронныеПодписи Тогда + Если Не ЭлектроннаяПодпись.ИспользоватьЭлектронныеПодписи() Тогда Назначение = "ДляШифрованияИРасшифровки"; Если Не ЗначениеЗаполнено(СпособДобавленияСертификата) Тогда Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаНазначениеБезЭлектроннойПодписи; КонецЕсли; - ИначеЕсли Не ОбщиеНастройки.ИспользоватьШифрование + ИначеЕсли Не ЭлектроннаяПодпись.ИспользоватьШифрование() И Не ЗначениеЗаполнено(СпособДобавленияСертификата) Тогда Отказ = Истина; Возврат; @@ -81,7 +86,7 @@ &НаКлиенте Процедура Далее(Команда) - Если ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ИспользоватьЭлектронныеПодписи Тогда + Если ЭлектроннаяПодписьКлиент.ИспользоватьЭлектронныеПодписи() Тогда Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаНазначение; Назначение = "ДляПодписанияШифрованияИРасшифровки"; Иначе diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl index aa2d575a8..3e76ea912 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -22,10 +30,13 @@ КонецЕсли; ПоказатьСтраницуУточнениеСвойствСертификата(ЭтотОбъект, - СертификатКриптографии, СертификатКриптографии.Выгрузить()); + СертификатКриптографии, + СертификатКриптографии.Выгрузить(), + ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии)); + Элементы.Назад.Видимость = Ложь; Иначе - Если ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда Элементы.ГруппаСертификаты.Заголовок = НСтр("ru = 'Личные сертификаты на компьютере и сервере'"); КонецЕсли; @@ -235,7 +246,10 @@ &НаКлиенте Процедура ДалееПослеВыгрузкиСертификата(ВыгруженныеДанные, СертификатКриптографии) Экспорт - ПоказатьСтраницуУточнениеСвойствСертификата(ЭтотОбъект, СертификатКриптографии, ВыгруженныеДанные); + ПоказатьСтраницуУточнениеСвойствСертификата(ЭтотОбъект, + СертификатКриптографии, + ВыгруженныеДанные, + ЭлектроннаяПодписьКлиент.СвойстваСертификата(СертификатКриптографии)); КонецПроцедуры @@ -320,7 +334,7 @@ #Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста -Процедура ПоказатьСтраницуУточнениеСвойствСертификата(Форма, СертификатКриптографии, ДанныеСертификата) +Процедура ПоказатьСтраницуУточнениеСвойствСертификата(Форма, СертификатКриптографии, ДанныеСертификата, СвойстваСертификата) Элементы = Форма.Элементы; @@ -328,8 +342,8 @@ Форма.СертификатОтпечаток = Base64Строка(СертификатКриптографии.Отпечаток); - ЭлектроннаяПодписьКлиентСервер.ЗаполнитьОписаниеДанныхСертификата( - Форма.СертификатОписаниеДанных, СертификатКриптографии); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОписаниеДанныхСертификата( + Форма.СертификатОписаниеДанных, СвойстваСертификата); СохраненныеСвойства = СохраненныеСвойстваСертификата( Форма.СертификатОтпечаток, diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl index ab86bb457..ede81067d 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -9,9 +17,6 @@ Сертификат = Параметры.Сертификат; - СертификатДействителенДо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - Сертификат, "ДействителенДо"); - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl index c05874745..538e6ee68 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -25,9 +33,11 @@ #Область СлужебныеПроцедурыИФункции +// АПК:78-выкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. &НаКлиенте Процедура ОткрытьНовуюФорму(ВидФормы, СерверныеПараметры, КлиентскиеПараметры = Неопределено, ОбработкаЗавершения = Неопределено, Знач ВладелецНовойФормы = Неопределено) Экспорт +// АПК:78-вкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. ВидыФорм = ",ПодписаниеДанных,ШифрованиеДанных,РасшифровкаДанных, @@ -43,8 +53,6 @@ ВладелецНовойФормы = Новый УникальныйИдентификатор; КонецЕсли; - ОбработкаПродолжения = Новый ОписаниеОповещения("ОткрытьНовуюФорму", ЭтотОбъект); - ИмяНовойФормы = "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Форма." + ВидФормы; Контекст = Новый Структура; @@ -153,7 +161,7 @@ КонецПроцедуры &НаКлиенте -Процедура УстановитьПарольСертификата(СертификатСсылка, Пароль, ПояснениеПароля) Экспорт +Процедура УстановитьПарольСертификата(СертификатСсылка, Пароль, ПояснениеПароля) Экспорт // АПК:78 - исключение для безопасного хранения паролей. УстановленныеПароли = ОбщиеВнутренниеДанные.Получить("УстановленныеПароли"); ПоясненияУстановленныхПаролей = ОбщиеВнутренниеДанные.Получить("ПоясненияУстановленныхПаролей"); @@ -165,10 +173,7 @@ ОбщиеВнутренниеДанные.Вставить("ПоясненияУстановленныхПаролей", ПоясненияУстановленныхПаролей); КонецЕсли; - ОбработкаПродолжения = Новый ОписаниеОповещения("УстановитьПарольСертификата", ЭтотОбъект); - УстановленныеПароли.Вставить(СертификатСсылка, ?(Пароль = Неопределено, Пароль, Строка(Пароль))); - Пароль = Неопределено; НовоеПояснениеПароля = Новый Структура; НовоеПояснениеПароля.Вставить("ТекстПояснения", ""); diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form index 73ab32c99..c6d5c1130 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Form.form @@ -1191,6 +1191,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ссылка</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Module.bsl index 39b12558a..db393d0e1 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl index 5685a3d5d..87ebc5de8 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -316,8 +324,10 @@ КонецПроцедуры +// АПК:78-выкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. &НаКлиенте Процедура ВыполнитьПодписание(КлиентскиеПараметры, ОбработкаЗавершения) Экспорт +// АПК:78-вкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. ЭлектроннаяПодписьСлужебныйКлиент.ОбновитьФормуПередПовторнымИспользованием(ЭтотОбъект, КлиентскиеПараметры); @@ -326,7 +336,6 @@ ТекущийСписокПредставлений = КлиентскиеПараметры.ТекущийСписокПредставлений; ОбработкаПослеПредупреждения = ОбработкаЗавершения; - ОбработкаПродолжения = Новый ОписаниеОповещения("ВыполнитьПодписание", ЭтотОбъект); Контекст = Новый Структура("ОбработкаЗавершения", ОбработкаЗавершения); ПодписатьДанные(Новый ОписаниеОповещения("ВыполнитьПодписаниеЗавершение", ЭтотОбъект, Контекст)); @@ -464,7 +473,7 @@ Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); - Если ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда Если ЗначениеЗаполнено(СертификатНаСервереОписаниеОшибки) Тогда Результат = Новый Структура("Ошибка", СертификатНаСервереОписаниеОшибки); СертификатНаСервереОписаниеОшибки = Новый Структура; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl index d27ffe554..dcbce2c9b 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -243,13 +251,14 @@ #Область СлужебныеПроцедурыИФункции +// АПК:78-выкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. &НаКлиенте Процедура ПродолжитьОткрытие(Оповещение, ОбщиеВнутренниеДанные, ВходящиеКлиентскиеПараметры) Экспорт +// АПК:78-вкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. ВнутренниеДанные = ОбщиеВнутренниеДанные; КлиентскиеПараметры = ВходящиеКлиентскиеПараметры; КлиентскиеПараметры.Вставить("Результат"); - ОбработкаПродолжения = Новый ОписаниеОповещения("ПродолжитьОткрытие", ЭтотОбъект); ДополнительныеПараметры = Новый Структура; ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, @@ -312,10 +321,8 @@ &НаСервере Процедура ОбновитьВидимостьНаСервере() - ПроверятьНаСервере = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере; - СоздаватьНаСервере = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере; - - ОперацииНаСервере = ПроверятьНаСервере Или СоздаватьНаСервере; + ОперацииНаСервере = ЭлектроннаяПодпись.ПроверятьЭлектронныеПодписиНаСервере() + Или ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере(); Элементы.НаСервереКартинка.Видимость = ОперацииНаСервере; Элементы.ЗаконныйСертификатНаСервереКартинка.Видимость = ОперацииНаСервере; @@ -951,7 +958,7 @@ КонецПопытки; Если ПараметрыВыполнения.ОжидатьПродолжения <> Истина Тогда - ПроверитьНаСторонеКлиентаПослеДополнительнойПроверки(, Контекст); + ПроверитьНаСторонеКлиентаПослеДополнительнойПроверки(Неопределено, Контекст); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl index 8acf35c78..3013eb75b 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl index c5ae53198..587ad7f37 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -353,8 +361,10 @@ КонецПроцедуры +// АПК:78-выкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. &НаКлиенте Процедура ВыполнитьРасшифровку(КлиентскиеПараметры, ОбработкаЗавершения) Экспорт +// АПК:78-вкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. ЭлектроннаяПодписьСлужебныйКлиент.ОбновитьФормуПередПовторнымИспользованием(ЭтотОбъект, КлиентскиеПараметры); @@ -363,7 +373,6 @@ ТекущийСписокПредставлений = КлиентскиеПараметры.ТекущийСписокПредставлений; ОбработкаПослеПредупреждения = ОбработкаЗавершения; - ОбработкаПродолжения = Новый ОписаниеОповещения("ВыполнитьРасшифровку", ЭтотОбъект); Контекст = Новый Структура("ОбработкаЗавершения", ОбработкаЗавершения); РасшифроватьДанные(Новый ОписаниеОповещения("ВыполнитьРасшифровкуЗавершение", ЭтотОбъект, Контекст)); @@ -475,7 +484,7 @@ ПараметрыВыполнения.Вставить("ЗначениеПароля", СвойстваПароля.Значение); Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); - Если ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда Если ЗначениеЗаполнено(СертификатНаСервереОписаниеОшибки) Тогда Результат = Новый Структура("Ошибка", СертификатНаСервереОписаниеОшибки); СертификатНаСервереОписаниеОшибки = Новый Структура; @@ -571,8 +580,8 @@ Если ОписаниеДанных.Свойство("Данные") Тогда ДобавитьОписаниеОбъекта(ОписаниеОбъектов, ОписаниеДанных); Иначе - Для каждого ЭлементДанных Из ОписаниеДанных.НаборДанных Цикл - ДобавитьОписаниеОбъекта(ОписаниеОбъектов, ОписаниеДанных); + Для Каждого ЭлементДанных Из ОписаниеДанных.НаборДанных Цикл + ДобавитьОписаниеОбъекта(ОписаниеОбъектов, ЭлементДанных); КонецЦикла; КонецЕсли; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form index 8f53603c3..c0f617b01 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Form.form @@ -500,6 +500,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ссылка</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl index 4c0dee16c..0728ae4b2 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -12,10 +19,8 @@ Параметры.Отбор.Свойство("Организация", Организация); - ОбщиеНастройки = ЭлектроннаяПодпись.ОбщиеНастройки(); - - Если Не ОбщиеНастройки.ИспользоватьШифрование - И Не ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно Тогда + Если Не ЭлектроннаяПодпись.ИспользоватьШифрование() + И Не ЭлектроннаяПодпись.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСоздать", "Заголовок", НСтр("ru = 'Добавить'")); @@ -91,10 +96,8 @@ &НаКлиенте Процедура ПриИзмененияИспользованияПодписанияИлиШифрования() - ОбщиеНастройки = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); - - Если ОбщиеНастройки.ИспользоватьШифрование - Или ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно Тогда + Если ЭлектроннаяПодписьКлиент.ИспользоватьШифрование() + Или ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСоздать", "Заголовок", НСтр("ru = 'Добавить...'")); diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html index 752287d71..6fffe9058 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html @@ -18,7 +18,7 @@ <ul><li> <div>Нажмите <img src="CommonPicture.СертификатКлюча"></img>, для того чтобы просмотреть <a href="CommonForm.Сертификат/Help">данные сертификата</a>.</div></li></ul><h3>Просмотр заявления</h3> <ul><li> -<div>Нажмите <img src="CommonPicture.ЗаявлениеНаВыпускСертификатаКлюча"></img>, для того чтобы просмотреть <a href="DataProcessor.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Form.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Help">заявление</a>, по которому был получен сертификат.</div></li></ul><h3>Выгрузка в файл</h3> +<div>Нажмите <img src="CommonPicture.ЗаявлениеНаВыпускСертификатаКлюча"></img>, для того чтобы просмотреть <a href="DataProcessor.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Form.Форма/Help">заявление</a>, по которому был получен сертификат.</div></li></ul><h3>Выгрузка в файл</h3> <ul><li> <div>Нажмите <strong>Сохранить в файл</strong>, укажите путь к папке для сохранения в файл.</div></li></ul><h3>Автозаполняемые реквизиты</h3> <ul><li> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl index 93705c1d6..9917d7667 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -20,7 +28,7 @@ "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"); ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПриСозданииНаСервере( Объект, ОткрытьЗаявление); - ИмяФормыЗаявления = "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"; + ИмяФормыЗаявления = "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.Форма"; ВозможноОткрытьЗаявление = Истина; КонецЕсли; @@ -93,7 +101,7 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле %1 не заполнено.'"), Элементы[ИмяРеквизита].Заголовок); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, ИмяРеквизита,, Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, ИмяРеквизита,, Отказ); КонецЦикла; КонецПроцедуры @@ -199,7 +207,8 @@ Иначе АдресСертификата = ПоместитьВоВременноеХранилище(ДвоичныеДанныеСертификата, УникальныйИдентификатор); КонецЕсли; - ЭлектроннаяПодписьКлиентСервер.ЗаполнитьОписаниеДанныхСертификата(ОписаниеДанныхСертификата, Сертификат); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОписаниеДанныхСертификата(ОписаниеДанныхСертификата, + ЭлектроннаяПодпись.СвойстваСертификата(Сертификат)); Иначе АдресСертификата = ""; Элементы.ПоказатьДанныеСертификата.Доступность = Ложь; @@ -209,7 +218,7 @@ Элементы.ФормаПоказатьАвтозаполняемыеРеквизиты.Пометка = Истина; Если ЗначениеЗаполнено(ДвоичныеДанныеСертификата) Тогда // Поддержка отображения основных свойств нестандартных сертификатов (система iBank2). - ЭлектроннаяПодписьКлиентСервер.ЗаполнитьОписаниеДанныхСертификата(ОписаниеДанныхСертификата, Объект); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОписаниеДанныхСертификата(ОписаниеДанныхСертификата, Объект); КонецЕсли; КонецЕсли; @@ -241,20 +250,20 @@ Возврат; // Сертификат = Неопределено. КонецЕсли; - СвойстваСубъекта = ЭлектроннаяПодписьКлиентСервер.СвойстваСубъектаСертификата(Сертификат); + СвойстваСубъекта = ЭлектроннаяПодпись.СвойстваСубъектаСертификата(Сертификат); Если СвойстваСубъекта.Фамилия <> Неопределено Тогда Элементы.Фамилия.ТолькоПросмотр = Истина; КонецЕсли; Если СвойстваСубъекта.Имя <> Неопределено Тогда Элементы.Имя.ТолькоПросмотр = Истина; КонецЕсли; - Если СвойстваСубъекта.Отчество <> Неопределено Тогда + Если СвойстваСубъекта.Свойство("Отчество") И СвойстваСубъекта.Отчество <> Неопределено Тогда Элементы.Отчество.ТолькоПросмотр = Истина; КонецЕсли; Если СвойстваСубъекта.Организация <> Неопределено Тогда Элементы.Фирма.ТолькоПросмотр = Истина; КонецЕсли; - Если СвойстваСубъекта.Должность <> Неопределено Тогда + Если СвойстваСубъекта.Свойство("Должность") И СвойстваСубъекта.Должность <> Неопределено Тогда Элементы.Должность.ТолькоПросмотр = Истина; КонецЕсли; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl index f6eceef37..fd9392923 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -287,12 +295,12 @@ НоваяСтрока = ТаблицаСертификатов.Добавить(); Если ТипЗнч(ОписаниеСертификата) = Тип("ДвоичныеДанные") Тогда СертификатКриптографии = Новый СертификатКриптографии(ОписаниеСертификата); - СтруктураСертификата = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(СертификатКриптографии); - НоваяСтрока.Представление = СтруктураСертификата.Представление; - НоваяСтрока.КомуВыдан = СтруктураСертификата.КомуВыдан; - НоваяСтрока.Отпечаток = СтруктураСертификата.Отпечаток; + СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии); + НоваяСтрока.Представление = СвойстваСертификата.Представление; + НоваяСтрока.КомуВыдан = СвойстваСертификата.КомуВыдан; + НоваяСтрока.Отпечаток = СвойстваСертификата.Отпечаток; НоваяСтрока.Данные = ОписаниеСертификата; - Отпечатки.Добавить(СтруктураСертификата.Отпечаток); + Отпечатки.Добавить(СвойстваСертификата.Отпечаток); Иначе НоваяСтрока.Ссылка = ОписаниеСертификата; Ссылки.Добавить(ОписаниеСертификата); @@ -334,10 +342,10 @@ Выборка.Представление, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; - СтруктураСертификата= ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(СертификатКриптографии); + СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии); Строка.Отпечаток = Выборка.Отпечаток; Строка.Представление = Выборка.Представление; - Строка.КомуВыдан = СтруктураСертификата.КомуВыдан; + Строка.КомуВыдан = СвойстваСертификата.КомуВыдан; Строка.Данные = ДанныеСертификата; КонецЦикла; Строки = ТаблицаСертификатов.НайтиСтроки(Новый Структура("Отпечаток", Выборка.Отпечаток)); @@ -426,15 +434,15 @@ СертификатАдрес = ПоместитьВоВременноеХранилище(ДвоичныеДанныеСертификата, УникальныйИдентификатор); КонецЕсли; - ОбщиеНастройки = ЭлектроннаяПодпись.ОбщиеНастройки(); - Если Не ОбщиеНастройки.СоздаватьЭлектронныеПодписиНаСервере Тогда + Если Не ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда Возврат; КонецЕсли; СертификатКриптографии = Новый СертификатКриптографии(ПолучитьИзВременногоХранилища(СертификатАдрес)); ТестовыеДанные = ТестовыеДвоичныеДанные(); + ОписанияПрограмм = ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм; - Для Каждого ОписаниеПрограммы Из ОбщиеНастройки.ОписанияПрограмм Цикл + Для Каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("", Ложь, "", ОписаниеПрограммы.Ссылка); @@ -476,7 +484,7 @@ Возврат; КонецЕсли; - ОписанияПрограмм = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ОписанияПрограмм; + ОписанияПрограмм = ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм; Если ОписанияПрограмм = Неопределено Или ОписанияПрограмм.Количество() = 0 Тогда ЗаполнитьПрограммуШифрованияПослеЦикла(Контекст); @@ -663,8 +671,10 @@ КонецПроцедуры +// АПК:78-выкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. &НаКлиенте Процедура ВыполнитьШифрование(КлиентскиеПараметры, ОбработкаЗавершения) Экспорт +// АПК:78-вкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. ЭлектроннаяПодписьСлужебныйКлиент.ОбновитьФормуПередПовторнымИспользованием(ЭтотОбъект, КлиентскиеПараметры); @@ -673,7 +683,6 @@ ТекущийСписокПредставлений = КлиентскиеПараметры.ТекущийСписокПредставлений; ОбработкаПослеПредупреждения = ОбработкаЗавершения; - ОбработкаПродолжения = Новый ОписаниеОповещения("ВыполнитьШифрование", ЭтотОбъект); Контекст = Новый Структура("ОбработкаЗавершения", ОбработкаЗавершения); ЗашифроватьДанные(Новый ОписаниеОповещения("ВыполнитьШифрованиеЗавершение", ЭтотОбъект, Контекст)); @@ -779,7 +788,7 @@ ПараметрыВыполнения.Вставить("ИдентификаторФормы", Контекст.ИдентификаторФормы); Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); - Если ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда Если ЗначениеЗаполнено(СертификатНаСервереОписаниеОшибки) Тогда Результат = Новый Структура("Ошибка", СертификатНаСервереОписаниеОшибки); СертификатНаСервереОписаниеОшибки = Новый Структура; @@ -911,7 +920,7 @@ Выборка.Наименование, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; - СвойстваСертификата = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(СертификатКриптографии); + СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии); Свойства = Новый Структура; Свойства.Вставить("Отпечаток", СвойстваСертификата.Отпечаток); @@ -933,8 +942,8 @@ Если ОписаниеДанных.Свойство("Данные") Тогда ДобавитьОписаниеОбъекта(ОписаниеОбъектов, ОписаниеДанных); Иначе - Для каждого ЭлементДанных Из ОписаниеДанных.НаборДанных Цикл - ДобавитьОписаниеОбъекта(ОписаниеОбъектов, ОписаниеДанных); + Для Каждого ЭлементДанных Из ОписаниеДанных.НаборДанных Цикл + ДобавитьОписаниеОбъекта(ОписаниеОбъектов, ЭлементДанных); КонецЦикла; КонецЕсли; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl index a30d0d7bd..9762fe78e 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -51,8 +59,6 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -66,3 +72,5 @@ КонецПроцедуры #КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ObjectModule.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ObjectModule.bsl index 410a3b8a9..38f7c6e3f 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ObjectModule.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -10,4 +18,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl index f7ef0795d..fd64c9f36 100644 --- a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo index e7e2df335..f287091cb 100644 --- a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo @@ -329,6 +329,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> <attributes uuid="8eae0c79-288b-4773-90bb-49299ad45628"> @@ -476,6 +477,7 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> <fillValue xsi:type="core:UndefinedValue"/> <indexing>Index</indexing> <dataHistory>Use</dataHistory> diff --git a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl index c9387d510..069bb58e8 100644 --- a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаЭлемента/Module.bsl index 05f7b4ff1..0b8acd0ce 100644 --- a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/СообщенияОбластейДанных/ObjectModule.bsl b/SSL/src/Catalogs/СообщенияОбластейДанных/ObjectModule.bsl index f51f453f3..98c71f7d2 100644 --- a/SSL/src/Catalogs/СообщенияОбластейДанных/ObjectModule.bsl +++ b/SSL/src/Catalogs/СообщенияОбластейДанных/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -22,4 +30,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl index c515317d2..a006875e8 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -54,7 +61,7 @@ Если ЭтоСеансСУстановленнымиЗначениямиРазделителей Тогда ТекстСообщения = НСтр("ru = 'Обработка сообщений возможна только в неразделенном сеансе администратора сервиса.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); Возврат; КонецЕсли; diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Module.bsl index 05f7b4ff1..0b8acd0ce 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl b/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl index 3d53198c6..f1502d5a7 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl +++ b/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl b/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl index f51f453f3..98c71f7d2 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl +++ b/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -22,4 +30,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl index 8c2aa6ade..7990cf8d4 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -46,24 +53,7 @@ Элементы.КлассификаторКонтекстноеМенюИзменить.Видимость = ЕстьПравоРедактироватьСтраны; Элементы.КлассификаторИзменить.Видимость = ЕстьПравоРедактироватьСтраны; Элементы.Классификатор.ТолькоПросмотр = НЕ ЕстьПравоРедактироватьСтраны; - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Элементы.Переместить(Элементы.КлассификаторИзменить, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.КлассификаторГруппаВывестиСписок, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.КлассификаторГруппаПоиск, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.КлассификаторСортироватьСписокПоВозрастанию, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.КлассификаторСортироватьСписокПоУбыванию, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.КлассификаторСправка, Элементы.ФормаКоманднаяПанель); - - Элементы.КлассификаторГруппаВывестиСписок.Вид = ВидГруппыФормы.ГруппаКнопок; - Элементы.КлассификаторГруппаПоиск.Вид = ВидГруппыФормы.ГруппаКнопок; - Элементы.Классификатор.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; - - КонецЕсли; - + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form index 4fda09baf..23b02a03a 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form @@ -309,218 +309,6 @@ <autoCommandBar> <name>СписокКоманднаяПанель</name> <id>3</id> - <items xsi:type="form:Button"> - <name>СписокВыбрать</name> - <id>16</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>СписокВыбратьExtendedTooltip</name> - <id>21</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Item.Список.StandardCommand.Choose</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:FormGroup"> - <name>Создать</name> - <id>47</id> - <items xsi:type="form:Button"> - <name>СписокСоздать</name> - <id>55</id> - <title> - <key>ru</key> - <value>Добавить вручную</value> - - true - true - - true - - - СписокСоздатьРасширеннаяПодсказка - 56 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокВыбратьИзКлассификатора - 53 - true - true - - true - - - СписокВыбратьИзКлассификатораРасширеннаяПодсказка - 54 - Label - true - true - - Left - - - Form.Command.ВыбратьИзКлассификатора - Auto - true - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Создать</value> - - - СоздатьРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - - - СписокКоманды - 15 - true - true - - true - - - <key>ru</key> - <value>Команды списка</value> - - - СписокКомандыExtendedTooltip - 22 - Label - true - true - - Left - - - - Item.Список - - - - СписокКлассификатор - 17 - true - true - - true - - - СписокКлассификаторExtendedTooltip - 23 - Label - true - true - - Left - - - Form.Command.ОткрытьКлассификатор - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокИзменитьФорму - 19 - true - true - - true - - - СписокИзменитьФормуExtendedTooltip - 25 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - - СписокСправка - 20 - true - true - - true - - - СписокСправкаExtendedTooltip - 26 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - Left @@ -653,26 +441,20 @@ ГруппаПользовательскихНастроек
      - None - false ФормаКоманднаяПанель -1 - - ГруппаДобавитьМобильныйКлиент - 60 + + СписокВыбрать + 16 true true true - - <key>ru</key> - <value>Добавить</value> - - ГруппаДобавитьМобильныйКлиентРасширеннаяПодсказка - 61 + СписокВыбратьExtendedTooltip + 21 Label true true @@ -680,17 +462,201 @@ Left - Popup - - - StdPicture.CreateListItem - - Picture - Normal + Form.Item.Список.StandardCommand.Choose + Normal + Auto + true + true + UserCmds + Auto + + + Создать + 47 + + СписокСоздать + 55 + + <key>ru</key> + <value>Добавить вручную</value> + + true + true + + true + + + СписокСоздатьРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокВыбратьИзКлассификатора + 53 + true + true + + true + + + СписокВыбратьИзКлассификатораРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Command.ВыбратьИзКлассификатора + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Создать</value> + + + СоздатьРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + + + СписокКоманды + 15 + true + true + + true + + + <key>ru</key> + <value>Команды списка</value> + + + СписокКомандыExtendedTooltip + 22 + Label + true + true + + Left + + + + Item.Список + + СписокКлассификатор + 17 + true + true + + true + + + СписокКлассификаторExtendedTooltip + 23 + Label + true + true + + Left + + + Form.Command.ОткрытьКлассификатор + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокИзменитьФорму + 19 + true + true + + true + + + СписокИзменитьФормуExtendedTooltip + 25 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + СписокСправка + 20 + true + true + + true + + + СписокСправкаExtendedTooltip + 26 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left - true NotificationProcessing diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl index e60a01855..3535e903f 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы // @@ -61,28 +68,6 @@ КонецЕсли; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Для каждого ЭлементФормы Из Элементы.СписокКоманднаяПанель.ПодчиненныеЭлементы Цикл - - Элементы.Переместить(ЭлементФормы, Элементы.ФормаКоманднаяПанель); - - КонецЦикла; - - Элементы.Переместить(Элементы.СписокКлассификатор, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.СписокВыбратьИзКлассификатора, Элементы.ГруппаДобавитьМобильныйКлиент); - Элементы.Переместить(Элементы.СписокСоздать, Элементы.ГруппаДобавитьМобильныйКлиент); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СписокСоздать", "Заголовок", НСтр("ru ='Новый...'")); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СписокСоздать", "ТолькоВоВсехДействиях", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СписокСоздать", "Картинка", БиблиотекаКартинок.Пустая); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СписокВыбратьИзКлассификатора", "Заголовок", НСтр("ru ='Из классификатора'")); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СписокВыбратьИзКлассификатора", "Картинка", БиблиотекаКартинок.Пустая); - - КонецЕсли; - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl index 8e49f2f75..165a7ca4a 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы // diff --git a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl index 572d0bcef..a8aaeb813 100644 --- a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -25,8 +33,6 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) @@ -44,14 +50,12 @@ Возврат; КонецЕсли; - УправлениеКонтактнойИнформациейСлужебныйВызовСервера.ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + УправлениеКонтактнойИнформациейСлужебный.ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) КонецПроцедуры #КонецОбласти -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - #Область СлужебныйПрограммныйИнтерфейс // Определяет данные страны по справочнику стран или классификатору ОКСМ. diff --git a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl index a213efdb6..f1dc04907 100644 --- a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -17,7 +25,7 @@ Существующий = СуществующийЭлемент(); Если Существующий<>Неопределено Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Существующий.ОписаниеОшибки,, "Объект.Наименование"); + ОбщегоНазначения.СообщитьПользователю(Существующий.ОписаниеОшибки,, "Объект.Наименование"); КонецЕсли; КонецПроцедуры @@ -95,4 +103,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl b/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl index 14daa517a..ec9205929 100644 --- a/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form index c7dc6f6b6..5f248f43f 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form @@ -143,6 +143,40 @@ true + + Ссылка + 66 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 67 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl index 855ec9407..bd9ea6aed 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl index c330fce11..5f821667b 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиКомандФормы diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl index 2ced5405a..955dcc809 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -106,8 +114,7 @@ &НаКлиенте Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, - ЭтотОбъект, "Объект.Комментарий"); + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект); КонецПроцедуры @@ -135,7 +142,7 @@ ТекстСообщения = НСтр("ru = 'Данные выбранного типа не могут быть использованы в этой форме. |Выберите другой тип данных.'"); Поле = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("НастройкиОбмена[%1].УзелИнформационнойБазы", Элементы.СоставРасписания.ТекущиеДанные.НомерСтроки-1); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , Поле, "Объект"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , Поле, "Объект"); СтандартнаяОбработка = Ложь; КонецЕсли; diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl index f70582963..3cd25f64c 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -27,7 +35,10 @@ #Область СлужебныеПроцедурыИФункции -Процедура СоздатьСценарий(УзелИнформационнойБазы, Расписание = Неопределено) Экспорт +Процедура СоздатьСценарий( + УзелИнформационнойБазы, + Расписание = Неопределено, + ИспользоватьРегламентноеЗадание = Истина) Экспорт Отказ = Ложь; @@ -41,7 +52,7 @@ // Заполняем реквизиты шапки СценарийОбменаДанными.Наименование = Наименование; - СценарийОбменаДанными.ИспользоватьРегламентноеЗадание = Истина; + СценарийОбменаДанными.ИспользоватьРегламентноеЗадание = ИспользоватьРегламентноеЗадание; // Создаем регламентное задание. ОбновитьДанныеРегламентногоЗадания(Отказ, Расписание, СценарийОбменаДанными); @@ -100,7 +111,7 @@ // Функция ПолучитьРасписаниеВыполненияОбменаДанными(НастройкаВыполненияОбмена) Экспорт - РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(НастройкаВыполненияОбмена.РегламентноеЗаданиеGUID); + РегламентноеЗаданиеОбъект = РегламентноеЗаданиеПоИдентификатору(НастройкаВыполненияОбмена.РегламентноеЗаданиеGUID); Если РегламентноеЗаданиеОбъект <> Неопределено Тогда @@ -138,7 +149,7 @@ Функция СоздатьРегламентноеЗаданиеПриНеобходимости(Отказ, ТекущийОбъект) - РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(ТекущийОбъект.РегламентноеЗаданиеGUID); + РегламентноеЗаданиеОбъект = РегламентноеЗаданиеПоИдентификатору(ТекущийОбъект.РегламентноеЗаданиеGUID); // При необходимости создаем регламентное задание. Если РегламентноеЗаданиеОбъект = Неопределено Тогда @@ -201,6 +212,35 @@ КонецПроцедуры +// Возвращает регламентное задание по GUID. +// +// Параметры: +// УникальныйНомерЗадания - Строка - строка с GUID регламентного задания. +// +// Возвращаемое значение: +// Неопределено - если поиск регламентного задания по GUID не дал результатов, или +// РегламентноеЗадание - найденное по GUID регламентное задание. +// +Функция РегламентноеЗаданиеПоИдентификатору(Знач УникальныйНомерЗадания) Экспорт + + Если ПустаяСтрока(УникальныйНомерЗадания) Тогда + Возврат Неопределено; + КонецЕсли; + + Отбор = Новый Структура; + Отбор.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор(УникальныйНомерЗадания)); + + УстановитьПривилегированныйРежим(Истина); + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); + + Если Задания.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат Задания[0]; + +КонецФункции + // // Удаляет узел из всех сценариев обменов данными. diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl index 3da842c25..098750c06 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -67,7 +75,7 @@ УстановитьПривилегированныйРежим(Истина); // Определяем регламентное задание. - РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(РегламентноеЗаданиеGUID); + РегламентноеЗаданиеОбъект = Справочники.СценарииОбменовДанными.РегламентноеЗаданиеПоИдентификатору(РегламентноеЗаданиеGUID); Если РегламентноеЗаданиеОбъект <> Неопределено Тогда @@ -85,4 +93,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl index abfeb8fe5..ce85a0ebc 100644 --- a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ТелефонныйЗвонокПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ТелефонныйЗвонокПрисоединенныеФайлы.mdo index f99b71499..3a5e18cd4 100644 --- a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ТелефонныйЗвонокПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ТелефонныйЗвонокПрисоединенныеФайлы.mdo @@ -477,6 +477,7 @@
      + ShowError Index Use diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form index 7217d5565..384b6ec72 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Form.form @@ -105,6 +105,7 @@ UsualGroup Auto + NormalSeparation true true Auto @@ -179,6 +180,7 @@ true Label + true true false @@ -269,6 +271,7 @@ ПутьКПапкеДляКопирования + None OnChange ПутьКПапкеДляКопированияПриИзменении @@ -299,7 +302,7 @@ StartChoice ПутьКПапкеДляКопированияНачалоВыбора - 60 + true true true true @@ -543,7 +546,7 @@ СкопироватьФайлыПередУдалением <key>ru</key> - <value>Скопировать файлы перед удалением</value> + <value>Скопировать файлы перед удалением в папку:</value> 6 diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl index 54b7cd155..77e9890ca 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -17,6 +25,10 @@ СкопироватьФайлыПередУдалением = Ложь; Элементы.ПутьКПапкеДляКопирования.Доступность = Ложь; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -39,38 +51,30 @@ СтандартнаяОбработка = Ложь; - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Новый ОписаниеОповещения("ПодключениеРасширенияРаботыСФайламиВыборФайлаЗавершение", ЭтотОбъект), , Ложь); - -КонецПроцедуры - -&НаКлиенте -Процедура ПодключениеРасширенияРаботыСФайламиВыборФайлаЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт - - Если Не РасширениеПодключено Тогда - Возврат; - КонецЕсли; - - Режим = РежимДиалогаВыбораФайла.ВыборКаталога; - ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); - ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - ДиалогОткрытияФайла.Каталог = ПутьКПапкеДляКопирования; + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + ДиалогОткрытияФайла.ПолноеИмяФайла = ""; + ДиалогОткрытияФайла.Каталог = ПутьКПапкеДляКопирования; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; - ДиалогОткрытияФайла.Заголовок = Заголовок; + ДиалогОткрытияФайла.Заголовок = Заголовок; - ДиалогОткрытияФайла.Показать(Новый ОписаниеОповещения("ПутьКПапкеДляКопированияНачалоВыбораЗавершение", ЭтотОбъект, Новый Структура("ДиалогОткрытияФайла", ДиалогОткрытияФайла))); + Контекст = Новый Структура("ДиалогОткрытияФайла", ДиалогОткрытияФайла); + + ОписаниеОповещенияДиалогаВыбора = Новый ОписаниеОповещения( + "ПутьКПапкеДляКопированияНачалоВыбораЗавершение", ЭтотОбъект, Контекст); + ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещенияДиалогаВыбора, ДиалогОткрытияФайла); КонецПроцедуры &НаКлиенте -Процедура ПутьКПапкеДляКопированияНачалоВыбораЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт +Процедура ПутьКПапкеДляКопированияНачалоВыбораЗавершение(ВыбранныеФайлы, Контекст) Экспорт - ДиалогОткрытияФайла = ДополнительныеПараметры.ДиалогОткрытияФайла; + ДиалогОткрытияФайла = Контекст.ДиалогОткрытияФайла; Если ВыбранныеФайлы = Неопределено Тогда Элементы.ФормаУдалитьЛишниеФайлы.Доступность = Ложь; Иначе - ПутьКПапкеДляКопирования = ДиалогОткрытияФайла.Каталог; - ПутьКПапкеДляКопирования = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКПапкеДляКопирования); + ПутьКПапкеДляКопирования = ДиалогОткрытияФайла.Каталог; + ПутьКПапкеДляКопирования = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКПапкеДляКопирования); Элементы.ФормаУдалитьЛишниеФайлы.Доступность = ЗначениеЗаполнено(ПутьКПапкеДляКопирования); КонецЕсли; @@ -114,7 +118,9 @@ Возврат; КонецЕсли; - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Новый ОписаниеОповещения("ПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект), , Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами( + Новый ОписаниеОповещения("ПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект),, + Ложь); КонецПроцедуры @@ -177,7 +183,6 @@ ТекущийФайл = ЛишниеФайлы.Получить(0); Иначе - СтрокиФайлов = ЛишниеФайлы.НайтиСтроки(Новый Структура("Имя", ТекущийФайл.Имя)); ИндексТекущегоФайла = ЛишниеФайлы.Индекс(ТекущийФайл); Если ИндексТекущегоФайла = ЛишниеФайлы.Количество() - 1 Тогда ПоследняяИтерация = Истина; @@ -187,7 +192,6 @@ КонецЕсли; - ИмяТекущегоФайла = ТекущийФайл.Имя; ПолноеИмяТекущегоФайла = ТекущийФайл.ПолноеИмя; КаталогДляКопирования = ПутьКПапкеДляКопирования + ПутьДня + ПолучитьРазделительПути(); @@ -463,7 +467,7 @@ |%1'"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , "ПутьКПапкеДляКопирования"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , , "ПутьКПапкеДляКопирования"); ВыполнитьОбработкуОповещения(ИсходноеОповещение, Ложь); @@ -472,7 +476,7 @@ &НаСервере Процедура ОбработатьСообщениеОбОшибке(ИмяФайла, ИнформацияОбОшибке) - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка удаления лишних файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка удаления лишних файлов'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При удалении файла с диска diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form index e5555091f..726dbfe0a 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Form.form @@ -266,9 +266,11 @@ ВертикальнаяГруппа1 56 + VeryHigh СписокНаименование 4 + VeryHigh true true @@ -307,6 +309,7 @@ СписокКомментарий 10 + VeryLow true true @@ -374,6 +377,7 @@ СписокПорядокЗаполнения 6 + VeryHigh true true @@ -411,6 +415,7 @@ СписокМаксимальныйРазмер 12 + VeryLow true true @@ -477,6 +482,7 @@ СписокПолныйПутьWindows 14 + Usual <key>ru</key> <value>Полный путь Microsoft Windows</value> @@ -518,6 +524,7 @@ <items xsi:type="form:FormField"> <name>СписокПолныйПутьLinux</name> <id>16</id> + <displayImportance>Usual</displayImportance> <title> <key>ru</key> <value>Полный путь Linux</value> @@ -760,6 +767,7 @@ <searchStringLocation>None</searchStringLocation> <viewStatusLocation>None</viewStatusLocation> <searchControlLocation>None</searchControlLocation> + <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> @@ -794,6 +802,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Список</name> <id>1</id> diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl index ec26bdc37..a8fa052f1 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -9,12 +16,9 @@ КонецЕсли; Элементы.ПеренестиВсеФайлыВТома.Видимость = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами"); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.КоманднаяПанель, Элементы.ФормаКоманднаяПанель); - - Элементы.КоманднаяПанель.Вид = ВидГруппыФормы.ГруппаКнопок; - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.СписокКомментарий.Видимость = Ложь; + Элементы.СписокМаксимальныйРазмер.Видимость = Ложь; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form index c0d872118..b708ecf59 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form @@ -35,6 +35,7 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> <chooseType>true</chooseType> @@ -168,6 +169,8 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> + <width>60</width> + <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> <chooseType>true</chooseType> @@ -221,6 +224,8 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> + <width>60</width> + <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> <chooseType>true</chooseType> diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl index b550b3c75..926c7fa81 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -23,7 +31,7 @@ Элементы.ПолныйПутьWindows.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Отображать; - ТекущийРазмерВБайтах = РаботаСФайламиСлужебныйВызовСервера.ПодсчитатьРазмерФайловНаТоме( + ТекущийРазмерВБайтах = РаботаСФайламиСлужебный.ПодсчитатьРазмерФайловНаТоме( Объект.Ссылка); ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); @@ -32,21 +40,15 @@ КонецЕсли; КонецЕсли; - СистемнаяИнфо = Новый СистемнаяИнформация; - ТипПлатформыСервера = СистемнаяИнфо.ТипПлатформы; - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 - ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда Элементы.ПолныйПутьWindows.АвтоОтметкаНезаполненного = Истина; Иначе Элементы.ПолныйПутьLinux.АвтоОтметкаНезаполненного = Истина; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Отображение", ОтображениеКнопки.Картинка); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Наименование.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl index a2fe38855..b489b1b20 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl index 4884e87f3..724b8e065 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -17,26 +25,26 @@ Если Не НомерПорядкаУникален(ПорядокЗаполнения, Ссылка) Тогда ТекстОшибки = НСтр("ru = 'Порядок заполнения не уникален - в системе уже есть том с таким порядком'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПорядокЗаполнения", "Объект", Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "ПорядокЗаполнения", "Объект", Отказ); КонецЕсли; Если МаксимальныйРазмер <> 0 Тогда ТекущийРазмерВБайтах = 0; Если Не Ссылка.Пустая() Тогда - ТекущийРазмерВБайтах = РаботаСФайламиСлужебныйВызовСервера.ПодсчитатьРазмерФайловНаТоме(Ссылка); + ТекущийРазмерВБайтах = РаботаСФайламиСлужебный.ПодсчитатьРазмерФайловНаТоме(Ссылка); КонецЕсли; ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); Если МаксимальныйРазмер < ТекущийРазмер Тогда ТекстОшибки = НСтр("ru = 'Максимальный размер тома меньше, чем текущий размер'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "МаксимальныйРазмер", "Объект", Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "МаксимальныйРазмер", "Объект", Отказ); КонецЕсли; КонецЕсли; Если ПустаяСтрока(ПолныйПутьWindows) И ПустаяСтрока(ПолныйПутьLinux) Тогда ТекстОшибки = НСтр("ru = 'Не заполнен полный путь'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьLinux", "Объект", Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьLinux", "Объект", Отказ); Возврат; КонецЕсли; @@ -46,7 +54,7 @@ ИЛИ СтрНайти(ПолныйПутьWindows, ":") <> 0 ) Тогда ТекстОшибки = НСтр("ru = 'Путь к тому должен быть в формате UNC (\\servername\resource).'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); Возврат; КонецЕсли; КонецЕсли; @@ -55,11 +63,7 @@ ИмяПоляСПолнымПутем = ""; ПолныйПутьТома = ""; - СистемнаяИнфо = Новый СистемнаяИнформация; - ТипПлатформыСервера = СистемнаяИнфо.ТипПлатформы; - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 - ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда - + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда ПолныйПутьТома = ПолныйПутьWindows; ИмяПоляСПолнымПутем = "ПолныйПутьWindows"; Иначе @@ -95,7 +99,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( ТекстОшибки, , ИмяПоляСПолнымПутем, "Объект", Отказ); КонецПопытки; КонецЕсли; @@ -133,4 +137,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form index 42c96649c..15ac05915 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form @@ -14,6 +14,10 @@ <dataPath xsi:type="form:DataPath"> <segments>Объект.Description</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>НаименованиеПриИзменении</name> + </handlers> <extendedTooltip> <name>НаименованиеРасширеннаяПодсказка</name> <id>6</id> @@ -35,110 +39,158 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> - <width>60</width> <autoMaxWidth>true</autoMaxWidth> - <maxWidth>30</maxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> <textSize>Normal</textSize> + <inputHint> + <key>ru</key> + <value>Синхронизация файлов с облачным сервисом</value> + </inputHint> </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 - - true - 31 - true - true - true - true - true - true - - - ru - Яндекс.Диск - - - Яндекс.Диск - - - - - ru - 4shared.com - - - 4shared.com - - - - - ru - Box - - - Box - - - - - ru - DropBox (через dropdav.com) - - - Dropbox - - - Normal + + Сервис + 60 + + <key>ru</key> + <value>Сервис</value> + + true + true + + true + + + Сервис + + true + + OnChange + СервисПредставлениеПриИзменении + + + СервисРасширеннаяПодсказка + 62 + Label + true + true + + Left - + + + СервисКонтекстноеМеню + 61 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + + + ru + Яндекс.Диск + + + Яндекс.Диск + + + + + ru + 4shared.com + + + 4shared.com + + + + + ru + Box + + + Box + + + + + ru + DropBox (через dropdav.com) + + + Dropbox + + + Normal + + + + КорневаяПапка + 37 + true + true + + true + + + Объект.КорневаяПапка + + + ru + Имя папки, в которой хранятся синхронизированные файлы. Должна быть создана в облаке до выполнения синхронизации. + + Button + + КорневаяПапкаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + КорневаяПапкаКонтекстноеМеню + 38 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаЛогинПароль + 67 Логин 31 @@ -170,85 +222,6 @@ true Left true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Сервис логин</value> - - - ГруппаСервисЛогинРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаПапкаПароль - 29 - - КорневаяПапка - 37 - true - true - - true - - - Объект.КорневаяПапка - - - ru - Имя папки, в которой хранятся синхронизированные файлы, должна быть создана в облаке до выполнения синхронизации. - - Button - - КорневаяПапкаРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - - КорневаяПапкаКонтекстноеМеню - 38 - true - - InputField - Enter - true - Left - true true true @@ -294,6 +267,7 @@ true true + false true true true @@ -309,12 +283,11 @@ <key>ru</key> - <value>Логин и пароль</value> + <value>Логин, пароль</value> - false - ГруппаПапкаПарольРасширеннаяПодсказка - 30 + ГруппаЛогинПарольРасширеннаяПодсказка + 68 Label true true @@ -324,7 +297,7 @@ UsualGroup - Vertical + HorizontalIfPossible Auto true true @@ -353,7 +326,7 @@ UsualGroup - HorizontalIfPossible + Vertical Auto true true @@ -370,7 +343,6 @@ ru Наименование и настройки - false ГруппаНаименованиеИНастройкиРасширеннаяПодсказка 66 @@ -399,7 +371,7 @@ 52 <key>ru</key> - <value>Эта учетная запись %1</value> + <value>Автор новых и отредактированных файлов</value> true true @@ -409,7 +381,7 @@ ВКачествеАвтораФайлов - None + Top OnChange ВКачествеАвтораФайловПриИзменении @@ -543,11 +515,10 @@ Left true - 35 true true - false true + false true true true @@ -590,7 +561,7 @@ <key>ru</key> - <value>Автор файлов</value> + <value>Автор новых и отредактированных файлов</value> ГруппаАвторФайловРасширеннаяПодсказка @@ -606,10 +577,9 @@ Vertical Auto - WeakSeparation + NormalSeparation true true - auto Auto Auto @@ -732,12 +702,13 @@ true + true - СервисПредставление + Сервис <key>ru</key> - <value>Сервис представление</value> + <value>Сервис</value> 6 @@ -751,6 +722,24 @@ true ShowError + true + + + АвтоНаименование + + <key>ru</key> + <value>Авто наименование</value> + + 7 + + Boolean + + + true + + + true + ПроверитьНастройки diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl index 7608f42fc..a1264bf6c 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -12,28 +20,33 @@ КонецЕсли; Если Не ПустаяСтрока(Объект.Сервис) Тогда - Если Объект.Сервис = "https://webdav.yandex.ru" Тогда - СервисПредставление = "Яндекс.Диск" + Если Объект.Сервис = "https://webdav.yandex.com" + Или Объект.Сервис = "https://webdav.yandex.ru" Тогда + Сервис = НСтр("ru = 'Яндекс.Диск'"); ИначеЕсли Объект.Сервис = "https://webdav.4shared.com" Тогда - СервисПредставление = "4shared.com" + Сервис = "4shared.com" ИначеЕсли Объект.Сервис = "https://dav.box.com/dav" Тогда - СервисПредставление = "Box" + Сервис = "Box" ИначеЕсли Объект.Сервис = "https://dav.dropdav.com" Тогда - СервисПредставление = "Dropbox" + Сервис = "Dropbox" КонецЕсли; КонецЕсли; + АвтоНаименование = ПустаяСтрока(Объект.Наименование); Если Не ПустаяСтрока(Объект.Наименование) Тогда Элементы.ВКачествеАвтораФайлов.СписокВыбора[0].Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ВКачествеАвтораФайлов.Заголовок, "(" + Объект.Наименование + ")"); КонецЕсли; - // Обработчик подсистемы запрета редактирования реквизитов объектов Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда МодульЗапретРедактированияРеквизитовОбъектов = ОбщегоНазначения.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектов"); - МодульЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); + МодульЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Наименование.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли + КонецПроцедуры &НаСервере @@ -59,22 +72,39 @@ КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура НаименованиеПриИзменении(Элемент) + АвтоНаименование = ПустаяСтрока(Объект.Наименование); +КонецПроцедуры + &НаКлиенте Процедура СервисПредставлениеПриИзменении(Элемент) - Модифицированность = Истина; - - Если СервисПредставление = "Яндекс.Диск" Тогда - Объект.Сервис = "https://webdav.yandex.ru" - ИначеЕсли СервисПредставление = "4shared.com" Тогда + Если Сервис = "Яндекс.Диск" Тогда + Объект.Сервис = "https://webdav.yandex.com" + ИначеЕсли Сервис = "4shared.com" Тогда Объект.Сервис = "https://webdav.4shared.com" - ИначеЕсли СервисПредставление = "Box" Тогда + ИначеЕсли Сервис = "Box" Тогда Объект.Сервис = "https://dav.box.com/dav" - ИначеЕсли СервисПредставление = "Dropbox" Тогда + ИначеЕсли Сервис = "Dropbox" Тогда Объект.Сервис = "https://dav.dropdav.com" Иначе Объект.Сервис = ""; КонецЕсли; + + Если АвтоНаименование Тогда + Если ЗначениеЗаполнено(Объект.Сервис) Тогда + Объект.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Синхронизация с %1'"), + Элементы.Сервис.СписокВыбора.НайтиПоЗначению(Сервис).Представление); + Иначе + Объект.Наименование = ""; + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -102,10 +132,11 @@ Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить'")); Кнопки.Добавить(КодВозвратаДиалога.Отмена); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки); - Иначе - ПроверитьВозможностьСинхронизацииСОблачнымСервисом(); + Возврат; КонецЕсли; + ПроверитьВозможностьСинхронизацииСОблачнымСервисом(); + КонецПроцедуры &НаКлиенте @@ -146,21 +177,35 @@ РезультатТекст = СтруктураРезультата.РезультатТекст; Если СтруктураРезультата.Отказ Тогда + + ТекстПротокола = СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(РезультатПротокол); + Если Не ЗначениеЗаполнено(СтруктураРезультата.КодОшибки) Тогда + + РезультатДиагностики = ПроверитьСоединение(Объект.Сервис, ТекстПротокола); + ТекстОшибки = РезультатДиагностики.ОписаниеОшибки; + ТекстПротокола = РезультатДиагностики.ЖурналДиагностики; + + ИначеЕсли СтруктураРезультата.КодОшибки = 404 Тогда + ТекстОшибки = НСтр("ru = 'Проверьте правильность указанной корневой папки.'"); + ИначеЕсли СтруктураРезультата.КодОшибки = 401 Тогда + ТекстОшибки = НСтр("ru = 'Проверьте правильность введенных логина/пароля.'"); + Иначе + ТекстОшибки = НСтр("ru = 'Проверьте правильность введенных данных.'"); + КонецЕсли; + ПоказатьПредупреждение(Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Проверка параметров учетной записи завершилась с ошибками. - |Проверьте правильность задания корневой папки, логина и пароля. + |%1 | |Технические подробности: - | - |%1'"), - СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(РезультатПротокол)),, - НСтр("ru = 'Проверка учетной записи'")); + |%2'"), + ТекстОшибки, + ТекстПротокола)); Иначе ПоказатьПредупреждение(Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Проверка параметров учетной записи завершилась успешно. |%1'"), - РезультатТекст),, - НСтр("ru = 'Проверка учетной записи'")); + РезультатТекст)); КонецЕсли; КонецПроцедуры @@ -170,6 +215,21 @@ РаботаСФайламиСлужебный.ВыполнитьПроверкуПодключения(УчетнаяЗапись, СтруктураРезультата); КонецПроцедуры +&НаСервереБезКонтекста +Функция ПроверитьСоединение(Сервис, ТекстПротокола) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Возврат МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(Сервис); + Иначе + + Возврат Новый Структура("ОписаниеОшибки, ЖурналДиагностики", + НСтр("ru = 'Проверьте соединение с сетью Интернет.'"), ТекстПротокола); + + КонецЕсли; + +КонецФункции + &НаКлиенте Процедура ВКачествеАвтораФайловПользовательПриИзменении(Элемент) diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/ManagerModule.bsl index d8309122d..4b7b2c495 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl deleted file mode 100644 index 18eb8489f..000000000 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl +++ /dev/null @@ -1,10 +0,0 @@ -#Область ОбработчикиСобытий - -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - - РаботаСПочтовымиСообщениямиКлиент.ПроверитьУчетнуюЗапись(ПараметрКоманды); - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form index 224116d90..3fbc06a81 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form @@ -709,6 +709,7 @@ Left true + RadioButtons 1 @@ -2224,7 +2225,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto NormalSeparation true diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl index c1997ef11..04e8b14b9 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -187,7 +194,7 @@ ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи; КонецЕсли; ИначеЕсли ТекущаяСтраница = Элементы.ДополнительныеНастройки Тогда - Если ИспользоватьДляПолучения Или ТребуетсяВходНаСерверПередОтправкой Тогда + Если ИспользоватьДляОтправки Или ИспользоватьДляПолучения Тогда ПредыдущаяСтраница = Элементы.НастройкаСервераВходящейПочты; ИначеЕсли ИспользоватьДляОтправки Тогда ПредыдущаяСтраница = Элементы.НастройкаСервераИсходящейПочты; @@ -221,8 +228,7 @@ Кнопки = Новый СписокЗначений; Кнопки.Добавить("Закрыть", НСтр("ru = 'Закрыть'")); Кнопки.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Не закрывать'")); - ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Введенные данные не записаны. Закрыть форму?'"), Кнопки,, - КодВозвратаДиалога.Отмена, НСтр("ru = 'Настройка учетной записи'")); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки, , КодВозвратаДиалога.Отмена, НСтр("ru = 'Настройка учетной записи'")); КонецПроцедуры &НаКлиенте @@ -261,11 +267,7 @@ КонецЕсли; КонецЕсли; ИначеЕсли ТекущаяСтраница = Элементы.НастройкаСервераИсходящейПочты Тогда - Если Не КонтекстныйРежим И ИспользоватьДляПолучения Или ТребуетсяВходНаСерверПередОтправкой Тогда - СледующаяСтраница = Элементы.НастройкаСервераВходящейПочты; - Иначе - СледующаяСтраница = Элементы.ДополнительныеНастройки; - КонецЕсли; + СледующаяСтраница = Элементы.НастройкаСервераВходящейПочты; ИначеЕсли ТекущаяСтраница = Элементы.НастройкаСервераВходящейПочты Тогда СледующаяСтраница = Элементы.ДополнительныеНастройки; ИначеЕсли ТекущаяСтраница = Элементы.ДополнительныеНастройки Тогда @@ -371,14 +373,16 @@ &НаКлиенте Процедура ПроверитьЗаполнениеНаСтраницеНастройкаУчетнойЗаписи(Отказ) + ОчиститьСообщения(); + Если ПустаяСтрока(АдресЭлектроннойПочты) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Введите адрес электронной почты'"), , "АдресЭлектроннойПочты", , Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Введите адрес электронной почты'"), , "АдресЭлектроннойПочты", , Отказ); ИначеЕсли Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Истина) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Адрес электронной почты введен неверно'"), , "АдресЭлектроннойПочты", , Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Адрес электронной почты введен неверно'"), , "АдресЭлектроннойПочты", , Отказ); КонецЕсли; Если ПустаяСтрока(ПарольДляПолученияПисем) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо ввести пароль'"), , "ПарольДляПолученияПисем", , Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Необходимо ввести пароль'"), , "ПарольДляПолученияПисем", , Отказ); КонецЕсли; КонецПроцедуры @@ -554,8 +558,6 @@ &НаСервере Функция ПроверитьПодключениеКСерверуИсходящейПочты() - ПараметрыПисьма = Новый Структура; - Тема = НСтр("ru = 'Тестовое сообщение 1С:Предприятие'"); Тело = НСтр("ru = 'Это сообщение отправлено подсистемой электронной почты 1С:Предприятие'"); @@ -634,8 +636,13 @@ &НаСервере Процедура СоздатьУчетнуюЗапись() - Если КонтекстныйРежим И ВидУчетнойЗаписи = "Общая" И ПустаяСтрока(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты, "АдресЭлектроннойПочты")) Тогда - УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты.ПолучитьОбъект(); + СистемнаяУчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты; + Если КонтекстныйРежим + И ВидУчетнойЗаписи = "Общая" + И Не РаботаСПочтовымиСообщениями.УчетнаяЗаписьНастроена(СистемнаяУчетнаяЗапись) + И Справочники.УчетныеЗаписиЭлектроннойПочты.ИзменениеРазрешено(СистемнаяУчетнаяЗапись) Тогда + + УчетнаяЗапись = СистемнаяУчетнаяЗапись.ПолучитьОбъект(); Иначе Если УчетнаяЗаписьСсылка.Пустая() Тогда УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СоздатьЭлемент(); @@ -674,7 +681,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка при создании учетной записи электронной почты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка при создании учетной записи электронной почты'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -776,8 +783,10 @@ КонецЕсли; НайденныеНастройки = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); - ПроверкаЗавершиласьСОшибками = ИспользоватьДляОтправки <> НайденныеНастройки.ДляОтправки - Или ИспользоватьДляПолучения <> НайденныеНастройки.ДляПолучения; + + ПроверкаЗавершиласьСОшибками = ИспользоватьДляОтправки И Не НайденныеНастройки.ДляОтправки + Или ИспользоватьДляПолучения И Не НайденныеНастройки.ДляПолучения; + ЗаполнитьЗначенияСвойств(ЭтотОбъект, НайденныеНастройки); Если Не ПроверкаЗавершиласьСОшибками Тогда Попытка diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Form.form index bea5fc95e..30abdb209 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Form.form @@ -106,6 +106,10 @@ Right true + + OnCreateAtServer + ПриСозданииНаСервере + Abort Close CustomizeForm diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Module.bsl index ae6749394..9ea498c74 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Module.bsl @@ -1,3 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form index 055e83082..a388b41ba 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form @@ -30,7 +30,7 @@ true - Список.Ref + Список.Description true diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Module.bsl index 2b90d1323..0c433e496 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Module.bsl @@ -1,11 +1,25 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Элементы.ПоказыватьПерсональныеУчетныеЗаписиПользователей.Видимость = Пользователи.ЭтоПолноправныйПользователь(); - ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, ПоказыватьПерсональныеУчетныеЗаписиПользователей); + + Элементы.ПоказыватьПерсональныеУчетныеЗаписиПользователей.Видимость = + Пользователи.ЭтоПолноправныйПользователь(); + + ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, + ПоказыватьПерсональныеУчетныеЗаписиПользователей, + Пользователи.ТекущийПользователь()); + Элементы.ВладелецУчетнойЗаписи.Видимость = ПоказыватьПерсональныеУчетныеЗаписиПользователей; + КонецПроцедуры #КонецОбласти @@ -14,8 +28,13 @@ &НаКлиенте Процедура ПоказыватьПерсональныеУчетныеЗаписиПользователейПриИзменении(Элемент) - ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, ПоказыватьПерсональныеУчетныеЗаписиПользователей); + + ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, + ПоказыватьПерсональныеУчетныеЗаписиПользователей, + ПользователиКлиент.ТекущийПользователь()); + Элементы.ВладелецУчетнойЗаписи.Видимость = ПоказыватьПерсональныеУчетныеЗаписиПользователей; + КонецПроцедуры #КонецОбласти @@ -23,10 +42,10 @@ #Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста -Процедура ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, ПоказыватьПерсональныеУчетныеЗаписиПользователей) +Процедура ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, ПоказыватьПерсональныеУчетныеЗаписиПользователей, ТекущийПользователь) СписокПользователей = Новый Массив; СписокПользователей.Добавить(ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка")); - СписокПользователей.Добавить(ПользователиКлиентСервер.ТекущийПользователь()); + СписокПользователей.Добавить(ТекущийПользователь); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ВладелецУчетнойЗаписи", СписокПользователей, ВидСравненияКомпоновкиДанных.ВСписке, , Не ПоказыватьПерсональныеУчетныеЗаписиПользователей); diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form index c44f3bd03..d4e6559e0 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Form.form @@ -35,36 +35,6 @@ КоманднаяПанель 29 - - ФормаСправочникУчетныеЗаписиЭлектроннойПочтыПроверитьУчетнуюЗапись - 22 - true - true - - true - - - Items.Список.CurrentData.Ссылка - - - ФормаСправочникУчетныеЗаписиЭлектроннойПочтыПроверитьУчетнуюЗаписьРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - Catalog.УчетныеЗаписиЭлектроннойПочты.Command.ПроверитьУчетнуюЗапись - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - true true @@ -560,6 +530,11 @@ true auto true + + + КоманднаяПанель + + Список 1 diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl index b0153b0e9..6653e52af 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -11,10 +18,15 @@ КонецЕсли; Элементы.ПоказыватьПерсональныеУчетныеЗаписиПользователей.Видимость = Пользователи.ЭтоПолноправныйПользователь(); - ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, ПоказыватьПерсональныеУчетныеЗаписиПользователей); + + ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, + ПоказыватьПерсональныеУчетныеЗаписиПользователей, + Пользователи.ТекущийПользователь()); + ПереключитьВидимостьНедействительныхУчетныхЗаписей(Список, ПоказыватьНедействительные); Элементы.ВладелецУчетнойЗаписи.Видимость = ПоказыватьПерсональныеУчетныеЗаписиПользователей; Элементы.ПоказыватьНедействительные.Доступность = ПоказыватьПерсональныеУчетныеЗаписиПользователей; + КонецПроцедуры #КонецОбласти @@ -23,9 +35,17 @@ &НаКлиенте Процедура ПоказыватьПерсональныеУчетныеЗаписиПользователейПриИзменении(Элемент) - ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, ПоказыватьПерсональныеУчетныеЗаписиПользователей); + + ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, + ПоказыватьПерсональныеУчетныеЗаписиПользователей, + ПользователиКлиент.ТекущийПользователь()); + Элементы.ВладелецУчетнойЗаписи.Видимость = ПоказыватьПерсональныеУчетныеЗаписиПользователей; Элементы.ПоказыватьНедействительные.Доступность = ПоказыватьПерсональныеУчетныеЗаписиПользователей; + + ПоказыватьНедействительные = ПоказыватьНедействительные И ПоказыватьПерсональныеУчетныеЗаписиПользователей; + ПереключитьВидимостьНедействительныхУчетныхЗаписей(Список, ПоказыватьНедействительные); + КонецПроцедуры &НаКлиенте @@ -38,10 +58,10 @@ #Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста -Процедура ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, ПоказыватьПерсональныеУчетныеЗаписиПользователей) +Процедура ПереключитьВидимостьПерсональныхУчетныхЗаписей(Список, ПоказыватьПерсональныеУчетныеЗаписиПользователей, ТекущийПользователь) СписокПользователей = Новый Массив; СписокПользователей.Добавить(ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка")); - СписокПользователей.Добавить(ПользователиКлиентСервер.ТекущийПользователь()); + СписокПользователей.Добавить(ТекущийПользователь); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ВладелецУчетнойЗаписи", СписокПользователей, ВидСравненияКомпоновкиДанных.ВСписке, , Не ПоказыватьПерсональныеУчетныеЗаписиПользователей); diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 4c17a7fb0..a729e6108 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -106,7 +106,7 @@ 83 <key>ru</key> - <value>Имя отправителя писем</value> + <value>Отправитель</value> true true @@ -263,7 +263,7 @@ <key>ru</key> - <value>Использовать учетную запись</value> + <value>Использование учетной записи</value> ИспользоватьУчетнуюЗаписьРасширеннаяПодсказка @@ -287,40 +287,453 @@ Auto + + ГруппаДляКогоУчетнаяЗапись + 222 + + ДляКогоУчетнаяЗапись + 224 + + <key>ru</key> + <value>Для кого учетная запись</value> + + true + true + + true + + + ВидУчетнойЗаписи + + None + + OnChange + ДляКогоУчетнаяЗаписьПриИзменении + + + ДляКогоУчетнаяЗаписьРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + + ДляКогоУчетнаяЗаписьКонтекстноеМеню + 225 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Для всех + + + Общая + + + + + ru + Только для: + + + Персональная + + + Vertical + + + + ПользовательУчетнойЗаписи + 227 + + <key>ru</key> + <value>Владелец учетной записи</value> + + true + true + + true + + + Объект.ВладелецУчетнойЗаписи + + None + + OnChange + ПользовательУчетнойЗаписиПриИзменении + + + ПользовательУчетнойЗаписиРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + + ПользовательУчетнойЗаписиКонтекстноеМеню + 228 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Для кого учетная запись</value> + + 46 + false + + ГруппаДляКогоУчетнаяЗаписьРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + NormalSeparation + true + true + Auto + Auto + + НастройкиСоединения 96 + + Протокол + 108 + + <key>ru</key> + <value>Тип учетной записи</value> + + true + true + + true + + + Объект.ПротоколВходящейПочты + + + OnChange + ПротоколПриИзменении + + + ПротоколРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + + ПротоколКонтекстноеМеню + 109 + true + + InputField + true + Enter + true + Left + true + + 8 + true + true + false + true + true + true + true + true + + + IMAP + + + + + POP + + + + Style.ФонУправляющегоПоля + + Normal + 4 + + - ОтправкаПисем - 100 + ЛогинПароль + 263 + + ИмяПользователяДляПолученияПисем + 102 + + <key>ru</key> + <value>Логин</value> + + true + true + + true + + + Объект.Пользователь + + + ИмяПользователяДляПолученияПисемРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + ИмяПользователяДляПолученияПисемКонтекстноеМеню + 103 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + Normal + + + + ПарольДляПолученияПисем + 105 + true + true + + true + + + Пароль + + + OnChange + ПарольДляПолученияПисемПриИзменении + + + ПарольДляПолученияПисемРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + ПарольДляПолученияПисемКонтекстноеМеню + 106 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Логин пароль</value> + + + ЛогинПарольРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ОставлятьПисьмаНаСервере + 185 + + ОставлятьКопииПисемНаСервере + 130 + + <key>ru</key> + <value>Оставлять копии писем на сервере</value> + + true + true + + true + + + Объект.ОставлятьКопииСообщенийНаСервере + + Right + + OnChange + ОставлятьКопииПисемНаСервереПриИзменении + + + ОставлятьКопииПисемНаСервереРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + + ОставлятьКопииПисемНаСервереКонтекстноеМеню + 131 + true + + CheckBoxField + Enter + true + Left + true + + - НастройкиПодключенияПриОтправкеПисем - 202 + НастройкаПериодаХраненияПисем + 141 + + УдалятьПисьмаССервера + 214 + true + true + + true + + + УдалятьПисьмаССервера + + Right + + OnChange + УдалятьПисьмаССервераПриИзменении + + + УдалятьПисьмаССервераРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + + УдалятьПисьмаССервераКонтекстноеМеню + 215 + true + + CheckBoxField + Enter + true + Left + true + + - НастройкиСервераИсходящейПочты - 158 + ГруппаПериодХраненияСообщенийНаСервере + 267 - СерверИсходящейПочты - 174 - - <key>ru</key> - <value>Сервер</value> - + ПериодХраненияСообщенийНаСервере + 133 true true true - Объект.СерверИсходящейПочты + Объект.ПериодХраненияСообщенийНаСервере - - OnChange - СерверИсходящейПочтыПриИзменении - + None - СерверИсходящейПочтыРасширеннаяПодсказка - 176 + ПериодХраненияСообщенийНаСервереРасширеннаяПодсказка + 135 Label true true @@ -329,8 +742,8 @@ - СерверИсходящейПочтыКонтекстноеМеню - 175 + ПериодХраненияСообщенийНаСервереКонтекстноеМеню + 134 true InputField @@ -339,35 +752,34 @@ Left true - 22 true true - false true + true true true true + + 1 + Normal - - ПортСервераИсходящейПочты - 177 + + НадписьДней + 146 <key>ru</key> - <value>Порт</value> + <value>дней</value> true true true - - Объект.ПортСервераИсходящейПочты - - ПортСервераИсходящейПочтыРасширеннаяПодсказка - 179 + НадписьДнейРасширеннаяПодсказка + 148 Label true true @@ -376,23 +788,14 @@ - ПортСервераИсходящейПочтыКонтекстноеМеню - 178 + НадписьДнейКонтекстноеМеню + 147 true - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal + Label + true + + Left true @@ -402,11 +805,11 @@ <key>ru</key> - <value>Настройки сервера входящей почты</value> + <value>Группа период хранения сообщений на сервере</value> - НастройкиСервераИсходящейПочтыРасширеннаяПодсказка - 159 + ГруппаПериодХраненияСообщенийНаСервереРасширеннаяПодсказка + 268 Label true true @@ -416,7 +819,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -424,63 +827,579 @@ Auto - - ШифрованиеПриОтправкеПочты - 255 - true - true - - true - - - ШифрованиеПриОтправкеПочты - - - OnChange - ШифрованиеПриОтправкеПочтыПриИзменении - - - ШифрованиеПриОтправкеПочтыРасширеннаяПодсказка - 257 - Label - true - true - - Left - - - - ШифрованиеПриОтправкеПочтыКонтекстноеМеню - 256 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Авто - - - Авто - - - - - ru - Всегда (SSL) - - - SSL - - - Vertical + true + true + + true + + + <key>ru</key> + <value>Настройка периода хранения писем</value> + + + НастройкаПериодаХраненияПисемРасширеннаяПодсказка + 142 + Label + true + true + + Left - + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Оставлять письма на сервере</value> + + + ОставлятьПисьмаНаСервереРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + НастройкиСервераВходящейПочты + 125 + + ПротоколИПортСервераВходящейПочты + 111 + true + true + + true + + + <key>ru</key> + <value>Протокол и порт сервера входящей почты</value> + + + ПротоколИПортСервераВходящейПочтыРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ТипСоединенияИДлительностьОжидания + 187 + true + true + + true + + + <key>ru</key> + <value>Тип соединения и длительность ожидания</value> + + + ТипСоединенияИДлительностьОжиданияРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СерверВходящейПочты + 113 + + <key>ru</key> + <value>Сервер IMAP</value> + + true + true + + true + + + Объект.СерверВходящейПочты + + + OnChange + СерверВходящейПочтыПриИзменении + + + СерверВходящейПочтыРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + + СерверВходящейПочтыКонтекстноеМеню + 114 + true + + InputField + Enter + true + Left + true + + 22 + true + true + false + true + true + true + true + Normal + + + + ПортВходящейПочты + 122 + + <key>ru</key> + <value>Порт</value> + + true + true + + true + + + Объект.ПортСервераВходящейПочты + + + ПортВходящейПочтыРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + + ПортВходящейПочтыКонтекстноеМеню + 123 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ШифрованиеПриПолученииПочты + 260 + true + true + + true + + + ШифрованиеПриПолученииПочты + + + OnChange + ШифрованиеПриПолученииПочтыПриИзменении + + + ШифрованиеПриПолученииПочтыРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + + ШифрованиеПриПолученииПочтыКонтекстноеМеню + 261 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Авто + + + Авто + + + + + ru + Всегда (SSL) + + + SSL + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Настройки сервера входящей почты</value> + + 70 + + НастройкиСервераВходящейПочтыРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + НастройкиСервераИсходящейПочты + 158 + + СерверИсходящейПочты + 174 + + <key>ru</key> + <value>Сервер SMTP</value> + + true + true + + true + + + Объект.СерверИсходящейПочты + + + OnChange + СерверИсходящейПочтыПриИзменении + + + СерверИсходящейПочтыРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + СерверИсходящейПочтыКонтекстноеМеню + 175 + true + + InputField + Enter + true + Left + true + + 22 + true + true + false + true + true + true + true + Normal + + + + ПортСервераИсходящейПочты + 177 + + <key>ru</key> + <value>Порт</value> + + true + true + + true + + + Объект.ПортСервераИсходящейПочты + + + ПортСервераИсходящейПочтыРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + ПортСервераИсходящейПочтыКонтекстноеМеню + 178 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ШифрованиеПриОтправкеПочты + 255 + true + true + + true + + + ШифрованиеПриОтправкеПочты + + + OnChange + ШифрованиеПриОтправкеПочтыПриИзменении + + + ШифрованиеПриОтправкеПочтыРасширеннаяПодсказка + 257 + Label + true + true + + Left + + + + ШифрованиеПриОтправкеПочтыКонтекстноеМеню + 256 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Авто + + + Авто + + + + + ru + Всегда (SSL) + + + SSL + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Настройки сервера входящей почты</value> + + + НастройкиСервераИсходящейПочтыРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ОтправлятьСкрытыеКопииПисемНаЭтотАдрес + 219 + true + true + + true + + + Объект.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес + + Right + Button + + ОтправлятьСкрытыеКопииПисемНаЭтотАдресРасширеннаяПодсказка + 221 + + <key>ru</key> + <value>Рекомендуется включать при отсутствии штатных возможностей для хранения отправленных писем на почтовом сервере. +После включения флажка, чтобы не путать скрытые копии отправленных писем с обычными входящими письмами, +также рекомендуется настроить правило обработки (фильтрации) входящих писем в настройках ящика на почтовом сервере.</value> + + Label + true + true + + Left + + + + ОтправлятьСкрытыеКопииПисемНаЭтотАдресКонтекстноеМеню + 220 + true + + CheckBoxField + Enter + true + Left + true + + + + ПолучениеПисем + 98 + true + true + + true + + + <key>ru</key> + <value>Получение писем</value> + + + ПолучениеПисемРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + ОтправкаПисем + 100 + + НастройкиПодключенияПриОтправкеПисем + 202 true true @@ -810,7 +1729,6 @@ Auto - true true true @@ -982,7 +1900,7 @@ <key>ru</key> - <value>Требуется авторизация</value> + <value>Настройки авторизации</value> ГруппаТребуетсяАвторизацияРасширеннаяПодсказка @@ -998,7 +1916,6 @@ Vertical Auto - NormalSeparation true true Auto @@ -1079,47 +1996,6 @@ Auto - - ОтправлятьСкрытыеКопииПисемНаЭтотАдрес - 219 - true - true - - true - - - Объект.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес - - Right - Button - - ОтправлятьСкрытыеКопииПисемНаЭтотАдресРасширеннаяПодсказка - 221 - - <key>ru</key> - <value>Рекомендуется включать при отсутствии штатных возможностей для хранения отправленных писем на почтовом сервере. -После включения флажка, чтобы не путать скрытые копии отправленных писем с обычными входящими письмами, -также рекомендуется настроить правило обработки (фильтрации) входящих писем в настройках ящика на почтовом сервере.</value> - - Label - true - true - - Left - - - - ОтправлятьСкрытыеКопииПисемНаЭтотАдресКонтекстноеМеню - 220 - true - - CheckBoxField - Enter - true - Left - true - - true true @@ -1139,674 +2015,15 @@ Left - Page - + UsualGroup + Vertical - auto - false - - - - ПолучениеПисем - 98 - - ИмяПользователяДляПолученияПисем - 102 - - <key>ru</key> - <value>Имя пользователя</value> - - true - true - - true - - - Объект.Пользователь - - - ИмяПользователяДляПолученияПисемРасширеннаяПодсказка - 104 - Label - true - true - - Left - - - - ИмяПользователяДляПолученияПисемКонтекстноеМеню - 103 - true - - InputField - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - Normal - - - - ПарольДляПолученияПисем - 105 - true - true - - true - - - Пароль - - - OnChange - ПарольДляПолученияПисемПриИзменении - - - ПарольДляПолученияПисемРасширеннаяПодсказка - 107 - Label - true - true - - Left - - - - ПарольДляПолученияПисемКонтекстноеМеню - 106 - true - - InputField - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - true - Normal - - - - НастройкиСервераВходящейПочты - 125 - - Протокол - 108 - - <key>ru</key> - <value>Протокол</value> - - true - true - - true - - - Объект.ПротоколВходящейПочты - - - OnChange - ПротоколПриИзменении - - - ПротоколРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - - ПротоколКонтекстноеМеню - 109 - true - - InputField - true - Enter - true - Left - true - - 8 - true - true - false - true - true - true - true - true - - - IMAP - - - - - POP - - - Normal - 4 - - - - ПротоколИПортСервераВходящейПочты - 111 - - СерверВходящейПочты - 113 - - <key>ru</key> - <value>Сервер</value> - - true - true - - true - - - Объект.СерверВходящейПочты - - Left - - OnChange - СерверВходящейПочтыПриИзменении - - - СерверВходящейПочтыРасширеннаяПодсказка - 115 - Label - true - true - - Left - - - - СерверВходящейПочтыКонтекстноеМеню - 114 - true - - InputField - Enter - true - Left - true - - 22 - true - true - false - true - true - true - true - Normal - - - - ПортВходящейПочты - 122 - - <key>ru</key> - <value>Порт</value> - - true - true - - true - - - Объект.ПортСервераВходящейПочты - - - ПортВходящейПочтыРасширеннаяПодсказка - 124 - Label - true - true - - Left - - - - ПортВходящейПочтыКонтекстноеМеню - 123 - true - - InputField - Enter - true - Left - true - - 8 - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Протокол и порт сервера входящей почты</value> - - - ПротоколИПортСервераВходящейПочтыРасширеннаяПодсказка - 112 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ТипСоединенияИДлительностьОжидания - 187 - - ШифрованиеПриПолученииПочты - 260 - true - true - - true - - - ШифрованиеПриПолученииПочты - - - OnChange - ШифрованиеПриПолученииПочтыПриИзменении - - - ШифрованиеПриПолученииПочтыРасширеннаяПодсказка - 262 - Label - true - true - - Left - - - - ШифрованиеПриПолученииПочтыКонтекстноеМеню - 261 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Авто - - - Авто - - - - - ru - Всегда (SSL) - - - SSL - - - Vertical - - - true - true - - true - - - <key>ru</key> - <value>Тип соединения и длительность ожидания</value> - - - ТипСоединенияИДлительностьОжиданияРасширеннаяПодсказка - 188 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройки сервера входящей почты</value> - - - НастройкиСервераВходящейПочтыРасширеннаяПодсказка - 126 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - ОставлятьПисьмаНаСервере - 185 - - ОставлятьКопииПисемНаСервере - 130 - - <key>ru</key> - <value>Оставлять копии писем на сервере</value> - - true - true - - true - - - Объект.ОставлятьКопииСообщенийНаСервере - - Right - - OnChange - ОставлятьКопииПисемНаСервереПриИзменении - - - ОставлятьКопииПисемНаСервереРасширеннаяПодсказка - 132 - Label - true - true - - Left - - - - ОставлятьКопииПисемНаСервереКонтекстноеМеню - 131 - true - - CheckBoxField - Enter - true - Left - true - - - - НастройкаПериодаХраненияПисем - 141 - - УдалятьПисьмаССервера - 214 - true - true - - true - - - УдалятьПисьмаССервера - - Right - - OnChange - УдалятьПисьмаССервераПриИзменении - - - УдалятьПисьмаССервераРасширеннаяПодсказка - 216 - Label - true - true - - Left - - - - УдалятьПисьмаССервераКонтекстноеМеню - 215 - true - - CheckBoxField - Enter - true - Left - true - - - - ПериодХраненияСообщенийНаСервере - 133 - true - true - - true - - - Объект.ПериодХраненияСообщенийНаСервере - - None - - ПериодХраненияСообщенийНаСервереРасширеннаяПодсказка - 135 - Label - true - true - - Left - - - - ПериодХраненияСообщенийНаСервереКонтекстноеМеню - 134 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - - 1 - - Normal - - - - НадписьДней - 146 - - <key>ru</key> - <value>дней</value> - - true - true - - true - - - НадписьДнейРасширеннаяПодсказка - 148 - Label - true - true - - Left - - - - НадписьДнейКонтекстноеМеню - 147 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Настройка периода хранения писем</value> - - - НастройкаПериодаХраненияПисемРасширеннаяПодсказка - 142 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Оставлять письма на сервере</value> - - - ОставлятьПисьмаНаСервереРасширеннаяПодсказка - 186 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Получение писем</value> - - - ПолучениеПисемРасширеннаяПодсказка - 99 - Label - true - true - - Left - - - Page - - Vertical - auto - false + Auto + WeakSeparation + true + true + Auto + Auto @@ -1926,7 +2143,6 @@ Auto - true true true @@ -1945,11 +2161,16 @@ Left - Page - + UsualGroup + Vertical + Auto + WeakSeparation + true + true auto - false + Auto + Auto true @@ -1959,7 +2180,7 @@ <key>ru</key> - <value>Настройки соединения</value> + <value>Настройки подключения</value> НастройкиСоединенияРасширеннаяПодсказка @@ -1971,153 +2192,11 @@ Left - Pages - - TabsOnTop - Auto - - - - ГруппаДляКогоУчетнаяЗапись - 222 - - ДляКогоУчетнаяЗапись - 224 - - <key>ru</key> - <value>Для кого учетная запись</value> - - true - true - - true - - - ВидУчетнойЗаписи - - None - - OnChange - ДляКогоУчетнаяЗаписьПриИзменении - - - ДляКогоУчетнаяЗаписьРасширеннаяПодсказка - 226 - Label - true - true - - Left - - - - ДляКогоУчетнаяЗаписьКонтекстноеМеню - 225 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Для всех - - - Общая - - - - - ru - Только для: - - - Персональная - - - Vertical - - - - ПользовательУчетнойЗаписи - 227 - - <key>ru</key> - <value>Владелец учетной записи</value> - - true - true - - true - - - Объект.ВладелецУчетнойЗаписи - - None - - OnChange - ПользовательУчетнойЗаписиПриИзменении - - - ПользовательУчетнойЗаписиРасширеннаяПодсказка - 229 - Label - true - true - - Left - - - - ПользовательУчетнойЗаписиКонтекстноеМеню - 228 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Для кого учетная запись</value> - - 46 - false - - ГруппаДляКогоУчетнаяЗаписьРасширеннаяПодсказка - 223 - Label - true - true - - Left - - UsualGroup HorizontalIfPossible Auto - NormalSeparation + WeakSeparation true true auto @@ -2207,23 +2286,16 @@ - ФормаСправочникУчетныеЗаписиЭлектроннойПочтыПроверитьУчетнуюЗапись - 78 - - <key>ru</key> - <value>Проверить настройки</value> - + ФормаПроверитьНастройки + 265 true true true - - Объект.Ref - - ФормаСправочникУчетныеЗаписиЭлектроннойПочтыПроверитьУчетнуюЗаписьРасширеннаяПодсказка - 79 + ФормаПроверитьНастройкиРасширеннаяПодсказка + 266 Label true true @@ -2231,7 +2303,7 @@ Left - Catalog.УчетныеЗаписиЭлектроннойПочты.Command.ПроверитьУчетнуюЗапись + Form.Command.ПроверитьНастройки Normal Auto true @@ -2474,7 +2546,7 @@ ТребуетсяАвторизацияПриОтправкеПисем <key>ru</key> - <value>Требуется авторизация</value> + <value>При отправке писем требуется авторизация</value> 11 @@ -2486,6 +2558,7 @@ true + true СпособАвторизацииПриОтправкеПочты @@ -2504,6 +2577,7 @@ true + true ШифрованиеПриОтправкеПочты @@ -2522,6 +2596,7 @@ true + true ШифрованиеПриПолученииПочты @@ -2540,6 +2615,7 @@ true + true РеквизитыТребующиеВводаПароляДляИзменения @@ -2559,6 +2635,23 @@ true + + ИспользуетсяПочтовыйКлиент + + <key>ru</key> + <value>Используется почтовый клиент</value> + + 16 + + Boolean + + + true + + + true + + ЗаписатьИЗакрыть @@ -2581,6 +2674,28 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ПроверитьНастройки</name> + <title> + <key>ru</key> + <value>Проверить настройки</value> + + 2 + + ru + Проверить настройки + + + true + + + + ПроверитьНастройки + + + Auto + Auto + БлокироватьВладельца @@ -2589,7 +2704,12 @@ - + + + 0 + + + diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index 51f10b9f2..2af3e99f7 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -1,10 +1,15 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте -Перем РазрешенияПолучены; - -&НаКлиенте -Перем ПроверкаЗаполненияПараметрыЗаписи; +Перем ПараметрыПередЗаписью; #КонецОбласти @@ -22,14 +27,17 @@ КонецЕсли; ДоступноПолучениеПисем = РаботаСПочтовымиСообщениямиСлужебный.НастройкиПодсистемы().ДоступноПолучениеПисем; + Элементы.ИспользоватьУчетнуюЗапись.ОтображатьЗаголовок = ДоступноПолучениеПисем; Элементы.ДляПолучения.Видимость = ДоступноПолучениеПисем; - Элементы.ОставлятьПисьмаНаСервере.Видимость = ДоступноПолучениеПисем; + Элементы.ОставлятьПисьмаНаСервере.Видимость = Объект.ПротоколВходящейПочты = "POP" И ДоступноПолучениеПисем; + Если Не ДоступноПолучениеПисем Тогда Элементы.ДляОтправки.Заголовок = НСтр("ru = 'Использовать для отправки писем'"); КонецЕсли; - Элементы.ПолучениеПисем.Доступность = ДоступноПолучениеПисем Или Объект.ТребуетсяВходНаСерверПередОтправкой; - Элементы.Протокол.Доступность = ДоступноПолучениеПисем; + + Элементы.СерверВходящейПочты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сервер %1'"), Объект.ПротоколВходящейПочты); Если Объект.Ссылка.Пустая() Тогда Объект.ИспользоватьДляОтправки = Истина; @@ -47,6 +55,10 @@ УстановитьПривилегированныйРежим(Ложь); Пароль = ?(ЗначениеЗаполнено(Пароли.Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); ПарольSMTP = ?(ЗначениеЗаполнено(Пароли.ПарольSMTP), ЭтотОбъект.УникальныйИдентификатор, ""); + + Если Не Справочники.УчетныеЗаписиЭлектроннойПочты.ИзменениеРазрешено(Объект.Ссылка) Тогда + ТолькоПросмотр = Истина; + КонецЕсли; КонецЕсли; Элементы.ФормаЗаписатьИЗакрыть.Доступность = Не ТолькоПросмотр; @@ -57,8 +69,11 @@ Элементы.ГруппаДляКогоУчетнаяЗапись.Доступность = Пользователи.ЭтоПолноправныйПользователь(); ВладелецУчетнойЗаписи = Объект.ВладелецУчетнойЗаписи; + ИспользуетсяПротоколPOP = Объект.ПротоколВходящейПочты = "POP"; ТребуетсяАвторизацияПриОтправкеПисем = ЗначениеЗаполнено(Объект.ПользовательSMTP); Элементы.АвторизацияПриОтправкеПисем.Доступность = ТребуетсяАвторизацияПриОтправкеПисем; + УстановитьВидГруппыТребуетсяАвторизация(ЭтотОбъект, ИспользуетсяПротоколPOP); + Элементы.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес.Видимость = ИспользуетсяПротоколPOP; ШифрованиеПриОтправкеПочты = ?(Объект.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты, "SSL", "Авто"); ШифрованиеПриПолученииПочты = ?(Объект.ИспользоватьЗащищенноеСоединениеДляВходящейПочты, "SSL", "Авто"); @@ -66,21 +81,19 @@ СпособАвторизацииПриОтправкеПочты = ?(Объект.ТребуетсяВходНаСерверПередОтправкой, "POP", "SMTP"); РеквизитыТребующиеВводаПароляДляИзменения = Справочники.УчетныеЗаписиЭлектроннойПочты.РеквизитыТребующиеВводаПароляДляИзменения(); + КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + Если ПарольИзменен Тогда УстановитьПривилегированныйРежим(Истина); ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, Пароль); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, Пароль, "ПарольSMTP"); УстановитьПривилегированныйРежим(Ложь); КонецЕсли; - Если ПарольSMTPИзменен Тогда - УстановитьПривилегированныйРежим(Истина); - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ПарольSMTP, "ПарольSMTP"); - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; КонецПроцедуры &НаСервере @@ -88,12 +101,13 @@ Если ВидУчетнойЗаписи = "Персональная" И Не ЗначениеЗаполнено(Объект.ВладелецУчетнойЗаписи) Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Не выбран владелец учетной записи.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.ВладелецУчетнойЗаписи"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.ВладелецУчетнойЗаписи"); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + ТекущийОбъект.ПользовательSMTP = ТекущийОбъект.Пользователь; ТекущийОбъект.ДополнительныеСвойства.Вставить("Пароль", ПроверкаПароля); КонецПроцедуры @@ -106,60 +120,18 @@ &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - Если Не УдалятьПисьмаССервера Тогда - Объект.ПериодХраненияСообщенийНаСервере = 0; - КонецЕсли; + ЗаполнитьРеквизитыОбъекта(); - Если Объект.ПротоколВходящейПочты = "IMAP" Тогда - Объект.ОставлятьКопииСообщенийНаСервере = Истина; - Объект.ПериодХраненияСообщенийНаСервере = 0; - КонецЕсли; - - Если Не ПроверкаЗаполненияВыполнена(ПараметрыЗаписи) Тогда + Если Не ПроверкиПередЗаписьюВыполнены(ПараметрыЗаписи) Тогда Отказ = Истина; Возврат; КонецЕсли; - Если РазрешенияПолучены <> Истина Тогда - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПолучениеРазрешенийЗавершение", ЭтотОбъект, ПараметрыЗаписи); - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - ДанныеОбъекта = Новый Структура("Ссылка,ИспользоватьДляОтправки,СерверИсходящейПочты,ПортСервераИсходящейПочты,ИспользоватьДляПолучения, - |ПротоколВходящейПочты,СерверВходящейПочты,ПортСервераВходящейПочты"); - ЗаполнитьЗначенияСвойств(ДанныеОбъекта, Объект); - Запрос = СоздатьЗапросНаИспользованиеВнешнихРесурсов(ДанныеОбъекта); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( - ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Запрос), ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - - Отказ = Истина; - Возврат; - КонецЕсли; - - Если ВидУчетнойЗаписи = "Общая" И ЗначениеЗаполнено(Объект.ВладелецУчетнойЗаписи) Тогда - Объект.ВладелецУчетнойЗаписи = Неопределено; - КонецЕсли; - - ЗначенияРеквизитовПередЗаписью = Новый Структура(РеквизитыТребующиеВводаПароляДляИзменения); - ЗаполнитьЗначенияСвойств(ЗначенияРеквизитовПередЗаписью, Объект); - - ТребуетсяПроверкаПароля = ТребуетсяПроверкаПароля(Объект.Ссылка, ЗначенияРеквизитовПередЗаписью); - - Если Не ПараметрыЗаписи.Свойство("ПарольВведен") И ТребуетсяПроверкаПароля Тогда - Отказ = Истина; - ЗапроситьПароль(ПараметрыЗаписи); - Возврат; - КонецЕсли; - - РазрешенияПолучены = Ложь; - КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) + Оповестить("Запись_УчетнаяЗаписьЭлектроннойПочты",,Объект.Ссылка); Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда @@ -167,11 +139,16 @@ КонецЕсли; ВладелецУчетнойЗаписи = Объект.ВладелецУчетнойЗаписи; + + Если ПараметрыЗаписи.Свойство("ПроверитьНастройки") Тогда + ПодключитьОбработчикОжидания("ВыполнитьПроверкуНастроек", 0.1, Истина); + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - УстановитьДоступностьЭлементов(); + УстановитьВидНастройкиХраненияПисемНаСервере(); КонецПроцедуры &НаСервере @@ -193,21 +170,46 @@ &НаКлиенте Процедура ПротоколПриИзменении(Элемент) + Если ПустаяСтрока(Объект.ПротоколВходящейПочты) Тогда + Объект.ПротоколВходящейПочты = "IMAP"; + КонецЕсли; + Если Объект.ПротоколВходящейПочты = "IMAP" Тогда Если СтрНачинаетсяС(Объект.СерверВходящейПочты, "pop.") Тогда Объект.СерверВходящейПочты = "imap." + Сред(Объект.СерверВходящейПочты, 5); КонецЕсли Иначе - Если ПустаяСтрока(Объект.ПротоколВходящейПочты) Тогда - Объект.ПротоколВходящейПочты = "POP"; - КонецЕсли; Если СтрНачинаетсяС(Объект.СерверВходящейПочты, "imap.") Тогда Объект.СерверВходящейПочты = "pop." + Сред(Объект.СерверВходящейПочты, 6); КонецЕсли; КонецЕсли; + Элементы.СерверВходящейПочты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сервер %1'"), Объект.ПротоколВходящейПочты); + + ИспользуетсяПротоколPOP = Объект.ПротоколВходящейПочты = "POP"; + Элементы.ОставлятьПисьмаНаСервере.Видимость = ИспользуетсяПротоколPOP И ДоступноПолучениеПисем; + + УстановитьВидГруппыТребуетсяАвторизация(ЭтотОбъект, ИспользуетсяПротоколPOP); + УстановитьПортВходящейПочты(); - УстановитьДоступностьЭлементов(); + УстановитьВидНастройкиХраненияПисемНаСервере(); + + Элементы.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес.Видимость = ИспользуетсяПротоколPOP; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьВидГруппыТребуетсяАвторизация(Форма, ИспользуетсяПротоколPOP) + + Если ИспользуетсяПротоколPOP Тогда + Форма.Элементы.ТребуетсяАвторизацияПриОтправкеПисем.Заголовок = НСтр("ru = 'При отправке писем требуется авторизация'"); + Иначе + Форма.Элементы.ТребуетсяАвторизацияПриОтправкеПисем.Заголовок = НСтр("ru = 'При отправке писем требуется авторизация на сервере исходящей почты (SMTP)'"); + КонецЕсли; + + Форма.Элементы.АвторизацияПриОтправкеПисем.Видимость = ИспользуетсяПротоколPOP; + КонецПроцедуры &НаКлиенте @@ -227,12 +229,12 @@ &НаКлиенте Процедура ОставлятьКопииПисемНаСервереПриИзменении(Элемент) - УстановитьДоступностьЭлементов(); + УстановитьВидНастройкиХраненияПисемНаСервере(); КонецПроцедуры &НаКлиенте Процедура УдалятьПисьмаССервераПриИзменении(Элемент) - УстановитьДоступностьЭлементов(); + УстановитьВидНастройкиХраненияПисемНаСервере(); КонецПроцедуры &НаКлиенте @@ -264,6 +266,7 @@ &НаКлиенте Процедура ТребуетсяАвторизацияПриОтправкеПисемПриИзменении(Элемент) Элементы.АвторизацияПриОтправкеПисем.Доступность = ТребуетсяАвторизацияПриОтправкеПисем; + Элементы.АвторизацияПриОтправкеПисем.Видимость = Объект.ПротоколВходящейПочты = "POP"; КонецПроцедуры &НаКлиенте @@ -281,7 +284,7 @@ &НаКлиенте Процедура СпособАвторизацииПриОтправкеПочтыПриИзменении(Элемент) Объект.ТребуетсяВходНаСерверПередОтправкой = ?(СпособАвторизацииПриОтправкеПочты = "POP", Истина, Ложь); - Элементы.ЛогинИПарольПриОтправкеПисем.Доступность = Не Объект.ТребуетсяВходНаСерверПередОтправкой; + УстановитьВидНастройкиХраненияПисемНаСервере(); КонецПроцедуры #КонецОбласти @@ -295,23 +298,34 @@ КонецПроцедуры +&НаКлиенте +Процедура ПроверитьНастройки(Команда) + ВыполнитьПроверкуНастроек(); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура УстановитьВидНастройкиХраненияПисемНаСервере() + + ИспользуетсяПротоколPOP = Объект.ПротоколВходящейПочты = "POP"; + Элементы.ОставлятьПисьмаНаСервере.Видимость = ИспользуетсяПротоколPOP И ДоступноПолучениеПисем; + Элементы.НастройкаПериодаХраненияПисем.Доступность = Объект.ОставлятьКопииСообщенийНаСервере; + Элементы.ПериодХраненияСообщенийНаСервере.Доступность = УдалятьПисьмаССервера; + +КонецПроцедуры + &НаКлиенте Процедура УстановитьПортВходящейПочты() Если Объект.ПротоколВходящейПочты = "IMAP" Тогда - Если Объект.ИспользоватьЗащищенноеСоединениеДляВходящейПочты Тогда + Если Объект.ПортСервераВходящейПочты = 995 Тогда Объект.ПортСервераВходящейПочты = 993; - Иначе - Объект.ПортСервераВходящейПочты = 143; КонецЕсли; Иначе - Если Объект.ИспользоватьЗащищенноеСоединениеДляВходящейПочты Тогда + Если Объект.ПортСервераВходящейПочты = 993 Тогда Объект.ПортСервераВходящейПочты = 995; - Иначе - Объект.ПортСервераВходящейПочты = 110; КонецЕсли; КонецЕсли; КонецПроцедуры @@ -319,9 +333,13 @@ &НаКлиенте Процедура УстановитьПортИсходящейПочты() Если Объект.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты Тогда - Объект.ПортСервераИсходящейПочты = 465; + Если Объект.ПортСервераИсходящейПочты = 587 Тогда + Объект.ПортСервераИсходящейПочты = 465; + КонецЕсли; Иначе - Объект.ПортСервераИсходящейПочты = 25; + Если Объект.ПортСервераИсходящейПочты = 465 Тогда + Объект.ПортСервераИсходящейПочты = 587; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -331,36 +349,93 @@ КонецПроцедуры &НаКлиенте -Процедура УстановитьДоступностьЭлементов() - ИспользуетсяПротоколPOP = Объект.ПротоколВходящейПочты = "POP"; - Элементы.POPПередSMTP.Видимость = ИспользуетсяПротоколPOP; - Элементы.ОставлятьПисьмаНаСервере.Видимость = ИспользуетсяПротоколPOP И ДоступноПолучениеПисем; - - Элементы.НастройкаПериодаХраненияПисем.Доступность = Объект.ОставлятьКопииСообщенийНаСервере; - Элементы.ПериодХраненияСообщенийНаСервере.Доступность = УдалятьПисьмаССервера; +Процедура ОповеститьОбИзмененииВладельцаУчетнойЗаписи() + Оповестить("ПриИзмененииВидаУчетнойЗаписиЭлектроннойПочты", ВидУчетнойЗаписи = "Персональная", ЭтотОбъект); КонецПроцедуры &НаКлиенте -Процедура ПолучениеРазрешенийЗавершение(Результат, ПараметрыЗаписи) Экспорт +Процедура ЗаполнитьРеквизитыОбъекта() - Если Результат = КодВозвратаДиалога.ОК Тогда - РазрешенияПолучены = Истина; - Записать(ПараметрыЗаписи); + Если Не УдалятьПисьмаССервера Тогда + Объект.ПериодХраненияСообщенийНаСервере = 0; + КонецЕсли; + + Если Объект.ПротоколВходящейПочты = "IMAP" Тогда + Объект.ОставлятьКопииСообщенийНаСервере = Истина; + Объект.ПериодХраненияСообщенийНаСервере = 0; + КонецЕсли; + + Если ВидУчетнойЗаписи = "Общая" И ЗначениеЗаполнено(Объект.ВладелецУчетнойЗаписи) Тогда + Объект.ВладелецУчетнойЗаписи = Неопределено; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ПроверкиПередЗаписьюВыполнены(ПараметрыЗаписи) + + ПараметрыПередЗаписью = ПараметрыЗаписи; + + Если Не ПараметрыПередЗаписью.Свойство("ПроверкаЗаполненияВыполнена") Тогда + ПодключитьОбработчикОжидания("ПроверитьЗаполнениеИЗаписать", 0.1, Истина); + Возврат Ложь; + КонецЕсли; + + Если Не ПараметрыПередЗаписью.Свойство("РазрешенияПолучены") Тогда + ПодключитьОбработчикОжидания("ПроверитьРазрешенияИЗаписать", 0.1, Истина); + Возврат Ложь; + КонецЕсли; + + Если Не ПроверкаПароляВыполнена(ПараметрыПередЗаписью) Тогда + ПодключитьОбработчикОжидания("ВвестиПарольУчетнойЗаписиИЗаписать", 0.1, Истина); + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьЗаполнениеИЗаписать() + + Если ПроверитьЗаполнение() Тогда + ПараметрыПередЗаписью.Вставить("ПроверкаЗаполненияВыполнена"); + Записать(ПараметрыПередЗаписью); КонецЕсли; КонецПроцедуры -&НаСервереБезКонтекста -Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект) +&НаКлиенте +Процедура ПроверитьРазрешенияИЗаписать() - МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); - Возврат МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов( - Разрешения(Объект), Объект.Ссылка); + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПроверкиРазрешений", ЭтотОбъект, ПараметрыПередЗаписью); + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( + ЗапросыНаИспользованиеВнешнихРесурсов(), ЭтотОбъект, ОписаниеОповещения); + Иначе + ВыполнитьОбработкуОповещения(ОписаниеОповещения, КодВозвратаДиалога.ОК); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ЗапросыНаИспользованиеВнешнихРесурсов() + + Запрос = Неопределено; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + Запрос = МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения(), Объект.Ссылка); + КонецЕсли; + + Возврат ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Запрос); КонецФункции -&НаСервереБезКонтекста -Функция Разрешения(Объект) +&НаСервере +Функция Разрешения() Результат = Новый Массив; @@ -389,50 +464,60 @@ КонецФункции &НаКлиенте -Процедура ЗапроситьПароль(ПараметрыЗаписи) - ПроверкаПароля = ""; - ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВводаПароля", ЭтотОбъект, ПараметрыЗаписи); - ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ПроверкаДоступаКУчетнойЗаписи", , - ЭтотОбъект, , , , ОписаниеОповещения); -КонецПроцедуры - -&НаКлиенте -Процедура ПослеВводаПароля(Пароль, ПараметрыЗаписи) Экспорт - Если ТипЗнч(Пароль) = Тип("Строка") Тогда - ПараметрыЗаписи.Вставить("ПарольВведен"); - ПроверкаПароля = Пароль; - Записать(ПараметрыЗаписи); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОповеститьОбИзмененииВладельцаУчетнойЗаписи() - Оповестить("ПриИзмененииВидаУчетнойЗаписиЭлектроннойПочты", ВидУчетнойЗаписи = "Персональная", ЭтотОбъект); -КонецПроцедуры - -&НаКлиенте -Функция ПроверкаЗаполненияВыполнена(ПараметрыЗаписи) - Если ПараметрыЗаписи.Свойство("ПроверкаЗаполненияВыполнена") Тогда - Возврат Истина; +Процедура ПослеПроверкиРазрешений(Результат, ПараметрыЗаписи) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + ПараметрыЗаписи.Вставить("РазрешенияПолучены"); + Записать(ПараметрыПередЗаписью); КонецЕсли; - ПроверкаЗаполненияПараметрыЗаписи = ПараметрыЗаписи; - ПодключитьОбработчикОжидания("ПроверитьЗаполнениеИЗаписать", 0.1, Истина); +КонецПроцедуры + +&НаКлиенте +Функция ПроверкаПароляВыполнена(ПараметрыЗаписи) + + Если Не ПараметрыЗаписи.Свойство("ПарольВведен") Тогда + ЗначенияРеквизитовПередЗаписью = Новый Структура(РеквизитыТребующиеВводаПароляДляИзменения); + ЗаполнитьЗначенияСвойств(ЗначенияРеквизитовПередЗаписью, Объект); + Возврат Не ТребуетсяПроверкаПароля(Объект.Ссылка, ЗначенияРеквизитовПередЗаписью); + КонецЕсли; + + Возврат Истина; - Возврат Ложь; КонецФункции -&НаКлиенте -Процедура ПроверитьЗаполнениеИЗаписать() - Если ПроверитьЗаполнение() Тогда - ПроверкаЗаполненияПараметрыЗаписи.Вставить("ПроверкаЗаполненияВыполнена"); - Записать(ПроверкаЗаполненияПараметрыЗаписи); - КонецЕсли; -КонецПроцедуры - &НаСервереБезКонтекста Функция ТребуетсяПроверкаПароля(Ссылка, ЗначенияРеквизитов) Возврат Справочники.УчетныеЗаписиЭлектроннойПочты.ТребуетсяПроверкаПароля(Ссылка, ЗначенияРеквизитов); КонецФункции +&НаКлиенте +Процедура ВвестиПарольУчетнойЗаписиИЗаписать() + + ПроверкаПароля = ""; + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВводаПароля", ЭтотОбъект, ПараметрыПередЗаписью); + ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ПроверкаДоступаКУчетнойЗаписи", , ЭтотОбъект, , , , ОписаниеОповещения); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВводаПароля(Пароль, ПараметрыЗаписи) Экспорт + + Если ТипЗнч(Пароль) = Тип("Строка") Тогда + ПроверкаПароля = Пароль; + ПараметрыЗаписи.Вставить("ПарольВведен"); + Записать(ПараметрыЗаписи); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПроверкуНастроек() + Если Модифицированность Тогда + Записать(Новый Структура("ПроверитьНастройки")); + Иначе + РаботаСПочтовымиСообщениямиКлиент.ПроверитьУчетнуюЗапись(Объект.Ссылка); + КонецЕсли; +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl index 9d4ef522c..0e3d2242e 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -45,25 +53,6 @@ #КонецОбласти -#КонецЕсли - -#Область ОбработчикиСобытий - -Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) - - Если (ВидФормы = "ФормаОбъекта" И Не Параметры.Свойство("ЗначениеКопирования") - И (Не Параметры.Свойство("Ключ") Или Не РаботаСПочтовымиСообщениямиВызовСервера.УчетнаяЗаписьНастроена(Параметры.Ключ))) - И ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты) Тогда - ВыбраннаяФорма = "ПомощникНастройкиУчетнойЗаписи"; - СтандартнаяОбработка = Ложь; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - #Область СлужебныйПрограммныйИнтерфейс // Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, @@ -127,7 +116,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление персональных учетных записей'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление персональных учетных записей'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -140,6 +129,29 @@ #Область СлужебныеПроцедурыИФункции +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + Если ВидФормы = "ФормаОбъекта" + И Не Параметры.Свойство("ЗначениеКопирования") + И ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты) + И (Не Параметры.Свойство("Ключ") + Или Не РаботаСПочтовымиСообщениями.УчетнаяЗаписьНастроена(Параметры.Ключ, Ложь, Ложь) И ИзменениеРазрешено(Параметры.Ключ)) Тогда + + ВыбраннаяФорма = "ПомощникНастройкиУчетнойЗаписи"; + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + +Функция ИзменениеРазрешено(УчетнаяЗапись) Экспорт + Результат = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + Результат = Результат И МодульУправлениеДоступом.ИзменениеРазрешено(УчетнаяЗапись); + КонецЕсли; + Возврат Результат; +КонецФункции + Функция РазрешенияУчетныхЗаписей(УчетнаяЗапись = Неопределено) Экспорт Результат = Новый Соответствие; @@ -250,9 +262,9 @@ НайденныйПрофильSMTP = ОпределитьНастройкиSMTP(АдресЭлектроннойПочты, Пароль); КонецЕсли; - Если Параметры.ДляПолучения Тогда + Если Параметры.ДляОтправки Или Параметры.ДляПолучения Тогда НайденныйПрофильIMAP = ОпределитьНастройкиIMAP(АдресЭлектроннойПочты, Пароль); - Если НайденныйПрофильIMAP = Неопределено Тогда + Если НайденныйПрофильIMAP = Неопределено И Параметры.ДляПолучения Тогда НайденныйПрофильPOP = ОпределитьНастройкиPOP(АдресЭлектроннойПочты, Пароль); КонецЕсли; КонецЕсли; @@ -299,7 +311,7 @@ Если ОшибкаАутентификации(СообщениеСервера) Тогда Для Каждого ИмяПользователя Из ВариантыИмениПользователя(АдресЭлектроннойПочты) Цикл УстановитьИмяПользователя(Профиль, ИмяПользователя); - СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.POP3); + СообщениеСервера = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.POP3); Если Не ОшибкаАутентификации(СообщениеСервера) Тогда Прервать; КонецЕсли; @@ -324,7 +336,7 @@ Если ОшибкаАутентификации(СообщениеСервера) Тогда Для Каждого ИмяПользователя Из ВариантыИмениПользователя(АдресЭлектроннойПочты) Цикл УстановитьИмяПользователя(Профиль, ИмяПользователя); - СообщениеОбОшибке = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.IMAP); + СообщениеСервера = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.IMAP); Если Не ОшибкаАутентификации(СообщениеСервера) Тогда Прервать; КонецЕсли; @@ -349,7 +361,7 @@ Если ОшибкаАутентификации(СообщениеСервера) Тогда Для Каждого ИмяПользователя Из ВариантыИмениПользователя(АдресЭлектроннойПочты) Цикл УстановитьИмяПользователя(Профиль, ИмяПользователя); - СообщениеОбОшибке = ПроверитьПодключениеКСерверуИсходящейПочты(Профиль, АдресЭлектроннойПочты); + СообщениеСервера = ПроверитьПодключениеКСерверуИсходящейПочты(Профиль, АдресЭлектроннойПочты); Если Не ОшибкаАутентификации(СообщениеСервера) Тогда Прервать; КонецЕсли; @@ -411,7 +423,8 @@ Функция ОшибкаАутентификации(СообщениеСервера) Возврат СтрНайти(НРег(СообщениеСервера), "auth") > 0 - Или СтрНайти(НРег(СообщениеСервера), "password") > 0; + Или СтрНайти(НРег(СообщениеСервера), "password") > 0 + Или СтрНайти(НРег(СообщениеСервера), "credentials") > 0; КонецФункции Функция ПодключениеВыполнено(СообщениеСервера) @@ -492,7 +505,7 @@ ?(ПустаяСтрока(ТекстОшибки), НСтр("ru = 'OK'"), ТекстОшибки)); КонецЕсли; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , ТекстДляЖурнала); Возврат ТекстОшибки; @@ -501,8 +514,6 @@ Функция ПроверитьПодключениеКСерверуИсходящейПочты(Профиль, АдресЭлектроннойПочты) - ПараметрыПисьма = Новый Структура; - Тема = НСтр("ru = 'Тестовое сообщение 1С:Предприятие'"); Тело = НСтр("ru = 'Это сообщение отправлено подсистемой электронной почты 1С:Предприятие'"); ИмяОтправителяПисем = НСтр("ru = '1С:Предприятие'"); @@ -539,7 +550,7 @@ Профиль.ПользовательSMTP, ?(ПустаяСтрока(ТекстОшибки), НСтр("ru = 'OK'"), ТекстОшибки)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , ТекстДляЖурнала); Возврат ТекстОшибки; @@ -600,7 +611,6 @@ Функция ВариантыНастройкиПодключенияКСерверуIMAP(АдресЭлектроннойПочты) Экспорт Позиция = СтрНайти(АдресЭлектроннойПочты, "@"); - ИмяПользователяВУчетнойЗаписи = Лев(АдресЭлектроннойПочты, Позиция - 1); ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1); Результат = Новый ТаблицаЗначений; diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl index 9a66b05b6..3347ad0bd 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -22,12 +30,12 @@ МассивНепроверяемыхРеквизитов.Добавить("СерверИсходящейПочты"); КонецЕсли; - Если Не ИспользоватьДляПолучения Тогда + Если Не ИспользоватьДляПолучения И ПротоколВходящейПочты = "POP" Тогда МассивНепроверяемыхРеквизитов.Добавить("СерверВходящейПочты"); КонецЕсли; Если Не ПустаяСтрока(АдресЭлектроннойПочты) И Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Истина) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Почтовый адрес заполнен неверно.'"), ЭтотОбъект, "АдресЭлектроннойПочты"); МассивНепроверяемыхРеквизитов.Добавить("АдресЭлектроннойПочты"); Отказ = Истина; @@ -90,6 +98,10 @@ ПортСервераИсходящейПочты = 25; ПротоколВходящейПочты = "POP"; + Если Предопределенный Тогда + Наименование = НСтр("ru = 'Системная учетная запись'"); + КонецЕсли; + КонецПроцедуры Функция ПарольВведенВерно(ПроверкаПароля) @@ -116,4 +128,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo index 139c88289..a21cb1f25 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo @@ -441,7 +441,7 @@ ru - Порт POP3 (необязательное поле) + Номер порта @@ -465,7 +465,7 @@ ru - Порт SMTP (необязательное поле) + Номер порта @@ -512,7 +512,7 @@ ru - Адрес POP3 сервера + Имя хоста сервера входящей почты @@ -525,7 +525,7 @@ СерверИсходящейПочты ru - Сервер исходящей почты (SMTP) + Сервер исходящей почты String @@ -535,7 +535,7 @@ ru - Адрес SMTP сервера + Имя хоста сервера исходящей почты @@ -782,21 +782,4 @@ PersonalComputer MobileDevice
      - - ПроверитьУчетнуюЗапись - - ru - Проверить учетную запись - - FormCommandBarImportant - - CatalogRef.УчетныеЗаписиЭлектроннойПочты - - true - Auto - - ru - Выполнить проверку учетной записи - - diff --git a/SSL/src/Catalogs/Файлы/Commands/ВерсииФайла/CommandModule.bsl b/SSL/src/Catalogs/Файлы/Commands/ВерсииФайла/CommandModule.bsl new file mode 100644 index 000000000..62a433225 --- /dev/null +++ b/SSL/src/Catalogs/Файлы/Commands/ВерсииФайла/CommandModule.bsl @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Файл", ПараметрКоманды); + ПараметрыФормы.Вставить("УникальныйИдентификаторКарточкиФайла", + ПараметрыВыполненияКоманды.Источник.УникальныйИдентификатор); + + ОткрытьФорму("Справочник.ВерсииФайлов.Форма.ВерсииФайла", ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Commands/Файлы/CommandModule.bsl b/SSL/src/Catalogs/Файлы/Commands/Файлы/CommandModule.bsl index add17adc1..5ea5c1f69 100644 --- a/SSL/src/Catalogs/Файлы/Commands/Файлы/CommandModule.bsl +++ b/SSL/src/Catalogs/Файлы/Commands/Файлы/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form index 5452cd7d8..86a215e6b 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form @@ -7,6 +7,7 @@ ГруппаПользовательскихНастроек 349 + VeryLow true true @@ -14,7 +15,7 @@ <key>ru</key> - <value>Группа пользовательских настроек</value> + <value>Настройки</value> ГруппаПользовательскихНастроекРасширеннаяПодсказка @@ -38,11 +39,2543 @@ - КоманднаяПанель - 353 + ГруппаПапкиИФайлыОбщая + 406 + VeryLow + + ГруппаПапкиИФайлы + 29 + VeryHigh + + Папки + 24 + + <key>ru</key> + <value>Папки</value> + + true + true + + true + + + Папки + + false + None + Delete + ListSettings + OutputList + Refresh + + ПапкиНаименование + 27 + + <key>ru</key> + <value>Папки</value> + + 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 + VeryHigh + + <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 + VeryHigh + true + true + + true + + + ПапкиКонтекстноеМенюИзменитьРасширеннаяПодсказка + 249 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюСкопировать + 250 + VeryHigh + true + true + + true + + + ПапкиКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 251 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюУстановитьПометкуУдаления + 234 + VeryHigh + true + true + + true + + + ПапкиКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка + 235 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюСтандартные + 139 + Usual + + ПапкиКонтекстноеМенюПеренестиЭлемент + 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> + + + ПапкиКонтекстноеМенюСтандартныеExtendedTooltip + 177 + Label + true + true + + Left + + + + Item.Папки + + + + ПапкиКонтекстноеМенюГруппаИмпорт + 114 + Low + + ПапкиКонтекстноеМенюИмпортПапки + 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 + + Left + + + + + + ПапкиКонтекстноеМенюКопироватьВБуферОбмена + 141 + VeryLow + 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 + SelectionPresentation + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + + + + ГруппаФайлыИПоиск + 396 + VeryHigh + + ГруппаПояснениеОблачногоСервиса + 414 + VeryHigh + + ДекорацияКартинкаОблачногоСервиса + 416 + + <key>ru</key> + <value>Декорация картинка облачного сервиса</value> + + true + true + + true + + + ДекорацияКартинкаОблачногоСервисаРасширеннаяПодсказка + 418 + Label + true + true + + Left + + + + ДекорацияКартинкаОблачногоСервисаКонтекстноеМеню + 417 + true + + true + + + CommonPicture.ПапкаОблачногоСервиса + + + + + ДекорацияПояснение + 419 + + <key>ru</key> + <value>Работа с файлами этой папки ведется в облачном сервисе <link 1>%</>1. +</value> + + true + true + + true + + Button + + ДекорацияПояснениеРасширеннаяПодсказка + 421 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 420 + true + + true + Label + true + + Left + + + + ДекорацияКартинкаОшибкаСинхронизации + 422 + + <key>ru</key> + <value>Неудачная синхронизация файлов</value> + + true + true + + true + + + ДекорацияКартинкаОшибкаСинхронизацииРасширеннаяПодсказка + 424 + Label + true + true + + Left + + + + ДекорацияКартинкаОшибкаСинхронизацииКонтекстноеМеню + 423 + true + + true + true + + + CommonPicture.Предупреждение + + + + + ДекорацияДатаСинхронизации + 425 + + <key>ru</key> + <value>Синхронизировано: %2 </value> + + true + true + + true + + + ru + Последняя синхронизация файлов не удалась из-за возможных проблем с облачным сервисом, подключением к интернету или других проблем. Подробнее см. Журнал регистрации. + + Button + + ДекорацияДатаСинхронизацииРасширеннаяПодсказка + 427 + Label + true + true + + Left + + + + ДекорацияДатаСинхронизацииКонтекстноеМеню + 426 + true + + true + Label + true + true + + + URLProcessing + ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Пояснение облачного сервиса</value> + + + ГруппаПояснениеОблачногоСервисаРасширеннаяПодсказка + 415 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Center + Auto + true + true + Auto + Auto + + + + Список + 6 + + <key>ru</key> + <value>Файлы</value> + + true + true + + true + + + Список + + true + false + None + Delete + ListSettings + OutputList + Refresh + None + + СписокНомерКартинкиПодписанЗашифрован + 117 + VeryLow + + <key>ru</key> + <value>Номер картинки подписан зашифрован</value> + + 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 + VeryHigh + + СписокИндексКартинки + 7 + VeryHigh + + <key>ru</key> + <value>Индекс картинки</value> + + 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 + VeryHigh + + <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 + VeryHigh + + <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> + + None + + СписокГруппаИмяКартинкаОписаниеРасширеннаяПодсказка + 311 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокВажныеРеквизиты + 277 + Usual + + СписокДатаИзменения + 143 + VeryLow + + <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 + + + + СписокОтредактировал + 411 + VeryLow + true + true + + true + + + Список.Отредактировал + + + СписокОтредактировалРасширеннаяПодсказка + 413 + Label + true + true + + Left + + + + СписокОтредактировалКонтекстноеМеню + 412 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Список важные реквизиты</value> + + None + + СписокВажныеРеквизитыРасширеннаяПодсказка + 278 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + СписокТекущаяВерсияРазмер + 88 + VeryLow + + <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 + + + + + СписокАвтор + 279 + VeryLow + 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 + + + + СписокДатаСоздания + 282 + VeryLow + true + true + + + Список.ДатаСоздания + + + СписокДатаСозданияРасширеннаяПодсказка + 284 + Label + true + true + + Left + + + + СписокДатаСозданияКонтекстноеМеню + 283 + true + + LabelField + true + Enter + true + Left + true + + 15 + true + true + false + + + + СписокРедактирует + 272 + Usual + true + true + + + Список.Редактирует + + + СписокРедактируетРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + + СписокРедактируетКонтекстноеМеню + 273 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокСсылка + 115 + VeryLow + 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 + + Left + + + + СписокКонтекстноеМеню + 4 + + СписокКонтекстноеМенюСоздать + 96 + VeryHigh + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + false + + СписокКонтекстноеМенюСоздатьРасширеннаяПодсказка + 185 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюИзменить + 242 + VeryHigh + + <key>ru</key> + <value>Открыть карточку</value> + + true + true + + true + + + СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюПеренестиВПапку + 83 + VeryHigh + true + true + + true + + false + + СписокКонтекстноеМенюПеренестиВПапкуРасширеннаяПодсказка + 195 + Label + true + true + + Left + + + Form.Command.ПеренестиВПапку + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюГруппаКомандОсновные + 306 + High + + СписокКонтекстноеМенюОткрыть + 65 + true + true + + true + + false + + СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + Form.Command.ОткрытьФайл + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюЗанять + 68 + true + 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 + + <key>ru</key> + <value>Закончить редактирование</value> + + 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> + + + СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка + 307 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование + 130 + Usual + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись + 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> + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка + 200 + Label + true + true + + Left + + + Popup + + + CommonPicture.ПодписанЗашифрованЗаголовок + + Auto + Normal + + + + СписокКонтекстноеМенюГруппаКомандДополнительные + 308 + Low + + СписокКонтекстноеМенюСкопировать + 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 + VeryLow + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа стандартных команд</value> + + + СписокКонтекстноеМенюГруппаСтандартныхКомандРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + Item.Список + + + + Tree + true + true + 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 + + true + ГруппаПользовательскихНастроек + +
      + true + true + + true + + + <key>ru</key> + <value>Файлы</value> + + 55 + + ГруппаФайлыИПоискРасширеннаяПодсказка + 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 + + + <key>ru</key> + <value>Папки и файлы</value> + + + ГруппаПапкиИФайлыРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + +
      + true + true + + true + + + <key>ru</key> + <value>Папки и файлы</value> + + + ГруппаПапкиИФайлыОбщаяРасширеннаяПодсказка + 407 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
      + + ФормаКоманднаяПанель + -1 ФормаПодменюСоздать 228 + VeryHigh ФормаСоздатьИзФайла 87 @@ -150,21 +2683,83 @@ StdPicture.CreateListItem + Auto Normal - - ФормаИмпортФайлов - 347 + + ФормаГруппаИмпорт + 436 + Usual + + ФормаИмпортФайлов + 347 + High + true + true + + true + + false + + ФормаИмпортФайловРасширеннаяПодсказка + 348 + Label + true + true + + Left + + + Form.Command.ИмпортФайлов + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаИмпортПапки + 377 + High + true + true + + true + + + ФормаИмпортПапкиРасширеннаяПодсказка + 378 + Label + true + true + + Left + + + Form.Command.ИмпортПапки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true true - false + + <key>ru</key> + <value>Импорт</value> + - ФормаИмпортФайловРасширеннаяПодсказка - 348 + ФормаГруппаИмпортРасширеннаяПодсказка + 437 Label true true @@ -172,45 +2767,12 @@ Left - Form.Command.ИмпортФайлов - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаИмпортПапки - 377 - true - true - - true - - - ФормаИмпортПапкиРасширеннаяПодсказка - 378 - Label - true - true - - Left - - - Form.Command.ИмпортПапки - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu + ФормаСоздатьПапку 86 + VeryLow <key>ru</key> <value>Создать папку</value> @@ -245,6 +2807,7 @@ <items xsi:type="form:Button"> <name>ФормаИзменить</name> <id>238</id> + <displayImportance>VeryHigh</displayImportance> <title> <key>ru</key> <value>Открыть карточку</value> @@ -270,11 +2833,12 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> + <representationInContextMenu>AdditionalInContextMenu</representationInContextMenu> </items> <items xsi:type="form:Button"> <name>ФормаПеренестиВПапку</name> <id>84</id> + <displayImportance>Usual</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -297,12 +2861,13 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> + <representationInContextMenu>AdditionalInContextMenu</representationInContextMenu> <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> </items> <items xsi:type="form:FormGroup"> <name>ФормаГруппаКомандОсновные</name> <id>302</id> + <displayImportance>Usual</displayImportance> <items xsi:type="form:Button"> <name>ФормаОткрыть</name> <id>73</id> @@ -327,7 +2892,7 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> + <representationInContextMenu>AdditionalInContextMenu</representationInContextMenu> </items> <items xsi:type="form:Button"> <name>ФормаЗанять</name> @@ -354,7 +2919,7 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> + <representationInContextMenu>AdditionalInContextMenu</representationInContextMenu> <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> </items> <items xsi:type="form:Button"> @@ -436,33 +3001,6 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> - <items xsi:type="form:Button"> - <name>Предпросмотр</name> - <id>388</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ПредпросмотрРасширеннаяПодсказка</name> - <id>389</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>383</id> @@ -543,6 +3081,7 @@ <items xsi:type="form:FormGroup"> <name>ФормаГлобальныеКоманды</name> <id>323</id> + <displayImportance>Usual</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -570,6 +3109,7 @@ <items xsi:type="form:FormGroup"> <name>ФормаГруппаКомандЭлектроннаяПодписьИШифрование</name> <id>129</id> + <displayImportance>VeryLow</displayImportance> <items xsi:type="form:FormGroup"> <name>ФормаГруппаКомандЭлектроннаяПодпись</name> <id>355</id> @@ -782,7 +3322,109 @@ </items> <items xsi:type="form:FormGroup"> <name>ФормаГруппаКомандДополнительные</name> - <id>304</id> + <id>434</id> + <displayImportance>VeryLow</displayImportance> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Форма группа команд дополнительные</value> + + + ФормаГруппаКомандДополнительныеРасширеннаяПодсказка + 435 + Label + true + true + + Left + + + + + + ФормаГруппаКомандПоиска + 321 + Low + + ФормаНайти + 317 + true + + true + + + ФормаНайтиРасширеннаяПодсказка + 318 + Label + true + true + + Left + + + Form.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтменитьПоиск + 319 + true + + true + + + ФормаОтменитьПоискРасширеннаяПодсказка + 320 + Label + true + true + + Left + + + Form.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды поиска</value> + + None + + ФормаГруппаКомандПоискаРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + + + + ФормаГруппаДополнительно + 315 + Low ФормаИзменить82 327 @@ -1014,86 +3656,16 @@ <key>ru</key> - <value>Форма группа команд дополнительные</value> + <value>Дополнительно</value> - - ФормаГруппаКомандДополнительныеРасширеннаяПодсказка - 305 - Label - true - true - - Left - - - - - - ФормаГруппаКомандПоиска - 321 - - ФормаНайти - 317 - true - - true - - - ФормаНайтиРасширеннаяПодсказка - 318 - Label - true - true - - Left - - - Form.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ФормаОтменитьПоиск - 319 - true - - true - - - ФормаОтменитьПоискРасширеннаяПодсказка - 320 - Label - true - true - - Left - - - Form.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - + <toolTip> <key>ru</key> - <value>Команды поиска</value> - + Дополнительные команды + None - ФормаГруппаКомандПоискаРасширеннаяПодсказка - 322 + ФормаГруппаДополнительноРасширеннаяПодсказка + 316 Label true true @@ -1101,11 +3673,16 @@ Left - + Popup + + Auto + Normal + - ФормаГруппаДополнительно - 315 + ФормаГруппаНастройки + 430 + VeryLow ФормаОбновитьСписок 142 @@ -1352,16 +3929,11 @@ <key>ru</key> - <value>Дополнительно</value> + <value>Настройки</value> - - ru - Дополнительные команды - - None - ФормаГруппаДополнительноРасширеннаяПодсказка - 316 + ФормаГруппаНастройкиРасширеннаяПодсказка + 431 Label true true @@ -1375,35 +3947,10 @@ Normal - - ФормаСправка - 147 - true - true - - true - - - ФормаСправкаExtendedTooltip - 172 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - ГруппаКомандФормы 381 + Low true true @@ -1427,2485 +3974,18 @@ Form - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - КоманднаяПанельРасширеннаяПодсказка - 354 - Label - true - true - - Left - - - CommandBar - - Left - - - - ГруппаПапкиИФайлыОбщая - 406 - - ГруппаПапкиИФайлы - 29 - VeryHigh - - Папки - 24 - - <key>ru</key> - <value>Папки</value> - - true - true - - true - - - Папки - - false - None - Delete - ListSettings - OutputList - Refresh - - ПапкиНаименование - 27 - - <key>ru</key> - <value>Папки</value> - - 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> - - - ПапкиКонтекстноеМенюСтандартные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 - - 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 - SelectionPresentationAndChoice - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true - - - - ГруппаФайлыИПоиск - 396 - - ГруппаПояснениеОблачногоСервиса - 414 - - ДекорацияКартинкаОблачногоСервиса - 416 - - <key>ru</key> - <value>Декорация картинка облачного сервиса</value> - - true - true - - true - - - ДекорацияКартинкаОблачногоСервисаРасширеннаяПодсказка - 418 - Label - true - true - - Left - - - - ДекорацияКартинкаОблачногоСервисаКонтекстноеМеню - 417 - true - - true - - - CommonPicture.ПапкаОблачногоСервиса - - - - - ДекорацияПояснение - 419 - - <key>ru</key> - <value>Работа с файлами этой папки ведется в облачном сервисе <link 1>%</>1. -</value> - - true - true - - true - - Button - - ДекорацияПояснениеРасширеннаяПодсказка - 421 - Label - true - true - - Left - - - - ДекорацияПояснениеКонтекстноеМеню - 420 - true - - true - Label - true - - Left - - - - ДекорацияКартинкаОшибкаСинхронизации - 422 - - <key>ru</key> - <value>Неудачная синхронизация файлов</value> - - true - true - - true - - - ДекорацияКартинкаОшибкаСинхронизацииРасширеннаяПодсказка - 424 - Label - true - true - - Left - - - - ДекорацияКартинкаОшибкаСинхронизацииКонтекстноеМеню - 423 - true - - true - true - - - CommonPicture.Предупреждение - - - - - ДекорацияДатаСинхронизации - 425 - - <key>ru</key> - <value>Синхронизировано: %2 </value> - - true - true - - true - - - ru - Последняя синхронизация файлов не удалась из-за возможных проблем с облачным сервисом, подключением к интернету или других проблем. Подробнее см. Журнал регистрации. - - Button - - ДекорацияДатаСинхронизацииРасширеннаяПодсказка - 427 - Label - true - true - - Left - - - - ДекорацияДатаСинхронизацииКонтекстноеМеню - 426 - true - - true - Label - true - true - - - URLProcessing - ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Пояснение облачного сервиса</value> - - - ГруппаПояснениеОблачногоСервисаРасширеннаяПодсказка - 415 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Center - Auto - true - true - Auto - Auto - - - - Список - 6 - - <key>ru</key> - <value>Файлы</value> - - true - true - - true - - - Список - - true - false - None - Delete - ListSettings - OutputList - Refresh - None - - СписокНомерКартинкиПодписанЗашифрован - 117 - - <key>ru</key> - <value>Номер картинки подписан зашифрован</value> - - 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 - - <key>ru</key> - <value>Индекс картинки</value> - - 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> - - None - - СписокГруппаИмяКартинкаОписаниеРасширеннаяПодсказка - 311 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СписокВажныеРеквизиты - 277 - - СписокДатаИзменения - 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 - - - - СписокОтредактировал - 411 - - <key>ru</key> - <value>Изменил</value> - - true - true - - true - - - Список.Отредактировал - - - СписокОтредактировалРасширеннаяПодсказка - 413 - Label - true - true - - Left - - - - СписокОтредактировалКонтекстноеМеню - 412 - true - - LabelField - Enter - true - Left - true - - true - true - - - true - true - - true - - - <key>ru</key> - <value>Список важные реквизиты</value> - - 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 - - - - - СписокАвтор - 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 - - - - СписокДатаСоздания - 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 - - - - СписокСсылка - 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 - - Left - - - - СписокКонтекстноеМеню - 4 - - СписокКонтекстноеМенюСоздать - 96 - - <key>ru</key> - <value>Добавить</value> - - 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 - - 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> - - - СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка - 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> - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка - 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 - 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 - - true - ГруппаПользовательскихНастроек - -
      - true - true - - true - - - <key>ru</key> - <value>Файлы</value> - - 55 - - ГруппаФайлыИПоискРасширеннаяПодсказка - 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 - - - + + Предпросмотр + 388 + Low true true true - - <key>ru</key> - <value>Папки и файлы</value> - - ГруппаПапкиИФайлыРасширеннаяПодсказка - 175 + ПредпросмотрРасширеннаяПодсказка + 389 Label true true @@ -3913,48 +3993,70 @@ Left - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Папки и файлы</value> - - - ГруппаПапкиИФайлыОбщаяРасширеннаяПодсказка - 407 - Label + Form.Command.Предпросмотр + Normal + Auto true true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - -
      - - ФормаКоманднаяПанель - -1 + UserCmds + Auto + InAdditionalSubmenu +
      + + ПоказыватьСлужебныеФайлы + 432 + VeryLow + true + true + + true + + + ПоказыватьСлужебныеФайлыРасширеннаяПодсказка + 433 + Label + true + true + + Left + + + Form.Command.ПоказыватьСлужебныеФайлы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаСправка + 147 + VeryLow + true + true + + true + + + ФормаСправкаExtendedTooltip + 172 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left
      @@ -4032,6 +4134,9 @@ Список.Редактирует + + Список.Служебный + Список.ФайлРедактируетТекущийПользователь @@ -4085,6 +4190,7 @@ ИНАЧЕ -1 КОНЕЦ КАК НомерКартинкиПодписанЗашифрован, ДОБАВИТЬКДАТЕ(Файлы.ДатаМодификацииУниверсальная, СЕКУНДА, &СекундДоМестногоВремени) КАК ДатаИзменения, + Файлы.Служебный КАК Служебный, КодировкиФайлов.Кодировка ИЗ Справочник.Файлы КАК Файлы @@ -4529,7 +4635,9 @@ ЭкспортПапкиВыполнить - DontUse + + Папки + Auto @@ -4602,7 +4710,9 @@ Text - DontUse + + Список + Auto @@ -4628,7 +4738,9 @@ TextPicture - DontUse + + Список + Auto @@ -4654,7 +4766,9 @@ TextPicture - DontUse + + Список + Auto @@ -4677,7 +4791,9 @@ TextPicture - DontUse + + Список + Auto @@ -4703,7 +4819,9 @@ TextPicture - DontUse + + Список + Auto @@ -4730,7 +4848,9 @@ TextPicture - DontUse + + Список + Auto @@ -4756,7 +4876,9 @@ TextPicture - DontUse + + Список + Auto @@ -4782,7 +4904,9 @@ TextPicture - DontUse + + Список + Auto @@ -4826,7 +4950,9 @@ ПеренестиВПапку - DontUse + + Список + Auto @@ -4852,7 +4978,9 @@ Text - DontUse + + Список + Auto @@ -4899,7 +5027,9 @@ Подписать - DontUse + + Список + Auto @@ -4924,7 +5054,9 @@ Зашифровать - DontUse + + Список + Auto @@ -4946,7 +5078,9 @@ Расшифровать - DontUse + + Список + Auto @@ -4968,7 +5102,9 @@ ДобавитьПодписьИзФайла - DontUse + + Список + Auto @@ -4990,7 +5126,9 @@ СохранитьВместеСПодписью - DontUse + + Список + Auto @@ -5086,7 +5224,9 @@ TextPicture - DontUse + + Список + Auto @@ -5112,7 +5252,9 @@ TextPicture - DontUse + + Список + Auto @@ -5182,6 +5324,28 @@ DontUse Auto + + ПоказыватьСлужебныеФайлы + + <key>ru</key> + <value>Показывать служебные файлы</value> + + 30 + + ru + Показывать служебные файлы + + + true + + + + ПоказыватьСлужебныеФайлы + + + Auto + Auto + diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html index 275ccdad7..3be7dbeda 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html @@ -18,16 +18,16 @@
      • Выберите нужную папку; 
      • -
        Нажмите Создать (клавишу Insert);
        +
        Нажмите Добавить (клавишу Insert);
      • Выберите способ создания: 
        • -
          Из файла на диске
          +
          Файл с диска
          • Для того чтобы прикрепить к объекту или поместить в папку уже имеющийся на компьютере файл, укажите путь к файлу на диске, нажмите кнопку Открыть.
          • После этого программа сохранит файл, автоматически создаст и откроет Карточку файла.
        • -
          Из шаблона
          +
          По шаблону
          • Выделите шаблон файла в списке выбора, затем нажмите кнопку Выбрать.
          • @@ -42,7 +42,7 @@
          • После того как документ отсканирован, выполните команду Принять, после этого файлу автоматически присваивается код и создается карточка файла, которая выводится на экран. В поле Наименование также автоматически проставляется код. Отредактируйте нужные поля, нажмите Записать и закрыть, для того чтобы сохранить карточку файла.

      Шаблоны файлов

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

      Размещение файлов в папках

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

        Выгрузка папок

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

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

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

        См. также:

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

        См. также:

        \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl index 040154a00..5bff33fe7 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -5,8 +12,11 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УсловноеОформление.Элементы.Очистить(); - РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьУсловноеОформлениеСпискаФайлов(Список); - РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьУсловноеОформлениеСпискаПапок(Папки); + РаботаСФайламиСлужебный.ЗаполнитьУсловноеОформлениеСпискаФайлов(Список); + РаботаСФайламиСлужебный.ЗаполнитьУсловноеОформлениеСпискаПапок(Папки); + РаботаСФайламиСлужебный.ДобавитьОтборыВСписокФайлов(Список); + + Элементы.ПоказыватьСлужебныеФайлы.Видимость = Пользователи.ЭтоПолноправныйПользователь(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -33,10 +43,15 @@ Элементы.Папки.ТекущаяСтрока = ПапкаПриОткрытии; + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + Если ТипЗнч(ТекущийПользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + РаботаСФайламиСлужебный.ИзменитьФормуДляВнешнегоПользователя(ЭтотОбъект, Истина); + КонецЕсли; + Список.Параметры.УстановитьЗначениеПараметра( "Владелец", ПапкаПриОткрытии); Список.Параметры.УстановитьЗначениеПараметра( - "ТекущийПользователь", Пользователи.ТекущийПользователь()); + "ТекущийПользователь", ТекущийПользователь); ПустыеПользователи = Новый Массив; ПустыеПользователи.Добавить(Неопределено); @@ -46,7 +61,7 @@ Список.Параметры.УстановитьЗначениеПараметра( "ПустыеПользователи", ПустыеПользователи); - ПоказыватьКолонкуРазмер = РаботаСФайламиСлужебныйВызовСервера.ПолучитьПоказыватьКолонкуРазмер(); + ПоказыватьКолонкуРазмер = РаботаСФайламиСлужебный.ПолучитьПоказыватьКолонкуРазмер(); Если ПоказыватьКолонкуРазмер = Ложь Тогда Элементы.СписокТекущаяВерсияРазмер.Видимость = Ложь; КонецЕсли; @@ -79,18 +94,17 @@ ИспользоватьСинхронизациюФайлов = ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов"); Элементы.ПапкиКонтекстноеМенюНастроитьСинхронизацию.Видимость = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов); - Элементы.Сравнить.Видимость = Не ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() - И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); + Элементы.Сравнить.Видимость = Не ОбщегоНазначения.ЭтоLinuxКлиент() + И Не ОбщегоНазначения.ЭтоВебКлиент(); ДатаУниверсальная = ТекущаяДатаСеанса(); Список.Параметры.УстановитьЗначениеПараметра("СекундДоМестногоВремени", МестноеВремя(ДатаУниверсальная, ЧасовойПоясСеанса()) - ДатаУниверсальная); - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаОткрытьКаталогФайла", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СписокКонтекстноеМенюОткрытьКаталогФайла", "Видимость", Ложь); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Папки.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; + Элементы.ФормаПодменюСоздать.Отображение = ОтображениеКнопки.Картинка; + Элементы.ФормаСоздатьСоСканера.Заголовок = НСтр("ru = 'С камеры устройства...'"); КонецЕсли; КонецПроцедуры @@ -102,6 +116,10 @@ УстановитьДоступностьФайловыхКоманд(); +#Если МобильныйКлиент Тогда + УстановитьЗаголовокДереваПапок(); +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -211,7 +229,7 @@ СтандартнаяОбработка = Ложь; - КакОткрывать = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ДействиеПоДвойномуЩелчкуМыши; + КакОткрывать = РаботаСФайламиСлужебныйКлиент.ПерсональныеНастройкиРаботыСФайлами().ДействиеПоДвойномуЩелчкуМыши; Если КакОткрывать = "ОткрыватьКарточку" Тогда ПоказатьЗначение(, ВыбраннаяСтрока); @@ -225,7 +243,7 @@ ПараметрыОбработчика.Вставить("ДанныеФайла", ДанныеФайла); Обработчик = Новый ОписаниеОповещения("СписокВыборПослеВыбораРежимаРедактирования", ЭтотОбъект, ПараметрыОбработчика); - РаботаСФайламиСлужебныйКлиент.ВыбратьРежимИРедактироватьФайл(Обработчик, ДанныеФайла, Истина); + РаботаСФайламиСлужебныйКлиент.ВыбратьРежимИРедактироватьФайл(Обработчик, ДанныеФайла, Не ДанныеФайла.Служебный); КонецПроцедуры @@ -295,6 +313,11 @@ ПодключитьОбработчикОжидания("УстановитьВидимостьПоясненияСинхронизацииФайлов", 0.1, Истина); КонецЕсли; +#Если МобильныйКлиент Тогда + ПодключитьОбработчикОжидания("УстановитьЗаголовокДереваПапок", 0.1, Истина); + ТекущийЭлемент = Элементы.Список; +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -562,7 +585,7 @@ Отказ = Истина; ПараметрыОткрытияФормы = Новый Структура("Ключ, ПараметрыОтправки", Элемент.ТекущаяСтрока, ПараметрыОтправки); - ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыОткрытияФормы); + ОткрытьФорму("Справочник.Файлы.Форма.ФормаЭлемента", ПараметрыОткрытияФормы); КонецПроцедуры @@ -686,9 +709,7 @@ Возврат; КонецЕсли; - СистемнаяИнфо = Новый СистемнаяИнформация; - Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86 - И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'")); Возврат; КонецЕсли; @@ -757,6 +778,14 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПоказыватьСлужебныеФайлы(Команда) + + Элементы.ПоказыватьСлужебныеФайлы.Пометка = + РаботаСФайламиСлужебныйКлиент.ПоказыватьСлужебныеФайлыНажатие(Список); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1183,6 +1212,14 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьЗаголовокДереваПапок() + + Элементы.Папки.Заголовок = ?(Элементы.Папки.ТекущиеДанные = Неопределено, "", + Элементы.Папки.ТекущиеДанные.Наименование); + +КонецПроцедуры + &НаСервереБезКонтекста Функция СведенияОСинхронизации(ВладелецФайла) @@ -1256,12 +1293,7 @@ ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные <> Неопределено И ТипЗнч(Элементы.Список.ТекущаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - - УстановитьДоступностьКоманд( - ТекущиеДанные.ФайлРедактируетТекущийПользователь, - ТекущиеДанные.Редактирует, - ТекущиеДанные.ПодписанЭП, - ТекущиеДанные.Зашифрован); + УстановитьДоступностьКоманд(ТекущиеДанные); Иначе СделатьКомандыНедоступными(); КонецЕсли; @@ -1325,7 +1357,13 @@ КонецПроцедуры &НаКлиенте -Процедура УстановитьДоступностьКоманд(РедактируетТекущийПользователь, Редактирует, ПодписанЭП, Зашифрован) +Процедура УстановитьДоступностьКоманд(ДанныеКоманд) + + Служебный = ДанныеКоманд.Служебный; + Зашифрован = ДанныеКоманд.Зашифрован; + ПодписанЭП = ДанныеКоманд.ПодписанЭП; + Редактирует = ДанныеКоманд.Редактирует; + РедактируетТекущийПользователь = ДанныеКоманд.ФайлРедактируетТекущийПользователь; РедактируетДругой = ЗначениеЗаполнено(Редактирует) И НЕ РедактируетТекущийПользователь; @@ -1338,11 +1376,11 @@ Элементы.ФормаОсвободить.Доступность = ИзменениеФайлов И ЗначениеЗаполнено(Редактирует) И Не ФайлыРедактируютсяВОблачномСервисе;; Элементы.СписокКонтекстноеМенюОсвободить.Доступность = ИзменениеФайлов И ЗначениеЗаполнено(Редактирует) И Не ФайлыРедактируютсяВОблачномСервисе;; - Элементы.ФормаЗанять.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ ПодписанЭП; - Элементы.СписокКонтекстноеМенюЗанять.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ ПодписанЭП; + Элементы.ФормаЗанять.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ ПодписанЭП И НЕ Служебный; + Элементы.СписокКонтекстноеМенюЗанять.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ ПодписанЭП И НЕ Служебный; - Элементы.ФормаРедактировать.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И НЕ РедактируетДругой; - Элементы.СписокКонтекстноеМенюРедактировать.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И НЕ РедактируетДругой; + Элементы.ФормаРедактировать.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И НЕ РедактируетДругой И НЕ Служебный; + Элементы.СписокКонтекстноеМенюРедактировать.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И НЕ РедактируетДругой И НЕ Служебный; Элементы.ФормаПеренестиВПапку.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И Не ФайлыРедактируютсяВОблачномСервисе; Элементы.СписокКонтекстноеМенюПеренестиВПапку.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И Не ФайлыРедактируютсяВОблачномСервисе; @@ -1353,8 +1391,8 @@ Элементы.ФормаСохранитьВместеСПодписью.Доступность = ПодписанЭП; Элементы.СписокКонтекстноеМенюСохранитьВместеСПодписью.Доступность = ПодписанЭП; - Элементы.ФормаЗашифровать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ Зашифрован; - Элементы.СписокКонтекстноеМенюЗашифровать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ Зашифрован; + Элементы.ФормаЗашифровать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ Зашифрован И НЕ Служебный; + Элементы.СписокКонтекстноеМенюЗашифровать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ Зашифрован И НЕ Служебный; Элементы.ФормаРасшифровать.Доступность = ИзменениеФайлов И Зашифрован; Элементы.СписокКонтекстноеМенюРасшифровать.Доступность = ИзменениеФайлов И Зашифрован; diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form index 8f6d60934..0c2eaf87e 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Form.form @@ -37,206 +37,12 @@ Auto - - КоманднаяПанель - 83 - - Выбрать - 35 - true - true - - true - - false - - ВыбратьExtendedTooltip - 46 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Choose - Auto - true - true - true - UserCmds - Auto - - - ДобавитьФайл - 64 - - <key>ru</key> - <value>Добавить файл</value> - - true - true - - true - - - ДобавитьФайлExtendedTooltip - 65 - Label - true - true - - Left - - - Form.Command.ДобавитьФайл - Normal - true - true - UserCmds - Auto - - - Изменить - 33 - - <key>ru</key> - <value>Открыть карточку</value> - - true - true - - true - - false - - ИзменитьExtendedTooltip - 47 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - ИзменитьФорму - 69 - true - true - - true - - - ИзменитьФормуРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - - Обновить - 81 - true - true - - true - - - ОбновитьРасширеннаяПодсказка - 82 - Label - true - true - - Left - - - Form.StandardCommand.Refresh - Normal - Auto - true - true - UserCmds - Auto - - - Справка - 30 - true - true - - true - - false - - СправкаExtendedTooltip - 48 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - КоманднаяПанельРасширеннаяПодсказка - 84 - Label - true - true - - Left - - - CommandBar - - Left - - ГруппаСписки 29 Папки 11 - VeryHigh <key>ru</key> <value>Папки</value> @@ -539,6 +345,7 @@ <searchStringLocation>None</searchStringLocation> <viewStatusLocation>None</viewStatusLocation> <searchControlLocation>None</searchControlLocation> + <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> @@ -553,7 +360,6 @@ <items xsi:type="form:Table"> <name>Список</name> <id>2</id> - <displayImportance>VeryHigh</displayImportance> <title> <key>ru</key> <value>Список</value> @@ -575,6 +381,7 @@ <items xsi:type="form:FormField"> <name>СписокНомерКартинкиПодписанЗашифрован</name> <id>41</id> + <displayImportance>VeryLow</displayImportance> <title> <key>ru</key> <value>Номер картинки</value> @@ -633,6 +440,7 @@ <items xsi:type="form:FormGroup"> <name>СписокГруппаКартинкаИНаименование</name> <id>34</id> + <displayImportance>VeryHigh</displayImportance> <items xsi:type="form:FormField"> <name>СписокИндексКартинки</name> <id>25</id> @@ -806,6 +614,7 @@ <items xsi:type="form:FormField"> <name>СписокАвтор</name> <id>21</id> + <displayImportance>Usual</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -852,6 +661,7 @@ <items xsi:type="form:FormField"> <name>СписокДатаСоздания</name> <id>23</id> + <displayImportance>Usual</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -898,6 +708,7 @@ <items xsi:type="form:FormField"> <name>СписокСсылка</name> <id>39</id> + <displayImportance>VeryLow</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible/> @@ -1207,18 +1018,193 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> - <commandBarLocation>None</commandBarLocation> - <showCommandBar>false</showCommandBar> + <commandBarLocation>Top</commandBarLocation> + <showCommandBar>true</showCommandBar> <autoCommandBar> <name>ФормаКоманднаяПанель</name> <id>-1</id> + <items xsi:type="form:Button"> + <name>Выбрать</name> + <id>35</id> + <displayImportance>VeryLow</displayImportance> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <skipOnInput>false</skipOnInput> + <extendedTooltip> + <name>ВыбратьExtendedTooltip</name> + <id>46</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Item.Список.StandardCommand.Choose</commandName> + <representation>Auto</representation> + <defaultButton>true</defaultButton> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ДобавитьФайл</name> + <id>64</id> + <displayImportance>VeryHigh</displayImportance> + <title> + <key>ru</key> + <value>Добавить файл</value> + + true + true + + true + + + ДобавитьФайлExtendedTooltip + 65 + Label + true + true + + Left + + + Form.Command.ДобавитьФайл + Normal + true + true + UserCmds + Auto + + + Изменить + 33 + VeryLow + + <key>ru</key> + <value>Открыть карточку</value> + + true + true + + true + + false + + ИзменитьExtendedTooltip + 47 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ИзменитьФорму + 69 + VeryLow + true + true + + true + + + ИзменитьФормуРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + Обновить + 81 + VeryLow + true + true + + true + + + ОбновитьРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + Form.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 30 + VeryLow + true + true + + true + + false + + СправкаExtendedTooltip + 48 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left - true NotificationProcessing ОбработкаОповещения + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl index 87fe14ade..21110f2b7 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -44,9 +51,12 @@ ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере(); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Папки.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; + КонецЕсли; + КонецПроцедуры - &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -79,13 +89,29 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + +#Если МобильныйКлиент Тогда + УстановитьЗаголовокДереваПапок(); +#КонецЕсли + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыПапки &НаКлиенте Процедура ПапкиПриАктивизацииСтроки(Элемент) + ПодключитьОбработчикОжидания("ОбработкаОжидания", 0.2, Истина); + +#Если МобильныйКлиент Тогда + ПодключитьОбработчикОжидания("УстановитьЗаголовокДереваПапок", 0.1, Истина); + ТекущийЭлемент = Элементы.Список; +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -156,6 +182,14 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьЗаголовокДереваПапок() + + Элементы.Папки.Заголовок = ?(Элементы.Папки.ТекущиеДанные = Неопределено, "", + Элементы.Папки.ТекущиеДанные.Наименование); + +КонецПроцедуры + &НаСервере Процедура ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере() diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Module.bsl index 36612e82f..291b10603 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl index eb55ad223..452895151 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -87,13 +94,13 @@ КонецЦикла; Если ВыбранныеФайлы.Количество() = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Нет файлов для добавления.'"), , "ВыбранныеФайлы"); ПоляНеЗаполнены = Истина; КонецЕсли; Если ПапкаДляДобавления.Пустая() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите папку.'"), , "ПапкаДляДобавления"); ПоляНеЗаполнены = Истина; КонецЕсли; diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form index a02c1ce90..68371547b 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Form.form @@ -7,6 +7,7 @@ ГруппаПользовательскихНастроек 61 + High true true @@ -37,87 +38,6 @@ Auto - - КоманднаяПанель - 63 - - Выбрать - 39 - true - true - - true - - false - - ВыбратьExtendedTooltip - 43 - Label - true - true - - Left - - - Form.StandardCommand.Choose - Auto - true - true - true - UserCmds - Auto - - - Справка - 40 - true - true - - true - - false - - СправкаExtendedTooltip - 44 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - КоманднаяПанельРасширеннаяПодсказка - 64 - Label - true - true - - Left - - - CommandBar - - Left - - ГруппаСписки 29 @@ -137,7 +57,7 @@ Папки false - None + Top КартинкаИНаименованиеПапок 36 @@ -425,6 +345,7 @@ None None None + SelectionPresentation true 60 @@ -457,6 +378,7 @@ КартинкаИНаименование 34 + VeryHigh СписокИндексКартинки 25 @@ -630,6 +552,7 @@ СписокАвтор 21 + Usual true true @@ -676,6 +599,7 @@ СписокДатаСоздания 23 + Usual true true @@ -722,6 +646,7 @@ СписокСсылка 41 + VeryLow true true @@ -924,8 +849,66 @@ ФормаКоманднаяПанель -1 + + Выбрать + 39 + true + true + + true + + false + + ВыбратьExtendedTooltip + 43 + Label + true + true + + Left + + + Form.StandardCommand.Choose + Auto + true + true + true + UserCmds + Auto + + + Справка + 40 + true + true + + true + + false + + СправкаExtendedTooltip + 44 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Module.bsl index 4968481e8..30aaee98b 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -34,6 +41,19 @@ Список.Параметры.УстановитьЗначениеПараметра("Владелец", Элементы.Папки.ТекущаяСтрока); КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Папки.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + +#Если МобильныйКлиент Тогда + УстановитьЗаголовокДереваПапок(); +#КонецЕсли + КонецПроцедуры #КонецОбласти @@ -42,7 +62,14 @@ &НаКлиенте Процедура ПапкиПриАктивизацииСтроки(Элемент) + ПодключитьОбработчикОжидания("ОбработкаОжидания", 0.2, Истина); + +#Если МобильныйКлиент Тогда + ПодключитьОбработчикОжидания("УстановитьЗаголовокДереваПапок", 0.1, Истина); + ТекущийЭлемент = Элементы.Список; +#КонецЕсли + КонецПроцедуры #КонецОбласти @@ -75,4 +102,12 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьЗаголовокДереваПапок() + + Элементы.Папки.Заголовок = ?(Элементы.Папки.ТекущиеДанные = Неопределено, "", + Элементы.Папки.ТекущиеДанные.Наименование); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form index 69129997f..a5d23fd7f 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form @@ -1,8 +1,745 @@ + + КоманднаяПанель + 281 + + ФормаЗакрыть + 239 + VeryHigh + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗаписатьИЗакрыть + 178 + VeryHigh + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + Form.Command.СтандартнаяЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаЗаписать + 180 + Usual + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + Form.Command.СтандартнаяЗаписать + Normal + true + true + UserCmds + Auto + + + ФормаСкопировать + 219 + Usual + true + true + + true + + + ФормаСкопироватьРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + Form.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПоказатьВСписке + 149 + Usual + true + true + + true + + + ФормаПоказатьВСпискеРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Form.Command.ПоказатьВСписке + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаПеречитать + 221 + Usual + true + true + + true + + + ФормаПеречитатьРасширеннаяПодсказка + 222 + Label + true + true + + Left + + + Form.StandardCommand.Reread + Normal + Auto + true + true + UserCmds + Auto + + + ПодменюПечать + 213 + Usual + + Печать + 215 + true + true + + true + + + ПечатьРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + ПечатьСоШтампом + 217 + true + true + + true + + + ПечатьСоШтампомРасширеннаяПодсказка + 218 + 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 + + + Popup + + Auto + Normal + + + + ФормаГлобальныеКоманды + 98 + VeryLow + true + true + + true + + + <key>ru</key> + <value>Форма глобальные команды</value> + + + ru + Общие команды работы с файлами + + None + + ФормаГлобальныеКомандыРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + FormCommandPanelGlobalCommands + + + + ФормаОтправить + 211 + Usual + true + true + + true + + + ФормаОтправитьРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГруппаКомандЭлектроннаяПодписьИШифрование + 17 + VeryLow + + ФормаГруппаКомандЭлектроннаяПодпись + 129 + + ФормаПодписатьФайлЭП + 19 + true + true + + true + + + ФормаПодписатьФайлЭПРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.Command.Подписать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаДобавитьЭПИзФайла + 20 + true + true + + true + + + ФормаДобавитьЭПИзФайлаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + Form.Command.ДобавитьЭПИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСохранитьВместеСЭП + 21 + true + true + + true + + + ФормаСохранитьВместеСЭПРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + Form.Command.СохранитьВместеСЭП + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа команд электронная подпись</value> + + + ФормаГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + + + ФормаГруппаКомандШифрование + 18 + + ФормаЗашифровать + 22 + true + true + + true + + + ФормаЗашифроватьExtendedTooltip + 75 + Label + true + true + + Left + + + Form.Command.Зашифровать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаРасшифровать + 23 + true + true + + true + + + ФормаРасшифроватьExtendedTooltip + 76 + Label + true + true + + Left + + + Form.Command.Расшифровать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа команд шифрование</value> + + + ФормаГруппаКомандШифрованиеРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Электронная подпись и шифрование</value> + + + ru + Команды работы с электронной подписью и шифрованием + + + ФормаГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + Popup + + + CommonPicture.ПодписанЗашифрованЗаголовок + + Picture + Normal + + + + ФормаСтандартныеУстановитьПометкуУдаления + 5 + High + true + true + + true + + + ФормаСтандартныеУстановитьПометкуУдаленияExtendedTooltip + 61 + Label + true + true + + Left + + + Form.Command.СтандартныеУстановитьПометкуУдаления + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаГруппаДополнительныеКоманды + 100 + VeryHigh + + ФормаСохранитьКак + 12 + true + true + + true + + + ФормаСохранитьКакExtendedTooltip + 67 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаЗанять + 237 + true + true + + true + + + ФормаЗанятьРасширеннаяПодсказка + 238 + Label + true + true + + Left + + + Form.Command.Занять + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОсвободить + 16 + true + true + + true + + + ФормаОсвободитьExtendedTooltip + 66 + Label + true + true + + Left + + + Form.Command.Освободить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОбновитьИзФайлаНаДиске + 24 + true + true + + true + + + ФормаОбновитьИзФайлаНаДискеExtendedTooltip + 68 + Label + true + true + + Left + + + Form.Command.ОбновитьИзФайлаНаДиске + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОткрытьКаталогФайла + 13 + true + true + + true + + + ФормаОткрытьКаталогФайлаExtendedTooltip + 69 + Label + true + true + + Left + + + Form.Command.ОткрытьКаталогФайла + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма группа дополнительные команды</value> + + + ru + Дополнительные команды + + None + + ФормаГруппаДополнительныеКомандыРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 282 + Label + true + true + + Left + + + CommandBar + + Left + + ГруппаПояснениеОблачногоСервиса 223 + VeryHigh ДекорацияКартинкаОблачногоСервиса 225 @@ -181,31 +918,166 @@ Auto + + ДекорацияПояснениеСлужебный + 241 + VeryHigh + + <key>ru</key> + <value>Служебный файл доступен только для просмотра.</value> + + true + true + + true + + + ДекорацияПояснениеСлужебныйРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + + ДекорацияПояснениеСлужебныйКонтекстноеМеню + 242 + true + + Label + true + true + + Left + Center + + Style.ToolTipBackColor + + + ГруппаОбщаяИнформация 29 - ГруппаОбщиеДанные - 156 - VeryHigh - - Наименование - 102 + ГруппаОбщиеДанныеИХарактеристики + 244 + + ГруппаОбщиеДанные + 156 + + Наименование + 102 + VeryHigh + true + true + + true + + + Объект.Description + + + ru + Имя файла (без расширения) + + + НаименованиеРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 103 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + Описание + 105 + VeryLow + true + true + + true + + + Объект.Описание + + Left + + ru + Краткое описание файла + + + ОписаниеРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + ОписаниеКонтекстноеМеню + 106 + true + + InputField + Enter + true + Left + true + + 2 + true + true + true + true + true + Normal + + ru + Краткое пояснение. Для редактирования содержимого файла нажмите кнопку Редактировать. + + + true true true - - Объект.Description - + + <key>ru</key> + <value>Общие данные</value> + ru - Имя файла (без расширения) + Общие данные файла - НаименованиеРасширеннаяПодсказка - 104 + ГруппаОбщиеДанныеРасширеннаяПодсказка + 157 Label true true @@ -213,44 +1085,406 @@ Left - - НаименованиеКонтекстноеМеню - 103 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto - - Описание - 105 - true + + ГруппаХарактеристикиФайла + 254 + + ДатаСозданияФайла + 256 + + <key>ru</key> + <value>Создан</value> + + true + true + + true + + + Объект.ДатаСоздания + + + ru + Дата добавления файла в список + + + ДатаСозданияФайлаРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + + ДатаСозданияФайлаКонтекстноеМеню + 257 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаМодификацииФайла + 259 + + <key>ru</key> + <value>Изменен</value> + + true + true + + true + + + ДатаМодификации + + + ru + Дата изменения данных файла (местное время) + + + ДатаМодификацииФайлаРасширеннаяПодсказка + 261 + Label + true + true + + Left + + + + ДатаМодификацииФайлаКонтекстноеМеню + 260 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаРазмерСДекорациейФайла + 262 + + РазмерФайла + 264 + + <key>ru</key> + <value>Размер</value> + + true + true + + true + + + Объект.Размер + + + ru + Размер файла + + + РазмерФайлаРасширеннаяПодсказка + 266 + Label + true + true + + Left + + + + РазмерФайлаКонтекстноеМеню + 265 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияБайтХарактеристики + 267 + + <key>ru</key> + <value>байт</value> + + true + true + + true + + + ДекорацияБайтХарактеристикиРасширеннаяПодсказка + 269 + Label + true + true + + Left + + + + ДекорацияБайтХарактеристикиКонтекстноеМеню + 268 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Размер с декорацией</value> + + + ГруппаРазмерСДекорациейФайлаРасширеннаяПодсказка + 263 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаРасширениеФайла + 270 + + РасширениеФайла + 272 + true + true + + true + + + Объект.Расширение + + + ru + Расширение файла + + + РасширениеФайлаРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + + РасширениеФайлаКонтекстноеМеню + 273 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИндексКартинкиФайла + 275 + true + true + + true + + + Объект.ИндексКартинки + + None + + ИндексКартинкиФайлаРасширеннаяПодсказка + 277 + Label + true + true + + Left + + + + ИндексКартинкиФайлаКонтекстноеМеню + 276 + true + + PictureField + Enter + true + Left + true + + 2 + true + 1 + true + + CommonPicture.КоллекцияПиктограммФайлов + + + 1 + + + + true + true + + true + + + <key>ru</key> + <value>Расширение</value> + + + ГруппаРасширениеФайлаРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Center + Auto + true + true + Auto + Auto + + + + КодировкаФайла + 278 + true + true + + true + + + Кодировка + + + КодировкаФайлаРасширеннаяПодсказка + 280 + Label + true + true + + Left + + + + КодировкаФайлаКонтекстноеМеню + 279 + true + + LabelField + Enter + true + Left + true + + true + true + + true true - - Объект.Описание - - Left - + <key>ru</key> - <value>Краткое описание файла</value> - </toolTip> + <value>Дополнительные сведения</value> + - ОписаниеРасширеннаяПодсказка - 107 + ГруппаХарактеристикиФайлаРасширеннаяПодсказка + 255 Label true true @@ -258,28 +1492,14 @@ Left - - ОписаниеКонтекстноеМеню - 106 - true - - InputField - Enter - true - Left - true - - 2 - true - true - true - true - true - Normal - - ru - Краткое пояснение. Для редактирования содержимого файла нажмите кнопку Редактировать. - + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -289,15 +1509,11 @@ <key>ru</key> - <value>Общие данные</value> + <value>Общие данные и характеристики</value> - - ru - Общие данные файла - - ГруппаОбщиеДанныеРасширеннаяПодсказка - 157 + ГруппаОбщиеДанныеИХарактеристикиРасширеннаяПодсказка + 245 Label true true @@ -574,10 +1790,6 @@ Изменил 111 - - <key>ru</key> - <value>Отредактировал</value> - true true @@ -1613,6 +2825,7 @@ ЭлектронныеПодписиПодписать 43 + VeryHigh true true @@ -1639,6 +2852,7 @@ ЭлектронныеПодписиОткрыть 44 + VeryLow true true @@ -1665,6 +2879,7 @@ ЭлектронныеПодписиПроверить 46 + VeryLow true true @@ -1691,6 +2906,7 @@ ЭлектронныеПодписиПроверитьВсе 47 + VeryLow true true @@ -1717,6 +2933,7 @@ ЭлектронныеПодписиУдалить 45 + VeryLow true true @@ -1743,6 +2960,7 @@ ЭлектронныеПодписиСохранить 48 + VeryLow true true @@ -2254,682 +3472,12 @@ Auto + None + false ФормаКоманднаяПанель -1 - - ФормаЗаписатьИЗакрыть - 178 - true - true - - true - - - ФормаЗаписатьИЗакрытьРасширеннаяПодсказка - 179 - Label - true - true - - Left - - - Form.Command.СтандартнаяЗаписатьИЗакрыть - Auto - true - true - true - UserCmds - Auto - - - ФормаЗаписать - 180 - true - true - - true - - - ФормаЗаписатьРасширеннаяПодсказка - 181 - Label - true - true - - Left - - - Form.Command.СтандартнаяЗаписать - Normal - true - true - UserCmds - Auto - - - ФормаСкопировать - 219 - true - true - - true - - - ФормаСкопироватьРасширеннаяПодсказка - 220 - Label - true - true - - Left - - - Form.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - ФормаПоказатьВСписке - 149 - true - true - - true - - - ФормаПоказатьВСпискеРасширеннаяПодсказка - 150 - Label - true - true - - Left - - - Form.Command.ПоказатьВСписке - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаПеречитать - 221 - true - true - - true - - - ФормаПеречитатьРасширеннаяПодсказка - 222 - Label - true - true - - Left - - - Form.StandardCommand.Reread - Normal - Auto - true - true - UserCmds - Auto - - - ПодменюПечать - 213 - - Печать - 215 - true - true - - true - - - ПечатьРасширеннаяПодсказка - 216 - Label - true - true - - Left - - - Form.Command.Печать - Normal - Auto - true - true - UserCmds - Auto - - - ПечатьСоШтампом - 217 - true - true - - true - - - ПечатьСоШтампомРасширеннаяПодсказка - 218 - 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 - - - Popup - - Auto - Normal - - - - ФормаГлобальныеКоманды - 98 - true - true - - true - - - <key>ru</key> - <value>Форма глобальные команды</value> - - - ru - Общие команды работы с файлами - - None - - ФормаГлобальныеКомандыРасширеннаяПодсказка - 99 - Label - true - true - - Left - - - - FormCommandPanelGlobalCommands - - - - ФормаОтправить - 211 - true - true - - true - - - ФормаОтправитьРасширеннаяПодсказка - 212 - Label - true - true - - Left - - - Form.Command.Отправить - Normal - Auto - true - true - UserCmds - Auto - - - ФормаГруппаКомандЭлектроннаяПодписьИШифрование - 17 - - ФормаГруппаКомандЭлектроннаяПодпись - 129 - - ФормаПодписатьФайлЭП - 19 - true - true - - true - - - ФормаПодписатьФайлЭПРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - Form.Command.Подписать - Normal - Auto - true - true - UserCmds - Auto - - - ФормаДобавитьЭПИзФайла - 20 - true - true - - true - - - ФормаДобавитьЭПИзФайлаРасширеннаяПодсказка - 72 - Label - true - true - - Left - - - Form.Command.ДобавитьЭПИзФайла - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСохранитьВместеСЭП - 21 - true - true - - true - - - ФормаСохранитьВместеСЭПРасширеннаяПодсказка - 73 - Label - true - true - - Left - - - Form.Command.СохранитьВместеСЭП - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд электронная подпись</value> - - - ФормаГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка - 130 - Label - true - true - - Left - - - - - - ФормаГруппаКомандШифрование - 18 - - ФормаЗашифровать - 22 - true - true - - true - - - ФормаЗашифроватьExtendedTooltip - 75 - Label - true - true - - Left - - - Form.Command.Зашифровать - Normal - Auto - true - true - UserCmds - Auto - - - ФормаРасшифровать - 23 - true - true - - true - - - ФормаРасшифроватьExtendedTooltip - 76 - Label - true - true - - Left - - - Form.Command.Расшифровать - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд шифрование</value> - - - ФормаГруппаКомандШифрованиеРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Электронная подпись и шифрование</value> - - - ru - Команды работы с электронной подписью и шифрованием - - - ФормаГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - Popup - - - CommonPicture.ПодписанЗашифрованЗаголовок - - Picture - Normal - - - - ФормаСтандартныеУстановитьПометкуУдаления - 5 - true - true - - true - - - ФормаСтандартныеУстановитьПометкуУдаленияExtendedTooltip - 61 - Label - true - true - - Left - - - Form.Command.СтандартныеУстановитьПометкуУдаления - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаГруппаДополнительныеКоманды - 100 - - ФормаСохранитьКак - 12 - true - true - - true - - - ФормаСохранитьКакExtendedTooltip - 67 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаЗанять - 237 - true - true - - true - - - ФормаЗанятьРасширеннаяПодсказка - 238 - Label - true - true - - Left - - - Form.Command.Занять - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаОсвободить - 16 - true - true - - true - - - ФормаОсвободитьExtendedTooltip - 66 - Label - true - true - - Left - - - Form.Command.Освободить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаОбновитьИзФайлаНаДиске - 24 - true - true - - true - - - ФормаОбновитьИзФайлаНаДискеExtendedTooltip - 68 - Label - true - true - - Left - - - Form.Command.ОбновитьИзФайлаНаДиске - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаОткрытьКаталогФайла - 13 - true - true - - true - - - ФормаОткрытьКаталогФайлаExtendedTooltip - 69 - Label - true - true - - Left - - - Form.Command.ОткрытьКаталогФайла - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма группа дополнительные команды</value> - - - ru - Дополнительные команды - - None - - ФормаГруппаДополнительныеКомандыРасширеннаяПодсказка - 101 - Label - true - true - - Left - - - - Left - true NotificationProcessing @@ -2965,6 +3513,16 @@ true auto true + + + ГруппаКоманды + + + + + КоманднаяПанель + + ДатаМодификации @@ -4261,7 +4819,7 @@ <userVisible/> </cmiFragmentRecord> <cmiFragmentRecord> - <command>CommonCommand.ВерсииФайла</command> + <command>0</command> <type>Added</type> <group>FormNavigationPanelGoTo</group> <index>3</index> diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl index 12c85b9bc..31c6c30bc 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -42,23 +49,16 @@ ОбновитьПолныйПуть(); ОбновитьПояснениеОблачногоСервиса(Объект.Ссылка); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаОткрытьФайлДляПросмотра", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Редактировать", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ЗакончитьРедактирование", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СохранитьИзменения", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СохранитьКак", "Отображение", ОтображениеКнопки.Картинка); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Описание", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Нет); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Описание", "ПодсказкаВвода", НСтр("ru ='Краткое описание'")); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Описание", "МаксимальнаяВысота", 2); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Описание", "АвтоМаксимальнаяВысота", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Описание", "РастягиватьПоВертикали", Ложь); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаОбщаяИнформация", "Группировка", ГруппировкаПодчиненныхЭлементовФормы.Вертикальная); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаКоманды", "Группировка", ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда); + Элементы.Описание.Высота = 0; + Элементы.Наименование.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.ГруппаСведенияЧасть1.ВыравниваниеЭлементовИЗаголовков = + ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.ГруппаСведенияЧасть2.ВыравниваниеЭлементовИЗаголовков = + ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.ГруппаХарактеристикиФайла.ВыравниваниеЭлементовИЗаголовков = + ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; КонецЕсли; @@ -135,7 +135,7 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - ТекущийПользователь = Пользователи.ТекущийПользователь(); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); РаботаСФайламиСлужебный.ЗаполнитьСписокПодписей(ЭтотОбъект); РаботаСФайламиСлужебный.ЗаполнитьСписокШифрования(ЭтотОбъект); @@ -308,8 +308,6 @@ &НаКлиенте Процедура ОбновитьИзФайлаНаДиске(Команда) - Перем НовоеРасширение; - Если ЭтоНовый() ИЛИ ЭтотОбъект.Объект.Зашифрован ИЛИ ЭтотОбъект.Объект.ПодписанЭП @@ -830,22 +828,24 @@ &НаКлиенте Процедура Отправить(Команда) - Файлы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЭтотОбъект.Объект.Ссылка); - РаботаСФайламиСлужебныйКлиент.ОтправитьФайлыПоПочте(Файлы, УникальныйИдентификатор, ПараметрыОтправки, Истина); + Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) + Или Записать() Тогда + Файлы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЭтотОбъект.Объект.Ссылка); + РаботаСФайламиСлужебныйКлиент.ОтправитьФайлыПоПочте(Файлы, УникальныйИдентификатор, ПараметрыОтправки, Истина); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Печать(Команда) - СистемнаяИнфо = Новый СистемнаяИнформация; - Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86 - И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'")); - Возврат; + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'")); + Возврат; КонецЕсли; - Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) Тогда + Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) + Или Записать() Тогда Файлы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЭтотОбъект.Объект.Ссылка); РаботаСФайламиКлиент.НапечататьФайлы(Файлы, ЭтотОбъект.УникальныйИдентификатор); КонецЕсли; @@ -855,7 +855,8 @@ &НаКлиенте Процедура ПечатьСоШтампом(Команда) - Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) Тогда + Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) + Или Записать() Тогда ДокументСоШтампом = РаботаСФайламиСлужебныйВызовСервера.ТабличныйДокументСоШтампом(ЭтотОбъект.Объект.Ссылка, ЭтотОбъект.Объект.Ссылка); РаботаСФайламиСлужебныйКлиент.ПечатьФайлаСоШтампом(ДокументСоШтампом); КонецЕсли; @@ -1152,6 +1153,10 @@ КонецЕсли; + Если Форма.ТолькоПросмотр Тогда + СделатьКомандыЭПНедоступными(ИменаКоманд); + КонецЕсли; + Возврат ИменаКоманд; КонецФункции @@ -1232,7 +1237,7 @@ Функция ОбработатьКомандуЗаписиФайла() Если ПустаяСтрока(ЭтотОбъект.Объект.Наименование) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Для продолжения укажите имя файла.'"), , "Наименование", "Объект"); Возврат Ложь; КонецЕсли; @@ -1240,7 +1245,7 @@ Попытка РаботаСФайламиСлужебныйКлиент.КорректноеИмяФайла(ЭтотОбъект.Объект.Наименование); Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), ,"Наименование", "Объект"); Возврат Ложь; КонецПопытки; @@ -1346,12 +1351,9 @@ КонецЕсли; Контекст = Новый Структура; - Контекст.Вставить("МодульЭлектроннаяПодписьКлиентСервер", - ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер")); + МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); - ОбщиеНастройки = Контекст.МодульЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); - - Если ОбщиеНастройки.ПроверятьЭлектронныеПодписиНаСервере Тогда + Если МодульЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда Возврат; КонецЕсли; @@ -1463,8 +1465,7 @@ СтрокаТаблицы.Отпечаток = Base64Строка(Контекст.Сертификат.Отпечаток); СтрокаТаблицы.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификата, УникальныйИдентификатор); - СтрокаТаблицы.КомуВыданСертификат = - Контекст.МодульЭлектроннаяПодписьКлиентСервер.ПредставлениеСубъекта(Контекст.Сертификат); + СтрокаТаблицы.КомуВыданСертификат = Контекст.МодульЭлектроннаяПодпись.ПредставлениеСубъекта(Контекст.Сертификат); ПрочитатьСертификатыПодписейЦиклНачало(Контекст); @@ -1594,7 +1595,6 @@ Если СведенияОСинхронизации.Количество() > 0 Тогда УчетнаяЗапись = СведенияОСинхронизации.УчетнаяЗапись; - ФайлыРедактируютсяВОблачномСервисе = Истина; ВидимостьПояснения = Истина; АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( diff --git a/SSL/src/Catalogs/Файлы/Help/ru.html b/SSL/src/Catalogs/Файлы/Help/ru.html index e385f6f58..de877cfcb 100644 --- a/SSL/src/Catalogs/Файлы/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Help/ru.html @@ -12,7 +12,7 @@ <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="DataProcessor.РаботаСФайлами.Form.ФормаВыбораРежимаОткрытия/Help">выбрать</a>, как открыть файл - для просмотра или для редактирования. Действие настраивается в персональных настройках программы на закладке <strong>Работа с файлами</strong>.</td></tr><tr><td valign="top"><img src="CommonPicture.ЗакончитьРедактированиеФайла"></img> Закончить редактирование</td> +<td>По умолчанию необходимо <a href="DataProcessor.РаботаСФайлами.Form.ФормаВыбораРежимаОткрытия/Help">выбрать</a>, как открыть файл - для просмотра или для редактирования. Действие настраивается в персональных настройках программы на закладке <strong>Работа с файлами</strong>.</td></tr><tr><td valign="top">Закончить </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> @@ -23,7 +23,8 @@ <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> +<td>Обновляет файл в информационной базе выбранным файлом на жестком диске. При этом программа проверяет даты файлов, при попытке заменить файл старой версией выводится предупреждение, действие не выполняется.</td></tr><tr><td>Показывать служебные файлы</td> +<td>Программа автоматически присоединяет к объектам служебные файлы. Обычно они скрываются. Включите флажок, для того чтобы видеть в списке эти файлы.</td></tr><tr><td><img src="CommonPicture.ПодписанЭП"></img> Подписать</td> <td>Создает электронную подпись для файла. Перед созданием электронной подписи программа предлагает выбрать сертификат электронной подписи из имеющихся на компьютере. <a>Выбор сертификата</a> можно сделать и во время персональных настроек программы. Подписанный файл становится недоступным для редактирования и отображается в списках со значком <img src="CommonPicture.ПодписанЭП" width="16" height="16"></img>. Подписанный файл можно скопировать, при этом программа задаст вопрос - копировать файл с подписью или без.</td></tr><tr><td>Добавить электронную подпись из файла</td> <td><a href="CommonForm.ДобавлениеЭлектроннойПодписиИзФайла/Help">Добавляет выбранный файл подписи</a> к подписям файла. Команду можно использовать, например, если подпись (файл подписи) была получена позже, чем подписанный файл.</td></tr><tr><td>Сохранить вместе с электронной подписью</td> <td>Сохраняет файл в указанный каталог на жестком или сетевом диске, а также <a href="CommonForm.СохранениеВместеСЭлектроннойПодписью/Help">сохраняет подписи файла</a> - все или выбранные, в зависимости от настройки действий <strong>При сохранении данных в файл вместе с электронной подписью</strong> (в персональных настройках программы, вкладка Дополнительно) Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.</td></tr><tr><td><img src="CommonPicture.Зашифрован" width="16" height="16"></img> Зашифровать</td> diff --git a/SSL/src/Catalogs/Файлы/ManagerModule.bsl b/SSL/src/Catalogs/Файлы/ManagerModule.bsl index 204dd7ff2..8a8c7446d 100644 --- a/SSL/src/Catalogs/Файлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/Файлы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -34,9 +42,21 @@ | ИзменениеОбъектаРазрешено(ВладелецФайла)"; Ограничение.ТекстДляВнешнихПользователей = - "РазрешитьЧтениеИзменение + "РазрешитьЧтение |ГДЕ - | ЗначениеРазрешено(ВЫРАЗИТЬ(Автор КАК Справочник.ВнешниеПользователи))"; + | ВЫБОР + | КОГДА ТипЗначения(ВладелецФайла) = Тип(Справочник.ПапкиФайлов) + | ТОГДА ЧтениеОбъектаРазрешено(ВЫРАЗИТЬ(ВладелецФайла КАК Справочник.ПапкиФайлов)) + | ИНАЧЕ ЗначениеРазрешено(ВЫРАЗИТЬ(Автор КАК Справочник.ВнешниеПользователи)) + | КОНЕЦ + |; + |РазрешитьИзменениеЕслиРазрешеноЧтение + |ГДЕ + | ВЫБОР + | КОГДА ТипЗначения(ВладелецФайла) = Тип(Справочник.ПапкиФайлов) + | ТОГДА ИзменениеОбъектаРазрешено(ВЫРАЗИТЬ(ВладелецФайла КАК Справочник.ПапкиФайлов)) + | ИНАЧЕ ЗначениеРазрешено(ВЫРАЗИТЬ(Автор КАК Справочник.ВнешниеПользователи)) + | КОНЕЦ"; Ограничение.ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей = Ложь; КонецПроцедуры @@ -47,13 +67,10 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Если Параметры.Количество() = 0 Тогда ВыбраннаяФорма = "Файлы"; // Т.к. не указан конкретный файл, то открываем список файлов. СтандартнаяОбработка = Ложь; @@ -73,14 +90,10 @@ КонецЕсли; КонецЕсли; -#КонецЕсли - КонецПроцедуры #КонецОбласти -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - #Область СлужебныеПроцедурыИФункции // Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, @@ -196,3 +209,4 @@ #КонецОбласти #КонецЕсли + diff --git a/SSL/src/Catalogs/Файлы/Файлы.mdo b/SSL/src/Catalogs/Файлы/Файлы.mdo index 85682469c..181539c9d 100644 --- a/SSL/src/Catalogs/Файлы/Файлы.mdo +++ b/SSL/src/Catalogs/Файлы/Файлы.mdo @@ -105,9 +105,9 @@ <characteristics> <characteristicTypes>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты</characteristicTypes> <keyField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство</keyField> - <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref</typesFilterField> - <typesFilterValue xsi:type="core:ReferenceValue"> - <value>Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_Файлы</value> + <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора</typesFilterField> + <typesFilterValue xsi:type="core:StringValue"> + <value>Справочник_Файлы</value> </typesFilterValue> <dataPathField>-1</dataPathField> <multipleValuesUseField>-1</multipleValuesUseField> @@ -121,9 +121,9 @@ <characteristics> <characteristicTypes>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения</characteristicTypes> <keyField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство</keyField> - <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref</typesFilterField> - <typesFilterValue xsi:type="core:ReferenceValue"> - <value>Catalog.НаборыДополнительныхРеквизитовИСведений.Справочник_Файлы</value> + <typesFilterField>Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора</typesFilterField> + <typesFilterValue xsi:type="core:StringValue"> + <value>Справочник_Файлы</value> </typesFilterValue> <dataPathField>-1</dataPathField> <multipleValuesUseField>-1</multipleValuesUseField> @@ -395,6 +395,7 @@ <value>Редактирует</value> </synonym> <type> + <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.УчетныеЗаписиСинхронизацииФайлов</types> <types>CatalogRef.Пользователи</types> </type> @@ -412,6 +413,25 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="f00e93bf-6e3b-4819-a4e1-33471a6d0fff"> + <name>Служебный</name> + <synonym> + <key>ru</key> + <value>Служебный</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Признак того, что файл является служебным</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <attributes uuid="2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7"> <name>ТекстХранилище</name> <synonym> @@ -462,6 +482,7 @@ <value>Отредактировал</value> </synonym> <type> + <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> @@ -470,7 +491,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> @@ -993,4 +1013,16 @@ <group>NavigationPanelOrdinary</group> <representation>Auto</representation> </commands> + <commands uuid="2bc2ca58-6cc0-4d4b-8672-f9328c86c2c1"> + <name>ВерсииФайла</name> + <synonym> + <key>ru</key> + <value>Версии файла</value> + </synonym> + <group>FormNavigationPanelGoTo</group> + <commandParameterType> + <types>CatalogRef.Файлы</types> + </commandParameterType> + <representation>Auto</representation> + </commands> </mdclass:Catalog> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Form.form index 7d2968f88..618be5ac3 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Form.form @@ -318,6 +318,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Ref</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <mainTable>Catalog.ШаблоныАнкет</mainTable> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Module.bsl index 8ccacd653..737e3c136 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl index 1de5a9b37..7da0b7d54 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl index 36e150ed1..67c3fe577 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -77,12 +84,12 @@ Если Не ЗначениеЗаполнено(Формулировка) Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнена формулировка'"),,"Формулировка"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не заполнена формулировка'"),,"Формулировка"); КонецЕсли; Если ТипСтрокиДерева = "Вопрос" И (Не ЗначениеЗаполнено(ЭлементарныйВопрос)) Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не указан элементарный вопрос'"),,"ЭлементарныйВопрос"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не указан элементарный вопрос'"),,"ЭлементарныйВопрос"); КонецЕсли; Если Отказ Тогда diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl index 341bf5002..be35240e4 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийЭлементовШапкиФормы diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl index ecd297880..48955ccd2 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -86,7 +93,7 @@ ДеревоШаблонаАнкеты = РеквизитФормыВЗначение("ДеревоАнкеты"); Если ДеревоШаблонаАнкеты.Строки[0].Строки.Найти("","Формулировка",Истина) <> Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не все формулировки или имена разделов заполнены.'"),,"ДеревоАнкеты"); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не все формулировки или имена разделов заполнены.'"),,"ДеревоАнкеты"); Отказ = Истина; КонецЕсли; @@ -100,7 +107,7 @@ Если НайденнаяСтрока.ТипВопроса <> Перечисления.ТипыВопросовШаблонаАнкеты.Табличный И НайденнаяСтрока.ТипВопроса <> Перечисления.ТипыВопросовШаблонаАнкеты.Комплексный Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не все вопросы заполнены.'"),,"ДеревоАнкеты"); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не все вопросы заполнены.'"),,"ДеревоАнкеты"); Отказ = Истина; Прервать; diff --git a/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl index 4ea4853c3..5877295c9 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ШаблоныЗаданийОчереди/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныЗаданийОчереди/Forms/ФормаЭлемента/Module.bsl index fae886f55..e2d87eb1e 100644 --- a/SSL/src/Catalogs/ШаблоныЗаданийОчереди/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныЗаданийОчереди/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ЗаполнитьПроизвольныеПараметры/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ЗаполнитьПроизвольныеПараметры/Form.form index ac7b88d34..72e371b69 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ЗаполнитьПроизвольныеПараметры/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ЗаполнитьПроизвольныеПараметры/Form.form @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> +<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> @@ -136,6 +136,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>ГруппаКоманднаяПанельФормы</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Предмет</name> <title> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ЗаполнитьПроизвольныеПараметры/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ЗаполнитьПроизвольныеПараметры/Module.bsl index e33a2a52f..c0efd29f0 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ЗаполнитьПроизвольныеПараметры/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ЗаполнитьПроизвольныеПараметры/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -10,13 +18,6 @@ Предмет = Параметры.Предмет; ДобавитьЭлементыФормыПараметровШаблона(Параметры.Шаблон); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.ГруппаКоманднаяПанельФормы, Элементы.ФормаКоманднаяПанель); - Элементы.ГруппаКоманднаяПанельФормы.Вид = ВидГруппыФормы.ГруппаКнопок; - - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Form.form index b3eea1085..bb254f8f1 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Form.form @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> +<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> @@ -230,6 +230,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>ГруппаКоманднаяПанельФормы</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>ИмяПараметра</name> <title> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Module.bsl index 2bde9035a..e5dc36555 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ПроизвольныйПараметр/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -33,15 +41,6 @@ ПредставлениеПараметра = Параметры.ПредставлениеПараметра; ТипПараметра = Параметры.ОписаниеТипа; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.ГруппаКоманднаяПанельФормы, Элементы.ФормаКоманднаяПанель); - - Элементы.ГруппаКоманднаяПанельФормы.Вид = ВидГруппыФормы.ГруппаКнопок; - Элементы.ФормаОтмена.Видимость = Ложь; - - КонецЕсли; - КонецПроцедуры &НаСервереБезКонтекста @@ -135,7 +134,7 @@ Возврат Истина; КонецПопытки; - Возврат Ложь; + Возврат Тип(Тест) <> Тип("Структура"); КонецФункции diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form index 297b365f4..40c515feb 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form @@ -41,7 +41,6 @@ <items xsi:type="form:FormGroup"> <name>ГруппаСписокВыбора</name> <id>34</id> - <displayImportance>VeryHigh</displayImportance> <items xsi:type="form:Table"> <name>Шаблоны</name> <id>39</id> @@ -235,20 +234,20 @@ <initialListView>Auto</initialListView> <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> - <currentRowUse>SelectionPresentation</currentRowUse> + <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <rowFilter xsi:type="core:UndefinedValue"/> </items> <items xsi:type="form:FormGroup"> <name>СтраницыПредпросмотра</name> <id>60</id> - <displayImportance>VeryHigh</displayImportance> <items xsi:type="form:FormGroup"> <name>СтраницаОбычныйТекст</name> <id>66</id> <items xsi:type="form:FormField"> <name>ПредпросмотрОбычныйТекст</name> <id>71</id> + <displayImportance>VeryHigh</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -623,7 +622,7 @@ <name>ПредпросмотрФорматированныйДокумент</name> <title> <key>ru</key> - <value>Предварительный просмотр</value> + <value>Предпросмотр форматированный документ</value> 2 @@ -830,7 +829,7 @@ ПредпросмотрОбычныйТекст <key>ru</key> - <value>Предварительный просмотр</value> + <value>Предпросмотр обычный текст</value> 6 diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl index 30ba71a2c..a6aad9d09 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -40,15 +48,6 @@ ЗаполнитьСписокДоступныхШаблонов(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПредпросмотрОбычныйТекст", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Авто); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПредпросмотрФорматированныйДокумент", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Авто); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСформировать", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСформировать", "Отображение", ОтображениеКнопки.Картинка); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -299,23 +298,39 @@ Если ВидСообщения = "СообщениеSMS" Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда МодульОтправкаSMSКлиент= ОбщегоНазначенияКлиент.ОбщийМодуль("ОтправкаSMSКлиент"); - ДополнительныеПараметры = Новый Структура("ИсточникКонтактнойИнформации, ПеревестиВТранслит"); + + ДополнительныеПараметры = Новый Структура("ПеревестиВТранслит"); Если Сообщение.ДополнительныеПараметры <> Неопределено Тогда ЗаполнитьЗначенияСвойств(ДополнительныеПараметры, Сообщение.ДополнительныеПараметры); КонецЕсли; - ДополнительныеПараметры.ИсточникКонтактнойИнформации = Предмет; + ДополнительныеПараметры.ПеревестиВТранслит = ?(Сообщение.ДополнительныеПараметры.Свойство("ПеревестиВТранслит"), + Сообщение.ДополнительныеПараметры.ПеревестиВТранслит, Ложь); ДополнительныеПараметры.Вставить("Предмет", Предмет); Текст = ?(Сообщение.Свойство("Текст"), Сообщение.Текст, ""); - Если ТипЗнч(Сообщение.Получатель) = Тип("СписокЗначений") Тогда - Получатель = ?(Сообщение.Свойство("Получатель"), Сообщение.Получатель.ВыгрузитьЗначения(), Новый СписокЗначений); - Иначе - Получатель = Сообщение.Получатель; - КонецЕсли; - МодульОтправкаSMSКлиент.ОтправитьSMS(Получатель, Текст, ДополнительныеПараметры); + Получатель = Новый Массив; + ЭтоСписокЗначений = (ТипЗнч(Сообщение.Получатель) = Тип("СписокЗначений")); + Для каждого СведенияОПолучателе Из Сообщение.Получатель Цикл + Если ЭтоСписокЗначений Тогда + Телефон = СведенияОПолучателе.Значение; + ИсточникКонтактнойИнформации = ""; + Иначе + Телефон = СведенияОПолучателе.НомерТелефона; + ИсточникКонтактнойИнформации = СведенияОПолучателе.ИсточникКонтактнойИнформации ; + КонецЕсли; + + ДанныеПолучателя = Новый Структура(); + ДанныеПолучателя.Вставить("Представление", СведенияОПолучателе.Представление); + ДанныеПолучателя.Вставить("Телефон", Телефон); + ДанныеПолучателя.Вставить("ИсточникКонтактнойИнформации", ИсточникКонтактнойИнформации); + Получатель.Добавить(ДанныеПолучателя); + + КонецЦикла; + + МодульОтправкаSMSКлиент.ОтправитьSMS(Получатель, Текст, ДополнительныеПараметры); КонецЕсли; Иначе Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда @@ -328,7 +343,7 @@ И Сообщение.СообщенияПользователю <> Неопределено И Сообщение.СообщенияПользователю.Количество() > 0 Тогда Для каждого СообщенияПользователю Из Сообщение.СообщенияПользователю Цикл - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщенияПользователю.Текст, + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщенияПользователю.Текст, СообщенияПользователю.КлючДанных, СообщенияПользователю.Поле, СообщенияПользователю.ПутьКДанным); КонецЦикла; КонецЕсли; @@ -367,16 +382,10 @@ ПараметрыФормы.Вставить("ЗначениеКопирования", ЗначениеКопирования); ПараметрыФормы.Вставить("Новый", Истина); - Оповещение = Новый ОписаниеОповещения("ОбновитьОкно", ЭтотОбъект); ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры -&НаКлиенте -Процедура ОбновитьОкно(Результат, ДополнительныеПараметры) Экспорт - ЗаполнитьСписокДоступныхШаблонов(); -КонецПроцедуры - &НаСервере Процедура ЗаполнитьСписокДоступныхШаблонов() diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form index 0e7c7fe1c..0ecaf7319 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Form.form @@ -160,35 +160,10 @@ ГруппаКоманднаяПанельСписка 46 - - Справка - 48 - true - true - - true - - - СправкаРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - ФормаГруппаСоздать 22 + VeryHigh ФормаСоздатьШаблонЭлектронногоПисьма 24 @@ -319,6 +294,32 @@ Form + + Справка + 48 + true + true + + true + + + СправкаРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + true true @@ -362,11 +363,7 @@ None ЕстьФайлы - 50 - - <key>ru</key> - <value>Есть файлы</value> - + 59 true true @@ -378,7 +375,7 @@ None ЕстьФайлыРасширеннаяПодсказка - 52 + 61 Label true true @@ -388,7 +385,7 @@ ЕстьФайлыКонтекстноеМеню - 51 + 60 true PictureField @@ -400,7 +397,6 @@ Left true - 2 true true true @@ -412,6 +408,7 @@ 1 + AsFileRef @@ -754,6 +751,11 @@ true auto true + + + ГруппаКоманднаяПанельСписка + + Список 1 diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl index 41458831e..e9db90fcc 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -25,21 +33,6 @@ Элементы.ФормаПоказыватьКонтекстныеШаблоны.Видимость = Пользователи.ЭтоПолноправныйПользователь(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.ГруппаКоманднаяПанельСписка, Элементы.ФормаКоманднаяПанель); - Элементы.ГруппаКоманднаяПанельСписка.Вид = ВидГруппыФормы.ГруппаКнопок; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаГруппаСоздать", "Картинка", БиблиотекаКартинок.СоздатьЭлементСписка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаГруппаСоздать", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаГруппаСоздать", "Заголовок", НСтр("ru ='Создать'")); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСоздатьШаблонЭлектронногоПисьма", "ТолькоВоВсехДействиях", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСоздатьШаблонСообщенияSMS", "ТолькоВоВсехДействиях", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Справка", "ТолькоВоВсехДействиях", Истина); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -77,20 +70,22 @@ &НаСервереБезКонтекста Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) + Запрос = Новый Запрос("ВЫБРАТЬ - | ШаблоныСообщенийПечатныеФормыИВложения.Ссылка КАК Ссылка - |ИЗ - | Справочник.ШаблоныСообщений.ПечатныеФормыИВложения КАК ШаблоныСообщенийПечатныеФормыИВложения - |ГДЕ - | ШаблоныСообщенийПечатныеФормыИВложения.Ссылка В (&ШаблоныСообщений) - |СГРУППИРОВАТЬ ПО - | ШаблоныСообщенийПечатныеФормыИВложения.Ссылка"); + | ШаблоныСообщенийПечатныеФормыИВложения.Ссылка КАК Ссылка + |ИЗ + | Справочник.ШаблоныСообщений.ПечатныеФормыИВложения КАК ШаблоныСообщенийПечатныеФормыИВложения + |ГДЕ + | ШаблоныСообщенийПечатныеФормыИВложения.Ссылка В (&ШаблоныСообщений) + |СГРУППИРОВАТЬ ПО + | ШаблоныСообщенийПечатныеФормыИВложения.Ссылка"); Запрос.УстановитьПараметр("ШаблоныСообщений", Строки.ПолучитьКлючи()); Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Для каждого ШаблонСообщений Из Результат Цикл СтрокаСписка = Строки[ШаблонСообщений]; СтрокаСписка.Данные["ЕстьФайлы"] = 1; - КонецЦикла; + КонецЦикла; + КонецПроцедуры #КонецОбласти @@ -99,17 +94,12 @@ &НаКлиенте Процедура СоздатьШаблонЭлектронногоПисьма(Команда) - ПараметрыФормы = Новый Структура(); - ПараметрыФормы.Вставить("ВидСообщения", "ЭлектронноеПисьмо"); - ПараметрыФормы.Вставить("ПолноеИмяТипаОснования", Назначение); - ПараметрыФормы.Вставить("МожноМенятьНазначение", Истина); - ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы ,ЭтотОбъект); + СоздатьШаблон("ЭлектронноеПисьмо"); КонецПроцедуры &НаКлиенте Процедура СоздатьШаблонСообщенияSMS(Команда) - ПараметрыФормы = Новый Структура("ВидСообщения", "СообщениеSMS"); - ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы ,ЭтотОбъект); + СоздатьШаблон("СообщениеSMS"); КонецПроцедуры &НаКлиенте @@ -137,6 +127,15 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура СоздатьШаблон(ТипСообщения) + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("ВидСообщения", ТипСообщения); + ПараметрыФормы.Вставить("ПолноеИмяТипаОснования", Назначение); + ПараметрыФормы.Вставить("МожноМенятьНазначение", Истина); + ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект); +КонецПроцедуры + &НаКлиенте Процедура УстановитьФильтрНазначение(Знач ВыбранноеЗначение) @@ -177,7 +176,7 @@ Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ШаблоныСообщений.Назначение КАК Назначение, - | ШаблоныСообщений.ПолноеИмяТипаПараметраВводаНаОсновании Как ПолноеИмяТипаПараметраВводаНаОсновании + | ШаблоныСообщений.ПолноеИмяТипаПараметраВводаНаОсновании КАК ПолноеИмяТипаПараметраВводаНаОсновании |ИЗ | Справочник.ШаблоныСообщений КАК ШаблоныСообщений |ГДЕ diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form index c9419e8b9..adca20a08 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form @@ -10,6 +10,7 @@ ГруппаЛеваяСторона 294 + VeryHigh Наименование 4 @@ -215,7 +216,6 @@ Страницы 40 - VeryHigh СообщениеЭлектронноеПисьмоHTML 42 @@ -705,6 +705,7 @@ ГруппаДоступ 289 + VeryLow Автор 301 @@ -824,6 +825,7 @@ ГруппаНазначение 344 + Usual Назначение 346 @@ -895,6 +897,10 @@ Left true + + Clearing + ПолноеИмяТипаПараметраВводаНаОснованииОчистка + true true true @@ -2009,6 +2015,7 @@ CommonPicture.КоллекцияПиктограммПараметрыШаблонаСообщения + SelectionPresentationAndChoice true @@ -2792,6 +2799,7 @@ ГруппаНастройкиВложений 270 + VeryLow ФорматВложений 272 @@ -2906,6 +2914,46 @@ true + + ПодписьИПечать + 361 + true + true + + true + + + Объект.ПодписьИПечать + + Right + + ru + Добавить факсимильную подпись и печать в печатную форму + + + Button + + ПодписьИПечатьРасширеннаяПодсказка + 363 + Label + true + true + + Left + + + + ПодписьИПечатьКонтекстноеМеню + 362 + true + + CheckBoxField + Enter + true + Left + true + + true true @@ -3014,7 +3062,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl index 68e1d6ec5..fe346a3e5 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -61,10 +69,8 @@ Элементы.Назначение.Видимость = Ложь; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПараметры", "ОтображатьЗаголовок", Истина); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ТемаПисьма.МногострочныйРежим = Истина; КонецЕсли; КонецПроцедуры @@ -78,7 +84,7 @@ МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); Если ВыбранныеФорматыСохранения.Количество() = 0 Тогда Для Каждого ФорматСохранения Из МодульУправлениеПечатью.ФорматыСохраненияТабличногоДокумента() Цикл - ВыбранныеФорматыСохранения.Добавить(ФорматСохранения.ТипФайлаТабличногоДокумента, Строка(ФорматСохранения.Ссылка), Ложь, ФорматСохранения.Картинка); + ВыбранныеФорматыСохранения.Добавить(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента), Строка(ФорматСохранения.Ссылка), Ложь, ФорматСохранения.Картинка); КонецЦикла; КонецЕсли; @@ -114,11 +120,9 @@ &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - ПоместитьФайлыИзЛокальнойФСВоВременноеХранилище(Вложения, УникальныйИдентификатор, Отказ); - КонецЕсли; + ПоместитьФайлыИзЛокальнойФСВоВременноеХранилище(Вложения, УникальныйИдентификатор, Отказ); - Если НЕ Объект.ПредназначенДляВводаНаОсновании Тогда + Если Не Объект.ПредназначенДляВводаНаОсновании Тогда Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ""; Объект.Назначение = НСтр("ru='Общий'"); КонецЕсли; @@ -130,7 +134,7 @@ РезультатПроверкиШаблоны = РезультатПроверкиШаблоны(); Если ЗначениеЗаполнено(РезультатПроверкиШаблоны) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Шаблон сообщения не может быть записан.'") + ОбщегоНазначения.СообщитьПользователю(НСтр("ru='Шаблон сообщения не может быть записан.'") + Символы.ПС + РезультатПроверкиШаблоны); Отказ = Истина; Возврат; @@ -263,8 +267,10 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + УстановитьВыборФормата(); СформироватьПредставлениеВыбранныхФорматов(); + КонецПроцедуры &НаКлиенте @@ -282,11 +288,19 @@ &НаКлиенте Процедура ПолноеИмяТипаПараметраВводаНаОснованииПриИзменении(Элемент) + Если ПустаяСтрока(Объект.ПолноеИмяТипаПараметраВводаНаОсновании) Тогда + Объект.ПолноеИмяТипаПараметраВводаНаОсновании = "Общий"; + КонецЕсли; Объект.ПредназначенДляВводаНаОсновании = (Объект.ПолноеИмяТипаПараметраВводаНаОсновании <> "Общий"); Объект.Назначение = Элементы.ПолноеИмяТипаПараметраВводаНаОсновании.ТекстРедактирования; СформироватьСписокРеквизитовИПечатныхФорм(); КонецПроцедуры +&НаКлиенте +Процедура ПолноеИмяТипаПараметраВводаНаОснованииОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + &НаКлиенте Процедура ВнешняяОбработкаПриИзменении(Элемент) ОтображениеЭлементовФормы(); @@ -294,8 +308,7 @@ &НаКлиенте Процедура ФорматВложенийНажатие(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - РезультатВыбораФорматов = Неопределено; + СтандартнаяОбработка = Ложь; Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда МодульУправлениеПечатьюСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюСлужебныйКлиент"); @@ -517,7 +530,7 @@ ОчиститьСообщения(); РезультатПроверкиШаблоны = РезультатПроверкиШаблоны(); Если ЗначениеЗаполнено(РезультатПроверкиШаблоны) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатПроверкиШаблоны); + ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатПроверкиШаблоны); Иначе ПоказатьПредупреждение(, НСтр("ru = 'Шаблон заполнен корректно'")); КонецЕсли; @@ -711,7 +724,7 @@ Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл Если ВыбранныйФормат.Пометка Тогда - ФорматыСохранения.Добавить(ВыбранныйФормат.Значение); + ФорматыСохранения.Добавить(ТипФайлаТабличногоДокумента[ВыбранныйФормат.Значение]); КонецЕсли; КонецЦикла; @@ -747,7 +760,6 @@ ВыбранныеФорматыСохранения[0].Пометка = Истина; КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -756,8 +768,8 @@ РезультатВыбораФорматов = Результат; Если РезультатВыбораФорматов <> КодВозвратаДиалога.Отмена И РезультатВыбораФорматов <> Неопределено Тогда УстановитьВыборФормата(РезультатВыбораФорматов.ФорматыСохранения); - Объект.УпаковатьВАрхив = РезультатВыбораФорматов.УпаковатьВАрхив; - Объект.ТранслитерироватьИменаФайлов = РезультатВыбораФорматов.ПереводитьИменаФайловВТранслит; + Объект.УпаковатьВАрхив = РезультатВыбораФорматов.УпаковатьВАрхив; + Объект.ТранслитерироватьИменаФайлов = РезультатВыбораФорматов.ПереводитьИменаФайловВТранслит; СформироватьПредставлениеВыбранныхФорматов(); Модифицированность = Истина; КонецЕсли; @@ -1209,11 +1221,12 @@ Процедура УстановитьЭлектронноеПисьмоHTML(ТребуетсяПереносТекста = Ложь) Элементы.ФормаВидТекстаЭлектронногоПисьма.Заголовок = "HTML"; - Элементы.СообщениеЭлектронноеПисьмо.Видимость = Ложь; - Элементы.СообщениеЭлектронноеПисьмоHTML.Видимость = Истина; - Элементы.Страницы.ТекущаяСтраница = Элементы.СообщениеЭлектронноеПисьмоHTML; + Элементы.СообщениеЭлектронноеПисьмо.Видимость = Ложь; + Элементы.СообщениеЭлектронноеПисьмоHTML.Видимость = Истина; + Элементы.Страницы.ТекущаяСтраница = Элементы.СообщениеЭлектронноеПисьмоHTML; Элементы.ФормаЭлектронноеПисьмоОбычныйТекст.Пометка = Ложь; - Элементы.ФормаЭлектронноеПисьмоHTML.Пометка = Истина; + Элементы.ФормаЭлектронноеПисьмоHTML.Пометка = Истина; + Объект.ТипТекстаПисьма = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML"); Если ТребуетсяПереносТекста Тогда ВложенияФорматированныйДокумент = Новый Структура; @@ -1249,96 +1262,40 @@ &НаКлиенте Процедура ДобавитьВложениеВыполнить(Идентификатор = Неопределено) - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - Диалог.МножественныйВыбор = Истина; - ДополнительныеПараметры = Новый Структура("Идентификатор", Идентификатор); - ОписаниеОповещение = Новый ОписаниеОповещения("ДиалогВыбораФайловПослеВыбора", ЭтотОбъект, ДополнительныеПараметры); - Диалог.Показать(ОписаниеОповещение); - - Иначе - - Адрес = ""; - ВыбранныйФайл = ""; - ДополнительныеПараметры = Новый Структура("Идентификатор", Идентификатор); - ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ПомещениеФайлаПриОкончании", ЭтотОбъект, ДополнительныеПараметры); - НачатьПомещениеФайла(ОбработчикОповещенияОЗакрытии, Адрес, ВыбранныйФайл, Истина, УникальныйИдентификатор); - - КонецЕсли + ДополнительныеПараметры = Новый Структура("Идентификатор", Идентификатор); + ОписаниеОповещение = Новый ОписаниеОповещения("ПослеВыбораФайлов", ЭтотОбъект, ДополнительныеПараметры); + + ПараметрыЗагрузкиФайла = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузкиФайла.ИдентификаторФормы = ЭтотОбъект.УникальныйИдентификатор; + ФайловаяСистемаКлиент.ЗагрузитьФайлы(ОписаниеОповещение, ПараметрыЗагрузкиФайла); КонецПроцедуры &НаКлиенте -Процедура ДиалогВыбораФайловПослеВыбора(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт +Процедура ПослеВыбораФайлов(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт Если ВыбранныеФайлы = Неопределено Тогда Возврат; КонецЕсли; - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - МодульРаботаСФайламиСлужебныйКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйКлиентСервер"); + Для Каждого ВыбранныйФайл Из ВыбранныеФайлы Цикл - МассивИменФайловСОшибками = Новый Массив; - - НоваяСтрока = Неопределено; - - Для Каждого ВыбранныйФайл Из ВыбранныеФайлы Цикл - - ОбъектФайл = Новый Файл(ВыбранныйФайл); - Если МодульРаботаСФайламиСлужебныйКлиентСервер.ПроверитьВозможностьЗагрузкиФайла(ОбъектФайл, Ложь, МассивИменФайловСОшибками) Тогда - - ИмяФайла = ""; - ПолучитьКаталогИИмяФайла(ВыбранныйФайл, "", ИмяФайла); - Расширение = ПолучитьРасширениеФайла(ИмяФайла); - - НоваяСтрока = Вложения.Добавить(); - НоваяСтрока.Статус = "ВнешнийНовый"; - НоваяСтрока.Выбрано = 1; - НоваяСтрока.Имя = ВыбранныйФайл; - НоваяСтрока.Представление = ИмяФайла; - НоваяСтрока.Идентификатор = ИмяФайла; - НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайлаКлиент(Расширение); - - КонецЕсли; - - КонецЦикла; - - Если НоваяСтрока <> Неопределено Тогда - Элементы.Вложения.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); - Модифицированность = Истина; - КонецЕсли; - - Если МассивИменФайловСОшибками.Количество() > 0 Тогда - Для каждого ОписаниеОшибки Из МассивИменФайловСОшибками Цикл - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Добавление вложения %1 отменено по причине: %2'"), - ОписаниеОшибки.ИмяФайла, ОписаниеОшибки.Ошибка); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); - КонецЦикла; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры + ИмяФайла = ""; + Расширение = ПолучитьРасширениеФайла(ВыбранныйФайл.Имя); + ПолучитьКаталогИИмяФайла(ВыбранныйФайл.Имя, "", ИмяФайла); -&НаКлиенте -Процедура ПомещениеФайлаПриОкончании(РезультатПомещения, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт - - Если РезультатПомещения = Ложь Тогда - Возврат; - КонецЕсли; + НоваяСтрока = Вложения.Добавить(); + НоваяСтрока.Статус = "ВнешнийНовый"; + НоваяСтрока.Выбрано = 1; + НоваяСтрока.Имя = ВыбранныйФайл.Хранение; + НоваяСтрока.Представление = ИмяФайла; + НоваяСтрока.Идентификатор = ИмяФайла; + НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайлаКлиент(Расширение); + + КонецЦикла; - НоваяСтрока = Вложения.Добавить(); - НоваяСтрока.Имя = Адрес; - НоваяСтрока.Представление = ВыбранноеИмяФайла; + Модифицированность = Истина; - Расширение = ПолучитьРасширениеФайла(ВыбранноеИмяФайла); - НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайлаКлиент(Расширение); - НоваяСтрока.Статус = "ВнешнийНовый"; - - Элементы.Вложения.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); - - ОбновитьОтображениеДанных(); - КонецПроцедуры // Получает каталог и имя файла для переданного полного имени файла. @@ -1392,22 +1349,25 @@ &НаКлиенте Процедура ПоместитьФайлыИзЛокальнойФСВоВременноеХранилище(Вложения, УникальныйИдентификатор, Отказ) +#Если Не ВебКлиент Тогда + Для Каждого СтрокаТаблицыВложений Из Вложения Цикл Если СтрокаТаблицыВложений.Статус = "ВнешнийНовый" Тогда Попытка - ЗагружаемыйФайл = Новый Файл(СтрокаТаблицыВложений.Имя); - Если НЕ СтрНачинаетсяС(СтрокаТаблицыВложений.Имя, "e1cib") Тогда - Данные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.Имя); + Если Не СтрНачинаетсяС(СтрокаТаблицыВложений.Имя, "e1cib") Тогда + Данные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.Имя); СтрокаТаблицыВложений.Имя = ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор); КонецЕсли; Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),, "Вложения",, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),, "Вложения",, Отказ); КонецПопытки; КонецЕсли; КонецЦикла; +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -1509,10 +1469,9 @@ ДанныеФайла = МодульРаботаСФайлами.ДанныеФайла(Вложение, УникальныйИдентификатор, Истина); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытияШаблоныСообщений(), ИнформацияОбОшибке, - НСтр("ru='Не удалось извлечь и записать присоединенный файл для копирования.'")); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ЗаписатьОшибкуВЖурналРегистрации(ИмяСобытияШаблоныСообщений(), ИнформацияОбОшибке, НСтр("ru='Не удалось извлечь и записать присоединенный файл для копирования'")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(СписокОшибок, "Вложения", ТекстОшибки, "Вложения",, ТекстОшибки); Продолжить; КонецПопытки; @@ -1620,8 +1579,6 @@ ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаДляРазбора); Если ПустаяСтрока(ИмяБезРасширения) Тогда - ИмяФайлаБезРасширения = НСтр("ru = 'Вложение без имени'") - + ?(КоличествоПустыхИменВоВложениях = 0, ""," " + Строка(КоличествоПустыхИменВоВложениях + 1)); КоличествоПустыхИменВоВложениях = КоличествоПустыхИменВоВложениях + 1; Иначе @@ -1708,7 +1665,7 @@ &НаСервере Функция ИмяСобытияШаблоныСообщений() - Возврат НСтр("ru = 'Шаблоны сообщений'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Шаблоны сообщений'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -1732,7 +1689,7 @@ &НаСервере Процедура ЗаполнитьШаблонПоВнешнейОбработке() - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); ОчиститьШаблон(ЭтотОбъект); @@ -1753,7 +1710,6 @@ Иначе - ВнешняяОбработка = Неопределено; ОписаниеОшибки = НСтр("ru = 'Предмет %1 определенный в внешней обработке не найдено. Внешняя обработка не может быть подключена.'"); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, СтруктураДанныхВнешнейОбработки.ПолноеИмяТипаПараметраВводаНаОсновании); diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl index 295c53ea3..29230c35a 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl b/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl index 33fd3d840..d6f63e2af 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -100,4 +108,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ШаблоныСообщений.mdo b/SSL/src/Catalogs/ШаблоныСообщений/ШаблоныСообщений.mdo index 7ce0c7cb6..66e4d0c98 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ШаблоныСообщений.mdo +++ b/SSL/src/Catalogs/ШаблоныСообщений/ШаблоныСообщений.mdo @@ -526,6 +526,25 @@ Use Use + + ПодписьИПечать + + ru + Подпись и печать + + + Boolean + + + ru + Добавляет факсимильную подпись и печать в печатную форму + + + + + Use + Use + diff --git a/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl index 7283d9b87..ce85a0ebc 100644 --- a/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -13,7 +21,7 @@ // Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт - Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); + Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); КонецФункции diff --git a/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ШаблоныСообщенийПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ШаблоныСообщенийПрисоединенныеФайлы.mdo index 342809e12..30a4ab720 100644 --- a/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ШаблоныСообщенийПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ШаблоныСообщенийПрисоединенныеФайлы/ШаблоныСообщенийПрисоединенныеФайлы.mdo @@ -245,27 +245,6 @@ Index Use - - ИДФайлаЭлектронногоПисьма - - ru - ИД Файла электронного письма - - - String - - 200 - - - - ru - Идентификатор файла электронного письма. Используются в случае когда тело письма в формате HTML, а картинки, предназначенные для отображения в теле письма хранятся в присоединенных файлах - - - - - Use - Изменил @@ -333,25 +312,6 @@ Use Use - - ПодписанЭП - - ru - Подписан ЭП - - - Boolean - - - ru - Признак того, что файл подписан электронно - - - - - Use - Use - ПутьКФайлу @@ -496,6 +456,7 @@ + ShowError Index Use @@ -537,6 +498,27 @@ Use + + ИДФайлаЭлектронногоПисьма + + ru + ИД Файла электронного письма + + + String + + 200 + + + + ru + Идентификатор файла электронного письма. Используются в случае когда тело письма в формате HTML, а картинки, предназначенные для отображения в теле письма хранятся в присоединенных файлах + + + + + Use + ХранитьВерсии @@ -557,6 +539,25 @@ Use Use + + ПодписанЭП + + ru + Подписан ЭП + + + Boolean + + + ru + Признак того, что файл подписан электронно + + + + + Use + Use + diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl index abfeb8fe5..ce85a0ebc 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo index 8a02c34a0..7eb95624c 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo @@ -477,6 +477,7 @@ + ShowError Index Use diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl index abfeb8fe5..ce85a0ebc 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo index 5c181973c..3f3dbfac4 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo @@ -329,6 +329,7 @@ + Use Use @@ -476,6 +477,7 @@ + ShowError Index Use diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Form.form index d46d34a85..5e7e4c511 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Form.form @@ -292,6 +292,9 @@ true + + Список.Ref +
        true
        ChartOfCharacteristicTypes.ВопросыДляАнкетирования diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Module.bsl index a9ac6b0d7..2419d1579 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаСписка/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаСписка/Form.form index 23df086c6..873e8a92f 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаСписка/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаСписка/Form.form @@ -360,6 +360,9 @@ true + + Список.Ref +
        true
        ChartOfCharacteristicTypes.ВопросыДляАнкетирования diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl index 049225815..3cd4b2468 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -59,8 +66,9 @@ Если Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Число") Тогда Если Объект.МинимальноеЗначение > Объект.МаксимальноеЗначение Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Минимально допустимое значение не может быть больше чем максимальное.'"),, - "Объект.МинимальноеЗначение"); + ОбщегоНазначенияКлиент.СообщитьПользователю( + НСтр("ru = 'Минимально допустимое значение не может быть больше чем максимальное.'"),, + "Объект.МинимальноеЗначение"); Отказ = Истина; КонецЕсли; @@ -68,7 +76,7 @@ Объект.Длина = ДлинаСтроки; Если ДлинаСтроки = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнено значение длины строки.'"),,"ДлинаСтроки"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не заполнено значение длины строки.'"),,"ДлинаСтроки"); Отказ = Истина; КонецЕсли; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl index c982f3524..92b478e1f 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl index 43cb08010..794c79800 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -119,4 +127,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ВыборРеквизита/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ВыборРеквизита/Module.bsl index 0ffe8b904..d79ccbda7 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ВыборРеквизита/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ВыборРеквизита/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -8,14 +16,6 @@ ТаблицаРеквизитов = ПолучитьИзВременногоХранилища(Параметры.РеквизитыОбъекта); ЗначениеВРеквизитФормы(ТаблицаРеквизитов, "РеквизитыОбъекта"); - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаКомандаОтмена", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form index ebbb26230..bf3356c49 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Form.form @@ -132,7 +132,7 @@ Не равно - Не равно + НеРавно @@ -150,7 +150,7 @@ Не заполнено - Не заполнено + НеЗаполнено @@ -168,7 +168,7 @@ Не в списке - Не в списке + НеВСписке Normal @@ -676,6 +676,23 @@ true
        + + НажатаОтмена + + <key>ru</key> + <value>Нажата отмена</value> + + 5 + + Boolean + + + true + + + true + + КомандаОк diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl index 7ffb72091..baef5beb7 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -35,7 +43,14 @@ НаборДополнительныхРеквизитов = НаборСвойств.ДополнительныеРеквизиты; - ИмяПредопределенныхДанных = НаборСвойств.ИмяПредопределенныхДанных; + ПредопределенныеНаборыСвойств = УправлениеСвойствамиПовтИсп.ПредопределенныеНаборыСвойств(); + ОписаниеНабора = ПредопределенныеНаборыСвойств.Получить(НаборСвойств); + Если ОписаниеНабора = Неопределено Тогда + ИмяПредопределенныхДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств, "ИмяПредопределенныхДанных"); + Иначе + ИмяПредопределенныхДанных = ОписаниеНабора.Имя; + КонецЕсли; + ПозицияЗаменяемогоСимвола = СтрНайти(ИмяПредопределенныхДанных, "_"); ПолноеИмяОбъектаМетаданных = Лев(ИмяПредопределенныхДанных, ПозицияЗаменяемогоСимвола - 1) + "." @@ -47,8 +62,8 @@ ЗависимостиДополнительныхРеквизитов = Параметры.ЗависимостиРеквизитов; Для Каждого СтрокаТабличнойЧасти Из ЗависимостиДополнительныхРеквизитов Цикл Если СтрокаТабличнойЧасти.ЗависимоеСвойство = НастраиваемоеСвойство Тогда - РеквизитСМножественнымЗначением = (СтрокаТабличнойЧасти.Условие = "В списке") - Или (СтрокаТабличнойЧасти.Условие = "Не в списке"); + РеквизитСМножественнымЗначением = (СтрокаТабличнойЧасти.Условие = "ВСписке") + Или (СтрокаТабличнойЧасти.Условие = "НеВСписке"); Если РеквизитСМножественнымЗначением Тогда ПараметрыОтбора = Новый Структура; @@ -85,18 +100,15 @@ КонецЕсли; КонецЦикла; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаКомандаОтмена", "Видимость", Ложь); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; КонецЕсли; КонецПроцедуры #КонецОбласти -#Область ОбработчикиСобытийТаблицыФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ЗависимостиРеквизитовРеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -117,8 +129,8 @@ ТекущаяСтрока = ЗависимостиРеквизитов.НайтиПоИдентификатору(ТаблицаФормы.ТекущаяСтрока); ТекущаяСтрока.Значение = Неопределено; - Если ТаблицаФормы.ТекущиеДанные.Условие = "В списке" - Или ТаблицаФормы.ТекущиеДанные.Условие = "Не в списке" Тогда + Если ТаблицаФормы.ТекущиеДанные.Условие = "ВСписке" + Или ТаблицаФормы.ТекущиеДанные.Условие = "НеВСписке" Тогда ТекущаяСтрока.Значение = Новый СписокЗначений; ТекущаяСтрока.Значение.ТипЗначения = ТаблицаФормы.ТекущиеДанные.ТипЗначения; Иначе @@ -183,9 +195,9 @@ КопияТаблицы.Колонки.Удалить("ТипЗначения"); ПараметрОтбора = Новый Структура; - ПараметрОтбора.Вставить("Условие", "В списке"); // Идентификатор. + ПараметрОтбора.Вставить("Условие", "ВСписке"); ПреобразоватьЗависимостиВСписке(КопияТаблицы, ПараметрОтбора); - ПараметрОтбора.Условие = "Не в списке"; // Идентификатор. + ПараметрОтбора.Условие = "НеВСписке"; ПреобразоватьЗависимостиВСписке(КопияТаблицы, ПараметрОтбора); Возврат Новый ХранилищеЗначения(КопияТаблицы); @@ -289,8 +301,8 @@ КонецЕсли; ПолеВвода.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораМассив); - Если ТаблицаФормы.ТекущиеДанные.Условие = "В списке" - Или ТаблицаФормы.ТекущиеДанные.Условие = "Не в списке" Тогда + Если ТаблицаФормы.ТекущиеДанные.Условие = "ВСписке" + Или ТаблицаФормы.ТекущиеДанные.Условие = "НеВСписке" Тогда ПолеВвода.ОграничениеТипа = Новый ОписаниеТипов("СписокЗначений"); Иначе ПолеВвода.ОграничениеТипа = ТаблицаФормы.ТекущиеДанные.ТипЗначения; @@ -301,6 +313,10 @@ &НаСервере Процедура УстановитьУсловноеОформление() + УсловноеОформление.Элементы.Очистить(); + + // + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ЭлементДоступность = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Доступность"); @@ -309,7 +325,7 @@ ЗначенияСравнения = Новый СписокЗначений; ЗначенияСравнения.Добавить("Заполнено"); - ЗначенияСравнения.Добавить("Не заполнено"); // исключение, является идентификатором. + ЗначенияСравнения.Добавить("НеЗаполнено"); // исключение, является идентификатором. ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗависимостиРеквизитов.Условие"); @@ -321,6 +337,58 @@ ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("ЗависимостиРеквизитовПравоеЗначение"); ЭлементОформляемогоПоля.Использование = Истина; + // + + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗависимостиРеквизитовВидСравнения.Имя); + + ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗависимостиРеквизитов.Условие"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = "НеРавно"; + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не равно'")); + + // + + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗависимостиРеквизитовВидСравнения.Имя); + + ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗависимостиРеквизитов.Условие"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = "НеЗаполнено"; + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не заполнено'")); + + // + + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗависимостиРеквизитовВидСравнения.Имя); + + ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗависимостиРеквизитов.Условие"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = "ВСписке"; + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'В списке'")); + + // + + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗависимостиРеквизитовВидСравнения.Имя); + + ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗависимостиРеквизитов.Условие"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = "НеВСписке"; + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не в списке'")); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl index f08a46653..dd937ba34 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -45,12 +53,6 @@ Элементы.ОбщиеЗначенияСведенийКомментарий.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ОбщиеЗначенияСведенийКомментарий.Заголовок, ТекущийНаборСвойств); - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); - - КонецЕсли; КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl index 16eca40b8..56cf2599e 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -38,10 +45,8 @@ Элементы.КнопкиПредупреждения.Видимость = Ложь; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl index 4855a5237..fa121ca31 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Module.bsl index f783812e3..a975a779f 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form index 64bed6a10..523dcc44e 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form @@ -1,60 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <items xsi:type="form:FormGroup"> - <name>ОсновнаяКоманднаяПанель</name> - <id>240</id> - <items xsi:type="form:Button"> - <name>ФормаУстановитьСнятьПометкуУдаления</name> - <id>453</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаУстановитьСнятьПометкуУдаленияРасширеннаяПодсказка</name> - <id>454</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> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <title> - <key>ru</key> - <value>Основная командная панель</value> - - - ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 241 - Label - true - true - - Left - - - CommandBar - - Left - Form - -
        СтраницыПомощникКарточка 200 @@ -222,6 +167,7 @@ НаборыСвойств 345 + VeryHigh <key>ru</key> <value>Наборы свойств</value> @@ -438,6 +384,7 @@ <rowsPicture xsi:type="core:PictureRef"> <picture>CommonPicture.ПиктограммыЭлементов</picture> </rowsPicture> + <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> @@ -650,6 +597,7 @@ <rowsPicture xsi:type="core:PictureRef"> <picture>CommonPicture.ПиктограммыЭлементов</picture> </rowsPicture> + <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> @@ -735,7 +683,6 @@ <group>Vertical</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> - <united>true</united> <throughAlign>Auto</throughAlign> <currentRowUse>Auto</currentRowUse> </extInfo> @@ -746,6 +693,7 @@ <items xsi:type="form:Table"> <name>Свойства</name> <id>366</id> + <displayImportance>VeryLow</displayImportance> <title> <key>ru</key> <value>Свойства</value> @@ -965,67 +913,205 @@ <autoMaxCardHeight>true</autoMaxCardHeight> <rowFilter xsi:type="core:UndefinedValue"/> </items> - <items xsi:type="form:FormField"> - <name>СписокДополнительныхРеквизитовТипЗначения</name> - <id>384</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаДополнительнаяИнформация</name> + <id>469</id> + <items xsi:type="form:FormField"> + <name>СписокДополнительныхРеквизитовТипЗначения</name> + <id>384</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Items.Свойства.CurrentData.ТипЗначения</segments> + </dataPath> + <titleLocation>Top</titleLocation> + <extendedTooltip> + <name>СписокДополнительныхРеквизитовТипЗначенияРасширеннаяПодсказка</name> + <id>386</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СписокДополнительныхРеквизитовТипЗначенияКонтекстноеМеню</name> + <id>385</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:FormField"> + <name>СписокДополнительныхРеквизитовПодсказка</name> + <id>387</id> + <title> + <key>ru</key> + <value>Всплывающая подсказка</value> + + true + true + + true + + + Items.Свойства.CurrentData.Подсказка + + Top + + СписокДополнительныхРеквизитовПодсказкаРасширеннаяПодсказка + 389 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовПодсказкаКонтекстноеМеню + 388 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Не задана + + + + + СписокДополнительныхРеквизитовЗаголовокФормыЗначения + 390 + true + true + + true + + + Items.Свойства.CurrentData.ЗаголовокФормыЗначения + + Top + + СписокДополнительныхРеквизитовЗаголовокФормыЗначенияРасширеннаяПодсказка + 392 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовЗаголовокФормыЗначенияКонтекстноеМеню + 391 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Не задан + + + + + СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначения + 393 + true + true + + true + + + Items.Свойства.CurrentData.ЗаголовокФормыВыбораЗначения + + Top + + СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначенияРасширеннаяПодсказка + 395 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначенияКонтекстноеМеню + 394 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Не задан + + + true true true - - Items.Свойства.CurrentData.ТипЗначения - - Top - - СписокДополнительныхРеквизитовТипЗначенияРасширеннаяПодсказка - 386 - Label - true - true - - Left - - - - СписокДополнительныхРеквизитовТипЗначенияКонтекстноеМеню - 385 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - СписокДополнительныхРеквизитовПодсказка - 387 <key>ru</key> - <value>Всплывающая подсказка</value> + <value>Дополнительная информация</value> - true - true - - true - - - Items.Свойства.CurrentData.Подсказка - - Top - СписокДополнительныхРеквизитовПодсказкаРасширеннаяПодсказка - 389 + ГруппаДополнительнаяИнформацияРасширеннаяПодсказка + 470 Label true true @@ -1033,120 +1119,14 @@ Left - - СписокДополнительныхРеквизитовПодсказкаКонтекстноеМеню - 388 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - ru - Не задана - - - - - СписокДополнительныхРеквизитовЗаголовокФормыЗначения - 390 - true - true - - true - - - Items.Свойства.CurrentData.ЗаголовокФормыЗначения - - Top - - СписокДополнительныхРеквизитовЗаголовокФормыЗначенияРасширеннаяПодсказка - 392 - Label - true - true - - Left - - - - СписокДополнительныхРеквизитовЗаголовокФормыЗначенияКонтекстноеМеню - 391 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - ru - Не задан - - - - - СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначения - 393 - true - true - - true - - - Items.Свойства.CurrentData.ЗаголовокФормыВыбораЗначения - - Top - - СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначенияРасширеннаяПодсказка - 395 - Label - true - true - - Left - - - - СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначенияКонтекстноеМеню - 394 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - ru - Не задан - + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -1156,7 +1136,7 @@ <key>ru</key> - <value>Расшифровка реквизита</value> + <value>Дополнительные реквизиты</value> Style.FormTextColor @@ -1203,7 +1183,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -1279,6 +1259,7 @@ Left true + RadioButtons 1 @@ -1368,6 +1349,10 @@ Left true + + Opening + ЗаголовокОткрытие + true true true @@ -1879,6 +1864,68 @@ ГруппаСвойства 326 + true + true + + true + + + <key>ru</key> + <value>Свойства</value> + + + ГруппаСвойстваРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + Auto + Auto + + + + ГруппаНастройкаЗависимостей + 328 + true + true + + true + + + <key>ru</key> + <value>Настройка зависимостей</value> + + + ГруппаНастройкаЗависимостейРасширеннаяПодсказка + 329 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + Auto + Auto + + + + ГруппаВиден + 463 Виден 402 @@ -1913,6 +1960,75 @@ Left
        + + ЗадатьУсловиеВидимости + 333 + + <key>ru</key> + <value>всегда</value> + + true + true + + true + + + ЗадатьУсловиеВидимостиРасширеннаяПодсказка + 335 + Label + true + true + + Left + + + + ЗадатьУсловиеВидимостиКонтекстноеМеню + 334 + true + + Label + true + + + Click + ЗадатьУсловиеВидимостиНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Виден</value> + + + ГруппаВиденРасширеннаяПодсказка + 464 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + Auto + Auto + +
        + + ГруппаДоступен + 465 Доступен 405 @@ -1947,6 +2063,75 @@ Left + + ЗадатьУсловиеДоступности + 194 + + <key>ru</key> + <value>всегда</value> + + true + true + + true + + + ЗадатьУсловиеДоступностиРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + ЗадатьУсловиеДоступностиКонтекстноеМеню + 195 + true + + Label + true + + + Click + ЗадатьУсловиеДоступностиНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Доступен</value> + + + ГруппаДоступенРасширеннаяПодсказка + 466 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + Auto + Auto + + + + ГруппаЗаполнятьОбязательно + 467 ЗаполнятьОбязательно 184 @@ -1989,113 +2174,6 @@ true - true - true - - true - - - <key>ru</key> - <value>Свойства</value> - - - ГруппаСвойстваРасширеннаяПодсказка - 327 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - Auto - Auto - - - - ГруппаНастройкаЗависимостей - 328 - - ЗадатьУсловиеВидимости - 333 - - <key>ru</key> - <value>всегда</value> - - true - true - - true - - - ЗадатьУсловиеВидимостиРасширеннаяПодсказка - 335 - Label - true - true - - Left - - - - ЗадатьУсловиеВидимостиКонтекстноеМеню - 334 - true - - Label - true - - - Click - ЗадатьУсловиеВидимостиНажатие - - true - Left - - - - ЗадатьУсловиеДоступности - 194 - - <key>ru</key> - <value>всегда</value> - - true - true - - true - - - ЗадатьУсловиеДоступностиРасширеннаяПодсказка - 196 - Label - true - true - - Left - - - - ЗадатьУсловиеДоступностиКонтекстноеМеню - 195 - true - - Label - true - - - Click - ЗадатьУсловиеДоступностиНажатие - - true - Left - - ЗадатьУсловиеЗаполнения 197 @@ -2141,11 +2219,11 @@ <key>ru</key> - <value>Настройка зависимостей</value> + <value>Заполнять обязательно</value> - ГруппаНастройкаЗависимостейРасширеннаяПодсказка - 329 + ГруппаЗаполнятьОбязательноРасширеннаяПодсказка + 468 Label true true @@ -2155,7 +2233,7 @@ UsualGroup - Vertical + HorizontalIfPossible Auto true Auto @@ -2183,7 +2261,7 @@ UsualGroup - HorizontalIfPossible + Vertical Auto true true @@ -2231,6 +2309,10 @@ Left true + + Opening + ПодсказкаОткрытие + true true true @@ -2280,6 +2362,10 @@ Left true + + Opening + ЗаголовокФормыЗначенияОткрытие + 20 true true @@ -2327,6 +2413,10 @@ Left true + + Opening + ЗаголовокФормыВыбораЗначенияОткрытие + 20 true true @@ -2606,13 +2696,17 @@ ЗначенияНаименование 60 + + <key>ru</key> + <value>Наименование</value> + true true true - Значения.Description + Значения.Наименование ЗначенияНаименованиеExtendedTooltip @@ -2676,6 +2770,40 @@ true + + ЗначенияСсылка + 460 + true + true + + + Значения.Ref + + + ЗначенияСсылкаРасширеннаяПодсказка + 462 + Label + true + true + + Left + + + + ЗначенияСсылкаКонтекстноеМеню + 461 + true + + LabelField + Enter + true + Left + true + + true + true + + ЗначенияКоманднаяПанель 59 @@ -4123,7 +4251,35 @@ ФормаКоманднаяПанель -1 + + ФормаУстановитьСнятьПометкуУдаления + 453 + true + true + + true + + + ФормаУстановитьСнятьПометкуУдаленияРасширеннаяПодсказка + 454 + Label + true + true + + Left + + + Form.Command.УстановитьСнятьПометкуУдаления + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left + true ChoiceProcessing @@ -4271,9 +4427,29 @@ Значения.Ref + ВЫБРАТЬ + ЗначенияПереопределяемый.Ссылка, + ЗначенияПереопределяемый.ВерсияДанных, + ЗначенияПереопределяемый.ПометкаУдаления, + ЗначенияПереопределяемый.Предопределенный, + ЗначенияПереопределяемый.Владелец, + ЗначенияПереопределяемый.Родитель, + ЗначенияПереопределяемый.ЭтоГруппа, + ВЫБОР + КОГДА &ЭтоОсновнойЯзык + ТОГДА ЗначенияПереопределяемый.Наименование + ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЗначенияПредставленияПереопределяемый.Наименование, ЗначенияПереопределяемый.Наименование) КАК СТРОКА(150)) + КОНЕЦ КАК Наименование, + ЗначенияПереопределяемый.Вес +ИЗ + Справочник.ЗначенияСвойствОбъектов КАК ЗначенияПереопределяемый + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЗначенияСвойствОбъектов.Представления КАК ЗначенияПредставленияПереопределяемый + ПО (ЗначенияПредставленияПереопределяемый.Ссылка = ЗначенияПереопределяемый.Ссылка) + И ЗначенияПредставленияПереопределяемый.КодЯзыка = &КодЯзыка Catalog.ЗначенияСвойствОбъектов true true + true true true diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl index 01ac61c6f..c0750576c 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl @@ -1,7 +1,15 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте -Перем ОбработкаПродолженияПриОшибкеЗаписи; +Перем ОбработкаПродолженияПриОшибкеЗаписи, ОтказПриЗаписи; #КонецОбласти @@ -39,19 +47,40 @@ КонецЕсли; ОбновитьСоставЭлементовФормы(); - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если ОбщегоНазначения.ЭтоВебКлиент() Тогда Элементы.КарточкаРеквизита.Видимость = Ложь; КонецЕсли; Иначе ЗаполнитьКарточкуРеквизитаИлиСведения(); // Обработчик подсистемы запрета редактирования реквизитов объектов. - ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект, Элементы.ОсновнаяКоманднаяПанель); + ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); КонецЕсли; Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПоискИУдалениеДублей") Тогда Элементы.ФормаПоискИУдалениеДублей.Видимость = Ложь; КонецЕсли; + Элементы.ГруппаМногострочность.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; + Если Не УправлениеСвойствамиСлужебный.ТипЗначенияСодержитЗначенияСвойств(Объект.ТипЗначения) Тогда + Элементы.ГруппаСвойстваИЗависимости.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; + Элементы.ОстальныеРеквизиты.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; + КонецЕсли; + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.НаборыСвойств.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; + Элементы.ГруппаДополнительнаяИнформация.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; + Элементы.Закрыть.Видимость = Ложь; + Элементы.ГруппаНаименованиеРеквизита.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.ТипЗначенияРеквизита.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + КонецЕсли; + + ЛокализуемыеЭлементы = Новый Массив; + ЛокализуемыеЭлементы.Добавить(Элементы.Заголовок); + ЛокализуемыеЭлементы.Добавить(Элементы.Подсказка); + ЛокализуемыеЭлементы.Добавить(Элементы.ЗаголовокФормыЗначения); + ЛокализуемыеЭлементы.Добавить(Элементы.ЗаголовокФормыВыбораЗначения); + ЛокализацияСервер.ПриСозданииНаСервере(ЛокализуемыеЭлементы); + КонецПроцедуры &НаКлиенте @@ -79,7 +108,7 @@ // Заполнение наименования по набору свойств // и проверка есть ли свойство с тем же наименованием. ТекстВопроса = НаименованиеУжеИспользуется( - Объект.Заголовок, Объект.Ссылка, Объект.НаборСвойств, Объект.Наименование); + Объект.Заголовок, Объект.Ссылка, Объект.НаборСвойств, Объект.Наименование, Объект.Представления); Если ЗначениеЗаполнено(ТекстВопроса) Тогда Кнопки = Новый СписокЗначений; @@ -90,6 +119,7 @@ Новый ОписаниеОповещения("ПослеОтветаНаВопросКогдаНаименованиеУжеИспользуется", ЭтотОбъект, ПараметрыЗаписи), ТекстВопроса, Кнопки, , "ВернутьсяКВводуНаименования"); + ОтказПриЗаписи = Истина; Отказ = Истина; Возврат; КонецЕсли; @@ -111,6 +141,7 @@ Новый ОписаниеОповещения("ПослеОтветаНаВопросКогдаИмяУжеИспользуется", ЭтотОбъект, ПараметрыЗаписи), ТекстВопроса, Кнопки, , "ПродолжитьЗапись"); + ОтказПриЗаписи = Истина; Отказ = Истина; Возврат; КонецЕсли; @@ -170,6 +201,8 @@ ТекущийОбъект.Имя = ТекущийОбъект.Имя + "_" + СтрокаУИД; КонецЕсли; + ЛокализацияСервер.ПередЗаписьюНаСервере(ТекущийОбъект); + КонецПроцедуры &НаСервере @@ -288,7 +321,9 @@ МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом - + + ЛокализацияСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); + КонецПроцедуры #КонецОбласти @@ -368,9 +403,7 @@ Процедура КомментарийОткрытие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( - Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект); КонецПроцедуры @@ -396,7 +429,7 @@ &НаКлиенте Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект); КонецПроцедуры &НаКлиенте @@ -405,6 +438,26 @@ Элементы.МногострочноеПолеВводаЧисло.Доступность = (ПредставлениеРеквизита = "МногострочноеПолеВвода"); КонецПроцедуры +&НаКлиенте +Процедура ЗаголовокОткрытие(Элемент, СтандартнаяОбработка) + ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Заголовок", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ПодсказкаОткрытие(Элемент, СтандартнаяОбработка) + ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "Подсказка", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаголовокФормыЗначенияОткрытие(Элемент, СтандартнаяОбработка) + ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "ЗаголовокФормыЗначения", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаголовокФормыВыбораЗначенияОткрытие(Элемент, СтандартнаяОбработка) + ЛокализацияКлиент.ПриОткрытии(Объект, Элемент, "ЗаголовокФормыВыбораЗначения", СтандартнаяОбработка); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыНаборыСвойств @@ -489,11 +542,11 @@ &НаКлиенте Процедура КомандаДалее(Команда) - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - Если Не Элементы.КарточкаРеквизита.Видимость Тогда - Элементы.КарточкаРеквизита.Видимость = Истина; - КонецЕсли; +#Если ВебКлиент Тогда + Если Не Элементы.КарточкаРеквизита.Видимость Тогда + Элементы.КарточкаРеквизита.Видимость = Истина; КонецЕсли; +#КонецЕсли Если РежимДобавленияРеквизита = "СделатьОбщим" Тогда КонвертироватьДополнительныйРеквизитВОбщий(); @@ -528,7 +581,9 @@ КонецЕсли; Записать(); - Закрыть(); + Если ОтказПриЗаписи <> Истина Тогда + Закрыть(); + КонецЕсли; Возврат; КонецЕсли; ТекущаяСтраница = ОсновнаяСтраница.ПодчиненныеЭлементы.Получить(ИндексСтраницы + 1); @@ -728,7 +783,13 @@ ИсключаемыеНаборы = Новый Массив; ИсключаемыеНаборы.Добавить(ПереданныеПараметрыФормы.ТекущийНаборСвойств); Если ЗначениеЗаполнено(РодительТекущегоНабора) Тогда - ИмяПредопределенныхДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РодительТекущегоНабора, "ИмяПредопределенныхДанных"); + ПредопределенныеНаборы = УправлениеСвойствамиПовтИсп.ПредопределенныеНаборыСвойств(); + СвойстваНабора = ПредопределенныеНаборы.Получить(РодительТекущегоНабора); + Если СвойстваНабора = Неопределено Тогда + ИмяПредопределенныхДанных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РодительТекущегоНабора, "ИмяПредопределенныхДанных"); + Иначе + ИмяПредопределенныхДанных = СвойстваНабора.Имя; + КонецЕсли; ПозицияЗаменяемогоСимвола = СтрНайти(ИмяПредопределенныхДанных, "_"); ПолноеИмяОбъекта = Лев(ИмяПредопределенныхДанных, ПозицияЗаменяемогоСимвола - 1) + "." @@ -773,9 +834,39 @@ ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( ОбщиеНаборыСвойств, "ОбщиеДополнительныеСведения", НСтр("ru = 'Общие дополнительные сведения'"), Истина); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( ОбщиеНаборыСвойств, "ОбщиеДополнительныеРеквизиты", НСтр("ru = 'Общие дополнительные реквизиты'"), Истина); + УстановитьУсловноеОформлениеСписка(ДоступныеНаборы); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформлениеСписка(ДоступныеНаборыСписок) + + ЭлементУсловногоОформления = НаборыСвойств.УсловноеОформление.Элементы.Добавить(); + + ЭлементВидимость = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Видимость"); + ЭлементВидимость.Значение = Ложь; + ЭлементВидимость.Использование = Истина; + + ГруппаЭлементовОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаЭлементовОтбораДанных.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + ГруппаЭлементовОтбораДанных.Использование = Истина; + + ЭлементОтбораДанных = ГруппаЭлементовОтбораДанных.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; + ЭлементОтбораДанных.ПравоеЗначение = ДоступныеНаборыСписок; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОтбораДанных = ГруппаЭлементовОтбораДанных.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Родитель"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; + ЭлементОтбораДанных.ПравоеЗначение = ДоступныеНаборыСписок; + ЭлементОтбораДанных.Использование = Истина; + КонецПроцедуры &НаСервере @@ -790,7 +881,7 @@ | ЗначенияСвойствОбъектов.Владелец КАК Владелец, | 0 КАК КодКартинки, | ЗначенияСвойствОбъектов.Вес, - | ЗначенияСвойствОбъектов.Наименование + | ПРЕДСТАВЛЕНИЕ(ЗначенияСвойствОбъектов.Ссылка) КАК Наименование |ИЗ | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ @@ -804,7 +895,7 @@ | ЗначенияСвойствОбъектовИерархия.Владелец, | 0, | ЗначенияСвойствОбъектовИерархия.Вес, - | ЗначенияСвойствОбъектовИерархия.Наименование + | ПРЕДСТАВЛЕНИЕ(ЗначенияСвойствОбъектовИерархия.Наименование) КАК Наименование |ИЗ | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектовИерархия |ГДЕ @@ -1029,8 +1120,6 @@ Возврат; КонецЕсли; - ВыбранныйНабор = Неопределено; - Если СписокНаборов.Количество() > 1 Тогда ПоказатьВыборИзСписка( Новый ОписаниеОповещения("УточнениеНаборовКомментарийНажатиеЗавершение", ЭтотОбъект), @@ -1386,7 +1475,7 @@ Процедура ОбновитьСоставЭлементовФормы(ТекстПредупреждения = "") Если РежимПомощника Тогда - Элементы.ОсновнаяКоманднаяПанель.Видимость = Ложь; + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет; Элементы.КомандаДалее.КнопкаПоУмолчанию = Истина; Иначе Элементы.КоманднаяПанельПомощника.Видимость = Ложь; @@ -1439,12 +1528,15 @@ Элементы.ГруппаСвойстваИЗависимости.Видимость = Истина; Если МожноНастраиватьВидимостьДоступность Тогда - Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; - Элементы.ЗадатьУсловиеДоступности.Доступность = Истина; - Элементы.ЗадатьУсловиеВидимости.Доступность = Истина; + Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; + Элементы.ЗадатьУсловиеДоступности.Доступность = Истина; + Элементы.ЗадатьУсловиеВидимости.Доступность = Истина; Иначе - Элементы.ГруппаНастройкаЗависимостей.Видимость = Ложь; - Элементы.Виден.Видимость = Ложь; + Элементы.ЗадатьУсловиеВидимости.Видимость = Ложь; + Элементы.ЗадатьУсловиеДоступности.Видимость = Ложь; + Элементы.ЗадатьУсловиеЗаполнения.Видимость = Ложь; + + Элементы.Виден.Видимость = Ложь; Элементы.Доступен.Видимость = Ложь; Элементы.ЗаполнятьОбязательно.Заголовок = НСтр("ru = 'Заполнять обязательно'"); КонецЕсли; @@ -1593,16 +1685,59 @@ Если Объект.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ТекстЗапроса = + "ВЫБРАТЬ + | Значения.Ссылка, + | Значения.ВерсияДанных, + | Значения.ПометкаУдаления, + | Значения.Предопределенный, + | Значения.Владелец, + | Значения.Родитель, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Значения.Наименование + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЗначенияПредставления.Наименование, Значения.Наименование) КАК СТРОКА(150)) + | КОНЕЦ КАК Наименование, + | Значения.Вес + |ИЗ + | Справочник.ЗначенияСвойствОбъектов КАК Значения + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЗначенияСвойствОбъектов.Представления КАК ЗначенияПредставления + | ПО (ЗначенияПредставления.Ссылка = Значения.Ссылка) + | И ЗначенияПредставления.КодЯзыка = &КодЯзыка"; СвойстваСписка.ОсновнаяТаблица = "Справочник.ЗначенияСвойствОбъектов"; ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Значения, СвойстваСписка); Иначе СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ТекстЗапроса = + "ВЫБРАТЬ + | Значения.Ссылка, + | Значения.ВерсияДанных, + | Значения.ПометкаУдаления, + | Значения.Предопределенный, + | Значения.Владелец, + | Значения.Родитель, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Значения.Наименование + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЗначенияПредставления.Наименование, Значения.Наименование) КАК СТРОКА(150)) + | КОНЕЦ КАК Наименование, + | Значения.Вес + |ИЗ + | Справочник.ЗначенияСвойствОбъектовИерархия КАК Значения + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЗначенияСвойствОбъектовИерархия.Представления КАК ЗначенияПредставления + | ПО (ЗначенияПредставления.Ссылка = Значения.Ссылка) + | И ЗначенияПредставления.КодЯзыка = &КодЯзыка"; СвойстваСписка.ОсновнаяТаблица = "Справочник.ЗначенияСвойствОбъектовИерархия"; ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Значения, СвойстваСписка); КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + Значения, "ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + Значения, "КодЯзыка", ТекущийЯзык().КодЯзыка, Истина); + // Отображение уточнений. Если НЕ ЗначениеЗаполнено(Объект.ВладелецДополнительныхЗначений) Тогда @@ -1756,7 +1891,7 @@ КонецЕсли; Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить(ИмяТаблицыЗначений); + Блокировка.Добавить(ИмяТаблицыЗначений); НачатьТранзакцию(); Попытка @@ -1989,7 +2124,7 @@ КонецЕсли; КонецЦикла; - ШаблонЗависимостьЗадана = НСтр("ru = 'при заданном условии'"); + ШаблонЗависимостьЗадана = НСтр("ru = 'с условием'"); ШаблонЗависимостьНеЗадана = НСтр("ru = 'всегда'"); Элементы.ЗадатьУсловиеДоступности.Заголовок = ?(ЗаданаЗависимостьДоступности, @@ -2096,7 +2231,11 @@ | СвойстваНаборов.НомерСтроки, | СвойстваНаборов.Свойство, | СвойстваНаборов.ПометкаУдаления, - | ЕСТЬNULL(Свойства.Заголовок, ПРЕДСТАВЛЕНИЕ(СвойстваНаборов.Свойство)) КАК Заголовок, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.Заголовок + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, Свойства.Заголовок) КАК СТРОКА(150)) + | КОНЕЦ КАК Заголовок, | Свойства.ВладелецДополнительныхЗначений, | Свойства.ТипЗначения КАК ТипЗначения, | ВЫБОР @@ -2111,13 +2250,29 @@ | ТОГДА 4 | ИНАЧЕ 3 | КОНЕЦ КАК НомерКартинки, - | Свойства.Подсказка, - | Свойства.ЗаголовокФормыЗначения, - | Свойства.ЗаголовокФормыВыбораЗначения + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.Подсказка + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Подсказка, Свойства.Подсказка) КАК СТРОКА(150)) + | КОНЕЦ КАК Подсказка, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.ЗаголовокФормыЗначения + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.ЗаголовокФормыЗначения, Свойства.ЗаголовокФормыЗначения) КАК СТРОКА(150)) + | КОНЕЦ КАК ЗаголовокФормыЗначения, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.ЗаголовокФормыВыбораЗначения + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.ЗаголовокФормыВыбораЗначения, Свойства.ЗаголовокФормыВыбораЗначения) КАК СТРОКА(150)) + | КОНЕЦ КАК ЗаголовокФормыВыбораЗначения |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства | ПО СвойстваНаборов.Свойство = Свойства.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления + | ПО СвойстваНаборов.Свойство = СвойстваПредставления.Ссылка + | И СвойстваПредставления.КодЯзыка = &КодЯзыка + | |ГДЕ | СвойстваНаборов.Ссылка = &Набор | @@ -2145,7 +2300,11 @@ "ВЫБРАТЬ | Свойства.Ссылка КАК Свойство, | Свойства.ПометкаУдаления КАК ПометкаУдаления, - | Свойства.Заголовок КАК Заголовок, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.Заголовок + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, Свойства.Заголовок) КАК СТРОКА(150)) + | КОНЕЦ КАК Заголовок, | Свойства.ВладелецДополнительныхЗначений, | Свойства.ТипЗначения КАК ТипЗначения, | ИСТИНА КАК Общее, @@ -2154,11 +2313,26 @@ | ТОГДА 4 | ИНАЧЕ 3 | КОНЕЦ КАК НомерКартинки, - | Свойства.Подсказка, - | Свойства.ЗаголовокФормыЗначения, - | Свойства.ЗаголовокФормыВыбораЗначения + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.Подсказка + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Подсказка, Свойства.Подсказка) КАК СТРОКА(150)) + | КОНЕЦ КАК Подсказка, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.ЗаголовокФормыЗначения + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.ЗаголовокФормыЗначения, Свойства.ЗаголовокФормыЗначения) КАК СТРОКА(150)) + | КОНЕЦ КАК ЗаголовокФормыЗначения, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА Свойства.ЗаголовокФормыВыбораЗначения + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.ЗаголовокФормыВыбораЗначения, Свойства.ЗаголовокФормыВыбораЗначения) КАК СТРОКА(150)) + | КОНЕЦ КАК ЗаголовокФормыВыбораЗначения |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления + | ПО Свойства.Свойство = СвойстваПредставления.Ссылка + | И СвойстваПредставления.КодЯзыка = &КодЯзыка | |ГДЕ | Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) @@ -2172,6 +2346,8 @@ Запрос.УстановитьПараметр("ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1)); КонецЕсли; + Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); + Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); НачатьТранзакцию(); Попытка @@ -2217,7 +2393,7 @@ КонецЕсли; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 4 - | ЗначенияСвойствОбъектов.Наименование КАК Наименование + | ПРЕДСТАВЛЕНИЕ(ЗначенияСвойствОбъектов.Ссылка) КАК Наименование |ИЗ | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ @@ -2228,7 +2404,7 @@ |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ ПЕРВЫЕ 4 - | ЗначенияСвойствОбъектовИерархия.Наименование + | ПРЕДСТАВЛЕНИЕ(ЗначенияСвойствОбъектовИерархия.Ссылка) КАК Наименование |ИЗ | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектовИерархия |ГДЕ @@ -2308,7 +2484,16 @@ КонецПроцедуры &НаСервереБезКонтекста -Функция НаименованиеУжеИспользуется(Знач Заголовок, Знач ТекущееСвойство, Знач НаборСвойств, НовоеНаименование) +Функция НаименованиеУжеИспользуется(Знач Заголовок, Знач ТекущееСвойство, Знач НаборСвойств, НовоеНаименование, Знач Представления) + + Если ТекущийЯзык() <> Метаданные.ОсновнойЯзык Тогда + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", Метаданные.ОсновнойЯзык.КодЯзыка); + НайденныеСтроки = Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Заголовок = НайденныеСтроки[0].Заголовок; + КонецЕсли; + КонецЕсли; Если ЗначениеЗаполнено(НаборСвойств) Тогда НаименованиеНабора = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств, "Наименование"); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl index eaf807010..3955da493 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -67,6 +75,8 @@ #Область ОбработчикиСобытий +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Если Параметры.Свойство("ЭтоВыборЗначенияДоступа") Тогда @@ -75,6 +85,28 @@ КонецПроцедуры +#КонецЕсли + +Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) + Поля.Добавить("НаборСвойств"); + Поля.Добавить("Заголовок"); + Поля.Добавить("Ссылка"); + + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) + ЛокализацияКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка, "Заголовок"); + Если Не ЗначениеЗаполнено(Представление) Тогда + Представление = Данные.Заголовок; + КонецЕсли; + + Если ЗначениеЗаполнено(Данные.НаборСвойств) Тогда + Представление = Представление + " (" + Строка(Данные.НаборСвойств) + ")"; + КонецЕсли; + СтандартнаяОбработка = Ложь; +КонецПроцедуры + #КонецОбласти #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -234,10 +266,14 @@ Если Свойство <> СвойствоОбъект.Ссылка Тогда ИмяПредопределенного = СтрЗаменить(МетаданныеВладельца.ПолноеИмя(), ".", "_"); - - ТребуетсяАнализНаборовКаждогоОбъектаВладельца = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - "Справочник.НаборыДополнительныхРеквизитовИСведений." + ИмяПредопределенного, "ЭтоГруппа"); - + НаборСвойств = УправлениеСвойствами.НаборСвойствПоИмени(ИмяПредопределенного); + Если НаборСвойств = Неопределено Тогда + ТребуетсяАнализНаборовКаждогоОбъектаВладельца = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + "Справочник.НаборыДополнительныхРеквизитовИСведений." + ИмяПредопределенного, "ЭтоГруппа"); + Иначе + ТребуетсяАнализНаборовКаждогоОбъектаВладельца = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + НаборСвойств, "ЭтоГруппа"); + КонецЕсли; // Если предопределенного нет в ИБ. Если ТребуетсяАнализНаборовКаждогоОбъектаВладельца = Неопределено Тогда ТребуетсяАнализНаборовКаждогоОбъектаВладельца = Ложь; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl index 86d022c02..faaaa50e8 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -169,4 +177,14 @@ #КонецОбласти -#КонецЕсли +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ПриЧтенииПредставленийНаСервере() Экспорт + ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект); +КонецПроцедуры + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo index 0acf2fee5..da7cc3ff0 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo @@ -611,6 +611,108 @@ Use + + + + + + Представления + + ru + Представления + + + Use + LineNumber + + Use + + + + + КодЯзыка + + ru + Код языка + + + String + + 10 + + + + + Use + Use + + + Заголовок + + ru + Заголовок + + + String + + 75 + + + + + Use + Use + + + Подсказка + + ru + Подсказка + + + String + + + + + Use + Use + + + ЗаголовокФормыЗначения + + ru + Заголовок формы значения + + + String + + 150 + + + + + Use + Use + + + ЗаголовокФормыВыбораЗначения + + ru + Заголовок формы выбора значения + + + String + + 150 + + + + + Use + Use + + ФормаЭлемента diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl index 5c038b7c9..8a5885be7 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаСписка/Form.form b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаСписка/Form.form index 4b2b0f388..d789698c7 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаСписка/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаСписка/Form.form @@ -215,6 +215,40 @@ true + + Ссылка + 29 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 30 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -376,6 +410,9 @@ true + + Список.Ref +
        true
        ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаСписка/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаСписка/Module.bsl index 8418109ec..0b4d736e0 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаЭлемента/Module.bsl index 561e6f035..e8f018614 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl index 671150bdc..85c720d94 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -86,12 +94,6 @@ Раздел.Идентификатор, Раздел.Имя, РазделыДатЗапрета.Получить(РазделСсылка).Имя); КонецЕсли; - Если Не ЗначениеЗаполнено(Раздел.Представление) Тогда - ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Представление раздела дат запрета ""%1"" не заполнено.'"), - Раздел.Имя); - КонецЕсли; - ТипыОбъектов = Новый Массив; Для Каждого Тип Из Раздел.ТипыОбъектов Цикл ВсеРазделыБезОбъектов = Ложь; diff --git a/SSL/src/ChartsOfCharacteristicTypes/УдалитьВидыДоступа/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/УдалитьВидыДоступа/ObjectModule.bsl index 3c690d715..883fb894c 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/УдалитьВидыДоступа/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/УдалитьВидыДоступа/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -21,4 +29,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo index 827f7c9b5..2f05b0743 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo @@ -22,6 +22,10 @@ Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания DontUse + + ScheduledJob.ОбновлениеПредопределенныхВариантовОтчетов + DontUse + ScheduledJob.ПолучениеИОтправкаЭлектронныхПисем DontUse @@ -66,6 +70,10 @@ Catalog.ПрофилиКлючевыхОпераций DontUse + + Constant.ПараметрыРезервногоКопирования + DontUse + Constant.ИспользоватьДополнительныеОтчетыИОбработки DontUse diff --git a/SSL/src/CommonCommands/ВерсииФайла/CommandModule.bsl b/SSL/src/CommonCommands/ВерсииФайла/CommandModule.bsl deleted file mode 100644 index 42d85bdb6..000000000 --- a/SSL/src/CommonCommands/ВерсииФайла/CommandModule.bsl +++ /dev/null @@ -1,20 +0,0 @@ -#Область ОбработчикиСобытий - -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Файл", ПараметрКоманды); - ПараметрыФормы.Вставить("УникальныйИдентификаторКарточкиФайла", - ПараметрыВыполненияКоманды.Источник.УникальныйИдентификатор); - - ОткрытьФорму( - "Обработка.РаботаСФайлами.Форма.ВерсииФайла", - ПараметрыФормы, - ПараметрыВыполненияКоманды.Источник, - ПараметрыВыполненияКоманды.Уникальность, - ПараметрыВыполненияКоманды.Окно); - -КонецПроцедуры - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonCommands/ВерсииФайла/ВерсииФайла.mdo b/SSL/src/CommonCommands/ВерсииФайла/ВерсииФайла.mdo deleted file mode 100644 index 8971fe321..000000000 --- a/SSL/src/CommonCommands/ВерсииФайла/ВерсииФайла.mdo +++ /dev/null @@ -1,13 +0,0 @@ - - - ВерсииФайла - - ru - Версии файла - - FormNavigationPanelGoTo - - CatalogRef.Файлы - - Auto - diff --git a/SSL/src/CommonCommands/ВремяТекущегоСеанса/CommandModule.bsl b/SSL/src/CommonCommands/ВремяТекущегоСеанса/CommandModule.bsl index d5c4e3412..eb5c64627 100644 --- a/SSL/src/CommonCommands/ВремяТекущегоСеанса/CommandModule.bsl +++ b/SSL/src/CommonCommands/ВремяТекущегоСеанса/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ВсеФайлы/CommandModule.bsl b/SSL/src/CommonCommands/ВсеФайлы/CommandModule.bsl index 1fe26a183..96e70f9e6 100644 --- a/SSL/src/CommonCommands/ВсеФайлы/CommandModule.bsl +++ b/SSL/src/CommonCommands/ВсеФайлы/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl b/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl index 6b338c492..ba5e97a01 100644 --- a/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl +++ b/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ДополнительныеОбработкиАдминистрирование/CommandModule.bsl b/SSL/src/CommonCommands/ДополнительныеОбработкиАдминистрирование/CommandModule.bsl index cc9488ffe..bd11d7c90 100644 --- a/SSL/src/CommonCommands/ДополнительныеОбработкиАдминистрирование/CommandModule.bsl +++ b/SSL/src/CommonCommands/ДополнительныеОбработкиАдминистрирование/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ДополнительныеОтчетыАдминистрирование/CommandModule.bsl b/SSL/src/CommonCommands/ДополнительныеОтчетыАдминистрирование/CommandModule.bsl index 7446e5ca9..29c9fcd11 100644 --- a/SSL/src/CommonCommands/ДополнительныеОтчетыАдминистрирование/CommandModule.bsl +++ b/SSL/src/CommonCommands/ДополнительныеОтчетыАдминистрирование/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ДополнительныеСведенияКоманднаяПанель/CommandModule.bsl b/SSL/src/CommonCommands/ДополнительныеСведенияКоманднаяПанель/CommandModule.bsl index a2d29d506..27810e116 100644 --- a/SSL/src/CommonCommands/ДополнительныеСведенияКоманднаяПанель/CommandModule.bsl +++ b/SSL/src/CommonCommands/ДополнительныеСведенияКоманднаяПанель/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ЗагрузитьКомплектПравил/CommandModule.bsl b/SSL/src/CommonCommands/ЗагрузитьКомплектПравил/CommandModule.bsl index 09ac62a3d..98e003a69 100644 --- a/SSL/src/CommonCommands/ЗагрузитьКомплектПравил/CommandModule.bsl +++ b/SSL/src/CommonCommands/ЗагрузитьКомплектПравил/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте @@ -6,7 +14,7 @@ СведенияОПланеОбмена = СведенияОПланеОбмена(ПараметрКоманды); Если СведенияОПланеОбмена.РазделенныйРежим Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Загрузка правил обмена данными в разделенном режиме недоступна.'")); Возврат; КонецЕсли; @@ -47,5 +55,4 @@ КонецФункции - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonCommands/ЗагрузитьКурсыВалют/CommandModule.bsl b/SSL/src/CommonCommands/ЗагрузитьКурсыВалют/CommandModule.bsl index 7132d886d..2b570717f 100644 --- a/SSL/src/CommonCommands/ЗагрузитьКурсыВалют/CommandModule.bsl +++ b/SSL/src/CommonCommands/ЗагрузитьКурсыВалют/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ЗагрузитьПравилаКонвертацииОбъектов/CommandModule.bsl b/SSL/src/CommonCommands/ЗагрузитьПравилаКонвертацииОбъектов/CommandModule.bsl index be2d4dc91..f6886761d 100644 --- a/SSL/src/CommonCommands/ЗагрузитьПравилаКонвертацииОбъектов/CommandModule.bsl +++ b/SSL/src/CommonCommands/ЗагрузитьПравилаКонвертацииОбъектов/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ЗагрузитьПравилаРегистрацииОбъектов/CommandModule.bsl b/SSL/src/CommonCommands/ЗагрузитьПравилаРегистрацииОбъектов/CommandModule.bsl index 5e4ed86a9..8ca77ca3e 100644 --- a/SSL/src/CommonCommands/ЗагрузитьПравилаРегистрацииОбъектов/CommandModule.bsl +++ b/SSL/src/CommonCommands/ЗагрузитьПравилаРегистрацииОбъектов/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/CommandModule.bsl b/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/CommandModule.bsl index 45e6ef7b6..19c260a2f 100644 --- a/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/CommandModule.bsl +++ b/SSL/src/CommonCommands/ЗадачиПоБизнесПроцессу/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ЗадачиПоПредмету/CommandModule.bsl b/SSL/src/CommonCommands/ЗадачиПоПредмету/CommandModule.bsl index 1f48b78e7..455cb693b 100644 --- a/SSL/src/CommonCommands/ЗадачиПоПредмету/CommandModule.bsl +++ b/SSL/src/CommonCommands/ЗадачиПоПредмету/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl b/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl index 518f63941..fe7e76457 100644 --- a/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl +++ b/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/КартаМаршрутаБизнесПроцесса/CommandModule.bsl b/SSL/src/CommonCommands/КартаМаршрутаБизнесПроцесса/CommandModule.bsl index 3f127bb90..a5ea88651 100644 --- a/SSL/src/CommonCommands/КартаМаршрутаБизнесПроцесса/CommandModule.bsl +++ b/SSL/src/CommonCommands/КартаМаршрутаБизнесПроцесса/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/МоиЗаметкиПоПредмету/CommandModule.bsl b/SSL/src/CommonCommands/МоиЗаметкиПоПредмету/CommandModule.bsl index d7fa38db3..4f11366a2 100644 --- a/SSL/src/CommonCommands/МоиЗаметкиПоПредмету/CommandModule.bsl +++ b/SSL/src/CommonCommands/МоиЗаметкиПоПредмету/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/Напомнить/CommandModule.bsl b/SSL/src/CommonCommands/Напомнить/CommandModule.bsl index 7ff8ae87d..ed07e2ce2 100644 --- a/SSL/src/CommonCommands/Напомнить/CommandModule.bsl +++ b/SSL/src/CommonCommands/Напомнить/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/НастроитьПрава/CommandModule.bsl b/SSL/src/CommonCommands/НастроитьПрава/CommandModule.bsl index 718dde135..fa00ec91d 100644 --- a/SSL/src/CommonCommands/НастроитьПрава/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастроитьПрава/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/НастройкаКолонтитулов/CommandModule.bsl b/SSL/src/CommonCommands/НастройкаКолонтитулов/CommandModule.bsl new file mode 100644 index 000000000..e5f009e98 --- /dev/null +++ b/SSL/src/CommonCommands/НастройкаКолонтитулов/CommandModule.bsl @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ОткрытьФорму("ОбщаяФорма.НастройкаКолонтитулов",, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonCommands/НастройкаКолонтитулов/НастройкаКолонтитулов.mdo b/SSL/src/CommonCommands/НастройкаКолонтитулов/НастройкаКолонтитулов.mdo new file mode 100644 index 000000000..f92f6d47e --- /dev/null +++ b/SSL/src/CommonCommands/НастройкаКолонтитулов/НастройкаКолонтитулов.mdo @@ -0,0 +1,10 @@ + + + НастройкаКолонтитулов + + ru + Настройка колонтитулов + + NavigationPanelOrdinary + Auto + diff --git a/SSL/src/CommonCommands/НастройкаОбменаСообщениями/CommandModule.bsl b/SSL/src/CommonCommands/НастройкаОбменаСообщениями/CommandModule.bsl index b4708776f..412016402 100644 --- a/SSL/src/CommonCommands/НастройкаОбменаСообщениями/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкаОбменаСообщениями/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/НастройкаОнлайнПоддержки/CommandModule.bsl b/SSL/src/CommonCommands/НастройкаОнлайнПоддержки/CommandModule.bsl index d3ad5cfda..fdcbe12b3 100644 --- a/SSL/src/CommonCommands/НастройкаОнлайнПоддержки/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкаОнлайнПоддержки/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/CommandModule.bsl b/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/CommandModule.bsl index b0ff32f10..8f5dc8040 100644 --- a/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl b/SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl index 0243f3738..6c3bc7457 100644 --- a/SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl @@ -1,15 +1,60 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - Отбор = Новый Структура("Корреспондент", ПараметрКоманды); - ЗначенияЗаполнения = Новый Структура("Корреспондент", ПараметрКоманды); + Корреспондент = ПараметрКоманды; + ИдентификаторНастройки = ""; + + Если ОбменДаннымиСВнешнейСистемой(Корреспондент, ИдентификаторНастройки) Тогда + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда + + Контекст = Новый Структура; + Контекст.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + Контекст.Вставить("Корреспондент", Корреспондент); + Контекст.Вставить("Режим", "РедактированиеПараметровПодключения"); + + Отказ = Ложь; + ИмяФормыПомощника = ""; + ПараметрыПомощника = Новый Структура; + + МодульОбменДаннымиСВнешнимиСистемамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиСВнешнимиСистемамиКлиент"); + МодульОбменДаннымиСВнешнимиСистемамиКлиент.ПередНастройкойПараметровПодключения( + Контекст, Отказ, ИмяФормыПомощника, ПараметрыПомощника); + + Если Не Отказ Тогда + ОткрытьФорму(ИмяФормыПомощника, + ПараметрыПомощника, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецЕсли; + КонецЕсли; + Возврат; + КонецЕсли; + + Отбор = Новый Структура("Корреспондент", Корреспондент); + ЗначенияЗаполнения = Новый Структура("Корреспондент", Корреспондент); ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ПараметрыВыполненияКоманды.Источник); КонецПроцедуры +&НаСервере +Функция ОбменДаннымиСВнешнейСистемой(Корреспондент, ИдентификаторНастройки = "") + + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(Корреспондент); + + ИдентификаторНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(Корреспондент); + + Возврат ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonCommands/НастройкиПодключенияКонечнойТочки/CommandModule.bsl b/SSL/src/CommonCommands/НастройкиПодключенияКонечнойТочки/CommandModule.bsl index 7aca92fe4..6b023dad8 100644 --- a/SSL/src/CommonCommands/НастройкиПодключенияКонечнойТочки/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкиПодключенияКонечнойТочки/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl b/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl index adff7977a..7e9cd3a06 100644 --- a/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/НачатьИнтервью/CommandModule.bsl b/SSL/src/CommonCommands/НачатьИнтервью/CommandModule.bsl index 6a0d6c048..7b707e210 100644 --- a/SSL/src/CommonCommands/НачатьИнтервью/CommandModule.bsl +++ b/SSL/src/CommonCommands/НачатьИнтервью/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ОбменСообщениями/CommandModule.bsl b/SSL/src/CommonCommands/ОбменСообщениями/CommandModule.bsl index 205966dc6..018c46e5e 100644 --- a/SSL/src/CommonCommands/ОбменСообщениями/CommandModule.bsl +++ b/SSL/src/CommonCommands/ОбменСообщениями/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/Обсуждения/CommandModule.bsl b/SSL/src/CommonCommands/Обсуждения/CommandModule.bsl new file mode 100644 index 000000000..123090692 --- /dev/null +++ b/SSL/src/CommonCommands/Обсуждения/CommandModule.bsl @@ -0,0 +1,70 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + НовоеОбсуждение = НовоеОбсуждение(ПараметрКоманды); + Если НовоеОбсуждение = "Недоступно" Тогда + Возврат; + ИначеЕсли НовоеОбсуждение = "НеПодключено" Тогда + ПредлагатьОбсужденияТекст = + НСтр("ru = 'Включить обсуждения? + | + |С их помощью пользователи смогут отправлять друг другу текстовые сообщения и совершать видеозвонки, создавать тематические обсуждения и вести переписку по документам.'"); + ОповещениеОЗавершении = Новый ОписаниеОповещения("ПредлагатьОбсужденияЗавершение", ЭтотОбъект); + ПоказатьВопрос(ОповещениеОЗавершении, ПредлагатьОбсужденияТекст, РежимДиалогаВопрос.ДаНет); + Возврат; + КонецЕсли; + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НовоеОбсуждение); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПредлагатьОбсужденияЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + ОбсужденияСлужебныйКлиент.ПоказатьПодключение(); + +КонецПроцедуры + +&НаСервере +Функция НовоеОбсуждение(ПользовательСсылка) + + Если Не ОбсужденияСлужебныйВызовСервера.Подключены() Тогда + Возврат "НеПодключено"; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ИдентификаторПользователяИнформационнойБазы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПользовательСсылка, "ИдентификаторПользователяИБ"); + Если Не ЗначениеЗаполнено(ИдентификаторПользователяИнформационнойБазы) Тогда + Возврат "Недоступно"; + КонецЕсли; + + Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение(); + Обсуждение.Групповое = Ложь; + Обсуждение.Участники.Добавить(СистемаВзаимодействия.ИдентификаторТекущегоПользователя()); + + ИдентификаторПользователяСистемыВзаимодействия = СистемаВзаимодействия.ПолучитьИдентификаторПользователя(ИдентификаторПользователяИнформационнойБазы); + Обсуждение.Участники.Добавить(ИдентификаторПользователяСистемыВзаимодействия); + + Обсуждение.Записать(); + + Возврат ПолучитьНавигационнуюСсылку(Обсуждение.Идентификатор); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonCommands/Обсуждения/Обсуждения.mdo b/SSL/src/CommonCommands/Обсуждения/Обсуждения.mdo new file mode 100644 index 000000000..15e10d57e --- /dev/null +++ b/SSL/src/CommonCommands/Обсуждения/Обсуждения.mdo @@ -0,0 +1,20 @@ + + + Обсуждения + + ru + Обсуждения + + FormCommandBarImportant + + CatalogRef.Пользователи + + Auto + + ru + Начать обсуждение с пользователем + + + CommonPicture.Комментарий + + diff --git a/SSL/src/CommonCommands/ОтправитьSMS/CommandModule.bsl b/SSL/src/CommonCommands/ОтправитьSMS/CommandModule.bsl index 6ccf738af..6c44a08b2 100644 --- a/SSL/src/CommonCommands/ОтправитьSMS/CommandModule.bsl +++ b/SSL/src/CommonCommands/ОтправитьSMS/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ОтправитьПисьмо/CommandModule.bsl b/SSL/src/CommonCommands/ОтправитьПисьмо/CommandModule.bsl index c55f00b1f..a61c873d0 100644 --- a/SSL/src/CommonCommands/ОтправитьПисьмо/CommandModule.bsl +++ b/SSL/src/CommonCommands/ОтправитьПисьмо/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ПанельОтчетовАдминистрирование/CommandModule.bsl b/SSL/src/CommonCommands/ПанельОтчетовАдминистрирование/CommandModule.bsl index 575ae499a..51affc186 100644 --- a/SSL/src/CommonCommands/ПанельОтчетовАдминистрирование/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПанельОтчетовАдминистрирование/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ПерсональнаяНастройкаПроксиСервера/CommandModule.bsl b/SSL/src/CommonCommands/ПерсональнаяНастройкаПроксиСервера/CommandModule.bsl index bf96dff4b..1150b6819 100644 --- a/SSL/src/CommonCommands/ПерсональнаяНастройкаПроксиСервера/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПерсональнаяНастройкаПроксиСервера/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ПоказатьРезультатРезервногоКопирования/CommandModule.bsl b/SSL/src/CommonCommands/ПоказатьРезультатРезервногоКопирования/CommandModule.bsl index 410e81739..2e0662681 100644 --- a/SSL/src/CommonCommands/ПоказатьРезультатРезервногоКопирования/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПоказатьРезультатРезервногоКопирования/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/CommandModule.bsl b/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/CommandModule.bsl index e8d19895d..61b34680b 100644 --- a/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ПраваДоступа/CommandModule.bsl b/SSL/src/CommonCommands/ПраваДоступа/CommandModule.bsl index 0736c9abb..d46d92c33 100644 --- a/SSL/src/CommonCommands/ПраваДоступа/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПраваДоступа/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ПредупрежденияПриЗавершенииРаботы/CommandModule.bsl b/SSL/src/CommonCommands/ПредупрежденияПриЗавершенииРаботы/CommandModule.bsl index 9d0b227b5..efccdedc3 100644 --- a/SSL/src/CommonCommands/ПредупрежденияПриЗавершенииРаботы/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПредупрежденияПриЗавершенииРаботы/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ПредупрежденияПриСинхронизацииДанных/CommandModule.bsl b/SSL/src/CommonCommands/ПредупрежденияПриСинхронизацииДанных/CommandModule.bsl index 2ed828b5b..7a3a961af 100644 --- a/SSL/src/CommonCommands/ПредупрежденияПриСинхронизацииДанных/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПредупрежденияПриСинхронизацииДанных/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl b/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl index d86160e44..261773ae7 100644 --- a/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПрисоединенныеФайлы/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/РазместитьФайлыНачальногоОбраза/CommandModule.bsl b/SSL/src/CommonCommands/РазместитьФайлыНачальногоОбраза/CommandModule.bsl index dd692bcdf..0ac30b36c 100644 --- a/SSL/src/CommonCommands/РазместитьФайлыНачальногоОбраза/CommandModule.bsl +++ b/SSL/src/CommonCommands/РазместитьФайлыНачальногоОбраза/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/РедактируемыеФайлы/CommandModule.bsl b/SSL/src/CommonCommands/РедактируемыеФайлы/CommandModule.bsl index 30b89f938..3bdf4a3d4 100644 --- a/SSL/src/CommonCommands/РедактируемыеФайлы/CommandModule.bsl +++ b/SSL/src/CommonCommands/РедактируемыеФайлы/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/РолиИИсполнителиЗадач/CommandModule.bsl b/SSL/src/CommonCommands/РолиИИсполнителиЗадач/CommandModule.bsl index 38f4c3afb..a82726722 100644 --- a/SSL/src/CommonCommands/РолиИИсполнителиЗадач/CommandModule.bsl +++ b/SSL/src/CommonCommands/РолиИИсполнителиЗадач/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/СведенияОПользователе/CommandModule.bsl b/SSL/src/CommonCommands/СведенияОПользователе/CommandModule.bsl index 777d8a038..098f82d17 100644 --- a/SSL/src/CommonCommands/СведенияОПользователе/CommandModule.bsl +++ b/SSL/src/CommonCommands/СведенияОПользователе/CommandModule.bsl @@ -1,9 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПоказатьЗначение(, ПользователиКлиентСервер.АвторизованныйПользователь()); + ПоказатьЗначение(, ПользователиКлиент.АвторизованныйПользователь()); КонецПроцедуры diff --git a/SSL/src/CommonCommands/СвязатьсяСоСпециалистомОнлайнПоддержки/CommandModule.bsl b/SSL/src/CommonCommands/СвязатьсяСоСпециалистомОнлайнПоддержки/CommandModule.bsl index 63e34a977..e38732c83 100644 --- a/SSL/src/CommonCommands/СвязатьсяСоСпециалистомОнлайнПоддержки/CommandModule.bsl +++ b/SSL/src/CommonCommands/СвязатьсяСоСпециалистомОнлайнПоддержки/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/Синхронизировать/CommandModule.bsl b/SSL/src/CommonCommands/Синхронизировать/CommandModule.bsl index 22a8c4333..99398e2cd 100644 --- a/SSL/src/CommonCommands/Синхронизировать/CommandModule.bsl +++ b/SSL/src/CommonCommands/Синхронизировать/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/CommandModule.bsl b/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/CommandModule.bsl index faa33d089..99db478ec 100644 --- a/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/CommandModule.bsl +++ b/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/СкрытьПерсональныеДанныеСубъектов/CommandModule.bsl b/SSL/src/CommonCommands/СкрытьПерсональныеДанныеСубъектов/CommandModule.bsl index 577fdf510..bd063e5c7 100644 --- a/SSL/src/CommonCommands/СкрытьПерсональныеДанныеСубъектов/CommandModule.bsl +++ b/SSL/src/CommonCommands/СкрытьПерсональныеДанныеСубъектов/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/СменитьПароль/CommandModule.bsl b/SSL/src/CommonCommands/СменитьПароль/CommandModule.bsl index e88c061c9..d501081c1 100644 --- a/SSL/src/CommonCommands/СменитьПароль/CommandModule.bsl +++ b/SSL/src/CommonCommands/СменитьПароль/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/СобытияОтправки/CommandModule.bsl b/SSL/src/CommonCommands/СобытияОтправки/CommandModule.bsl index 1a194e676..3e31bcc1d 100644 --- a/SSL/src/CommonCommands/СобытияОтправки/CommandModule.bsl +++ b/SSL/src/CommonCommands/СобытияОтправки/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/СобытияПолучения/CommandModule.bsl b/SSL/src/CommonCommands/СобытияПолучения/CommandModule.bsl index dfe55ad99..054612981 100644 --- a/SSL/src/CommonCommands/СобытияПолучения/CommandModule.bsl +++ b/SSL/src/CommonCommands/СобытияПолучения/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/CommandModule.bsl b/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/CommandModule.bsl index 16ac4bb03..14f582064 100644 --- a/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/CommandModule.bsl +++ b/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/СозданиеСвязанныхОбъектов/CommandModule.bsl b/SSL/src/CommonCommands/СозданиеСвязанныхОбъектов/CommandModule.bsl index 79169deaf..584de6041 100644 --- a/SSL/src/CommonCommands/СозданиеСвязанныхОбъектов/CommandModule.bsl +++ b/SSL/src/CommonCommands/СозданиеСвязанныхОбъектов/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/CommandModule.bsl b/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/CommandModule.bsl index 18eb4f10e..2bd341b97 100644 --- a/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/CommandModule.bsl +++ b/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/СоздатьРезервнуюКопию/CommandModule.bsl b/SSL/src/CommonCommands/СоздатьРезервнуюКопию/CommandModule.bsl index 641260e1c..ae79acad5 100644 --- a/SSL/src/CommonCommands/СоздатьРезервнуюКопию/CommandModule.bsl +++ b/SSL/src/CommonCommands/СоздатьРезервнуюКопию/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/СоставОтправляемыхДанных/CommandModule.bsl b/SSL/src/CommonCommands/СоставОтправляемыхДанных/CommandModule.bsl index 417532588..5b3889b80 100644 --- a/SSL/src/CommonCommands/СоставОтправляемыхДанных/CommandModule.bsl +++ b/SSL/src/CommonCommands/СоставОтправляемыхДанных/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/СтруктураПодчиненности/CommandModule.bsl b/SSL/src/CommonCommands/СтруктураПодчиненности/CommandModule.bsl index 73ae9963e..85e4b3e07 100644 --- a/SSL/src/CommonCommands/СтруктураПодчиненности/CommandModule.bsl +++ b/SSL/src/CommonCommands/СтруктураПодчиненности/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/СценарииСинхронизации/CommandModule.bsl b/SSL/src/CommonCommands/СценарииСинхронизации/CommandModule.bsl index 22335e13e..c10814045 100644 --- a/SSL/src/CommonCommands/СценарииСинхронизации/CommandModule.bsl +++ b/SSL/src/CommonCommands/СценарииСинхронизации/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonCommands/УдалитьНастройкуСинхронизации/CommandModule.bsl b/SSL/src/CommonCommands/УдалитьНастройкуСинхронизации/CommandModule.bsl index fc34c14e7..292b0a6cd 100644 --- a/SSL/src/CommonCommands/УдалитьНастройкуСинхронизации/CommandModule.bsl +++ b/SSL/src/CommonCommands/УдалитьНастройкуСинхронизации/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/УстановитьРасширениеРаботыСФайлами/CommandModule.bsl b/SSL/src/CommonCommands/УстановитьРасширениеРаботыСФайлами/CommandModule.bsl index f85fb6aca..6f06e02aa 100644 --- a/SSL/src/CommonCommands/УстановитьРасширениеРаботыСФайлами/CommandModule.bsl +++ b/SSL/src/CommonCommands/УстановитьРасширениеРаботыСФайлами/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/CommonCommands/ФайлыВТоме/CommandModule.bsl b/SSL/src/CommonCommands/ФайлыВТоме/CommandModule.bsl index 9b3b06b7b..255490def 100644 --- a/SSL/src/CommonCommands/ФайлыВТоме/CommandModule.bsl +++ b/SSL/src/CommonCommands/ФайлыВТоме/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/CommonForms/АдреснаяКнига/Form.form b/SSL/src/CommonForms/АдреснаяКнига/Form.form index 995b1635a..fc3093f04 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Form.form +++ b/SSL/src/CommonForms/АдреснаяКнига/Form.form @@ -826,6 +826,40 @@ true
        + + ГруппыПользователейСсылка + 290 + true + true + + + ГруппыПользователей.Ref + + + ГруппыПользователейСсылкаРасширеннаяПодсказка + 292 + Label + true + true + + Left + + + + ГруппыПользователейСсылкаКонтекстноеМеню + 291 + true + + LabelField + Enter + true + Left + true + + true + true + + None ГруппыПользователейКоманднаяПанель @@ -1025,6 +1059,40 @@ Normal
        + + СписокПользователейСсылка + 293 + true + true + + + СписокПользователей.Ref + + + СписокПользователейСсылкаРасширеннаяПодсказка + 295 + Label + true + true + + Left + + + + СписокПользователейСсылкаКонтекстноеМеню + 294 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокПользователейКоманднаяПанель 97 @@ -1931,114 +1999,6 @@ ПолучателиПисьмаКоманднаяПанель 58 - - Добавить - 86 - true - true - - true - - false - - ДобавитьExtendedTooltip - 236 - Label - true - true - - Left - - - Form.Item.ПолучателиПисьма.StandardCommand.Add - Normal - Auto - true - true - UserCmds - Auto - - - Удалить - 133 - true - true - - true - - false - - УдалитьExtendedTooltip - 237 - Label - true - true - - Left - - - Form.Item.ПолучателиПисьма.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - Auto - - - ПереместитьВверх - 87 - true - true - - true - - false - - ПереместитьВверхExtendedTooltip - 238 - Label - true - true - - Left - - - Form.Item.ПолучателиПисьма.StandardCommand.MoveUp - Normal - Auto - true - true - UserCmds - Auto - - - ПереместитьВниз - 88 - true - true - - true - - false - - ПереместитьВнизExtendedTooltip - 239 - Label - true - true - - Left - - - Form.Item.ПолучателиПисьма.StandardCommand.MoveDown - Normal - Auto - true - true - UserCmds - Auto - Left @@ -2443,7 +2403,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -2472,7 +2432,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -2511,6 +2471,144 @@ UserCmds Auto
        + + Добавить + 86 + + <key>ru</key> + <value>Добавить получателя</value> + + true + true + + true + + false + + ДобавитьExtendedTooltip + 236 + Label + true + true + + Left + + + Form.Item.ПолучателиПисьма.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + + Удалить + 133 + true + true + + true + + false + + УдалитьExtendedTooltip + 237 + Label + true + true + + Left + + + Form.Item.ПолучателиПисьма.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаПереместить + 296 + + ПереместитьВверх + 87 + true + true + + true + + false + + ПереместитьВверхExtendedTooltip + 238 + Label + true + true + + Left + + + Form.Item.ПолучателиПисьма.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + + + ПереместитьВниз + 88 + true + true + + true + + false + + ПереместитьВнизExtendedTooltip + 239 + Label + true + true + + Left + + + Form.Item.ПолучателиПисьма.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Переместить</value> + + + ГруппаПереместитьРасширеннаяПодсказка + 297 + Label + true + true + + Left + + + + Compact + + Left true @@ -2775,6 +2873,9 @@ СписокПользователей.Description + + СписокПользователей.Ref + ВЫБРАТЬ Пользователи.Ссылка, @@ -3055,6 +3156,9 @@ ГруппыПользователей.Parent + + ГруппыПользователей.Ref + ВЫБРАТЬ СправочникГруппыПользователей.Ссылка, diff --git a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl index 3f97cf772..c23f4566b 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl +++ b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -231,7 +238,7 @@ Процедура КомандаНайтиВыполнить() Если ПустаяСтрока(СтрокаПоиска) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не задана строка поиска.'"),,"СтрокаПоиска"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не задана строка поиска.'"),,"СтрокаПоиска"); Возврат; КонецЕсли; diff --git a/SSL/src/CommonForms/АутентификацияВСервисе/Form.form b/SSL/src/CommonForms/АутентификацияВСервисе/Form.form index 4779704a5..b2d25ce58 100644 --- a/SSL/src/CommonForms/АутентификацияВСервисе/Form.form +++ b/SSL/src/CommonForms/АутентификацияВСервисе/Form.form @@ -141,10 +141,6 @@ OnOpen ПриОткрытии - - OnCreateAtServer - ПриСозданииНаСервере - OnClose ПриЗакрытии diff --git a/SSL/src/CommonForms/АутентификацияВСервисе/Module.bsl b/SSL/src/CommonForms/АутентификацияВСервисе/Module.bsl index 1668ac284..2892b8c55 100644 --- a/SSL/src/CommonForms/АутентификацияВСервисе/Module.bsl +++ b/SSL/src/CommonForms/АутентификацияВСервисе/Module.bsl @@ -1,17 +1,12 @@ -#Область ОбработчикиСобытийФормы +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отмена", "Видимость", Ложь); - - КонецЕсли; - -КонецПроцедуры +#Область ОбработчикиСобытийФормы &НаКлиенте Процедура ПриОткрытии(Отказ) diff --git a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Form.form b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Form.form index 12c65565c..3088ff888 100644 --- a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Form.form +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Form.form @@ -60,34 +60,6 @@ Left - - ГруппаМобильныйКлиент - 36 - VeryHigh - true - true - - true - - - <key>ru</key> - <value>Мобильный клиент</value> - - - ГруппаМобильныйКлиентРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - CommandBar - - Center - - ГруппаКоманднаяПанель 27 diff --git a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html index f9a462482..c6ed10d2a 100644 --- a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html @@ -1,7 +1,7 @@

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

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

        -

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

        +

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

      • В файловой информационной базе факт перемещения определяется по служебному файлу DoNotCopy.txt, автоматически создаваемому программой в каталоге информационной базы. Внутри файла находится идентификатор информационной базы. Если файл отсутствует или идентификатор в файле отличается от идентификатора в базе, то информационна база считается перемещенной.
      • @@ -10,8 +10,6 @@
        По изменению имени информационной базы. Например, если имя информационной базы было "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 index d731d0893..056ffc38d 100644 --- a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -93,14 +100,6 @@ Заголовок = НСтр("ru = 'Параметры блокировки работы с внешними ресурсами'"); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Элементы.Переместить(Элементы.ИнформационнаяБазаПеремещена, Элементы.ГруппаМобильныйКлиент); - - Элементы.ФормаСправка.Видимость = Ложь; - - КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -114,7 +113,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("СобытиеЖурналаРегистрации", НСтр("ru = 'Работа с внешними ресурсами заблокирована'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + ОбщегоНазначенияКлиент.КодОсновногоЯзыка())); ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы); КонецПроцедуры diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form index 7fb167191..37da6ac41 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form @@ -1194,6 +1194,11 @@ true auto true + + + НижняяКоманднаяПанель + + Список diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl index a8dd77cf3..635543a31 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -16,7 +24,7 @@ Параметры.Свойство("ОграничиватьВыборУказаннымиЗначениями", ОграничиватьВыборУказаннымиЗначениями); БыстрыйВыбор = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "БыстрыйВыбор", Ложь); - ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(Параметры.ОписаниеТипов, Истина); + ИнформацияОТипах = ОтчетыСервер.РасширенноеОписаниеТипов(Параметры.ОписаниеТипов, Истина); ИнформацияОТипах.Вставить("СодержитСсылочныеТипы", Ложь); ВсеТипыСБыстрымВыбором = ИнформацияОТипах.КоличествоТипов < 10 @@ -75,7 +83,7 @@ КонецЕсли; ВыборГруппИЭлементов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВыборГруппИЭлементов"); - Элементы.СписокЗначение.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы(ВыборГруппИЭлементов); + Элементы.СписокЗначение.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы(ВыборГруппИЭлементов); Список.ТипЗначения = ИнформацияОТипах.ОписаниеТиповДляФормы; Если ТипЗнч(ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда diff --git a/SSL/src/CommonForms/ВводНаРазныхЯзыках/Form.form b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Form.form new file mode 100644 index 000000000..5bfe7281b --- /dev/null +++ b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Form.form @@ -0,0 +1,261 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>ГруппаЯзыки</name> + <id>5</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Языки</value> + + + ГруппаЯзыкиРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ОК + 7 + true + true + + true + + true + + ОКРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 3 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + ОсновнойЯзык + + <key>ru</key> + <value>Основной язык</value> + + 1 + + + true + + + true + + + + Языки + + <key>ru</key> + <value>Языки</value> + + 3 + + ValueTable + + + true + + + true + + + КодЯзыка + + <key>ru</key> + <value>Код языка</value> + + 1 + + String + + 10 + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 2 + + String + + + + true + + + true + + + + Имя + + <key>ru</key> + <value>Имя</value> + + 3 + + String + + 32 + + + + true + + + true + + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + Заголовок + + String + + + + + ИмяРеквизита + + String + + + + + Представления + + + + Ссылка + + AnyRef + + + + ТекущиеЗначение + + String + + + + + ТолькоПросмотр + + Boolean + + + + + + + diff --git a/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl new file mode 100644 index 000000000..76e57801e --- /dev/null +++ b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl @@ -0,0 +1,152 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ОбъектМетаданных = Параметры.Ссылка.Метаданные(); + Реквизит = ОбъектМетаданных.Реквизиты.Найти(Параметры.ИмяРеквизита); + Если Реквизит = Неопределено Тогда + Для каждого СтандартныйРеквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + Если СтрСравнить(СтандартныйРеквизит.Имя, Параметры.ИмяРеквизита) = 0 Тогда + Реквизит = СтандартныйРеквизит; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если Реквизит = Неопределено Тогда + ШаблонОшибки = НСтр("ru='При открытии формы ВводНаРазныхЯзыках в параметре ИмяРеквизита указан не существующий реквизит %1'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, Параметры.ИмяРеквизита); + КонецЕсли; + + Если Реквизит.МногострочныйРежим Тогда + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "МногострочныйРежим"); + КонецЕсли; + + Для Каждого ЯзыкКонфигурации Из Метаданные.Языки Цикл + НоваяСтрока = Языки.Добавить(); + НоваяСтрока.КодЯзыка = ЯзыкКонфигурации.КодЯзыка; + НоваяСтрока.Имя = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); + НоваяСтрока.Представление = ЯзыкКонфигурации.Представление(); + КонецЦикла; + + СформироватьПоляВводаНаРазныхЯзыках(Реквизит.МногострочныйРежим, Параметры.ТолькоПросмотр); + + Если Не ПустаяСтрока(Параметры.Заголовок) Тогда + Заголовок = Параметры.Заголовок; + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 на разных языках'"), Реквизит.Представление()); + КонецЕсли; + + ОсновнойЯзык = Метаданные.ОсновнойЯзык.КодЯзыка; + + ОписаниеЯзыка = ОписаниеЯзыка(ТекущийЯзык().КодЯзыка); + Если ОписаниеЯзыка <> Неопределено Тогда + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; + КонецЕсли; + + Для каждого Представление Из Параметры.Представления Цикл + + ОписаниеЯзыка = ОписаниеЯзыка(Представление.КодЯзыка); + Если ОписаниеЯзыка <> Неопределено Тогда + Если СтрСравнить(ОписаниеЯзыка.КодЯзыка, ТекущийЯзык().КодЯзыка) = 0 Тогда + ЭтотОбъект[ОписаниеЯзыка.Имя] = ?(ЗначениеЗаполнено(Параметры.ТекущиеЗначение), Параметры.ТекущиеЗначение, Представление[Параметры.ИмяРеквизита]); + Иначе + ЭтотОбъект[ОписаниеЯзыка.Имя] = Представление[Параметры.ИмяРеквизита]; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + Результат = Новый Структура("ОсновнойЯзык", ОсновнойЯзык); + Результат.Вставить("ЗначенияНаРазныхЯзыках", Новый Массив); + Для каждого Язык Из Языки Цикл + + Если Язык.КодЯзыка = ТекущийЯзык() Тогда + Результат.Вставить("СтрокаНаТекущемЯзыке", ЭтотОбъект[Язык.Имя]); + КонецЕсли; + + Если ТекущийЯзык() = ОсновнойЯзык И Язык.КодЯзыка = ОсновнойЯзык Тогда + Продолжить; + КонецЕсли; + + Результат.ЗначенияНаРазныхЯзыках.Добавить(Новый Структура("КодЯзыка, ЗначениеРеквизита", Язык.КодЯзыка, ЭтотОбъект[Язык.Имя])); + КонецЦикла; + + Закрыть(Результат); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура СформироватьПоляВводаНаРазныхЯзыках(МногострочныйРежим, ТолькоПросмотр) + + Добавлять = Новый Массив; + ТипСтрока = Новый ОписаниеТипов("Строка"); + Для Каждого ЯзыкКонфигурации Из Языки Цикл + Добавлять.Добавить(Новый РеквизитФормы(ЯзыкКонфигурации.Имя, ТипСтрока,, ЯзыкКонфигурации.Представление)); + КонецЦикла; + + ИзменитьРеквизиты(Добавлять); + РодительЭлементов = Элементы.ГруппаЯзыки; + + Для Каждого ЯзыкКонфигурации Из Языки Цикл + + Если СтрСравнить(ЯзыкКонфигурации.КодЯзыка, ТекущийЯзык().КодЯзыка) = 0 И РодительЭлементов.ПодчиненныеЭлементы.Количество() > 0 Тогда + Элемент = Элементы.Вставить(ЯзыкКонфигурации.Имя, Тип("ПолеФормы"), РодительЭлементов, РодительЭлементов.ПодчиненныеЭлементы.Получить(0)); + ТекущийЭлемент = Элемент; + Иначе + Элемент = Элементы.Добавить(ЯзыкКонфигурации.Имя, Тип("ПолеФормы"), РодительЭлементов); + КонецЕсли; + + Элемент.ПутьКДанным = ЯзыкКонфигурации.Имя; + Элемент.Вид = ВидПоляФормы.ПолеВвода; + Элемент.Ширина = 40; + Элемент.МногострочныйРежим = МногострочныйРежим; + Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элемент.ТолькоПросмотр = ТолькоПросмотр; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ОписаниеЯзыка(КодЯзыка) + + Отбор = Новый Структура("КодЯзыка", КодЯзыка); + НайденныеЭлементы = Языки.НайтиСтроки(Отбор); + Если НайденныеЭлементы.Количество() > 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..0b1d19950 --- /dev/null +++ b/SSL/src/CommonForms/ВводНаРазныхЯзыках/ВводНаРазныхЯзыках.mdo @@ -0,0 +1,10 @@ + + + ВводНаРазныхЯзыках + + ru + Ввод на разных языках + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/Вопрос/Form.form b/SSL/src/CommonForms/Вопрос/Form.form index 8ea3ef8e0..eee771250 100644 --- a/SSL/src/CommonForms/Вопрос/Form.form +++ b/SSL/src/CommonForms/Вопрос/Form.form @@ -6,6 +6,7 @@ Предупреждение 5 + VeryHigh <key>ru</key> <value>Предупреждение</value> @@ -41,6 +42,7 @@ <items xsi:type="form:FormGroup"> <name>Строки</name> <id>16</id> + <displayImportance>VeryHigh</displayImportance> <items xsi:type="form:FormField"> <name>МногострочныйТекстСообщения</name> <id>10</id> @@ -175,44 +177,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> - <group>HorizontalIfPossible</group> - <behavior>Auto</behavior> - <showLeftMargin>true</showLeftMargin> - <united>true</united> - <throughAlign>Auto</throughAlign> - <currentRowUse>Auto</currentRowUse> - </extInfo> - </items> - <items xsi:type="form:FormGroup"> - <name>КоманднаяПанель</name> - <id>14</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <title> - <key>ru</key> - <value>Командная панель</value> - - true - true - true - - КоманднаяПанельExtendedTooltip - 23 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Right - Bottom + AlwaysHorizontal Auto true true diff --git a/SSL/src/CommonForms/Вопрос/Module.bsl b/SSL/src/CommonForms/Вопрос/Module.bsl index fcf52b669..eab148256 100644 --- a/SSL/src/CommonForms/Вопрос/Module.bsl +++ b/SSL/src/CommonForms/Вопрос/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -69,6 +76,11 @@ // Сброс размеров и положения окна этой формы. СброситьРазмерыИПоложениеОкна(); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Переместить(Элементы.БольшеНеЗадаватьЭтотВопрос, ЭтотОбъект); + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -173,15 +185,6 @@ Индекс = 0; - ЭлементРазмещенияКоманд = Элементы.КоманднаяПанель; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; - ЭлементРазмещенияКоманд = Элементы.ФормаКоманднаяПанель; - Элементы.КоманднаяПанель.Видимость = Ложь; - - КонецЕсли; - Для Каждого ЭлементОписаниеКнопки Из КнопкиСписокЗначений Цикл Индекс = Индекс + 1; ИмяКоманды = "Команда" + Строка(Индекс); @@ -190,7 +193,7 @@ Команда.Заголовок = ЭлементОписаниеКнопки.Представление; Команда.ИзменяетСохраняемыеДанные = Ложь; - Кнопка= Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ЭлементРазмещенияКоманд); + Кнопка= Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), КоманднаяПанель); Кнопка.ТолькоВоВсехДействиях = Ложь; Кнопка.ИмяКоманды = ИмяКоманды; @@ -215,10 +218,7 @@ КонецЦикла; Если Кнопка = Неопределено Тогда - - ЭлементРазмещенияКоманд = ?(ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент(), Элементы.ФормаКоманднаяПанель, Элементы.КоманднаяПанель); - Кнопка = ЭлементРазмещенияКоманд.ПодчиненныеЭлементы[0]; - + Кнопка = КоманднаяПанель.ПодчиненныеЭлементы[0]; КонецЕсли; Если ВыделятьКнопкуПоУмолчанию Тогда diff --git a/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Module.bsl b/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Module.bsl index 7b2d31f73..82b4ae788 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Module.bsl +++ b/SSL/src/CommonForms/ВопросОбУстановкеВнешнейКомпоненты/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Module.bsl b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Module.bsl index 79c658232..e0bcb93d2 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Module.bsl +++ b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl index 0e98ff1b9..5e3d9a221 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl +++ b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -40,12 +47,16 @@ &НаКлиенте Процедура ПродолжитьБезУстановки(Команда) + Закрыть("ПродолжитьБезУстановки"); + КонецПроцедуры &НаКлиенте Процедура БольшеНеНапоминать(Команда) + Закрыть("БольшеНеПредлагать"); + КонецПроцедуры #КонецОбласти @@ -53,7 +64,7 @@ #Область СлужебныеПроцедурыИФункции &НаКлиенте -Процедура УстановитьИПродолжитьЗавершение(ДополнительныеПараметры) Экспорт +Процедура УстановитьИПродолжитьЗавершение(Контекст) Экспорт Оповещение = Новый ОписаниеОповещения("УстановитьИПродолжитьПослеПодключенияРасширения", ЭтотОбъект); НачатьПодключениеРасширенияРаботыСФайлами(Оповещение); @@ -61,14 +72,26 @@ КонецПроцедуры &НаКлиенте -Процедура УстановитьИПродолжитьПослеПодключенияРасширения(Подключено, ДополнительныеПараметры) Экспорт +Процедура УстановитьИПродолжитьПослеПодключенияРасширения(Подключено, Контекст) Экспорт Если Подключено Тогда - Результат = "РасширениеПодключено"; + Закрыть("РасширениеПодключено"); Иначе - Результат = "ПродолжитьБезУстановки"; + Оповещение = Новый ОписаниеОповещения("УстановитьИПродолжитьПослеПредупреждениеОбОшибке", ЭтотОбъект); + ПоказатьПредупреждение(Оповещение, + НСтр("ru = 'Не удалось установить расширение для работы с файлами. + |по причине: + |Метод НачатьПодключениеРасширенияРаботыСФайлами вернул Ложь + | + |Обратитесь к администратору.'")); КонецЕсли; - Закрыть(Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьИПродолжитьПослеПредупреждениеОбОшибке(Контекст) Экспорт + + Закрыть("ПродолжитьБезУстановки"); КонецПроцедуры diff --git a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Module.bsl b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Module.bsl index ad41fe13c..c62b76746 100644 --- a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Module.bsl +++ b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -72,6 +79,15 @@ Если ЭтоАвтономноеРабочееМесто.Значение Тогда ЭтоАвтономноеРабочееМесто.Значение = Ложь; ОбновлениеИнформационнойБазы.ЗаписатьДанные(ЭтоАвтономноеРабочееМесто); + + НеИспользоватьРазделениеПоОбластямДанных = Константы.НеИспользоватьРазделениеПоОбластямДанных.СоздатьМенеджерЗначения(); + НеИспользоватьРазделениеПоОбластямДанных.Прочитать(); + Если Не Константы.ИспользоватьРазделениеПоОбластямДанных.Получить() + И Не НеИспользоватьРазделениеПоОбластямДанных.Значение Тогда + НеИспользоватьРазделениеПоОбластямДанных.Значение = Истина; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НеИспользоватьРазделениеПоОбластямДанных); + КонецЕсли; + КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда diff --git a/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/Form.form index 6c0d84c18..69b13c7a9 100644 --- a/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/Form.form +++ b/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/Form.form @@ -35,11 +35,15 @@ Bottom true - FormCommandBar + ФормаКоманднаяПанель -1 Right true + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock true true diff --git a/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/Module.bsl new file mode 100644 index 000000000..72f9bd88f --- /dev/null +++ b/SSL/src/CommonForms/ВспомогательнаяФормаНастроекОтчета/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl b/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl index 9e4b5bf45..f1bf5c883 100644 --- a/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl +++ b/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте diff --git a/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Module.bsl b/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Module.bsl index 6402e28e7..8188ea540 100644 --- a/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Module.bsl +++ b/SSL/src/CommonForms/ВходВПрограммуЗапрещен/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаКлиенте diff --git a/SSL/src/CommonForms/ВыборДаты/Module.bsl b/SSL/src/CommonForms/ВыборДаты/Module.bsl index 1bddb25c5..22d96d361 100644 --- a/SSL/src/CommonForms/ВыборДаты/Module.bsl +++ b/SSL/src/CommonForms/ВыборДаты/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -33,12 +41,6 @@ Элементы.ПоясняющийТекст.Видимость = Ложь; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - КонецЕсли; - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form index 21269491d..3aea1a980 100644 --- a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form +++ b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Form.form @@ -201,7 +201,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto NormalSeparation true @@ -216,6 +216,74 @@ ДатаИзменения 27 + true + true + + true + + + <key>ru</key> + <value>Дата изменения (местное время)</value> + + + ДатаИзмененияExtendedTooltip + 51 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + Размер + 12 + true + true + + true + + + <key>ru</key> + <value>Размер (байт)</value> + + + РазмерExtendedTooltip + 54 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаНаКомпьютере + 63 ДатаИзмененияВРабочемКаталоге 60 @@ -257,6 +325,83 @@ Normal + + РазмерВРабочемКаталоге + 32 + true + true + + true + + + РазмерВРабочемКаталоге + + + РазмерВРабочемКаталогеExtendedTooltip + 55 + Label + true + true + + Left + + + + РазмерВРабочемКаталогеКонтекстноеМеню + 33 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Копия на компьютере</value> + + + ГруппаНаКомпьютереРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаВПрограмме + 65 ДатаИзмененияВХранилищеФайлов 57 @@ -298,84 +443,6 @@ Normal - true - true - - true - - - <key>ru</key> - <value>Дата изменения (местное время)</value> - - - ДатаИзмененияExtendedTooltip - 51 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - - Размер - 12 - - РазмерВРабочемКаталоге - 32 - true - true - - true - - - РазмерВРабочемКаталоге - - None - - РазмерВРабочемКаталогеExtendedTooltip - 55 - Label - true - true - - Left - - - - РазмерВРабочемКаталогеКонтекстноеМеню - 33 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - РазмерВХранилищеФайлов 34 @@ -387,7 +454,6 @@ РазмерВХранилищеФайлов - None РазмерВХранилищеФайловExtendedTooltip 56 @@ -427,11 +493,11 @@ <key>ru</key> - <value>Размер (байт)</value> + <value>Файл в программе</value> - РазмерExtendedTooltip - 54 + ГруппаВПрограммеРасширеннаяПодсказка + 66 Label true true @@ -441,7 +507,7 @@ UsualGroup - Vertical + HorizontalIfPossible Auto WeakSeparation true @@ -472,7 +538,7 @@ UsualGroup - HorizontalIfPossible + Vertical Auto true true @@ -672,7 +738,7 @@ ДатаИзмененияВХранилищеФайлов <key>ru</key> - <value>Файл в программе</value> + <value>Изменен</value> 5 @@ -690,7 +756,7 @@ ДатаИзмененияВРабочемКаталоге <key>ru</key> - <value>Копия на компьютере</value> + <value>Изменен</value> 6 @@ -708,7 +774,7 @@ РазмерВРабочемКаталоге <key>ru</key> - <value>На компьютере</value> + <value>Размер (байт)</value> 7 @@ -728,7 +794,7 @@ РазмерВХранилищеФайлов <key>ru</key> - <value>В программе</value> + <value>Размер (байт)</value> 8 diff --git a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl index 9b9ceccf9..aeec568db 100644 --- a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl +++ b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииОтличийФайла/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -43,13 +50,9 @@ ВызватьИсключение НСтр("ru = 'Неизвестное действие над файлом'"); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Элементы.ФормаПоместить.ТолькоВоВсехДействиях = Истина; - Элементы.ФормаВзятьИзХранилища.ТолькоВоВсехДействиях = Истина; - Элементы.ФормаНеПомещать.ТолькоВоВсехДействиях = Истина; - Элементы.Отменить.ТолькоВоВсехДействиях = Истина; - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + Элементы.ЗначокСообщения.Видимость = Ложь; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form index b587996e9..2444affea 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form @@ -95,6 +95,40 @@ true + + Ссылка + 83 + true + true + + + СписокПользователи.Ref + + + СсылкаРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 84 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокПользователиКоманднаяПанель @@ -320,6 +354,40 @@ true + + СписокРолиСсылка + 86 + true + true + + + СписокРоли.Ref + + + СписокРолиСсылкаРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + СписокРолиСсылкаКонтекстноеМеню + 87 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокРолиКоманднаяПанель 28 diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl index 2028ed369..506228184 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/ВыборКонтакта/Form.form b/SSL/src/CommonForms/ВыборКонтакта/Form.form index 012183a22..08215b3de 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Form.form +++ b/SSL/src/CommonForms/ВыборКонтакта/Form.form @@ -727,6 +727,40 @@ 4 + + ГруппыПользователейСсылка + 164 + true + true + + + ГруппыПользователей.Ref + + + ГруппыПользователейСсылкаРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + + ГруппыПользователейСсылкаКонтекстноеМеню + 165 + true + + LabelField + Enter + true + Left + true + + true + true + + None ГруппыПользователейКоманднаяПанель @@ -928,6 +962,40 @@ Normal + + СписокПользователейСсылка + 167 + true + true + + + СписокПользователей.Ref + + + СписокПользователейСсылкаРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + СписокПользователейСсылкаКонтекстноеМеню + 168 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокПользователейКоманднаяПанель 86 @@ -1424,6 +1492,9 @@ true + + СписокПользователей.Ref + ВЫБРАТЬ Пользователи.Ссылка, @@ -1527,6 +1598,9 @@ ГруппыПользователей.Parent + + ГруппыПользователей.Ref + ВЫБРАТЬ СправочникГруппыПользователей.Ссылка, diff --git a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl index 1f59cd473..644544c25 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl +++ b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl index 3fc32fc29..8ff7af041 100644 --- a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -20,7 +27,7 @@ ВнешнееСоединение = Подключение.Соединение; Если ВнешнееСоединение = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); Возврат; КонецЕсли; @@ -56,7 +63,7 @@ КонецЕсли; Если WSПрокси = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); Возврат; КонецЕсли; diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl index 35755b324..9f9a10e7d 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // ИСПОЛЬЗОВАНИЕ ФОРМЫ // // @@ -78,10 +86,8 @@ НачальнаяПометкаКоллекций(ДеревоОбъектовМетаданных); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; КонецЕсли; КонецПроцедуры @@ -257,7 +263,7 @@ ПараметрыЭлемента = ПараметрыЭлементаДереваОбъектовМетаданных(); ПараметрыЭлемента.Имя = "Общие"; - ПараметрыЭлемента.Синоним = "Общие"; + ПараметрыЭлемента.Синоним = НСтр("ru = 'Общие'"); ПараметрыЭлемента.Картинка = 0; ПараметрыЭлемента.Родитель = ЭлементКонфигурация; ЭлементОбщие = НоваяСтрокаДерева(ПараметрыЭлемента); diff --git a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl index 8f7fa1064..22fdeac98 100644 --- a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl +++ b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -14,6 +21,10 @@ Элементы.ПутьКАрхивуWindows.КнопкаВыбора = Ложь; КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -59,7 +70,7 @@ Если ПустаяСтрока(ПутьКАрхивуWindows) И ПустаяСтрока(ПутьКАрхивуLinux) Тогда Текст = НСтр("ru = 'Укажите полное имя архива с |файлами начального образа (файл *.zip)'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст, , "ПутьКАрхивуWindows"); + ОбщегоНазначенияКлиент.СообщитьПользователю(Текст, , "ПутьКАрхивуWindows"); Возврат; КонецЕсли; @@ -68,7 +79,7 @@ Если Не ПустаяСтрока(ПутьКАрхивуWindows) И (Лев(ПутьКАрхивуWindows, 2) <> "\\" ИЛИ СтрНайти(ПутьКАрхивуWindows, ":") <> 0) Тогда ТекстОшибки = НСтр("ru = 'Путь к архиву с файлами начального образа |должен быть в формате UNC (\\servername\resource).'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПутьКАрхивуWindows"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , "ПутьКАрхивуWindows"); Возврат; КонецЕсли; diff --git a/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl b/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl index e9b1d3158..0097271ac 100644 --- a/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl +++ b/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -31,13 +38,13 @@ Если ЗаданыТипыОсновногоОбъектаАдресации И ОсновнойОбъектАдресации = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), Роль.ТипыОсновногоОбъектаАдресации.Наименование ),,, "ОсновнойОбъектАдресации", Отказ); ИначеЕсли ЗаданыТипыДополнительногоОбъектаАдресации И ДополнительныйОбъектАдресации = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), Роль.ТипыДополнительногоОбъектаАдресации.Наименование ),,, "ДополнительныйОбъектАдресации", Отказ); diff --git a/SSL/src/CommonForms/ВыборТиповПользователей/Module.bsl b/SSL/src/CommonForms/ВыборТиповПользователей/Module.bsl index 47b7d6f2d..001a265cd 100644 --- a/SSL/src/CommonForms/ВыборТиповПользователей/Module.bsl +++ b/SSL/src/CommonForms/ВыборТиповПользователей/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl index 4e64b9c39..c87068e67 100644 --- a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl +++ b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Форма выбора для полей типа "узел плана обмена". // diff --git a/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl b/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl index 38aab3607..43b8532ba 100644 --- a/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -24,13 +31,11 @@ Пометка = Истина; КонецЕсли; КонецЕсли; - ВыбранныеФорматыСохранения.Добавить(ФорматСохранения.ТипФайлаТабличногоДокумента, Строка(ФорматСохранения.Ссылка), Пометка, ФорматСохранения.Картинка); + ВыбранныеФорматыСохранения.Добавить(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента), Строка(ФорматСохранения.Ссылка), Пометка, ФорматСохранения.Картинка); КонецЦикла; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/ГруппыПользователей/Form.form b/SSL/src/CommonForms/ГруппыПользователей/Form.form index d3e81aeb3..717c79cad 100644 --- a/SSL/src/CommonForms/ГруппыПользователей/Form.form +++ b/SSL/src/CommonForms/ГруппыПользователей/Form.form @@ -539,7 +539,7 @@ Page - HorizontalIfPossible + AlwaysHorizontal auto false @@ -590,6 +590,11 @@ true auto true + + + КоманднаяПанель + + ДеревоГрупп diff --git a/SSL/src/CommonForms/ГруппыПользователей/Module.bsl b/SSL/src/CommonForms/ГруппыПользователей/Module.bsl index ee0db5500..e907f8b6d 100644 --- a/SSL/src/CommonForms/ГруппыПользователей/Module.bsl +++ b/SSL/src/CommonForms/ГруппыПользователей/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -63,6 +70,9 @@ Если ДеревоГрупп.ПолучитьЭлементы().Количество() = 0 Тогда Элементы.ГруппыИлиПредупреждение.ТекущаяСтраница = Элементы.Предупреждение; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.КоманднаяПанель.Видимость = Ложь; + КонецЕсли; Возврат; КонецЕсли; @@ -525,20 +535,18 @@ Процедура ЗаписатьИЗакрытьОбработкаВопроса(Ответ, Отчет) Экспорт Если Ответ = "Ок" Тогда - Возврат; + Модифицированность = Ложь; + ЗаписатьИЗакрытьЗавершение(); Иначе Отчет.Показать(НСтр("ru = 'Пользователи, не включенные в группы'")); - Возврат; КонецЕсли; - Модифицированность = Ложь; - ЗаписатьИЗакрытьЗавершение(); - КонецПроцедуры &НаКлиенте Процедура ЗаписатьИЗакрытьОбработкаПредупреждения(ДополнительныеПараметры) Экспорт + Модифицированность = Ложь; ЗаписатьИЗакрытьЗавершение(); КонецПроцедуры diff --git a/SSL/src/CommonForms/ДлительнаяОперация/Form.form b/SSL/src/CommonForms/ДлительнаяОперация/Form.form index 6e76d0514..c29d20b71 100644 --- a/SSL/src/CommonForms/ДлительнаяОперация/Form.form +++ b/SSL/src/CommonForms/ДлительнаяОперация/Form.form @@ -110,16 +110,20 @@ <name>ФормаКоманднаяПанель</name> <id>-1</id> <items xsi:type="form:Button"> - <name>ФормаОтмена</name> - <id>12</id> + <name>ФормаЗакрыть</name> + <id>16</id> + <title> + <key>ru</key> + <value>Отмена</value> + true true true - ФормаОтменаРасширеннаяПодсказка - 13 + ФормаЗакрытьРасширеннаяПодсказка + 17 Label true true @@ -127,7 +131,7 @@ Left - Form.Command.Отмена + Form.StandardCommand.Close Normal Auto true @@ -155,7 +159,6 @@ Abort Cancel - Close Ignore No OK @@ -222,28 +225,6 @@ true - - Отмена - - <key>ru</key> - <value>Отмена</value> - - 1 - - ru - Отмена - - - true - - - - Отмена - - - DontUse - Auto - ОжидатьЗавершение diff --git a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl index a5c28fa16..83f61de09 100644 --- a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl +++ b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -27,6 +34,10 @@ ИдентификаторЗадания = Параметры.ИдентификаторЗадания; КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -72,22 +83,6 @@ #КонецОбласти -#Область Команды - -&НаКлиенте -Процедура Отмена(Команда) - - ФормаЗакрывается = Истина; - Подключаемый_ПроверитьВыполнениеЗадания(); // а вдруг задание уже выполнилось. - Если Статус = "Отменено" Тогда - Статус = Неопределено; - Закрыть(РезультатВыполнения(Неопределено)); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - #Область СлужебныеПроцедурыИФункции &НаКлиенте @@ -145,7 +140,12 @@ &НаКлиенте Процедура Подключаемый_ОтменитьЗадание() - Отмена(Неопределено); + ФормаЗакрывается = Истина; + Подключаемый_ПроверитьВыполнениеЗадания(); // а вдруг задание уже выполнилось. + Если Статус = "Отменено" Тогда + Статус = Неопределено; + Закрыть(РезультатВыполнения(Неопределено)); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Form.form b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Form.form index 99f7ff320..6bb016b3b 100644 --- a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Form.form +++ b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Form.form @@ -573,8 +573,7 @@ ПредставлениеДанныхОткрывается - String - + Boolean diff --git a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl index 4388c650c..607b0bc26 100644 --- a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl +++ b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -41,10 +49,9 @@ КонецЕсли; МенеджерКриптографииНаСервереОписаниеОшибки = Новый Структура; - ОбщиеНастройки = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); - Если ОбщиеНастройки.ПроверятьЭлектронныеПодписиНаСервере - Или ОбщиеНастройки.СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодпись.ПроверятьЭлектронныеПодписиНаСервере() + Или ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("", Ложь, МенеджерКриптографииНаСервереОписаниеОшибки); @@ -80,7 +87,7 @@ #КонецОбласти -#Область ОбработчикиСобытийТаблицыФормыПодписи +#Область ОбработчикиСобытийЭлементовТаблицыФормыПодписи &НаКлиенте Процедура ПодписиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) @@ -120,12 +127,6 @@ КонецЕсли; Если ТипЗнч(ОписаниеДанных.Объект) <> Тип("ОписаниеОповещения") Тогда - ИдентификаторФормы = Неопределено; - Если ТипЗнч(ФормаОбъекта) = Тип("УправляемаяФорма") Тогда - ИдентификаторФормы = ФормаОбъекта.УникальныйИдентификатор; - ИначеЕсли ТипЗнч(ФормаОбъекта) = Тип("УникальныйИдентификатор") Тогда - ИдентификаторФормы = ФормаОбъекта; - КонецЕсли; ВерсияОбъекта = Неопределено; ОписаниеДанных.Свойство("ВерсияОбъекта", ВерсияОбъекта); МассивПодписей = Неопределено; @@ -133,7 +134,7 @@ ДобавитьПодпись(ОписаниеДанных.Объект, ВерсияОбъекта, МассивПодписей); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОКЗавершение(Новый Структура("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)), ); + ОКЗавершение(Новый Структура("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); Возврат; КонецПопытки; ОписаниеДанных.Вставить("Подписи", МассивПодписей); @@ -150,18 +151,18 @@ Возврат; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОКЗавершение(Новый Структура("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)), ); + ОКЗавершение(Новый Структура("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); Возврат; КонецПопытки; КонецЕсли; - ОКЗавершение(Новый Структура, ); + ОКЗавершение(Новый Структура); КонецПроцедуры // Продолжение процедуры ОК. &НаКлиенте -Процедура ОКЗавершение(Результат, Контекст) Экспорт +Процедура ОКЗавершение(Результат, Контекст = Неопределено) Экспорт Если Результат.Свойство("ОписаниеОшибки") Тогда ОписаниеДанных.Удалить("Подписи"); @@ -217,74 +218,33 @@ Контекст = Новый Структура; Контекст.Вставить("ДобавитьНовуюСтроку", ДобавитьНовуюСтроку); - НачатьПодключениеРасширенияРаботыСФайлами(Новый ОписаниеОповещения( - "ВыбратьФайлПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст)); + Оповещение = Новый ОписаниеОповещения("ВыбратьФайлПослеПомещенияФайла", ЭтотОбъект, Контекст); + + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл электронной подписи'"); + ПараметрыЗагрузки.Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файлы подписи (*.%1)|*.%1|Все файлы(*.*)|*.*'"), + ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().РасширениеДляФайловПодписи); + + Если Не ДобавитьНовуюСтроку Тогда + ПараметрыЗагрузки.Диалог.ПолноеИмяФайла = Элементы.Подписи.ТекущиеДанные.ПутьКФайлу; + КонецЕсли; + + ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); КонецПроцедуры // Продолжение процедуры ВыбратьФайл. &НаКлиенте -Процедура ВыбратьФайлПослеПодключенияРасширенияРаботыСФайлами(Подключено, Контекст) Экспорт +Процедура ВыбратьФайлПослеПомещенияФайла(ПомещенныйФайл, Контекст) Экспорт - Если Не Подключено Тогда - ОбработкаПродолжения = Новый ОписаниеОповещения( - "ВыбратьФайлПриНачалеПомещенияФайла", ЭтотОбъект, Контекст); - - НачатьПомещениеФайла(ОбработкаПродолжения, , , , УникальныйИдентификатор); + Если ПомещенныйФайл = Неопределено Тогда Возврат; КонецЕсли; - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - Диалог.МножественныйВыбор = Ложь; - Диалог.Заголовок = НСтр("ru = 'Выберите файл электронной подписи'"); - Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файлы подписи (*.%1)|*.%1|Все файлы(*.*)|*.*'"), - ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляФайловПодписи); - - Если Не Контекст.ДобавитьНовуюСтроку Тогда - Диалог.ПолноеИмяФайла = Элементы.Подписи.ТекущиеДанные.ПутьКФайлу; - КонецЕсли; - - НачатьПомещениеФайлов(Новый ОписаниеОповещения( - "ВыбратьФайлПослеПомещенияФайлов", ЭтотОбъект, Контекст), , Диалог, Ложь, УникальныйИдентификатор); - -КонецПроцедуры - -// Продолжение процедуры ВыбратьФайл. -&НаКлиенте -Процедура ВыбратьФайлПослеПомещенияФайлов(ПомещенныеФайлы, Контекст) Экспорт - - Если Не ЗначениеЗаполнено(ПомещенныеФайлы) Тогда - Возврат; - КонецЕсли; - - Контекст.Вставить("Адрес", ПомещенныеФайлы[0].Хранение); - - СоставИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПомещенныеФайлы[0].Имя); - Контекст.Вставить("ИмяФайла", СоставИмени.Имя); - - ВыбратьФайлПослеПомещенияФайла(Контекст); - -КонецПроцедуры - -// Продолжение процедуры ВыбратьФайл. -&НаКлиенте -Процедура ВыбратьФайлПриНачалеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, Контекст) Экспорт - - Если Результат <> Истина Тогда - Возврат; - КонецЕсли; - - Контекст.Вставить("Адрес", Адрес); - Контекст.Вставить("ИмяФайла", ВыбранноеИмяФайла); - - ВыбратьФайлПослеПомещенияФайла(Контекст); - -КонецПроцедуры - -// Продолжение процедуры ВыбратьФайл. -&НаКлиенте -Процедура ВыбратьФайлПослеПомещенияФайла(Контекст) - + Контекст.Вставить("Адрес", ПомещенныйФайл.Хранение); + Контекст.Вставить("ИмяФайла", ПомещенныйФайл.Имя); Контекст.Вставить("ОшибкаНаСервере", Новый Структура); Контекст.Вставить("ДанныеПодписи", Неопределено); Контекст.Вставить("ДатаПодписи", Неопределено); @@ -357,8 +317,11 @@ &НаКлиенте Процедура ВыбратьФайлПослеВыгрузкиСертификата(ДанныеСертификата, Контекст) Экспорт - СвойстваПодписи = СвойстваПодписи(Контекст.Сертификат, - ДанныеСертификата, Контекст.ДанныеПодписи, Контекст.ИмяФайла); + СвойстваСертификата = ЭлектроннаяПодписьКлиент.СвойстваСертификата(Контекст.Сертификат); + СвойстваСертификата.Вставить("ДвоичныеДанные", ДанныеСертификата); + + СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(Контекст.ДанныеПодписи, + СвойстваСертификата, "", ПользователиКлиент.АвторизованныйПользователь(), Контекст.ИмяФайла); ДобавитьСтроку(ЭтотОбъект, Контекст.ДобавитьНовуюСтроку, СвойстваПодписи, Контекст.ИмяФайла, Контекст.АдресСвойствПодписи); @@ -429,11 +392,10 @@ ДанныеПодписи, ДатаПодписи, АдресСвойствПодписи) ДанныеПодписи = ПолучитьИзВременногоХранилища(Адрес); - ОбщиеНастройки = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); ДатаПодписи = ЭлектроннаяПодпись.ДатаПодписания(ДанныеПодписи); - Если Не ОбщиеНастройки.ПроверятьЭлектронныеПодписиНаСервере - И Не ОбщиеНастройки.СоздаватьЭлектронныеПодписиНаСервере Тогда + Если Не ЭлектроннаяПодпись.ПроверятьЭлектронныеПодписиНаСервере() + И Не ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда Возврат Ложь; КонецЕсли; @@ -459,7 +421,11 @@ Возврат Ложь; КонецЕсли; - СвойстваПодписи = СвойстваПодписи(Сертификаты[0], Сертификаты[0].Выгрузить(), ДанныеПодписи, ИмяФайла); + СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(Сертификаты[0]); + СвойстваСертификата.Вставить("ДвоичныеДанные", Сертификаты[0].Выгрузить()); + + СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДанныеПодписи, + СвойстваСертификата, "", Пользователи.АвторизованныйПользователь(), ИмяФайла); ДобавитьСтроку(ЭтотОбъект, ДобавитьНовуюСтроку, СвойстваПодписи, ИмяФайла, АдресСвойствПодписи); @@ -483,19 +449,6 @@ КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Функция СвойстваПодписи(Сертификат, ДанныеСертификата, ДанныеПодписи, ИмяФайла) - - СвойстваСертификата = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(Сертификат); - СвойстваСертификата.Вставить("ДвоичныеДанные", ДанныеСертификата); - - СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДанныеПодписи, - СвойстваСертификата, "", ИмяФайла); - - Возврат СвойстваПодписи; - -КонецФункции - &НаСервере Функция МассивПодписей() diff --git a/SSL/src/CommonForms/ДополнительноеОписание/Module.bsl b/SSL/src/CommonForms/ДополнительноеОписание/Module.bsl index e18bbde3f..fee9ed1fd 100644 --- a/SSL/src/CommonForms/ДополнительноеОписание/Module.bsl +++ b/SSL/src/CommonForms/ДополнительноеОписание/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -14,12 +21,6 @@ Заголовок = Параметры.Заголовок; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl index b3e325848..5485b5e9b 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -14,7 +22,7 @@ КонецЕсли; Если ЗначениеЗаполнено(Параметры.ИмяРаздела) - И Параметры.ИмяРаздела <> ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Тогда + И Параметры.ИмяРаздела <> ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы() Тогда СсылкаРаздела = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Подсистемы.Найти(Параметры.ИмяРаздела)); КонецЕсли; @@ -76,13 +84,6 @@ КонецЕсли; ЗаполнитьТаблицуОбработок(); - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанельСтраницыОткрытьОбработку", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl index 07be34547..cd5efbdc2 100644 --- a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -149,7 +156,7 @@ ИндексСтрокой = СтрЗаменить(Строка(АдресаИсключений.Индекс(СтрАдрес)), Символ(160), ""); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , "АдресаИсключений[" + ИндексСтрокой + "].АдресСервера"); АдресаКорректны = Ложь; diff --git a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl index e9f0d0956..1f9e7c9f0 100644 --- a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl +++ b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl b/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl index 983389fdb..42d26c1cc 100644 --- a/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl +++ b/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl index ea900df93..169f32045 100644 --- a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -20,14 +27,6 @@ КонецЕсли; УстановитьДоступностьЭлементов(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Элементы.ВидДоступаКСервисуMorher.ВидПереключателя = ВидПереключателя.Переключатель; - - КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -122,7 +121,7 @@ Если ВидДоступаКСервисуMorher = 1 И Не ЗначениеЗаполнено(Токен) Тогда ТекстСообщения = НСтр("ru = 'Токен доступа не заполнен.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , "Токен", Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , , "Токен", Отказ); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form b/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form new file mode 100644 index 000000000..28fd96166 --- /dev/null +++ b/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form @@ -0,0 +1,2048 @@ + + + + ГруппаКомандыВерхнегоКолонтитула + 139 + + ШаблоныВерхнегоКолонтитула + 141 + + ВремяВерхнегоКолонтитула + 58 + true + true + + true + + + ВремяВерхнегоКолонтитулаРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + Form.Command.Время + Normal + Auto + true + true + UserCmds + Auto + + + ДатаВерхнегоКолонтитула + 59 + true + true + + true + + + ДатаВерхнегоКолонтитулаРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + Form.Command.Дата + Normal + Auto + true + true + UserCmds + Auto + + + НазваниеОтчетаВерхнегоКолонтитула + 60 + true + true + + true + + + НазваниеОтчетаВерхнегоКолонтитулаРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + Form.Command.НазваниеОтчета + Normal + Auto + true + true + UserCmds + Auto + + + ПользовательВерхнегоКолонтитула + 62 + true + true + + true + + + ПользовательВерхнегоКолонтитулаРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + Form.Command.Пользователь + Normal + Auto + true + true + UserCmds + Auto + + + НомерСтраницыВерхнегоКолонтитула + 61 + true + true + + true + + + НомерСтраницыВерхнегоКолонтитулаРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + Form.Command.НомерСтраницы + Normal + Auto + true + true + UserCmds + Auto + + + СтраницВсегоВерхнегоКолонтитула + 63 + true + true + + true + + + СтраницВсегоВерхнегоКолонтитулаРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + Form.Command.СтраницВсего + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Шаблоны верхнего колонтитула</value> + + Left + + ШаблоныВерхнегоКолонтитулаРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + + + ШрифтВерхнегоКолонтитула + 21 + true + true + + true + + + ШрифтВерхнегоКолонтитулаExtendedTooltip + 104 + Label + true + true + + Left + + + Form.Command.НастроитьШрифтВерхнегоКолонтитула + Normal + Auto + true + true + Right + UserCmds + Auto + + + ВертикальноеВыравниваниеВерхнегоКолонтитула + 78 + + ВертикальноеПоложениеВерхнегоКолонтитулаВерх + 79 + true + true + + true + + + ВертикальноеПоложениеВерхнегоКолонтитулаВерхExtendedTooltip + 106 + Label + true + true + + Left + + + Form.Command.ВертикальноеПоложениеВерхнегоКолонтитулаВерх + Normal + Auto + true + true + UserCmds + Auto + + + ВертикальноеПоложениеВерхнегоКолонтитулаЦентр + 80 + true + true + + true + + + ВертикальноеПоложениеВерхнегоКолонтитулаЦентрExtendedTooltip + 107 + Label + true + true + + Left + + + Form.Command.ВертикальноеПоложениеВерхнегоКолонтитулаЦентр + Normal + Auto + true + true + UserCmds + Auto + + + ВертикальноеПоложениеВерхнегоКолонтитулаНиз + 81 + true + true + + true + + + ВертикальноеПоложениеВерхнегоКолонтитулаНизExtendedTooltip + 108 + Label + true + true + + Left + + + Form.Command.ВертикальноеПоложениеВерхнегоКолонтитулаНиз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Вертикальное положение верхнего колонтитула</value> + + Right + + ВертикальноеВыравниваниеВерхнегоКолонтитулаРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + Compact + + + true + true + + true + + + <key>ru</key> + <value>Команды верхнего колонтитула</value> + + + ГруппаКомандыВерхнегоКолонтитулаРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + CommandBar + + Left + + + + ГруппаТекстВерхнегоКолонтитула + 8 + + ТекстСлеваСверху + 1 + true + true + + true + + + ТекстСлеваСверху + + None + + OnChange + ТекстПриИзменении + + + ТекстСлеваСверхуExtendedTooltip + 110 + Label + true + true + + Left + + + + ТекстСлеваСверхуКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + 3 + true + true + false + true + true + true + true + true + Normal + + + + ТекстВЦентреСверху + 4 + true + true + + true + + + ТекстВЦентреСверху + + None + + OnChange + ТекстПриИзменении + + + ТекстВЦентреСверхуExtendedTooltip + 111 + Label + true + true + + Left + + + + ТекстВЦентреСверхуКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + 3 + true + true + false + true + true + true + true + true + Normal + + + + ТекстСправаСверху + 6 + true + true + + true + + + ТекстСправаСверху + + None + + OnChange + ТекстПриИзменении + + + ТекстСправаСверхуExtendedTooltip + 112 + Label + true + true + + Left + + + + ТекстСправаСверхуКонтекстноеМеню + 7 + true + + InputField + Enter + true + Left + true + + 3 + true + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Текст верхнего колонтитула</value> + + + ГруппаТекстВерхнегоКолонтитулаExtendedTooltip + 109 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ВыводитьВерхнийКолонтитулСоСтраницы + 17 + true + true + + true + + + НачальнаяСтраницаСверху + + + OnChange + ВыводитьВерхнийКолонтитулСоСтраницыПриИзменении + + + ВыводитьВерхнийКолонтитулСоСтраницыExtendedTooltip + 113 + Label + true + true + + Left + + + + ВыводитьВерхнийКолонтитулСоСтраницыКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Образец + 15 + true + true + + true + + + Образец + + None + + ОбразецExtendedTooltip + 114 + Label + true + true + + Left + + + + ОбразецКонтекстноеМеню + 16 + true + + SpreadsheetDocumentField + true + Enter + true + Left + true + + 70 + true + 9 + true + true + true + Special + Always + Auto + true + true + true + + + + ГруппаСнизу + 39 + + ПримерСтраницы + 35 + true + true + + true + + + ПримерСтраницы + + + OnChange + ПримерСтраницыПриИзменении + + + ПримерСтраницыExtendedTooltip + 117 + Label + true + true + + Left + + + + ПримерСтраницыКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + 4 + true + true + true + true + true + true + true + + 1 + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Снизу</value> + + Right + + ГруппаСнизуExtendedTooltip + 115 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаКомандыНижнегоКолонтитула + 143 + + ШаблоныНижнегоКолонтитула + 145 + + ВремяНижнегоКолонтитула + 44 + true + true + + true + + + ВремяНижнегоКолонтитулаРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + Form.Command.Время + Normal + Auto + true + true + UserCmds + Auto + + + ДатаНижнегоКолонтитула + 45 + true + true + + true + + + ДатаНижнегоКолонтитулаРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Form.Command.Дата + Normal + Auto + true + true + UserCmds + Auto + + + НазваниеОтчетаНижнегоКолонтитула + 46 + true + true + + true + + + НазваниеОтчетаНижнегоКолонтитулаРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + Form.Command.НазваниеОтчета + Normal + Auto + true + true + UserCmds + Auto + + + ПользовательНижнегоКолонтитула + 49 + true + true + + true + + + ПользовательНижнегоКолонтитулаРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + Form.Command.Пользователь + Normal + Auto + true + true + UserCmds + Auto + + + НомерСтраницыНижнегоКолонтитула + 47 + true + true + + true + + + НомерСтраницыНижнегоКолонтитулаРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + Form.Command.НомерСтраницы + Normal + Auto + true + true + UserCmds + Auto + + + СтраницВсегоНижнегоКолонтитула + 50 + true + true + + true + + + СтраницВсегоНижнегоКолонтитулаРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + Form.Command.СтраницВсего + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Шаблоны нижнего колонтитула</value> + + + ШаблоныНижнегоКолонтитулаРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + + + ШрифтНижнегоКолонтитула + 34 + true + true + + true + + + ШрифтНижнегоКолонтитулаExtendedTooltip + 127 + Label + true + true + + Left + + + Form.Command.НастроитьШрифтНижнегоКолонтитула + Normal + Auto + true + true + UserCmds + Auto + + + ВертикальноеВыравниваниеНижнегоКолонтитула + 86 + + ВертикальноеПоложениеНижнегоКолонтитулаВерх + 87 + true + true + + true + + + ВертикальноеПоложениеНижнегоКолонтитулаВерхExtendedTooltip + 129 + Label + true + true + + Left + + + Form.Command.ВертикальноеПоложениеНижнегоКолонтитулаВерх + Normal + Auto + true + true + UserCmds + Auto + + + ВертикальноеПоложениеНижнегоКолонтитулаЦентр + 88 + true + true + + true + + + ВертикальноеПоложениеНижнегоКолонтитулаЦентрExtendedTooltip + 130 + Label + true + true + + Left + + + Form.Command.ВертикальноеПоложениеНижнегоКолонтитулаЦентр + Normal + Auto + true + true + UserCmds + Auto + + + ВертикальноеПоложениеНижнегоКолонтитулаНиз + 89 + true + true + + true + + + ВертикальноеПоложениеНижнегоКолонтитулаНизExtendedTooltip + 131 + Label + true + true + + Left + + + Form.Command.ВертикальноеПоложениеНижнегоКолонтитулаНиз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Вертикальное положение нижнего колонтитула</value> + + + ВертикальноеВыравниваниеНижнегоКолонтитулаРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + + Compact + + + true + true + + true + + + <key>ru</key> + <value>Команды нижнего колонтитула</value> + + + ГруппаКомандыНижнегоКолонтитулаРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + CommandBar + + Left + + + + ГруппаТекстНижнегоКолонтитула + 3 + + ТекстСлеваСнизу + 9 + true + true + + true + + + ТекстСлеваСнизу + + None + + OnChange + ТекстПриИзменении + + + ТекстСлеваСнизуExtendedTooltip + 133 + Label + true + true + + Left + + + + ТекстСлеваСнизуКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + 3 + true + true + false + true + true + true + true + true + Normal + + + + ТекстВЦентреСнизу + 11 + true + true + + true + + + ТекстВЦентреСнизу + + None + + OnChange + ТекстПриИзменении + + + ТекстВЦентреСнизуExtendedTooltip + 134 + Label + true + true + + Left + + + + ТекстВЦентреСнизуКонтекстноеМеню + 12 + true + + InputField + Enter + true + Left + true + + 3 + true + true + false + true + true + true + true + true + Normal + + + + ТекстСправаСнизу + 13 + true + true + + true + + + ТекстСправаСнизу + + None + + OnChange + ТекстПриИзменении + + + ТекстСправаСнизуExtendedTooltip + 135 + Label + true + true + + Left + + + + ТекстСправаСнизуКонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + 3 + true + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Текст нижнего колонтитула</value> + + + ГруппаТекстНижнегоКолонтитулаExtendedTooltip + 132 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ВыводитьНижнийКолонтитулСоСтраницы + 19 + true + true + + true + + + НачальнаяСтраницаСнизу + + + OnChange + ВыводитьНижнийКолонтитулСоСтраницыПриИзменении + + + ВыводитьНижнийКолонтитулСоСтраницыExtendedTooltip + 136 + Label + true + true + + Left + + + + ВыводитьНижнийКолонтитулСоСтраницыКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ФормаОК + 67 + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 68 + true + + true + + + ФормаОтменаExtendedTooltip + 93 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьСтандартныеНастройки + 137 + true + true + + true + + + ФормаУстановитьСтандартныеНастройкиРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Form.Command.УстановитьСтандартныеНастройки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ТекстСлеваСверху + + <key>ru</key> + <value>Текст слева сверху</value> + + 1 + + String + + + + true + + + true + + + + ТекстВЦентреСверху + + <key>ru</key> + <value>Текст в центре сверху</value> + + 2 + + 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 + + SpreadsheetDocument + + + true + + + true + + + + + НачальнаяСтраницаСверху + + <key>ru</key> + <value>Выводить верхний колонтитул со страницы</value> + + 8 + + Number + + 2 + true + + + + true + + + true + + + + НачальнаяСтраницаСнизу + + <key>ru</key> + <value>Выводить нижний колонтитул со страницы</value> + + 9 + + Number + + 2 + true + + + + true + + + true + + + + ПримерСтраницы + + <key>ru</key> + <value>Пример страницы</value> + + 10 + + Number + + 1 + true + + + + true + + + true + + + + ШрифтСверху + + <key>ru</key> + <value>Шрифт сверху</value> + + 11 + + Font + + + true + + + true + + + + ШрифтСнизу + + <key>ru</key> + <value>Шрифт снизу</value> + + 12 + + Font + + + true + + + true + + + + ВертикальноеПоложениеСверху + + <key>ru</key> + <value>Вертикальное положение</value> + + 13 + + VerticalAlign + + + true + + + true + + + + ВертикальноеПоложениеСнизу + + <key>ru</key> + <value>Вертикальное положение</value> + + 14 + + VerticalAlign + + + true + + + true + + + + ТекущийПользователь + + <key>ru</key> + <value>Текущий пользователь</value> + + 15 + + CatalogRef.Пользователи + + + true + + + true + + + + ЭтоИндивидуальныеНастройки + + <key>ru</key> + <value>Это индивидуальные настройки</value> + + 16 + + Boolean + + + true + + + true + + + + Настройки + + <key>ru</key> + <value>Настройки</value> + + 17 + + + true + + + true + + + + СтатусНастроек + + <key>ru</key> + <value>Статус настроек</value> + + 18 + + + true + + + true + + + + НастроитьШрифтВерхнегоКолонтитула + + <key>ru</key> + <value>Шрифт...</value> + + 1 + + ru + Настроить шрифт верхнего колонтитула + + + true + + + CommonPicture.Шрифт + + + + НастроитьШрифтВерхнегоКолонтитула + + + Picture + true + DontUse + Auto + + + НастроитьШрифтНижнегоКолонтитула + + <key>ru</key> + <value>Шрифт...</value> + + 2 + + ru + Настроить шрифт нижнего колонтитула + + + true + + + CommonPicture.Шрифт + + + + НастроитьШрифтНижнегоКолонтитула + + + Picture + 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> + + 8 + + ru + Пользователь + + + true + + + + ВставитьШаблон + + + DontUse + Auto + + + СтраницВсего + + <key>ru</key> + <value>Страниц всего</value> + + 9 + + ru + Страниц всего + + + true + + + + ВставитьШаблон + + + DontUse + Auto + + + ОК + + <key>ru</key> + <value>Записать и закрыть</value> + + 7 + + ru + ОК + + + true + + + + ОК + + + DontUse + Auto + + + ВертикальноеПоложениеВерхнегоКолонтитулаНиз + + <key>ru</key> + <value>Низ</value> + + 13 + + true + + + CommonPicture.ВертикальноеПоложениеНиз + + + + ВертикальноеПоложениеВерхнегоКолонтитулаНиз + + + true + DontUse + Auto + + + ВертикальноеПоложениеВерхнегоКолонтитулаЦентр + + <key>ru</key> + <value>Центр</value> + + 14 + + true + + + CommonPicture.ВертикальноеПоложениеЦентр + + + + ВертикальноеПоложениеВерхнегоКолонтитулаЦентр + + + true + DontUse + Auto + + + ВертикальноеПоложениеВерхнегоКолонтитулаВерх + + <key>ru</key> + <value>Верх</value> + + 15 + + true + + + CommonPicture.ВертикальноеПоложениеВерх + + + + ВертикальноеПоложениеВерхнегоКолонтитулаВерх + + + true + DontUse + Auto + + + ВертикальноеПоложениеНижнегоКолонтитулаВерх + + <key>ru</key> + <value>Верх</value> + + 16 + + true + + + CommonPicture.ВертикальноеПоложениеВерх + + + + ВертикальноеПоложениеНижнегоКолонтитулаВерх + + + true + DontUse + Auto + + + ВертикальноеПоложениеНижнегоКолонтитулаНиз + + <key>ru</key> + <value>Низ</value> + + 17 + + true + + + CommonPicture.ВертикальноеПоложениеНиз + + + + ВертикальноеПоложениеНижнегоКолонтитулаНиз + + + true + DontUse + Auto + + + ВертикальноеПоложениеНижнегоКолонтитулаЦентр + + <key>ru</key> + <value>Центр</value> + + 18 + + true + + + CommonPicture.ВертикальноеПоложениеЦентр + + + + ВертикальноеПоложениеНижнегоКолонтитулаЦентр + + + true + DontUse + Auto + + + УстановитьСтандартныеНастройки + + <key>ru</key> + <value>Установить стандартные настройки</value> + + 10 + + ru + Установить стандартные настройки + + + true + + + + УстановитьСтандартныеНастройки + + + Auto + Auto + + + + + + diff --git a/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl b/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl new file mode 100644 index 000000000..9cd83bd4e --- /dev/null +++ b/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl @@ -0,0 +1,432 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОписаниеПеременных + +&НаКлиенте +Перем ШаблоныТекста; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ОпределитьПоведениеВМобильномКлиенте(); + + ЭтоИндивидуальныеНастройки = Параметры.Свойство("Настройки", Настройки); + Если Не ЭтоИндивидуальныеНастройки Тогда + Элементы.ФормаОК.Заголовок = "Сохранить"; + КонецЕсли; + Элементы.ФормаОтмена.Видимость = Не ЭтоИндивидуальныеНастройки; + Элементы.ФормаУстановитьСтандартныеНастройки.Видимость = ЭтоИндивидуальныеНастройки; + + УстановитьСтандартныеНастройкиСервер(); + + ТекущийПользователь = Пользователи.ТекущийПользователь(); + + ПримерСтраницы = 1; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ШаблоныТекста = Новый Структура; + + ШаблоныТекста.Вставить("Дата" , "[&Дата]"); + ШаблоныТекста.Вставить("Время" , "[&Время]"); + ШаблоныТекста.Вставить("НомерСтраницы" , "[&НомерСтраницы]"); + ШаблоныТекста.Вставить("СтраницВсего" , "[&СтраницВсего]"); + ШаблоныТекста.Вставить("Пользователь" , "[&Пользователь]"); + ШаблоныТекста.Вставить("НазваниеОтчета", "[&НазваниеОтчета]"); + + ОбновитьОбразец(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ТекстПриИзменении(Элемент) + ОбновитьОбразец(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыводитьВерхнийКолонтитулСоСтраницыПриИзменении(Элемент) + + ОбновитьОбразец(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыводитьНижнийКолонтитулСоСтраницыПриИзменении(Элемент) + + ОбновитьОбразец(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПримерСтраницыПриИзменении(Элемент) + + ОбновитьОбразец(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВставитьШаблон(Команда) + + Если ТипЗнч(ТекущийЭлемент) = Тип("ПолеФормы") + И ТекущийЭлемент.Вид = ВидПоляФормы.ПолеВвода + И СтрНайти(ТекущийЭлемент.Имя, "Текст") = 1 Тогда + ВставитьТекст(ТекущийЭлемент, ШаблоныТекста[Команда.Имя]); + + ОбновитьОбразец(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьШрифтВерхнегоКолонтитула(Команда) + + ДиалогВыбораШрифта = Новый ДиалогВыбораШрифта; + #Если Не ВебКлиент Тогда + ДиалогВыбораШрифта.Шрифт = ШрифтСверху; + #КонецЕсли + + ОписаниеОповещения = Новый ОписаниеОповещения("НастройкаШрифтаВерхнегоКолонтитулаЗавершение", ЭтотОбъект); + + ДиалогВыбораШрифта.Показать(ОписаниеОповещения); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьШрифтНижнегоКолонтитула(Команда) + + ДиалогВыбораШрифта = Новый ДиалогВыбораШрифта; + #Если Не ВебКлиент Тогда + ДиалогВыбораШрифта.Шрифт = ШрифтСнизу; + #КонецЕсли + + ОписаниеОповещения = Новый ОписаниеОповещения("НастройкаШрифтаНижнегоКолонтитулаЗавершение", ЭтотОбъект); + + ДиалогВыбораШрифта.Показать(ОписаниеОповещения); + +КонецПроцедуры + +&НаКлиенте +Процедура ВертикальноеПоложениеВерхнегоКолонтитулаВерх(Команда) + + ВертикальноеПоложениеСверху = ВертикальноеПоложение.Верх; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаВерх.Пометка = Истина; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаЦентр.Пометка = Ложь; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаНиз.Пометка = Ложь; + + ОбновитьОбразец(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВертикальноеПоложениеВерхнегоКолонтитулаЦентр(Команда) + + ВертикальноеПоложениеСверху = ВертикальноеПоложение.Центр; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаВерх.Пометка = Ложь; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаЦентр.Пометка = Истина; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаНиз.Пометка = Ложь; + + ОбновитьОбразец(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВертикальноеПоложениеВерхнегоКолонтитулаНиз(Команда) + + ВертикальноеПоложениеСверху = ВертикальноеПоложение.Низ; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаВерх.Пометка = Ложь; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаЦентр.Пометка = Ложь; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаНиз.Пометка = Истина; + + ОбновитьОбразец(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВертикальноеПоложениеНижнегоКолонтитулаВерх(Команда) + + ВертикальноеПоложениеСнизу = ВертикальноеПоложение.Верх; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаВерх.Пометка = Истина; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаЦентр.Пометка = Ложь; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаНиз.Пометка = Ложь; + + ОбновитьОбразец(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВертикальноеПоложениеНижнегоКолонтитулаЦентр(Команда) + + ВертикальноеПоложениеСнизу = ВертикальноеПоложение.Центр; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаВерх.Пометка = Ложь; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаЦентр.Пометка = Истина; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаНиз.Пометка = Ложь; + + ОбновитьОбразец(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВертикальноеПоложениеНижнегоКолонтитулаНиз(Команда) + + ВертикальноеПоложениеСнизу = ВертикальноеПоложение.Низ; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаВерх.Пометка = Ложь; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаЦентр.Пометка = Ложь; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаНиз.Пометка = Истина; + + ОбновитьОбразец(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОК(Команда) + ОбновитьНастройки(); + Закрыть(?(Не СтатусНастроек.Стандартные И Не СтатусНастроек.Пустые, Настройки, Неопределено)); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСтандартныеНастройки(Команда) + + Настройки = Неопределено; + УстановитьСтандартныеНастройкиСервер(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОпределитьПоведениеВМобильномКлиенте() + ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент(); + Если Не ЭтоМобильныйКлиент Тогда + Возврат; + КонецЕсли; + + Элементы.ГруппаТекстВерхнегоКолонтитула.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно; + Элементы.ГруппаТекстНижнегоКолонтитула.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно; + + Элементы.ТекстСлеваСверху.ПодсказкаВвода = НСтр("ru = 'Слева сверху'"); + Элементы.ТекстВЦентреСверху.ПодсказкаВвода = НСтр("ru = 'В центре сверху'"); + Элементы.ТекстСправаСверху.ПодсказкаВвода = НСтр("ru = 'Справа сверху'"); + + Элементы.ТекстСлеваСнизу.ПодсказкаВвода = НСтр("ru = 'Слева снизу'"); + Элементы.ТекстВЦентреСнизу.ПодсказкаВвода = НСтр("ru = 'В центре снизу'"); + Элементы.ТекстСправаСнизу.ПодсказкаВвода = НСтр("ru = 'Справа снизу'"); + + Элементы.ТекстСлеваСверху.Высота = 1; + Элементы.ТекстВЦентреСверху.Высота = 1; + Элементы.ТекстСправаСверху.Высота = 1; + + Элементы.ТекстСлеваСнизу.Высота = 1; + Элементы.ТекстВЦентреСнизу.Высота = 1; + Элементы.ТекстСправаСнизу.Высота = 1; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ВысотаСтрокиТекстаКолонтитула() + Возврат 10; +КонецФункции + +&НаКлиенте +Процедура ВставитьТекст(ТекущийЭлемент, Текст) + ЭтотОбъект[ТекущийЭлемент.Имя] = ЭтотОбъект[ТекущийЭлемент.Имя] + Текст; +КонецПроцедуры + +&НаСервере +Процедура ОбновитьНастройки() + ВерхнийКолонтитул = Новый Структура(); + ВерхнийКолонтитул.Вставить("ТекстСлева", ТекстСлеваСверху); + ВерхнийКолонтитул.Вставить("ТекстВЦентре", ТекстВЦентреСверху); + ВерхнийКолонтитул.Вставить("ТекстСправа", ТекстСправаСверху); + ВерхнийКолонтитул.Вставить("Шрифт", ШрифтСверху); + ВерхнийКолонтитул.Вставить("ВертикальноеПоложение", ВертикальноеПоложениеСверху); + ВерхнийКолонтитул.Вставить("НачальнаяСтраница", НачальнаяСтраницаСверху); + + НижнийКолонтитул = Новый Структура(); + НижнийКолонтитул.Вставить("ТекстСлева", ТекстСлеваСнизу); + НижнийКолонтитул.Вставить("ТекстВЦентре", ТекстВЦентреСнизу); + НижнийКолонтитул.Вставить("ТекстСправа", ТекстСправаСнизу); + НижнийКолонтитул.Вставить("Шрифт", ШрифтСнизу); + НижнийКолонтитул.Вставить("ВертикальноеПоложение", ВертикальноеПоложениеСнизу); + НижнийКолонтитул.Вставить("НачальнаяСтраница", НачальнаяСтраницаСнизу); + + Настройки = Новый Структура("ВерхнийКолонтитул, НижнийКолонтитул", ВерхнийКолонтитул, НижнийКолонтитул); + СтатусНастроек = УправлениеКолонтитулами.СтатусНастроекКолонтитулов(Настройки); + + Если Не ЭтоИндивидуальныеНастройки Тогда + УправлениеКолонтитулами.СохранитьНастройкиКолонтитулов(Настройки); + КонецЕсли; +КонецПроцедуры + +// Устанавливает последние сохраненные общие настройки. +// +&НаСервере +Процедура УстановитьСтандартныеНастройкиСервер() + Если Настройки = Неопределено Тогда + Настройки = УправлениеКолонтитулами.НастройкиКолонтитулов(); + КонецЕсли; + + НачальнаяСтраницаСверху = Настройки.ВерхнийКолонтитул.НачальнаяСтраница; + ТекстСлеваСверху = Настройки.ВерхнийКолонтитул.ТекстСлева; + ТекстВЦентреСверху = Настройки.ВерхнийКолонтитул.ТекстВЦентре; + ТекстСправаСверху = Настройки.ВерхнийКолонтитул.ТекстСправа; + ШрифтСверху = Настройки.ВерхнийКолонтитул.Шрифт; + ВертикальноеПоложениеСверху = Настройки.ВерхнийКолонтитул.ВертикальноеПоложение; + + НачальнаяСтраницаСнизу = Настройки.НижнийКолонтитул.НачальнаяСтраница; + ТекстСлеваСнизу = Настройки.НижнийКолонтитул.ТекстСлева; + ТекстВЦентреСнизу = Настройки.НижнийКолонтитул.ТекстВЦентре; + ТекстСправаСнизу = Настройки.НижнийКолонтитул.ТекстСправа; + ШрифтСнизу = Настройки.НижнийКолонтитул.Шрифт; + ВертикальноеПоложениеСнизу = Настройки.НижнийКолонтитул.ВертикальноеПоложение; + + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаВерх.Пометка = + ВертикальноеПоложениеСверху = ВертикальноеПоложение.Верх; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаЦентр.Пометка = + ВертикальноеПоложениеСверху = ВертикальноеПоложение.Центр; + Элементы.ВертикальноеПоложениеВерхнегоКолонтитулаНиз.Пометка = + ВертикальноеПоложениеСверху = ВертикальноеПоложение.Низ; + + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаВерх.Пометка = + ВертикальноеПоложениеСнизу = ВертикальноеПоложение.Верх; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаЦентр.Пометка = + ВертикальноеПоложениеСнизу = ВертикальноеПоложение.Центр; + Элементы.ВертикальноеПоложениеНижнегоКолонтитулаНиз.Пометка = + ВертикальноеПоложениеСнизу = ВертикальноеПоложение.Низ; + + ПодготовитьОбразец(); +КонецПроцедуры + +&НаСервере +Процедура ПодготовитьОбразец() + Образец.Область(1, 1).ВысотаСтроки = 5; + Образец.Область(1, 1).ШиринаКолонки = 1; + + Образец.Область(2, 2, 4, 4).ЦветРамки = Новый Цвет(128, 128, 128); + Образец.Область(2, 2, 4, 4).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Забивать; + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + + Образец.Область(2, 2).Обвести(Линия, Линия,, Линия); + Образец.Область(2, 3).Обвести(, Линия,, Линия); + Образец.Область(2, 4).Обвести(, Линия, Линия, Линия); + + Образец.Область(4, 2).Обвести(Линия, Линия,, Линия); + Образец.Область(4, 3).Обвести(, Линия, , Линия); + Образец.Область(4, 4).Обвести(, Линия, Линия, Линия); + + + Образец.Область(2, 2).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + Образец.Область(2, 3).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + Образец.Область(2, 4).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право; + + Образец.Область(4, 2).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + Образец.Область(4, 3).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + Образец.Область(4, 4).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право; + + Образец.Область(2, 2).ШиринаКолонки = 40; + Образец.Область(2, 3).ШиринаКолонки = 40; + Образец.Область(2, 4).ШиринаКолонки = 40; + + Образец.Область(3, 2).Текст = Символы.ПС + НСтр("ru = 'Образец отчета'") + Символы.ПС + " "; + Образец.Область(3, 2).Шрифт = Новый Шрифт("Arial", 20); + Образец.Область(3, 2).ЦветТекста = Новый Цвет(128, 128, 128); + + Образец.Область(3, 2).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + + Образец.Область(3, 2, 3, 4).Объединить(); + Образец.Область(3, 2, 3, 4).Обвести(Линия, Линия, Линия, Линия); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОбразец() + Образец.Область(2, 2, 2, 4).Шрифт = ШрифтСверху; + Образец.Область(4, 2, 4, 4).Шрифт = ШрифтСнизу; + + Образец.Область(2, 2, 2, 4).ВертикальноеПоложение = ВертикальноеПоложениеСверху; + Образец.Область(4, 2, 4, 4).ВертикальноеПоложение = ВертикальноеПоложениеСнизу; + + КоличествоСтрокСверху = Макс( + 2, + КоличествоСтрокВТексте(ТекстСлеваСверху), + КоличествоСтрокВТексте(ТекстВЦентреСверху), + КоличествоСтрокВТексте(ТекстСправаСверху)); + + КоличествоСтрокСнизу = Макс( + 2, + КоличествоСтрокВТексте(ТекстСлеваСнизу), + КоличествоСтрокВТексте(ТекстВЦентреСнизу), + КоличествоСтрокВТексте(ТекстСправаСнизу)); + + Образец.Область(2, 2).ВысотаСтроки = КоличествоСтрокСверху * ВысотаСтрокиТекстаКолонтитула(); + Образец.Область(4, 2).ВысотаСтроки = КоличествоСтрокСнизу * ВысотаСтрокиТекстаКолонтитула(); + + Образец.Область(2, 2).Текст = ЗаполнитьШаблон(ТекстСлеваСверху, НачальнаяСтраницаСверху); + Образец.Область(2, 3).Текст = ЗаполнитьШаблон(ТекстВЦентреСверху, НачальнаяСтраницаСверху); + Образец.Область(2, 4).Текст = ЗаполнитьШаблон(ТекстСправаСверху, НачальнаяСтраницаСверху); + + Образец.Область(4, 2).Текст = ЗаполнитьШаблон(ТекстСлеваСнизу, НачальнаяСтраницаСнизу); + Образец.Область(4, 3).Текст = ЗаполнитьШаблон(ТекстВЦентреСнизу, НачальнаяСтраницаСнизу); + Образец.Область(4, 4).Текст = ЗаполнитьШаблон(ТекстСправаСнизу, НачальнаяСтраницаСнизу); +КонецПроцедуры + +&НаКлиенте +Функция КоличествоСтрокВТексте(Текст) + Возврат СтрРазделить(Текст, Символы.ПС).Количество(); +КонецФункции + +&НаКлиенте +Функция ЗаполнитьШаблон(Шаблон, НачальнаяСтраница) + Если НачальнаяСтраница > ПримерСтраницы Тогда + Результат = ""; + Иначе + ДатаСегодня = ОбщегоНазначенияКлиент.ДатаСеанса(); + Результат = СтрЗаменить(Шаблон , "[&Время]" , Формат(ДатаСегодня, "ДЛФ=T")); + Результат = СтрЗаменить(Результат, "[&Дата]" , Формат(ДатаСегодня, "ДЛФ=D")); + Результат = СтрЗаменить(Результат, "[&НазваниеОтчета]", НСтр("ru = 'Стандартный отчет'")); + Результат = СтрЗаменить(Результат, "[&Пользователь]" , Строка(ТекущийПользователь)); + Результат = СтрЗаменить(Результат, "[&НомерСтраницы]" , ПримерСтраницы); + Результат = СтрЗаменить(Результат, "[&СтраницВсего]" , "9"); + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура НастройкаШрифтаВерхнегоКолонтитулаЗавершение (ВыбранныйШрифт, Параметры) Экспорт + Если ВыбранныйШрифт = Неопределено Тогда + Возврат; + КонецЕсли; + + ШрифтСверху = ВыбранныйШрифт; + ОбновитьОбразец(); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкаШрифтаНижнегоКолонтитулаЗавершение (ВыбранныйШрифт, Параметры) Экспорт + Если ВыбранныйШрифт = Неопределено Тогда + Возврат; + КонецЕсли; + + ШрифтСнизу = ВыбранныйШрифт; + ОбновитьОбразец(); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/ПоказателиВыделенныхЯчеек.mdo b/SSL/src/CommonForms/НастройкаКолонтитулов/НастройкаКолонтитулов.mdo similarity index 54% rename from SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/ПоказателиВыделенныхЯчеек.mdo rename to SSL/src/CommonForms/НастройкаКолонтитулов/НастройкаКолонтитулов.mdo index 81de8aeea..8868effaa 100644 --- a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/ПоказателиВыделенныхЯчеек.mdo +++ b/SSL/src/CommonForms/НастройкаКолонтитулов/НастройкаКолонтитулов.mdo @@ -1,15 +1,10 @@ - - ПоказателиВыделенныхЯчеек + + НастройкаКолонтитулов ru - Показатели выделенных ячеек + Настройка колонтитулов - - - ru - - PersonalComputer MobileDevice true diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl b/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl index 71cfa9300..7372526be 100644 --- a/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl +++ b/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -18,12 +25,6 @@ ЗаполнитьСписокКомандПечати(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Заголовок", НСтр("ru ='ОК'")); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -105,7 +106,7 @@ Процедура КомандыПечатиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Если Поле.Имя = Элементы.КомандыПечатиКомментарий.Имя И Не ПустаяСтрока(Элементы.КомандыПечати.ТекущиеДанные.НавигационнаяСсылка) Тогда - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(Элементы.КомандыПечати.ТекущиеДанные.НавигационнаяСсылка); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(Элементы.КомандыПечати.ТекущиеДанные.НавигационнаяСсылка); КонецЕсли; КонецПроцедуры @@ -272,7 +273,7 @@ КонецЕсли; КонецЦикла; - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылка); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылка); КонецПроцедуры &НаКлиенте @@ -282,7 +283,7 @@ КонецЕсли; ДополнительныеПараметры.Форма.Закрыть(); - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(ДополнительныеПараметры.НавигационнаяСсылка); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(ДополнительныеПараметры.НавигационнаяСсылка); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl index 445ceeaee..6d37875af 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -25,13 +33,6 @@ Запрос = ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(Параметры.ВидОбработок, Параметры.СсылкаРаздела, , ТипыКоманд, Ложь); ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); ИспользуемыеКоманды.Загрузить(ТаблицаРезультат); - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -68,7 +69,7 @@ Таблица.Колонки.Ссылка.Имя = "ДополнительныйОтчетИлиОбработка"; Таблица.Колонки.Идентификатор.Имя = "ИдентификаторКоманды"; Таблица.Колонки.Использование.Имя = "Доступно"; - ЗначенияИзмерений = Новый Структура("Пользователь", ПользователиКлиентСервер.АвторизованныйПользователь()); + ЗначенияИзмерений = Новый Структура("Пользователь", Пользователи.АвторизованныйПользователь()); ЗначенияРесурсов = Новый Структура; УстановитьПривилегированныйРежим(Истина); РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.ЗаписатьПакетНастроек(Таблица, ЗначенияИзмерений, ЗначенияРесурсов, Ложь); diff --git a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl index bd2ada028..48e9e286e 100644 --- a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -11,7 +18,7 @@ Если РаботаВМоделиСервиса.РазделениеВключено() И РаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Настройка подсистемы в разделенном режиме не поддерживается.'"),,,, Отказ); Возврат; КонецЕсли; diff --git a/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Module.bsl b/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Module.bsl index 2b82842e2..ffdc79370 100644 --- a/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОнлайнПоддержки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -21,9 +29,9 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если НЕ ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда ПоказатьПредупреждение(,НСтр("ru = 'Для работы с приложением необходима операционная система Microsoft Windows.'")); - Отказ = Истина; + Отказ = Истина; КонецЕсли; Если ПутьКФайлу="" Тогда ПутьКФайлу = ВызовОнлайнПоддержкиКлиент.ПутьКИсполняемомуФайлуИзРеестраWindows(); @@ -75,21 +83,21 @@ &НаКлиенте Процедура ПолучитьАккаунтВызовОнлайнПоддержки(Команда) - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://buhphone.com/clients/be-client/"); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://buhphone.com/clients/be-client/"); КонецПроцедуры &НаКлиенте Процедура ТехническиеТребования(Команда) - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://buhphone.com/require/#anchor_1"); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://buhphone.com/require/#anchor_1"); КонецПроцедуры &НаКлиенте Процедура СкачатьПриложение(Команда) - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://distribs.buhphone.com/current"); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://distribs.buhphone.com/current"); КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl b/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl index c17753d7f..67801fbd5 100644 --- a/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОтправкиSMS/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -62,7 +69,7 @@ АдресВИнтернете = ОписаниеУслуги.АдресВИнтернете; ОтправкаSMSКлиентПереопределяемый.ПриПолученииАдресаПровайдераВИнтернете(НаборКонстант.ПровайдерSMS, АдресВИнтернете); Если Не ПустаяСтрока(АдресВИнтернете) Тогда - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресВИнтернете); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(АдресВИнтернете); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form index 1f410076d..9abede32d 100644 --- a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Form.form @@ -109,7 +109,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true diff --git a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl index d76d98253..61a0c5208 100644 --- a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -7,13 +15,18 @@ Возврат; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если ОбщегоНазначения.ЭтоВебКлиент() Тогда Элементы.СейчасВЛокальномКэшеФайлов.Видимость = Ложь; Элементы.ОчиститьРабочийКаталог.Видимость = Ложь; КонецЕсли; ЗаполнитьПараметрыНаСервере(); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + Элементы.ОчиститьРабочийКаталог.Заголовок = НСтр("ru = 'Очистить'"); + Элементы.РабочийКаталогПользователя.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl b/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl index 0f244dc44..71e810a63 100644 --- a/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -53,12 +61,6 @@ ПолучитьМинимальнуюДлинуПаролейПользователей()); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Заголовок", НСтр("ru ='ОК'")); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -149,7 +151,7 @@ Процедура ЗаписатьНаСервере() Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.НастройкиВходаПользователей"); + Блокировка.Добавить("Константа.НастройкиВходаПользователей"); НачатьТранзакцию(); Попытка diff --git a/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl b/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl index b87797be9..c3e6bf758 100644 --- a/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl +++ b/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -51,16 +58,8 @@ Элементы.НаследоватьПраваРодителей.Видимость = РодительЗаполнен; - НастройкиПрав = РегистрыСведений.НастройкиПравОбъектов.Прочитать(Параметры.СсылкаНаОбъект); - ЗаполнитьПрава(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Заголовок", НСтр("ru ='ОК'")); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -718,7 +717,7 @@ КонецЕсли; КонецЦикла; Если НетЗаполненногоПрава Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не заполнено ни одно право доступа.'"), , "ГруппыПрав[" + Формат(НомерСтроки, "ЧГ=0") + "]." + ИмяПервогоПрава, @@ -732,7 +731,7 @@ // Проверка заполнения Если НЕ ЗначениеЗаполнено(ТекущаяСтрока["Пользователь"]) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не заполнен пользователь или группа.'"), , "ГруппыПрав[" + Формат(НомерСтроки, "ЧГ=0") + "].Пользователь", @@ -752,7 +751,7 @@ Иначе ТекстСообщения = НСтр("ru = 'Настройка для группы пользователей ""%1"" уже есть.'"); КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Отбор.Пользователь), , "ГруппыПрав[" + Формат(НомерСтроки, "ЧГ=0") + "].Пользователь", diff --git a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Module.bsl b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Module.bsl index 289d8f75c..0f19980d6 100644 --- a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Module.bsl +++ b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -14,12 +21,6 @@ ЗащитаПерсональныхДанных.ПриСозданииФормыНастройкиРегистрацииСобытий(ЭтотОбъект); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Заголовок", НСтр("ru ='ОК'")); - - КонецЕсли; - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html index 3695f709b..9d2e89738 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html @@ -10,7 +10,7 @@
    • Можно установить отбор только своих сертификатов в поле Показать. По умолчанию показываются все сертификаты.
    • Предусмотрен отбор по полю Состояние заявления ("Любое", "Не подготовлено", "Подготовлено", "Отправлено", "Отклонено", "Исполнено, сертификат не установлен", "Исполнено").
    • Сертификат можно Добавить из числа установленных на компьютере. Также это можно сделать в процессе подписания или шифрования данных. -
    • Также с помощью кнопки Добавить можно подготовить Заявление на выпуск нового сертификата. +
    • Также с помощью кнопки Добавить можно подготовить Заявление на выпуск нового сертификата.
    • Просмотреть сертификат или заявление на выпуск нового сертификата можно, дважды щелкнув по нему мышью. Также можно это сделать с помощью команды Изменить контекстного меню по правой кнопке мыши или меню Еще.

    Программы

    • Содержит список программ, которые будут использованы в информационной базе (в том числе во всех узлах распределенной ИБ).
    • Эти программы не обязательно должны быть установлены на всех компьютерах. Более того, установка более одной программы на одном компьютере может вызвать конфликты между ними. diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl index 4c866d818..b13a7f3aa 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -80,11 +88,10 @@ Элементы.СертификатыДобавить.Видимость = Ложь; Элементы.СертификатыПоказатьЗаявления.Видимость = Ложь; - Элементы.СертификатыСостояниеЗаявления.Видимость = Ложь; Элементы.Инструкция.Видимость = Ложь; КонецЕсли; - СертификатыОбновитьОтбор(ЭтотОбъект); + СертификатыОбновитьОтбор(ЭтотОбъект, Пользователи.ТекущийПользователь()); Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда // Состав и настройки предусмотренных программ нельзя изменять. @@ -96,12 +103,12 @@ "ПрограммыИзменить", "ТолькоВоВсехДействиях", Ложь); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если ОбщегоНазначения.ЭтоWindowsКлиент() Тогда Элементы.ГруппаПрограммыLinuxПутьКПрограмме.Видимость = Ложь; КонецЕсли; Элементы.ГруппаВебКлиентРасширениеНеУстановлено.Видимость = - ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() + ОбщегоНазначения.ЭтоВебКлиент() И Параметры.Свойство("РасширениеНеПодключено"); ЗаполнитьПрограммыИНастройки(); @@ -178,14 +185,14 @@ &НаКлиенте Процедура СертификатыПоказатьПриИзменении(Элемент) - СертификатыОбновитьОтбор(ЭтотОбъект); + СертификатыОбновитьОтбор(ЭтотОбъект, ПользователиКлиент.ТекущийПользователь()); КонецПроцедуры &НаКлиенте Процедура СертификатыПоказатьЗаявленияПриИзменении(Элемент) - СертификатыОбновитьОтбор(ЭтотОбъект); + СертификатыОбновитьОтбор(ЭтотОбъект, ПользователиКлиент.ТекущийПользователь()); КонецПроцедуры @@ -445,7 +452,7 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура СертификатыОбновитьОтбор(Форма) +Процедура СертификатыОбновитьОтбор(Форма, ТекущийПользователь) Элементы = Форма.Элементы; @@ -453,7 +460,7 @@ ПоказатьСвои = Форма.СертификатыПоказать <> "ВсеСертификаты"; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Форма.Сертификаты, "Пользователь", ПользователиКлиентСервер.ТекущийПользователь(),,, ПоказатьСвои); + Форма.Сертификаты, "Пользователь", ТекущийПользователь,,, ПоказатьСвои); Элементы.СертификатыПользователь.Видимость = Не ПоказатьСвои; @@ -714,7 +721,7 @@ ПараметрыВыполнения.Вставить("ПоказатьОшибку", Неопределено); ПараметрыВыполнения.Вставить("СвойстваОшибки", Новый Структура("Ошибки", Новый Массив)); ПараметрыВыполнения.Вставить("ИнтерактивныйРежим", Ложь); - ПараметрыВыполнения.Вставить("ЭтоLinux", Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент()); + ПараметрыВыполнения.Вставить("ЭтоLinux", Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент()); ПараметрыВыполнения.Вставить("Менеджер", Неопределено); ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения( "ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклПродолжение", ЭтотОбъект, Контекст)); diff --git a/SSL/src/CommonForms/НовыйПароль/Module.bsl b/SSL/src/CommonForms/НовыйПароль/Module.bsl index 60c81ee2a..2f4d93004 100644 --- a/SSL/src/CommonForms/НовыйПароль/Module.bsl +++ b/SSL/src/CommonForms/НовыйПароль/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -24,6 +31,10 @@ НовыйПароль = ПользователиСлужебный.СоздатьПароль(ПараметрыПароля); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ФормаЗакрыть.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form index 2dce931c5..12328efe5 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form +++ b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Form.form @@ -177,308 +177,6 @@ Auto - - КоманднаяПанельСписка - 13 - - Найти - 14 - - <key>ru</key> - <value>Найти...</value> - - true - true - - true - - - НайтиExtendedTooltip - 32 - Label - true - true - - Left - - - Form.Item.ОписаниеОбновлений.StandardCommand.Find - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - РазвернутьВсеГруппы - 21 - true - true - - true - - - РазвернутьВсеГруппыExtendedTooltip - 35 - Label - true - true - - Left - - - Form.Item.ОписаниеОбновлений.StandardCommand.ExpandAllGroups - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ОписаниеОбновленийСвернутьВсеГруппы - 45 - true - true - - true - - - ОписаниеОбновленийСвернутьВсеГруппыРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - Form.Item.ОписаниеОбновлений.StandardCommand.CollapseAllGroups - Normal - Auto - true - true - UserCmds - Auto - - - ОписаниеОбновленийГруппа - 51 - - Сохранить - 7 - - <key>ru</key> - <value>Сохранить как...</value> - - true - true - - true - - - СохранитьExtendedTooltip - 34 - Label - true - true - - Left - - - Form.Item.ОписаниеОбновлений.StandardCommand.Save - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - Печать - 15 - true - true - - true - - - ПечатьExtendedTooltip - 36 - Label - true - true - - Left - - - Form.Item.ОписаниеОбновлений.StandardCommand.Print - Normal - PictureAndText - true - true - UserCmds - - StdPicture.Print - - Auto - InCommandBarAndInAdditionalSubmenu - - - ОписаниеОбновленийПредварительныйПросмотр - 47 - true - true - - true - - - ОписаниеОбновленийПредварительныйПросмотрРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - Form.Item.ОписаниеОбновлений.StandardCommand.Preview - Normal - Auto - true - true - UserCmds - Auto - - - ОписаниеОбновленийПараметрыСтраницы - 49 - true - true - - true - - - ОписаниеОбновленийПараметрыСтраницыРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - Form.Item.ОписаниеОбновлений.StandardCommand.PageSetup - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Описание обновлений группа</value> - - - ОписаниеОбновленийГруппаРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - - - - ИзменитьФорму - 19 - true - true - - true - - - ИзменитьФормуExtendedTooltip - 33 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - - Справка - 4 - true - true - - true - - false - - СправкаExtendedTooltip - 37 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель списка</value> - - - КоманднаяПанельСпискаExtendedTooltip - 31 - Label - true - true - - Left - - - CommandBar - - Left - Item.ОписаниеОбновлений - - ОписаниеОбновлений 1 @@ -583,7 +281,7 @@ 8 <key>ru</key> - <value>Техническая информация о результатах обновления</value> + <value>Техническая информация об обновлении</value> true true @@ -736,12 +434,286 @@ Auto - None - false + Top + true ФормаКоманднаяПанель -1 - Right + + Найти + 14 + + <key>ru</key> + <value>Найти...</value> + + true + true + + true + + + НайтиExtendedTooltip + 32 + Label + true + true + + Left + + + Form.Item.ОписаниеОбновлений.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + РазвернутьВсеГруппы + 21 + true + true + + true + + + РазвернутьВсеГруппыExtendedTooltip + 35 + Label + true + true + + Left + + + Form.Item.ОписаниеОбновлений.StandardCommand.ExpandAllGroups + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ОписаниеОбновленийСвернутьВсеГруппы + 45 + true + true + + true + + + ОписаниеОбновленийСвернутьВсеГруппыРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Form.Item.ОписаниеОбновлений.StandardCommand.CollapseAllGroups + Normal + Auto + true + true + UserCmds + Auto + + + ОписаниеОбновленийГруппа + 51 + + Сохранить + 7 + + <key>ru</key> + <value>Сохранить как...</value> + + true + true + + true + + + СохранитьExtendedTooltip + 34 + Label + true + true + + Left + + + Form.Item.ОписаниеОбновлений.StandardCommand.Save + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Печать + 15 + true + true + + true + + + ПечатьExtendedTooltip + 36 + Label + true + true + + Left + + + Form.Item.ОписаниеОбновлений.StandardCommand.Print + Normal + Auto + true + true + UserCmds + + StdPicture.Print + + Auto + InCommandBarAndInAdditionalSubmenu + + + ОписаниеОбновленийПредварительныйПросмотр + 47 + true + true + + true + + + ОписаниеОбновленийПредварительныйПросмотрРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Item.ОписаниеОбновлений.StandardCommand.Preview + Normal + Auto + true + true + UserCmds + Auto + + + ОписаниеОбновленийПараметрыСтраницы + 49 + true + true + + true + + + ОписаниеОбновленийПараметрыСтраницыРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Item.ОписаниеОбновлений.StandardCommand.PageSetup + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Описание обновлений группа</value> + + + ОписаниеОбновленийГруппаРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + + + Справка + 4 + true + true + + true + + false + + СправкаExtendedTooltip + 37 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + + ИзменитьФорму + 19 + true + true + + true + + + ИзменитьФормуExtendedTooltip + 33 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + Left OnOpen diff --git a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl index fccea2d0c..131533566 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl +++ b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -116,6 +124,10 @@ ОбновлениеИнформационнойБазыСлужебный.УстановитьФлагОтображенияОписанийПоТекущуюВерсию(); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.КоманднаяПанельФормы.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -133,7 +145,7 @@ Процедура ОписаниеОбновленийВыбор(Элемент, Область, СтандартнаяОбработка) Если СтрНайти(Область.Текст, "http://") = 1 Или СтрНайти(Область.Текст, "https://") = 1 Тогда - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(Область.Текст); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(Область.Текст); КонецЕсли; ОбновлениеИнформационнойБазыКлиентПереопределяемый.ПриНажатииНаГиперссылкуВДокументеОписанияОбновлений(Область); diff --git a/SSL/src/CommonForms/ОтправкаSMS/Module.bsl b/SSL/src/CommonForms/ОтправкаSMS/Module.bsl index e53830c21..8b533be51 100644 --- a/SSL/src/CommonForms/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаSMS/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -10,45 +17,27 @@ СтатусОтправки = НСтр("ru = 'Сообщение отправляется...'"); ТекстСообщения = Параметры.Текст; + + НомераТелефонов = Новый Массив; Если ТипЗнч(Параметры.НомераПолучателей) = Тип("Массив") Тогда - Разделитель = ""; - Для каждого НомерТелефона Из Параметры.НомераПолучателей Цикл - НомераПолучателей = НомераПолучателей + Разделитель + НомерТелефона; - Разделитель = ","; + Для каждого ИнформацияОТелефоне Из Параметры.НомераПолучателей Цикл + НомераТелефонов.Добавить(ИнформацияОТелефоне.Телефон); КонецЦикла; ИначеЕсли ТипЗнч(Параметры.НомераПолучателей) = Тип("СписокЗначений") Тогда - Разделитель = ""; - Для каждого ИнформацияОТелефоне Из Параметры.НомераПолучателей Цикл - НомераПолучателей = НомераПолучателей + Разделитель + ИнформацияОТелефоне.Значение; - Разделитель = ","; + Для каждого ИнформацияОТелефоне Из Параметры.НомераПолучателей Цикл + НомераТелефонов.Добавить(ИнформацияОТелефоне.Значение); КонецЦикла; Иначе - НомераПолучателей = Строка(Параметры.НомераПолучателей); + НомераТелефонов.Добавить(Строка(Параметры.НомераПолучателей)); КонецЕсли; - Если ПустаяСтрока(НомераПолучателей) Тогда + Если НомераТелефонов.Количество() = 0 Тогда Элементы.ГруппаНомерПолучателя.Видимость = Истина; КонецЕсли; - Заголовок = НСтр("ru = 'Отправка SMS на телефон'") + " " + НомераПолучателей; - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Элементы.Переместить(Элементы.НастройкаОтправкиSMSОткрыть, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.Отправить, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.Закрыть, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.Справка, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НастройкаОтправкиSMSОткрыть", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Справка", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отправить", "ТолькоВоВсехДействиях", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отправить", "Заголовок", НСтр("ru ='Отправить'")); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Закрыть", "ТолькоВоВсехДействиях", Ложь); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаКоманднаяПанель", "Видимость", Ложь); - - КонецЕсли; + НомераПолучателей = " " + СтрСоединить(НомераТелефонов, ", "); + Заголовок = НСтр("ru = 'Отправка SMS на телефон'") + НомераПолучателей; КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Form.form b/SSL/src/CommonForms/ОтправкаСообщения/Form.form index ea54d4327..1a61a022b 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Form.form +++ b/SSL/src/CommonForms/ОтправкаСообщения/Form.form @@ -66,9 +66,11 @@ ОсновнаяГруппаТелаПисьма 10 + VeryHigh ПочтовыеАдресаПолучателей 87 + VeryHigh <key>ru</key> <value>Почтовый адреса получателей</value> @@ -113,9 +115,10 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> - <width>1</width> + <width>12</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>false</horizontalStretch> <wrap>true</wrap> <autoChoiceIncomplete>true</autoChoiceIncomplete> <listChoiceMode>true</listChoiceMode> @@ -187,6 +190,7 @@ <event>AutoComplete</event> <name>ПочтовыйАдресПолучателейПредставлениеАвтоПодбор</name> </handlers> + <width>40</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> @@ -849,6 +853,66 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>АдресОтвета</name> + <id>47</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>АдресОтвета</segments> + </dataPath> + <toolTip> + <key>ru</key> + <value>Введите адрес электронной почты на который вы хотите получить ответ на это письмо</value> + </toolTip> + <handlers> + <event>OnChange</event> + <name>УстановитьПризнакМодифицированностиФормы</name> + </handlers> + <extendedTooltip> + <name>АдресОтветаExtendedTooltip</name> + <id>66</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>АдресОтветаКонтекстноеМеню</name> + <id>48</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>Clearing</event> + <name>АдресОтветаОчистка</name> + </handlers> + <handlers> + <event>TextEditEnd</event> + <name>АдресОтветаОкончаниеВводаТекста</name> + </handlers> + <handlers> + <event>ChoiceProcessing</event> + <name>АдресОтветаОбработкаВыбора</name> + </handlers> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -878,66 +942,6 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>АдресОтвета</name> - <id>47</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>АдресОтвета</segments> - </dataPath> - <toolTip> - <key>ru</key> - <value>Введите адрес электронной почты на который вы хотите получить ответ на это письмо</value> - </toolTip> - <handlers> - <event>OnChange</event> - <name>УстановитьПризнакМодифицированностиФормы</name> - </handlers> - <extendedTooltip> - <name>АдресОтветаExtendedTooltip</name> - <id>66</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>АдресОтветаКонтекстноеМеню</name> - <id>48</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>Clearing</event> - <name>АдресОтветаОчистка</name> - </handlers> - <handlers> - <event>TextEditEnd</event> - <name>АдресОтветаОкончаниеВводаТекста</name> - </handlers> - <handlers> - <event>ChoiceProcessing</event> - <name>АдресОтветаОбработкаВыбора</name> - </handlers> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <chooseType>true</chooseType> - <typeDomainEnabled>true</typeDomainEnabled> - <textEdit>true</textEdit> - <textSize>Normal</textSize> - </extInfo> - </items> <commandBarLocation>Top</commandBarLocation> <showCommandBar>true</showCommandBar> <autoCommandBar> diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl index 48c5ad11e..d610cbc86 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -33,7 +41,7 @@ ДоступныеУчетныеЗаписи = РаботаСПочтовымиСообщениями.ДоступныеУчетныеЗаписи(Истина); Если ДоступныеУчетныеЗаписи.Количество() = 0 Тогда ТекстСообщения = НСтр("ru = 'Не обнаружены доступные учетные записи электронной почты, обратитесь к администратору системы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,,,Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,,,,Отказ); Возврат; КонецЕсли; @@ -46,7 +54,7 @@ Если НаборУчетныхЗаписей.Количество() = 0 Тогда ТекстСообщения = НСтр("ru = 'Не указаны учетные записи для отправки сообщения, обратитесь к администратору системы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,,,, Отказ); Возврат; КонецЕсли; @@ -163,6 +171,12 @@ // Конец СтандартныеПодсистемы.ШаблоныСообщений + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Вложение2.Видимость = Ложь; + Элементы.ОсновнаяГруппаТелаПисьма.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.ТемаПисьма.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -337,6 +351,7 @@ &НаКлиенте Процедура ВложенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; ОткрытьВложение(); КонецПроцедуры @@ -377,7 +392,7 @@ Процедура АдресОтветаОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - АктуализироватьАдресОтветаВХранимомСписке(АдресОтвета, Ложь); + СохранитьАдресОтвета(АдресОтвета, Ложь); Для Каждого ЭлементаАдресОтвета Из Элементы.АдресОтвета.СписокВыбора Цикл Если ЭлементаАдресОтвета.Значение = АдресОтвета @@ -421,18 +436,18 @@ Результат = Истина; Если ПочтовыеАдресаПолучателей.Количество() = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Необходимо заполнить получателя письма'"), , "ПочтовыеАдресаПолучателей"); Результат = Ложь; КонецЕсли; Для каждого ПолучательПочты Из ПочтовыеАдресаПолучателей Цикл Адрес = ПочтовыйАдресИзПредставления(ПолучательПочты.Представление); Если ПустаяСтрока(Адрес) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Необходимо заполнить получателя письма'"),, "ПочтовыеАдресаПолучателей[" + Формат(ПочтовыеАдресаПолучателей.Индекс(ПолучательПочты), "ЧГ=0") + "].Представление"); Результат = Ложь; ИначеЕсли СтрНайти(Адрес, "@") = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Неверный адрес электронной почты'"),, "ПочтовыеАдресаПолучателей[" + Формат(ПочтовыеАдресаПолучателей.Индекс(ПолучательПочты), "ЧГ=0") + "].Представление"); Результат = Ложь; КонецЕсли; @@ -518,7 +533,7 @@ ПараметрыОткрытия.Вставить("ПутьКФайлу", ИмяВременногоФайла); ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия, ЭтотОбъект); Иначе - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ИмяВременногоФайла); + ФайловаяСистемаКлиент.ОткрытьФайл(ИмяВременногоФайла); КонецЕсли; #КонецЕсли @@ -559,7 +574,7 @@ Попытка УдалитьФайлы(ИмяФайла); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение табличного документа'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение табличного документа'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -569,11 +584,13 @@ &НаКлиенте Процедура ДобавитьФайлВоВложения() - ПараметрыДиалога = Новый Структура; - ПараметрыДиалога.Вставить("Режим", РежимДиалогаВыбораФайла.Открытие); - ПараметрыДиалога.Вставить("МножественныйВыбор", Истина); + ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьФайлВоВложенияПриПомещенииФайлов", ЭтотОбъект); - СтандартныеПодсистемыКлиент.ПоказатьПомещениеФайла(ОписаниеОповещения, УникальныйИдентификатор, "", ПараметрыДиалога); + + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + ФайловаяСистемаКлиент.ЗагрузитьФайлы(ОписаниеОповещения, ПараметрыЗагрузки); + КонецПроцедуры &НаКлиенте @@ -612,9 +629,11 @@ СтрокаПредставления["Вложение" + Строка(Индекс + 1)] = Вложение.Представление; - Индекс = Индекс + 1; - Если Индекс = 2 Тогда - Индекс = 0; + Если Элементы.Вложение2.Видимость Тогда // Для мобильного клиента. + Индекс = Индекс + 1; + Если Индекс = 2 Тогда + Индекс = 0; + КонецЕсли; КонецЕсли; КонецЦикла; @@ -658,7 +677,7 @@ Кому = Новый Массив; Для Каждого Получатель Из СписокПолучателей Цикл Если Не ПустаяСтрока(Получатель.ОписаниеОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( Получатель.ОписаниеОшибки, , "АдресОтвета"); Возврат Неопределено; КонецЕсли; @@ -746,20 +765,8 @@ КонецПроцедуры -// Добавляет адрес ответа в список сохраняемых значений. -// &НаСервереБезКонтекста -Функция СохранитьАдресОтвета(Знач АдресОтвета) - - АктуализироватьАдресОтветаВХранимомСписке(АдресОтвета); - -КонецФункции - -// Добавляет адрес ответа в список сохраняемых значений. -// -&НаСервереБезКонтекста -Функция АктуализироватьАдресОтветаВХранимомСписке(Знач АдресОтвета, - Знач ДобавлятьАдресВСписок = Истина) +Процедура СохранитьАдресОтвета(Знач АдресОтвета, Знач ДобавлятьАдресВСписок = Истина) // Получаем список адресов, которые пользователь использовал ранее. СписокАдресовОтвета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( @@ -787,7 +794,7 @@ "СписокАдресовОтвета", СписокАдресовОтвета); -КонецФункции +КонецПроцедуры &НаКлиенте Функция ПолучитьПриведенныйПочтовыйАдресВФормате(Текст) @@ -795,15 +802,14 @@ Адреса = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(Текст); Если Адреса.Количество() > 1 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Можно указывать только один адрес для ответа.'"), , "АдресОтвета"); - СтандартнаяОбработка = Ложь; Возврат Текст; КонецЕсли; Для Каждого ОписаниеАдреса Из Адреса Цикл Если Не ПустаяСтрока(ОписаниеАдреса.ОписаниеОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеАдреса.ОписаниеОшибки, , "АдресОтвета"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ОписаниеАдреса.ОписаниеОшибки, , "АдресОтвета"); КонецЕсли; Если Не ПустаяСтрока(АдресаСтрокой) Тогда diff --git a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form deleted file mode 100644 index c23c4475c..000000000 --- a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form +++ /dev/null @@ -1,482 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <title> - <key>ru</key> - <value>Отправка по почте</value> - - - ФорматыСохранения - 32 - - <key>ru</key> - <value>Форматы сохранения</value> - - true - true - - true - - - ФорматыСохранения - - Top - Add - Change - Copy - Delete - EndEdit - MoveDown - MoveUp - Pickup - SelectAll - SortListAsc - SortListDesc - - ФорматыСохраненияПометка - 37 - true - true - - true - - - ФорматыСохранения.Check - - - ФорматыСохраненияПометкаExtendedTooltip - 45 - Label - true - true - - Left - - - - ФорматыСохраненияПометкаКонтекстноеМеню - 38 - true - - CheckBoxField - Auto - true - Left - true - - - - ФорматыСохраненияЗначение - 35 - true - true - - true - - - ФорматыСохранения.Value - - - ФорматыСохраненияЗначениеExtendedTooltip - 46 - Label - true - true - - Left - - - - ФорматыСохраненияЗначениеКонтекстноеМеню - 36 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ФорматыСохраненияКоманднаяПанель - 34 - Left - - - ФорматыСохраненияSearchString - 48 - - ФорматыСохраненияSearchStringExtendedTooltip - 50 - Label - true - true - - Left - - - - ФорматыСохраненияSearchStringContextMenu - 49 - true - - ФорматыСохранения - - true - - - - ФорматыСохраненияViewStatus - 51 - - ФорматыСохраненияViewStatusExtendedTooltip - 53 - Label - true - true - - Left - - - - ФорматыСохраненияViewStatusContextMenu - 52 - true - - ViewStatusAddition - ФорматыСохранения - - true - - - - ФорматыСохраненияSearchControl - 54 - - ФорматыСохраненияSearchControlExtendedTooltip - 56 - Label - true - true - - Left - - - - ФорматыСохраненияSearchControlContextMenu - 55 - true - - SearchControlAddition - ФорматыСохранения - - true - - - - ФорматыСохраненияExtendedTooltip - 44 - Label - true - true - - Left - - - - ФорматыСохраненияКонтекстноеМеню - 33 - true - - true - 10 - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - true - Auto - Auto - true - true - - ФорматыСохранения.Picture - - true - - - УпаковатьВАрхив - 40 - - <key>ru</key> - <value>Дополнительно упаковать в архив (.zip)</value> - - true - true - - true - - - УпаковатьВАрхив - - Right - - УпаковатьВАрхивExtendedTooltip - 47 - Label - true - true - - Left - - - - УпаковатьВАрхивКонтекстноеМеню - 41 - true - - CheckBoxField - Enter - true - Left - true - - - Bottom - true - - ФормаКоманднаяПанель - -1 - - КнопкаПрикрепить - 29 - true - true - - true - - false - - КнопкаПрикрепитьExtendedTooltip - 42 - Label - true - true - - Left - - - Form.Command.Прикрепить - Auto - true - true - true - UserCmds - Auto - - - КнопкаОтмена - 30 - true - - true - - - КнопкаОтменаExtendedTooltip - 43 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - - Right - true - - - OnCreateAtServer - ПриСозданииНаСервере - - - BeforeLoadDataFromSettingsAtServer - ПередЗагрузкойДанныхИзНастроекНаСервере - - Abort - Close - CustomizeForm - Ignore - No - OK - RestoreValues - Retry - SaveValues - Yes - LockOwner - Use - UseList - true - true - Vertical - true - true - true - auto - true - - ФорматыСохранения - - <key>ru</key> - <value>Форматы</value> - - 3 - - ValueList - - - true - - - true - - - ФорматыСохранения - - - - - - - УпаковатьВАрхив - - <key>ru</key> - <value>Упаковать в архив (.zip)</value> - - 5 - - Boolean - - - true - - - true - - - УпаковатьВАрхив - - - - ТаблицаФорматов - - <key>ru</key> - <value>Таблица форматов</value> - - 1 - - ValueTable - - - true - - - true - - - - ТабличныеДокументы - - <key>ru</key> - <value>Табличные документы</value> - - 2 - - ValueList - - - true - - - true - - - - SpreadsheetDocument - - - - - Тема - - <key>ru</key> - <value>Тема</value> - - 4 - - String - - - - true - - - true - - - - Прикрепить - - <key>ru</key> - <value>Продолжить</value> - - 1 - - ru - Прикрепить - - - true - - - - Прикрепить - - - DontUse - Auto - - - ТабличныеДокументы - - ValueList - - - - - - - diff --git a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Help/ru.html b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Help/ru.html deleted file mode 100644 index 1cb137b80..000000000 --- a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Help/ru.html +++ /dev/null @@ -1,6 +0,0 @@ - -

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

      -

      Отправка по почте

      -
      • Отметьте флажками один или несколько форматов. -
      • Для уменьшения размера вложений включите флажок Дополнительно упаковать в архив (.zip). -
      • Нажмите Продолжить для перехода к дальнейшему оформлению электронного письма, к которому были прикреплены выбранные форматы документа.
      \ No newline at end of file diff --git a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl deleted file mode 100644 index 5c3ae6e03..000000000 --- a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl +++ /dev/null @@ -1,250 +0,0 @@ -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Если Параметры.Свойство("Заголовок") Тогда - АвтоЗаголовок = Ложь; - Заголовок = Параметры.Заголовок; - КонецЕсли; - - Параметры.Свойство("ТабличныеДокументы", ТабличныеДокументы); - Параметры.Свойство("Тема", Тема); - - // Приведение имен файлов: уникальность + замена недопустимых символов. - ИспользованныеИменаДокументов = Новый Массив; - Для Каждого ЭлементСписка Из ТабличныеДокументы Цикл - Представление = СокрЛП(ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ЭлементСписка.Представление)); - Номер = 0; - Пока ИспользованныеИменаДокументов.Найти(ПредставлениеСНомером(Представление, Номер)) <> Неопределено Цикл - Номер = Номер + 1; - КонецЦикла; - ЭлементСписка.Представление = ПредставлениеСНомером(Представление, Номер); - ИспользованныеИменаДокументов.Добавить(ЭлементСписка.Представление); - КонецЦикла; - - ЗаполнитьТаблицуФорматов(); - - Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл - ФорматыСохранения.Добавить(ФорматСохранения.ТипФайлаТабличногоДокумента, ФорматСохранения.Представление, Ложь, ФорматСохранения.Картинка); - КонецЦикла; - ФорматыСохранения[0].Пометка = Истина; - -КонецПроцедуры - -&НаСервере -Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) - ФорматыСохраненияИзНастроек = Настройки["ФорматыСохранения"]; - Если ФорматыСохраненияИзНастроек <> Неопределено Тогда - Для Каждого ВыбранныйФормат Из ФорматыСохранения Цикл - ФорматИзНастроек = ФорматыСохраненияИзНастроек.НайтиПоЗначению(ВыбранныйФормат.Значение); - Если ФорматИзНастроек <> Неопределено Тогда - ВыбранныйФормат.Пометка = ФорматИзНастроек.Пометка; - КонецЕсли; - КонецЦикла; - Настройки.Удалить("ФорматыСохранения"); - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура Прикрепить(Команда) - ОтмеченныеФорматы = Новый Массив; - Для Каждого ВыбранныйФормат Из ФорматыСохранения Цикл - Если ВыбранныйФормат.Пометка Тогда - ОтмеченныеФорматы.Добавить(ВыбранныйФормат.Значение); - КонецЕсли; - КонецЦикла; - - Если ОтмеченныеФорматы.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Необходимо указать как минимум один из предложенных форматов.'")); - Возврат; - КонецЕсли; - - СохраненныеДокументы = ПоместитьТабличныеДокументыВоВременноеХранилище(ОтмеченныеФорматы); - ОповеститьОВыборе(СохраненныеДокументы); -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаСервере -Процедура ЗаполнитьТаблицуФорматов() - - ДобавляемыеРеквизиты = Новый Массив; - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ТипФайлаТабличногоДокумента", Новый ОписаниеТипов(), "ТаблицаФорматов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Ссылка", Новый ОписаниеТипов(), "ТаблицаФорматов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов(), "ТаблицаФорматов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Расширение", Новый ОписаниеТипов(), "ТаблицаФорматов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Картинка", Новый ОписаниеТипов(), "ТаблицаФорматов")); - ИзменитьРеквизиты(ДобавляемыеРеквизиты, Новый Массив); - - // Документ PDF (.pdf) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.PDF; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.PDF; - НовыйФормат.Расширение = "pdf"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматPDF; - - // Лист Microsoft Excel 2007 (.xlsx) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLSX; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLSX; - НовыйФормат.Расширение = "xlsx"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel2007; - - // Лист Microsoft Excel 97-2003 (.xls) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLS; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLS; - НовыйФормат.Расширение = "xls"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel; - - // Электронная таблица OpenDocument (.ods). - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ODS; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ODS; - НовыйФормат.Расширение = "ods"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматOpenOfficeCalc; - - // Табличный документ (.mxl) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.MXL; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.MXL; - НовыйФормат.Расширение = "mxl"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматMXL; - - // Документ Word 2007 (.docx) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.DOCX; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.DOCX; - НовыйФормат.Расширение = "docx"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматWord2007; - - // Веб-страница (.html) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.HTML; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.HTML; - НовыйФормат.Расширение = "html"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматHTML; - - // Текстовый документ UTF-8 (.txt). - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.TXT; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.TXT; - НовыйФормат.Расширение = "txt"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; - - // Текстовый документ ANSI (.txt). - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ANSITXT; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ANSITXT; - НовыйФормат.Расширение = "txt"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; - - // Дополнительные форматы / изменение списка текущих. - Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл - ФорматСохранения.Представление = Строка(ФорматСохранения.Ссылка); - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция ПредставлениеСНомером(Представление, Номер) - Возврат Представление + ?(Номер = 0, "", " " + Формат(Номер, "ЧГ=")); -КонецФункции - -&НаСервере -Функция ПоместитьТабличныеДокументыВоВременноеХранилище(ОтмеченныеФорматы) - Результат = Новый СписокЗначений; - - // Архив - Если УпаковатьВАрхив Тогда - ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); - ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива); - КонецЕсли; - - // Каталог временных файлов - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяВременнойПапки); - ПолныйПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки); - - // Сохранение табличных документов. - Для Каждого ТабличныйДокумент Из ТабличныеДокументы Цикл - - Если ТабличныйДокумент.Значение.Вывод = ИспользованиеВывода.Запретить Тогда - Продолжить; - КонецЕсли; - - Для Каждого ТипФайла Из ОтмеченныеФорматы Цикл - ПараметрыФормата = ТаблицаФорматов.НайтиСтроки(Новый Структура("ТипФайлаТабличногоДокумента", ТипФайла))[0]; - - ИмяФайла = ТабличныйДокумент.Представление + "." + ПараметрыФормата.Расширение; - ПолноеИмяФайла = ПолныйПутьКФайлу + ИмяФайла; - - ТабличныйДокумент.Значение.Записать(ПолноеИмяФайла, ТипФайла); - - Если ТипФайла = ТипФайлаТабличногоДокумента.HTML Тогда - ВставитьКартинкиВHTML(ПолноеИмяФайла); - КонецЕсли; - - Если УпаковатьВАрхив Тогда - ЗаписьZipФайла.Добавить(ПолноеИмяФайла); - Иначе - Результат.Добавить(ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайла), УникальныйИдентификатор), ИмяФайла); - КонецЕсли; - КонецЦикла; - - КонецЦикла; - - // Если архив подготовлен, записываем и помещаем его во временное хранилище. - Если УпаковатьВАрхив Тогда - ЗаписьZipФайла.Записать(); - - ФайлАрхива = Новый Файл(ИмяАрхива); - Результат.Добавить(ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяАрхива), УникальныйИдентификатор), ФайлАрхива.Имя); - - УдалитьФайлы(ИмяАрхива); - КонецЕсли; - - УдалитьФайлы(ИмяВременнойПапки); - - Возврат Результат; - -КонецФункции - -&НаСервереБезКонтекста -Процедура ВставитьКартинкиВHTML(ИмяФайлаHTML) - - ТекстовыйДокумент = Новый ТекстовыйДокумент(); - ТекстовыйДокумент.Прочитать(ИмяФайлаHTML, КодировкаТекста.UTF8); - ТекстHTML = ТекстовыйДокумент.ПолучитьТекст(); - - ФайлHTML = Новый Файл(ИмяФайлаHTML); - - ИмяПапкиКартинок = ФайлHTML.ИмяБезРасширения + "_files"; - ПутьКПапкеКартинок = СтрЗаменить(ФайлHTML.ПолноеИмя, ФайлHTML.Имя, ИмяПапкиКартинок); - - // Ожидается, что в папке будут только картинки. - ФайлыКартинок = НайтиФайлы(ПутьКПапкеКартинок, "*"); - - Для Каждого ФайлКартинки Из ФайлыКартинок Цикл - КартинкаТекстом = Base64Строка(Новый ДвоичныеДанные(ФайлКартинки.ПолноеИмя)); - КартинкаТекстом = "data:image/" + Сред(ФайлКартинки.Расширение,2) + ";base64," + Символы.ПС + КартинкаТекстом; - - ТекстHTML = СтрЗаменить(ТекстHTML, ИмяПапкиКартинок + "\" + ФайлКартинки.Имя, КартинкаТекстом); - КонецЦикла; - - ТекстовыйДокумент.УстановитьТекст(ТекстHTML); - ТекстовыйДокумент.Записать(ИмяФайлаHTML, КодировкаТекста.UTF8); - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/ОтправкаТабличныхДокументовПоПочте.mdo b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/ОтправкаТабличныхДокументовПоПочте.mdo deleted file mode 100644 index 10c55251c..000000000 --- a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/ОтправкаТабличныхДокументовПоПочте.mdo +++ /dev/null @@ -1,15 +0,0 @@ - - - ОтправкаТабличныхДокументовПоПочте - - ru - Отправка табличных документов по почте - - - - ru - - - PersonalComputer - MobileDevice - diff --git a/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl b/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl index fc872d44e..3546d98cb 100644 --- a/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl +++ b/SSL/src/CommonForms/ОтчетОСохраненииФайловЭлектронныхПодписей/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -21,7 +29,7 @@ &НаКлиенте Процедура ОткрытьПапкуСФайлами(Команда) - ОбщегоНазначенияКлиент.ОткрытьПроводник(ПапкаСФайлами); + ФайловаяСистемаКлиент.ОткрытьПроводник(ПапкаСФайлами); КонецПроцедуры diff --git a/SSL/src/CommonForms/ПанельОтчетов/Form.form b/SSL/src/CommonForms/ПанельОтчетов/Form.form index 5a4435a67..3dc2cdc1d 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Form.form +++ b/SSL/src/CommonForms/ПанельОтчетов/Form.form @@ -1,7 +1,7 @@ - ВерхняяПанельСтрока1 + ВерхняяПанель 395 СтрокаПоиска @@ -86,44 +86,6 @@ UserCmds Auto - - ИскатьВоВсехРазделах - 402 - true - true - - true - - - ИскатьВоВсехРазделах - - Right - - OnChange - ИскатьВоВсехРазделахПриИзменении - - - ИскатьВоВсехРазделахРасширеннаяПодсказка - 404 - Label - true - true - - Left - - - - ИскатьВоВсехРазделахКонтекстноеМеню - 403 - true - - CheckBoxField - Enter - true - Left - true - - ГруппаКоманднаяПанельПравая 405 @@ -419,10 +381,10 @@ <key>ru</key> - <value>Верхняя панель строка 1</value> + <value>Верхняя панель</value> - ВерхняяПанельСтрока1РасширеннаяПодсказка + ВерхняяПанельРасширеннаяПодсказка 396 Label true @@ -442,768 +404,8 @@ - Колонки - 3 - - БыстрыйДоступШапка - 375 - - БыстрыйДоступШапкаКартинка - 377 - true - true - - true - - - БыстрыйДоступШапкаКартинкаРасширеннаяПодсказка - 379 - Label - true - true - - Left - - - - БыстрыйДоступШапкаКартинкаКонтекстноеМеню - 378 - true - - true - true - - - CommonPicture.БыстрыйДоступ - - - - - БыстрыйДоступШапкаНадпись - 380 - - <key>ru</key> - <value>Быстрый доступ</value> - - true - true - - true - - Button - - БыстрыйДоступШапкаНадписьРасширеннаяПодсказка - 382 - - <key>ru</key> - <value>Для перемещения отчета в эту группу нажмите на отчете правой кнопкой мыши и выберите "Переместить в быстрый доступ". -В быстрый доступ следует перемещать отчеты, которые используются постоянно. -Отчеты, перемещенные в быстрый доступ, будут отображаться вверху панели отчетов, выше всех остальных отчетов. -Это персональная настройка, у каждого пользователя свой быстрый доступ.</value> - - Label - true - true - - Left - - - - БыстрыйДоступШапкаНадписьКонтекстноеМеню - 381 - true - - Label - 1 - true - - Style.ГруппаВариантовОтчетовЦвет - - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Быстрый доступ шапка</value> - - - БыстрыйДоступШапкаРасширеннаяПодсказка - 376 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ПодсказкаДляРежимаНастройки - 367 - - БыстрыйДоступПодсказкаКогдаНеНастроен - 369 - - <key>ru</key> - <value>Для перемещения отчета в эту группу нажмите на отчете правой кнопкой мыши и выберите "Переместить в быстрый доступ". -</value> - - true - true - - true - - - БыстрыйДоступПодсказкаКогдаНеНастроенРасширеннаяПодсказка - 371 - Label - true - true - - Left - - - - БыстрыйДоступПодсказкаКогдаНеНастроенКонтекстноеМеню - 370 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Подсказка для режима настройки</value> - - - ПодсказкаДляРежимаНастройкиРасширеннаяПодсказка - 368 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - БыстрыйДоступ - 4 - - БыстрыйДоступКолонка1 - 5 - true - true - - true - - - <key>ru</key> - <value>Быстрый доступ колонка 1</value> - - - БыстрыйДоступКолонка1ExtendedTooltip - 285 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - БыстрыйДоступКолонка2 - 21 - true - true - - true - - - <key>ru</key> - <value>Быстрый доступ колонка 2</value> - - - БыстрыйДоступКолонка2ExtendedTooltip - 286 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Быстрый доступ</value> - - - БыстрыйДоступExtendedTooltip - 284 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - Equal - Auto - Auto - - - - БыстрыйДоступПодвал - 315 - - БыстрыйДоступПодвалЛиния - 317 - true - true - - true - - - БыстрыйДоступПодвалЛинияРасширеннаяПодсказка - 319 - Label - true - true - - Left - - - - БыстрыйДоступПодвалЛинияКонтекстноеМеню - 318 - true - - Label - true - true - true - - Left - - - 1 - - - - true - - true - - - <key>ru</key> - <value>Быстрый доступ подвал</value> - - - БыстрыйДоступПодвалРасширеннаяПодсказка - 316 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - Auto - Auto - - - - БезГруппы - 48 - - БезГруппыКолонка1 - 49 - true - true - - true - - - <key>ru</key> - <value>Без группы колонка 1</value> - - - БезГруппыКолонка1ExtendedTooltip - 290 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - БезГруппыКолонка2 - 58 - true - true - - true - - - <key>ru</key> - <value>Без группы колонка 2</value> - - - БезГруппыКолонка2ExtendedTooltip - 291 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Без группы</value> - - - БезГруппыExtendedTooltip - 289 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - Equal - Auto - Auto - - - - БезГруппыПодвал - 43 - true - true - - true - - - БезГруппыПодвалРасширеннаяПодсказка - 293 - Label - true - true - - Left - - - - БезГруппыПодвалКонтекстноеМеню - 44 - true - - Label - true - true - - Left - - - - СГруппой - 74 - - СГруппойКолонка1 - 75 - true - true - - true - - - <key>ru</key> - <value>С группой колонка 1</value> - - - СГруппойКолонка1ExtendedTooltip - 295 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - СГруппойКолонка2 - 114 - true - true - - true - - - <key>ru</key> - <value>С группой колонка 2</value> - - - СГруппойКолонка2ExtendedTooltip - 296 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>С группой</value> - - - СГруппойExtendedTooltip - 294 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - Equal - Auto - Auto - - - - СГруппойПодвал - 216 - true - true - - true - - - СГруппойПодвалРасширеннаяПодсказка - 298 - Label - true - true - - Left - - - - СГруппойПодвалКонтекстноеМеню - 217 - true - - Label - true - true - - Left - - - - СмТакжеЗаголовок - 428 - - <key>ru</key> - <value>См. также</value> - - true - true - - true - - - СмТакжеЗаголовокРасширеннаяПодсказка - 430 - Label - true - true - - Left - - - - СмТакжеЗаголовокКонтекстноеМеню - 429 - true - - Label - true - true - - Style.ГруппаВариантовОтчетовЦвет - - - Style.NormalTextFont - 0.0 - - - Left - - - - СмТакже - 198 - - СмТакжеКолонка1 - 199 - true - true - - true - - - <key>ru</key> - <value>См также колонка 1</value> - - - СмТакжеКолонка1ExtendedTooltip - 300 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - СмТакжеКолонка2 - 208 - true - true - - true - - - <key>ru</key> - <value>См также колонка 2</value> - - - СмТакжеКолонка2ExtendedTooltip - 301 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>См также</value> - - - СмТакжеExtendedTooltip - 299 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - WeakSeparation - true - Equal - Auto - Auto - - - - СмТакжеПодвал - 218 - true - true - - true - - - СмТакжеПодвалРасширеннаяПодсказка - 303 - Label - true - true - - Left - - - - СмТакжеПодвалКонтекстноеМеню - 219 - true - - Label - true - true - - Left - - + ВерхняяПанельМобильныйКлиент + 445 true true @@ -1211,11 +413,11 @@ <key>ru</key> - <value>Колонки</value> + <value>Верхняя панель</value> - КолонкиExtendedTooltip - 283 + ВерхняяПанельМобильныйКлиентРасширеннаяПодсказка + 446 Label true true @@ -1223,35 +425,135 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + CommandBar + + Left - РезультатыПоискаИзДругихРазделовГруппа - 345 - - РезультатыПоискаИзДругихРазделовШапка - 383 - - <key>ru</key> - <value>Отчеты, найденные в других разделах:</value> - + Страницы + 431 + + Ожидание + 433 + + КартинкаИНадпись + 437 + + ДекорацияДлительнаяОперация + 439 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДекорацияДлительнаяОперацияExtendedTooltip + 441 + Label + true + true + + Left + + + + ДекорацияДлительнаяОперацияКонтекстноеМеню + 440 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияПоясняющийТекстДлительнойОперации + 442 + + <key>ru</key> + <value>Формируется список вариантов отчетов. +Пожалуйста, подождите...</value> + + true + true + + true + + + ДекорацияПоясняющийТекстДлительнойОперацииExtendedTooltip + 444 + Label + true + true + + Left + + + + ДекорацияПоясняющийТекстДлительнойОперацииКонтекстноеМеню + 443 + true + + Label + 30 + true + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Картинка и надпись</value> + + + КартинкаИНадписьРасширеннаяПодсказка + 438 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Center + Auto + NormalSeparation + true + true + Auto + Auto + + true true true - None + + <key>ru</key> + <value>Ожидание</value> + - РезультатыПоискаИзДругихРазделовШапкаРасширеннаяПодсказка - 385 + ОжиданиеРасширеннаяПодсказка + 434 Label true true @@ -1259,34 +561,920 @@ Left - - РезультатыПоискаИзДругихРазделовШапкаКонтекстноеМеню - 384 - true - - Label - 2 - true - - Style.FormTextColor - - - System.DefaultGUIFont - Arial - 11.0 - true - false - false - false - - - Left - Center + Page + + AlwaysHorizontal + auto + false - РезультатыПоискаИзДругихРазделов - 350 + Основное + 435 + + Колонки + 3 + + БыстрыйДоступШапка + 375 + + БыстрыйДоступШапкаКартинка + 377 + true + true + + true + + + БыстрыйДоступШапкаКартинкаРасширеннаяПодсказка + 379 + Label + true + true + + Left + + + + БыстрыйДоступШапкаКартинкаКонтекстноеМеню + 378 + true + + true + true + + + CommonPicture.БыстрыйДоступ + + + + + БыстрыйДоступШапкаНадпись + 380 + + <key>ru</key> + <value>Быстрый доступ</value> + + true + true + + true + + Button + + БыстрыйДоступШапкаНадписьРасширеннаяПодсказка + 382 + + <key>ru</key> + <value>Для перемещения отчета в эту группу нажмите на отчете правой кнопкой мыши и выберите "Переместить в быстрый доступ". +В быстрый доступ следует перемещать отчеты, которые используются постоянно. +Отчеты, перемещенные в быстрый доступ, будут отображаться вверху панели отчетов, выше всех остальных отчетов. +Это персональная настройка, у каждого пользователя свой быстрый доступ.</value> + + Label + true + true + + Left + + + + БыстрыйДоступШапкаНадписьКонтекстноеМеню + 381 + true + + Label + 1 + true + + Style.ГруппаВариантовОтчетовЦвет + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Быстрый доступ шапка</value> + + + БыстрыйДоступШапкаРасширеннаяПодсказка + 376 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ПодсказкаДляРежимаНастройки + 367 + + БыстрыйДоступПодсказкаКогдаНеНастроен + 369 + + <key>ru</key> + <value>Для перемещения отчета в эту группу нажмите на отчете правой кнопкой мыши и выберите "Переместить в быстрый доступ". +</value> + + true + true + + true + + + БыстрыйДоступПодсказкаКогдаНеНастроенРасширеннаяПодсказка + 371 + Label + true + true + + Left + + + + БыстрыйДоступПодсказкаКогдаНеНастроенКонтекстноеМеню + 370 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Подсказка для режима настройки</value> + + + ПодсказкаДляРежимаНастройкиРасширеннаяПодсказка + 368 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + БыстрыйДоступ + 4 + + БыстрыйДоступКолонка1 + 5 + true + true + + true + + + <key>ru</key> + <value>Быстрый доступ колонка 1</value> + + + БыстрыйДоступКолонка1ExtendedTooltip + 285 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + БыстрыйДоступКолонка2 + 21 + true + true + + true + + + <key>ru</key> + <value>Быстрый доступ колонка 2</value> + + + БыстрыйДоступКолонка2ExtendedTooltip + 286 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Быстрый доступ</value> + + + БыстрыйДоступExtendedTooltip + 284 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + Equal + Auto + Auto + + + + БыстрыйДоступПодвал + 315 + + БыстрыйДоступПодвалЛиния + 317 + true + true + + true + + + БыстрыйДоступПодвалЛинияРасширеннаяПодсказка + 319 + Label + true + true + + Left + + + + БыстрыйДоступПодвалЛинияКонтекстноеМеню + 318 + true + + Label + true + true + true + + Left + + + 1 + + + + true + + true + + + <key>ru</key> + <value>Быстрый доступ подвал</value> + + + БыстрыйДоступПодвалРасширеннаяПодсказка + 316 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + Auto + Auto + + + + БезГруппы + 48 + + БезГруппыКолонка1 + 49 + true + true + + true + + + <key>ru</key> + <value>Без группы колонка 1</value> + + + БезГруппыКолонка1ExtendedTooltip + 290 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + БезГруппыКолонка2 + 58 + true + true + + true + + + <key>ru</key> + <value>Без группы колонка 2</value> + + + БезГруппыКолонка2ExtendedTooltip + 291 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Без группы</value> + + + БезГруппыExtendedTooltip + 289 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + Equal + Auto + Auto + + + + БезГруппыПодвал + 43 + true + true + + true + + + БезГруппыПодвалРасширеннаяПодсказка + 293 + Label + true + true + + Left + + + + БезГруппыПодвалКонтекстноеМеню + 44 + true + + Label + true + true + + Left + + + + СГруппой + 74 + + СГруппойКолонка1 + 75 + true + true + + true + + + <key>ru</key> + <value>С группой колонка 1</value> + + + СГруппойКолонка1ExtendedTooltip + 295 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СГруппойКолонка2 + 114 + true + true + + true + + + <key>ru</key> + <value>С группой колонка 2</value> + + + СГруппойКолонка2ExtendedTooltip + 296 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>С группой</value> + + + СГруппойExtendedTooltip + 294 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + Equal + Auto + Auto + + + + СГруппойПодвал + 216 + true + true + + true + + + СГруппойПодвалРасширеннаяПодсказка + 298 + Label + true + true + + Left + + + + СГруппойПодвалКонтекстноеМеню + 217 + true + + Label + true + true + + Left + + + + СмТакжеЗаголовок + 428 + + <key>ru</key> + <value>См. также</value> + + true + true + + true + + + СмТакжеЗаголовокРасширеннаяПодсказка + 430 + Label + true + true + + Left + + + + СмТакжеЗаголовокКонтекстноеМеню + 429 + true + + Label + true + true + + Style.ГруппаВариантовОтчетовЦвет + + + Style.NormalTextFont + 0.0 + + + Left + + + + СмТакже + 198 + + СмТакжеКолонка1 + 199 + true + true + + true + + + <key>ru</key> + <value>См также колонка 1</value> + + + СмТакжеКолонка1ExtendedTooltip + 300 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СмТакжеКолонка2 + 208 + true + true + + true + + + <key>ru</key> + <value>См также колонка 2</value> + + + СмТакжеКолонка2ExtendedTooltip + 301 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>См также</value> + + + СмТакжеExtendedTooltip + 299 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + Equal + Auto + Auto + + + + СмТакжеПодвал + 218 + true + true + + true + + + СмТакжеПодвалРасширеннаяПодсказка + 303 + Label + true + true + + Left + + + + СмТакжеПодвалКонтекстноеМеню + 219 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Колонки</value> + + + КолонкиExtendedTooltip + 283 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + РезультатыПоискаИзДругихРазделовГруппа + 345 + + РезультатыПоискаИзДругихРазделовШапка + 383 + + <key>ru</key> + <value>Отчеты, найденные в других разделах:</value> + + true + true + + true + + None + + РезультатыПоискаИзДругихРазделовШапкаРасширеннаяПодсказка + 385 + Label + true + true + + Left + + + + РезультатыПоискаИзДругихРазделовШапкаКонтекстноеМеню + 384 + true + + Label + 2 + true + + Style.FormTextColor + + + System.DefaultGUIFont + Arial + 11.0 + true + false + false + false + + + Left + Center + + + + РезультатыПоискаИзДругихРазделов + 350 + true + true + + true + + + <key>ru</key> + <value>Результаты поиска из других разделов</value> + + + РезультатыПоискаИзДругихРазделовРасширеннаяПодсказка + 351 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Отчеты, найденные в других разделах</value> + + + РезультатыПоискаИзДругихРазделовГруппаРасширеннаяПодсказка + 346 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true @@ -1294,11 +1482,11 @@ <key>ru</key> - <value>Результаты поиска из других разделов</value> + <value>Основное</value> - РезультатыПоискаИзДругихРазделовРасширеннаяПодсказка - 351 + ОсновноеРасширеннаяПодсказка + 436 Label true true @@ -1306,14 +1494,11 @@ Left - UsualGroup - + Page + Vertical - Auto - true - true - Auto - Auto + auto + false true @@ -1323,11 +1508,11 @@ <key>ru</key> - <value>Отчеты, найденные в других разделах</value> + <value>Страницы</value> - РезультатыПоискаИзДругихРазделовГруппаРасширеннаяПодсказка - 346 + СтраницыРасширеннаяПодсказка + 432 Label true true @@ -1335,13 +1520,8 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto + Pages + Auto @@ -1470,14 +1650,13 @@ HorizontalIfPossible Auto + NormalSeparation true true Auto Auto - Bottom - true ФормаКоманднаяПанель -1 @@ -1943,23 +2122,6 @@ - - ВебКлиент - - <key>ru</key> - <value>Веб клиент</value> - - 13 - - Boolean - - - true - - - true - - ИмяИконкиБыстрогоДоступа @@ -2414,10 +2576,10 @@ </edit> </attributes> <attributes> - <name>БыстрыйПоискВариантовПоИмениЭлемента</name> + <name>ВариантОтчетаПоИмениЭлемента</name> <title> <key>ru</key> - <value>Быстрый поиск вариантов по имени элемента</value> + <value>Вариант отчета по имени элемента</value> 1 @@ -2429,10 +2591,10 @@ - БыстрыйПоискПодсистемПоСсылке + ПодсистемаПоСсылке <key>ru</key> - <value>Быстрый поиск подсистем по ссылке</value> + <value>Подсистема по ссылке</value> 27 @@ -2443,6 +2605,21 @@ true + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 28 + + + true + + + true + + Настроить @@ -2630,12 +2807,14 @@ <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.Find</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ВыполнитьПоиск</name> </handler> </action> - <representation>TextPicture</representation> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -2648,6 +2827,13 @@ </stringQualifiers> </valueType> </parameters> + <parameters> + <name>Заголовок</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html index 765d06aa9..3610e4456 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html +++ b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html @@ -17,10 +17,8 @@ </li><li>по представлениям полей варианта отчета; </li><li>по представлениям параметров и отборов варианта отчета; </li><li>по наименованиям пользовательских настроек варианта отчета; -</li><li>в наименованиях разделов и групп программы и панели отчетов.</li></ul></li><li>В поле <strong>Поиск</strong> наберите искомое значение, нажмите <strong>Найти</strong>. По умолчанию поиск проводится в текущем разделе. С помощью флажка укажите, где искать: -<ul><li><strong>Только в этом разделе</strong> (по умолчанию); -</li><li><strong>Во всех разделах</strong> (только в режиме просмотра). -<ul><li>Программа размещает результаты поиска под заголовком <strong>Отчеты, найденные в других разделах</strong>, найденные отчеты сгруппированы по разделам программы, при этом каждый заголовок раздела является ссылкой, которая предназначена для быстрого перехода к панели отчетов другого раздела.</li></ul></li></ul></li><li>Настройки поиска и поисковые слова запоминаются.</li></ul><h3>Формирование отчета</h3> +</li><li>в наименованиях разделов и групп программы и панели отчетов.</li></ul></li><li>В поле <strong>Поиск</strong> наберите искомое значение, нажмите <strong>Найти</strong>. Поиск проводится сначала в текущем разделе, а затем дополнительно во всех остальных разделах программы (эти результаты выводятся под заголовком <strong>Отчеты, найденные в других разделах</strong>, найденные отчеты сгруппированы по разделам программы, при этом каждый заголовок раздела является ссылкой, которая предназначена для быстрого перехода к панели отчетов другого раздела). +</li><li>Настройки поиска и поисковые слова запоминаются.</li></ul><h3>Формирование отчета</h3> <ul><li>Нажмите левой кнопкой мыши по наименованию отчета.</li></ul><h3>Отмена настроек панели отчетов</h3> <ul><li>Нажмите <strong>Еще - Сбросить мои настройки</strong>, для того чтобы вернуться к настройкам панели отчетов по умолчанию, если отчеты были размещены ошибочно.</li></ul><h3>Все отчеты</h3> <ul><li>Нажмите <strong>Все отчеты</strong> для перехода к списку <a href="Catalog.ВариантыОтчетов/Help">всех отчетов</a>. В списке можно настроить варианты отчетов и их размещение во всех разделах программы.</li></ul><h3>Режим н<a name="#2">астройк</a>и</h3> diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 82e636204..7eba1c8f1 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -1,3 +1,16 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОписаниеПеременных +&НаКлиенте +Перем Замер; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -6,6 +19,7 @@ Возврат; КонецЕсли; + ОпределитьПоведениеВМобильномКлиенте(); Если Не ЗначениеЗаполнено(Параметры.ПутьКПодсистеме) Тогда Параметры.ПутьКПодсистеме = ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(); КонецЕсли; @@ -56,8 +70,6 @@ Элементы.СмТакже.ШрифтЗаголовка = ШрифтВажнойГруппы; Элементы.СмТакже.ЦветТекстаЗаголовка = ЦветГруппыВариантовОтчетов; - ЗаполнитьИнформациюОПодсистемахИУстановитьЗаголовок(); - НаборРеквизитов = ПолучитьРеквизиты(); Для Каждого Реквизит Из НаборРеквизитов Цикл ПостоянныеРеквизиты.Добавить(Реквизит.Имя); @@ -67,8 +79,6 @@ ПостоянныеКоманды.Добавить(Команда.Имя); КонецЦикла; - Элементы.ИскатьВоВсехРазделах.Видимость = ЗначениеЗаполнено(СтрокаПоиска); - // Чтение пользовательской настройки, общей для всех панелей отчетов. ЗагрузитьВсеНастройки(); @@ -77,19 +87,17 @@ КонецЕсли; Если Параметры.Свойство("ИскатьВоВсехРазделах") Тогда ИскатьВоВсехРазделах = Параметры.ИскатьВоВсехРазделах; + Иначе + ИскатьВоВсехРазделах = Истина; КонецЕсли; // Заполнение панели. - ОбновитьПанельОтчетовНаСервере(); + ОпределитьПодсистемыИЗаголовок(Параметры); + ДлительнаяОперация = ОбновитьПанельОтчетовНаСервере(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - #Если ВебКлиент Тогда - ВебКлиент = Истина; - #Иначе - ВебКлиент = Ложь; - #КонецЕсли Если ПоказатьОповещениеОПодсказках И ПоказыватьПодсказки Тогда ПоказатьОповещениеПользователя( НСтр("ru = 'Новая возможность'"), @@ -97,8 +105,33 @@ НСтр("ru = 'Вывод описаний в панелях отчетов'"), БиблиотекаКартинок.Информация32); КонецЕсли; + Если ДлительнаяОперация.Статус = "Выполняется" Тогда + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + Завершение = Новый ОписаниеОповещения("ОбновитьПанельОтчетовЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Завершение, ПараметрыОжидания); + КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОбновитьПанельОтчетовЗавершение(Результат, ДополнительныеПараметры) Экспорт + + ДлительнаяОперация = Неопределено; + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + Если Результат.Статус = "Ошибка" Тогда + ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + КонецЕсли; + Если Результат.Статус = "Выполнено" Тогда + ЗаполнитьПанельОтчетов(Результат.АдресРезультата); + Если ПараметрыКлиента.ВыполнятьЗамеры Тогда + ЗакончитьЗамер(Замер); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПриПовторномОткрытии() Если РежимНастройки Или ЗначениеЗаполнено(СтрокаПоиска) Тогда @@ -118,10 +151,10 @@ Иначе ПараметрыКлиента.Вставить("Обновлять", Ложь) КонецЕсли; - Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() + Если ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияИзменениеВарианта() Или ИмяСобытия = "Запись_НаборКонстант" Тогда ПараметрыКлиента.Обновлять = Истина; - ИначеЕсли ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек() Тогда + ИначеЕсли ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияИзменениеОбщихНастроек() Тогда Если Изменения.ПоказыватьПодсказки <> ПоказыватьПодсказки Или Изменения.ИскатьВоВсехРазделах <> ИскатьВоВсехРазделах Тогда ПараметрыКлиента.Обновлять = Истина; @@ -212,27 +245,6 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ИскатьВоВсехРазделахПриИзменении(Элемент) - Если ЗначениеЗаполнено(СтрокаПоиска) Тогда - ОбновитьПанельОтчетовНаКлиенте("ИскатьВоВсехРазделахПриИзменении"); - - ОбщиеНастройки = Новый Структура; - ОбщиеНастройки.Вставить("ПоказыватьПодсказки", ПоказыватьПодсказки); - ОбщиеНастройки.Вставить("ИскатьВоВсехРазделах", ИскатьВоВсехРазделах); - ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", ПоказатьОповещениеОПодсказках); - - Оповестить( - ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек(), - ОбщиеНастройки, - ЭтотОбъект); - - ТекущийЭлемент = Элементы.ВыполнитьПоиск; - Иначе - ТекущийЭлемент = Элементы.СтрокаПоиска; - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_ЗаголовокРазделаНажатие(Элемент) ГруппаРазделаИмя = Элемент.Родитель.Имя; @@ -249,7 +261,6 @@ ФормаПараметры = Новый Структура; ФормаПараметры.Вставить("ПутьКПодсистеме", ПутьКПодсистеме); ФормаПараметры.Вставить("СтрокаПоиска", СтрокаПоиска); - ФормаПараметры.Вставить("ИскатьВоВсехРазделах", 0); ФормаВладелец = ЭтотОбъект; ФормаУникальность = Истина; @@ -275,7 +286,7 @@ ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", ПоказатьОповещениеОПодсказках); Оповестить( - ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек(), + ВариантыОтчетовКлиент.ИмяСобытияИзменениеОбщихНастроек(), ОбщиеНастройки, ЭтотОбъект); КонецПроцедуры @@ -286,17 +297,21 @@ &НаКлиенте Процедура Настроить(Команда) - РежимНастройки = Не РежимНастройки; - ОбновитьПанельОтчетовНаКлиенте(?(РежимНастройки, "ВходВРежимНастройки", "ВыходИзРежимаНастройки")); + Действие = ?(Не РежимНастройки, "ВходВРежимНастройки", "ВыходИзРежимаНастройки"); + Если ОбновитьПанельОтчетовНаКлиенте(Действие) Тогда + РежимНастройки = Не РежимНастройки; + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПереместитьВБыстрыйДоступ(Команда) - Если ВебКлиент Тогда - Элемент = Элементы.Найти(Сред(Команда.Имя, СтрНайти(Команда.Имя, "_")+1)); - Иначе - Элемент = ТекущийЭлемент; - КонецЕсли; + +#Если ВебКлиент Тогда + Элемент = Элементы.Найти(Сред(Команда.Имя, СтрНайти(Команда.Имя, "_")+1)); +#Иначе + Элемент = ТекущийЭлемент; +#КонецЕсли + Если ТипЗнч(Элемент) <> Тип("ДекорацияФормы") Тогда Возврат; КонецЕсли; @@ -311,11 +326,13 @@ &НаКлиенте Процедура УбратьИзБыстрогоДоступа(Команда) - Если ВебКлиент Тогда - Элемент = Элементы.Найти(Сред(Команда.Имя, СтрНайти(Команда.Имя, "_")+1)); - Иначе - Элемент = ТекущийЭлемент; - КонецЕсли; + +#Если ВебКлиент Тогда + Элемент = Элементы.Найти(Сред(Команда.Имя, СтрНайти(Команда.Имя, "_")+1)); +#Иначе + Элемент = ТекущийЭлемент; +#КонецЕсли + Если ТипЗнч(Элемент) <> Тип("ДекорацияФормы") Тогда Возврат; КонецЕсли; @@ -330,11 +347,13 @@ &НаКлиенте Процедура Изменить(Команда) - Если ВебКлиент Тогда - Элемент = Элементы.Найти(Сред(Команда.Имя, СтрНайти(Команда.Имя, "_")+1)); - Иначе - Элемент = ТекущийЭлемент; - КонецЕсли; + +#Если ВебКлиент Тогда + Элемент = Элементы.Найти(Сред(Команда.Имя, СтрНайти(Команда.Имя, "_")+1)); +#Иначе + Элемент = ТекущийЭлемент; +#КонецЕсли + Если ТипЗнч(Элемент) <> Тип("ДекорацияФормы") Тогда Возврат; КонецЕсли; @@ -452,17 +471,31 @@ КонецПроцедуры &НаКлиенте -Процедура ОбновитьПанельОтчетовНаКлиенте(Событие = "") +Функция ОбновитьПанельОтчетовНаКлиенте(Событие = "") Если ПараметрыКлиента.ВыполнятьЗамеры Тогда Замер = НачатьЗамер(Событие); КонецЕсли; - ОбновитьПанельОтчетовНаСервере(Событие); + Элементы.Страницы.ТекущаяСтраница = Элементы.Ожидание; + ДлительнаяОперация = ОбновитьПанельОтчетовНаСервере(Событие); + Если ДлительнаяОперация <> Неопределено И ДлительнаяОперация.Статус = "Выполняется" Тогда + Завершение = Новый ОписаниеОповещения("ОбновитьПанельОтчетовЗавершение", ЭтотОбъект); + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Завершение); + Возврат Истина; + КонецЕсли; Если ПараметрыКлиента.ВыполнятьЗамеры Тогда ЗакончитьЗамер(Замер); КонецЕсли; -КонецПроцедуры + + Если ДлительнаяОперация = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; +КонецФункции &НаКлиенте Функция НачатьЗамер(Событие, Комментарий = Неопределено) @@ -500,7 +533,7 @@ Комментарий = Комментарий + "; " + НСтр("ru = 'Выход из режима настройки'"); КонецЕсли; Замер.МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); - Замер.Идентификатор = Замер.МодульОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина, Замер.Имя); + Замер.Идентификатор = Замер.МодульОценкаПроизводительностиКлиент.ЗамерВремени(Замер.Имя); Замер.МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(Замер.Идентификатор, Комментарий); Возврат Замер; КонецФункции @@ -514,7 +547,7 @@ &НаКлиенте Функция НайтиВариантПоИмениЭлемента(НадписьИмя) - Идентификатор = БыстрыйПоискВариантовПоИмениЭлемента[НадписьИмя]; + Идентификатор = ВариантОтчетаПоИмениЭлемента[НадписьИмя]; Если Идентификатор <> Неопределено Тогда Возврат ДобавленныеВарианты.НайтиПоИдентификатору(Идентификатор); Иначе @@ -531,14 +564,14 @@ &НаКлиентеНаСервереБезКонтекста Функция НайтиПодсистемуПоСсылке(Форма, Ссылка) - Идентификатор = Форма.БыстрыйПоискПодсистемПоСсылке[Ссылка]; + Идентификатор = Форма.ПодсистемаПоСсылке[Ссылка]; Если Идентификатор <> Неопределено Тогда Возврат Форма.ПодсистемыПрограммы.НайтиПоИдентификатору(Идентификатор); - Иначе - Найденные = Форма.ПодсистемыПрограммы.НайтиСтроки(Новый Структура("Ссылка", Ссылка)); - Если Найденные.Количество() = 1 Тогда - Возврат Найденные[0]; - КонецЕсли; + КонецЕсли; + + Найденные = Форма.ПодсистемыПрограммы.НайтиСтроки(Новый Структура("Ссылка", Ссылка)); + Если Найденные.Количество() = 1 Тогда + Возврат Найденные[0]; КонецЕсли; Возврат Неопределено; КонецФункции @@ -607,7 +640,12 @@ КонецПроцедуры &НаСервере -Процедура ОбновитьПанельОтчетовНаСервере(Знач Событие = "") +Функция ОбновитьПанельОтчетовНаСервере(Знач Событие = "") + + Если ЗначениеЗаполнено(Событие) И ДлительнаяОперация <> Неопределено И ДлительнаяОперация.Статус = "Выполняется" Тогда + Возврат Неопределено; + КонецЕсли; + Если Событие = "СброситьНастройки" Тогда РегистрыСведений.НастройкиВариантовОтчетов.СброситьНастройкиПользователяВРазделе(ТекущийРазделСсылка); КонецЕсли; @@ -642,7 +680,6 @@ ВариантыОтчетов.СохранитьОбщиеНастройкиПанели(ОбщиеНастройки); КонецЕсли; - Элементы.ИскатьВоВсехРазделах.Видимость = Не РежимНастройки И ЗначениеЗаполнено(СтрокаПоиска); Элементы.ПоказыватьПодсказки.Видимость = РежимНастройки; Элементы.БыстрыйДоступШапкаНадпись.ОтображениеПодсказки = ?(РежимНастройки, ОтображениеПодсказки.Кнопка, ОтображениеПодсказки.Нет); @@ -664,7 +701,7 @@ ОчиститьФормуОтДобавленныхЭлементов(); // Удаление команд - Если ВебКлиент Тогда + Если ОбщегоНазначения.ЭтоВебКлиент() Тогда УдаляемыеКоманды = Новый Массив; Для Каждого Команда Из Команды Цикл Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда @@ -683,12 +720,34 @@ КонецЦикла; // Заполнение панели отчетов - ЗаполнитьПанельОтчетов(); -КонецПроцедуры + Возврат ЗаполнитьПанельОтчетовВФоне(); +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Сервер +&НаСервере +Процедура ОпределитьПоведениеВМобильномКлиенте() + Если Не ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Возврат; + КонецЕсли; + + Элементы.СтрокаПоиска.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + Элементы.ВыполнитьПоиск.Отображение = ОтображениеКнопки.Картинка; + Элементы.Переместить(Элементы.ПоказыватьПодсказки, Элементы.ВерхняяПанельМобильныйКлиент); + Элементы.ГруппаКоманднаяПанельПравая.Видимость = Ложь; + Элементы.ОписаниеМобильногоПриложения.Видимость = Ложь; + + ПодстрокаПоиска = НСтр("ru = 'нажмите на отчете правой кнопкой мыши и'"); + ПодстрокаЗамены = НСтр("ru = 'в контекстном меню'"); + + Элементы.БыстрыйДоступПодсказкаКогдаНеНастроен.Заголовок = + СтрЗаменить(Элементы.БыстрыйДоступПодсказкаКогдаНеНастроен.Заголовок, ПодстрокаПоиска, ПодстрокаЗамены); + + Элементы.БыстрыйДоступШапкаНадпись.РасширеннаяПодсказка.Заголовок = + СтрЗаменить(Элементы.БыстрыйДоступШапкаНадпись.РасширеннаяПодсказка.Заголовок, ПодстрокаПоиска, ПодстрокаЗамены); +КонецПроцедуры + &НаСервере Процедура ОчиститьФормуОтДобавленныхЭлементов() УдаляемыеЭлементы = Новый Массив; @@ -749,11 +808,10 @@ КонецФункции &НаСервере -Процедура ЗаполнитьИнформациюОПодсистемахИУстановитьЗаголовок() - ЗаголовокПереопределенКомандой = Параметры.Свойство("Заголовок"); - Если ЗаголовокПереопределенКомандой Тогда - Заголовок = Параметры.Заголовок; - КонецЕсли; +Процедура ОпределитьПодсистемыИЗаголовок(Параметры) + + ЗаданЗаголовок = Не ПустаяСтрока(Параметры.Заголовок); + ЗаголовокПанели = ?(ЗаданЗаголовок, Параметры.Заголовок, НСтр("ru = 'Отчеты'")); Если Параметры.ПутьКПодсистеме = ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы() Тогда ТекущийРазделПолноеИмя = Параметры.ПутьКПодсистеме; @@ -761,9 +819,11 @@ ТекущийРазделПолноеИмя = "Подсистема." + СтрЗаменить(Параметры.ПутьКПодсистеме, ".", ".Подсистема."); КонецЕсли; + ПодсистемыПрограммы.Очистить(); ВсеПодсистемы = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); ВсеРазделы = ВсеПодсистемы.Строки[0].Строки; - ПоискПодсистем = Новый Соответствие; + ПодсистемыПоСсылке = Новый Соответствие; + Для Каждого СтрокаРаздел Из ВсеРазделы Цикл СтрокаТаблицы = ПодсистемыПрограммы.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтрокаРаздел); @@ -771,14 +831,14 @@ СтрокаТаблицы.НомерЭлемента = 0; СтрокаТаблицы.РазделСсылка = СтрокаРаздел.Ссылка; - ПоискПодсистем.Вставить(СтрокаТаблицы.Ссылка, СтрокаТаблицы.ПолучитьИдентификатор()); + ПодсистемыПоСсылке[СтрокаТаблицы.Ссылка] = СтрокаТаблицы.ПолучитьИдентификатор(); Если СтрокаРаздел.ПолноеИмя = ТекущийРазделПолноеИмя Тогда ТекущийРазделСсылка = СтрокаРаздел.Ссылка; - Если ЗаголовокПереопределенКомандой Тогда + Если ЗаданЗаголовок Тогда СтрокаРаздел.ПолноеПредставление = Параметры.Заголовок; Иначе - Заголовок = СтрокаРаздел.ПолноеПредставление; + ЗаголовокПанели = СтрокаРаздел.ПолноеПредставление; КонецЕсли; КонецЕсли; @@ -791,13 +851,13 @@ СтрокаТаблицы.РодительСсылка = СтрокаДерева.Родитель.Ссылка; СтрокаТаблицы.РазделСсылка = СтрокаРаздел.Ссылка; - ПоискПодсистем.Вставить(СтрокаТаблицы.Ссылка, СтрокаТаблицы.ПолучитьИдентификатор()); + ПодсистемыПоСсылке[СтрокаТаблицы.Ссылка] = СтрокаТаблицы.ПолучитьИдентификатор(); Если СтрокаДерева.ПолноеИмя = ТекущийРазделПолноеИмя Тогда ТекущийРазделСсылка = СтрокаДерева.Ссылка; - Если ЗаголовокПереопределенКомандой Тогда + Если ЗаданЗаголовок Тогда СтрокаДерева.ПолноеПредставление = Параметры.Заголовок; Иначе - Заголовок = СтрокаДерева.ПолноеПредставление; + ЗаголовокПанели = СтрокаДерева.ПолноеПредставление; КонецЕсли; КонецЕсли; КонецЦикла; @@ -810,7 +870,9 @@ КонецЕсли; КлючНазначенияИспользования = "Раздел_" + Строка(ТекущийРазделСсылка.УникальныйИдентификатор()); - БыстрыйПоискПодсистемПоСсылке = Новый ФиксированноеСоответствие(ПоискПодсистем); + Заголовок = ЗаголовокПанели; + ПодсистемаПоСсылке = Новый ФиксированноеСоответствие(ПодсистемыПоСсылке); + КонецПроцедуры &НаСервере @@ -841,15 +903,46 @@ // Сервер / Заполнение панели отчетов. &НаСервере -Процедура ЗаполнитьПанельОтчетов() +Функция ЗаполнитьПанельОтчетовВФоне() // Очистка сведений об изменениях в пользовательских настройках. ДобавленныеВарианты.Очистить(); - ПараметрыЗаполнения = Новый Структура; + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("РежимНастройки", РежимНастройки); + ПараметрыПоиска.Вставить("СтрокаПоиска", СтрокаПоиска); + ПараметрыПоиска.Вставить("ИскатьВоВсехРазделах", ИскатьВоВсехРазделах); + ПараметрыПоиска.Вставить("ТекущийРазделСсылка", ТекущийРазделСсылка); + + ПоискПоСтроке = ЗначениеЗаполнено(СтрокаПоиска); + ТолькоТекущийРаздел = РежимНастройки Или Не ЗначениеЗаполнено(СтрокаПоиска) Или ИскатьВоВсехРазделах = 0; + Если ТолькоТекущийРаздел Тогда + ТаблицаПодсистем = ПодсистемыПрограммы.Выгрузить(Новый Структура("РазделСсылка", ТекущийРазделСсылка)); + Иначе + ТаблицаПодсистем = ПодсистемыПрограммы.Выгрузить(); + КонецЕсли; + ПараметрыПоиска.Вставить("ПодсистемыПрограммы", ТаблицаПодсистем); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне("ВариантыОтчетов.НайтиВариантыОтчетовДляВывода", ПараметрыПоиска, ПараметрыВыполнения); + Если ДлительнаяОперация.Статус = "Ошибка" Тогда + ВызватьИсключение ДлительнаяОперация.КраткоеПредставлениеОшибки; + КонецЕсли; + Если ДлительнаяОперация.Статус <> "Выполнено" Тогда + Возврат ДлительнаяОперация; + КонецЕсли; + + ЗаполнитьПанельОтчетов(ДлительнаяОперация.АдресРезультата); + Возврат ДлительнаяОперация; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьПанельОтчетов(ПараметрыЗаполненияВременноеХранилище) + + ПараметрыЗаполнения = ПолучитьИзВременногоХранилища(ПараметрыЗаполненияВременноеХранилище); + УдалитьИзВременногоХранилища(ПараметрыЗаполненияВременноеХранилище); + ИнициализироватьПараметрыЗаполнения(ПараметрыЗаполнения); - - НайтиВариантыОтчетовДляВывода(ПараметрыЗаполнения); - Если РежимНастройки Тогда ПараметрыЗаполнения.КонтекстноеМеню.УбратьИзБыстрогоДоступа.Видимость = Истина; ПараметрыЗаполнения.КонтекстноеМеню.ПереместитьВБыстрыйДоступ.Видимость = Ложь; @@ -863,7 +956,7 @@ Элементы.РезультатыПоискаИзДругихРазделовГруппа.Видимость = Истина; Если ПараметрыЗаполнения.ДругиеРазделы.Количество() = 0 Тогда Надпись = Элементы.Вставить("ВДругихРазделах", Тип("ДекорацияФормы"), Элементы.РезультатыПоискаИзДругихРазделов); - Надпись.Заголовок = " " + НСтр("ru = 'Отчеты в других разделах не найдены.'") + Символы.ПС; + Надпись.Заголовок = НСтр("ru = 'Отчеты в других разделах не найдены.'") + Символы.ПС; Надпись.Высота = 2; КонецЕсли; Для Каждого РазделСсылка Из ПараметрыЗаполнения.ДругиеРазделы Цикл @@ -903,7 +996,9 @@ КонецЦикла; КонецЕсли; - БыстрыйПоискВариантовПоИмениЭлемента = Новый ФиксированноеСоответствие(ПараметрыЗаполнения.ПоискВариантов); + ВариантОтчетаПоИмениЭлемента = Новый ФиксированноеСоответствие(ПараметрыЗаполнения.ПоискВариантов); + Элементы.Страницы.ТекущаяСтраница = Элементы.Основное; + КонецПроцедуры &НаСервере @@ -990,366 +1085,6 @@ КонецПроцедуры -&НаСервере -Процедура НайтиВариантыОтчетовДляВывода(ПараметрыЗаполнения) - - Запрос = Новый Запрос; - - Запрос.Текст = - "ВЫБРАТЬ - | Подсистемы.Ссылка КАК Подсистема, - | Подсистемы.РазделСсылка КАК РазделСсылка, - | Подсистемы.Представление КАК Представление, - | Подсистемы.Приоритет КАК Приоритет - |ПОМЕСТИТЬ втПодсистемы - |ИЗ - | &ТаблицаПодсистем КАК Подсистемы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка КАК Ссылка, - | ПредопределенныеРазмещение.Подсистема КАК Подсистема, - | ПредопределенныеРазмещение.Важный КАК Важный, - | ПредопределенныеРазмещение.СмТакже КАК СмТакже, - | ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ПредопределенныеРазмещение.Ссылка.Описание КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) - | КОНЕЦ КАК Описание, - | ВариантыОтчетов.Наименование КАК Наименование, - | ВариантыОтчетов.Отчет КАК Отчет, - | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, - | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, - | ВариантыОтчетов.Автор КАК Автор, - | ВЫБОР - | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена - | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию - | ИНАЧЕ ПредопределенныеРазмещение.Ссылка.ВидимостьПоУмолчанию - | КОНЕЦ КАК ВидимостьПоУмолчанию, - | ВариантыОтчетов.Родитель КАК Родитель, - | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров - |ПОМЕСТИТЬ втПредопределенные - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК ПредопределенныеРазмещение - | ПО (ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) - | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском)) - | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка - | И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем)) - | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) - | И (ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) - | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ВариантыОтчетов.Ссылка, - | ПредопределенныеРазмещение.Подсистема, - | ПредопределенныеРазмещение.Важный, - | ПредопределенныеРазмещение.СмТакже, - | ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ПредопределенныеРазмещение.Ссылка.Описание КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) - | КОНЕЦ, - | ВариантыОтчетов.Наименование, - | ВариантыОтчетов.Отчет, - | ВариантыОтчетов.ТипОтчета, - | ВариантыОтчетов.КлючВарианта, - | ВариантыОтчетов.Автор, - | ВЫБОР - | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена - | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию - | ИНАЧЕ ПредопределенныеРазмещение.Ссылка.ВидимостьПоУмолчанию - | КОНЕЦ, - | ВариантыОтчетов.Родитель, - | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК ПредопределенныеРазмещение - | ПО (ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) - | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском)) - | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка - | И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем)) - | И (ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) - | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыРазмещение.Ссылка КАК Ссылка, - | ВариантыРазмещение.Подсистема КАК Подсистема, - | ВариантыРазмещение.Использование КАК Использование, - | ВариантыРазмещение.Важный КАК Важный, - | ВариантыРазмещение.СмТакже КАК СмТакже, - | ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыРазмещение.Ссылка.Описание, 1, 1) = """" - | И НЕ ВариантыРазмещение.Ссылка.Пользовательский - | ТОГДА ВЫРАЗИТЬ(ВариантыРазмещение.Ссылка.ПредопределенныйВариант.Описание КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыРазмещение.Ссылка.Описание КАК СТРОКА(1000)) - | КОНЕЦ КАК Описание, - | ВариантыРазмещение.Ссылка.ТолькоДляАвтора КАК ТолькоДляАвтора, - | ВариантыРазмещение.Ссылка.Наименование КАК Наименование, - | ВариантыРазмещение.Ссылка.Отчет КАК Отчет, - | ВариантыРазмещение.Ссылка.ТипОтчета КАК ТипОтчета, - | ВариантыРазмещение.Ссылка.КлючВарианта КАК КлючВарианта, - | ВариантыРазмещение.Ссылка.Автор КАК Автор, - | ВЫБОР - | КОГДА ВариантыРазмещение.Ссылка.Родитель = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) - | ТОГДА ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) - | КОГДА ВариантыРазмещение.Ссылка.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) - | ТОГДА ВариантыРазмещение.Ссылка.Родитель - | ИНАЧЕ ВариантыРазмещение.Ссылка.Родитель.Родитель - | КОНЕЦ КАК Родитель, - | ВариантыРазмещение.Ссылка.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, - | ВариантыРазмещение.Ссылка.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров - |ПОМЕСТИТЬ втВарианты - |ИЗ - | Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение - |ГДЕ - | (ВариантыРазмещение.Ссылка В (&ВариантыНайденныеПоиском) - | ИЛИ ВариантыРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском)) - | И (НЕ ВариантыРазмещение.Ссылка.ТолькоДляАвтора - | ИЛИ ВариантыРазмещение.Ссылка.Автор = &ТекущийПользователь) - | И ВариантыРазмещение.Подсистема В(&МассивПодсистем) - | И ВариантыРазмещение.Ссылка.Отчет В(&ОтчетыПользователя) - | И НЕ ВариантыРазмещение.Ссылка.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - | И (НЕ ВариантыРазмещение.Ссылка.Пользовательский - | ИЛИ НЕ ВариантыРазмещение.Ссылка.ИнтерактивнаяПометкаУдаления) - | И (ВариантыРазмещение.Ссылка.Пользовательский - | ИЛИ НЕ ВариантыРазмещение.Ссылка.ПометкаУдаления) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | ЕСТЬNULL(втВарианты.Ссылка, втПредопределенные.Ссылка) КАК Ссылка, - | ЕСТЬNULL(втВарианты.Подсистема, втПредопределенные.Подсистема) КАК Подсистема, - | ЕСТЬNULL(втВарианты.Важный, втПредопределенные.Важный) КАК Важный, - | ЕСТЬNULL(втВарианты.СмТакже, втПредопределенные.СмТакже) КАК СмТакже, - | ЕСТЬNULL(втВарианты.Наименование, втПредопределенные.Наименование) КАК Наименование, - | ЕСТЬNULL(втВарианты.Описание, втПредопределенные.Описание) КАК Описание, - | ЕСТЬNULL(втВарианты.Автор, втПредопределенные.Автор) КАК Автор, - | ЕСТЬNULL(втВарианты.Отчет, втПредопределенные.Отчет) КАК Отчет, - | ЕСТЬNULL(втВарианты.ТипОтчета, втПредопределенные.ТипОтчета) КАК ТипОтчета, - | ЕСТЬNULL(втВарианты.КлючВарианта, втПредопределенные.КлючВарианта) КАК КлючВарианта, - | ЕСТЬNULL(втВарианты.ВидимостьПоУмолчанию, втПредопределенные.ВидимостьПоУмолчанию) КАК ВидимостьПоУмолчанию, - | ЕСТЬNULL(втВарианты.Родитель, втПредопределенные.Родитель) КАК Родитель, - | ВЫБОР - | КОГДА ЕСТЬNULL(втВарианты.Родитель, втПредопределенные.Родитель) = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ВерхнийУровень, - | ЕСТЬNULL(втВарианты.КлючЗамеров, втПредопределенные.КлючЗамеров) КАК КлючЗамеров - |ПОМЕСТИТЬ втВсеВарианты - |ИЗ - | втПредопределенные КАК втПредопределенные - | ПОЛНОЕ СОЕДИНЕНИЕ втВарианты КАК втВарианты - | ПО втПредопределенные.Ссылка = втВарианты.Ссылка - | И втПредопределенные.Подсистема = втВарианты.Подсистема - |ГДЕ - | ЕСТЬNULL(втВарианты.Использование, ИСТИНА) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | втВсеВарианты.Ссылка КАК Ссылка, - | втВсеВарианты.Подсистема КАК Подсистема, - | втПодсистемы.Представление КАК ПодсистемаПредставление, - | втПодсистемы.Приоритет КАК ПодсистемаПриоритет, - | втПодсистемы.РазделСсылка КАК РазделСсылка, - | ВЫБОР - | КОГДА втВсеВарианты.Подсистема = втПодсистемы.РазделСсылка - | И втВсеВарианты.СмТакже = ЛОЖЬ - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК БезГруппы, - | втВсеВарианты.Важный КАК Важный, - | втВсеВарианты.СмТакже КАК СмТакже, - | ВЫБОР - | КОГДА втВсеВарианты.ТипОтчета = &ТипДополнительный - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК Дополнительный, - | ЕСТЬNULL(ЛичныеНастройки.Видимость, втВсеВарианты.ВидимостьПоУмолчанию) КАК Видимость, - | ЕСТЬNULL(ЛичныеНастройки.БыстрыйДоступ, ЛОЖЬ) КАК БыстрыйДоступ, - | ВЫБОР - | КОГДА втВсеВарианты.ТипОтчета = &ТипВнутренний - | ИЛИ втВсеВарианты.ТипОтчета = &ТипРасширение - | ТОГДА втВсеВарианты.Отчет.Имя - | КОГДА втВсеВарианты.ТипОтчета = &ТипДополнительный - | ТОГДА """" - | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(втВсеВарианты.Отчет КАК СТРОКА(150)), 14, 137) - | КОНЕЦ КАК ИмяОтчета, - | втВсеВарианты.Наименование КАК Наименование, - | втВсеВарианты.Описание КАК Описание, - | втВсеВарианты.Автор КАК Автор, - | втВсеВарианты.Отчет КАК Отчет, - | втВсеВарианты.ТипОтчета КАК ТипОтчета, - | втВсеВарианты.КлючВарианта КАК КлючВарианта, - | втВсеВарианты.Родитель КАК Родитель, - | втВсеВарианты.ВерхнийУровень КАК ВерхнийУровень, - | втВсеВарианты.КлючЗамеров КАК КлючЗамеров - |ИЗ - | втВсеВарианты КАК втВсеВарианты - | ЛЕВОЕ СОЕДИНЕНИЕ втПодсистемы КАК втПодсистемы - | ПО втВсеВарианты.Подсистема = втПодсистемы.Подсистема - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ЛичныеНастройки - | ПО втВсеВарианты.Подсистема = ЛичныеНастройки.Подсистема - | И втВсеВарианты.Ссылка = ЛичныеНастройки.Вариант - | И (ЛичныеНастройки.Пользователь = &ТекущийПользователь) - |ГДЕ - | ЕСТЬNULL(ЛичныеНастройки.Видимость, втВсеВарианты.ВидимостьПоУмолчанию) - | - |УПОРЯДОЧИТЬ ПО - | ПодсистемаПриоритет, - | Наименование"; - - ТолькоТекущийРаздел = РежимНастройки Или Не ЗначениеЗаполнено(СтрокаПоиска) Или ИскатьВоВсехРазделах = 0; - Если ТолькоТекущийРаздел Тогда - ТаблицаПодсистем = ПодсистемыПрограммы.Выгрузить(Новый Структура("РазделСсылка", ТекущийРазделСсылка)); - Иначе - ТаблицаПодсистем = ПодсистемыПрограммы.Выгрузить(); - КонецЕсли; - ТаблицаПодсистем.Индексы.Добавить("Ссылка"); - МассивПодсистем = ТаблицаПодсистем.ВыгрузитьКолонку("Ссылка"); - - ИспользоватьПодсветку = ЗначениеЗаполнено(СтрокаПоиска); - - ПараметрыПоиска = Новый Структура; - Если ИспользоватьПодсветку Тогда - ПараметрыПоиска.Вставить("СтрокаПоиска", СтрокаПоиска); - КонецЕсли; - Если ТолькоТекущийРаздел Тогда - ПараметрыПоиска.Вставить("Подсистемы", МассивПодсистем); - КонецЕсли; - - РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); - - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда - Запрос.УстановитьПараметр("ТекущийПользователь", ПользователиКлиентСервер.ТекущийВнешнийПользователь()); - Иначе - Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); - КонецЕсли; - - Запрос.УстановитьПараметр("МассивПодсистем", МассивПодсистем); - Запрос.УстановитьПараметр("ТаблицаПодсистем", ТаблицаПодсистем); - Запрос.УстановитьПараметр("РазделСсылка", ТекущийРазделСсылка); - Запрос.УстановитьПараметр("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); - Запрос.УстановитьПараметр("ТипРасширение", Перечисления.ТипыОтчетов.Расширение); - Запрос.УстановитьПараметр("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); - Запрос.УстановитьПараметр("ВариантыНайденныеПоиском", РезультатПоиска.Ссылки); - Если ИспользоватьПодсветку И РезультатПоиска.Подсистемы.Количество() > 0 Тогда - Запрос.УстановитьПараметр("ПодсистемыНайденныеПоиском", РезультатПоиска.Подсистемы); - Запрос.УстановитьПараметр("ОтчетыПользователя", ПараметрыПоиска.ОтчетыПользователя); - Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ПараметрыПоиска.ОтключенныеВариантыПрограммы); - Иначе - Запрос.Текст = СтрЗаменить( - Запрос.Текст, - "(ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) - | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))", - "(ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском))"); - Запрос.Текст = СтрЗаменить( - Запрос.Текст, - "(ВариантыРазмещение.Ссылка В (&ВариантыНайденныеПоиском) - | ИЛИ ВариантыРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))", - "ВариантыРазмещение.Ссылка В (&ВариантыНайденныеПоиском)"); - Запрос.Текст = СтрЗаменить( - Запрос.Текст, - " - | И (ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) - | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы))", - ""); - Запрос.Текст = СтрЗаменить( - Запрос.Текст, - " - | И ВариантыРазмещение.Ссылка.Отчет В(&ОтчетыПользователя) - | И НЕ ВариантыРазмещение.Ссылка.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы)", - ""); - КонецЕсли; - - Если РежимНастройки Или ИспользоватьПодсветку Тогда - УдаляемыйФрагмент = - "ГДЕ - | ЕСТЬNULL(ЛичныеНастройки.Видимость, втВсеВарианты.ВидимостьПоУмолчанию)"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, УдаляемыйФрагмент, ""); - КонецЕсли; - - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); - ТаблицаРезультат.Колонки.Добавить("ВыводитсяВместеСОсновным", Новый ОписаниеТипов("Булево")); - ТаблицаРезультат.Колонки.Добавить("КоличествоПодчиненных", Новый ОписаниеТипов("Число")); - ТаблицаРезультат.Индексы.Добавить("Ссылка"); - - ИдентификаторыОтчетов = Новый Массив; - Для Каждого СтрокаОтчета Из ТаблицаРезультат Цикл - Если Не СтрокаОтчета.Дополнительный Тогда - ИдентификаторыОтчетов.Добавить(СтрокаОтчета.Отчет); - КонецЕсли; - КонецЦикла; - - ОбъектыОтчетов = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыОтчетов); - Для Каждого ОтчетДляВывода Из ТаблицаРезультат Цикл - Если ОтчетДляВывода.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний - Или ОтчетДляВывода.ТипОтчета = Перечисления.ТипыОтчетов.Расширение Тогда - МетаданныеОтчета = ОбъектыОтчетов[ОтчетДляВывода.Отчет]; - Если ОтчетДляВывода.ИмяОтчета <> МетаданныеОтчета.Имя Тогда - ОтчетДляВывода.ИмяОтчета = МетаданныеОтчета.Имя; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если ИспользоватьПодсветку Тогда - // Удаление записей о вариантах, связанных с подсистемами, если запись не фигурирует в связи. - Для Каждого КлючИЗначение Из РезультатПоиска.ВариантыСвязанныеСПодсистемами Цикл - ВариантСсылка = КлючИЗначение.Ключ; - СвязанныеПодсистемы = КлючИЗначение.Значение; - Найденные = ТаблицаРезультат.НайтиСтроки(Новый Структура("Ссылка", ВариантСсылка)); - Для Каждого СтрокаТаблицы Из Найденные Цикл - Если СвязанныеПодсистемы.Найти(СтрокаТаблицы.Подсистема) = Неопределено Тогда - ТаблицаРезультат.Удалить(СтрокаТаблицы); - КонецЕсли; - КонецЦикла; - КонецЦикла; - // Удаление записей о родителях, связанных с вариантами, если родитель пытается вывестись один (без вариантов). - Для Каждого РодительСсылка Из РезультатПоиска.РодителиСвязанныеСВариантами Цикл - МестаВывода = ТаблицаРезультат.НайтиСтроки(Новый Структура("Ссылка", РодительСсылка)); - Для Каждого СтрокаТаблицы Из МестаВывода Цикл - Найденные = ТаблицаРезультат.НайтиСтроки(Новый Структура("Подсистема, Родитель", СтрокаТаблицы.Подсистема, РодительСсылка)); - Если Найденные.Количество() = 0 Тогда - ТаблицаРезультат.Удалить(СтрокаТаблицы); - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЕсли; - - Если ТолькоТекущийРаздел Тогда - ДругиеРазделы = Новый Массив; - Иначе - КопияТаблицы = ТаблицаРезультат.Скопировать(); - КопияТаблицы.Свернуть("РазделСсылка"); - ДругиеРазделы = КопияТаблицы.ВыгрузитьКолонку("РазделСсылка"); - Индекс = ДругиеРазделы.Найти(ТекущийРазделСсылка); - Если Индекс <> Неопределено Тогда - ДругиеРазделы.Удалить(Индекс); - КонецЕсли; - КонецЕсли; - - Если ИспользоватьПодсветку Тогда - МассивСлов = ВариантыОтчетовКлиентСервер.РазложитьСтрокуПоискаВМассивСлов(ВРег(СокрЛП(СтрокаПоиска))); - Иначе - МассивСлов = Неопределено; - КонецЕсли; - - ПараметрыЗаполнения.Вставить("ТолькоТекущийРаздел", ТолькоТекущийРаздел); - ПараметрыЗаполнения.Вставить("ТаблицаПодсистем", ТаблицаПодсистем); - ПараметрыЗаполнения.Вставить("ДругиеРазделы", ДругиеРазделы); - ПараметрыЗаполнения.Вставить("Варианты", ТаблицаРезультат); - ПараметрыЗаполнения.Вставить("ИспользоватьПодсветку", ЗначениеЗаполнено(СтрокаПоиска)); - ПараметрыЗаполнения.Вставить("РезультатПоиска", РезультатПоиска); - ПараметрыЗаполнения.Вставить("МассивСлов", МассивСлов); -КонецПроцедуры - &НаСервере Процедура ВывестиВариантыРаздела(ПараметрыЗаполнения, РазделСсылка) ОтборПоРазделу = Новый Структура("РазделСсылка", РазделСсылка); @@ -2080,16 +1815,16 @@ Функция ДобавитьЭлементыВариантаОтчета(ПараметрыЗаполнения, Вариант, ВГруппу, УровеньВложенности = 0) // Уникальное имя добавляемого элемента. - НадписьИмя = "Вариант_" + ОтчетыКлиентСервер.ПривестиИдентификаторКИмени(Вариант.Ссылка.УникальныйИдентификатор()); + НадписьИмя = "Вариант_" + ОтчетыСервер.ПривестиИдентификаторКИмени(Вариант.Ссылка.УникальныйИдентификатор()); Если ЗначениеЗаполнено(Вариант.Подсистема) Тогда НадписьИмя = НадписьИмя + "_Подсистема_" - + ОтчетыКлиентСервер.ПривестиИдентификаторКИмени(Вариант.Подсистема.УникальныйИдентификатор()); + + ОтчетыСервер.ПривестиИдентификаторКИмени(Вариант.Подсистема.УникальныйИдентификатор()); КонецЕсли; Если Не ПараметрыЗаполнения.ТолькоТекущийРаздел И Элементы.Найти(НадписьИмя) <> Неопределено Тогда Если ЗначениеЗаполнено(Вариант.РазделСсылка) Тогда Номер = 0; - Суффикс = "_Раздел_" + ОтчетыКлиентСервер.ПривестиИдентификаторКИмени(Вариант.РазделСсылка.УникальныйИдентификатор()); + Суффикс = "_Раздел_" + ОтчетыСервер.ПривестиИдентификаторКИмени(Вариант.РазделСсылка.УникальныйИдентификатор()); Иначе Номер = 1; Суффикс = "_1"; @@ -2153,7 +1888,7 @@ КомандаИмя = КлючИЗначение.Ключ; КнопкаИмя = КомандаИмя + "_" + НадписьИмя; Кнопка = Элементы.Вставить(КнопкаИмя, Тип("КнопкаФормы"), Надпись.КонтекстноеМеню); - Если ВебКлиент Тогда + Если ОбщегоНазначения.ЭтоВебКлиент() Тогда Команда = Команды.Добавить(КнопкаИмя); ЗаполнитьЗначенияСвойств(Команда, Команды[КомандаИмя]); Кнопка.ИмяКоманды = КнопкаИмя; @@ -2170,7 +1905,7 @@ СтрокаТаблицы.ГруппаУровня2Имя = ПараметрыЗаполнения.ИмяГруппы; СтрокаТаблицы.НадписьИмя = НадписьИмя; - ПараметрыЗаполнения.ПоискВариантов.Вставить(НадписьИмя, СтрокаТаблицы.ПолучитьИдентификатор()); + ПараметрыЗаполнения.ПоискВариантов[НадписьИмя] = СтрокаТаблицы.ПолучитьИдентификатор(); Возврат Надпись; diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Module.bsl b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Module.bsl index 99dea091d..31d40973e 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -13,7 +20,7 @@ КонецЕсли; Если Параметры.ЗапрашиватьПараметрыАдминистрированияКластера - И ОбщегоНазначенияКлиентСервер.ЭтоOSXКлиент() Тогда + И ОбщегоНазначения.ЭтоOSXКлиент() Тогда Возврат; // Отказ устанавливается в ПриОткрытии. КонецЕсли; @@ -55,7 +62,7 @@ Элементы.ГруппаАдминистрированиеИБ.Видимость = Параметры.ЗапрашиватьПараметрыАдминистрированияИБ; Элементы.ГруппаАдминистрированиеКластера.Видимость = Параметры.ЗапрашиватьПараметрыАдминистрированияКластера; - Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Если ОбщегоНазначения.ЭтоLinuxКлиент() Тогда ТипПодключения = "RAS"; Элементы.ТипПодключения.Видимость = Ложь; @@ -66,19 +73,13 @@ Элементы.ГруппаТипПодключения.ТекущаяСтраница = ?(ТипПодключения = "COM", Элементы.ГруппаCOM, Элементы.ГруппаRAS); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - КонецЕсли; - КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Если Параметры.ЗапрашиватьПараметрыАдминистрированияКластера - И ОбщегоНазначенияКлиентСервер.ЭтоOSXКлиент() Тогда + И ОбщегоНазначенияКлиент.ЭтоOSXКлиент() Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Подключение к кластеру серверов недоступно в клиенте под управлением ОС X.'"); ПоказатьПредупреждение(,ТекстСообщения); @@ -114,13 +115,13 @@ ПользовательИБ = Неопределено; ПолучитьАдминистратораИБ(ПользовательИБ); Если ПользовательИБ = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Указанный пользователь не имеет доступа к информационной базе.'"),, + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Указанный пользователь не имеет доступа к информационной базе.'"),, ИмяПоля,,Отказ); Возврат; КонецЕсли; Если Не Пользователи.ЭтоПолноправныйПользователь(ПользовательИБ, Истина) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'У пользователя нет административных прав.'"),, + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'У пользователя нет административных прав.'"),, ИмяПоля,,Отказ); Возврат; КонецЕсли; @@ -216,25 +217,22 @@ &НаКлиенте Процедура ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрирования) - Если ТипПодключения = "COM" Тогда - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); + Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() + И ТипПодключения = "COM" Тогда + + Оповещение = Новый ОписаниеОповещения("ПроверитьПараметрыАдминистрированияПослеПроверкиCOMСоединителя", ЭтотОбъект); + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь, Оповещение); + Иначе + ПроверитьПараметрыАдминистрированияПослеПроверкиCOMСоединителя(Истина, Неопределено); КонецЕсли; - Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда - - ПроверитьПараметрыАдминистрированияФайловойБазы(); - - Иначе - - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда - - ПроверитьПараметрыАдминистрированияНаСервере(); - - Иначе - АдминистрированиеКластераКлиентСервер.ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрирования,, - Параметры.ЗапрашиватьПараметрыАдминистрированияКластера, Параметры.ЗапрашиватьПараметрыАдминистрированияИБ); - КонецЕсли; - +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПараметрыАдминистрированияПослеПроверкиCOMСоединителя(Зарегистрировано, Контекст) Экспорт + + Если Зарегистрировано Тогда + ПроверитьПараметрыАдминистрированияНаСервере(); КонецЕсли; КонецПроцедуры @@ -242,8 +240,12 @@ &НаСервере Процедура ПроверитьПараметрыАдминистрированияНаСервере() - АдминистрированиеКластераКлиентСервер.ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрирования,, - Параметры.ЗапрашиватьПараметрыАдминистрированияКластера, Параметры.ЗапрашиватьПараметрыАдминистрированияИБ); + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ПроверитьПараметрыАдминистрированияФайловойБазы(); + Иначе + АдминистрированиеКластера.ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрирования,, + Параметры.ЗапрашиватьПараметрыАдминистрированияКластера, Параметры.ЗапрашиватьПараметрыАдминистрированияИБ); + КонецЕсли; КонецПроцедуры @@ -291,16 +293,14 @@ КонецПроцедуры -&НаКлиенте +&НаСервере Процедура ПроверитьПараметрыАдминистрированияФайловойБазы() Если Параметры.ЗапрашиватьПараметрыАдминистрированияИБ Тогда // В базовых версиях проверку подключения не осуществляем. - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); - - Если ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации - Или ПараметрыРаботыКлиента.ЭтоУчебнаяПлатформа Тогда + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() + Или СтандартныеПодсистемыСервер.ЭтоУчебнаяПлатформа() Тогда Возврат; КонецЕсли; @@ -309,12 +309,10 @@ ПараметрыПодключения.ИмяПользователя = ИмяАдминистратораИнформационнойБазы; ПараметрыПодключения.ПарольПользователя = ПарольАдминистратораИнформационнойБазы; - Результат = ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой(ПараметрыПодключения); + Результат = ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой(ПараметрыПодключения); Если Результат.Соединение = Неопределено Тогда - ВызватьИсключение Результат.КраткоеОписаниеОшибки; - КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form index 3c45221a3..ee7930068 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form @@ -370,7 +370,7 @@ </userVisible> <title> <key>ru</key> - <value>Группа аутентификация</value> + <value>Аутентификация</value> ГруппаАутентификацияРасширеннаяПодсказка diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl index 5b8322368..59e76ddc4 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -86,14 +93,6 @@ ТолькоПросмотр = Истина; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВариантыИспользованияПроксиСервера", "ВидПереключателя", ВидПереключателя.Переключатель); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КнопкаОтмена", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index 872cbb2c4..e8b4bfb00 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -3,6 +3,7 @@ ГруппаКоманднаяПанель 116 + VeryHigh КоманднаяПанельЛеваяЧасть 114 @@ -32,6 +33,34 @@ true UserCmds Auto + InCommandBarAndInAdditionalSubmenu + + + КнопкаПредварительныйПросмотр + 214 + true + true + + true + + + КнопкаПредварительныйПросмотрРасширеннаяПодсказка + 215 + Label + true + true + + Left + + + Form.Item.ТекущаяПечатнаяФорма.StandardCommand.Preview + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu true true @@ -42,7 +71,7 @@ ru Командная панель левая часть - 10 + 13 false КоманднаяПанельЛеваяЧастьExtendedTooltip @@ -59,55 +88,126 @@ Left - - КнопкаПредварительныйПросмотр - 214 - true - true - - true - - - КнопкаПредварительныйПросмотрРасширеннаяПодсказка - 215 - Label - true - true - - Left + + НастройкаКоличестваКопий + 275 + VeryHigh + + Копий + 117 + VeryHigh + true + true + + true + + + Копий + + Left + + ru + Количество копий + + + OnChange + КопийПриИзменении + + + КопийExtendedTooltip + 146 + Label + true + true + + Left + + + + КопийКонтекстноеМеню + 118 + true + + InputField + Enter + true + Left + true + + 4 + true + true + true + true + true + true + true + + 1 + + + 999 + + Normal - - UsualButton - Form.Item.ТекущаяПечатнаяФорма.StandardCommand.Preview - Normal - Picture - true - true - UserCmds - Auto - - - Копий - 117 + + + ФлажокПодписьИПечать + 281 + VeryHigh + true + true + + true + + + ПодписьИПечать + + Right + Button + + OnChange + ФлажокПодписьИПечатьПриИзменении + + + ФлажокПодписьИПечатьРасширеннаяПодсказка + 283 + + <key>ru</key> + <value>Добавить факсимильную подпись и печать в печатную форму</value> + + true + Label + true + true + + Left + + + + ФлажокПодписьИПечатьКонтекстноеМеню + 282 + true + + CheckBoxField + Enter + true + Left + true + + true true true - - Копий - - + <key>ru</key> - <value>Количество копий</value> - </toolTip> - <handlers> - <event>OnChange</event> - <name>КопийПриИзменении</name> - </handlers> + <value>Настройка количества копий</value> + - КопийExtendedTooltip - 146 + НастройкаКоличестваКопийРасширеннаяПодсказка + 276 Label true true @@ -115,31 +215,14 @@ Left - - КопийКонтекстноеМеню - 118 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - - 1 - - - 999 - - Normal + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto @@ -348,33 +431,6 @@ - - ВычислитьСумму - 187 - true - true - - true - - - ВычислитьСуммуExtendedTooltip - 188 - Label - true - true - - Left - - - Form.Command.ВычислитьСумму - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - true true @@ -384,6 +440,7 @@ ru Командная панель правая часть + false КоманднаяПанельПраваяЧастьExtendedTooltip 147 @@ -399,6 +456,354 @@ Left
      + + ГруппаПоказатель + 252 + + Показатель + 254 + true + true + + true + + + Показатель + + None + + ПоказательРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + + ПоказательКонтекстноеМеню + 255 + true + + InputField + true + Enter + true + Left + true + + 10 + true + true + false + true + true + true + true + Normal + + + + КомандыПоказателей + 257 + + КомандыВидовПоказателей + 259 + + РассчитатьСумму + 261 + + <key>ru</key> + <value>Сумма</value> + + true + true + + true + + + РассчитатьСуммуРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + Form.Command.РассчитатьСумму + Normal + Auto + true + true + UserCmds + Auto + + + РассчитатьКоличество + 263 + + <key>ru</key> + <value>Количество</value> + + true + true + + true + + + РассчитатьКоличествоРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + Form.Command.РассчитатьКоличество + Normal + Auto + true + true + UserCmds + Auto + + + РассчитатьСреднее + 265 + + <key>ru</key> + <value>Среднее</value> + + true + true + + true + + + РассчитатьСреднееРасширеннаяПодсказка + 266 + Label + true + true + + Left + + + Form.Command.РассчитатьСреднее + Normal + Auto + true + true + UserCmds + Auto + + + РассчитатьМинимум + 267 + + <key>ru</key> + <value>Минимум</value> + + true + true + + true + + + РассчитатьМинимумРасширеннаяПодсказка + 268 + Label + true + true + + Left + + + Form.Command.РассчитатьМинимум + Normal + Auto + true + true + UserCmds + Auto + + + РассчитатьМаксимум + 269 + + <key>ru</key> + <value>Максимум</value> + + true + true + + true + + + РассчитатьМаксимумРасширеннаяПодсказка + 270 + Label + true + true + + Left + + + Form.Command.РассчитатьМаксимум + Normal + Auto + true + true + UserCmds + Auto + + + ВсеПоказатели + 271 + + РассчитатьВсеПоказатели + 273 + + <key>ru</key> + <value>Все показатели</value> + + true + true + + true + + + РассчитатьВсеПоказателиРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + Form.Command.РассчитатьВсеПоказатели + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Все показатели</value> + + true + + ВсеПоказателиРасширеннаяПодсказка + 272 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Виды показателей</value> + + true + + КомандыВидовПоказателейРасширеннаяПодсказка + 260 + Label + true + true + + Left + + + Popup + + + CommonPicture.Сумма + + Picture + Normal + + + true + true + + true + + + <key>ru</key> + <value>Показатели</value> + + + ru + Выполняет расчет определенного или всех показателей выделенных ячеек + + true + + КомандыПоказателейРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value>Показатель</value> + + true + false + + ГруппаПоказательРасширеннаяПодсказка + 253 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + КоманднаяПанельЕще 192 @@ -639,6 +1044,32 @@ + + Справка + 277 + true + true + + true + + + СправкаРасширеннаяПодсказка + 278 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Picture + true + true + UserCmds + Auto + true true @@ -671,7 +1102,7 @@ <key>ru</key> - <value>Командная панель</value> + <value>Копий и автосумма</value> ГруппаКоманднаяПанельExtendedTooltip @@ -806,6 +1237,7 @@ НастройкиПечатныхФорм 86 + VeryLow <key>ru</key> <value>Настройки печатных форм</value> @@ -1435,6 +1867,7 @@ <items xsi:type="form:FormGroup"> <name>Страницы</name> <id>9</id> + <displayImportance>VeryHigh</displayImportance> <items xsi:type="form:FormGroup"> <name>СтраницаТекущаяПечатнаяФорма</name> <id>209</id> @@ -1471,6 +1904,10 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:SpreadSheetDocFieldExtInfo"> + <handlers> + <event>OnActivate</event> + <name>ТекущаяПечатнаяФормаПриАктивизацииОбласти</name> + </handlers> <width>30</width> <autoMaxWidth>true</autoMaxWidth> <height>15</height> @@ -1698,6 +2135,365 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> + <items xsi:type="form:FormGroup"> + <name>ОбластьПоказателей</name> + <id>228</id> + <items xsi:type="form:Decoration"> + <name>ОтступПоказатели</name> + <id>230</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ОтступПоказателиРасширеннаяПодсказка</name> + <id>232</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ОтступПоказателиКонтекстноеМеню</name> + <id>231</id> + <autoFill>true</autoFill> + </contextMenu> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>true</horizontalStretch> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </items> + <items xsi:type="form:FormGroup"> + <name>ВидыПоказателей</name> + <id>233</id> + <items xsi:type="form:FormField"> + <name>Сумма</name> + <id>235</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Сумма</segments> + </dataPath> + <titleLocation>Left</titleLocation> + <extendedTooltip> + <name>СуммаРасширеннаяПодсказка</name> + <id>237</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СуммаКонтекстноеМеню</name> + <id>236</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <readOnly>true</readOnly> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>10</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>false</horizontalStretch> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Количество</name> + <id>238</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Количество</segments> + </dataPath> + <titleLocation>Left</titleLocation> + <extendedTooltip> + <name>КоличествоРасширеннаяПодсказка</name> + <id>240</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>КоличествоКонтекстноеМеню</name> + <id>239</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <readOnly>true</readOnly> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>10</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>false</horizontalStretch> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Среднее</name> + <id>241</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Среднее</segments> + </dataPath> + <titleLocation>Left</titleLocation> + <extendedTooltip> + <name>СреднееРасширеннаяПодсказка</name> + <id>243</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СреднееКонтекстноеМеню</name> + <id>242</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <readOnly>true</readOnly> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>10</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>false</horizontalStretch> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Минимум</name> + <id>244</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Минимум</segments> + </dataPath> + <titleLocation>Left</titleLocation> + <extendedTooltip> + <name>МинимумРасширеннаяПодсказка</name> + <id>246</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>МинимумКонтекстноеМеню</name> + <id>245</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <readOnly>true</readOnly> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>10</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>false</horizontalStretch> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Максимум</name> + <id>247</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Максимум</segments> + </dataPath> + <titleLocation>Left</titleLocation> + <extendedTooltip> + <name>МаксимумРасширеннаяПодсказка</name> + <id>249</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>МаксимумКонтекстноеМеню</name> + <id>248</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <readOnly>true</readOnly> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>10</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>false</horizontalStretch> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Виды показателей</value> + + true + false + + ВидыПоказателейРасширеннаяПодсказка + 234 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + + Style.ИтогиФонГруппы + + Auto + Auto + + + + СвернутьПоказатели + 250 + true + true + + true + + + СвернутьПоказателиРасширеннаяПодсказка + 251 + Label + true + true + + Left + + + Hyperlink + Form.Command.СвернутьПоказатели + Normal + Auto + true + true + UserCmds + Auto + + true + + true + + + <key>ru</key> + <value>Показатели</value> + + + ru + Показатели выделенных ячеек отчета + + true + true + + ОбластьПоказателейРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Right + Auto + Button + true + true + Auto + Auto + +
      None false @@ -1706,6 +2502,10 @@ Left true + + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере + ChoiceProcessing ОбработкаВыбора @@ -1718,11 +2518,16 @@ OnOpen ПриОткрытии + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + OnCreateAtServer ПриСозданииНаСервере DontBlock + Use true true Vertical @@ -1732,6 +2537,11 @@ UseIfNecessary auto true + + + КоманднаяПанельЕще + + ОбъектыПечати @@ -1985,6 +2795,23 @@ <common>true</common> </edit> </columns> + <columns> + <name>ПодписьИПечать</name> + <title> + <key>ru</key> + <value>Подпись и печать</value> + + 12 + + Boolean + + + true + + + true + + ПечатнаяФормаОбразец @@ -2145,15 +2972,18 @@ - СуммаВыделенныхЯчеек + Сумма <key>ru</key> <value>Сумма</value> 6 - String - + Number + + 15 + 2 + true @@ -2180,6 +3010,148 @@ + + Количество + + <key>ru</key> + <value>Количество</value> + + 21 + + Number + + 15 + 2 + + + + true + + + true + + + + Среднее + + <key>ru</key> + <value>Среднее</value> + + 22 + + Number + + 17 + 4 + + + + true + + + true + + + + Показатель + + <key>ru</key> + <value>Показатель</value> + + 23 + + Number + + 17 + 4 + + + + true + + + true + + + + Максимум + + <key>ru</key> + <value>Максимум</value> + + 24 + + Number + + 15 + 2 + + + + true + + + true + + + + Минимум + + <key>ru</key> + <value>Минимум</value> + + 25 + + Number + + 15 + 2 + + + + true + + + true + + + + ПодписьИПечать + + <key>ru</key> + <value>Подпись и печать</value> + + 26 + + Boolean + + + true + + + true + + + ПодписьИПечать + + + + УникальныйИдентификаторХранилища + + <key>ru</key> + <value>Уникальный идентификатор хранилища</value> + + 27 + + UUID + + + true + + + true + + Отправить @@ -2458,30 +3430,161 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>ВычислитьСумму</name> + <name>РассчитатьСумму</name> <title> <key>ru</key> - <value>Подсчитать</value> + <value>Рассчитать сумму</value> - 12 + 13 ru - Вычислить сумму чисел выделенных ячеек + Выполняет расчет суммы выделенных ячеек + + + true + + + + РассчитатьСумму + + + Auto + Auto + + + РассчитатьКоличество + + <key>ru</key> + <value>Рассчитать количество</value> + + 14 + + ru + Выполняет расчет количества выделенных ячеек + + + true + + + + РассчитатьКоличество + + + Auto + Auto + + + РассчитатьСреднее + + <key>ru</key> + <value>Рассчитать среднее</value> + + 15 + + ru + Выполняет расчет среднего значения выделенных ячеек + + + true + + + + РассчитатьСреднее + + + Auto + Auto + + + РассчитатьМаксимум + + <key>ru</key> + <value>Рассчитать максимум</value> + + 16 + + ru + Выполняет расчет максимального значения выделенных ячеек + + + true + + + + РассчитатьМаксимум + + + Auto + Auto + + + РассчитатьМинимум + + <key>ru</key> + <value>Рассчитать минимум</value> + + 17 + + ru + Выполняет расчет минимального значения выделенных ячеек + + + true + + + + РассчитатьМинимум + + + Auto + Auto + + + РассчитатьВсеПоказатели + + <key>ru</key> + <value>Рассчитать все показатели</value> + + 18 + + ru + Выполняет расчет всех показателей выделенных ячеек + + + true + + + + РассчитатьВсеПоказатели + + + Auto + Auto + + + СвернутьПоказатели + + <key>ru</key> + <value>Свернуть</value> + + 19 + + ru + Свернуть панель показателей true - Alt+S - CommonPicture.Сумма + CommonPicture.СтрелкаВнизЗеленая - ВычислитьСумму + СвернутьПоказатели Picture - DontUse + Auto Auto diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index 85e913719..20a7d3454 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -47,6 +55,7 @@ КонецЕсли; СоздатьРеквизитыИЭлементыФормыДляПечатныхФорм(КоллекцияПечатныхФорм); + УбратьПодписьИПечать(); СохранитьНастройкиКомплектаПоУмолчанию(); ЗагрузитьНастройкиКоличестваКопий(); ЕстьРазрешенныйВывод = ЕстьРазрешенныйВывод(); @@ -54,7 +63,7 @@ УстановитьПризнакДоступностиВыводаВПредставленияхПечатныхФорм(ЕстьРазрешенныйВывод); УстановитьИмяПринтераВПодсказкеКнопкиПечать(); УстановитьЗаголовокФормы(); - Если ЭтоПечатьКомплекта() Тогда + Если Не ОбщегоНазначения.ЭтоМобильныйКлиент() И ЭтоПечатьКомплекта() Тогда Элементы.Копий.Заголовок = НСтр("ru = 'Копий комплекта'"); КонецЕсли; @@ -76,16 +85,63 @@ Элементы.ГруппаДополнительнаяИнформация.Видимость = Не ПустаяСтрока(Элементы.ДополнительнаяИнформация.Заголовок); Элементы.КартинкаИнформации.Видимость = Элементы.КартинкаИнформации.Картинка.Вид <> ВидКартинки.Пустая; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.КоманднаяПанельЛеваяЧасть.Видимость = Ложь; + Элементы.КоманднаяПанельПраваяЧасть.Видимость = Ложь; + Элементы.НастройкиПечатныхФорм.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; + Элементы.КнопкаОтправитьВсеДействия.КнопкаПоУмолчанию = Истина; + Элементы.Справка.ТолькоВоВсехДействиях= Истина; + Элементы.КнопкаИзменитьМакет.Видимость = Ложь; + КонецЕсли; + + УправлениеПечатьюПереопределяемый.ПечатьДокументовПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + УправлениеПечатьюПереопределяемый.ПечатьДокументовПриЗагрузкеДанныхИзНастроекНаСервере(ЭтотОбъект, Настройки); + +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + + УправлениеПечатьюПереопределяемый.ПечатьДокументовПриСохраненииДанныхВНастройкахНаСервере(ЭтотОбъект, Настройки); + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) + + Если ВладелецФормы = Неопределено Тогда + УникальныйИдентификаторХранилища = Новый УникальныйИдентификатор; + Иначе + УникальныйИдентификаторХранилища = ВладелецФормы.УникальныйИдентификатор; + КонецЕсли; + Если ЗначениеЗаполнено(НастройкиФорматаСохранения) Тогда Отказ = Истина; // отказ от открытия формы СохранитьПечатнуюФормуВФайл(); Возврат; КонецЕсли; - ПодключитьОбработчикОжидания("УстановитьТекущуюСтраницу", 0.1, Истина); + + ПодключитьОбработчикОжидания("ПослеОткрытия", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеОткрытия() + + Если Элементы.ФлажокПодписьИПечать.Видимость Тогда + ДобавитьУдалитьПодписьПечать(); + КонецЕсли; + УстановитьТекущуюСтраницу(); + РассчитатьПоказатели(); + + УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовПослеОткрытия(ЭтотОбъект); + КонецПроцедуры &НаКлиенте @@ -123,76 +179,6 @@ КонецПроцедуры -&НаСервере -Функция ПараметрыОтправкиПисьма(ВыбранныеПараметры) - - СписокВложений = ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранныеПараметры); - - // Контроль уникальности имен. - ШаблонИмениФайла = "%1%2.%3"; - ИспользованныеИменаФайлов = Новый Соответствие; - Для Каждого Вложение Из СписокВложений Цикл - ИмяФайла = Вложение.Представление; - НомерИспользования = ?(ИспользованныеИменаФайлов[ИмяФайла] <> Неопределено, - ИспользованныеИменаФайлов[ИмяФайла] + 1, 1); - ИспользованныеИменаФайлов.Вставить(ИмяФайла, НомерИспользования); - Если НомерИспользования > 1 Тогда - Файл = Новый Файл(ИмяФайла); - ИмяФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениФайла, - Файл.ИмяБезРасширения, " (" + НомерИспользования + ")", Файл.Расширение); - КонецЕсли; - Вложение.Представление = ИмяФайла; - КонецЦикла; - - Получатели = ПараметрыВывода.ПараметрыОтправки.Получатель; - Если ВыбранныеПараметры.Свойство("Получатели") Тогда - Получатели = ВыбранныеПараметры.Получатели; - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("Получатель", Получатели); - Результат.Вставить("Тема", ПараметрыВывода.ПараметрыОтправки.Тема); - Результат.Вставить("Текст", ПараметрыВывода.ПараметрыОтправки.Текст); - Результат.Вставить("Вложения", СписокВложений); - Результат.Вставить("УдалятьФайлыПослеОтправки", Истина); - - ПечатныеФормы = Новый ТаблицаЗначений; - ПечатныеФормы.Колонки.Добавить("Название"); - ПечатныеФормы.Колонки.Добавить("ТабличныйДокумент"); - - Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл - Если Не НастройкаПечатнойФормы.Печатать Тогда - Продолжить; - КонецЕсли; - - ТабличныйДокумент = ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита]; - Если ПечатныеФормы.НайтиСтроки(Новый Структура("ТабличныйДокумент", ТабличныйДокумент)).Количество() > 0 Тогда - Продолжить; - КонецЕсли; - - Если ВычислитьИспользованиеВывода(ТабличныйДокумент) = ИспользованиеВывода.Запретить Тогда - Продолжить; - КонецЕсли; - - Если ТабличныйДокумент.Защита Тогда - Продолжить; - КонецЕсли; - - Если ТабличныйДокумент.ВысотаТаблицы = 0 Тогда - Продолжить; - КонецЕсли; - - ОписаниеПечатнойФормы = ПечатныеФормы.Добавить(); - ОписаниеПечатнойФормы.Название = НастройкаПечатнойФормы.Название; - ОписаниеПечатнойФормы.ТабличныйДокумент = ТабличныйДокумент; - КонецЦикла; - - УправлениеПечатьюПереопределяемый.ПередОтправкойПоПочте(Результат, ПараметрыВывода, Параметры.ПараметрКоманды, ПечатныеФормы); - - Возврат Результат; - -КонецФункции - &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -243,6 +229,24 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ТекущаяПечатнаяФормаПриАктивизацииОбласти(Элемент) + ПодключитьОбработчикОжидания("РассчитатьПоказателиДинамически", 0.2, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ФлажокПодписьИПечатьПриИзменении(Элемент) + ДобавитьУдалитьПодписьПечать(); + УстановитьТекущуюСтраницу(); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовОбработкаНавигационнойСсылки(ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиПечатныхФорм @@ -375,8 +379,53 @@ КонецПроцедуры &НаКлиенте -Процедура ВычислитьСумму(Команда) - СтандартныеПодсистемыКлиент.ПоказатьРасчетЯчеек(ЭтотОбъект, ТекущаяПечатнаяФорма); +Процедура РассчитатьСумму(Команда) + РассчитатьПоказатели(Команда.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьКоличество(Команда) + РассчитатьПоказатели(Команда.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьСреднее(Команда) + РассчитатьПоказатели(Команда.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьМинимум(Команда) + РассчитатьПоказатели(Команда.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьМаксимум(Команда) + РассчитатьПоказатели(Команда.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьВсеПоказатели(Команда) + УстановитьВидимостьПоказателей(Не Элементы.РассчитатьВсеПоказатели.Пометка); +КонецПроцедуры + +&НаКлиенте +Процедура СвернутьПоказатели(Команда) + УстановитьВидимостьПоказателей(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + + ПродолжитьВыполнениеНаСервере = Ложь; + ДополнительныеПараметры = Неопределено; + + УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовВыполнитьКоманду( + ЭтотОбъект, Команда, ПродолжитьВыполнениеНаСервере, ДополнительныеПараметры); + + Если ПродолжитьВыполнениеНаСервере Тогда + ПриВыполненииКомандыНаСервере(ДополнительныеПараметры); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -427,12 +476,14 @@ КонецЕсли; // Установка признака сохранения печатной формы в файл (не открывать форму, сразу сохранять в файл). - Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") И Параметры.ПараметрыПечати.Свойство("ФорматСохранения") Тогда - НайденныйФормат = УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента().Найти(Параметры.ПараметрыПечати.ФорматСохранения, "ТипФайлаТабличногоДокумента"); + Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") И Параметры.ПараметрыПечати.Свойство("ФорматСохранения") + И ЗначениеЗаполнено(Параметры.ПараметрыПечати.ФорматСохранения) Тогда + НайденныйФормат = УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента().Найти(ТипФайлаТабличногоДокумента[Параметры.ПараметрыПечати.ФорматСохранения], "ТипФайлаТабличногоДокумента"); Если НайденныйФормат <> Неопределено Тогда НастройкиФорматаСохранения = Новый Структура("ТипФайлаТабличногоДокумента,Представление,Расширение,Фильтр"); ЗаполнитьЗначенияСвойств(НастройкиФорматаСохранения, НайденныйФормат); НастройкиФорматаСохранения.Фильтр = НастройкиФорматаСохранения.Представление + "|*." + НастройкиФорматаСохранения.Расширение; + НастройкиФорматаСохранения.ТипФайлаТабличногоДокумента = Параметры.ПараметрыПечати.ФорматСохранения; КонецЕсли; КонецЕсли; @@ -507,6 +558,7 @@ НоваяНастройкаПечатнойФормы.ПутьКМакету = ОписаниеПечатнойФормы.ПолныйПутьКМакету; НоваяНастройкаПечатнойФормы.ИмяФайлаПечатнойФормы = ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеПечатнойФормы.ИмяФайлаПечатнойФормы); НоваяНастройкаПечатнойФормы.ОфисныеДокументы = ?(ПустаяСтрока(ОписаниеПечатнойФормы.ОфисныеДокументы), "", ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеПечатнойФормы.ОфисныеДокументы)); + НоваяНастройкаПечатнойФормы.ПодписьИПечать = ЕстьПодписьИПечать(ОписаниеПечатнойФормы.ТабличныйДокумент); ПечатьОфисныхДокументов = ПечатьОфисныхДокументов ИЛИ НЕ ПустаяСтрока(НоваяНастройкаПечатнойФормы.ОфисныеДокументы); @@ -554,11 +606,11 @@ КонецПроцедуры &НаСервере -Функция СохранитьНастройкиКомплектаПоУмолчанию() +Процедура СохранитьНастройкиКомплектаПоУмолчанию() Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл ЗаполнитьЗначенияСвойств(НастройкиКомплектаПоУмолчанию.Добавить(), НастройкаПечатнойФормы); КонецЦикла; -КонецФункции +КонецПроцедуры &НаСервере Процедура НастроитьВидимостьЭлементовФормы(Знач ЕстьРазрешенныйВывод) @@ -599,7 +651,6 @@ КонецЕсли; Если Не ЕстьДанныеДляПечати Тогда - Элементы.ВычислитьСумму.Видимость = Ложь; Элементы.ТекущаяПечатнаяФорма.УстановитьДействие("ПриАктивизацииОбласти", ""); КонецЕсли; @@ -625,6 +676,8 @@ ДоступноИзменениеМакетов = ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ПользовательскиеМакетыПечати) И ЕстьРедактируемыеМакеты(); Элементы.КнопкаИзменитьМакет.Видимость = ДоступноИзменениеМакетов И ЕстьДанныеДляПечати; + Элементы.ФлажокПодписьИПечать.Видимость = ЕстьПечатныеФормыСПодписьюИПечатью() И ЕстьПодписиИПечатиДляОбъектовПечати(); + КонецПроцедуры &НаСервере @@ -708,8 +761,6 @@ КонецЕсли; Элементы.Страницы.ТекущаяСтраница = ТекущаяСтраница; - Элементы.ВычислитьСумму.Доступность = ПечатнаяФормаДоступна; - ПереключитьПометкуКнопкиРедактирование(); УстановитьДоступностьИзмененияМакета(); УстановитьДоступностьКомандВывода(); @@ -785,7 +836,6 @@ // подготовка временной папки ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ИмяВременнойПапки); - ИспользованныеИменаФайлов = Новый Соответствие; ВыбранныеФорматыСохранения = НастройкиСохранения.ФорматыСохранения; ПереводитьИменаФайловВТранслит = НастройкиСохранения.ПереводитьИменаФайловВТранслит; @@ -844,20 +894,17 @@ Продолжить; КонецЕсли; - ПечатныеФормыПоОбъектам = ПечатныеФормыПоОбъектам(ПечатнаяФорма); + ПечатныеФормыПоОбъектам = УправлениеПечатью.ПечатныеФормыПоОбъектам(ПечатнаяФорма, ОбъектыПечати); Для Каждого СоответствиеОбъектаПечатнойФорме Из ПечатныеФормыПоОбъектам Цикл + ОбъектПечати = СоответствиеОбъектаПечатнойФорме.Ключ; ПечатнаяФорма = СоответствиеОбъектаПечатнойФорме.Значение; - Для Каждого ТипФайла Из ВыбранныеФорматыСохранения Цикл + + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + ТипФайла = ТипФайлаТабличногоДокумента[ВыбранныйФормат]; НастройкиФормата = ТаблицаФорматов.НайтиСтроки(Новый Структура("ТипФайлаТабличногоДокумента", ТипФайла))[0]; + ЗаданныеИменаПечатныхФорм = ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаПечатнойФормы.ИмяФайлаПечатнойФормы); - Если СоответствиеОбъектаПечатнойФорме.Ключ <> "ОбъектыПечатиНеЗаданы" Тогда - ИмяФайла = ИмяФайлаПечатнойФормыОбъекта(СоответствиеОбъектаПечатнойФорме.Ключ, ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаПечатнойФормы.ИмяФайлаПечатнойФормы)); - Если ИмяФайла = Неопределено Тогда - ИмяФайла = ИмяФайлаПечатнойФормыПоУмолчанию(СоответствиеОбъектаПечатнойФорме.Ключ, НастройкаПечатнойФормы.Название); - КонецЕсли; - Иначе - ИмяФайла = НастройкаПечатнойФормы.Название; - КонецЕсли; + ИмяФайла = УправлениеПечатью.ИмяФайлаПечатнойФормыОбъекта(ОбъектПечати, ЗаданныеИменаПечатныхФорм, НастройкаПечатнойФормы.Название); ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла); Если ПереводитьИменаФайловВТранслит Тогда @@ -870,14 +917,14 @@ ПечатнаяФорма.Записать(ПолноеИмяФайла, ТипФайла); Если ТипФайла = ТипФайлаТабличногоДокумента.HTML Тогда - ВставитьКартинкиВHTML(ПолноеИмяФайла); + УправлениеПечатью.ВставитьКартинкиВHTML(ПолноеИмяФайла); КонецЕсли; Если ЗаписьZipФайла <> Неопределено Тогда ЗаписьZipФайла.Добавить(ПолноеИмяФайла); Иначе ДвоичныеДанные = Новый ДвоичныеДанные(ПолноеИмяФайла); - ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); + ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища); ОписаниеФайла = Новый Структура; ОписаниеФайла.Вставить("Представление", ИмяФайла); ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище); @@ -893,9 +940,8 @@ // Если архив подготовлен, записываем и помещаем его во временное хранилище. Если ЗаписьZipФайла <> Неопределено Тогда ЗаписьZipФайла.Записать(); - ФайлАрхива = Новый Файл(ИмяАрхива); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива); - ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); + ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища); ОписаниеФайла = Новый Структура; ОписаниеФайла.Вставить("Представление", ПолучитьИмяФайлаДляАрхива(ПереводитьИменаФайловВТранслит)); ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище); @@ -911,104 +957,6 @@ КонецФункции -&НаСервере -Функция ПечатныеФормыПоОбъектам(ПечатнаяФорма) - Если ОбъектыПечати.Количество() = 0 Тогда - Возврат Новый Структура("ОбъектыПечатиНеЗаданы", ПечатнаяФорма); - КонецЕсли; - - Результат = Новый Соответствие; - Для Каждого ОбъектПечати Из ОбъектыПечати Цикл - ИмяОбласти = ОбъектПечати.Представление; - Область = ПечатнаяФорма.Области.Найти(ИмяОбласти); - Если Область = Неопределено Тогда - Продолжить; - КонецЕсли; - Если ОбъектыПечати.Количество() = 1 Тогда - ТабличныйДокумент = ПечатнаяФорма; - Иначе - ТабличныйДокумент = ПечатнаяФорма.ПолучитьОбласть(Область.Верх, , Область.Низ); - ЗаполнитьЗначенияСвойств(ТабличныйДокумент, ПечатнаяФорма, - УправлениеПечатью.КопируемыеСвойстваТабличногоДокумента()); - КонецЕсли; - Результат.Вставить(ОбъектПечати.Значение, ТабличныйДокумент); - КонецЦикла; - Возврат Результат; -КонецФункции - -&НаСервере -Процедура ВставитьКартинкиВHTML(ИмяФайлаHTML) - - ТекстовыйДокумент = Новый ТекстовыйДокумент(); - ТекстовыйДокумент.Прочитать(ИмяФайлаHTML, КодировкаТекста.UTF8); - ТекстHTML = ТекстовыйДокумент.ПолучитьТекст(); - - ФайлHTML = Новый Файл(ИмяФайлаHTML); - - ИмяПапкиКартинок = ФайлHTML.ИмяБезРасширения + "_files"; - ПутьКПапкеКартинок = СтрЗаменить(ФайлHTML.ПолноеИмя, ФайлHTML.Имя, ИмяПапкиКартинок); - - // Ожидается, что в папке будут только картинки. - ФайлыКартинок = НайтиФайлы(ПутьКПапкеКартинок, "*"); - - Для Каждого ФайлКартинки Из ФайлыКартинок Цикл - КартинкаТекстом = Base64Строка(Новый ДвоичныеДанные(ФайлКартинки.ПолноеИмя)); - КартинкаТекстом = "data:image/" + Сред(ФайлКартинки.Расширение,2) + ";base64," + Символы.ПС + КартинкаТекстом; - - ТекстHTML = СтрЗаменить(ТекстHTML, ИмяПапкиКартинок + "\" + ФайлКартинки.Имя, КартинкаТекстом); - КонецЦикла; - - ТекстовыйДокумент.УстановитьТекст(ТекстHTML); - ТекстовыйДокумент.Записать(ИмяФайлаHTML, КодировкаТекста.UTF8); - -КонецПроцедуры - -&НаСервере -Функция ИмяФайлаПечатнойФормыОбъекта(ОбъектПечати, ИмяФайлаПечатнойФормы) - Если ТипЗнч(ИмяФайлаПечатнойФормы) = Тип("Соответствие") Тогда - Возврат Строка(ИмяФайлаПечатнойФормы[ОбъектПечати]); - ИначеЕсли ТипЗнч(ИмяФайлаПечатнойФормы) = Тип("Строка") И Не ПустаяСтрока(ИмяФайлаПечатнойФормы) Тогда - Возврат ИмяФайлаПечатнойФормы; - Иначе - Возврат Неопределено; - КонецЕсли; -КонецФункции - -&НаСервере -Функция ИмяФайлаПечатнойФормыПоУмолчанию(ОбъектПечати, НазваниеПечатнойФормы) - - Если ОбщегоНазначения.ЭтоДокумент(Метаданные.НайтиПоТипу(ТипЗнч(ОбъектПечати))) Тогда - - ДокументСодержитНомер = ОбъектПечати.Метаданные().ДлинаНомера > 0; - - Если ДокументСодержитНомер Тогда - СписокРеквизитов = "Дата,Номер"; - Шаблон = НСтр("ru = '[НазваниеПечатнойФормы] № [Номер] от [Дата]'"); - Иначе - СписокРеквизитов = "Дата"; - Шаблон = НСтр("ru = '[НазваниеПечатнойФормы] от [Дата]'"); - КонецЕсли; - - ПараметрыДляВставки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбъектПечати, СписокРеквизитов); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") И ДокументСодержитНомер Тогда - МодульПрефиксацияОбъектовКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПрефиксацияОбъектовКлиентСервер"); - ПараметрыДляВставки.Номер = МодульПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ПараметрыДляВставки.Номер); - КонецЕсли; - ПараметрыДляВставки.Дата = Формат(ПараметрыДляВставки.Дата, "ДЛФ=D"); - ПараметрыДляВставки.Вставить("НазваниеПечатнойФормы", НазваниеПечатнойФормы); - - Иначе - ПараметрыДляВставки = Новый Структура; - ПараметрыДляВставки.Вставить("НазваниеПечатнойФормы",НазваниеПечатнойФормы); - ПараметрыДляВставки.Вставить("ПредставлениеОбъекта", ОбщегоНазначения.ПредметСтрокой(ОбъектПечати)); - ПараметрыДляВставки.Вставить("ТекущаяДата",Формат(ТекущаяДатаСеанса(), "ДЛФ=D")); - Шаблон = НСтр("ru = '[НазваниеПечатнойФормы] - [ПредставлениеОбъекта] - [ТекущаяДата]'"); - КонецЕсли; - - Возврат СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Шаблон, ПараметрыДляВставки); - -КонецФункции - &НаСервере Функция ПолучитьИмяФайлаДляАрхива(ПереводитьИменаФайловВТранслит) @@ -1057,27 +1005,9 @@ Если ФайлДляЗаписи.Свойство("ЭтоОфисныйДокумент") Тогда Расширение = "docx"; КонецЕсли; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла + "." + Расширение, ФайлДляЗаписи.АдресВоВременномХранилище)); - КонецЦикла; - - ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); - ДиалогВыбора.Заголовок = НСтр("ru ='Выбор папки для сохранения сформированного документа'"); - Оповещение = Новый ОписаниеОповещения("СохранитьПечатнуюФормуВФайлПослеПолученияФайлов", ЭтотОбъект); - НачатьПолучениеФайлов(Оповещение, ПолучаемыеФайлы, ДиалогВыбора, ЛОЖЬ); - -КонецПроцедуры - -&НаКлиенте -Процедура СохранитьПечатнуюФормуВФайлПослеПолученияФайлов(ПолученныеФайлы, ДополнительныеПараметры) Экспорт - - Если ПолученныеФайлы = Неопределено Тогда - Возврат; - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения(); - - Для Каждого Файл Из ПолученныеФайлы Цикл - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(Файл.Имя); + + ИмяФайла = ИмяФайла + "." + Расширение; + ФайловаяСистемаКлиент.ОткрытьФайл(ФайлДляЗаписи.АдресВоВременномХранилище, , ИмяФайла); КонецЦикла; КонецПроцедуры @@ -1198,6 +1128,35 @@ Возврат Результат; КонецФункции +&НаСервере +Функция ЕстьПечатныеФормыСПодписьюИПечатью() + Результат = Ложь; + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Результат = Результат Или НастройкаПечатнойФормы.ПодписьИПечать; + КонецЦикла; + Возврат Результат; +КонецФункции + +&НаСервере +Функция ЕстьПодписиИПечатиДляОбъектовПечати() + + Результат = Ложь; + + ПодписиИПечатиОбъектов = УправлениеПечатью.ПодписиИПечатиОбъектов(ОбъектыПечати); + Для Каждого ПодписиИПечатиОбъекта Из ПодписиИПечатиОбъектов Цикл + КоллекцияПодписейИПечатей = ПодписиИПечатиОбъекта.Значение; + Для Каждого ПодписьПечать Из КоллекцияПодписейИПечатей Цикл + Картинка = ПодписьПечать.Значение; + Если Картинка.Вид <> ВидКартинки.Пустая Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Результат; + +КонецФункции + &НаКлиенте Процедура ОткрытьМакетДляРедактирования() @@ -1277,7 +1236,6 @@ Процедура УстановитьДоступностьКомандВывода() НастройкаПечатнойФормы = ТекущаяНастройкаПечатнойФормы(); - ПечатнаяФорма = ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита]; ПолеТабличногоДокумента = Элементы[НастройкаПечатнойФормы.ИмяРеквизита]; ПечатнаяФормаДоступна = Элементы.Страницы.ТекущаяСтраница <> Элементы.СтраницаПечатнаяФормаНедоступна; @@ -1369,6 +1327,81 @@ КонецЕсли; КонецПроцедуры +&НаСервере +Функция ПараметрыОтправкиПисьма(ВыбранныеПараметры) + + СписокВложений = ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранныеПараметры); + + // Контроль уникальности имен. + ШаблонИмениФайла = "%1%2.%3"; + ИспользованныеИменаФайлов = Новый Соответствие; + Для Каждого Вложение Из СписокВложений Цикл + ИмяФайла = Вложение.Представление; + НомерИспользования = ?(ИспользованныеИменаФайлов[ИмяФайла] <> Неопределено, + ИспользованныеИменаФайлов[ИмяФайла] + 1, 1); + ИспользованныеИменаФайлов.Вставить(ИмяФайла, НомерИспользования); + Если НомерИспользования > 1 Тогда + Файл = Новый Файл(ИмяФайла); + ИмяФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениФайла, + Файл.ИмяБезРасширения, " (" + НомерИспользования + ")", Файл.Расширение); + КонецЕсли; + Вложение.Представление = ИмяФайла; + КонецЦикла; + + Получатели = ПараметрыВывода.ПараметрыОтправки.Получатель; + Если ВыбранныеПараметры.Свойство("Получатели") Тогда + Получатели = ВыбранныеПараметры.Получатели; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Получатель", Получатели); + Результат.Вставить("Тема", ПараметрыВывода.ПараметрыОтправки.Тема); + Результат.Вставить("Текст", ПараметрыВывода.ПараметрыОтправки.Текст); + Результат.Вставить("Вложения", СписокВложений); + Результат.Вставить("УдалятьФайлыПослеОтправки", Истина); + + ПечатныеФормы = Новый ТаблицаЗначений; + ПечатныеФормы.Колонки.Добавить("Название"); + ПечатныеФормы.Колонки.Добавить("ТабличныйДокумент"); + + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Если Не НастройкаПечатнойФормы.Печатать Тогда + Продолжить; + КонецЕсли; + + ТабличныйДокумент = ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита]; + Если ПечатныеФормы.НайтиСтроки(Новый Структура("ТабличныйДокумент", ТабличныйДокумент)).Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + Если ВычислитьИспользованиеВывода(ТабличныйДокумент) = ИспользованиеВывода.Запретить Тогда + Продолжить; + КонецЕсли; + + Если ТабличныйДокумент.Защита Тогда + Продолжить; + КонецЕсли; + + Если ТабличныйДокумент.ВысотаТаблицы = 0 Тогда + Продолжить; + КонецЕсли; + + ОписаниеПечатнойФормы = ПечатныеФормы.Добавить(); + ОписаниеПечатнойФормы.Название = НастройкаПечатнойФормы.Название; + ОписаниеПечатнойФормы.ТабличныйДокумент = ТабличныйДокумент; + КонецЦикла; + + СписокОбъектов = Параметры.ПараметрКоманды; + Если ОбщегоНазначения.ЗначениеСсылочногоТипа(Параметры.ПараметрКоманды) Тогда + СписокОбъектов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Параметры.ПараметрКоманды); + КонецЕсли; + + УправлениеПечатьюПереопределяемый.ПередОтправкойПоПочте(Результат, ПараметрыВывода, СписокОбъектов, ПечатныеФормы); + + Возврат Результат; + +КонецФункции + &НаКлиенте Процедура ОтправитьПечатныеФормыПоПочтеНастройкаУчетнойЗаписиПредложена(УчетнаяЗаписьНастроена, ДополнительныеПараметры) Экспорт @@ -1430,7 +1463,7 @@ ПодключитьОбработчикОжидания("СохранитьНастройки", 2, Истина); КонецПроцедуры -&НаСервере +&НаСервереБезКонтекста Функция НастройкиСохранения() НастройкиСохранения = Новый Структура; НастройкиСохранения.Вставить("ФорматыСохранения", Новый Массив); @@ -1439,5 +1472,163 @@ Возврат НастройкиСохранения; КонецФункции +&НаСервереБезКонтекста +Функция ЕстьПодписьИПечать(ТабличныйДокумент) + + Для Каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл + Если СтрНачинаетсяС(Рисунок.Имя, "Печать") + Или СтрНачинаетсяС(Рисунок.Имя, "Подпись") + Или СтрНачинаетсяС(Рисунок.Имя, "Факсимиле") Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +&НаСервере +Процедура ДобавитьПодписьИПечать() + + ПодписиИПечатиОбластей = УправлениеПечатью.ПодписиИПечатиОбластей(ОбъектыПечати); + + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Если Не НастройкаПечатнойФормы.ПодписьИПечать Тогда + Продолжить; + КонецЕсли; + ТабличныйДокумент = ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита]; + УправлениеПечатью.ДобавитьПодписьИПечать(ТабличныйДокумент, ПодписиИПечатиОбластей); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УбратьПодписьИПечать() + + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Если Не НастройкаПечатнойФормы.ПодписьИПечать Тогда + Продолжить; + КонецЕсли; + + ТабличныйДокумент = ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита]; + УправлениеПечатью.УбратьПодписьИПечать(ТабличныйДокумент); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьУдалитьПодписьПечать() + + Если ПодписьИПечать Тогда + ДобавитьПодписьИПечать(); + Иначе + УбратьПодписьИПечать(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриВыполненииКомандыНаСервере(ДополнительныеПараметры) + УправлениеПечатьюПереопределяемый.ПечатьДокументовПриВыполненииКоманды(ЭтотОбъект, ДополнительныеПараметры); +КонецПроцедуры + +#Область РасчетПоказателейВыделенныхЯчеек + +// Выполняет расчет и вывод показателей выделенной области ячеек. +// См. обработчик события ОтчетТабличныйДокументПриАктивизацииОбласти. +// +&НаКлиенте +Процедура РассчитатьПоказателиДинамически() + Перем ТекущаяКоманда; + + КомандыПоказателей = КомандыПоказателей(); + Для Каждого Команда Из КомандыПоказателей Цикл + Если Элементы[Команда.Ключ].Пометка Тогда + ТекущаяКоманда = Команда.Ключ; + Прервать; + КонецЕсли; + КонецЦикла; + + РассчитатьПоказатели(ТекущаяКоманда); +КонецПроцедуры + +// Выполняет расчет и вывод показателей выделенных областей ячеек табличного документа. +// +// Параметры: +// ТекущаяКоманда - Строка - имя команды расчета показателя, например, "РассчитатьСумму". +// Определяет, какой показатель является основным. +// +&НаКлиенте +Процедура РассчитатьПоказатели(ТекущаяКоманда = "РассчитатьСумму") + // Расчет показателей. + ПараметрыРасчета = ОбщегоНазначенияСлужебныйКлиент.ПараметрыРасчетаПоказателейЯчеек(ТекущаяПечатнаяФорма); + Если ПараметрыРасчета.РассчитатьНаСервере Тогда + РасчетныеПоказатели = РасчетныеПоказателиСервер(ПараметрыРасчета); + Иначе + РасчетныеПоказатели = ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек( + ТекущаяПечатнаяФорма, ПараметрыРасчета.ВыделенныеОбласти); + КонецЕсли; + + // Установка значений показателей. + ЗаполнитьЗначенияСвойств(ЭтотОбъект, РасчетныеПоказатели); + + // Переключение и форматирование показателей. + КомандыПоказателей = КомандыПоказателей(); + Для Каждого Команда Из КомандыПоказателей Цикл + Элементы[Команда.Ключ].Пометка = Ложь; + + ЗначениеПоказателя = РасчетныеПоказатели[Команда.Значение]; + РазрядностьПоказателя = Мин(СтрДлина(Макс(ЗначениеПоказателя, -ЗначениеПоказателя) % 1) - 2, 4); + + Элементы[Команда.Значение].ФорматРедактирования = "ЧДЦ=" + РазрядностьПоказателя + "; ЧРГ=' '; ЧН=0"; + КонецЦикла; + Элементы[ТекущаяКоманда].Пометка = Истина; + + // Вывод основного показателя. + ТекущийПоказатель = КомандыПоказателей[ТекущаяКоманда]; + Показатель = ЭтотОбъект[ТекущийПоказатель]; + Элементы.Показатель.ФорматРедактирования = Элементы[ТекущийПоказатель].ФорматРедактирования; + Элементы.КомандыВидовПоказателей.Картинка = БиблиотекаКартинок[ТекущийПоказатель]; +КонецПроцедуры + +// Рассчитывает показатели числовых ячеек в табличном документе. +// см. ОтчетыКлиентСервер.РасчетныеПоказателиЯчеек. +// +&НаСервере +Функция РасчетныеПоказателиСервер(ПараметрыРасчета) + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек(ТекущаяПечатнаяФорма, ПараметрыРасчета.ВыделенныеОбласти); +КонецФункции + +// Определяет соответствие между командами расчета показателей и показателями. +// +// Возвращаемое значение: +// Соответствие - Ключ - имя команды, Значение - имя показателя. +// +&НаКлиенте +Функция КомандыПоказателей() + КомандыПоказателей = Новый Соответствие(); + КомандыПоказателей.Вставить("РассчитатьСумму", "Сумма"); + КомандыПоказателей.Вставить("РассчитатьКоличество", "Количество"); + КомандыПоказателей.Вставить("РассчитатьСреднее", "Среднее"); + КомандыПоказателей.Вставить("РассчитатьМинимум", "Минимум"); + КомандыПоказателей.Вставить("РассчитатьМаксимум", "Максимум"); + + Возврат КомандыПоказателей; +КонецФункции + +// Управляет признаком видимости панели расчетных показателей. +// +// Параметры: +// Видимость - Булево - Признак включения / выключения видимости панели показателей. +// См. также Синтакс-помощник: ГруппаФормы.Видимость. +// +&НаКлиенте +Процедура УстановитьВидимостьПоказателей(Видимость) + Элементы.ОбластьПоказателей.Видимость = Видимость; + Элементы.РассчитатьВсеПоказатели.Пометка = Видимость; +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl index 43732a7c1..0d4b50dea 100644 --- a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl +++ b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,7 +15,7 @@ КонецЕсли; Для Каждого ФорматСохранения Из УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента() Цикл - ВыбранныеФорматыСохранения.Добавить(ФорматСохранения.ТипФайлаТабличногоДокумента, Строка(ФорматСохранения.Ссылка), Ложь, ФорматСохранения.Картинка); + ВыбранныеФорматыСохранения.Добавить(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента), Строка(ФорматСохранения.Ссылка), Ложь, ФорматСохранения.Картинка); КонецЦикла; СписокПолучателей = Параметры.Получатели; @@ -20,10 +27,8 @@ ЗаполнитьТаблицуПолучателейИзМассиваСтруктур(СписокПолучателей); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; КонецЕсли; КонецПроцедуры @@ -229,10 +234,10 @@ КонецФункции &НаКлиенте -Функция УстановитьВыборДляВсехПолучателей(Выбор) +Процедура УстановитьВыборДляВсехПолучателей(Выбор) Для Каждого Получатель Из Получатели Цикл Получатель.Выбран = Выбор; КонецЦикла; -КонецФункции +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form index c6c8d4d44..661e77a17 100644 --- a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form +++ b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Form.form @@ -558,7 +558,7 @@ <key>ru</key> - <value>Группа windows</value> + <value>Windows</value> true diff --git a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Module.bsl b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Module.bsl index 0b33964f7..28415170c 100644 --- a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Module.bsl +++ b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl index a18ee8e66..c7d7d5876 100644 --- a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl +++ b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Module.bsl b/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Module.bsl index b0d3874cb..c27b78d91 100644 --- a/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Module.bsl +++ b/SSL/src/CommonForms/ПоискИсполняемогоФайлаОнлайнПоддержки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -9,7 +17,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если НЕ ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда ПоказатьПредупреждение(,НСтр("ru = 'Для работы с приложением необходима операционная система Microsoft Windows.'")); Отказ = Истина; КонецЕсли; diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Form.form b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Form.form deleted file mode 100644 index 922ac7d06..000000000 --- a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Form.form +++ /dev/null @@ -1,543 +0,0 @@ - - - - <key>ru</key> - <value>Показатели выделенных ячеек</value> - - - Группа1 - 7 - - Сумма - 1 - true - true - - true - - - Сумма - - - ru - Сумма числовых ячеек. - - - СуммаРасширеннаяПодсказка - 3 - Label - true - true - - Left - - - - СуммаКонтекстноеМеню - 2 - true - - InputField - Enter - true - Left - true - - 17 - true - true - true - true - true - true - true - Normal - - - - КоличествоЧисловых - 15 - true - true - - true - - - КоличествоЧисловых - - - ru - Количество числовых ячеек (без учета пустых ячеек). - - - КоличествоЧисловыхРасширеннаяПодсказка - 17 - Label - true - true - - Left - - - - КоличествоЧисловыхКонтекстноеМеню - 16 - true - - InputField - Enter - true - Left - true - - 17 - true - true - true - true - true - true - true - Normal - - - - Среднее - 4 - true - true - - true - - - Среднее - - - ru - Среднее арифметическое числовых ячеек (без учета пустых ячеек). - - - СреднееРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - - СреднееКонтекстноеМеню - 5 - true - - InputField - Enter - true - Left - true - - 17 - true - true - true - true - true - true - true - Normal - - - - Минимум - 9 - true - true - - true - - - Минимум - - - ru - Наименьшее число из выделенных ячеек (без учета пустых ячеек). - - - МинимумРасширеннаяПодсказка - 11 - Label - true - true - - Left - - - - МинимумКонтекстноеМеню - 10 - true - - InputField - Enter - true - Left - true - - 17 - true - true - true - true - true - true - true - Normal - - - - Максимум - 12 - true - true - - true - - - Максимум - - - ru - Наибольшее число из выделенных ячеек. - - - МаксимумРасширеннаяПодсказка - 14 - Label - true - true - - Left - - - - МаксимумКонтекстноеМеню - 13 - true - - InputField - Enter - true - Left - true - - 17 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - true - - Группа1РасширеннаяПодсказка - 8 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - Группа2 - 24 - - КоличествоНеПустых - 26 - true - true - - true - - - КоличествоНеПустых - - - ru - Количество не пустых ячеек (включая ячейки с числами и текстом). - - - КоличествоНеПустыхРасширеннаяПодсказка - 28 - Label - true - true - - Left - - - - КоличествоНеПустыхКонтекстноеМеню - 27 - true - - InputField - Enter - true - Left - true - - 17 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - true - - Группа2РасширеннаяПодсказка - 25 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - - - Bottom - true - - ФормаКоманднаяПанель - -1 - - Закрыть - 22 - true - true - - true - - - ЗакрытьРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - Form.StandardCommand.Close - true - true - true - UserCmds - Auto - - - Справка - 29 - true - true - - true - - - СправкаРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - Right - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - true - Vertical - true - auto - true - - Сумма - - <key>ru</key> - <value>Сумма</value> - - 1 - - Number - - 25 - 5 - - - - true - - - true - - - - Среднее - - <key>ru</key> - <value>Среднее</value> - - 2 - - Number - - 25 - 5 - - - - true - - - true - - - - Минимум - - <key>ru</key> - <value>Минимум</value> - - 3 - - Number - - 25 - 5 - - - - true - - - true - - - - Максимум - - <key>ru</key> - <value>Максимум</value> - - 4 - - Number - - 25 - 5 - - - - true - - - true - - - - КоличествоЧисловых - - <key>ru</key> - <value>Количество</value> - - 5 - - Number - - 10 - - - - true - - - true - - - - КоличествоНеПустых - - <key>ru</key> - <value>Всего ячеек</value> - - 6 - - Number - - 10 - - - - true - - - true - - - - - - - diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html deleted file mode 100644 index ef8991200..000000000 --- a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html +++ /dev/null @@ -1,12 +0,0 @@ - -

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

      -

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

      -

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

      -

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

      -

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

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

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

      -
      • Всего ячеек - количество всех выделенных ячеек, независимо от содержащейся в них информации.
      \ No newline at end of file diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Module.bsl b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Module.bsl deleted file mode 100644 index 67607d3c0..000000000 --- a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Module.bsl +++ /dev/null @@ -1,49 +0,0 @@ -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Параметры: - // Если передан параметр Расчет, то параметры ТабличныйДокумент и ВыделенныеОбласти не используются. - // Расчет - Структура - Результат функции СтандартныеПодсистемыКлиентСервер.РасчетЯчеек(). - // ТабличныйДокумент - ТабличныйДокумент - Таблица, для которой выполняются расчеты. - // ВыделенныеОбласти - Массив - Области документа, которые требуется рассчитать. - // См. возвращаемое значение функции СтандартныеПодсистемыКлиент.ВыделенныеОбласти(). - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Расчет = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Расчет"); - Если ТипЗнч(Расчет) <> Тип("Структура") Тогда - Расчет = СтандартныеПодсистемыКлиентСервер.РасчетЯчеек(Параметры.ТабличныйДокумент, Параметры.ВыделенныеОбласти); - КонецЕсли; - ЗаполнитьЗначенияСвойств(ЭтотОбъект, Расчет); - - РазрядностьЧисел = Макс(0, Разрядность(Сумма), Разрядность(Минимум), Разрядность(Максимум)); - РазрядностьСреднего = Макс(РазрядностьЧисел, Разрядность(Среднее)); - - ФорматЧисел = "ЧДЦ=" + Строка(РазрядностьЧисел) + "; ЧН=0"; - Элементы.Сумма.ФорматРедактирования = ФорматЧисел; - Элементы.Минимум.ФорматРедактирования = ФорматЧисел; - Элементы.Максимум.ФорматРедактирования = ФорматЧисел; - Элементы.Среднее.ФорматРедактирования = "ЧДЦ=" + Строка(РазрядностьСреднего) + "; ЧН=0"; - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Закрыть", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Справка", "ТолькоВоВсехДействиях", Истина); - - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиентеНаСервереБезКонтекста -Функция Разрядность(Число) - Возврат СтрДлина(Макс(Число,-Число)%1)-2; -КонецФункции - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl index 6850e701f..1427ec94e 100644 --- a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl +++ b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/ПраваДоступа/Module.bsl b/SSL/src/CommonForms/ПраваДоступа/Module.bsl index 9f1e9dc98..28277d495 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступа/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -106,13 +113,10 @@ ТекущийРодитель = Элементы.ГруппыДоступа.ТекущийРодитель; Если ТекущиеДанные = Неопределено Тогда - - ГруппаДоступаИзменена = ЗначениеЗаполнено(ТекущаяГруппаДоступа); - ТекущаяГруппаДоступа = Неопределено; + ТекущаяГруппаДоступа = Неопределено; Иначе - НоваяГруппаДоступа = ?(ТекущийРодитель = Неопределено, ТекущиеДанные.ГруппаДоступа, ТекущийРодитель.ГруппаДоступа); - ГруппаДоступаИзменена = ТекущаяГруппаДоступа <> НоваяГруппаДоступа; - ТекущаяГруппаДоступа = НоваяГруппаДоступа; + ТекущаяГруппаДоступа = ?(ТекущийРодитель = Неопределено, + ТекущиеДанные.ГруппаДоступа, ТекущийРодитель.ГруппаДоступа); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index 7d70d0b0d..30c99ef3a 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -458,7 +465,7 @@ Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); Если ОтказПриЗаписиИзменений Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( КраткоеПредставлениеОшибки(ИнформацияОбОшибке),,,, Отказ); Иначе ВызватьИсключение; diff --git a/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form b/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form index fb9eeee92..d752975c5 100644 --- a/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form +++ b/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form @@ -472,44 +472,6 @@ ПередДобавлениемРасширений 17 - - Надпись4МобильныйКлиент - 211 - - <key>ru</key> - <value>При подключении расширения конфигурации рекомендуется обращать внимание на источник, из которого был получен файл расширения. -Если вы не уверены в содержимом расширения или в его источнике, то расширение не рекомендуется подключать к программе. - -См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>. -</value> - - true - - true - - - Надпись4МобильныйКлиентРасширеннаяПодсказка - 213 - Label - true - true - - Left - - - - Надпись4МобильныйКлиентКонтекстноеМеню - 212 - true - - true - Label - true - true - - Left - - Надпись4 26 diff --git a/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl b/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl index 30d0e290e..d4373d700 100644 --- a/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl +++ b/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -59,31 +67,11 @@ Элементы.ПредупрежденииПередУдалениемРасширенияТекстУдалить.Заголовок = НСтр("ru = 'Удалить расширение?'"); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Для каждого ЭлементФормы Из Элементы Цикл - - Если ТипЗнч(ЭлементФормы) <> Тип("КнопкаФормы") - ИЛИ СтрНайти(ЭлементФормы.Имя, "Отмена") = 0 Тогда - - Продолжить; - - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, ЭлементФормы.Имя, "Видимость", Ложь); - - КонецЦикла; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Надпись4", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Надпись4МобильныйКлиент", "Видимость", Истина); - - КонецЕсли; - КонецПроцедуры #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПредупрежденииПередУдалениемРасширенияРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl index 070d1e8b0..c5d42302d 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/ПустойРабочийСтол/Module.bsl b/SSL/src/CommonForms/ПустойРабочийСтол/Module.bsl index 10dd61cb5..4eed480c5 100644 --- a/SSL/src/CommonForms/ПустойРабочийСтол/Module.bsl +++ b/SSL/src/CommonForms/ПустойРабочийСтол/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/Расширения/Form.form b/SSL/src/CommonForms/Расширения/Form.form index ed1ffdeb9..6e925d242 100644 --- a/SSL/src/CommonForms/Расширения/Form.form +++ b/SSL/src/CommonForms/Расширения/Form.form @@ -690,6 +690,9 @@ CheckBoxField Auto true + + StdPicture.CheckAll + Left true @@ -1069,6 +1072,46 @@ true + + СписокРасширенийСостояниеПодключения + 194 + true + true + + + СписокРасширений.СостояниеПодключения + + + СписокРасширенийСостояниеПодключенияРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + СписокРасширенийСостояниеПодключенияКонтекстноеМеню + 195 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + СписокРасширенийКонтрольнаяСумма 98 @@ -1420,25 +1463,324 @@ true - - Легенда - 181 - - <key>ru</key> - <value><bgcolor #63dc87> </> Подключено при входе в программу -<fontsize 6> </> -<bgcolor #929292> </> Будет подключено после перезапуска программы -<fontsize 6> </> -<bgcolor #fb7158> </> Не удалось подключить при входе в программу</value> - + + ГруппаЛегенда + 197 + + ГруппаЛегендаПодключено + 199 + + КартинкаПодключено + 201 + + <key>ru</key> + <value>Подключено</value> + + true + true + + true + + + КартинкаПодключеноРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + + КартинкаПодключеноКонтекстноеМеню + 202 + true + + true + true + + + CommonPicture.СостоянияРасширенийПодключено + + + + + ЛегендаПодключено + 181 + + <key>ru</key> + <value>Расширение подключено</value> + + true + true + + true + + + ЛегендаПодключеноРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + ЛегендаПодключеноКонтекстноеМеню + 182 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Легенда подключено</value> + + + ГруппаЛегендаПодключеноРасширеннаяПодсказка + 200 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаЛегендаБудетПодключено + 204 + + КартинкаБудетПодключено + 206 + + <key>ru</key> + <value>Будет подключено</value> + + true + true + + true + + + КартинкаБудетПодключеноРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + + КартинкаБудетПодключеноКонтекстноеМеню + 207 + true + + true + true + + + CommonPicture.СостоянияРасширенийБудетПодключено + + + + + ЛегендаБудетПодключено + 209 + + <key>ru</key> + <value>Будет подключено после перезапуска программы</value> + + true + true + + true + + + ЛегендаБудетПодключеноРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + + ЛегендаБудетПодключеноКонтекстноеМеню + 210 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Легенда будет подключено</value> + + + ГруппаЛегендаБудетПодключеноРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаЛегендаОшибкаПодключения + 212 + + КартинкаОшибкаПодключения + 214 + + <key>ru</key> + <value>Ошибка подключения</value> + + true + true + + true + + + КартинкаОшибкаПодключенияРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + + КартинкаОшибкаПодключенияКонтекстноеМеню + 215 + true + + true + true + + + CommonPicture.СостоянияРасширенийОшибка + + + + + ЛегендаОшибкаПодключения + 217 + + <key>ru</key> + <value>Не удалось подключить при входе в программу</value> + + true + true + + true + + + ЛегендаОшибкаПодключенияРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + ЛегендаОшибкаПодключенияКонтекстноеМеню + 218 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Легенда ошибка подключения</value> + + + ГруппаЛегендаОшибкаПодключенияРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + true true true + + <key>ru</key> + <value>Легенда</value> + - ЛегендаРасширеннаяПодсказка - 183 + ГруппаЛегендаРасширеннаяПодсказка + 198 Label true true @@ -1446,17 +1788,14 @@ Left - - ЛегендаКонтекстноеМеню - 182 - true - - true - Label - true - true - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -1925,6 +2264,24 @@ true + + СостояниеПодключения + + <key>ru</key> + <value>Состояние подключения</value> + + 16 + + String + + + + true + + + true + + ЭтоНеразделенныйПользовательВОбласти diff --git a/SSL/src/CommonForms/Расширения/Module.bsl b/SSL/src/CommonForms/Расширения/Module.bsl index 6d9a85388..95baa496d 100644 --- a/SSL/src/CommonForms/Расширения/Module.bsl +++ b/SSL/src/CommonForms/Расширения/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -52,19 +60,6 @@ ОбновитьСписок(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Элементы.Переместить(Элементы.СписокРасширенийДобавить, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.СписокРасширенийУдалить, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.КнопкиСписка, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ФормаУстановленныеПатчи, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ФормаОбновитьКэшиРасширений, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ФормаУдалитьУстаревшиеКэшиРасширений, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандыФормы", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -202,33 +197,12 @@ Возврат; КонецЕсли; - Контекст = Новый Структура; - Контекст.Вставить("Адрес", Адрес); - Контекст.Вставить("НачальноеИмяФайла", ТекущееРасширение.Имя - + "_" + ТекущееРасширение.Версия + ".cfe"); + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения расширения конфигурации'"); + ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы расширений конфигурации (*.cfe)|*.cfe|Все файлы (*.*)|*.*'"); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами( - Новый ОписаниеОповещения("СохранитьКакПослеУстановкиРасширения", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -&НаКлиенте -Процедура СохранитьКакПослеУстановкиРасширения(РасширениеПодключено, Контекст) Экспорт - - Если РасширениеПодключено Тогда - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла( - Контекст.НачальноеИмяФайла, Контекст.Адрес)); - - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения расширения конфигурации'"); - Диалог.Фильтр = НСтр("ru = 'Файлы расширений конфигурации (*.cfe)|*.cfe|Все файлы (*.*)|*.*'"); - Диалог.МножественныйВыбор = Ложь; - - НачатьПолучениеФайлов(Новый ОписаниеОповещения, ПолучаемыеФайлы, Диалог); - Иначе - ПолучитьФайл(Контекст.Адрес, Контекст.НачальноеИмяФайла); - КонецЕсли; + ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, Адрес, + ТекущееРасширение.Имя + "_" + ТекущееРасширение.Версия + ".cfe", ПараметрыСохранения); КонецПроцедуры @@ -333,29 +307,36 @@ Для Каждого Расширение Из Расширения Цикл ЭлементРасширения = СписокРасширений.Добавить(); - ЭлементРасширения.ИдентификаторРасширения = Расширение.УникальныйИдентификатор; - ЭлементРасширения.Имя = Расширение.Имя; - ЭлементРасширения.Версия = Расширение.Версия; - ЭлементРасширения.КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); - ЭлементРасширения.Синоним = Расширение.Синоним; - ЭлементРасширения.Назначение = Расширение.Назначение; - ЭлементРасширения.БезопасныйРежим = Расширение.БезопасныйРежим; - ЭлементРасширения.Подключать = Расширение.Активно; - ЭлементРасширения.ПолученоИзГлавногоУзлаРИБ = Расширение.ГлавныйУзел <> Неопределено; + ЭлементРасширения.ИдентификаторРасширения = Расширение.УникальныйИдентификатор; + ЭлементРасширения.Имя = Расширение.Имя; + ЭлементРасширения.Версия = Расширение.Версия; + ЭлементРасширения.КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); + ЭлементРасширения.Синоним = Расширение.Синоним; + ЭлементРасширения.Назначение = Расширение.Назначение; + ЭлементРасширения.БезопасныйРежим = Расширение.БезопасныйРежим; + ЭлементРасширения.Подключать = Расширение.Активно; + ЭлементРасширения.ПолученоИзГлавногоУзлаРИБ = Расширение.ГлавныйУзел <> Неопределено; ЭлементРасширения.ПередаватьВПодчиненныеУзлыРИБ = Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе; - ЭлементРасширения.НомерПоПорядку = Расширения.Найти(Расширение) + 1; + ЭлементРасширения.НомерПоПорядку = Расширения.Найти(Расширение) + 1; + + ЭлементРасширения.Общее = (Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.ИнформационнаяБаза); - ЭлементРасширения.Общее = - Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.ИнформационнаяБаза; - ЭлементРасширения.ПриоритетНазначения = ?(Расширение.Назначение = Метаданные.СвойстваОбъектов.НазначениеРасширенияКонфигурации.Исправление, 1, ?(Расширение.Назначение = Метаданные.СвойстваОбъектов.НазначениеРасширенияКонфигурации.Адаптация, 2, 3)); - ЭлементРасширения.Подключено = - ?(ПодключенныеРасширения[Расширение.Имя + Расширение.ХешСумма + Расширение.ОбластьДействия] <> Неопределено, 0, - ?(ОтключенныеРасширения[Расширение.Имя + Расширение.ХешСумма + Расширение.ОбластьДействия] <> Неопределено, 2, 1)); - + КлючРасширения = Расширение.Имя + Расширение.ХешСумма + Расширение.ОбластьДействия; + Если ПодключенныеРасширения[КлючРасширения] <> Неопределено Тогда + ЭлементРасширения.Подключено = 0; + ЭлементРасширения.СостояниеПодключения = НСтр("ru = 'Подключено'"); + ИначеЕсли ОтключенныеРасширения[КлючРасширения] <> Неопределено Тогда + ЭлементРасширения.Подключено = 2; + ЭлементРасширения.СостояниеПодключения = НСтр("ru = 'Отключено'"); + Иначе + ЭлементРасширения.Подключено = 1; + ЭлементРасширения.СостояниеПодключения = НСтр("ru = 'Требуется перезапуск'"); + КонецЕсли; + Если ПустаяСтрока(ЭлементРасширения.Синоним) Тогда ЭлементРасширения.Синоним = ЭлементРасширения.Имя; КонецЕсли; @@ -378,8 +359,9 @@ УстановитьПривилегированныйРежим(Истина); УстановленныеРасширения = Справочники.ВерсииРасширений.УстановленныеРасширения(); - Элементы.ГруппаПредупреждение.Видимость = - ПараметрыСеанса.УстановленныеРасширения.Основные <> УстановленныеРасширения.Основные; + ИзменилосьСостояниеРасширений = + (ПараметрыСеанса.УстановленныеРасширения.ОсновныеСостояние <> УстановленныеРасширения.ОсновныеСостояние); + Элементы.ГруппаПредупреждение.Видимость = ИзменилосьСостояниеРасширений; УстановитьПривилегированныйРежим(Ложь); // Обновление реквизита формы для условного форматирования. @@ -709,40 +691,15 @@ Возврат; КонецЕсли; - Оповещение = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеУстановкиРасширения", ЭтотОбъект, Контекст); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение); + Оповещение = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеПомещенияФайлов", ЭтотОбъект, Контекст); -КонецПроцедуры - -&НаКлиенте -Процедура ЗагрузитьРасширениеПослеУстановкиРасширения(РасширениеПодключено, Контекст) Экспорт + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Расширение конфигурации'", "ru")+ " (*.cfe)|*.cfe"; + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл расширения конфигурации'", "ru"); + ПараметрыЗагрузки.Диалог.ПроверятьСуществованиеФайла = Истина; - Если РасширениеПодключено Тогда - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - Диалог.Фильтр = НСтр("ru = 'Расширение конфигурации'", "ru")+ " (*.cfe)|*.cfe"; - Диалог.МножественныйВыбор = Контекст.МножественныйВыбор; - Диалог.ПроверятьСуществованиеФайла = Истина; - Диалог.Заголовок = НСтр("ru = 'Выберите файл расширения конфигурации'", "ru"); - НачатьПомещениеФайлов(Новый ОписаниеОповещения( - "ЗагрузитьРасширениеПослеПомещенияФайлов", ЭтотОбъект, Контекст), - , Диалог, , УникальныйИдентификатор); - Иначе - РасширенияФайла = "*.cfe"; - НачатьПомещениеФайла(Новый ОписаниеОповещения( - "ЗагрузитьРасширениеПослеПомещенияФайла", ЭтотОбъект, Контекст), - , РасширенияФайла, , ЭтотОбъект.УникальныйИдентификатор); - КонецЕсли - -КонецПроцедуры - -&НаКлиенте -Процедура ЗагрузитьРасширениеПослеПомещенияФайла(ФайлПомещен, Адрес, ВыбранноеИмяФайла, Контекст) Экспорт - - Если ФайлПомещен Тогда - ПомещенныеФайлы = Новый Массив; - ПомещенныеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ВыбранноеИмяФайла, Адрес)); - ЗагрузитьРасширениеПослеПомещенияФайлов(ПомещенныеФайлы, Контекст); - КонецЕсли; + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + ФайловаяСистемаКлиент.ЗагрузитьФайлы(Оповещение, ПараметрыЗагрузки); КонецПроцедуры @@ -1079,7 +1036,7 @@ Расширение = НайтиРасширение(СтрокаСписка.ИдентификаторРасширения); Если Расширение <> Неопределено Тогда - + Если Расширение.БезопасныйРежим <> СтрокаСписка.БезопасныйРежимФлаг Тогда Расширение.БезопасныйРежим = СтрокаСписка.БезопасныйРежимФлаг; @@ -1096,6 +1053,8 @@ КонецЕсли; + ОбновитьСписок(); + КонецПроцедуры &НаСервере @@ -1125,6 +1084,8 @@ КонецЕсли; + ОбновитьСписок(); + КонецПроцедуры &НаСервере @@ -1156,6 +1117,8 @@ КонецЕсли; + ОбновитьСписок(); + КонецПроцедуры &НаСервере @@ -1278,9 +1241,7 @@ &НаСервере Процедура ОтключитьПредупрежденияБезопасности(Расширение) - Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда - Расширение.ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); - КонецЕсли; + Расширение.ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); КонецПроцедуры diff --git a/SSL/src/CommonForms/РедактированиеГиперссылки/Form.form b/SSL/src/CommonForms/РедактированиеГиперссылки/Form.form index 645c28991..a5bcdc6e2 100644 --- a/SSL/src/CommonForms/РедактированиеГиперссылки/Form.form +++ b/SSL/src/CommonForms/РедактированиеГиперссылки/Form.form @@ -1,5 +1,5 @@ - + Ссылка 1 @@ -106,11 +106,13 @@
      Form.Command.КнопкаОк - Auto true true true UserCmds + + StdPicture.WriteAndClose + Auto diff --git a/SSL/src/CommonForms/РедактированиеГиперссылки/Module.bsl b/SSL/src/CommonForms/РедактированиеГиперссылки/Module.bsl index 00cb2cd15..b2ec3472c 100644 --- a/SSL/src/CommonForms/РедактированиеГиперссылки/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеГиперссылки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -37,11 +44,9 @@ Ссылка = Параметры.ЗначениеРеквизита; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаКнопкаОтмена", "Видимость", Ложь); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + Элементы.ФормаКнопкаОк.Отображение = ОтображениеКнопки.Картинка; КонецЕсли; КонецПроцедуры @@ -71,8 +76,6 @@ Если Не ЗначениеЗаполнено(Представление) Тогда Представление = Ссылка; КонецЕсли; - РезультатСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Ссылка, Представление); - РезультатФорматированнаяСтрока = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(РезультатСтрока); Если Не ЗначениеЗаполнено(Ссылка) Тогда Значение = ""; ВозвращаемоеЗначение.Вставить("ФорматированнаяСтрока", ПустаяФорматированнаяСтрока()); diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form index e7dbbb643..d1f95d7cd 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form @@ -351,9 +351,6 @@ true true UserCmds - - CommonPicture.ОбновитьФайлИзФайлаНаДиске - Auto @@ -736,11 +733,15 @@ true + + StdPicture.WriteAndClose + ЗаписатьИЗакрыть + Text DontUse Auto diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl index 763927bef..a59d46687 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -30,9 +37,8 @@ // Заполнение таблицы значений свойств. ЗаполнитьТаблицуЗначенийСвойств(Истина); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗаписатьИЗакрыть", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); КонецЕсли; diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form index fabd92a46..987ce51b5 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form @@ -1434,21 +1434,6 @@ UseIfNecessary auto true - - Объект - 1 - - String - - - - true - - - true - -
      true
      -
      ТабличныйДокумент diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl index 78568bd74..0f2a6b4af 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -34,24 +41,20 @@ ЭтоМакет = Не ПустаяСтрока(Параметры.ИмяОбъектаМетаданныхМакета); Элементы.Предупреждение.Видимость = ЭтоМакет И Параметры.Редактирование; - Элементы.РедактироватьВоВнешнейПрограмме.Видимость = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() + Элементы.РедактироватьВоВнешнейПрограмме.Видимость = ОбщегоНазначения.ЭтоВебКлиент() И Не ПустаяСтрока(Параметры.ИмяОбъектаМетаданныхМакета) И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать"); Если Не ПустаяСтрока(Параметры.ИмяДокумента) Тогда ИмяДокумента = Параметры.ИмяДокумента; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + Элементы.ТабличныйДокумент.ОтображатьИменаСтрокИКолонок = ТабличныйДокумент.Макет; + Элементы.ТабличныйДокумент.ОтображатьИменаЯчеек = ТабличныйДокумент.Макет; + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Предупреждение", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ТабличныйДокумент", "ОтображатьИменаСтрокИКолонок", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ТабличныйДокумент", "ОтображатьИменаЯчеек", Ложь); - - Иначе - - Элементы.ТабличныйДокумент.ОтображатьИменаСтрокИКолонок = ТабличныйДокумент.Макет; - Элементы.ТабличныйДокумент.ОтображатьИменаЯчеек = ТабличныйДокумент.Макет; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Предупреждение", "Видимость", Ложь); КонецЕсли; @@ -415,7 +418,7 @@ ДиалогСохраненияФайла.Фильтр = НСтр("ru = 'Табличный документ'") + " (*.mxl)|*.mxl"; ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииДиалогаВыбораФайла", ЭтотОбъект, ОбработчикЗавершения); - ДиалогСохраненияФайла.Показать(ОписаниеОповещения); + ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ДиалогСохраненияФайла); КонецПроцедуры diff --git a/SSL/src/CommonForms/РезультатПроверки/Module.bsl b/SSL/src/CommonForms/РезультатПроверки/Module.bsl index d265e65fd..826bdc941 100644 --- a/SSL/src/CommonForms/РезультатПроверки/Module.bsl +++ b/SSL/src/CommonForms/РезультатПроверки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/CommonForms/Сертификат/Form.form b/SSL/src/CommonForms/Сертификат/Form.form index 0ed1429e5..e37c3eaa6 100644 --- a/SSL/src/CommonForms/Сертификат/Form.form +++ b/SSL/src/CommonForms/Сертификат/Form.form @@ -890,6 +890,10 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>Clearing</event> + <name>ГруппаВнутреннихПолейОчистка</name> + </handlers> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>false</horizontalStretch> diff --git a/SSL/src/CommonForms/Сертификат/Module.bsl b/SSL/src/CommonForms/Сертификат/Module.bsl index 704b9901e..7c1da525f 100644 --- a/SSL/src/CommonForms/Сертификат/Module.bsl +++ b/SSL/src/CommonForms/Сертификат/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -36,17 +43,17 @@ Сертификат = Новый СертификатКриптографии(ДанныеСертификата); КонецЕсли; - СтруктураСертификата = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(Сертификат); + СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(Сертификат); НазначениеПодписание = Сертификат.ИспользоватьДляПодписи; НазначениеШифрование = Сертификат.ИспользоватьДляШифрования; - Отпечаток = СтруктураСертификата.Отпечаток; - КомуВыдан = СтруктураСертификата.КомуВыдан; - КемВыдан = СтруктураСертификата.КемВыдан; - ДействителенДо = СтруктураСертификата.ДействителенДо; + Отпечаток = СвойстваСертификата.Отпечаток; + КомуВыдан = СвойстваСертификата.КомуВыдан; + КемВыдан = СвойстваСертификата.КемВыдан; + ДействителенДо = СвойстваСертификата.ДатаОкончания; - ЗаполнитьКодыНазначенияСертификата(СтруктураСертификата.Назначение, НазначениеКоды); + ЗаполнитьКодыНазначенияСертификата(СвойстваСертификата.Назначение, НазначениеКоды); ЗаполнитьСвойстваСубъекта(Сертификат); ЗаполнитьСвойстваИздателя(Сертификат); @@ -72,6 +79,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ГруппаВнутреннихПолейОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -116,33 +130,32 @@ &НаСервере Процедура ЗаполнитьСвойстваСубъекта(Сертификат) - Коллекция = ЭлектроннаяПодписьКлиентСервер.СвойстваСубъектаСертификата(Сертификат); + Коллекция = ЭлектроннаяПодпись.СвойстваСубъектаСертификата(Сертификат); - ПредставленияСвойств = Новый СписокЗначений; - ПредставленияСвойств.Добавить("ОбщееИмя", НСтр("ru = 'Общее имя'")); - ПредставленияСвойств.Добавить("Страна", НСтр("ru = 'Страна'")); - ПредставленияСвойств.Добавить("Регион", НСтр("ru = 'Регион'")); - ПредставленияСвойств.Добавить("НаселенныйПункт", НСтр("ru = 'Населенный пункт'")); - ПредставленияСвойств.Добавить("Улица", НСтр("ru = 'Улица'")); - ПредставленияСвойств.Добавить("Организация", НСтр("ru = 'Организация'")); - ПредставленияСвойств.Добавить("Подразделение", НСтр("ru = 'Подразделение'")); - ПредставленияСвойств.Добавить("Должность", НСтр("ru = 'Должность'")); - ПредставленияСвойств.Добавить("ЭлектроннаяПочта", НСтр("ru = 'Электронная почта'")); - ПредставленияСвойств.Добавить("ОГРН", НСтр("ru = 'ОГРН'")); - ПредставленияСвойств.Добавить("ОГРНИП", НСтр("ru = 'ОГРНИП'")); - ПредставленияСвойств.Добавить("СНИЛС", НСтр("ru = 'СНИЛС'")); - ПредставленияСвойств.Добавить("ИНН", НСтр("ru = 'ИНН'")); - ПредставленияСвойств.Добавить("Фамилия", НСтр("ru = 'Фамилия'")); - ПредставленияСвойств.Добавить("Имя", НСтр("ru = 'Имя'")); - ПредставленияСвойств.Добавить("Отчество", НСтр("ru = 'Отчество'")); + ПредставленияСвойств = Новый Соответствие; + ПредставленияСвойств["ОбщееИмя"] = НСтр("ru = 'Общее имя'"); + ПредставленияСвойств["Страна"] = НСтр("ru = 'Страна'"); + ПредставленияСвойств["Регион"] = НСтр("ru = 'Регион'"); + ПредставленияСвойств["НаселенныйПункт"] = НСтр("ru = 'Населенный пункт'"); + ПредставленияСвойств["Улица"] = НСтр("ru = 'Улица'"); + ПредставленияСвойств["Организация"] = НСтр("ru = 'Организация'"); + ПредставленияСвойств["Подразделение"] = НСтр("ru = 'Подразделение'"); + ПредставленияСвойств["ЭлектроннаяПочта"] = НСтр("ru = 'Электронная почта'"); + + Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьЛокализацияКлиентСервер") <> Неопределено Тогда + МодульЭлектроннаяПодписьЛокализацияКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); + ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(ПредставленияСвойств, + МодульЭлектроннаяПодписьЛокализацияКлиентСервер.ПредставленияСвойствСубъектаСертификата(), Истина); + КонецЕсли; Для каждого ЭлементСписка Из ПредставленияСвойств Цикл - Если Не ЗначениеЗаполнено(Коллекция[ЭлементСписка.Значение]) Тогда + ЗначениеСвойства = Коллекция[ЭлементСписка.Ключ]; + Если Не ЗначениеЗаполнено(ЗначениеСвойства) Тогда Продолжить; КонецЕсли; Строка = Субъект.Добавить(); - Строка.Свойство = ЭлементСписка.Представление; - Строка.Значение = Коллекция[ЭлементСписка.Значение]; + Строка.Свойство = ЭлементСписка.Значение; + Строка.Значение = ЗначениеСвойства; КонецЦикла; КонецПроцедуры @@ -150,27 +163,32 @@ &НаСервере Процедура ЗаполнитьСвойстваИздателя(Сертификат) - Коллекция = ЭлектроннаяПодписьКлиентСервер.СвойстваИздателяСертификата(Сертификат); + Коллекция = ЭлектроннаяПодпись.СвойстваИздателяСертификата(Сертификат); - ПредставленияСвойств = Новый СписокЗначений; - ПредставленияСвойств.Добавить("ОбщееИмя", НСтр("ru = 'Общее имя'")); - ПредставленияСвойств.Добавить("Страна", НСтр("ru = 'Страна'")); - ПредставленияСвойств.Добавить("Регион", НСтр("ru = 'Регион'")); - ПредставленияСвойств.Добавить("НаселенныйПункт", НСтр("ru = 'Населенный пункт'")); - ПредставленияСвойств.Добавить("Улица", НСтр("ru = 'Улица'")); - ПредставленияСвойств.Добавить("Организация", НСтр("ru = 'Организация'")); - ПредставленияСвойств.Добавить("Подразделение", НСтр("ru = 'Подразделение'")); - ПредставленияСвойств.Добавить("ЭлектроннаяПочта", НСтр("ru = 'Электронная почта'")); - ПредставленияСвойств.Добавить("ОГРН", НСтр("ru = 'ОГРН'")); - ПредставленияСвойств.Добавить("ИНН", НСтр("ru = 'ИНН'")); + ПредставленияСвойств = Новый Соответствие; + ПредставленияСвойств["ОбщееИмя"] = НСтр("ru = 'Общее имя'"); + ПредставленияСвойств["Страна"] = НСтр("ru = 'Страна'"); + ПредставленияСвойств["Регион"] = НСтр("ru = 'Регион'"); + ПредставленияСвойств["НаселенныйПункт"] = НСтр("ru = 'Населенный пункт'"); + ПредставленияСвойств["Улица"] = НСтр("ru = 'Улица'"); + ПредставленияСвойств["Организация"] = НСтр("ru = 'Организация'"); + ПредставленияСвойств["Подразделение"] = НСтр("ru = 'Подразделение'"); + ПредставленияСвойств["ЭлектроннаяПочта"] = НСтр("ru = 'Электронная почта'"); + Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьЛокализацияКлиентСервер") <> Неопределено Тогда + МодульЭлектроннаяПодписьЛокализацияКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); + ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(ПредставленияСвойств, + МодульЭлектроннаяПодписьЛокализацияКлиентСервер.ПредставленияСвойствИздателяСертификата(), Истина); + КонецЕсли; + Для каждого ЭлементСписка Из ПредставленияСвойств Цикл - Если Не ЗначениеЗаполнено(Коллекция[ЭлементСписка.Значение]) Тогда + ЗначениеСвойства = Коллекция[ЭлементСписка.Ключ]; + Если Не ЗначениеЗаполнено(ЗначениеСвойства) Тогда Продолжить; КонецЕсли; Строка = Издатель.Добавить(); - Строка.Свойство = ЭлементСписка.Представление; - Строка.Значение = Коллекция[ЭлементСписка.Значение]; + Строка.Свойство = ЭлементСписка.Значение; + Строка.Значение = ЗначениеСвойства; КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Form.form b/SSL/src/CommonForms/СинхронизацияДанных/Form.form index 17cbcd69f..4fe70757b 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Form.form +++ b/SSL/src/CommonForms/СинхронизацияДанных/Form.form @@ -501,39 +501,39 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> + <items xsi:type="form:Button"> + <name>ОткрытьРезультатыСинхронизацииДанных</name> + <id>367</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ОткрытьРезультатыСинхронизацииДанныхExtendedTooltip</name> + <id>461</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <type>Hyperlink</type> + <commandName>Form.Command.ОткрытьРезультатыСинхронизацииДанных</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <items xsi:type="form:FormGroup"> <name>ПанельСписокПриложений</name> <id>701</id> <items xsi:type="form:FormGroup"> <name>СтраницаСписокПриложений</name> <id>703</id> - <items xsi:type="form:Button"> - <name>ОткрытьРезультатыСинхронизацииДанных</name> - <id>367</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ОткрытьРезультатыСинхронизацииДанныхExtendedTooltip</name> - <id>461</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <type>Hyperlink</type> - <commandName>Form.Command.ОткрытьРезультатыСинхронизацииДанных</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - </items> <items xsi:type="form:FormGroup"> <name>КоманднаяПанель</name> <id>145</id> @@ -2647,24 +2647,6 @@ <common>true</common> </edit> </columns> - <columns> - <name>ИмяФормыПомощникаНастройкиСинхронизацииДанных</name> - <title> - <key>ru</key> - <value>Имя формы помощника настройки синхронизации данных</value> - - 26 - - String - - - - true - - - true - - ВерсияКорреспондента @@ -2995,6 +2977,23 @@ <common>true</common> </edit> </columns> + <columns> + <name>ВнешняяСистема</name> + <title> + <key>ru</key> + <value>Внешняя система</value> + + 32 + + Boolean + + + true + + + true + + ЕстьПравоАдминистрированиеОбменов diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl index 442f65d00..6335bc5e7 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -21,21 +29,6 @@ УстановитьОтображениеЭлементовФормы(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Элементы.Переместить(Элементы.СписокПриложенийГруппаУправление, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.СписокПриложенийГруппаИзменениеИСостав, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.СписокПриложенийГруппаВыполненияОбменаДанными, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.СписокПриложенийГруппаРасписаниеВыполненияОбмена, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.СписокПриложенийГруппаСобытия, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.СписокПриложенийГруппаТиповые, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.СписокПриложенийОбновитьМонитор, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ФормаСправка, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -222,7 +215,7 @@ Возврат; КонецЕсли; - Если МодельСервиса + Если ТекущиеДанные.ЭтоОбменСПриложениемВСервисе И ТекущиеДанные.НастройкаСинхронизацииВМенеджереСервиса Тогда ПоказатьПредупреждение(, НСтр("ru = 'Для удаления настройки синхронизации данных перейдите в менеджер сервиса. @@ -278,9 +271,11 @@ Возврат; КонецЕсли; - Если Не НастройкаСинхронизацииЗавершена(ТекущиеДанные.УзелИнформационнойБазы) Тогда + ДанныеДляЗавершенияНастройки = Неопределено; + Если ПродолжитьНастройкуНовойСинхронизации(ТекущиеДанные, ДанныеДляЗавершенияНастройки) Тогда ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные); + ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные); + ДополнительныеПараметры.Вставить("ДанныеДляЗавершенияНастройки", ДанныеДляЗавершенияНастройки); ОповещениеЗавершения = Новый ОписаниеОповещения("ВопросПродолжитьНастройкуСинхронизацииЗавершение", ЭтотОбъект, ДополнительныеПараметры); ПоказатьВопрос(ОповещениеЗавершения, @@ -298,7 +293,7 @@ ОповещениеОЗакрытии = Новый ОписаниеОповещения("НачальнаяВыгрузкаДанныхЗавершение", ЭтотОбъект); ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма.ВыгрузкаДанныхДляСопоставления", - ПараметрыПомощника, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецЕсли; КонецПроцедуры @@ -392,57 +387,139 @@ &НаКлиенте Процедура ВопросПродолжитьНастройкуСинхронизацииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт - Если РезультатВопроса = КодВозвратаДиалога.Да Тогда - ОткрытьФормуНастройкиПараметровСинхронизации(ДополнительныеПараметры.ТекущиеДанные); + Если Не РезультатВопроса = КодВозвратаДиалога.Да Тогда + Возврат; КонецЕсли; + ОткрытьФормуПомощникаНастройкиНовойСинхронизации( + ДополнительныеПараметры.ТекущиеДанные, + ДополнительныеПараметры.ДанныеДляЗавершенияНастройки); + КонецПроцедуры &НаКлиенте Процедура НачальнаяВыгрузкаДанныхЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт - ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораВФоне", 0.1, Истина); + ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораИнтерактивно", 0.1, Истина); КонецПроцедуры &НаКлиенте Процедура ОткрытьФормуНастройкиПараметровСинхронизации(ТекущиеДанные) + ДанныеДляЗавершенияНастройки = Неопределено; + Если ПродолжитьНастройкуНовойСинхронизации(ТекущиеДанные, ДанныеДляЗавершенияНастройки) Тогда + ОткрытьФормуПомощникаНастройкиНовойСинхронизации(ТекущиеДанные, ДанныеДляЗавершенияНастройки); + Возврат; + КонецЕсли; + + ОткрытьФормуУзлаПланаОбмена(ТекущиеДанные); + +КонецПроцедуры + +&НаКлиенте +Функция ПродолжитьНастройкуНовойСинхронизации(ТекущиеДанные, ДанныеДляЗавершенияНастройки) + + СтрокаПриложение = Новый Структура("УзелИнформационнойБазы, ИмяПланаОбмена, ВерсияКорреспондента, ВнешняяСистема"); + ЗаполнитьЗначенияСвойств(СтрокаПриложение, ТекущиеДанные); + + ДанныеДляЗавершенияНастройки = Неопределено; + + Возврат Не НастройкаСинхронизацииЗавершена(СтрокаПриложение, ДанныеДляЗавершенияНастройки); + +КонецФункции + +&НаКлиенте +Процедура ОткрытьФормуПомощникаНастройкиНовойСинхронизации(ТекущиеДанные, ДанныеДляЗавершенияНастройки) + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("УзелОбмена", ТекущиеДанные.УзелИнформационнойБазы); + ПараметрыПомощника.Вставить("ИмяПланаОбмена", ТекущиеДанные.ИмяПланаОбмена); + ПараметрыПомощника.Вставить("ИдентификаторНастройки", ДанныеДляЗавершенияНастройки.ИдентификаторНастройки); + + Если МодельСервиса Тогда + ПараметрыПомощника.Вставить("ОбластьДанныхКорреспондента", ТекущиеДанные.ОбластьДанных); + ПараметрыПомощника.Вставить("ЭтоОбменСПриложениемВСервисе", ТекущиеДанные.ЭтоОбменСПриложениемВСервисе); + КонецЕсли; + + ПараметрыПомощника.Вставить("ОписаниеВариантаНастройки", ДанныеДляЗавершенияНастройки.ОписаниеВариантаНастройки); ОповещениеОЗакрытии = Новый ОписаниеОповещения("ОткрытьФормуНастройкиПараметровСинхронизацииЗавершение", ЭтотОбъект); - Если НастройкаСинхронизацииЗавершена(ТекущиеДанные.УзелИнформационнойБазы) Тогда + Если ТекущиеДанные.ВнешняяСистема Тогда + ПараметрыПомощника.Вставить("ОбменДаннымиСВнешнейСистемой", Истина); - ПараметрыПомощника.Вставить("Ключ", ТекущиеДанные.УзелИнформационнойБазы); - ПараметрыПомощника.Вставить("ИмяФормыПомощника", "ПланОбмена.[ИмяПланаОбмена].ФормаОбъекта"); + ФоновоеЗадание = ФоновоеЗаданиеВариантыНастроекОбменаДаннымиСВнешнимиСистемами( + ПараметрыПомощника.УзелОбмена, УникальныйИдентификатор); - ПараметрыПомощника.ИмяФормыПомощника = СтрЗаменить(ПараметрыПомощника.ИмяФормыПомощника, - "[ИмяПланаОбмена]", ТекущиеДанные.ИмяПланаОбмена); - - ОткрытьФорму(ПараметрыПомощника.ИмяФормыПомощника, - ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии); - - Иначе - - ПараметрыПомощника.Вставить("УзелОбмена", ТекущиеДанные.УзелИнформационнойБазы); - - Если МодельСервиса Тогда - ПараметрыПомощника.Вставить("ОбластьДанныхКорреспондента", ТекущиеДанные.ОбластьДанных); - ПараметрыПомощника.Вставить("ЭтоОбменСПриложениемВСервисе", ТекущиеДанные.ЭтоОбменСПриложениемВСервисе); - КонецЕсли; - - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаСинхронизации", - ПараметрыПомощника, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.Независимый); + Если Не ФоновоеЗадание = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ПараметрыПомощника", ПараметрыПомощника); + ДополнительныеПараметры.Вставить("ОповещениеОЗакрытии", ОповещениеОЗакрытии); + ОповещениеОЗавершении = Новый ОписаниеОповещения( + "ПриЗавершенииПолученияВариантовНастроекОбменаДаннымиСВнешнимиСистемами", ЭтотОбъект, ДополнительныеПараметры); + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Истина; + + ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеЗадание, ОповещениеОЗавершении, ПараметрыОжидания); + КонецЕсли; + Возврат; КонецЕсли; + КлючУникальностиПомощника = ПараметрыПомощника.ИмяПланаОбмена + + "_" + ПараметрыПомощника.ИдентификаторНастройки + "_" + ПараметрыПомощника.УзелОбмена.УникальныйИдентификатор(); + + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаСинхронизации", + ПараметрыПомощника, ЭтотОбъект, КлючУникальностиПомощника, , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.Независимый); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуУзлаПланаОбмена(ТекущиеДанные) + + ИмяФормыПомощника = СтрЗаменить("ПланОбмена.[ИмяПланаОбмена].ФормаОбъекта", "[ИмяПланаОбмена]", ТекущиеДанные.ИмяПланаОбмена); + + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("Ключ", ТекущиеДанные.УзелИнформационнойБазы); + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ОткрытьФормуНастройкиПараметровСинхронизацииЗавершение", ЭтотОбъект); + + ОткрытьФорму(ИмяФормыПомощника, + ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецПроцедуры &НаКлиенте Процедура ОткрытьФормуНастройкиПараметровСинхронизацииЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт - ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораВФоне", 0.1, Истина); + ПодключитьОбработчикОжидания("ОбновитьДанныеМонитораИнтерактивно", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПолученияВариантовНастроекОбменаДаннымиСВнешнимиСистемами(Результат, ДополнительныеПараметры) Экспорт + + Если Результат.Статус = "Выполнено" Тогда + + Отказ = Ложь; + СообщениеОбОшибке = ""; + ОбработатьРезультатПолученияВариантовНастроекНаСервере( + Результат.АдресРезультата, Отказ, СообщениеОбОшибке, ДополнительныеПараметры.ПараметрыПомощника); + + Если Отказ Тогда + ПоказатьПредупреждение(, СообщениеОбОшибке); + Иначе + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаСинхронизации", + ДополнительныеПараметры.ПараметрыПомощника, ЭтотОбъект, , , , ДополнительныеПараметры.ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.Независимый); + КонецЕсли; + + ИначеЕсли Результат.Статус = "Ошибка" Тогда + + ПоказатьПредупреждение(, Результат.КраткоеПредставлениеОшибки); + + КонецЕсли; КонецПроцедуры @@ -455,9 +532,11 @@ Возврат; КонецЕсли; - Если Не НастройкаСинхронизацииЗавершена(ТекущиеДанные.УзелИнформационнойБазы) Тогда + ДанныеДляЗавершенияНастройки = Неопределено; + Если ПродолжитьНастройкуНовойСинхронизации(ТекущиеДанные, ДанныеДляЗавершенияНастройки) Тогда ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные); + ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные); + ДополнительныеПараметры.Вставить("ДанныеДляЗавершенияНастройки", ДанныеДляЗавершенияНастройки); ОповещениеЗавершения = Новый ОписаниеОповещения("ВопросПродолжитьНастройкуСинхронизацииЗавершение", ЭтотОбъект, ДополнительныеПараметры); ПоказатьВопрос(ОповещениеЗавершения, @@ -494,6 +573,62 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция ФоновоеЗаданиеВариантыНастроекОбменаДаннымиСВнешнимиСистемами( + УзелОбмена, + УникальныйИдентификатор) + + ФоновоеЗадание = Неопределено; + + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда + МодульПомощник = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + ВариантыНастроек = МодульПомощник.ОписаниеВариантовНастроекОбменаДаннымиСВнешнимиСистемами(); + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ВариантыНастроек", ВариантыНастроек); + ПараметрыПроцедуры.Вставить("УзелОбмена", УзелОбмена); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение доступных вариантов настроек обмена данными с внешними системами.'"); + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСВнешнимиСистемами.ПриПолученииВариантовНастроекОбменаДанными", + ПараметрыПроцедуры, + ПараметрыВыполнения); + КонецЕсли; + + Возврат ФоновоеЗадание; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ОбработатьРезультатПолученияВариантовНастроекНаСервере(АдресРезультата, Отказ, СообщениеОбОшибке, ПараметрыПомощника) + + Результат = ПолучитьИзВременногоХранилища(АдресРезультата); + + Если Не ЗначениеЗаполнено(Результат.КодОшибки) Тогда + Отбор = Новый Структура("ИмяПланаОбмена, ИдентификаторНастройки"); + ЗаполнитьЗначенияСвойств(Отбор, ПараметрыПомощника); + + СтрокиВариантыНастроек = Результат.ВариантыНастроек.НайтиСтроки(Отбор); + Если СтрокиВариантыНастроек.Количество() > 0 Тогда + ЗаполнитьЗначенияСвойств(ПараметрыПомощника.ОписаниеВариантаНастройки, СтрокиВариантыНастроек[0]); + Иначе + Отказ = Истина; + СообщениеОбОшибке = НСтр("ru = 'Настройка подключения к данному сервису недоступна.'"); + КонецЕсли; + Иначе + Отказ = Истина; + Если ЗначениеЗаполнено(Результат.КодОшибки) Тогда + СообщениеОбОшибке = Результат.СообщениеОбОшибке; + КонецЕсли; + КонецЕсли; + + УдалитьИзВременногоХранилища(АдресРезультата); + +КонецПроцедуры + &НаСервере Процедура ПроверитьВозможностьНастройкиСинхронизацииДанных(Отказ = Ложь) @@ -519,15 +654,39 @@ Если Отказ И Не ПустаяСтрока(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста -Функция НастройкаСинхронизацииЗавершена(УзелОбмена) +Функция НастройкаСинхронизацииЗавершена(СтрокаПриложение, ДанныеДляЗавершенияНастройки = Неопределено) - Возврат ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(УзелОбмена); + МодульПомощник = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + ОписаниеВариантаНастройки = МодульПомощник.СтруктураОписанияВариантаНастройки(); + + ИдентификаторНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена( + СтрокаПриложение.УзелИнформационнойБазы); + + Если Не СтрокаПриложение.ВнешняяСистема Тогда + ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(СтрокаПриложение.ИмяПланаОбмена, + "НаименованиеКонфигурацииКорреспондента, + |ЗаголовокКомандыДляСозданияНовогоОбменаДанными, + |ЗаголовокПомощникаСозданияОбмена, + |КраткаяИнформацияПоОбмену, + |ПодробнаяИнформацияПоОбмену", + ИдентификаторНастройки, + СтрокаПриложение.ВерсияКорреспондента); + + ЗаполнитьЗначенияСвойств(ОписаниеВариантаНастройки, ЗначенияНастроекДляВарианта); + ОписаниеВариантаНастройки.НаименованиеКорреспондента = ЗначенияНастроекДляВарианта.НаименованиеКонфигурацииКорреспондента; + КонецЕсли; + + ДанныеДляЗавершенияНастройки = Новый Структура; + ДанныеДляЗавершенияНастройки.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + ДанныеДляЗавершенияНастройки.Вставить("ОписаниеВариантаНастройки", ОписаниеВариантаНастройки); + + Возврат ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(СтрокаПриложение.УзелИнформационнойБазы); КонецФункции @@ -605,7 +764,7 @@ Элементы.ПанельСписокПриложений.ТекущаяСтраница = Элементы.СтраницаОжидание; Элементы.КоманднаяПанель.Доступность = Ложь; - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); ПодключитьОбработчикОжидания("ПриОжиданииОбновленияДанныхМонитора", @@ -624,7 +783,7 @@ ПриОжиданииПолученияСпискаПриложенийНаСервере(ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); ПодключитьОбработчикОжидания("ПриОжиданииОбновленияДанныхМонитора", ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина); @@ -691,7 +850,7 @@ Если Не СтатусЗавершения.Отказ Тогда ТаблицаПриложений = СтатусЗавершения.Результат; - ПриложенияМоделиСервиса.Загрузить(СтатусЗавершения.Результат.Скопировать(, "Корреспондент, ОбластьДанных, НаименованиеПриложения")); + ПриложенияМоделиСервиса.Загрузить(ТаблицаПриложений.Скопировать(, "Корреспондент, ОбластьДанных, НаименованиеПриложения")); КонецЕсли; КонецЕсли; @@ -737,8 +896,13 @@ ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию( СтрокаПриложение.УзелИнформационнойБазы); - СтрокаПриложение.РежимРаботыПриложения = ?(ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS, - 1, 0); + + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS + Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда + СтрокаПриложение.РежимРаботыПриложения = 1; // сервис + Иначе + СтрокаПриложение.РежимРаботыПриложения = 0; + КонецЕсли; Если Не ЗначениеЗаполнено(ВидТранспорта) Или (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим) Тогда @@ -749,20 +913,14 @@ СтрокаПриложение.ДоступнаИнтерактивнаяОтправка = Не ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(СтрокаПриложение.ИмяПланаОбмена) И Не ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(СтрокаПриложение.ИмяПланаОбмена); + + СтрокаПриложение.ВнешняяСистема = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема); КонецЕсли; СтрокаПриложение.ДоступнаИнтерактивнаяОтправка = СтрокаПриложение.ДоступнаИнтерактивнаяОтправка И Не (СтрокаПриложение.ВариантОбменаДанными = "ТолькоПолучение"); - - ИдентификаторНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена( - СтрокаПриложение.УзелИнформационнойБазы); - - СтрокаПриложение.ИмяФормыПомощникаНастройкиСинхронизацииДанных = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(СтрокаПриложение.ИмяПланаОбмена, - "ИмяФормыПомощникаНастройкиСинхронизацииДанных", - ИдентификаторНастройки, - СтрокаПриложение.ВерсияКорреспондента); - + СостояниеСинхронизации = СостояниеСинхронизацииДанных(СтрокаПриложение); СтрокаПриложение.СостояниеПредставление = СостояниеСинхронизации.Представление; СтрокаПриложение.СостояниеКартинка = СостояниеСинхронизации.Картинка; @@ -788,7 +946,7 @@ КонецЦикла; - ТребуетсяОбновление = ОбменДаннымиВызовСервера.ТребуетсяУстановкаОбновления(); + ТребуетсяОбновление = ОбменДаннымиСервер.ТребуетсяУстановкаОбновления(); УстановитьОтображениеЭлементовФормы(); @@ -1002,6 +1160,7 @@ ПараметрыПомощника.Вставить("ОбластьДанныхКорреспондента", ДополнительныеПараметры.ОбластьДанныхКорреспондента); ПараметрыПомощника.Вставить("ОтправитьДанные", Не ДополнительныеПараметры.ЗапускОбменаИзКорреспондента); + ПараметрыПомощника.Вставить("РежимДополненияВыгрузки", ДополнительныеПараметры.ИспользоватьДопОтборы Или ДополнительныеПараметры.ВариантОбменаДанными = "ПолучениеИОтправка"); diff --git a/SSL/src/CommonForms/Склонения/Module.bsl b/SSL/src/CommonForms/Склонения/Module.bsl index 8a4590341..41b411347 100644 --- a/SSL/src/CommonForms/Склонения/Module.bsl +++ b/SSL/src/CommonForms/Склонения/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -22,18 +29,11 @@ КонецЕсли; Если Параметры.Свойство("ИзмененоПредставление") Тогда - ИзмененоПредставление = Параметры.ИзмененоПредставление; + ИзмененоПредставление = Параметры.ИзмененоПредставление; КонецЕсли; - + ОбновитьГруппуИнформационнаяНадписьСервисСклонения(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаКомандаОтмена", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/СменаПароля/Module.bsl b/SSL/src/CommonForms/СменаПароля/Module.bsl index 873abe670..e1e928355 100644 --- a/SSL/src/CommonForms/СменаПароля/Module.bsl +++ b/SSL/src/CommonForms/СменаПароля/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -79,12 +86,8 @@ Элементы.НовыйПароль.Подсказка = ПользователиСлужебный.ПодсказкаДляНовогоПароля(); Элементы.НовыйПароль2.Подсказка = ПользователиСлужебный.ПодсказкаДляНовогоПароля(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СоздатьПароль", "Заголовок", НСтр("ru ='Создать'")); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаЗакрытьФорму", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаКоманднаяПанель", "ГоризонтальноеПоложение", ГоризонтальноеПоложениеЭлемента.Центр); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; КонецЕсли; КонецПроцедуры @@ -249,14 +252,8 @@ ТекстОшибки = УстановитьПарольНаСервере(); Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда - Результат = Новый Структура; - Если ВернутьПарольБезУстановки Тогда - Результат.Вставить("НовыйПароль", НовыйПароль); - Результат.Вставить("СтарыйПароль", ?(Элементы.СтарыйПароль.Видимость, СтарыйПароль, Неопределено)); - Иначе - Результат.Вставить("УстановленПустойПароль", НовыйПароль = ""); - КонецЕсли; - Закрыть(Результат); + Элементы.ФормаУстановитьПароль.Доступность = Ложь; + ПодключитьОбработчикОжидания("ВернутьРезультатИЗакрытьФорму", 0.1, Истина); Иначе ПоказатьПредупреждение(, ТекстОшибки); КонецЕсли; @@ -300,4 +297,18 @@ КонецФункции +&НаКлиенте +Процедура ВернутьРезультатИЗакрытьФорму() + + Результат = Новый Структура; + Если ВернутьПарольБезУстановки Тогда + Результат.Вставить("НовыйПароль", НовыйПароль); + Результат.Вставить("СтарыйПароль", ?(Элементы.СтарыйПароль.Видимость, СтарыйПароль, Неопределено)); + Иначе + Результат.Вставить("УстановленПустойПароль", НовыйПароль = ""); + КонецЕсли; + Закрыть(Результат); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl index c204ddb44..0489d7925 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -10,7 +17,6 @@ Менеджер = ПланыОбмена[Параметры.Узел.Метаданные().Имя]; - СистемнаяИнформация = Новый СистемнаяИнформация; Если Параметры.Узел = Менеджер.ЭтотУзел() Тогда ВызватьИсключение НСтр("ru = 'Создание начального образа для данного узла невозможно.'"); @@ -19,7 +25,7 @@ ТипСУБД = ""; Узел = Параметры.Узел; МожноСоздатьФайловуюБазу = Истина; - Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда МожноСоздатьФайловуюБазу = Ложь; КонецЕсли; @@ -43,8 +49,7 @@ ЕстьФайлыВТомах = РаботаСФайламиСлужебный.ЕстьФайлыВТомах(); КонецЕсли; - ОССервераWindows = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 - ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; + ОССервераWindows = ОбщегоНазначения.ЭтоWindowsСервер(); Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда Элементы.ПолноеИмяФайловойБазыLinux.Видимость = НЕ ОССервераWindows; Элементы.ПолноеИмяФайловойБазы.Видимость = ОССервераWindows; @@ -67,6 +72,10 @@ Элементы.ПутьКАрхивуСФайламиТомов.КнопкаВыбора = Ложь; КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -136,10 +145,8 @@ КонецЕсли; МассивКаталогов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПутьКФайлу, "\", Истина); - ПолныйПуть = ""; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() - И МассивКаталогов.Количество() > 0 Тогда + Если МассивКаталогов.Количество() > 0 Тогда Файл = Новый Файл(МассивКаталогов[0]); ТекущийМассив = Новый Массив; @@ -149,7 +156,7 @@ ДополнительныеПараметры.Вставить("ПолныйПуть", Файл.ПолноеИмя); ДополнительныеПараметры.Вставить("МассивКаталогов", ОбщегоНазначенияКлиентСервер.РазностьМассивов(МассивКаталогов, ТекущийМассив)); - + Оповещение = Новый ОписаниеОповещения("ПроверкаСуществованияПолноеИмяФайловойБазыЗавершение", ЭтотОбъект, ДополнительныеПараметры); Файл.НачатьПроверкуСуществования(Оповещение); КонецЕсли; @@ -266,63 +273,47 @@ КонецПроцедуры &НаКлиенте -Процедура ОбработчикСохраненияФайла(Элемент, - ИмяСвойства, - СтандартнаяОбработка, - ИмяФайла, - Фильтр = "") +Процедура ОбработчикСохраненияФайла( + Элемент, + ИмяСвойства, + СтандартнаяОбработка, + ИмяФайла, + Фильтр = "") СтандартнаяОбработка = Ложь; - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Элемент", Элемент); - ДополнительныеПараметры.Вставить("ИмяСвойства", ИмяСвойства); - ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла); - ДополнительныеПараметры.Вставить("Фильтр", Фильтр); - - ОповещениеПодключенияРасширенияРаботыСФайлами = Новый ОписаниеОповещения( - "ОбработчикСохраненияФайлаПослеПодключенияРасширенияРаботыСФайлами", - ЭтотОбъект, ДополнительныеПараметры); - - НачатьПодключениеРасширенияРаботыСФайлами(ОповещениеПодключенияРасширенияРаботыСФайлами); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработчикСохраненияФайлаПослеПодключенияРасширенияРаботыСФайлами(Подключено, ДополнительныеПараметры) Экспорт - - Если Не Подключено Тогда - РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(Неопределено); - Возврат; - КонецЕсли; + Контекст = Новый Структура; + Контекст.Вставить("Элемент", Элемент); + Контекст.Вставить("ИмяСвойства", ИмяСвойства); + Контекст.Вставить("ИмяФайла", ИмяФайла); + Контекст.Вставить("Фильтр", Фильтр); Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения'"); - Диалог.МножественныйВыбор = Ложь; - Диалог.ПредварительныйПросмотр = Ложь; - Диалог.Фильтр = ДополнительныеПараметры.Фильтр; - Диалог.ПолноеИмяФайла = - ?(ЭтотОбъект[ДополнительныеПараметры.ИмяСвойства] = "", - ДополнительныеПараметры.ИмяФайла, - ЭтотОбъект[ДополнительныеПараметры.ИмяСвойства]); + Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения'"); + Диалог.МножественныйВыбор = Ложь; + Диалог.ПредварительныйПросмотр = Ложь; + Диалог.Фильтр = Контекст.Фильтр; + Диалог.ПолноеИмяФайла = + ?(ЭтотОбъект[Контекст.ИмяСвойства] = "", + Контекст.ИмяФайла, + ЭтотОбъект[Контекст.ИмяСвойства]); ОписаниеОповещенияДиалогаВыбора = Новый ОписаниеОповещения( - "ОбработчикСохраненияФайлаПослеВыбораВДиалоге", - ЭтотОбъект, ДополнительныеПараметры); - Диалог.Показать(ОписаниеОповещенияДиалогаВыбора); + "ОбработчикСохраненияФайлаПослеВыбораВДиалоге", ЭтотОбъект, Контекст); + ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещенияДиалогаВыбора, Диалог); КонецПроцедуры &НаКлиенте -Процедура ОбработчикСохраненияФайлаПослеВыбораВДиалоге(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт +Процедура ОбработчикСохраненияФайлаПослеВыбораВДиалоге(ВыбранныеФайлы, Контекст) Экспорт Если ВыбранныеФайлы <> Неопределено И ВыбранныеФайлы.Количество() = 1 Тогда - ЭтотОбъект[ДополнительныеПараметры.ИмяСвойства] = ВыбранныеФайлы[0]; - Если ДополнительныеПараметры.Элемент = Элементы.ПолноеИмяФайловойБазы Тогда - ПолноеИмяФайловойБазыПриИзменении(ДополнительныеПараметры.Элемент); + ЭтотОбъект[Контекст.ИмяСвойства] = ВыбранныеФайлы[0]; + Если Контекст.Элемент = Элементы.ПолноеИмяФайловойБазы Тогда + ПолноеИмяФайловойБазыПриИзменении(Контекст.Элемент); КонецЕсли; КонецЕсли; @@ -344,9 +335,7 @@ ПомощникСозданияОбменаДанными); Исключение Отказ = Истина; - МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl index 112faa45d..31ca5450a 100644 --- a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl @@ -1,12 +1,10 @@ -#Область ОписаниеПеременных - -&НаКлиенте -Перем ПараметрыОбработчикаОжидания; - -&НаКлиенте -Перем ФормаДлительнойОперации; - -#КонецОбласти +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -31,15 +29,11 @@ &НаКлиенте Процедура СоздатьКопиюОбласти(Команда) - Результат = СоздатьКопиюОбластиНаСервере(); - - Если Результат.Статус = "Выполнено" Тогда - ОбработатьРезультатВыполненияЗадания(); - ИначеЕсли Результат.Статус = "Выполняется" Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); - ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтотОбъект, ИдентификаторЗадания); - КонецЕсли; + ДлительнаяОперация = СоздатьКопиюОбластиНаСервере(); + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + + ОповещениеОЗавершении = Новый ОписаниеОповещения("СоздатьКопиюОбластиЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); КонецПроцедуры @@ -48,42 +42,35 @@ #Область СлужебныеПроцедурыИФункции &НаКлиенте -Процедура Подключаемый_ПроверитьВыполнениеЗадания() +Процедура СоздатьКопиюОбластиЗавершение(Результат, ДополнительныеПараметры) Экспорт - Попытка - Если ФормаДлительнойОперации.Открыта() - И ФормаДлительнойОперации.ИдентификаторЗадания = ИдентификаторЗадания Тогда - - Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда - ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); - ОбработатьРезультатВыполненияЗадания(); - Иначе - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания( - "Подключаемый_ПроверитьВыполнениеЗадания", - ПараметрыОбработчикаОжидания.ТекущийИнтервал, - Истина); - КонецЕсли; - КонецЕсли; - Исключение - ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); - ЗаписатьИсключениеНаСервере(ПредставлениеОшибки); - ВызватьИсключение; - КонецПопытки; + Если Результат = Неопределено Тогда + + Возврат; + + КонецЕсли; -КонецПроцедуры + ОбработатьРезультатВыполненияЗадания(Результат); + +КонецПроцедуры &НаКлиенте -Процедура ОбработатьРезультатВыполненияЗадания() +Процедура ОбработатьРезультатВыполненияЗадания(Результат) СнятьМонопольныйРежим(); - Если Не ПустаяСтрока(АдресХранилища) Тогда - УдалитьИзВременногоХранилища(АдресХранилища); - АдресХранилища = ""; + Если Результат.Статус = "Ошибка" Тогда + + ЗаписатьИсключениеНаСервере(Результат.ПодробноеПредставлениеОшибки); + ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + + ИначеЕсли НЕ ПустаяСтрока(Результат.АдресРезультата) Тогда + + УдалитьИзВременногоХранилища(Результат.АдресРезультата); + Результат.АдресРезультата = ""; // Перейти на страницу результата. ПереключитьСтраницу(ЭтотОбъект, "СтраницаПослеВыгрузкиУспех"); + КонецЕсли; КонецПроцедуры @@ -129,32 +116,26 @@ Попытка - - Результат = ДлительныеОперации.ВыполнитьВФоне( РезервноеКопированиеОбластейДанных.ИмяМетодаФоновогоРезервногоКопирования(), ПараметрыЗадания, ПараметрыВыполнения); Исключение + ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписатьИсключениеНаСервере(ПредставлениеОшибки); ВызватьИсключение; + КонецПопытки; АдресХранилища = Результат.АдресРезультата; ИдентификаторЗадания = Результат.ИдентификаторЗадания; + Возврат Результат; КонецФункции -&НаСервереБезКонтекста -Функция ЗаданиеВыполнено(ИдентификаторЗадания) - - Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); - -КонецФункции - &НаСервереБезКонтекста Процедура СнятьМонопольныйРежим() diff --git a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form index 599906784..39465e344 100644 --- a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form +++ b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form @@ -901,8 +901,7 @@ ПредставлениеДанныхОткрывается - String - + Boolean diff --git a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl index c0207d34b..406f825a7 100644 --- a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl +++ b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form index f410ac178..20f3b377e 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form @@ -3,9 +3,11 @@ ВыборМестаСохраненияФайла 50 + VeryHigh ВариантСохранения 67 + VeryHigh true true @@ -40,6 +42,7 @@ Left true + RadioButtons ru @@ -64,6 +67,7 @@ ГруппаМестаСохранения 69 + VeryHigh СтраницаСохранениеВПапку 70 @@ -276,6 +280,7 @@ ГруппаВыборФорматов 77 + VeryHigh ВыбранныеФорматыСохранения 72 @@ -525,6 +530,7 @@ ГруппаДополнительныеПараметры 63 + VeryHigh УпаковатьВАрхив 14 @@ -661,11 +667,13 @@ Form.Command.Сохранить - Auto true true true UserCmds + + StdPicture.WriteAndClose + Auto diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl index 7c8c958ac..61baa7816 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -9,7 +16,7 @@ // заполнение списка форматов Для Каждого ФорматСохранения Из УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента() Цикл - ВыбранныеФорматыСохранения.Добавить(ФорматСохранения.ТипФайлаТабличногоДокумента, Строка(ФорматСохранения.Ссылка), Ложь, ФорматСохранения.Картинка); + ВыбранныеФорматыСохранения.Добавить(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента), Строка(ФорматСохранения.Ссылка), Ложь, ФорматСохранения.Картинка); КонецЦикла; ВыбранныеФорматыСохранения[0].Пометка = Истина; // По умолчанию выбран только первый формат из списка. @@ -24,7 +31,7 @@ ВариантСохранения = "СохранитьВПапку"; // настройка видимости - ЭтоВебКлиент = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); + ЭтоВебКлиент = ОбщегоНазначения.ЭтоВебКлиент(); ЕстьВозможностьПрисоединения = Элементы.ВыбранныйОбъект.СписокВыбора.Количество() > 0; Элементы.ВыборМестаСохраненияФайла.Видимость = Не ЭтоВебКлиент Или ЕстьВозможностьПрисоединения; Элементы.ВариантСохранения.Видимость = ЕстьВозможностьПрисоединения; @@ -39,11 +46,9 @@ КонецЕсли; Элементы.ВыбранныйОбъект.ТолькоПросмотр = Элементы.ВыбранныйОбъект.СписокВыбора.Количество() = 1; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КнопкаСохранить", "Картинка", БиблиотекаКартинок.СохранитьФайл); - + Элементы.КнопкаСохранить.Отображение = ОтображениеКнопки.Картинка; КонецЕсли; КонецПроцедуры @@ -88,11 +93,9 @@ &НаКлиенте Процедура ПапкаДляСохраненияФайловНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ДиалогВыбораПапки = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); - Если Не ПустаяСтрока(ВыбраннаяПапка) Тогда - ДиалогВыбораПапки.Каталог = ВыбраннаяПапка; - КонецЕсли; - ДиалогВыбораПапки.Показать(Новый ОписаниеОповещения("ПапкаДляСохраненияФайловЗавершениеВыбора", ЭтотОбъект)); + + ФайловаяСистемаКлиент.ВыбратьКаталог(Новый ОписаниеОповещения("ПапкаДляСохраненияФайловЗавершениеВыбора", ЭтотОбъект)); + КонецПроцедуры // Обработчик завершения выбора каталога сохраненных файлов. @@ -100,8 +103,8 @@ // &НаКлиенте Процедура ПапкаДляСохраненияФайловЗавершениеВыбора(Папка, ДополнительныеПараметры) Экспорт - Если Папка <> Неопределено И Папка.Количество() > 0 Тогда - ВыбраннаяПапка = Папка[0]; + Если Не ПустаяСтрока(Папка) Тогда + ВыбраннаяПапка = Папка; ОчиститьСообщения(); КонецЕсли; КонецПроцедуры @@ -120,7 +123,7 @@ #Если Не ВебКлиент Тогда Если ВариантСохранения = "СохранитьВПапку" И ПустаяСтрока(ВыбраннаяПапка) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо указать папку.'"),,"ВыбраннаяПапка"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Необходимо указать папку.'"),,"ВыбраннаяПапка"); Возврат; КонецЕсли; #КонецЕсли diff --git a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl index e4478b3bf..bae649dc6 100644 --- a/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl +++ b/SSL/src/CommonForms/СравнениеТабличныхДокументов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,6 +15,11 @@ Возврат; КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Отказ = Истина; + ВызватьИсключение НСтр("ru = 'Операция не доступна в мобильном клиенте, необходимо использовать тонкий клиент.'"); + КонецЕсли; + ТабличныеДокументыДляСравнения = ПолучитьИзВременногоХранилища(Параметры.АдресТабличныхДокументов); ТабличныйДокументЛевый = ПодготовитьТабличныйДокумент(ТабличныеДокументыДляСравнения.Левый); ТабличныйДокументПравый = ПодготовитьТабличныйДокумент(ТабличныеДокументыДляСравнения.Правый); diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl index cf611f5f6..997acd4c6 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -331,7 +338,6 @@ Для каждого СтрокаДерева Из СтрокиДерева Цикл - ЭтоТекущийОбъект = (СтрокаДерева.Ссылка = ОбъектСсылка); ЭтоИсходныйОбъект = (СтрокаДерева.Ссылка = ИсходныйОбъект); ПодчиненныеЭлементыДерева = СтрокаДерева.ПолучитьЭлементы(); @@ -392,7 +398,7 @@ СформироватьДеревьяДокументов(); ВывестиТабличныйДокумент(); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Документ, для которого сформирован отчет о структуре подчиненности, стал недоступен.'")); КонецЕсли; diff --git a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl index 8360a99e3..b67359e5d 100644 --- a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl +++ b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -18,12 +25,6 @@ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Установка ведущей конечной точки для ""%1""'"), ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонечнаяТочка, "Наименование")); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - КонецЕсли; - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl b/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl index e2ebe93af..f7a8d272d 100644 --- a/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl +++ b/SSL/src/CommonForms/УстановкаВнешнейКомпонентыНевозможна/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonForms/УстановленныеИсправления/Form.form b/SSL/src/CommonForms/УстановленныеИсправления/Form.form index a9cd3926e..172cf11d4 100644 --- a/SSL/src/CommonForms/УстановленныеИсправления/Form.form +++ b/SSL/src/CommonForms/УстановленныеИсправления/Form.form @@ -43,7 +43,7 @@ 67 <key>ru</key> - <value>Изменения, которые будут сделаны, вступят в силу при следующем входе в программу.</value> + <value>Изменения, которые будут сделаны, вступят в силу при следующем входе в программу.</value> true true @@ -610,6 +610,341 @@ true + + ГруппаЛегенда + 78 + + ГруппаЛегендаПодключено + 80 + + КартинкаПодключено + 82 + + <key>ru</key> + <value>Подключено</value> + + true + true + + true + + + КартинкаПодключеноРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + КартинкаПодключеноКонтекстноеМеню + 83 + true + + true + true + + + CommonPicture.СостоянияРасширенийПодключено + + + + + ЛегендаПодключено + 85 + + <key>ru</key> + <value>Расширение подключено</value> + + true + true + + true + + + ЛегендаПодключеноРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + ЛегендаПодключеноКонтекстноеМеню + 86 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Легенда подключено</value> + + + ГруппаЛегендаПодключеноРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаЛегендаБудетПодключено + 88 + + КартинкаБудетПодключено + 90 + + <key>ru</key> + <value>Будет подключено</value> + + true + true + + true + + + КартинкаБудетПодключеноРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + + КартинкаБудетПодключеноКонтекстноеМеню + 91 + true + + true + true + + + CommonPicture.СостоянияРасширенийБудетПодключено + + + + + ЛегендаБудетПодключено + 93 + + <key>ru</key> + <value>Будет подключено после перезапуска программы</value> + + true + true + + true + + + ЛегендаБудетПодключеноРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + ЛегендаБудетПодключеноКонтекстноеМеню + 94 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Легенда будет подключено</value> + + + ГруппаЛегендаБудетПодключеноРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаЛегендаОшибкаПодключения + 96 + + КартинкаОшибкаПодключения + 98 + + <key>ru</key> + <value>Ошибка подключения</value> + + true + true + + true + + + КартинкаОшибкаПодключенияРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + КартинкаОшибкаПодключенияКонтекстноеМеню + 99 + true + + true + true + + + CommonPicture.СостоянияРасширенийОшибка + + + + + ЛегендаОшибкаПодключения + 101 + + <key>ru</key> + <value>Не удалось подключить при входе в программу</value> + + true + true + + true + + + ЛегендаОшибкаПодключенияРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + + ЛегендаОшибкаПодключенияКонтекстноеМеню + 102 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Легенда ошибка подключения</value> + + + ГруппаЛегендаОшибкаПодключенияРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Легенда</value> + + + ГруппаЛегендаРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + ГруппаГоризонтальнаяГруппировка 46 @@ -675,6 +1010,7 @@ HorizontalIfPossible Auto + NormalSeparation true true Auto diff --git a/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl b/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl index ce9e62aea..e5b9f593d 100644 --- a/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl +++ b/SSL/src/CommonForms/УстановленныеИсправления/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -21,10 +28,10 @@ Фильтр = Параметры.Исправления; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() + Если ОбщегоНазначения.ЭтоВебКлиент() Или ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() - Или Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Или Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда Элементы.ФормаУстановитьИсправление.Видимость = Ложь; Элементы.ФормаУдалитьИсправление.Видимость = Ложь; Элементы.ГруппаИнформация.Видимость = Ложь; @@ -301,9 +308,7 @@ &НаСервере Процедура ОтключитьПредупрежденияБезопасности(Расширение) - Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда - Расширение.ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); - КонецЕсли; + Расширение.ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); КонецПроцедуры diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Form.form b/SSL/src/CommonForms/УточнениеКонтактов/Form.form index 9749f71ac..b32ca812e 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Form.form +++ b/SSL/src/CommonForms/УточнениеКонтактов/Form.form @@ -676,6 +676,23 @@ true + + ДоступноИзменение + + <key>ru</key> + <value>Доступно изменение</value> + + 12 + + Boolean + + + true + + + true + + ТаблицаКонтактов.ТаблицаАдресовКонтакта diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl index 773f81b87..2973a349f 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -50,6 +57,7 @@ ЗаполнитьСпискиНайденныхКонтактовПоEmail(); ЗаполнитьТаблицыТекущихEmailКонтактов(); + ОпределитьДоступностьИзмененияДляКонтактов(); КонецПроцедуры @@ -68,8 +76,8 @@ ТекущиеДанные = Элементы.ТаблицаКонтактов.ТекущиеДанные; ТекущиеДанные.Контакт = Параметр.ВыбранныйКонтакт; - ЗаполнитьАдресаКонтакта(Элементы.ТаблицаКонтактов.ТекущаяСтрока); УстановитьСнятьПризнакИзменятьЕслиНеобходимо(ТекущиеДанные); + ЗаполнитьАдресаКонтакта(Элементы.ТаблицаКонтактов.ТекущаяСтрока); Модифицированность = Истина; КонецЕсли; @@ -158,6 +166,8 @@ ТекущиеДанные.Контакт = ВыбранноеЗначение; Модифицированность = Истина; + УстановитьСнятьПризнакИзменятьЕслиНеобходимо(ТекущиеДанные); + Если НЕ ЗначениеЗаполнено(ВыбранноеЗначение) Тогда ПриОчисткеКонтакта(ТекущиеДанные); @@ -168,8 +178,6 @@ КонецЕсли; - УстановитьСнятьПризнакИзменятьЕслиНеобходимо(ТекущиеДанные); - Модифицированность = Истина; КонецЕсли; @@ -294,6 +302,20 @@ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонтактов.Адрес"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаКонтактовИзменять.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонтактов.ДоступноИзменение"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); КонецПроцедуры @@ -396,6 +418,7 @@ Процедура ЗаполнитьТаблицыТекущихEmailКонтактов() МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); + ИменаПредопределенных = Метаданные.Справочники.ВидыКонтактнойИнформации.ПолучитьИменаПредопределенных(); ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | Контакты.Контакт @@ -434,11 +457,18 @@ |;"; Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл - + Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда Продолжить; КонецЕсли; + ИмяВарианта = "Справочник" + ЭлементМассиваОписания.Имя; + Если ИменаПредопределенных.Найти(ИмяВарианта) <> Неопределено Тогда + ВариантОтбора = "ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации." + ИмяВарианта + ")"; + Иначе + ВариантОтбора = """" + ИмяВарианта +""""; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " | |//////////////////////////////////////////////////////////////////////////////// @@ -451,7 +481,7 @@ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации, | Справочник." + ЭлементМассиваОписания.Имя + " КАК ТаблицаКонтакты |ГДЕ - | ВидыКонтактнойИнформации.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.Справочник" + ЭлементМассиваОписания.Имя + ") + | ВидыКонтактнойИнформации.ИмяГруппы = " + ВариантОтбора + " | И ВидыКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) | И ТаблицаКонтакты.Ссылка В | (ВЫБРАТЬ @@ -626,22 +656,8 @@ Блокировка.Заблокировать(); КонтактОбъект = Выборка.Контакт.ПолучитьОбъект(); - - СтрокаТабличнойЧасти = КонтактОбъект.КонтактнаяИнформация.Найти(Выборка.Вид,"Вид"); - Если СтрокаТабличнойЧасти = Неопределено Тогда - СтрокаТабличнойЧасти = КонтактОбъект.КонтактнаяИнформация.Добавить(); - СтрокаТабличнойЧасти.Вид = Выборка.Вид; - СтрокаТабличнойЧасти.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; - КонецЕсли; - СтрокаТабличнойЧасти.Представление = Выборка.Адрес; - СтрокаТабличнойЧасти.АдресЭП = Выборка.Адрес; - Позиция = СтрНайти(СтрокаТабличнойЧасти.АдресЭП, "@"); - Если Позиция <> 0 Тогда - СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Позиция+1); - КонецЕсли; - - КонтактОбъект.Записать(); + УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(Выборка.Контакт, Выборка.Адрес, Выборка.Вид, , Истина); Запрос = Новый Запрос; Запрос.Текст = " @@ -751,7 +767,14 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(МетаданныеВходящееПисьмо.ПолноеИмя()); - ЭлементБлокировки.УстановитьЗначение("Ссылка", МассивВходящихПисем); + + ИсточникБлокировки = Новый ТаблицаЗначений; + ИсточникБлокировки.Колонки.Добавить("Письмо",Новый ОписаниеТипов("ДокументСсылка.ЭлектронноеПисьмоВходящее")); + ИсточникБлокировки.ЗагрузитьКолонку(МассивВходящихПисем, "Письмо"); + + ЭлементБлокировки.ИсточникДанных = ИсточникБлокировки; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Письмо"); + Блокировка.Заблокировать(); КонецЕсли; @@ -760,7 +783,14 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(МетаданныеИсходящееПисьмо.ПолноеИмя()); - ЭлементБлокировки.УстановитьЗначение("Ссылка", МассивИсходящихПисем); + + ИсточникБлокировки = Новый ТаблицаЗначений; + ИсточникБлокировки.Колонки.Добавить("Письмо",Новый ОписаниеТипов("ДокументСсылка.ЭлектронноеПисьмоИсходящее")); + ИсточникБлокировки.ЗагрузитьКолонку(МассивИсходящихПисем, "Письмо"); + + ЭлементБлокировки.ИсточникДанных = ИсточникБлокировки; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Письмо"); + Блокировка.Заблокировать(); КонецЕсли; @@ -790,20 +820,20 @@ КонецЦикла; - ЗафиксироватьТранзакцию(); + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - Выборка.Контакт,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), + Выборка.Контакт,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); + УровеньЖурналаРегистрации.Ошибка, , , + ТекстСообщенияОбОшибке); Продолжить; КонецПопытки; @@ -838,6 +868,32 @@ ТекущиеДанные.Представление = Строка(ТекущиеДанные.Контакт); КонецЕсли; ЗаполнитьТаблицуАдресовИзКоллекции(ТекущиеДанные, ТаблицаАдресов); + + ОпределитьДоступностьИзмененияДляКонтактов(); + +КонецПроцедуры + +&НаСервере +Процедура ОпределитьДоступностьИзмененияДляКонтактов() + + Для каждого СтрокаКонтакт Из ТаблицаКонтактов Цикл + + Если Не ЗначениеЗаполнено(СтрокаКонтакт.Контакт) Тогда + + СтрокаКонтакт.Изменять = Ложь; + СтрокаКонтакт.ДоступноИзменение = Ложь; + + Иначе + + ПравоИзменения = ПравоДоступа("Изменение", Метаданные.НайтиПоТипу(ТипЗнч(СтрокаКонтакт.Контакт))); + СтрокаКонтакт.ДоступноИзменение = ПравоИзменения; + Если Не ПравоИзменения Тогда + СтрокаКонтакт.Изменять = Ложь; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonForms/ФайлыВТоме/Form.form b/SSL/src/CommonForms/ФайлыВТоме/Form.form index 7c06b35be..da471eda4 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Form.form +++ b/SSL/src/CommonForms/ФайлыВТоме/Form.form @@ -452,6 +452,11 @@ true auto true + + + КоманднаяПанель + + ИменаХранилищФайлов diff --git a/SSL/src/CommonForms/ФайлыВТоме/Module.bsl b/SSL/src/CommonForms/ФайлыВТоме/Module.bsl index fa27dee08..616315397 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Module.bsl +++ b/SSL/src/CommonForms/ФайлыВТоме/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -42,6 +49,10 @@ НастроитьДинамическийСписок(ИмяХранилищаФайлов); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ПредставлениеХранилищаФайлов.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form index 7cfd53ce0..8dadb1571 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form @@ -3868,10 +3868,10 @@ </edit> </attributes> <attributes> - <name>ИдентификаторТекущегоУзлаКД</name> + <name>ИдентификаторЭлементаСтруктурыНастроек</name> <title> <key>ru</key> - <value>Идентификатор текущего узла КД</value> + <value>Идентификатор элемента структуры настроек</value> 8 diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl index f2a6c9f9e..0eddef4df 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl @@ -1,32 +1,152 @@ -//////////////////////////////////////////////////////////////////////////////// -// Стандартный функционал +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СтандартныйФункционал +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОпределитьПоведениеВМобильномКлиенте(); + + ФормаПараметры = Новый Структура( + "КлючНазначенияИспользования, КлючПользовательскихНастроек, + |Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр, + |ФиксированныеНастройки, Раздел, Подсистема, ПодсистемаПредставление"); + ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры); + ФормаПараметры.Вставить("Отбор", Новый Структура); + Если ТипЗнч(Параметры.Отбор) = Тип("Структура") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ФормаПараметры.Отбор, Параметры.Отбор, Истина); + Параметры.Отбор.Очистить(); + КонецЕсли; + + Если Параметры.Свойство("ПредставлениеВарианта") И ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда + АвтоЗаголовок = Ложь; + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменение варианта отчета ""%1""'"), Параметры.ПредставлениеВарианта); + КонецЕсли; + + Если Параметры.Свойство("НастройкиОтчета", НастройкиОтчета) Тогда + Если НастройкиОтчета.СхемаМодифицирована Тогда + Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы)); + КонецЕсли; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда + Параметры.Свойство("ВариантНаименование", Параметры.ПредставлениеВарианта); + КонецЕсли; + + НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Вариант"); + Если НастройкиКД = Неопределено Тогда + НастройкиКД = Отчет.КомпоновщикНастроек.Настройки; + КонецЕсли; + + Параметры.Свойство("ИдентификаторЭлементаСтруктурыНастроек", ИдентификаторЭлементаСтруктурыНастроек); +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойВариантаНаСервере(НовыеНастройкиКД) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Настройки) + НовыеНастройкиКД = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); + Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Новый НастройкиКомпоновкиДанных); + ОтчетыКлиентСервер.ЗагрузитьНастройки(Отчет.КомпоновщикНастроек, НовыеНастройкиКД); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если ТипЗнч(ИдентификаторЭлементаСтруктурыНастроек) = Тип("ИдентификаторКомпоновкиДанных") Тогда + ПодключитьОбработчикОжидания("УстановитьТекущуюСтроку", 0.1, Истина); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗавершитьРедактирование(Команда) + Если МодальныйРежим + Или РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс + Или ВладелецФормы = Неопределено Тогда + Закрыть(Истина); + Иначе + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); + РезультатВыбора.Вставить("ВариантМодифицирован", ВариантМодифицирован); + РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", ВариантМодифицирован Или ПользовательскиеНастройкиМодифицированы); + + #Если ВебКлиент Тогда + РезультатВыбора.ВариантМодифицирован = Истина; // Для платформы. + РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; + #КонецЕсли + + Если РезультатВыбора.ПользовательскиеНастройкиМодифицированы Тогда + РезультатВыбора.Вставить("СброситьПользовательскиеНастройки", Истина); + КонецЕсли; + + ОповеститьОВыборе(РезультатВыбора); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОпределитьПоведениеВМобильномКлиенте() + ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент(); + Если Не ЭтоМобильныйКлиент Тогда + Возврат; + КонецЕсли; + + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьТекущуюСтроку() + Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока = ИдентификаторЭлементаСтруктурыНастроек; +КонецПроцедуры &НаКлиенте Процедура ПоляГруппировкиНедоступны() Элементы.СтраницыПолейГруппировки.ТекущаяСтраница = Элементы.НедоступныеНастройкиПолейГруппировки; - + КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоляДоступны(ЭлементСтруктуры) Если Отчет.КомпоновщикНастроек.Настройки.НаличиеВыбораУЭлемента(ЭлементСтруктуры) Тогда - + ЛокальныеВыбранныеПоля = Истина; Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НастройкиВыбранныхПолей; - + Иначе - + ЛокальныеВыбранныеПоля = Ложь; Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиВыбранныхПолей; - - КонецЕсли; + КонецЕсли; + Элементы.ЛокальныеВыбранныеПоля.ТолькоПросмотр = Ложь; - + КонецПроцедуры &НаКлиенте @@ -35,7 +155,7 @@ ЛокальныеВыбранныеПоля = Ложь; Элементы.ЛокальныеВыбранныеПоля.ТолькоПросмотр = Истина; Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НедоступныеНастройкиВыбранныхПолей; - + КонецПроцедуры &НаКлиенте @@ -45,14 +165,14 @@ ЛокальныйОтбор = Истина; Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НастройкиОтбора; - + Иначе ЛокальныйОтбор = Ложь; Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиОтбора; - + КонецЕсли; - + Элементы.ЛокальныйОтбор.ТолькоПросмотр = Ложь; КонецПроцедуры @@ -63,7 +183,7 @@ ЛокальныйОтбор = Ложь; Элементы.ЛокальныйОтбор.ТолькоПросмотр = Истина; Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НедоступныеНастройкиОтбора; - + КонецПроцедуры &НаКлиенте @@ -73,16 +193,16 @@ ЛокальныйПорядок = Истина; Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НастройкиПорядка; - + Иначе ЛокальныйПорядок = Ложь; Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПорядка; - - КонецЕсли; - - Элементы.ЛокальныйПорядок.ТолькоПросмотр = Ложь; + КонецЕсли; + + Элементы.ЛокальныйПорядок.ТолькоПросмотр = Ложь; + КонецПроцедуры &НаКлиенте @@ -91,7 +211,7 @@ ЛокальныйПорядок = Ложь; Элементы.ЛокальныйПорядок.ТолькоПросмотр = Истина; Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НедоступныеНастройкиПорядка; - + КонецПроцедуры &НаКлиенте @@ -101,16 +221,16 @@ ЛокальноеУсловноеОформление = Истина; Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НастройкиУсловногоОформления; - + Иначе ЛокальноеУсловноеОформление = Ложь; Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.ОтключенныеНастройкиУсловногоОформления; - - КонецЕсли; - - Элементы.ЛокальноеУсловноеОформление.ТолькоПросмотр = Ложь; + КонецЕсли; + + Элементы.ЛокальноеУсловноеОформление.ТолькоПросмотр = Ложь; + КонецПроцедуры &НаКлиенте @@ -119,7 +239,7 @@ ЛокальноеУсловноеОформление = Ложь; Элементы.ЛокальноеУсловноеОформление.ТолькоПросмотр = Истина; Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НедоступныеНастройкиУсловногоОформления; - + КонецПроцедуры &НаКлиенте @@ -129,16 +249,16 @@ ЛокальныеПараметрыВывода = Истина; Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; - + Иначе ЛокальныеПараметрыВывода = Ложь; Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПараметровВывода; - - КонецЕсли; - - Элементы.ЛокальныеПараметрыВывода.ТолькоПросмотр = Ложь; + КонецЕсли; + + Элементы.ЛокальныеПараметрыВывода.ТолькоПросмотр = Ложь; + КонецПроцедуры &НаКлиенте @@ -152,7 +272,7 @@ &НаКлиенте Процедура КомпоновщикНастроекНастройкиПриАктивизацииПоля(Элемент) - + Перем ВыбраннаяСтраница; Если Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеВыбора" Тогда @@ -182,7 +302,7 @@ Элементы.СтраницыНастроек.ТекущаяСтраница = ВыбраннаяСтраница; КонецЕсли; - + КонецПроцедуры &НаКлиенте @@ -268,7 +388,7 @@ Если ЛокальныеВыбранныеПоля Тогда Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НастройкиВыбранныхПолей; - + Иначе Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиВыбранныхПолей; @@ -286,7 +406,7 @@ Если ЛокальныйОтбор Тогда Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НастройкиОтбора; - + Иначе Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиОтбора; @@ -304,16 +424,16 @@ Если ЛокальныйПорядок Тогда Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НастройкиПорядка; - + Иначе Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПорядка; - + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); Отчет.КомпоновщикНастроек.Настройки.ОчиститьПорядокЭлемента(ЭлементСтруктуры); КонецЕсли; - + КонецПроцедуры &НаКлиенте @@ -322,16 +442,16 @@ Если ЛокальноеУсловноеОформление Тогда Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НастройкиУсловногоОформления; - + Иначе Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.ОтключенныеНастройкиУсловногоОформления; - + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); Отчет.КомпоновщикНастроек.Настройки.ОчиститьУсловноеОформлениеЭлемента(ЭлементСтруктуры); - + КонецЕсли; - + КонецПроцедуры &НаКлиенте @@ -340,136 +460,16 @@ Если ЛокальныеПараметрыВывода Тогда Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; - + Иначе Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПараметровВывода; - + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); Отчет.КомпоновщикНастроек.Настройки.ОчиститьПараметрыВыводаЭлемента(ЭлементСтруктуры); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - ФормаПараметры = Новый Структура( - "КлючНазначенияИспользования, КлючПользовательскихНастроек, - |Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр, - |ФиксированныеНастройки, Раздел, Подсистема, ПодсистемаПредставление"); - ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры); - ФормаПараметры.Вставить("Отбор", Новый Структура); - Если ТипЗнч(Параметры.Отбор) = Тип("Структура") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ФормаПараметры.Отбор, Параметры.Отбор, Истина); - Параметры.Отбор.Очистить(); - КонецЕсли; - - Если Параметры.Свойство("ПредставлениеВарианта") И ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда - АвтоЗаголовок = Ложь; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменение варианта отчета ""%1""'"), Параметры.ПредставлениеВарианта); - КонецЕсли; - - Если Параметры.Свойство("НастройкиОтчета", НастройкиОтчета) Тогда - Если НастройкиОтчета.СхемаМодифицирована Тогда - Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы)); - КонецЕсли; - КонецЕсли; - - Если Не ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда - Параметры.Свойство("ВариантНаименование", Параметры.ПредставлениеВарианта); - КонецЕсли; - - ПолныйПуть = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПолныйПутьТекущегоУзлаКД"); - Если ЗначениеЗаполнено(ПолныйПуть) Тогда - НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Вариант"); - Если НастройкиКД = Неопределено Тогда - НастройкиКД = Отчет.КомпоновщикНастроек.Настройки; - КонецЕсли; - КорневойУзел = ОтчетыКлиентСервер.НайтиЭлементПоПолномуПути(НастройкиКД, ПолныйПуть); - Если КорневойУзел <> Неопределено Тогда - ИдентификаторТекущегоУзлаКД = НастройкиКД.ПолучитьИдентификаторПоОбъекту(КорневойУзел); - КонецЕсли; - КонецЕсли; - Если ТипЗнч(ИдентификаторТекущегоУзлаКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда - ИдентификаторТекущегоУзлаКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока"); - Если ТипЗнч(ИдентификаторТекущегоУзлаКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда - ИдентификаторТекущегоУзлаКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИдентификаторТекущегоУзлаКД"); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПередЗагрузкойВариантаНаСервере(НовыеНастройкиКД) - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда - ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета); - КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Настройки) - НовыеНастройкиКД = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); - Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Новый НастройкиКомпоновкиДанных); - ОтчетыКлиентСервер.ЗагрузитьНастройки(Отчет.КомпоновщикНастроек, НовыеНастройкиКД); -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - Если ТипЗнч(ИдентификаторТекущегоУзлаКД) = Тип("ИдентификаторКомпоновкиДанных") Тогда - ПодключитьОбработчикОжидания("УстановитьТекущуюСтроку", 0.1, Истина); - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура ЗавершитьРедактирование(Команда) - Если МодальныйРежим - Или РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс - Или ВладелецФормы = Неопределено Тогда - Закрыть(Истина); - Иначе - РезультатВыбора = Новый Структура; - РезультатВыбора.Вставить("ВариантМодифицирован", ВариантМодифицирован); - РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", ВариантМодифицирован Или ПользовательскиеНастройкиМодифицированы); - #Если ВебКлиент Тогда - РезультатВыбора.ВариантМодифицирован = Истина; // Для платформы. - РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; - #КонецЕсли - - Если РезультатВыбора.ВариантМодифицирован Тогда - РезультатВыбора.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); - КонецЕсли; - Если РезультатВыбора.ПользовательскиеНастройкиМодифицированы Тогда - РезультатВыбора.Вставить("СброситьПользовательскиеНастройки", Истина); - КонецЕсли; - - ОповеститьОВыборе(РезультатВыбора); КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура УстановитьТекущуюСтроку() - Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока = ИдентификаторТекущегоУзлаКД; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form index 3fc0d1a71..49c6df38c 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form @@ -1,7 +1,7 @@ - ТекущийУзелКДТипДиаграммы + ТекущийТипДиаграммы 788 true true @@ -9,14 +9,14 @@ true - ТекущийУзелКДТипДиаграммы + ТекущийТипДиаграммы OnChange - ТекущийУзелКДТипДиаграммыПриИзменении + ТекущийТипДиаграммыПриИзменении - ТекущийУзелКДТипДиаграммыРасширеннаяПодсказка + ТекущийТипДиаграммыРасширеннаяПодсказка 790 Label true @@ -26,7 +26,7 @@ - ТекущийУзелКДТипДиаграммыКонтекстноеМеню + ТекущийТипДиаграммыКонтекстноеМеню 789 true @@ -311,7 +311,7 @@ - СоставГруппировкиПредставление + СоставГруппировкиПоле 662 true true @@ -319,10 +319,10 @@ true - СоставГруппировки.Представление + СоставГруппировки.Поле - СоставГруппировкиПредставлениеРасширеннаяПодсказка + СоставГруппировкиПолеРасширеннаяПодсказка 664 Label true @@ -332,7 +332,7 @@ - СоставГруппировкиПредставлениеКонтекстноеМеню + СоставГруппировкиПолеКонтекстноеМеню 663 true @@ -788,7 +788,7 @@ true true - СоставГруппировки.ИндексКартинки + СоставГруппировки.Картинка CommonPicture.ПиктограммыНастроекОтчета @@ -828,1648 +828,11 @@ СтраницаОтборы 320 - БыстрыеОтборы - 98 - true - true - - true - - - <key>ru</key> - <value>Быстрые отборы</value> - - - БыстрыеОтборыРасширеннаяПодсказка - 99 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - NormalSeparation - true - true - Auto - Auto - - - - ОбычныеОтборы - 39 - true - true - - true - - - <key>ru</key> - <value>Обычные отборы</value> - - - ОбычныеОтборыРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ГруппаОтборыРасширенныйРежим - 924 - - Отборы - 342 - - <key>ru</key> - <value>Отборы</value> - - 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 - - - <key>ru</key> - <value>Отборы группа 1</value> - - - ОтборыГруппа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 - - - <key>ru</key> - <value>Отборы группа 2</value> - - - ОтборыГруппа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 - - - <key>ru</key> - <value>Команды отборов добавление удаление</value> - - - КомандыОтборов_ДобавлениеУдалениеРасширеннаяПодсказка - 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 - - - <key>ru</key> - <value>Команды отборов приоритет</value> - - - КомандыОтборов_ПриоритетРасширеннаяПодсказка - 416 - Label - true - true - - Left - - - - Compact - - - - КомандыОтборов_Группы - 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 - - - <key>ru</key> - <value>Команды отборов группы</value> - - - КомандыОтборов_ГруппыРасширеннаяПодсказка - 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> - - - КомандыОтборов_ФлажкиРасширеннаяПодсказка - 1060 - Label - true - true - - Left - - - - Compact - - - - КомандыОтборов_Показывать - 1086 - - Отборы_ПоказыватьВШапкеОтчета - 1090 - true - true - - true - - - Отборы_ПоказыватьВШапкеОтчетаРасширеннаяПодсказка - 1091 - Label - true - true - - Left - - - Form.Command.Отборы_ПоказыватьВШапкеОтчета - Normal - Auto - true - true - UserCmds - Auto - - - Отборы_ПоказыватьТолькоФлажокВШапкеОтчета - 1094 - true - true - - true - - - Отборы_ПоказыватьТолькоФлажокВШапкеОтчетаРасширеннаяПодсказка - 1095 - Label - true - true - - Left - - - Form.Command.Отборы_ПоказыватьТолькоФлажокВШапкеОтчета - Normal - Auto - true - true - UserCmds - Auto - - - Отборы_ПоказыватьВНастройкахОтчета - 1088 - true - true - - true - - - Отборы_ПоказыватьВНастройкахОтчетаРасширеннаяПодсказка - 1089 - Label - true - true - - Left - - - Form.Command.Отборы_ПоказыватьВНастройкахОтчета - Normal - Auto - true - true - UserCmds - Auto - - - Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета - 1096 - true - true - - true - - - Отборы_ПоказыватьТолькоФлажокВНастройкахОтчетаРасширеннаяПодсказка - 1097 - Label - true - true - - Left - - - Form.Command.Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета - Normal - Auto - true - true - UserCmds - Auto - - - Отборы_НеПоказывать - 1092 - true - true - - true - - - Отборы_НеПоказыватьРасширеннаяПодсказка - 1093 - Label - true - true - - Left - - - Form.Command.Отборы_НеПоказывать - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Показывать</value> - - - КомандыОтборов_ПоказыватьРасширеннаяПодсказка - 1087 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - 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 - - - <key>ru</key> - <value>Команды отборов добавление удаление 1</value> - - - КомандыОтборов_ДобавлениеУдаление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 - - - <key>ru</key> - <value>Команды отборов приоритет 1</value> - - - КомандыОтборов_Приоритет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 - - - <key>ru</key> - <value>Команды отборов группы 1</value> - - - КомандыОтборов_Группы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> - - - КомандыОтборов_Флажки1РасширеннаяПодсказка - 1066 - Label - true - true - - Left - - - - - - КомандыОтборов_Показывать1 - 1098 - - Отборы_ПоказыватьВШапкеОтчета1 - 1100 - true - true - - true - - - Отборы_ПоказыватьВШапкеОтчета1РасширеннаяПодсказка - 1101 - Label - true - true - - Left - - - Form.Command.Отборы_ПоказыватьВШапкеОтчета - Normal - Auto - true - true - UserCmds - Auto - - - Отборы_ПоказыватьТолькоФлажокВШапкеОтчета1 - 1102 - true - true - - true - - - Отборы_ПоказыватьТолькоФлажокВШапкеОтчета1РасширеннаяПодсказка - 1103 - Label - true - true - - Left - - - Form.Command.Отборы_ПоказыватьТолькоФлажокВШапкеОтчета - Normal - Auto - true - true - UserCmds - Auto - - - Отборы_ПоказыватьВНастройкахОтчета1 - 1104 - true - true - - true - - - Отборы_ПоказыватьВНастройкахОтчета1РасширеннаяПодсказка - 1105 - Label - true - true - - Left - - - Form.Command.Отборы_ПоказыватьВНастройкахОтчета - Normal - Auto - true - true - UserCmds - Auto - - - Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета1 - 1106 - true - true - - true - - - Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета1РасширеннаяПодсказка - 1107 - Label - true - true - - Left - - - Form.Command.Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета - Normal - Auto - true - true - UserCmds - Auto - - - Отборы_НеПоказывать1 - 1108 - true - true - - true - - - Отборы_НеПоказывать1РасширеннаяПодсказка - 1109 - Label - true - true - - Left - - - Form.Command.Отборы_НеПоказывать - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Показывать</value> - - - ru - Команды отборов показывать - - - КомандыОтборов_Показывать1РасширеннаяПодсказка - 1099 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - - 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 -
      + НастройкиПростогоРежима + 1223 - ГруппаЕстьВложенныеОтборы - 806 - - КартинкаИнформация1 - 808 - - <key>ru</key> - <value>Картинка информация</value> - - true - true - - true - - - КартинкаИнформация1РасширеннаяПодсказка - 810 - Label - true - true - - Left - - - - КартинкаИнформация1КонтекстноеМеню - 809 - true - - true - true - - - CommonPicture.Информация - - - - - ПодсказкаЕстьВложенныеОтборы - 811 - - <key>ru</key> - <value>В отчете имеются вложенные отборы, которые можно настроить на странице <b>Структура</>.</value> - - true - true - - true - - - ПодсказкаЕстьВложенныеОтборыРасширеннаяПодсказка - 813 - Label - true - true - - Left - - - - ПодсказкаЕстьВложенныеОтборыКонтекстноеМеню - 812 - true - - true - Label - true - - Style.ПоясняющийТекст - - - - URLProcessing - ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки - - Left - - + Основное + 1233 true true @@ -2477,11 +840,12 @@ <key>ru</key> - <value>Есть вложенные отборы</value> + <value>Основное</value> + true - ГруппаЕстьВложенныеОтборыРасширеннаяПодсказка - 807 + ОсновноеРасширеннаяПодсказка + 1234 Label true true @@ -2491,7 +855,7 @@ UsualGroup - HorizontalIfPossible + Vertical Auto true true @@ -2499,6 +863,152 @@ Auto + + Дополнительно + 1231 + + ПредопределенныеНастройки + 1143 + + ВыводитьЗаголовок + 1145 + true + true + + true + + + ВыводитьЗаголовок + + Right + + OnChange + ВыводитьЗаголовокПриИзменении + + + ВыводитьЗаголовокРасширеннаяПодсказка + 1147 + Label + true + true + + Left + + + + ВыводитьЗаголовокКонтекстноеМеню + 1146 + true + + CheckBoxField + Enter + true + Left + true + + + + ВыводитьПараметрыИОтборы + 1148 + true + true + + true + + + ВыводитьПараметрыИОтборы + + Right + + OnChange + ВыводитьПараметрыИОтборыПриИзменении + + + ВыводитьПараметрыИОтборыРасширеннаяПодсказка + 1150 + Label + true + true + + Left + + + + ВыводитьПараметрыИОтборыКонтекстноеМеню + 1149 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Предопределенные настройки</value> + + true + + ПредопределенныеНастройкиРасширеннаяПодсказка + 1144 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + NormalSeparation + true + true + Auto + Auto + + + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + true + + ДополнительноРасширеннаяПодсказка + 1232 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + true + Button + NormalSeparation + true + true + auto + Auto + Auto + + true true @@ -2506,11 +1016,12 @@ <key>ru</key> - <value>Отборы расширенный режим</value> + <value>Настройки</value> + true - ГруппаОтборыРасширенныйРежимРасширеннаяПодсказка - 925 + НастройкиПростогоРежимаРасширеннаяПодсказка + 1224 Label true true @@ -2528,6 +1039,1710 @@ Auto
      + + Отборы + 342 + + <key>ru</key> + <value>Отборы</value> + + true + true + + true + + + Отборы + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + ГруппаОтборыПоле + 361 + + ОтборыИспользование + 1173 + true + true + + true + + + Отборы.Использование + + None + + OnChange + ОтборыИспользованиеПриИзменении + + + ОтборыИспользованиеРасширеннаяПодсказка + 1175 + Label + true + true + + Left + + + + ОтборыИспользованиеКонтекстноеМеню + 1174 + true + + CheckBoxField + Auto + true + Left + true + + + + ОтборыПараметр + 1212 + true + true + + true + + + Отборы.Параметр + + + ОтборыПараметрРасширеннаяПодсказка + 1214 + Label + true + true + + Left + + + + ОтборыПараметрКонтекстноеМеню + 1213 + true + + InputField + Auto + true + Left + true + + 1 + true + true + true + true + true + true + Normal + + + + ОтборыТипГруппы + 1209 + true + true + + true + + + Отборы.ТипГруппы + + None + + ОтборыТипГруппыРасширеннаяПодсказка + 1211 + Label + true + true + + Left + + + + ОтборыТипГруппыКонтекстноеМеню + 1210 + true + + InputField + Auto + true + Left + true + + 1 + true + true + true + true + true + true + Normal + + + + ОтборыЛевоеЗначение + 1215 + true + true + + true + + + Отборы.ЛевоеЗначение + + None + + ОтборыЛевоеЗначениеРасширеннаяПодсказка + 1217 + Label + true + true + + Left + + + + ОтборыЛевоеЗначениеКонтекстноеМеню + 1216 + true + + InputField + Auto + true + Left + true + + 1 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Поле</value> + + + ГруппаОтборыПолеРасширеннаяПодсказка + 362 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОтборыВидСравнения + 1185 + true + true + + true + + + Отборы.ВидСравнения + + + OnChange + ОтборыВидСравненияПриИзменении + + + ОтборыВидСравненияРасширеннаяПодсказка + 1187 + Label + true + true + + Left + + + + ОтборыВидСравненияКонтекстноеМеню + 1186 + true + + InputField + Auto + true + Left + true + + 10 + true + true + true + true + true + true + Normal + + + + ГруппаОтборыЗначение + 1218 + + ОтборыЗначение + 1188 + true + true + + true + + + Отборы.Значение + + + OnChange + ОтборыЗначениеПриИзменении + + + ОтборыЗначениеРасширеннаяПодсказка + 1190 + Label + true + true + + Left + + + + ОтборыЗначениеКонтекстноеМеню + 1189 + true + + InputField + Auto + true + Left + true + + + StartChoice + ОтборыЗначениеНачалоВыбора + + 10 + true + true + true + true + true + true + Normal + + + + ОтборыПравоеЗначение + 1220 + true + true + + true + + + Отборы.ПравоеЗначение + + + OnChange + ОтборыПравоеЗначениеПриИзменении + + + ОтборыПравоеЗначениеРасширеннаяПодсказка + 1222 + Label + true + true + + Left + + + + ОтборыПравоеЗначениеКонтекстноеМеню + 1221 + true + + InputField + Auto + true + Left + true + + + StartChoice + ОтборыПравоеЗначениеНачалоВыбора + + 10 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Значение</value> + + + ГруппаОтборыЗначениеРасширеннаяПодсказка + 1219 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ОтборыКартинкаРежимаОтображения + 1203 + true + true + + true + + + Отборы.КартинкаРежимаОтображения + + None + + ОтборыКартинкаРежимаОтображенияРасширеннаяПодсказка + 1205 + Label + true + true + + Left + + + + ОтборыКартинкаРежимаОтображенияКонтекстноеМеню + 1204 + true + + PictureField + Auto + true + + CommonPicture.БыстрыйДоступ + + Left + true + + 2 + true + true + true + + CommonPicture.ПиктограммыДоступаКНастройкамОтчета + + + + 1 + + + + + ОтборыПредставлениеПользовательскойНастройки + 1206 + true + true + + true + + + Отборы.ПредставлениеПользовательскойНастройки + + + OnChange + ОтборыПредставлениеПользовательскойНастройкиПриИзменении + + + ОтборыПредставлениеПользовательскойНастройкиРасширеннаяПодсказка + 1208 + Label + true + true + + Left + + + + ОтборыПредставлениеПользовательскойНастройкиКонтекстноеМеню + 1207 + true + + InputField + Auto + true + Left + true + + 10 + 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 + + + <key>ru</key> + <value>Команды отборов добавление удаление</value> + + + КомандыОтборов_ДобавлениеУдалениеРасширеннаяПодсказка + 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 + + + <key>ru</key> + <value>Команды отборов приоритет</value> + + + КомандыОтборов_ПриоритетРасширеннаяПодсказка + 416 + Label + true + true + + Left + + + + Compact + + + + КомандыОтборов_Группы + 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 + + + <key>ru</key> + <value>Команды отборов группы</value> + + + КомандыОтборов_ГруппыРасширеннаяПодсказка + 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> + + + КомандыОтборов_ФлажкиРасширеннаяПодсказка + 1060 + Label + true + true + + Left + + + + Compact + + + + КомандыОтборов_Показывать + 1086 + + Отборы_ПоказыватьВШапкеОтчета + 1090 + true + true + + true + + + Отборы_ПоказыватьВШапкеОтчетаРасширеннаяПодсказка + 1091 + Label + true + true + + Left + + + Form.Command.Отборы_ПоказыватьВШапкеОтчета + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_ПоказыватьТолькоФлажокВШапкеОтчета + 1094 + true + true + + true + + + Отборы_ПоказыватьТолькоФлажокВШапкеОтчетаРасширеннаяПодсказка + 1095 + Label + true + true + + Left + + + Form.Command.Отборы_ПоказыватьТолькоФлажокВШапкеОтчета + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_ПоказыватьВНастройкахОтчета + 1088 + true + true + + true + + + Отборы_ПоказыватьВНастройкахОтчетаРасширеннаяПодсказка + 1089 + Label + true + true + + Left + + + Form.Command.Отборы_ПоказыватьВНастройкахОтчета + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета + 1096 + true + true + + true + + + Отборы_ПоказыватьТолькоФлажокВНастройкахОтчетаРасширеннаяПодсказка + 1097 + Label + true + true + + Left + + + Form.Command.Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_НеПоказывать + 1092 + true + true + + true + + + Отборы_НеПоказыватьРасширеннаяПодсказка + 1093 + Label + true + true + + Left + + + Form.Command.Отборы_НеПоказывать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Показывать</value> + + + КомандыОтборов_ПоказыватьРасширеннаяПодсказка + 1087 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + Left + + + Selection + ОтборыВыбор + + + BeforeAddRow + ОтборыПередНачаломДобавления + + + BeforeDeleteRow + ОтборыПередУдалением + + + OnActivateRow + ОтборыПриАктивизацииСтроки + + + OnActivateCell + ОтборыПриАктивизацииЯчейки + + + ОтборыСтрокаПоиска + 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 + + + <key>ru</key> + <value>Команды отборов добавление удаление 1</value> + + + КомандыОтборов_ДобавлениеУдаление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 + + + <key>ru</key> + <value>Команды отборов приоритет 1</value> + + + КомандыОтборов_Приоритет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 + + + <key>ru</key> + <value>Команды отборов группы 1</value> + + + КомандыОтборов_Группы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> + + + КомандыОтборов_Флажки1РасширеннаяПодсказка + 1066 + Label + true + true + + Left + + + + + + КомандыОтборов_Показывать1 + 1098 + + Отборы_ПоказыватьВШапкеОтчета1 + 1100 + true + true + + true + + + Отборы_ПоказыватьВШапкеОтчета1РасширеннаяПодсказка + 1101 + Label + true + true + + Left + + + Form.Command.Отборы_ПоказыватьВШапкеОтчета + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_ПоказыватьТолькоФлажокВШапкеОтчета1 + 1102 + true + true + + true + + + Отборы_ПоказыватьТолькоФлажокВШапкеОтчета1РасширеннаяПодсказка + 1103 + Label + true + true + + Left + + + Form.Command.Отборы_ПоказыватьТолькоФлажокВШапкеОтчета + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_ПоказыватьВНастройкахОтчета1 + 1104 + true + true + + true + + + Отборы_ПоказыватьВНастройкахОтчета1РасширеннаяПодсказка + 1105 + Label + true + true + + Left + + + Form.Command.Отборы_ПоказыватьВНастройкахОтчета + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета1 + 1106 + true + true + + true + + + Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета1РасширеннаяПодсказка + 1107 + Label + true + true + + Left + + + Form.Command.Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_НеПоказывать1 + 1108 + true + true + + true + + + Отборы_НеПоказывать1РасширеннаяПодсказка + 1109 + Label + true + true + + Left + + + Form.Command.Отборы_НеПоказывать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Показывать</value> + + + ru + Команды отборов показывать + + + КомандыОтборов_Показывать1РасширеннаяПодсказка + 1099 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + Tree + true + true + true + true + true + AfterCurrentRow + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + false + false + DontUse + Auto + ExpandAllLevels + true + true + true + true + + Отборы.Картинка + + + CommonPicture.ПиктограммыНастроекОтчета + + true +
      + + ГруппаЕстьВложенныеОтборы + 806 + + ОтборыПодсказкаКартинка + 808 + + <key>ru</key> + <value>Подсказка</value> + + true + true + + true + + + ОтборыПодсказкаКартинкаРасширеннаяПодсказка + 810 + Label + true + true + + Left + + + + ОтборыПодсказкаКартинкаКонтекстноеМеню + 809 + true + + true + true + + + CommonPicture.Информация + + + + + ОтборыПодсказка + 811 + + <key>ru</key> + <value>В отчете имеются вложенные отборы, которые можно настроить на странице <b>Структура</>.</value> + + true + true + + true + + + ОтборыПодсказкаРасширеннаяПодсказка + 813 + Label + true + true + + Left + + + + ОтборыПодсказкаКонтекстноеМеню + 812 + true + + true + Label + true + + Style.ПоясняющийТекст + + + + URLProcessing + ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Есть вложенные отборы</value> + + + ГруппаЕстьВложенныеОтборыРасширеннаяПодсказка + 807 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + true true @@ -2636,7 +2851,7 @@
      - ВыбранныеПоляПредставление + ВыбранныеПоляПоле 262 true true @@ -2644,10 +2859,10 @@ true - ВыбранныеПоля.Представление + ВыбранныеПоля.Поле - ВыбранныеПоляПредставлениеРасширеннаяПодсказка + ВыбранныеПоляПолеРасширеннаяПодсказка 264 Label true @@ -2657,7 +2872,7 @@ - ВыбранныеПоляПредставлениеКонтекстноеМеню + ВыбранныеПоляПолеКонтекстноеМеню 263 true @@ -3487,7 +3702,7 @@ true true - ВыбранныеПоля.ИндексКартинки + ВыбранныеПоля.Картинка CommonPicture.ПиктограммыНастроекОтчета @@ -3678,7 +3893,7 @@ - СортировкаПредставление + СортировкаПоле 155 true true @@ -3686,10 +3901,10 @@ true - Сортировка.Представление + Сортировка.Поле - СортировкаПредставлениеРасширеннаяПодсказка + СортировкаПолеРасширеннаяПодсказка 157 Label true @@ -3699,7 +3914,7 @@ - СортировкаПредставлениеКонтекстноеМеню + СортировкаПолеКонтекстноеМеню 156 true @@ -3746,7 +3961,7 @@ - СортировкаНаправление + СортировкаТипУпорядочивания 158 true true @@ -3754,10 +3969,10 @@ true - Сортировка.Направление + Сортировка.ТипУпорядочивания - СортировкаНаправлениеРасширеннаяПодсказка + СортировкаТипУпорядочиванияРасширеннаяПодсказка 160 Label true @@ -3767,7 +3982,7 @@ - СортировкаНаправлениеКонтекстноеМеню + СортировкаТипУпорядочиванияКонтекстноеМеню 159 true @@ -3954,6 +4169,7 @@ Сортировка_ПоВозрастанию 169 + true true true @@ -3979,6 +4195,7 @@ Сортировка_ПоУбыванию 171 + true true true @@ -4020,7 +4237,9 @@ Left - + + Compact + КомандыСортировки_Флажки @@ -4545,7 +4764,7 @@ true true - Сортировка.ИндексКартинки + Сортировка.Картинка CommonPicture.ПиктограммыНастроекОтчета @@ -4750,256 +4969,56 @@ СтраницаОформление 590 - - СтраницаДополнительноПодвал - 51 + + Оформление + 838 + + <key>ru</key> + <value>Оформление</value> + true true true - - <key>ru</key> - <value>Страница дополнительно подвал</value> - - - СтраницаДополнительноПодвалРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - СтраницаДополнительноГруппировки - 49 - true - true - - true - - - <key>ru</key> - <value>Страница дополнительно группировки</value> - - - СтраницаДополнительноГруппировкиРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - СтраницаДополнительноШапка - 47 - true - true - - true - - - <key>ru</key> - <value>Страница дополнительно шапка</value> - - - СтраницаДополнительноШапкаРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаОформлениеРасширенныйРежим - 922 - - Оформление - 838 - - <key>ru</key> - <value>Оформление</value> - - true - true - - true - - - Оформление - - None - Change - Copy - CopyToClipboard - EndEdit - HierarchicalList - List - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - Tree - - ОформлениеГруппа1 - 889 - - ОформлениеИспользование - 891 - true - true - - true - - - Оформление.Использование - - - OnChange - ОформлениеИспользованиеПриИзменении - - - ОформлениеИспользованиеРасширеннаяПодсказка - 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 - - - <key>ru</key> - <value>Оформление группа 1</value> - - - ОформлениеГруппа1РасширеннаяПодсказка - 890 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - + + Оформление + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + ЭлементОформления + 889 - ОформлениеИндексКартинкиДоступа - 897 + ОформлениеИспользование + 891 true true true - Оформление.ИндексКартинкиДоступа + Оформление.Использование - None + + OnChange + ОформлениеИспользованиеПриИзменении + - ОформлениеИндексКартинкиДоступаРасширеннаяПодсказка - 899 + ОформлениеИспользованиеРасширеннаяПодсказка + 893 Label true true @@ -5008,363 +5027,103 @@ - ОформлениеИндексКартинкиДоступаКонтекстноеМеню - 898 + ОформлениеИспользованиеКонтекстноеМеню + 892 true - PictureField + CheckBoxField Auto - true - - CommonPicture.БыстрыйДоступ - Left true - - 2 + + + + ОформлениеЗаголовок + 894 + + <key>ru</key> + <value>Элемент оформления</value> + + true + true + + true + + + Оформление.Заголовок + + + ОформлениеЗаголовокРасширеннаяПодсказка + 896 + Label true true - true - true - - CommonPicture.ПиктограммыДоступаКНастройкамОтчета - - - - 1 - + + Left + + + + ОформлениеЗаголовокКонтекстноеМеню + 895 + true + + InputField + Auto + true + Left + true + + true + true + false + true + true + true + true + Normal - 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 - - - <key>ru</key> - <value>Команды оформления добавление удаление</value> - - - КомандыОформления_ДобавлениеУдалениеРасширеннаяПодсказка - 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 - - - <key>ru</key> - <value>Команды оформления приоритет</value> - - - КомандыОформления_ПриоритетРасширеннаяПодсказка - 833 - Label - true - true - - Left - - - - Compact - - - - КомандыОформления_Флажки - 1120 - - Оформление_УстановитьФлажки - 1122 - true - true - - true - - - Оформление_УстановитьФлажкиРасширеннаяПодсказка - 1123 - Label - true - true - - Left - - - Form.Command.Оформление_УстановитьФлажки - Normal - Auto - true - true - UserCmds - Auto - - - Оформление_СнятьФлажки - 1124 - true - true - - true - - - Оформление_СнятьФлажкиРасширеннаяПодсказка - 1125 - Label - true - true - - Left - - - Form.Command.Оформление_СнятьФлажки - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды оформления флажки</value> - - - КомандыОформления_ФлажкиРасширеннаяПодсказка - 1121 - Label - true - true - - Left - - - - Compact - - - 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 - - + true + true + + true + + + <key>ru</key> + <value>Элемент оформления</value> + - ОформлениеРасширеннаяПодсказка - 841 + ЭлементОформленияРасширеннаяПодсказка + 890 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОформлениеИндексКартинкиДоступа + 897 + true + true + + true + + + Оформление.КартинкаРежимаОтображения + + None + + ОформлениеИндексКартинкиДоступаРасширеннаяПодсказка + 899 Label true true @@ -5373,56 +5132,389 @@ - ОформлениеКонтекстноеМеню - 839 + ОформлениеИндексКартинкиДоступаКонтекстноеМеню + 898 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 + PictureField + Auto + true + + CommonPicture.БыстрыйДоступ + + Left + true + + 2 + true + true + true + true + + CommonPicture.ПиктограммыДоступаКНастройкамОтчета + + + + 1 + +
      - true - true - - true - - - <key>ru</key> - <value>Оформление расширенный режим</value> - + 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 + + + <key>ru</key> + <value>Команды оформления добавление удаление</value> + + + КомандыОформления_ДобавлениеУдалениеРасширеннаяПодсказка + 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 + + + <key>ru</key> + <value>Команды оформления приоритет</value> + + + КомандыОформления_ПриоритетРасширеннаяПодсказка + 833 + Label + true + true + + Left + + + + Compact + + + + КомандыОформления_Флажки + 1120 + + Оформление_УстановитьФлажки + 1122 + true + true + + true + + + Оформление_УстановитьФлажкиРасширеннаяПодсказка + 1123 + Label + true + true + + Left + + + Form.Command.Оформление_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + Оформление_СнятьФлажки + 1124 + true + true + + true + + + Оформление_СнятьФлажкиРасширеннаяПодсказка + 1125 + Label + true + true + + Left + + + Form.Command.Оформление_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды оформления флажки</value> + + + КомандыОформления_ФлажкиРасширеннаяПодсказка + 1121 + Label + true + true + + Left + + + + Compact + + + + ОформлениеНастроитьКолонтитулы + 1126 + true + true + + true + + + ОформлениеНастроитьКолонтитулыРасширеннаяПодсказка + 1127 + Label + true + true + + Left + + + Form.Command.НастроитьКолонтитулы + Normal + Auto + true + true + UserCmds + Auto + + 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 + + - ГруппаОформлениеРасширенныйРежимРасширеннаяПодсказка - 923 + ОформлениеРасширеннаяПодсказка + 841 Label true true @@ -5430,15 +5522,44 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - + + ОформлениеКонтекстноеМеню + 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
      ГруппаЕстьВложенноеОформление @@ -7030,7 +7151,7 @@ true true - СтруктураВарианта.ИндексКартинки + СтруктураВарианта.Картинка CommonPicture.ПиктограммыНастроекОтчета @@ -7068,10 +7189,10 @@ СтраницаНетПользовательскихНастроек - 1071 + 1235 КартинкаИнформация4 - 1078 + 1237 <key>ru</key> <value>Картинка информация</value> @@ -7083,7 +7204,7 @@ </userVisible> <extendedTooltip> <name>КартинкаИнформация4РасширеннаяПодсказка</name> - <id>1080</id> + <id>1239</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7093,7 +7214,7 @@ </extendedTooltip> <contextMenu> <name>КартинкаИнформация4КонтекстноеМеню</name> - <id>1079</id> + <id>1238</id> <autoFill>true</autoFill> </contextMenu> <autoMaxWidth>true</autoMaxWidth> @@ -7105,8 +7226,8 @@ </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ПодсказкаНетПользовательскихНастроек</name> - <id>1081</id> + <name>ТекстПредупрежденияОбОтсутствииПользовательскихНастроек</name> + <id>1240</id> <title> <key>ru</key> <value>У этого отчета нет ни одной пользовательской настройки. @@ -7118,8 +7239,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПодсказкаНетПользовательскихНастроекРасширеннаяПодсказка</name> - <id>1083</id> + <name>ТекстПредупрежденияОбОтсутствииПользовательскихНастроекРасширеннаяПодсказка</name> + <id>1242</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7128,8 +7249,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПодсказкаНетПользовательскихНастроекКонтекстноеМеню</name> - <id>1082</id> + <name>ТекстПредупрежденияОбОтсутствииПользовательскихНастроекКонтекстноеМеню</name> + <id>1241</id> <autoFill>true</autoFill> </contextMenu> <formatted>true</formatted> @@ -7138,7 +7259,7 @@ <extInfo xsi:type="form:LabelDecorationExtInfo"> <handlers> <event>URLProcessing</event> - <name>ПодсказкаНетПользовательскихНастроекОбработкаНавигационнойСсылки</name> + <name>ПредупрежденияОбОтсутствииПользовательскихНастроекОбработкаНавигационнойСсылки</name> </handlers> <horizontalAlign>Left</horizontalAlign> </extInfo> @@ -7154,7 +7275,7 @@ <enableContentChange>true</enableContentChange> <extendedTooltip> <name>СтраницаНетПользовательскихНастроекРасширеннаяПодсказка</name> - <id>1072</id> + <id>1236</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7169,36 +7290,6 @@ <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>НеОтсортированное</name> - <id>62</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <title> - <key>ru</key> - <value>Не отсортированные</value> - - true - - НеОтсортированноеРасширеннаяПодсказка - 63 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - true true @@ -7208,6 +7299,7 @@ ru Страницы настроек + true СтраницыНастроекРасширеннаяПодсказка 36 @@ -7760,6 +7852,1529 @@ Auto + + ПредопределенныеЭлементыНастроек + 1256 + + Период1 + 1243 + + Период1ДатаНачала + 1245 + + <key>ru</key> + <value>Период (дата начала)</value> + + true + true + + true + + + Период1.StartDate + + None + + OnChange + Подключаемый_Период_ПриИзменении + + + Период1ДатаНачалаРасширеннаяПодсказка + 1247 + Label + true + true + + Left + + + + Период1ДатаНачалаКонтекстноеМеню + 1246 + true + + InputField + Enter + true + Left + true + + 9 + true + true + false + true + true + true + true + Normal + + + + Разделитель1 + 1248 + + <key>ru</key> + <value>–</value> + + true + true + + true + + + Разделитель1РасширеннаяПодсказка + 1250 + Label + true + true + + Left + + + + Разделитель1КонтекстноеМеню + 1249 + true + + Label + true + true + + Left + + + + Период1ДатаОкончания + 1251 + + <key>ru</key> + <value>Период (дата окончания)</value> + + true + true + + true + + + Период1.EndDate + + None + + OnChange + Подключаемый_Период_ПриИзменении + + + Период1ДатаОкончанияРасширеннаяПодсказка + 1253 + Label + true + true + + Left + + + + Период1ДатаОкончанияКонтекстноеМеню + 1252 + true + + InputField + Enter + true + Left + true + + 9 + true + true + false + true + true + true + true + Normal + + + + ВыбратьПериод1 + 1254 + true + true + + true + + + ВыбратьПериод1РасширеннаяПодсказка + 1255 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбратьПериод1 + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Период</value> + + true + + Период1РасширеннаяПодсказка + 1244 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Период2 + 1344 + + Период2ДатаНачала + 1346 + + <key>ru</key> + <value>Период (дата начала)</value> + + true + true + + true + + + Период2.StartDate + + None + + OnChange + Подключаемый_Период_ПриИзменении + + + Период2ДатаНачалаРасширеннаяПодсказка + 1348 + Label + true + true + + Left + + + + Период2ДатаНачалаКонтекстноеМеню + 1347 + true + + InputField + Enter + true + Left + true + + 9 + true + true + false + true + true + true + true + Normal + + + + Разделитель2 + 1349 + + <key>ru</key> + <value>–</value> + + true + true + + true + + + Разделитель2РасширеннаяПодсказка + 1351 + Label + true + true + + Left + + + + Разделитель2КонтекстноеМеню + 1350 + true + + Label + true + true + + Left + + + + Период2ДатаОкончания + 1352 + + <key>ru</key> + <value>Период (дата окончания)</value> + + true + true + + true + + + Период2.EndDate + + None + + OnChange + Подключаемый_Период_ПриИзменении + + + Период2ДатаОкончанияРасширеннаяПодсказка + 1354 + Label + true + true + + Left + + + + Период2ДатаОкончанияКонтекстноеМеню + 1353 + true + + InputField + Enter + true + Left + true + + 9 + true + true + false + true + true + true + true + Normal + + + + ВыбратьПериод2 + 1355 + true + true + + true + + + ВыбратьПериод2РасширеннаяПодсказка + 1356 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбратьПериод2 + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Период</value> + + true + + Период2РасширеннаяПодсказка + 1345 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Флажок1 + 1357 + true + true + + true + + + Флажок1 + + + OnChange + Подключаемый_ЭлементНастройки_ПриИзменении + + + Флажок1РасширеннаяПодсказка + 1359 + Label + true + true + + Left + + + + Флажок1КонтекстноеМеню + 1358 + true + + CheckBoxField + Enter + true + Left + true + + + + Флажок2 + 1360 + true + true + + true + + + Флажок2 + + + OnChange + Подключаемый_ЭлементНастройки_ПриИзменении + + + Флажок2РасширеннаяПодсказка + 1362 + Label + true + true + + Left + + + + Флажок2КонтекстноеМеню + 1361 + true + + CheckBoxField + Enter + true + Left + true + + + + Список1 + 1258 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список1 + + None + + Список1Колонки + 1274 + + Список1Пометка + 1276 + true + true + + true + + + Список1.Check + + + Список1ПометкаРасширеннаяПодсказка + 1278 + Label + true + true + + Left + + + + Список1ПометкаКонтекстноеМеню + 1277 + true + + CheckBoxField + Auto + true + Left + true + + + + Список1Значение + 1271 + true + true + + true + + + Список1.Value + + + OnChange + Подключаемый_ЭлементСписка_ПриИзменении + + + Список1ЗначениеРасширеннаяПодсказка + 1273 + Label + true + true + + Left + + + + Список1ЗначениеКонтекстноеМеню + 1272 + true + + InputField + Auto + true + Left + true + + + StartChoice + Подключаемый_ЭлементСписка_НачалоВыбора + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Поля</value> + + + Список1КолонкиРасширеннаяПодсказка + 1275 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + None + + Список1КоманднаяПанель + 1260 + Left + true + + + ChoiceProcessing + Подключаемый_Список_ОбработкаВыбора + + + OnChange + Подключаемый_Список_ПриИзменении + + + Список1СтрокаПоиска + 1262 + + Список1СтрокаПоискаРасширеннаяПодсказка + 1264 + Label + true + true + + Left + + + + Список1СтрокаПоискаКонтекстноеМеню + 1263 + true + + Список1 + + true + + + + Список1СостояниеПросмотра + 1265 + + Список1СостояниеПросмотраРасширеннаяПодсказка + 1267 + Label + true + true + + Left + + + + Список1СостояниеПросмотраКонтекстноеМеню + 1266 + true + + ViewStatusAddition + Список1 + + true + + + + Список1УправлениеПоиском + 1268 + + Список1УправлениеПоискомРасширеннаяПодсказка + 1270 + Label + true + true + + Left + + + + Список1УправлениеПоискомКонтекстноеМеню + 1269 + true + + SearchControlAddition + Список1 + + true + + + + Список1РасширеннаяПодсказка + 1261 + Label + true + true + + Left + + + + Список1КонтекстноеМеню + 1259 + true + + true + true + true + 3 + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + AsFileRef + + Список1.Picture + + true + + + Список2 + 1279 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список2 + + None + + Список2Колонки + 1292 + + Список2Пометка + 1297 + true + true + + true + + + Список2.Check + + + Список2ПометкаРасширеннаяПодсказка + 1299 + Label + true + true + + Left + + + + Список2ПометкаКонтекстноеМеню + 1298 + true + + CheckBoxField + Auto + true + Left + true + + + + Список2Значение + 1294 + true + true + + true + + + Список2.Value + + + OnChange + Подключаемый_ЭлементСписка_ПриИзменении + + + Список2ЗначениеРасширеннаяПодсказка + 1296 + Label + true + true + + Left + + + + Список2ЗначениеКонтекстноеМеню + 1295 + true + + InputField + Auto + true + Left + true + + + StartChoice + Подключаемый_ЭлементСписка_НачалоВыбора + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Поля</value> + + + Список2КолонкиРасширеннаяПодсказка + 1293 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + None + + Список2КоманднаяПанель + 1281 + Left + true + + + ChoiceProcessing + Подключаемый_Список_ОбработкаВыбора + + + OnChange + Подключаемый_Список_ПриИзменении + + + Список2СтрокаПоиска + 1283 + + Список2СтрокаПоискаРасширеннаяПодсказка + 1285 + Label + true + true + + Left + + + + Список2СтрокаПоискаКонтекстноеМеню + 1284 + true + + Список2 + + true + + + + Список2СостояниеПросмотра + 1286 + + Список2СостояниеПросмотраРасширеннаяПодсказка + 1288 + Label + true + true + + Left + + + + Список2СостояниеПросмотраКонтекстноеМеню + 1287 + true + + ViewStatusAddition + Список2 + + true + + + + Список2УправлениеПоиском + 1289 + + Список2УправлениеПоискомРасширеннаяПодсказка + 1291 + Label + true + true + + Left + + + + Список2УправлениеПоискомКонтекстноеМеню + 1290 + true + + SearchControlAddition + Список2 + + true + + + + Список2РасширеннаяПодсказка + 1282 + Label + true + true + + Left + + + + Список2КонтекстноеМеню + 1280 + true + + true + true + true + 3 + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + AsFileRef + + Список2.Picture + + true + + + Список3 + 1300 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список3 + + None + + Список3Колонки + 1313 + + Список3Пометка + 1318 + true + true + + true + + + Список3.Check + + + Список3ПометкаРасширеннаяПодсказка + 1320 + Label + true + true + + Left + + + + Список3ПометкаКонтекстноеМеню + 1319 + true + + CheckBoxField + Auto + true + Left + true + + + + Список3Значение + 1315 + true + true + + true + + + Список3.Value + + + OnChange + Подключаемый_ЭлементСписка_ПриИзменении + + + Список3ЗначениеРасширеннаяПодсказка + 1317 + Label + true + true + + Left + + + + Список3ЗначениеКонтекстноеМеню + 1316 + true + + InputField + Auto + true + Left + true + + + StartChoice + Подключаемый_ЭлементСписка_НачалоВыбора + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Поля</value> + + + Список3КолонкиРасширеннаяПодсказка + 1314 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + None + + Список3КоманднаяПанель + 1302 + Left + true + + + ChoiceProcessing + Подключаемый_Список_ОбработкаВыбора + + + OnChange + Подключаемый_Список_ПриИзменении + + + Список3СтрокаПоиска + 1304 + + Список3СтрокаПоискаРасширеннаяПодсказка + 1306 + Label + true + true + + Left + + + + Список3СтрокаПоискаКонтекстноеМеню + 1305 + true + + Список3 + + true + + + + Список3СостояниеПросмотра + 1307 + + Список3СостояниеПросмотраРасширеннаяПодсказка + 1309 + Label + true + true + + Left + + + + Список3СостояниеПросмотраКонтекстноеМеню + 1308 + true + + ViewStatusAddition + Список3 + + true + + + + Список3УправлениеПоиском + 1310 + + Список3УправлениеПоискомРасширеннаяПодсказка + 1312 + Label + true + true + + Left + + + + Список3УправлениеПоискомКонтекстноеМеню + 1311 + true + + SearchControlAddition + Список3 + + true + + + + Список3РасширеннаяПодсказка + 1303 + Label + true + true + + Left + + + + Список3КонтекстноеМеню + 1301 + true + + true + true + true + 3 + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + AsFileRef + + Список3.Picture + + true + + + Список4 + 1321 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список4 + + None + + Список4Колонки + 1334 + + Список4Пометка + 1339 + true + true + + true + + + Список4.Check + + + Список4ПометкаРасширеннаяПодсказка + 1341 + Label + true + true + + Left + + + + Список4ПометкаКонтекстноеМеню + 1340 + true + + CheckBoxField + Auto + true + Left + true + + + + Список4Значение + 1336 + true + true + + true + + + Список4.Value + + + OnChange + Подключаемый_ЭлементСписка_ПриИзменении + + + Список4ЗначениеРасширеннаяПодсказка + 1338 + Label + true + true + + Left + + + + Список4ЗначениеКонтекстноеМеню + 1337 + true + + InputField + Auto + true + Left + true + + + StartChoice + Подключаемый_ЭлементСписка_НачалоВыбора + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Поля</value> + + + Список4КолонкиРасширеннаяПодсказка + 1335 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + None + + Список4КоманднаяПанель + 1323 + Left + true + + + ChoiceProcessing + Подключаемый_Список_ОбработкаВыбора + + + OnChange + Подключаемый_Список_ПриИзменении + + + Список4СтрокаПоиска + 1325 + + Список4СтрокаПоискаРасширеннаяПодсказка + 1327 + Label + true + true + + Left + + + + Список4СтрокаПоискаКонтекстноеМеню + 1326 + true + + Список4 + + true + + + + Список4СостояниеПросмотра + 1328 + + Список4СостояниеПросмотраРасширеннаяПодсказка + 1330 + Label + true + true + + Left + + + + Список4СостояниеПросмотраКонтекстноеМеню + 1329 + true + + ViewStatusAddition + Список4 + + true + + + + Список4УправлениеПоиском + 1331 + + Список4УправлениеПоискомРасширеннаяПодсказка + 1333 + Label + true + true + + Left + + + + Список4УправлениеПоискомКонтекстноеМеню + 1332 + true + + SearchControlAddition + Список4 + + true + + + + Список4РасширеннаяПодсказка + 1324 + Label + true + true + + Left + + + + Список4КонтекстноеМеню + 1322 + true + + true + true + true + 3 + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + AsFileRef + + Список4.Picture + + true + + true + + true + + + <key>ru</key> + <value>Предопределенные элементы настроек</value> + + + ПредопределенныеЭлементыНастроекРасширеннаяПодсказка + 1257 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + Bottom true @@ -7767,10 +9382,6 @@ -1 Right - - OnOpen - ПриОткрытии - BeforeClose ПередЗакрытием @@ -7791,6 +9402,11 @@ true auto true + + + КомандыФормы_Правая + + НастройкиОтчета @@ -7881,36 +9497,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>БыстрыйПоискИменОбъектовМетаданных</name> - <title> - <key>ru</key> - <value>Быстрый поиск имен объектов метаданных</value> - - 18 - - - true - - - true - - - - БыстрыйПоискПользовательскихНастроек - - <key>ru</key> - <value>Быстрый поиск пользовательских настроек</value> - - 20 - - - true - - - true - - ШрифтОбычнойГруппы @@ -7965,10 +9551,10 @@ <common>true</common> </edit> <columns> - <name>ИдентификаторКД</name> + <name>Идентификатор</name> <title> <key>ru</key> - <value>Идентификатор КД</value> + <value>Идентификатор</value> 1 @@ -7997,10 +9583,10 @@ - Представление + Заголовок <key>ru</key> - <value>Представление</value> + <value>Заголовок</value> 3 @@ -8015,10 +9601,10 @@ - Направление + ТипУпорядочивания <key>ru</key> - <value>Направление</value> + <value>Тип упорядочивания</value> 4 @@ -8049,10 +9635,10 @@ - ИндексКартинки + Картинка <key>ru</key> - <value>Индекс картинки</value> + <value>Картинка</value> 6 @@ -8069,15 +9655,29 @@ - ТипНастройки + Поле <key>ru</key> - <value>Тип настройки</value> + <value>Поле</value> + + 9 + + + true + + + true + + + + ЭтоАвтоПоле + + <key>ru</key> + <value>Это авто поле</value> 7 - String - + Boolean true @@ -8087,10 +9687,10 @@ - ПоказыватьНаправление + ПометкаУдаления <key>ru</key> - <value>Показывать направление</value> + <value>Пометка удаления</value> 8 @@ -8105,10 +9705,10 @@ - РежимИзмененияУзлаВарианта + РежимИзмененияЭлементаСтруктурыНастроек <key>ru</key> - <value>Режим изменения узла варианта</value> + <value>Режим изменения элемента структуры настроек</value> 15 @@ -8138,10 +9738,10 @@ true - ИдентификаторКД + Идентификатор <key>ru</key> - <value>Идентификатор КД</value> + <value>Идентификатор</value> 1 @@ -8169,292 +9769,13 @@ 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 + 3 String @@ -8466,23 +9787,6 @@ true - - ЭтоРаздел - - <key>ru</key> - <value>Это раздел</value> - - 11 - - Boolean - - - true - - - true - - ЭтоГруппа @@ -8501,12 +9805,49 @@ </edit> </columns> <columns> - <name>ЭтоПараметр</name> + <name>Расположение</name> <title> <key>ru</key> - <value>Это параметр</value> + <value>Расположение</value> - 12 + 5 + + DataCompositionFieldPlacement + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + ЭтоРаздел + + <key>ru</key> + <value>Это раздел</value> + + 7 Boolean @@ -8518,63 +9859,12 @@ - ТипЗначения + Поле <key>ru</key> - <value>Тип значения</value> + <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 + 9 true @@ -8584,12 +9874,12 @@ - ВводСписком + ПометкаУдаления <key>ru</key> - <value>Ввод списком</value> + <value>Пометка удаления</value> - 18 + 8 Boolean @@ -8600,91 +9890,6 @@ 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 - - СтруктураВарианта @@ -8703,10 +9908,10 @@ true - ИдентификаторКД + Идентификатор <key>ru</key> - <value>Идентификатор КД</value> + <value>Идентификатор</value> 1 @@ -8770,10 +9975,10 @@ - ИндексКартинки + Картинка <key>ru</key> - <value>Индекс картинки</value> + <value>Картинка</value> 6 @@ -8860,23 +10065,6 @@ true - - Подсвечивать - - <key>ru</key> - <value>Подсвечивать</value> - - 13 - - Boolean - - - true - - - true - - СодержитОтборы @@ -8945,6 +10133,23 @@ <common>true</common> </edit> </columns> + <columns> + <name>ПометкаУдаления</name> + <title> + <key>ru</key> + <value>Пометка удаления</value> + + 15 + + Boolean + + + true + + + true + + ЦветНеактивныхЗначенийТаблицы @@ -9015,10 +10220,10 @@ - ИдентификаторТекущегоУзлаКД + ИдентификаторЭлементаСтруктурыНастроек <key>ru</key> - <value>Идентификатор текущего узла КД</value> + <value>Идентификатор элемента структуры настроек</value> 29 @@ -9046,10 +10251,10 @@ true - ИдентификаторКД + Идентификатор <key>ru</key> - <value>Идентификатор КД</value> + <value>Идентификатор</value> 1 @@ -9078,7 +10283,7 @@ - Представление + Заголовок <key>ru</key> <value>Поле</value> @@ -9130,10 +10335,10 @@ </edit> </columns> <columns> - <name>ИндексКартинки</name> + <name>Картинка</name> <title> <key>ru</key> - <value>Индекс картинки</value> + <value>Картинка</value> 6 @@ -9149,23 +10354,6 @@ true - - Картинка - - <key>ru</key> - <value>Картинка</value> - - 7 - - Picture - - - true - - - true - - ТипДополнения @@ -9201,28 +10389,10 @@ </edit> </columns> <columns> - <name>ТипНастройки</name> + <name>Поле</name> <title> <key>ru</key> - <value>Тип настройки</value> - - 10 - - String - - - - true - - - true - - - - ПолеКД - - <key>ru</key> - <value>Поле КД</value> + <value>Поле</value> 11 @@ -9233,21 +10403,23 @@ true - - - БыстрыйПоискНастроекВарианта - - <key>ru</key> - <value>Быстрый поиск настроек варианта</value> - - 6 - - - true - - - true - + + ПометкаУдаления + + <key>ru</key> + <value>Пометка удаления</value> + + 7 + + Boolean + + + true + + + true + + ОтключаемыеСвязи @@ -9403,10 +10575,10 @@ - ТипТекущегоУзлаКД + ТипЭлементаСтруктурыНастроек <key>ru</key> - <value>Тип текущего узла КД</value> + <value>Тип элемента структуры настроек</value> 37 @@ -9421,7 +10593,7 @@ - ТекущийУзелКДТипДиаграммы + ТекущийТипДиаграммы <key>ru</key> <value>Тип диаграммы</value> @@ -9452,10 +10624,10 @@ <common>true</common> </edit> <columns> - <name>ИдентификаторКД</name> + <name>Идентификатор</name> <title> <key>ru</key> - <value>Идентификатор КД</value> + <value>Идентификатор</value> 1 @@ -9536,10 +10708,10 @@ - ИндексКартинки + Картинка <key>ru</key> - <value>Индекс картинки</value> + <value>Картинка</value> 6 @@ -9574,10 +10746,10 @@ - ИндексКартинкиДоступа + КартинкаРежимаОтображения <key>ru</key> - <value>Индекс картинки доступа</value> + <value>Картинка режима отображения</value> 11 @@ -9612,10 +10784,10 @@ - ЗаголовокПереопределен + ЭтоПредопределенныйЗаголовок <key>ru</key> - <value>Заголовок переопределен</value> + <value>Это предопределенный заголовок</value> 13 @@ -9628,6 +10800,90 @@ true + + ЭтоРаздел + + <key>ru</key> + <value>Это раздел</value> + + 7 + + Boolean + + + true + + + true + + + + ЭтоПараметрВывода + + <key>ru</key> + <value>Это параметр вывода</value> + + 8 + + Boolean + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 9 + + + true + + + true + + + + ПредставлениеПользовательскойНастройки + + <key>ru</key> + <value>Представление пользовательской настройки</value> + + 14 + + String + + + + true + + + true + + + + ПометкаУдаления + + <key>ru</key> + <value>Пометка удаления</value> + + 15 + + Boolean + + + true + + + true + + Отчет @@ -9694,6 +10950,896 @@ true + + ВыводитьЗаголовок + + <key>ru</key> + <value>Выводить заголовок</value> + + 43 + + Boolean + + + true + + + true + + + + ВыводитьПараметрыИОтборы + + <key>ru</key> + <value>Выводить параметры и отборы</value> + + 44 + + Boolean + + + true + + + true + + + + Отборы + + <key>ru</key> + <value>Отборы</value> + + 46 + + 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 + + Boolean + + + true + + + true + + + + ПредставлениеПользовательскойНастройки + + <key>ru</key> + <value>Заголовок</value> + + 4 + + String + + + + true + + + true + + + + ВидСравнения + + <key>ru</key> + <value>Условие</value> + + 6 + + DataCompositionComparisonType + + + 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 + + TypeDescription + + + true + + + true + + + + ДоступныеЗначения + + <key>ru</key> + <value>Доступные значения</value> + + 10 + + ValueList + Null + + + true + + + true + + + + ДоступенСписокЗначений + + <key>ru</key> + <value>Доступен список значений</value> + + 11 + + Boolean + + + true + + + true + + + + КартинкаРежимаОтображения + + <key>ru</key> + <value>Отображение</value> + + 12 + + Number + + 1 + + + + true + + + true + + + + Заголовок + + <key>ru</key> + <value>Заголовок</value> + + 13 + + String + + + + true + + + true + + + + ЭтоПредопределенныйЗаголовок + + <key>ru</key> + <value>Это предопределенный заголовок</value> + + 14 + + Boolean + + + true + + + true + + + + ЭтоРаздел + + <key>ru</key> + <value>Это раздел</value> + + 15 + + Boolean + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 16 + + Boolean + + + true + + + true + + + + ЭтоПараметр + + <key>ru</key> + <value>Это параметр</value> + + 17 + + Boolean + + + true + + + true + + + + ЭтоПериод + + <key>ru</key> + <value>Это период</value> + + 18 + + Boolean + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 19 + + Number + + 2 + + + + true + + + true + + + + ФормаВыбора + + <key>ru</key> + <value>Форма выбора</value> + + 20 + + String + + + + true + + + true + + + + ВыборГруппИЭлементов + + <key>ru</key> + <value>Выбор групп и элементов</value> + + 21 + + + true + + + true + + + + ДоступныеВидыСравнения + + <key>ru</key> + <value>Доступные виды сравнения</value> + + 23 + + ValueList + Null + + + true + + + true + + + + Параметр + + <key>ru</key> + <value>Поле</value> + + 24 + + + true + + + true + + + + ЛевоеЗначение + + <key>ru</key> + <value>Поле</value> + + 25 + + DataCompositionField + Null + + + true + + + true + + + + ПравоеЗначение + + <key>ru</key> + <value>Значение</value> + + 26 + + + true + + + true + + + + ТипГруппы + + <key>ru</key> + <value>Поле</value> + + 27 + + + true + + + true + + + + ПометкаУдаления + + <key>ru</key> + <value>Пометка удаления</value> + + 5 + + Boolean + + + true + + + true + + + + ЭтоУникальныйИдентификатор + + <key>ru</key> + <value>Это уникальный идентификатор</value> + + 22 + + Boolean + + + true + + + true + + + + + ПомеченныеНаУдаление + + <key>ru</key> + <value>Помеченные на удаление</value> + + 47 + + ValueTable + + + true + + + true + + + ИдентификаторЭлементаСтруктуры + + <key>ru</key> + <value>Идентификатор элемента структуры</value> + + 1 + + + true + + + true + + + + ИдентификаторЭлемента + + <key>ru</key> + <value>Идентификатор элемента</value> + + 2 + + + true + + + true + + + + КлючСвойстваЭлементаСтруктуры + + <key>ru</key> + <value>Ключ свойства элемента структуры</value> + + 4 + + String + + 100 + + + + true + + + true + + + + + СодержитВложенныеОтчеты + + <key>ru</key> + <value>Содержит вложенные отчеты</value> + + 48 + + Boolean + + + true + + + true + + + + СодержитВложенныеОтборы + + <key>ru</key> + <value>Содержит вложенные отборы</value> + + 49 + + Boolean + + + true + + + true + + + + СодержитВложенныеПоляИлиСортировки + + <key>ru</key> + <value>Содержит вложенные поля или сортировки</value> + + 50 + + Boolean + + + true + + + true + + + + СодержитВложенноеУсловноеОформление + + <key>ru</key> + <value>Содержит вложенное условное оформление</value> + + 51 + + Boolean + + + true + + + true + + + + ОтборыСУсловиями + + <key>ru</key> + <value>Отборы с условиями</value> + + 52 + + ValueTable + + + true + + + true + + + ИдентификаторЭлементаСтруктуры + + <key>ru</key> + <value>Идентификатор элемента структуры</value> + + 1 + + + true + + + true + + + + ИдентификаторЭлемента + + <key>ru</key> + <value>Идентификатор элемента</value> + + 2 + + + true + + + true + + + + + СодержитПользовательскиеЭлементыСтруктуры + + <key>ru</key> + <value>Содержит пользовательские элементы структуры</value> + + 53 + + Boolean + + + true + + + true + + + + ЭтоМобильныйКлиент + + <key>ru</key> + <value>Это мобильный клиент</value> + + 54 + + Boolean + + + true + + + true + + + + Период1 + + <key>ru</key> + <value>Период</value> + + 55 + + StandardPeriod + + + true + + + true + + + + Список1 + + <key>ru</key> + <value>Список</value> + + 56 + + ValueList + + + true + + + true + + + + + + + Список2 + + <key>ru</key> + <value>Список</value> + + 57 + + ValueList + + + true + + + true + + + + + + + Список3 + + <key>ru</key> + <value>Список</value> + + 58 + + ValueList + + + true + + + true + + + + + + + Список4 + + <key>ru</key> + <value>Список</value> + + 59 + + ValueList + + + true + + + true + + + + + + + Период2 + + <key>ru</key> + <value>Период</value> + + 60 + + StandardPeriod + + + true + + + true + + + + ПутьКДаннымЭлементов + + <key>ru</key> + <value>Путь к данным элементов</value> + + 61 + + + true + + + true + + + + Флажок1 + + <key>ru</key> + <value>Флажок</value> + + 62 + + Boolean + + + true + + + true + + + + Флажок2 + + <key>ru</key> + <value>Флажок</value> + + 63 + + Boolean + + + true + + + true + + ЗакрытьБезФормирования @@ -9942,7 +12088,7 @@ <name>Отборы_Сгруппировать</name> <title> <key>ru</key> - <value>Сгруппировать отборы</value> + <value>Сгруппировать</value> 3 @@ -10871,6 +13017,236 @@ DontUse Auto + + НастроитьКолонтитулы + + <key>ru</key> + <value>Колонтитулы</value> + + 48 + + ru + Настройка колонтитулов, результат которой отображается в образце формы настройки и в предварительном просмотре печати + + + true + + + + НастроитьКолонтитулы + + + Auto + Auto + + + ВыбратьПериод1 + + <key>ru</key> + <value>Выбрать период</value> + + 49 + + true + + + StdPicture.InputFieldSelect + + + + Подключаемый_ВыбратьПериод + + + Picture + Auto + Auto + + + Список1Подбор + + <key>ru</key> + <value>Подбор</value> + + 50 + + true + + + + Подключаемый_Список_Подбор + + + Text + Auto + Auto + + + Список1ВставитьИзБуфера + + <key>ru</key> + <value>Вставить из буфера обмена...</value> + + 51 + + true + + + CommonPicture.ВставитьИзБуфераОбмена + + + + Подключаемый_Список_ВставитьИзБуфера + + + Picture + Auto + Auto + + + Список2Подбор + + <key>ru</key> + <value>Подбор</value> + + 52 + + true + + + + Подключаемый_Список_Подбор + + + Text + Auto + Auto + + + Список3Подбор + + <key>ru</key> + <value>Подбор</value> + + 54 + + true + + + + Подключаемый_Список_Подбор + + + Text + Auto + Auto + + + Список4Подбор + + <key>ru</key> + <value>Подбор</value> + + 55 + + true + + + + Подключаемый_Список_Подбор + + + Text + Auto + Auto + + + Список2ВставитьИзБуфера + + <key>ru</key> + <value>Вставить из буфера обмена...</value> + + 53 + + true + + + CommonPicture.ВставитьИзБуфераОбмена + + + + Подключаемый_Список_ВставитьИзБуфера + + + Picture + Auto + Auto + + + Список3ВставитьИзБуфера + + <key>ru</key> + <value>Вставить из буфера обмена...</value> + + 56 + + true + + + CommonPicture.ВставитьИзБуфераОбмена + + + + Подключаемый_Список_ВставитьИзБуфера + + + Picture + Auto + Auto + + + Список4ВставитьИзБуфера + + <key>ru</key> + <value>Вставить из буфера обмена...</value> + + 57 + + true + + + CommonPicture.ВставитьИзБуфераОбмена + + + + Подключаемый_Список_ВставитьИзБуфера + + + Picture + Auto + Auto + + + ВыбратьПериод2 + + <key>ru</key> + <value>Выбрать период</value> + + 58 + + true + + + StdPicture.InputFieldSelect + + + + Подключаемый_ВыбратьПериод + + + Picture + Auto + Auto + diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl index d8bfa21f2..837700750 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -1,11 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных -&НаКлиенте -Перем ЭлементСпискаДоНачалаИзмененияНаКлиенте; &НаКлиенте Перем ИсточникПеретаскиванияНаКлиенте; &НаКлиенте -Перем ПараметрыЗаполненияНаКлиенте; +Перем ПриемникПеретаскиванияНаКлиенте; #КонецОбласти @@ -13,12 +19,13 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + ОпределитьПоведениеВМобильномКлиенте(); + ФормаПараметры = Новый Структура( "КлючНазначенияИспользования, КлючПользовательскихНастроек, |Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр, @@ -36,46 +43,50 @@ Если Не Параметры.Свойство("ВариантНаименование", ВариантНаименование) Тогда ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ВариантНаименование"".'"); КонецЕсли; - Параметры.Свойство("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); + КлючСохраненияПоложенияОкна = НастройкиОтчета.ПолноеИмя; Если ЗначениеЗаполнено(КлючТекущегоВарианта) Тогда КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + "." + КлючТекущегоВарианта; КонецЕсли; - Если ИдентификаторТекущегоУзлаКД <> Неопределено Тогда - ПолныйПуть = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПолныйПутьТекущегоУзлаКД"); - НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Вариант"); - Если НастройкиКД = Неопределено Тогда - НастройкиКД = Отчет.КомпоновщикНастроек.Настройки; - КонецЕсли; - КорневойУзел = ОтчетыКлиентСервер.НайтиЭлементПоПолномуПути(НастройкиКД, ПолныйПуть); - Если КорневойУзел <> Неопределено Тогда - ИдентификаторТекущегоУзлаКД = НастройкиКД.ПолучитьИдентификаторПоОбъекту(КорневойУзел); - КонецЕсли; - РежимИзмененияУзлаВарианта = Истина; + + НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Вариант"); + Если НастройкиКД = Неопределено Тогда + НастройкиКД = Отчет.КомпоновщикНастроек.Настройки; + КонецЕсли; + + Параметры.Свойство("ИдентификаторЭлементаСтруктурыНастроек", ИдентификаторЭлементаСтруктурыНастроек); + Если ТипЗнч(ИдентификаторЭлементаСтруктурыНастроек) = Тип("ИдентификаторКомпоновкиДанных") Тогда + РежимИзмененияЭлементаСтруктурыНастроек = Истина; Высота = 0; КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + ".Узел"; + Если Не Параметры.Свойство("Заголовок", Заголовок) Тогда ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""Заголовок"".'"); КонецЕсли; - Если Не Параметры.Свойство("ТипТекущегоУзлаКД", ТипТекущегоУзлаКД) Тогда - ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ТипТекущегоУзлаКД"".'"); + + Если Не Параметры.Свойство("ТипЭлементаСтруктурыНастроек", ТипЭлементаСтруктурыНастроек) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ТипЭлементаСтруктурыНастроек"".'"); КонецЕсли; Иначе Если Не ЗначениеЗаполнено(ВариантНаименование) Тогда ВариантНаименование = НастройкиОтчета.Наименование; КонецЕсли; - Заголовок = НСтр("ru = 'Настройки отчета'") + " """ + ВариантНаименование + """"; + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Настройки отчета ""%1""'"), ВариантНаименование); КонецЕсли; - Элементы.РасширенныйРежим.Видимость = НастройкиОтчета.РазрешеноИзменятьВарианты; + ГлобальныеНастройки = ВариантыОтчетов.ГлобальныеНастройки(); + Элементы.ОформлениеНастроитьКолонтитулы.Видимость = + ГлобальныеНастройки.ВыводитьИндивидуальныеНастройкиКолонтитулов И Не РежимИзмененияЭлементаСтруктурыНастроек; - Если РежимИзмененияУзлаВарианта Тогда + Если РежимИзмененияЭлементаСтруктурыНастроек Тогда ИмяСтраницы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяСтраницы", "СтраницаСоставГруппировки"); РасширенныйРежим = 1; Иначе РасширенныйРежим = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "ФормаНастроекРасширенныйРежим", 0); ИмяСтраницы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "ФормаНастроекИмяСтраницы", "СтраницаОтборы"); КонецЕсли; + Страница = Элементы.Найти(ИмяСтраницы); Если Страница <> Неопределено Тогда Элементы.СтраницыНастроек.ТекущаяСтраница = Страница; @@ -92,6 +103,7 @@ Для Каждого Реквизит Из НаборРеквизитов Цикл ПостоянныеРеквизиты.Добавить(ПолноеИмяРеквизита(Реквизит)); КонецЦикла; + Для Каждого Команда Из Команды Цикл ПостоянныеКоманды.Добавить(Команда.Имя); КонецЦикла; @@ -155,18 +167,12 @@ ПараметрыЗаполнения = Новый Структура; ПараметрыЗаполнения.Вставить("ИмяСобытия", "ПриСозданииНаСервере"); - Если Не РежимИзмененияУзлаВарианта И РасширенныйРежим = 1 Тогда - ПараметрыЗаполнения.Вставить("ОбновитьНастройкиВарианта", Истина); - КонецЕсли; - БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + ПараметрыЗаполнения.Вставить("ОбновитьНастройкиВарианта", Не РежимИзмененияЭлементаСтруктурыНастроек И РасширенныйРежим = 1); + + ОбновитьФорму(ПараметрыЗаполнения); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) - ПоказатьРезультатЗаполненияНастроек(); -КонецПроцедуры - &НаКлиенте Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) ВариантМодифицирован = Ложь; @@ -174,7 +180,6 @@ &НаКлиенте Процедура ПриЗакрытии(ЗавершениеРаботы) - Если ЗавершениеРаботы Тогда Возврат; КонецЕсли; @@ -186,7 +191,6 @@ Если ОписаниеОповещенияОЗакрытии <> Неопределено Тогда ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, РезультатВыбора(Ложь)); КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -195,555 +199,179 @@ &НаКлиенте Процедура РасширенныйРежимПриИзменении(Элемент) - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("ИмяСобытия", "РасширенныйРежимПриИзменении"); - Если РасширенныйРежим = 1 Тогда - ПараметрыЗаполнения.Вставить("ОбновитьНастройкиВарианта", Истина); - Иначе - ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); - КонецЕсли; - ЗаполнитьБыстрыеНастройкиКлиент(ПараметрыЗаполнения); + ПараметрыОбновления = Новый Структура; + ПараметрыОбновления.Вставить("ИмяСобытия", "РасширенныйРежимПриИзменении"); + ПараметрыОбновления.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); + ПараметрыОбновления.Вставить("ОбновитьНастройкиВарианта", РасширенныйРежим = 1); + ПараметрыОбновления.Вставить("СброситьПользовательскиеНастройки", РасширенныйРежим <> 1); + + ОбновитьФорму(ПараметрыОбновления); КонецПроцедуры &НаКлиенте -Процедура ПодсказкаНетПользовательскихНастроекОбработкаНавигационнойСсылки(Элемент, Адрес, СтандартнаяОбработка) +Процедура ПредупрежденияОбОтсутствииПользовательскихНастроекОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - РасширенныйРежим = Истина; + РасширенныйРежим = 1; РасширенныйРежимПриИзменении(Неопределено); КонецПроцедуры &НаКлиенте -Процедура ТекущийУзелКДТипДиаграммыПриИзменении(Элемент) - КорневойУзелКД = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); - Если ТипЗнч(КорневойУзелКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - КорневойУзелКД = КорневойУзелКД.Настройки; +Процедура ТекущийТипДиаграммыПриИзменении(Элемент) + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторЭлементаСтруктурыНастроек); + Если ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ЭлементСтруктуры = ЭлементСтруктуры.Настройки; КонецЕсли; - УстановитьПараметрВывода(КорневойУзелКД, "ТипДиаграммы", ТекущийУзелКДТипДиаграммы); - ПользовательскиеНастройкиМодифицированы = Истина; - ВариантМодифицирован = Ложь; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; + УстановитьПараметрВывода(ЭлементСтруктуры, "ТипДиаграммы", ТекущийТипДиаграммы); + УстановитьМодифицированность(); КонецПроцедуры &НаКлиенте Процедура ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки(Элемент, Адрес, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; - ИзменитьУзелВарианта(СтрокаТаблицы, Неопределено, Истина); + Строка = Элементы.СтруктураВарианта.ТекущиеДанные; + ИзменитьЭлементСтруктуры(Строка,, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ВыводитьЗаголовокПриИзменении(Элемент) + ПараметрыВывода = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода; + + ЭлементНастройки = ПараметрыВывода.Элементы.Найти("TITLE"); + ЭлементНастройки.Использование = ВыводитьЗаголовок; + + СинхронизироватьПредопределенныеПараметрыВывода(ВыводитьЗаголовок, ЭлементНастройки); + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыводитьПараметрыИОтборыПриИзменении(Элемент) + ПараметрыВывода = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода; + + ЭлементНастройки = ПараметрыВывода.Элементы.Найти("DATAPARAMETERSOUTPUT"); + ЭлементНастройки.Использование = Истина; + + Если ВыводитьПараметрыИОтборы Тогда + ЭлементНастройки.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто; + Иначе + ЭлементНастройки.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить; + КонецЕсли; + + СинхронизироватьПредопределенныеПараметрыВывода(ВыводитьПараметрыИОтборы, ЭлементНастройки); + УстановитьМодифицированность(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Подключаемые &НаКлиенте -Процедура Подключаемый_ФлажокИспользование_ПриИзменении(Элемент) - ФлажокИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ФлажокИмя, 32); - Тип = Лев(ФлажокИмя, СтрНайти(ФлажокИмя, "_")-1); - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - - Если Тип = "ЭлементОтбора" Или Тип = "ЗначениеПараметра" Тогда - ТаблицаИмя = Тип + "_СписокЗначений_" + ИдентификаторЭлемента; - ТаблицаФормы = Элементы.Найти(ТаблицаИмя); - Если ТаблицаФормы <> Неопределено Тогда - ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); - КонецЕсли; - КонецЕсли; - - ОтчетыКлиент.ОтразитьИзмененияВПодчиненных(ЭтотОбъект, ИдентификаторЭлемента, ПользовательскаяНастройкаКД); - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - Найденные = НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента); - Если Найденные <> Неопределено Тогда - Найденные.ЭлементКД.Использование = ПользовательскаяНастройкаКД.Использование; - ВариантИзменен = Истина; - КонецЕсли; - КонецЕсли; +Процедура Подключаемый_Период_ПриИзменении(Элемент) + ОтчетыКлиент.УстановитьПериод(ЭтотОбъект, Элемент.Имя); КонецПроцедуры &НаКлиенте -Процедура Подключаемый_ПолеВвода_ПриИзменении(Элемент) - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); +Процедура Подключаемый_ЭлементНастройки_ПриИзменении(Элемент) + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - Значение = ПользовательскаяНастройкаКД.Значение; - Если НастройкиОтчета.ПолноеИмя = "Отчет.УниверсальныйОтчет" Тогда - ОбновитьПараметрыУниверсальногоОтчета(ПользовательскаяНастройкаКД); - КонецЕсли; - ИначеЕсли ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Значение = ПользовательскаяНастройкаКД.ПравоеЗначение; - Иначе - Возврат; + Индекс = ПутьКДаннымЭлементов.ПоИмени[Элемент.Имя]; + Если Индекс = Неопределено Тогда + Индекс = ОтчетыКлиентСервер.ИндексЭлементаНастройкиПоПути(Элемент.Имя); КонецЕсли; - Если ЗначениеЗаполнено(Значение) Тогда - ПользовательскаяНастройкаКД.Использование = Истина; + ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс]; + + ЭтоФлажок = СтрНачинаетсяС(Элемент.Имя, "Флажок") Или СтрЗаканчиваетсяНа(Элемент.Имя, "Флажок"); + Если ЭтоФлажок Тогда + ЭлементНастройки.Значение = ЭтотОбъект[Элемент.Имя]; КонецЕсли; - ОтчетыКлиент.ОтразитьИзмененияВПодчиненных(ЭтотОбъект, ИдентификаторЭлемента, ПользовательскаяНастройкаКД); - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ФлажокЗначения_ПриИзменении(Элемент) - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - Значение = ЭтотОбъект[Элемент.Имя]; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОтчетыКлиент.СписокКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ЗначениеКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОтчетыКлиент.ЗначениеКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые - Стандартный период. - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении(Элемент) - // Формирование сведений по элементу. - ПериодНачалоИмя = Элемент.Имя; - ЗначениеИмя = СтрЗаменить(ПериодНачалоИмя, "_Начало_", "_Значение_"); - ИдентификаторЭлемента = Прав(ПериодНачалоИмя, 32); - - Значение = ЭтотОбъект[ЗначениеИмя]; - Заполнено = ЗначениеЗаполнено(Значение.ДатаНачала); - Если Заполнено Тогда - Значение.ДатаНачала = НачалоДня(Значение.ДатаНачала); - КонецЕсли; - - // Запись значения в пользовательские настройки компоновки данных. - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - Если Заполнено Тогда - ПользовательскаяНастройкаКД.Использование = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении(Элемент) - // Формирование сведений по элементу. - ПериодОкончаниеИмя = Элемент.Имя; - ЗначениеИмя = СтрЗаменить(ПериодОкончаниеИмя, "_Окончание_", "_Значение_"); - ИдентификаторЭлемента = Прав(ПериодОкончаниеИмя, 32); - - Значение = ЭтотОбъект[ЗначениеИмя]; - Заполнено = ЗначениеЗаполнено(Значение.ДатаОкончания); - Если Заполнено Тогда - Значение.ДатаОкончания = КонецДня(Значение.ДатаОкончания); - КонецЕсли; - - // Запись значения в пользовательские настройки компоновки данных. - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - Если Заполнено Тогда - ПользовательскаяНастройкаКД.Использование = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ВыбратьПериод(Команда) - ОтчетыКлиент.ВыбратьПериод(ЭтотОбъект, Команда.Имя); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые - Список значений с кнопкой "Подбор". - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ПриИзменении(ТаблицаФормы) - // Обновление выбранных значений в данных СКД. - ИдентификаторЭлемента = Прав(ТаблицаФормы.Имя, 32); - - СписокЗначенийВФорме = ЭтотОбъект[ТаблицаФормы.Имя]; - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - - СписокЗначенийВСКД = Новый СписокЗначений; - Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - ДополнительныеНастройки.ЗначенияДляВыбора = Новый СписокЗначений; - КонецЕсли; - Для Каждого ЭлементСпискаВФорме Из СписокЗначенийВФорме Цикл - ЗначениеВФорме = ЭлементСпискаВФорме.Значение; - Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - Если ДополнительныеНастройки.ЗначенияДляВыбора.НайтиПоЗначению(ЗначениеВФорме) <> Неопределено Тогда - Продолжить; - КонецЕсли; - ЗаполнитьЗначенияСвойств(ДополнительныеНастройки.ЗначенияДляВыбора.Добавить(), ЭлементСпискаВФорме); - КонецЕсли; - Если ЭлементСпискаВФорме.Пометка Тогда - СписокЗначенийВСКД.Добавить(ЗначениеВФорме); - КонецЕсли; - КонецЦикла; - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.ПравоеЗначение = СписокЗначенийВСКД; - Иначе - ПользовательскаяНастройкаКД.Значение = СписокЗначенийВСКД; - КонецЕсли; - - // Включение флажка Использование. - ПользовательскаяНастройкаКД.Использование = Истина; - ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_Использование_ПриИзменении(Элемент) - // Включение флажка Использование если пользователь включил флажок в строке таблицы. - КолонкаИспользованиеИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(КолонкаИспользованиеИмя, 32); - СвойстваНастройкиТип = Лев(КолонкаИспользованиеИмя, СтрНайти(КолонкаИспользованиеИмя, "_Колонка_Использование_")-1); - - ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; - - ЭлементСпискаВФорме = Элементы[ТаблицаИмя].ТекущиеДанные; - Если ЭлементСпискаВФорме <> Неопределено И ЭлементСпискаВФорме.Пометка Тогда - // Включение флажка Использование. - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - ПользовательскаяНастройкаКД.Использование = Истина; + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + И НастройкиОтчета.ЗагрузитьНастройкиПриИзмененииПараметров.Найти(ЭлементНастройки.Параметр) <> Неопределено Тогда - // Оформление строк. - ТаблицаФормы = Элементы.Найти(ТаблицаИмя); - ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + ПараметрыОбновления = Новый Структура; + ПараметрыОбновления.Вставить("КомпоновщикНастроекКД", КомпоновщикНастроек); - ПользовательскиеНастройкиМодифицированы = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) - // Установка связей и параметров выбора. - ПараметрыОтбора = ОтчетыКлиент.ПараметрыВыбораОтбора(ЭтотОбъект, Элемент); - КолонкаЗначение = Элементы.Найти(СтрЗаменить(Элемент.Имя, "_СписокЗначений_", "_Колонка_Значение_")); - КолонкаЗначение.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыОтбора.ПараметрыВыбора); - КолонкаЗначение.ДоступныеТипы = Новый ОписаниеТипов(ПараметрыОтбора.ОписаниеТипов); - - // Сохранение состояния "до изменения". - СтрокаИдентификатор = Элемент.ТекущаяСтрока; - Если СтрокаИдентификатор = Неопределено Тогда - Возврат; - КонецЕсли; - - СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; - ЭлементСпискаВФорме = СписокЗначенийВФорме.НайтиПоИдентификатору(СтрокаИдентификатор); - - ТекущаяСтрока = Элемент.ТекущиеДанные; - Если ТекущаяСтрока = Неопределено Тогда - Возврат; - КонецЕсли; - - Если НоваяСтрока Тогда - ЭлементСпискаВФорме.Пометка = Истина; - КонецЕсли; - - ЭлементСпискаДоНачалаИзменения = Новый Структура("Идентификатор, Пометка, Значение, Представление"); - ЗаполнитьЗначенияСвойств(ЭлементСпискаДоНачалаИзменения, ЭлементСпискаВФорме); - ЭлементСпискаДоНачалаИзменения.Идентификатор = СтрокаИдентификатор; - ЭлементСпискаДоНачалаИзмененияНаКлиенте = ЭлементСпискаДоНачалаИзменения; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаНачалаРедактирования, ОтменаЗавершенияРедактирования) - Если ОтменаНачалаРедактирования Тогда - Возврат; - КонецЕсли; - - СтрокаИдентификатор = Элемент.ТекущаяСтрока; - Если СтрокаИдентификатор = Неопределено Тогда - Возврат; - КонецЕсли; - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; - ЭлементСпискаВФорме = СписокЗначенийВФорме.НайтиПоИдентификатору(СтрокаИдентификатор); - - Значение = ЭлементСпискаВФорме.Значение; - Если Значение = Неопределено - Или Значение = Тип("Неопределено") - Или Значение = Новый ОписаниеТипов("Неопределено") - Или Не ЗначениеЗаполнено(Значение) Тогда - ОтменаЗавершенияРедактирования = Истина; // Запрет пустых значений. + ОбновитьФорму(ПараметрыОбновления); Иначе - Для Каждого ЭлементСпискаДубльВФорме Из СписокЗначенийВФорме Цикл - Если ЭлементСпискаДубльВФорме.Значение = Значение И ЭлементСпискаДубльВФорме <> ЭлементСпискаВФорме Тогда - ОтменаЗавершенияРедактирования = Истина; // Запрет дублей. - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ЭлементСпискаДоНачалаИзменения = ЭлементСпискаДоНачалаИзмененияНаКлиенте; - ЕстьИнформация = (ЭлементСпискаДоНачалаИзменения <> Неопределено И ЭлементСпискаДоНачалаИзменения.Идентификатор = СтрокаИдентификатор); - Если Не ОтменаЗавершенияРедактирования И ЕстьИнформация И ЭлементСпискаДоНачалаИзменения.Значение <> Значение Тогда - ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - Если ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - ОтменаЗавершенияРедактирования = Истина; - Иначе - ЭлементСпискаВФорме.Представление = ""; // Автозаполнение представления. - ЭлементСпискаВФорме.Пометка = Истина; // Включение флажка. - КонецЕсли; - КонецЕсли; - - Если ОтменаЗавершенияРедактирования Тогда - // Откат значений. - Если ЕстьИнформация Тогда - ЗаполнитьЗначенияСвойств(ЭлементСпискаВФорме, ЭлементСпискаДоНачалаИзменения); - КонецЕсли; - // Перезапуск события "ПередОкончаниемРедактирования" с ОтменаНачалаРедактирования = Истина. - Элемент.ЗакончитьРедактированиеСтроки(Истина); - Иначе - Если НоваяСтрока Тогда - ЭлементСпискаВФорме.Пометка = Истина; // Включение флажка. - КонецЕсли; - ПользовательскиеНастройкиМодифицированы = Истина; + ОтчетыКлиент.ОбновитьСвойстваНастройки(ЭтотОбъект, КомпоновщикНастроек, ЭлементНастройки); + ОформитьСписок(Элемент, ЭлементНастройки); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура Подключаемый_СписокСПодбором_Подбор(Команда) - КнопкаПодборИмя = Команда.Имя; +Процедура Подключаемый_ЭлементСписка_ПриИзменении(Элемент) + ПутьКСписку = СтрЗаменить(Элемент.Имя, "Значение", ""); - ИдентификаторЭлемента = Прав(КнопкаПодборИмя, 32); - СвойстваНастройкиТип = Лев(КнопкаПодборИмя, СтрНайти(КнопкаПодборИмя, "_Подбор_")-1); - - ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; - КолонкаЗначениеИмя = СвойстваНастройкиТип + "_Колонка_Значение_" + ИдентификаторЭлемента; - КнопкаПодборИмя = СвойстваНастройкиТип + "_Подбор_" + ИдентификаторЭлемента; - - ТаблицаЗначение = ЭтотОбъект[ТаблицаИмя]; - КолонкаЗначениеЭлемент = Элементы[КолонкаЗначениеИмя]; - - ОписаниеТипов = ТаблицаЗначение.ТипЗначения; - - ПараметрыЭлемента = Новый Структура; - ПараметрыЭлемента.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - ПараметрыЭлемента.Вставить("ВыбранныйТип", Неопределено); - ПараметрыЭлемента.Вставить("КолонкаЗначениеЭлемент", КолонкаЗначениеЭлемент); - ПараметрыЭлемента.Вставить("ТаблицаЭлемент", Элементы[ТаблицаИмя]); - ПараметрыЭлемента.Вставить("ВыборТолькоГрупп", КолонкаЗначениеЭлемент.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы); - ПараметрыЭлемента.Вставить("ПараметрыВыбора", Новый Массив); - - Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); - Для Каждого Связь Из Найденные Цикл - Если Не ЗначениеЗаполнено(Связь.ВедущийИдентификаторВФорме) - Или Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда - Продолжить; - КонецЕсли; - ВедущийНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ВедущийИдентификаторВФорме); - Если Не ВедущийНастройкаКД.Использование Тогда - Продолжить; - КонецЕсли; - Если ТипЗнч(ВедущийНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ВедущийЗначение = ВедущийНастройкаКД.ПравоеЗначение; - Иначе - ВедущийЗначение = ВедущийНастройкаКД.Значение; - КонецЕсли; - Если Связь.ТипСвязи = "ПараметровВыбора" Тогда - ПараметрыЭлемента.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, ВедущийЗначение)); - ИначеЕсли Связь.ТипСвязи = "ПоТипу" Тогда - ТипВедущего = ТипЗнч(ВедущийЗначение); - Если ОписаниеТипов.СодержитТип(ТипВедущего) Тогда - ПараметрыЭлемента.ВыбранныйТип = ТипВедущего; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если ПараметрыЭлемента.ВыбранныйТип <> Неопределено Тогда // Тип определен ведущим. - Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(-1, ПараметрыЭлемента); - Возврат; - КонецЕсли; - - // Выбор типа из списка. - СписокВыбора = Новый СписокЗначений; - - ПростыеТипы = Новый Соответствие; - ПростыеТипы.Вставить(Тип("Строка"), Истина); - ПростыеТипы.Вставить(Тип("Дата"), Истина); - ПростыеТипы.Вставить(Тип("Число"), Истина); - - МассивТипов = ОписаниеТипов.Типы(); - Для Каждого Тип Из МассивТипов Цикл - // Исключение типов, для которых нет групп. - Если ПараметрыЭлемента.ВыборТолькоГрупп Тогда - ИмяОбъектаМетаданных = БыстрыйПоискИменОбъектовМетаданных.Получить(Тип); - ВидОбъектаМетаданных = ВРег(Лев(ИмяОбъектаМетаданных, СтрНайти(ИмяОбъектаМетаданных, ".")-1)); - Если ВидОбъектаМетаданных <> "СПРАВОЧНИК" И ВидОбъектаМетаданных <> "ПЛАНВИДОВХАРАКТЕРИСТИК" И ВидОбъектаМетаданных <> "ПЛАНСЧЕТОВ" Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - // Исключение простых типов. - Если ПростыеТипы[Тип] = Истина Тогда - Продолжить; - КонецЕсли; - // Добавление типа в список выбора. - СписокВыбора.Добавить(Тип, Строка(Тип)); - КонецЦикла; - - Если СписокВыбора.Количество() = 0 Тогда - ПараметрыЭлемента.ТаблицаЭлемент.ДобавитьСтроку(); - Возврат; - ИначеЕсли СписокВыбора.Количество() = 1 Тогда - // Один тип - выбор не требуется. - ПараметрыЭлемента.ВыбранныйТип = СписокВыбора[0].Значение; - Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(-1, ПараметрыЭлемента); - Иначе - // Более одного типа. - Обработчик = Новый ОписаниеОповещения("Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора", ЭтотОбъект, ПараметрыЭлемента); - ПоказатьВыборИзМеню(Обработчик, СписокВыбора, Элементы[КнопкаПодборИмя]); - КонецЕсли; + Строка = Элементы[ПутьКСписку].ТекущиеДанные; + ЭлементСписка = ЭтотОбъект[ПутьКСписку].НайтиПоЗначению(Строка.Значение); + ЭлементСписка.Пометка = Истина; КонецПроцедуры &НаКлиенте -Процедура Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(ВыбранныйЭлемент, ПараметрыЭлемента) Экспорт - Если ВыбранныйЭлемент = Неопределено Тогда - Возврат; - ИначеЕсли ВыбранныйЭлемент <> -1 Тогда - ПараметрыЭлемента.ВыбранныйТип = ВыбранныйЭлемент.Значение; +Процедура Подключаемый_Список_ПриИзменении(Элемент) + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; + + Индекс = ПутьКДаннымЭлементов.ПоИмени[Элемент.Имя]; + ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс]; + + Список = ЭтотОбъект[Элемент.Имя]; + ВыбранныеЗначения = Новый СписокЗначений; + Для Каждого ЭлементСписка Из Список Цикл + Если ЭлементСписка.Пометка Тогда + ЗаполнитьЗначенияСвойств(ВыбранныеЗначения.Добавить(), ЭлементСписка); + КонецЕсли; + КонецЦикла; + + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЭлементНастройки.Значение = ВыбранныеЗначения; + ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭлементНастройки.ПравоеЗначение = ВыбранныеЗначения; КонецЕсли; + ЭлементНастройки.Использование = Истина; - КолонкаЗначениеЭлемент = ПараметрыЭлемента.КолонкаЗначениеЭлемент; - - // Полное имя формы выбора. - // Свойство "ФормаВыбора" недоступно на клиенте даже для чтения, - // поэтому для хранения предустановленных имен форм выбора используется коллекция БыстрыйПоискИменОбъектовМетаданных. - ПутьКФорме = БыстрыйПоискИменОбъектовМетаданных.Получить(ПараметрыЭлемента.ИдентификаторЭлемента); - Если Не ЗначениеЗаполнено(ПутьКФорме) Тогда - ИмяОбъектаМетаданных = БыстрыйПоискИменОбъектовМетаданных.Получить(ПараметрыЭлемента.ВыбранныйТип); - Если ПараметрыЭлемента.ВыборТолькоГрупп Тогда - ВидОбъектаМетаданных = ВРег(Лев(ИмяОбъектаМетаданных, СтрНайти(ИмяОбъектаМетаданных, ".")-1)); - Если ВидОбъектаМетаданных = "СПРАВОЧНИК" Или ВидОбъектаМетаданных = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда - ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбораГруппы"; - Иначе - ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; - КонецЕсли; - Иначе - ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; - КонецЕсли; - КонецЕсли; - - ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуИспользованиеГруппИЭлементов(КолонкаЗначениеЭлемент.ВыборГруппИЭлементов); - - ПараметрыФормыВыбора = Новый Структура; - // Стандартные параметры формы. - ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); - ПараметрыФормыВыбора.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); - ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура); - // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка). - ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); - ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); - ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); - // Предполагаемые реквизиты. - ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - ПараметрыФормыВыбора.Вставить("РазрешитьНачалоПеретаскивания", Ложь); - - // Добавление фиксированных параметров выбора. - Для Каждого ПараметрВыбора Из КолонкаЗначениеЭлемент.ПараметрыВыбора Цикл - Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - Если ЗначениеЗаполнено(ПараметрВыбора.Имя) Тогда - Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда - ПараметрыФормыВыбора.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); - Иначе - ПараметрыФормыВыбора.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // Добавление динамических параметров выбора (от ведущих). Для обратной совместимости. - Для Каждого СвязьПараметраВыбора Из КолонкаЗначениеЭлемент.СвязиПараметровВыбора Цикл - Если ПустаяСтрока(СвязьПараметраВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - ВедущийЗначение = ЭтотОбъект[СвязьПараметраВыбора.ПутьКДанным]; - Если ВРег(Лев(СвязьПараметраВыбора.Имя, 6)) = ВРег("Отбор.") Тогда - ПараметрыФормыВыбора.Отбор.Вставить(Сред(СвязьПараметраВыбора.Имя, 7), ВедущийЗначение); - Иначе - ПараметрыФормыВыбора.Вставить(СвязьПараметраВыбора.Имя, ВедущийЗначение); - КонецЕсли; - КонецЦикла; - - // Добавление динамических параметров выбора (от ведущих). - Для Каждого ПараметрВыбора Из ПараметрыЭлемента.ПараметрыВыбора Цикл - Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - Если ЗначениеЗаполнено(ПараметрВыбора.Имя) Тогда - Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда - ПараметрыФормыВыбора.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); - Иначе - ПараметрыФормыВыбора.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - ОткрытьФорму(ПутьКФорме, ПараметрыФормыВыбора, ПараметрыЭлемента.ТаблицаЭлемент); + ОтчетыКлиент.ОбновитьСвойстваНастройки(ЭтотОбъект, КомпоновщикНастроек, ЭлементНастройки); + ОформитьСписок(Элемент, ЭлементНастройки); КонецПроцедуры &НаКлиенте -Процедура Подключаемый_СписокСПодбором_ОбработкаВыбора(Элемент, РезультатВыбора, СтандартнаяОбработка) +Процедура Подключаемый_ЭлементСписка_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - // Списки в данных формы. - ТаблицаИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + ПутьКСписку = СтрЗаменить(Элемент.Имя, "Значение", ""); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - СписокЗначенийВСКД = ПользовательскаяНастройкаКД.Значение; - Иначе - СписокЗначенийВСКД = ПользовательскаяНастройкаКД.ПравоеЗначение; - КонецЕсли; - СписокЗначенийВСКД = ОтчетыКлиентСервер.ЗначенияСписком(СписокЗначенийВСКД); + ПараметрыЗаполнения = ПараметрыЗаполненияСписка(Истина, Ложь, Ложь); + ПараметрыЗаполнения.ПутьКСписку = ПутьКСписку; + ПараметрыЗаполнения.Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку]; + ПараметрыЗаполнения.Владелец = Элемент; + + НачатьЗаполнениеСписка(Элемент, ПараметрыЗаполнения); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_Список_ОбработкаВыбора(Элемент, РезультатВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + Список = ЭтотОбъект[Элемент.Имя]; Выбранные = ОтчетыКлиентСервер.ЗначенияСписком(РезультатВыбора); Выбранные.ЗаполнитьПометки(Истина); - Дополнение = ОтчетыКлиентСервер.ДополнитьСписок(СписокЗначенийВСКД, Выбранные, Ложь, Истина); - ОтчетыКлиентСервер.ДополнитьСписок(СписокЗначенийВФорме, Выбранные, Ложь, Истина); + Дополнение = ОтчетыКлиентСервер.ДополнитьСписок(Список, Выбранные, Ложь, Истина); - // Включение флажка Использование. - ПользовательскаяНастройкаКД.Использование = Истина; + Индекс = ПутьКДаннымЭлементов.ПоИмени[Элемент.Имя]; + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; + ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс]; - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = СписокЗначенийВСКД; + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЭлементНастройки.Значение = Список; Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = СписокЗначенийВСКД; + ЭлементНастройки.ПравоеЗначение = Список; КонецЕсли; + ЭлементНастройки.Использование = Истина; - // Оформление строк. - ТаблицаФормы = Элементы.Найти(ТаблицаИмя); - ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); - - ПользовательскиеНастройкиМодифицированы = Истина; + ОтчетыКлиент.ОбновитьСвойстваНастройки(ЭтотОбъект, КомпоновщикНастроек, ЭлементНастройки); + ОформитьСписок(Элемент, ЭлементНастройки); Если Дополнение.Всего > 0 Тогда Если Дополнение.Всего = 1 Тогда @@ -751,100 +379,14 @@ Иначе ЗаголовокОповещения = НСтр("ru = 'Элементы добавлены в список'"); КонецЕсли; + ПоказатьОповещениеПользователя( - ЗаголовокОповещения, - , + ЗаголовокОповещения,, Строка(Выбранные), БиблиотекаКартинок.ВыполнитьЗадачу); КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ВставитьИзБуфера(Команда) - КнопкаВставитьИмя = Команда.Имя; - ИдентификаторЭлемента = Прав(КнопкаВставитьИмя, 32); - СвойстваНастройкиТип = Лев(КнопкаВставитьИмя, СтрНайти(КнопкаВставитьИмя, "_")-1); - - ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; - КолонкаЗначениеИмя = СвойстваНастройкиТип + "_Колонка_Значение_" + ИдентификаторЭлемента; - - Список = ЭтотОбъект[ТаблицаИмя]; - СписокЭлемент = Элементы[ТаблицаИмя]; - КолонкаЗначениеЭлемент = Элементы[КолонкаЗначениеИмя]; - - ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("ОписаниеТипов", ОписаниеТиповУдалитьПримитивные(Список.ТипЗначения)); - ПараметрыПоиска.Вставить("ПараметрыВыбора", КолонкаЗначениеЭлемент.ПараметрыВыбора); - ПараметрыПоиска.Вставить("ПредставлениеПоля", СписокЭлемент.Заголовок); - ПараметрыПоиска.Вставить("Сценарий", "ВставкаИзБуфераОбмена"); - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - ПараметрыВыполнения.Вставить("ТаблицаИмя", ТаблицаИмя); - Обработчик = Новый ОписаниеОповещения("Подключаемый_СписокСПодбором_ВставитьИзБуфера_Завершение", ЭтотОбъект, ПараметрыВыполнения); - - МодульЗагрузкаДанныхИзФайлаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗагрузкаДанныхИзФайлаКлиент"); - МодульЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗаполненияСсылок(ПараметрыПоиска, Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_ВставитьИзБуфера_Завершение(НайденныеОбъекты, ПараметрыВыполнения) Экспорт - Если НайденныеОбъекты = Неопределено Тогда - Возврат; - КонецЕсли; - - ИдентификаторЭлемента = ПараметрыВыполнения.ИдентификаторЭлемента; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - - Список = ЭтотОбъект[ПараметрыВыполнения.ТаблицаИмя]; - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Если ПользовательскаяНастройкаКД.ПравоеЗначение = Неопределено Тогда - ПользовательскаяНастройкаКД.ПравоеЗначение = Новый СписокЗначений; - КонецЕсли; - Отмеченные = ПользовательскаяНастройкаКД.ПравоеЗначение; - Иначе - Отмеченные = ПользовательскаяНастройкаКД.Значение; - КонецЕсли; - Для Каждого Значение Из НайденныеОбъекты Цикл - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, Значение, Неопределено, Истина); - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Отмеченные, Значение, Неопределено, Истина); - КонецЦикла; - - // Включение флажка Использование. - ПользовательскаяНастройкаКД.Использование = Истина; - - // Оформление строк. - ТаблицаФормы = Элементы.Найти(ПараметрыВыполнения.ТаблицаИмя); - ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СписокСПодбором_Добавить(Команда) - - КнопкаПодборИмя = Команда.Имя; - - ИдентификаторЭлемента = Прав(КнопкаПодборИмя, 32); - СвойстваНастройкиТип = Лев(КнопкаПодборИмя, СтрНайти(КнопкаПодборИмя, "_Подбор_") - 1); - - ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; - - Элементы[ТаблицаИмя].ДобавитьСтроку(); - -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ФиксированныйСписок_ПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) - Отказ = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ФиксированныйСписок_ПередУдалением(Элемент, Отказ) - Отказ = Истина; + УстановитьМодифицированность(); КонецПроцедуры #КонецОбласти @@ -852,18 +394,19 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыСортировка &НаКлиенте -Процедура СортировкаВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) +Процедура СортировкаВыбор(Элемент, ИдентификаторСтроки, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - СтрокаТаблицы = Элементы.Сортировка.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда + + Строка = Элементы.Сортировка.ТекущиеДанные; + Если Строка = Неопределено Тогда Возврат; КонецЕсли; - Если СтрокаТаблицы.ТипНастройки = "ЭлементПорядка" Тогда - ИмяКолонки = Поле.Имя; - Если ИмяКолонки = "СортировкаПредставление" Тогда // Изменение поля - ТаблицыПолейИзменить("Сортировка", СтрокаИдентификатор, СтрокаТаблицы); - ИначеЕсли ИмяКолонки = "СортировкаНаправление" Тогда // Изменение порядка. - ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", СтрокаТаблицы, Неопределено); + + Если ТипЗнч(Строка.Поле) = Тип("ПолеКомпоновкиДанных") Тогда + Если Поле = Элементы.СортировкаПоле Тогда // Изменение поля + СортировкаВыбратьПоле(ИдентификаторСтроки, Строка); + ИначеЕсли Поле = Элементы.СортировкаТипУпорядочивания Тогда // Изменение порядка. + ИзменитьТипУпорядочивания(Строка); КонецЕсли; КонецЕсли; КонецПроцедуры @@ -871,118 +414,70 @@ &НаКлиенте Процедура СортировкаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) Отказ = Истина; - Обработчик = Новый ОписаниеОповещения("СортировкаПослеВыбораПоля", ЭтотОбъект); - ТаблицыПолейПоказатьВыборПоля("Сортировка", Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура СортировкаПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт - Если ДоступноеПолеКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Результат = ТаблицыПолейВставить("Сортировка", Тип("ЭлементПорядкаКомпоновкиДанных"), 0, Неопределено); - - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Использование = Истина; - ЭлементКД.Поле = ДоступноеПолеКД.Поле; - ЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; - - СтрокаТаблицы = Результат.СтрокаТаблицы; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; - СтрокаТаблицы.Направление = ЭлементКД.ТипУпорядочивания; - СтрокаТаблицы.ТипНастройки = "ЭлементПорядка"; - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); - - УстановитьМодифицированность(); + ВыбратьПоле("Сортировка", Новый ОписаниеОповещения("СортировкаПослеВыбораПоля", ЭтотОбъект)); КонецПроцедуры &НаКлиенте Процедура СортировкаПередУдалением(Элемент, Отказ) - ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); + УдалитьСтроки(Элемент, Отказ); КонецПроцедуры &НаКлиенте Процедура СортировкаИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("Сортировка"); + ИзменитьИспользованиеЭлементаНастройки("Сортировка"); КонецПроцедуры &НаКлиенте Процедура Сортировка_ПоУбыванию(Команда) - ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", Неопределено, НаправлениеСортировкиКомпоновкиДанных.Убыв); + ИзменитьТипУпорядочиванияСтрок(НаправлениеСортировкиКомпоновкиДанных.Убыв); КонецПроцедуры &НаКлиенте Процедура Сортировка_ПоВозрастанию(Команда) - ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", Неопределено, НаправлениеСортировкиКомпоновкиДанных.Возр); + ИзменитьТипУпорядочиванияСтрок(НаправлениеСортировкиКомпоновкиДанных.Возр); КонецПроцедуры &НаКлиенте Процедура Сортировка_ПереместитьВверх(Команда) - - Контекст = НовыйКонтекст("Сортировка", "Переместить"); - Контекст.Вставить("Направление", -1); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СдвинутьСтроки(Контекст); - + СдвинутьСортировку(); КонецПроцедуры &НаКлиенте Процедура Сортировка_ПереместитьВниз(Команда) - - Контекст = НовыйКонтекст("Сортировка", "Переместить"); - Контекст.Вставить("Направление", 1); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СдвинутьСтроки(Контекст); - + СдвинутьСортировку(Ложь); КонецПроцедуры &НаКлиенте Процедура Сортировка_УстановитьФлажки(Команда) - УстановитьФлажкиИспользованиеВоВсемДереве("Сортировка", Истина); + ИзменитьИспользование("Сортировка"); КонецПроцедуры &НаКлиенте Процедура Сортировка_СнятьФлажки(Команда) - УстановитьФлажкиИспользованиеВоВсемДереве("Сортировка", Ложь); + ИзменитьИспользование("Сортировка", Ложь); КонецПроцедуры &НаКлиенте Процедура СортировкаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, РазрешитьПеретаскивание) - Если Не ЗарегистрироватьНачалоПеретаскивания("Сортировка") Тогда - РазрешитьПеретаскивание = Ложь; + ИсточникПеретаскиванияНаКлиенте = Элемент.Имя; +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ТекущаяСтрока, Поле) + ПриемникПеретаскиванияНаКлиенте = Элемент.Имя; + + Если ПараметрыПеретаскивания.Значение.Количество() > 0 Тогда + СтандартнаяОбработка = Ложь; КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура СортировкаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) +Процедура СортировкаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ТекущаяСтрока, Поле) СтандартнаяОбработка = Ложь; - ПроверитьВозможностьПеретаскивания("Сортировка", ИдентификаторЦели, ПараметрыПеретаскивания); -КонецПроцедуры - -&НаКлиенте -Процедура СортировкаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) - // Возникает в приемнике при окончании перетаскивания когда все проверки пройдены. - СтандартнаяОбработка = Ложь; - ИсточникПеретаскивания = ИсточникПеретаскиванияНаКлиенте; - Если ИсточникПеретаскивания = Неопределено Тогда - Возврат; - КонецЕсли; - Если ИсточникПеретаскивания.ТаблицаИмя = "Сортировка" Тогда - ПеретаскиваниеВПределахТаблицы(ИсточникПеретаскивания, ИдентификаторЦели); - ИначеЕсли ИсточникПеретаскивания.ТаблицаИмя = "ВыбранныеПоля" Тогда - ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, ИдентификаторЦели); + Если ИсточникПеретаскиванияНаКлиенте = Элемент.Имя Тогда + ПеретащитьСортировкуВнутриКоллекции(ПараметрыПеретаскивания, ТекущаяСтрока); + ИначеЕсли ИсточникПеретаскиванияНаКлиенте = Элементы.ВыбранныеПоля.Имя Тогда + ПеретащитьВыбранныеПоляВСортировку(ПараметрыПеретаскивания.Значение); КонецЕсли; КонецПроцедуры @@ -993,27 +488,43 @@ &НаКлиенте Процедура ВыбранныеПоля_Сортировка_Вправо(Команда) - ИсточникПеретаскивания = Неопределено; - Если Не ЗарегистрироватьНачалоПеретаскивания("ВыбранныеПоля", ИсточникПеретаскивания) Тогда + ИдентификаторыСтрок = Элементы.ВыбранныеПоля.ВыделенныеСтроки; + Если ИдентификаторыСтрок = Неопределено Тогда Возврат; КонецЕсли; - ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, Неопределено); + + Строки = Новый Массив; + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки); + Если ТипЗнч(Строка.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + Строки.Добавить(Строка); + КонецЕсли; + КонецЦикла; + + ПеретащитьВыбранныеПоляВСортировку(Строки); КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоля_Сортировка_Влево(Команда) - ИсточникПеретаскивания = Неопределено; - Если Не ЗарегистрироватьНачалоПеретаскивания("Сортировка", ИсточникПеретаскивания) Тогда + ИдентификаторыСтрок = Элементы.Сортировка.ВыделенныеСтроки; + Если ИдентификаторыСтрок = Неопределено Тогда Возврат; КонецЕсли; - ПеретаскиваниеСортировокВВыбранныеПоля(ИсточникПеретаскивания, Элементы.ВыбранныеПоля.ТекущаяСтрока); + + Строки = Новый Массив; + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + Строка = Сортировка.НайтиПоИдентификатору(ИдентификаторСтроки); + Если ТипЗнч(Строка.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + Строки.Добавить(Строка); + КонецЕсли; + КонецЦикла; + + ПеретащитьПоляСортировкиВВыбранныеПоля(Строки); КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоля_Сортировка_ВлевоВсе(Команда) - КорневаяСтрока = КорневаяСтрокаПоУмолчанию("Сортировка"); - ТаблицыПолейУдалить("Сортировка", КорневаяСтрока.ПолучитьЭлементы(), Истина); - УстановитьМодифицированность(); + ПеретащитьПоляСортировкиВВыбранныеПоля(Сортировка.ПолучитьЭлементы()[0].ПолучитьЭлементы()); КонецПроцедуры #КонецОбласти @@ -1021,18 +532,19 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыВыбранныеПоля &НаКлиенте -Процедура ВыбранныеПоляВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) +Процедура ВыбранныеПоляВыбор(Элемент, ИдентификаторСтроки, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - СтрокаТаблицы = Элементы.ВыбранныеПоля.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда + + Строка = Элементы.ВыбранныеПоля.ТекущиеДанные; + Если Строка = Неопределено Тогда Возврат; КонецЕсли; - ИмяКолонки = Поле.Имя; - Если ИмяКолонки = "ВыбранныеПоляПредставление" Тогда // Изменение порядка. - Если СтрокаТаблицы.ТипНастройки = "ВыбранноеПоле" Тогда - ТаблицыПолейИзменить("ВыбранныеПоля", СтрокаИдентификатор, СтрокаТаблицы); - ИначеЕсли СтрокаТаблицы.ТипНастройки = "ГруппаВыбранныхПолей" Тогда - ТаблицыПолейИзменитьГруппу("ВыбранныеПоля", СтрокаИдентификатор, СтрокаТаблицы); + + Если Поле = Элементы.ВыбранныеПоляПоле Тогда // Изменение порядка. + Если ТипЗнч(Строка.Поле) = Тип("ПолеКомпоновкиДанных") Тогда + ВыбранныеПоляВыбратьПоле(ИдентификаторСтроки, Строка); + ИначеЕсли Строка.ЭтоГруппа Тогда + ВыбранныеПоляВыбратьГруппу(ИдентификаторСтроки, Строка); КонецЕсли; КонецЕсли; КонецПроцедуры @@ -1040,36 +552,9 @@ &НаКлиенте Процедура ВыбранныеПоляПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) Отказ = Истина; - Если РасширенныйРежим = 0 Тогда - Возврат; - КонецЕсли; Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПослеВыбораПоля", ЭтотОбъект); - ТаблицыПолейПоказатьВыборПоля("ВыбранныеПоля", Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура ВыбранныеПоляПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт - Если ДоступноеПолеКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Результат = ТаблицыПолейВставить("ВыбранныеПоля", Тип("ВыбранноеПолеКомпоновкиДанных"), 0, Неопределено); - - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Использование = Истина; - ЭлементКД.Поле = ДоступноеПолеКД.Поле; - - СтрокаТаблицы = Результат.СтрокаТаблицы; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; - СтрокаТаблицы.ЭтоГруппа = Ложь; - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); - СтрокаТаблицы.ПолеКД = ЭлементКД.Поле; - - ПослеИзмененияФлажкаИспользование("ВыбранныеПоля", СтрокаТаблицы, ЭлементКД); - - УстановитьМодифицированность(); + ВыбратьПоле("ВыбранныеПоля", Обработчик); КонецПроцедуры &НаКлиенте @@ -1078,122 +563,152 @@ Отказ = Истина; Возврат; КонецЕсли; - ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); + УдалитьСтроки(Элемент, Отказ); КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоляИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("ВыбранныеПоля"); + ИзменитьИспользованиеЭлементаНастройки("ВыбранныеПоля"); КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоля_ПереместитьВверх(Команда) - - Контекст = НовыйКонтекст("ВыбранныеПоля", "Переместить"); - Контекст.Вставить("Направление", -1); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СдвинутьСтроки(Контекст); - + СдвинутьВыбранныеПоля(); КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоля_ПереместитьВниз(Команда) - - Контекст = НовыйКонтекст("ВыбранныеПоля", "Переместить"); - Контекст.Вставить("Направление", 1); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СдвинутьСтроки(Контекст); - + СдвинутьВыбранныеПоля(Ложь); КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоля_Сгруппировать(Команда) - - Контекст = НовыйКонтекст("ВыбранныеПоля", "Сгруппировать"); - Контекст.Вставить("ТипГруппыКД", Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); + ПараметрыГруппировки = ПараметрыГруппировкиВыбранныхПолей(); + Если ПараметрыГруппировки = Неопределено Тогда Возврат; КонецЕсли; ПараметрыФормы = Новый Структура("Расположение", РасположениеПоляКомпоновкиДанных.Авто); - Обработчик = Новый ОписаниеОповещения("ВыбранныеПоля_СгруппироватьЗавершение", ЭтотОбъект, Контекст); + Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПередГруппировкойПолей", ЭтотОбъект, ПараметрыГруппировки); ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ГруппаВыбранныхПолей", ПараметрыФормы, - ЭтотОбъект, Истина, , , Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыбранныеПоля_СгруппироватьЗавершение(ВыборПользователя, Контекст) Экспорт - - Если ВыборПользователя = Неопределено Или ВыборПользователя = КодВозвратаДиалога.Отмена Тогда - Возврат; - КонецЕсли; - - Контекст.Вставить("ЗаголовокГруппы", ВыборПользователя.ЗаголовокГруппы); - Контекст.Вставить("Расположение", ВыборПользователя.Расположение); - СгруппироватьСтроки(Контекст); - ОбновитьФорму(Контекст); - + ЭтотОбъект, УникальныйИдентификатор,,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоля_Разгруппировать(Команда) - ТаблицыПолейРазгруппировать("ВыбранныеПоля"); + ИдентификаторыСтрок = Элементы.ВыбранныеПоля.ВыделенныеСтроки; + Если ИдентификаторыСтрок.Количество() <> 1 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите одну группу.'")); + Возврат; + КонецЕсли; + + РодительСтрокиИсточника = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторыСтрок[0]); + Если ТипЗнч(РодительСтрокиИсточника.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'")); + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + РодительЭлементаНастройкиИсточника = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(РодительСтрокиИсточника.Идентификатор); + Если ТипЗнч(РодительЭлементаНастройкиИсточника) <> Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'")); + Возврат; + КонецЕсли; + + РодительЭлементаНастройкиПриемника = РодительЭлементаНастройкиИсточника.Родитель; + Если РодительЭлементаНастройкиИсточника.Родитель = Неопределено Тогда + РодительЭлементаНастройкиПриемника = СвойствоЭлементаСтруктуры; + КонецЕсли; + + НаследникиЭлементовНастроек = Новый Соответствие; + НаследникиЭлементовНастроек.Вставить(РодительЭлементаНастройкиИсточника, РодительЭлементаНастройкиПриемника); + + РодительСтрокиПриемника = РодительСтрокиИсточника.ПолучитьРодителя(); + НаследникиСтрок = Новый Соответствие; + НаследникиСтрок.Вставить(РодительСтрокиИсточника, РодительСтрокиПриемника); + + ИзменитьГруппировкуВыбранныхПолей(СвойствоЭлементаСтруктуры, РодительСтрокиИсточника.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок); + + // Удаление базовых элементов группировки. + РодительСтрокиПриемника.ПолучитьЭлементы().Удалить(РодительСтрокиИсточника); + РодительЭлементаНастройкиПриемника.Элементы.Удалить(РодительЭлементаНастройкиИсточника); + + Раздел = ВыбранныеПоля.ПолучитьЭлементы()[0]; + Элементы.ВыбранныеПоля.Развернуть(Раздел.ПолучитьИдентификатор(), Истина); + Элементы.ВыбранныеПоля.ТекущаяСтрока = РодительСтрокиПриемника.ПолучитьИдентификатор(); + + УстановитьМодифицированность(); КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоля_УстановитьФлажки(Команда) - УстановитьФлажкиИспользованиеВоВсемДереве("ВыбранныеПоля", Истина); + ИзменитьИспользование("ВыбранныеПоля"); КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоля_СнятьФлажки(Команда) - УстановитьФлажкиИспользованиеВоВсемДереве("ВыбранныеПоля", Ложь); + ИзменитьИспользование("ВыбранныеПоля", Ложь); КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоляНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, РазрешитьПеретаскивание) - Если Не ЗарегистрироватьНачалоПеретаскивания("ВыбранныеПоля") Тогда + ИсточникПеретаскиванияНаКлиенте = Элемент.Имя; + + ПроверитьПеретаскиваемыеСтрокиИзВыбранныхПолей(ПараметрыПеретаскивания.Значение); + Если ПараметрыПеретаскивания.Значение.Количество() = 0 Тогда РазрешитьПеретаскивание = Ложь; КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ВыбранныеПоляПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) - СтандартнаяОбработка = Ложь; - ПроверитьВозможностьПеретаскивания("ВыбранныеПоля", ИдентификаторЦели, ПараметрыПеретаскивания); +Процедура ВыбранныеПоляПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ТекущаяСтрока, Поле) + ПриемникПеретаскиванияНаКлиенте = Элемент.Имя; + + Если ПараметрыПеретаскивания.Значение.Количество() > 0 Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ВыбранныеПоляПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) - // Возникает в приемнике при окончании перетаскивания когда все проверки пройдены. +Процедура ВыбранныеПоляПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ТекущаяСтрока, Поле) СтандартнаяОбработка = Ложь; - ИсточникПеретаскивания = ИсточникПеретаскиванияНаКлиенте; - Если ИсточникПеретаскивания = Неопределено Тогда - Возврат; - КонецЕсли; - Если ИсточникПеретаскивания.ТаблицаИмя = "ВыбранныеПоля" Тогда - ПеретаскиваниеВПределахТаблицы(ИсточникПеретаскивания, ИдентификаторЦели); - ИначеЕсли ИсточникПеретаскивания.ТаблицаИмя = "Сортировка" Тогда - ПеретаскиваниеСортировокВВыбранныеПоля(ИсточникПеретаскивания, ИдентификаторЦели); + + Если ИсточникПеретаскиванияНаКлиенте = Элемент.Имя Тогда + ПеретащитьВыбранныеПоляВПределахКоллекции(ПараметрыПеретаскивания, ТекущаяСтрока); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ВыбранныеПоляОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + Если ПриемникПеретаскиванияНаКлиенте <> Элемент.Имя Тогда + Возврат; + КонецЕсли; + СтандартнаяОбработка = Ложь; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + Строки = ПараметрыПеретаскивания.Значение; + Родитель = Строки[0].ПолучитьРодителя(); + + Индекс = Строки.ВГраница(); + Пока Индекс >= 0 Цикл + Строка = Строки[Индекс]; + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + РодительЭлементаНастройки = СвойствоЭлементаСтруктуры; + Если ЭлементНастройки.Родитель <> Неопределено Тогда + РодительЭлементаНастройки = ЭлементНастройки.Родитель; + КонецЕсли; + + РодительЭлементаНастройки.Элементы.Удалить(ЭлементНастройки); + Родитель.ПолучитьЭлементы().Удалить(Строка); + + Индекс = Индекс - 1; + КонецЦикла; КонецПроцедуры #КонецОбласти @@ -1201,262 +716,355 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыОтборы &НаКлиенте -Процедура ОтборыВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) +Процедура Отборы_Сгруппировать(Команда) + ПараметрыГруппировки = ПараметрыГруппировкиОтборов(); + Если ПараметрыГруппировки = Неопределено Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + + // Обработка элементов настроек. + ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры; + Если ТипЗнч(ПараметрыГруппировки.Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(ПараметрыГруппировки.Родитель.Идентификатор); + КонецЕсли; + + ЭлементНастройкиПриемник = ЭлементНастройкиИсточник.Элементы.Вставить(ПараметрыГруппировки.Индекс, Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ЭлементНастройкиПриемник.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; + ЭлементНастройкиПриемник.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + + НаследникиЭлементовНастроек = Новый Соответствие; + НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник); + + // Обработка строк. + СтрокаИсточник = ПараметрыГруппировки.Родитель; + СтрокаПриемник = СтрокаИсточник.ПолучитьЭлементы().Вставить(ПараметрыГруппировки.Индекс); + УстановитьДанныеСтрокиОтборов(СтрокаПриемник, СвойствоЭлементаСтруктуры, ЭлементНастройкиПриемник); + СтрокаПриемник.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник); + + НаследникиСтрок = Новый Соответствие; + НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник); + + ИзменитьГруппировкуОтборов(СвойствоЭлементаСтруктуры, ПараметрыГруппировки.Строки, НаследникиЭлементовНастроек, НаследникиСтрок); + УдалитьБазовыеЭлементыГруппировкиОтборов(СвойствоЭлементаСтруктуры, ПараметрыГруппировки); + + Раздел = КорневаяСтрокаПоУмолчанию("Отборы"); + Элементы.Отборы.Развернуть(Раздел.ПолучитьИдентификатор(), Истина); + Элементы.Отборы.ТекущаяСтрока = СтрокаПриемник.ПолучитьИдентификатор(); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_Разгруппировать(Команда) + ИдентификаторыСтрок = Элементы.Отборы.ВыделенныеСтроки; + Если ИдентификаторыСтрок.Количество() <> 1 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите одну группу.'")); + Возврат; + КонецЕсли; + + РодительСтрокиИсточника = Отборы.НайтиПоИдентификатору(ИдентификаторыСтрок[0]); + Если ТипЗнч(РодительСтрокиИсточника.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'")); + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + + РодительЭлементаНастройкиИсточника = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(РодительСтрокиИсточника.Идентификатор); + Если ТипЗнч(РодительЭлементаНастройкиИсточника) <> Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'")); + Возврат; + КонецЕсли; + + РодительЭлементаНастройкиПриемника = РодительЭлементаНастройкиИсточника.Родитель; + Если РодительЭлементаНастройкиИсточника.Родитель = Неопределено Тогда + РодительЭлементаНастройкиПриемника = СвойствоЭлементаСтруктуры; + КонецЕсли; + + НаследникиЭлементовНастроек = Новый Соответствие; + НаследникиЭлементовНастроек.Вставить(РодительЭлементаНастройкиИсточника, РодительЭлементаНастройкиПриемника); + + РодительСтрокиПриемника = РодительСтрокиИсточника.ПолучитьРодителя(); + НаследникиСтрок = Новый Соответствие; + НаследникиСтрок.Вставить(РодительСтрокиИсточника, РодительСтрокиПриемника); + + ИзменитьГруппировкуОтборов(СвойствоЭлементаСтруктуры, РодительСтрокиИсточника.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок); + + // Удаление базовых элементов группировки. + РодительСтрокиПриемника.ПолучитьЭлементы().Удалить(РодительСтрокиИсточника); + РодительЭлементаНастройкиПриемника.Элементы.Удалить(РодительЭлементаНастройкиИсточника); + + Раздел = КорневаяСтрокаПоУмолчанию("Отборы"); + Элементы.Отборы.Развернуть(Раздел.ПолучитьИдентификатор(), Истина); + Элементы.Отборы.ТекущаяСтрока = РодительСтрокиПриемника.ПолучитьИдентификатор(); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_ПереместитьВверх(Команда) + СдвинутьОтборы(); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_ПереместитьВниз(Команда) + СдвинутьОтборы(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_УстановитьФлажки(Команда) + ИзменитьИспользование("Параметры"); + ИзменитьИспользование("Отборы"); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_СнятьФлажки(Команда) + ИзменитьИспользование("Параметры", Ложь); + ИзменитьИспользование("Отборы", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_ПоказыватьВШапкеОтчета(Команда) + ОтборыУстановитьРежимОтображения("ПоказыватьВШапкеОтчета"); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_ПоказыватьВНастройкахОтчета(Команда) + ОтборыУстановитьРежимОтображения("ПоказыватьВНастройкахОтчета"); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_ПоказыватьТолькоФлажокВШапкеОтчета(Команда) + ОтборыУстановитьРежимОтображения("ПоказыватьТолькоФлажокВШапкеОтчета"); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета(Команда) + ОтборыУстановитьРежимОтображения("ПоказыватьТолькоФлажокВНастройкахОтчета"); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_НеПоказывать(Команда) + ОтборыУстановитьРежимОтображения("НеПоказывать"); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыВыбор(Элемент, ИдентификаторСтроки, Поле, СтандартнаяОбработка) + Строка = Элементы.Отборы.ТекущиеДанные; + Если Строка = Неопределено Или Строка.ЭтоРаздел Тогда + Возврат; + КонецЕсли; + СтандартнаяОбработка = Ложь; - ИмяКолонки = Поле.Имя; - Если РасширенныйРежим <> 1 Тогда - Возврат; - КонецЕсли; - СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - Если СтрокаТаблицы.ЭтоРаздел Тогда - Возврат; - КонецЕсли; - Если ИмяКолонки = "ОтборыПредставление" Тогда // Изменение порядка. - - Если СтрокаТаблицы.ЭтоПараметр Тогда + Поля = СтрРазделить("ОтборыПараметр, ОтборыТипГруппы, ОтборыЛевоеЗначение", ", ", Ложь); + Если Поля.Найти(Поле.Имя) <> Неопределено Тогда + Если Строка.ЭтоПараметр Тогда Возврат; КонецЕсли; - Если СтрокаТаблицы.ЭтоГруппа Тогда - ТаблицыПолейИзменитьГруппу("Отборы", СтрокаИдентификатор, СтрокаТаблицы); + + Если Строка.ЭтоГруппа Тогда + ОтборыВыбратьГруппу(ИдентификаторСтроки); Иначе - ТаблицыПолейИзменить("Отборы", СтрокаИдентификатор, СтрокаТаблицы); + ОтборыВыбратьПоле(ИдентификаторСтроки, Строка); КонецЕсли; - - ИначеЕсли ИмяКолонки = "ОтборыИндексКартинкиДоступа" Тогда // Изменение быстрого доступа к отбору. - - ТаблицыПолейИзменитьУровеньДоступа("Отборы", СтрокаИдентификатор, Истина, Не СтрокаТаблицы.ЭтоПараметр); - - ИначеЕсли ИмяКолонки = "ОтборыЗначение" - Или ИмяКолонки = "ОтборыПредставлениеЗначения" Тогда - - Если СтрокаТаблицы.ЭтоГруппа Тогда - Возврат; - КонецЕсли; - Если СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.Заполнено - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда - Возврат; - КонецЕсли; - - ЭтоПериод = (СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета")); - Если ЭтоПериод Тогда - ОтборыПоказатьВыборПериода(СтрокаТаблицы); + ИначеЕсли Поле = Элементы.ОтборыКартинкаРежимаОтображения Тогда // Изменение быстрого доступа к отбору. + Если Строка.ЭтоПараметр Тогда + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "ПараметрыДанных"); Иначе - Если СтрокаТаблицы.ВводСписком Тогда - ОтборыПоказатьСписокСФлажками(СтрокаТаблицы); - ИначеЕсли СтрокаТаблицы.ФиксированныйСписокВыбора Тогда - ОтборыВыбратьЗначениеИзСписка(СтрокаТаблицы); - Иначе - ОтборыПоказатьВыборСсылки(СтрокаТаблицы, СтандартнаяОбработка); - КонецЕсли; + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); КонецЕсли; - - ИначеЕсли ИмяКолонки = "ОтборыУсловие" Тогда - - Если СтрокаТаблицы.ЭтоГруппа Тогда - Возврат; - КонецЕсли; - ЭтоПериод = (СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета")); - Если ЭтоПериод Тогда - ОтборыПоказатьВыборПериода(СтрокаТаблицы); - Иначе - ОтборыВыбратьВидСравнения(СтрокаТаблицы); - КонецЕсли; - - ИначеЕсли ИмяКолонки = "ОтборыЗаголовок" Тогда - + ВыбратьРежимОтображения(СвойствоЭлементаСтруктуры, "Отборы", ИдентификаторСтроки, Истина, Не Строка.ЭтоПараметр); + Иначе СтандартнаяОбработка = Истина; - + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПриАктивизацииСтроки(Элемент) + ПодключитьОбработчикОжидания("ОтборыПриИзмененииТекущейСтроки", 0.1, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПриАктивизацииЯчейки(Элемент) + Строка = Элемент.ТекущиеДанные; + Если Строка = Неопределено Тогда + Возврат; КонецЕсли; + ЭтоПолеСписка = Строка.ДоступенСписокЗначений Или ОтчетыКлиентСервер.ЭтоВидСравненияСписка(Строка.ВидСравнения); + + ПолеЗначения = ?(Строка.ЭтоПараметр, Элементы.ОтборыЗначение, Элементы.ОтборыПравоеЗначение); + ПолеЗначения.ОграничениеТипа = ?(ЭтоПолеСписка, Новый ОписаниеТипов("СписокЗначений"), Строка.ТипЗначения); + ПолеЗначения.РежимВыбораИзСписка = Не ЭтоПолеСписка И (Строка.ДоступныеЗначения <> Неопределено); + + ПривестиЗначениеКВидуСравнения(Строка); + УстановитьПредставлениеЗначения(Строка); КонецПроцедуры &НаКлиенте Процедура ОтборыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) Отказ = Истина; - Если РасширенныйРежим = 0 Тогда - Возврат; - КонецЕсли; - Если Не РежимИзмененияУзлаВарианта Тогда - ТекущаяСтрока = Элементы.Отборы.ТекущиеДанные; - Если (ТекущаяСтрока = Неопределено) - Или (ТекущаяСтрока.ЭтоПараметр) - Или (ТекущаяСтрока.ЭтоРаздел И ТекущаяСтрока.ИдентификаторКД = "ПараметрыДанных") Тогда - ТекущаяСтрока = Отборы.ПолучитьЭлементы()[1]; - Элементы.Отборы.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); + Если Не РежимИзмененияЭлементаСтруктурыНастроек Тогда + Строка = Элементы.Отборы.ТекущиеДанные; + Если (Строка = Неопределено) + Или (Строка.ЭтоПараметр) + Или (Строка.ЭтоРаздел И Строка.Идентификатор = "ПараметрыДанных") Тогда + Строка = Отборы.ПолучитьЭлементы()[1]; + Элементы.Отборы.ТекущаяСтрока = Строка.ПолучитьИдентификатор(); КонецЕсли; КонецЕсли; - Обработчик = Новый ОписаниеОповещения("ОтборыПослеВыбораПоля", ЭтотОбъект); - ТаблицыПолейПоказатьВыборПоля("Отборы", Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыПослеВыбораПоля(ДоступноеПолеОтбораКД, ПараметрыВыполнения) Экспорт - Если ДоступноеПолеОтбораКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Результат = ТаблицыПолейВставить("Отборы", Тип("ЭлементОтбораКомпоновкиДанных"), 0, Неопределено); - - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Использование = Истина; - ЭлементКД.ЛевоеЗначение = ДоступноеПолеОтбораКД.Поле; - ЭлементКД.ПравоеЗначение = ДоступноеПолеОтбораКД.Тип.ПривестиЗначение(); - ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; - ЭлементКД.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор()); - - УстановитьМодифицированность(); - Обновить(); + ВыбратьПоле("Отборы", Новый ОписаниеОповещения("ОтборыПослеВыбораПоля", ЭтотОбъект)); КонецПроцедуры &НаКлиенте Процедура ОтборыПередУдалением(Элемент, Отказ) - ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_Сгруппировать(Команда) - - Контекст = НовыйКонтекст("Отборы", "Сгруппировать"); - Контекст.Вставить("ТипГруппыКД", Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СгруппироватьСтроки(Контекст); - ОбновитьФорму(Контекст); - -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_Разгруппировать(Команда) - ТаблицыПолейРазгруппировать("Отборы"); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_ПереместитьВверх(Команда) - - Контекст = НовыйКонтекст("Отборы", "Переместить"); - Контекст.Вставить("Направление", -1); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СдвинутьСтроки(Контекст); - -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_ПереместитьВниз(Команда) - - Контекст = НовыйКонтекст("Отборы", "Переместить"); - Контекст.Вставить("Направление", 1); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СдвинутьСтроки(Контекст); - -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_УстановитьФлажки(Команда) - УстановитьФлажкиИспользованиеВоВсемДереве("Отборы", Истина); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_СнятьФлажки(Команда) - УстановитьФлажкиИспользованиеВоВсемДереве("Отборы", Ложь); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_ПоказыватьВШапкеОтчета(Команда) - ОтборыУстановитьУровеньДоступа("ПоказыватьВШапкеОтчета"); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_ПоказыватьВНастройкахОтчета(Команда) - ОтборыУстановитьУровеньДоступа("ПоказыватьВНастройкахОтчета"); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_ПоказыватьТолькоФлажокВШапкеОтчета(Команда) - ОтборыУстановитьУровеньДоступа("ПоказыватьТолькоФлажокВШапкеОтчета"); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета(Команда) - ОтборыУстановитьУровеньДоступа("ПоказыватьТолькоФлажокВНастройкахОтчета"); -КонецПроцедуры - -&НаКлиенте -Процедура Отборы_НеПоказывать(Команда) - ОтборыУстановитьУровеньДоступа("НеПоказывать"); + УдалитьСтроки(Элемент, Отказ); КонецПроцедуры &НаКлиенте Процедура ОтборыИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("Отборы"); + ИзменитьИспользованиеЭлементаНастройки("Отборы"); КонецПроцедуры &НаКлиенте -Процедура ОтборыЗначениеПриИзменении(Элемент) - ТаблицыПолейИзменитьЗначение("Отборы"); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗаголовокПриИзменении(Элемент) - СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда +Процедура ОтборыВидСравненияПриИзменении(Элемент) + Строка = Элементы.Отборы.ТекущиеДанные; + Если Строка = Неопределено Тогда Возврат; КонецЕсли; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; + КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек("Отборы", Строка); + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); - Если ПустаяСтрока(СтрокаТаблицы.Заголовок) Тогда - СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; - КонецЕсли; - СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЭлементНастройки.ВидСравнения = Строка.ВидСравнения; - Если Не СтрокаТаблицы.ЭтоПараметр Тогда - Если СтрокаТаблицы.ИндексКартинкиДоступа = 1 Или СтрокаТаблицы.ИндексКартинкиДоступа = 3 Тогда - // Когда ПредставлениеПользовательскойНастройки заполнено, - // то Представление работает как переключатель, - // но также может использоваться для вывода в табличный документ. - ЭлементКД.Представление = СтрокаТаблицы.Заголовок; - Иначе - ЭлементКД.Представление = ""; + Если Строка.ЭтоПараметр Тогда + Условие = ВидСравненияКомпоновкиДанных.Равно; + Если Строка.ДоступенСписокЗначений Тогда + Условие = ВидСравненияКомпоновкиДанных.ВСписке; КонецЕсли; - КонецЕсли; - Если СтрокаТаблицы.ЗаголовокПереопределен Тогда - ЭлементКД.ПредставлениеПользовательскойНастройки = СтрокаТаблицы.Заголовок; Иначе - ЭлементКД.ПредставлениеПользовательскойНастройки = ""; + Условие = Строка.ВидСравнения; КонецЕсли; + ПолеЗначения = ?(Строка.ЭтоПараметр, Элементы.ОтборыЗначение, Элементы.ОтборыПравоеЗначение); + ПолеЗначения.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы(Строка.ВыборГруппИЭлементов, Условие); + + ПривестиЗначениеКВидуСравнения(Строка, ЭлементНастройки); УстановитьМодифицированность(); КонецПроцедуры &НаКлиенте -Процедура ОтборыПриАктивизацииСтроки(Элемент) +Процедура ОтборыЗначениеПриИзменении(Элемент) + Строка = Элементы.Отборы.ТекущиеДанные; + Если Строка = Неопределено Тогда + Возврат; + КонецЕсли; - ПодключитьОбработчикОжидания("ОтборыПриИзмененииТекущейСтроки", 0.1, Истина); + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "ПараметрыДанных"); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЭлементНастройки.Значение = Строка.Значение; + УстановитьМодифицированность(); + УстановитьПредставлениеЗначения(Строка); + + Если НастройкиОтчета.ЗагрузитьНастройкиПриИзмененииПараметров.Найти(ЭлементНастройки.Параметр) <> Неопределено Тогда + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь); + + ПараметрыОбновления = Новый Структура; + ПараметрыОбновления.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); + ПараметрыОбновления.Вставить("ВариантМодифицирован", ВариантМодифицирован); + ПараметрыОбновления.Вставить("ПользовательскиеНастройкиМодифицированы", ПользовательскиеНастройкиМодифицированы); + ПараметрыОбновления.Вставить("СброситьПользовательскиеНастройки", Истина); + + ОбновитьФорму(ПараметрыОбновления); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + Строка = Элементы.Отборы.ТекущиеДанные; + + Если Строка.ДоступенСписокЗначений Тогда + ПоказатьСписокВыбора(Строка, СтандартнаяОбработка); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПравоеЗначениеПриИзменении(Элемент) + Строка = Элементы.Отборы.ТекущиеДанные; + Если Строка = Неопределено Тогда + Возврат; + КонецЕсли; + + Строка.Использование = Истина; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЗаполнитьЗначенияСвойств(ЭлементНастройки, Строка, "Использование, ПравоеЗначение"); + + УстановитьМодифицированность(); + УстановитьПредставлениеЗначения(Строка); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПравоеЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + Строка = Элементы.Отборы.ТекущиеДанные; + + Если ОтчетыКлиентСервер.ЭтоВидСравненияСписка(Строка.ВидСравнения) Тогда + ПоказатьСписокВыбора(Строка, СтандартнаяОбработка); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПредставлениеПользовательскойНастройкиПриИзменении(Элемент) + Строка = Элементы.Отборы.ТекущиеДанные; + Если Строка = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ПустаяСтрока(Строка.ПредставлениеПользовательскойНастройки) Тогда + Строка.ПредставлениеПользовательскойНастройки = Строка.Заголовок; + КонецЕсли; + Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки); + + Если Строка.ЭтоПараметр Тогда + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "ПараметрыДанных"); + Иначе + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + КонецЕсли; + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + Если Строка.ЭтоПредопределенныйЗаголовок Тогда + ЭлементНастройки.ПредставлениеПользовательскойНастройки = ""; + Иначе + ЭлементНастройки.ПредставлениеПользовательскойНастройки = Строка.ПредставлениеПользовательскойНастройки; + КонецЕсли; + + Если Не Строка.ЭтоПараметр Тогда + Если Строка.КартинкаРежимаОтображения = 1 Или Строка.КартинкаРежимаОтображения = 3 Тогда + // Когда ПредставлениеПользовательскойНастройки заполнено, + // то Представление работает как переключатель, + // но также может использоваться для вывода в табличный документ. + ЭлементНастройки.Представление = Строка.ПредставлениеПользовательскойНастройки; + Иначе + ЭлементНастройки.Представление = ""; + КонецЕсли; + КонецЕсли; + + УстановитьМодифицированность(); КонецПроцедуры #КонецОбласти @@ -1465,98 +1073,41 @@ &НаКлиенте Процедура СтруктураВариантаПриАктивизацииСтроки(Элемент) - СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - МожноДобавлятьВложенные = Истина; - МожноГруппировать = Истина; - МожноОткрывать = Истина; - МожноУдалятьИПеремещать = Истина; - МожноДобавлятьТаблицыИДиаграммы = Ложь; - - Родитель = СтрокаТаблицы.ПолучитьРодителя(); - РодителяМожноПеремещать = (Родитель <> Неопределено - И Родитель.Тип <> "Настройки" - И Родитель.Тип <> "КоллекцияЭлементовСтруктурыТаблицы" - И Родитель.Тип <> "КоллекцияЭлементовСтруктурыДиаграммы"); - ЕстьСоседние = ПолучитьЭлементы(СтруктураВарианта, Родитель).Количество() > 1; - - ЕстьПодчиненные = (СтрокаТаблицы.ПолучитьЭлементы().Количество() > 0); - Если СтрокаТаблицы.Тип = "Таблица" - Или СтрокаТаблицы.Тип = "Диаграмма" - Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда - МожноОткрывать = Ложь; - МожноДобавлятьВложенные = Ложь; - ИначеЕсли СтрокаТаблицы.Тип = "Настройки" - Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" Тогда - МожноОткрывать = Ложь; - МожноУдалятьИПеремещать = Ложь; - МожноГруппировать = Ложь; - ИначеЕсли СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда - МожноОткрывать = Ложь; - МожноГруппировать = Ложь; - КонецЕсли; - - Если СтрокаТаблицы.Тип = "Настройки" Или СтрокаТаблицы.Тип = "Группировка" Тогда - МожноДобавлятьТаблицыИДиаграммы = Истина; - КонецЕсли; - - Элементы.СтруктураВарианта_Добавить.Доступность = МожноДобавлятьВложенные; - Элементы.СтруктураВарианта_Добавить1.Доступность = МожноДобавлятьВложенные; - Элементы.СтруктураВарианта_Изменить.Доступность = МожноОткрывать; - Элементы.СтруктураВарианта_Изменить1.Доступность = МожноОткрывать; - Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность = МожноДобавлятьТаблицыИДиаграммы; - Элементы.СтруктураВарианта_ДобавитьТаблицу1.Доступность = МожноДобавлятьТаблицыИДиаграммы; - Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность = МожноДобавлятьТаблицыИДиаграммы; - Элементы.СтруктураВарианта_ДобавитьДиаграмму1.Доступность = МожноДобавлятьТаблицыИДиаграммы; - Элементы.СтруктураВарианта_Удалить.Доступность = МожноУдалятьИПеремещать; - Элементы.СтруктураВарианта_Удалить1.Доступность = МожноУдалятьИПеремещать; - Элементы.СтруктураВарианта_Сгруппировать.Доступность = МожноГруппировать; - Элементы.СтруктураВарианта_Сгруппировать1.Доступность = МожноГруппировать; - Элементы.СтруктураВарианта_ПереместитьВышеИЛевее.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать; - Элементы.СтруктураВарианта_ПереместитьВышеИЛевее1.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать; - Элементы.СтруктураВарианта_ПереместитьНижеИПравее.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать; - Элементы.СтруктураВарианта_ПереместитьНижеИПравее1.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать; - Элементы.СтруктураВарианта_ПереместитьВверх.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; - Элементы.СтруктураВарианта_ПереместитьВверх1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; - Элементы.СтруктураВарианта_ПереместитьВниз.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; - Элементы.СтруктураВарианта_ПереместитьВниз1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; - + ПодключитьОбработчикОжидания("СтруктураВариантаПриИзмененииТекущейСтроки", 0.1, Истина); КонецПроцедуры &НаКлиенте Процедура СтруктураВариантаВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если РасширенныйРежим <> 1 Тогда + Если РасширенныйРежим = 0 Тогда Возврат; КонецЕсли; - СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда + + Строка = Элемент.ТекущиеДанные; + Если Строка = Неопределено Тогда Возврат; КонецЕсли; - Если СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или СтрокаТаблицы.Тип = "Настройки" Тогда + + Если Строка.Тип = "НастройкиКомпоновкиДанных" + Или Строка.Тип = "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных" + Или Строка.Тип = "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных" Тогда Возврат; КонецЕсли; - ИмяКолонки = Поле.Имя; - Если ИмяКолонки = "СтруктураВариантаПредставление" - Или ИмяКолонки = "СтруктураВариантаСодержитОтборы" - Или ИмяКолонки = "СтруктураВариантаСодержитПоляИлиСортировки" - Или ИмяКолонки = "СтруктураВариантаСодержитУсловноеОформление" Тогда - Если ИмяКолонки = "СтруктураВариантаСодержитОтборы" Тогда + + Если Поле = Элементы.СтруктураВариантаПредставление + Или Поле = Элементы.СтруктураВариантаСодержитОтборы + Или Поле = Элементы.СтруктураВариантаСодержитПоляИлиСортировки + Или Поле = Элементы.СтруктураВариантаСодержитУсловноеОформление Тогда + + ИмяСтраницы = Неопределено; + Если Поле = Элементы.СтруктураВариантаСодержитОтборы Тогда ИмяСтраницы = "СтраницаОтборы"; - ИначеЕсли ИмяКолонки = "СтруктураВариантаСодержитПоляИлиСортировки" Тогда + ИначеЕсли Поле = Элементы.СтруктураВариантаСодержитПоляИлиСортировки Тогда ИмяСтраницы = "СтраницаВыбранныеПоляИСортировки"; - ИначеЕсли ИмяКолонки = "СтруктураВариантаСодержитУсловноеОформление" Тогда + ИначеЕсли Поле = Элементы.СтруктураВариантаСодержитУсловноеОформление Тогда ИмяСтраницы = "СтраницаОформление"; - Иначе - ИмяСтраницы = Неопределено; КонецЕсли; - ИзменитьУзелВарианта(СтрокаТаблицы, ИмяСтраницы, Неопределено); + ИзменитьЭлементСтруктуры(Строка, ИмяСтраницы); Иначе СтандартнаяОбработка = Истина; КонецЕсли; @@ -1565,224 +1116,44 @@ &НаКлиенте Процедура СтруктураВариантаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) Отказ = Истина; - Если РасширенныйРежим = 0 Тогда - Возврат; - КонецЕсли; - Если Не Элементы.СтруктураВарианта_Добавить.Доступность Тогда - Возврат; - КонецЕсли; - Если Копирование Тогда + + Если Копирование + Или Не Элементы.СтруктураВарианта_Добавить.Доступность Тогда Возврат; КонецЕсли; - СтруктураВариантаДобавитьГруппировку(Истина); + ДобавитьГруппировкуСтруктурыВарианта(); КонецПроцедуры &НаКлиенте Процедура СтруктураВарианта_Сгруппировать(Команда) - Если Не Элементы.СтруктураВарианта_Сгруппировать.Доступность Тогда - Возврат; - КонецЕсли; - СтруктураВариантаДобавитьГруппировку(Ложь); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаДобавитьГруппировку(ВнутрьТекущей) - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ВнутрьТекущей", ВнутрьТекущей); - ПараметрыВыполнения.Вставить("Оборачивать", Истина); - - ИдентификаторУзлаНастроек = Неопределено; - СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; - Если СтрокаТаблицы <> Неопределено Тогда - Если Не ВнутрьТекущей Тогда - СтрокаТаблицы = СтрокаТаблицы.ПолучитьРодителя(); - КонецЕсли; - Если ВнутрьТекущей Тогда - Если СтрокаТаблицы.Тип = "Настройки" И Не СтрокаТаблицы.ФлажокДоступен Тогда - ПараметрыВыполнения.Оборачивать = Ложь; - ИначеЕсли СтрокаТаблицы.ПолучитьЭлементы().Количество() > 1 Тогда - ПараметрыВыполнения.Оборачивать = Ложь; - КонецЕсли; - КонецЕсли; - Пока СтрокаТаблицы <> Неопределено Цикл - Если СтрокаТаблицы.Тип = "Настройки" - Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" - Или СтрокаТаблицы.Тип = "Группировка" - Или СтрокаТаблицы.Тип = "ГруппировкаТаблицы" - Или СтрокаТаблицы.Тип = "ГруппировкаДиаграммы" Тогда - ИдентификаторУзлаНастроек = СтрокаТаблицы.ИдентификаторКД; - Прервать; - КонецЕсли; - СтрокаТаблицы = СтрокаТаблицы.ПолучитьРодителя(); - КонецЦикла; - КонецЕсли; - - Обработчик = Новый ОписаниеОповещения("СтруктураВариантаДобавитьГруппировкуПослеВыбораПоля", ЭтотОбъект, ПараметрыВыполнения); - ТаблицыПолейПоказатьВыборПоля("СтруктураВарианта", Обработчик, Неопределено, ИдентификаторУзлаНастроек); -КонецПроцедуры - -&НаКлиенте -Процедура СтруктураВариантаДобавитьГруппировкуПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт - Если ДоступноеПолеКД = Неопределено Тогда - Возврат; - КонецЕсли; - - ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные; - - СтрокиПеремещаемыеВНовуюГруппировку = Новый Массив; - Если ПараметрыВыполнения.Оборачивать Тогда - Если ПараметрыВыполнения.ВнутрьТекущей Тогда - Найденные = ТекущаяСтрока.ПолучитьЭлементы(); - Для Каждого ПеремещаемаяСтрока Из Найденные Цикл - СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ПеремещаемаяСтрока); - КонецЦикла; - Иначе - СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ТекущаяСтрока); - КонецЕсли; - КонецЕсли; - - // Добавление новой группировки. - Результат = ТаблицыПолейВставить("СтруктураВарианта", Тип("ГруппировкаКомпоновкиДанных"), ТекущаяСтрока, ПараметрыВыполнения.ВнутрьТекущей); - - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Использование = Истина; - ЭлементКД.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); - ЭлементКД.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); - - Если ДоступноеПолеКД = "<>" Тогда - // Детальные записи - добавлять поле не требуется. - Представление = НСтр("ru = '<Детальные записи>'"); - Иначе - ПолеГруппировкиКД = ЭлементКД.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); - ПолеГруппировкиКД.Использование = Истина; - ПолеГруппировкиКД.Поле = ДоступноеПолеКД.Поле; - Представление = Строка(ДоступноеПолеКД.Заголовок); - КонецЕсли; - - СтрокаТаблицы = Результат.СтрокаТаблицы; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Представление = Представление; - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Группировка"); - СтрокаТаблицы.ФлажокДоступен = Истина; - СтрокаТаблицы.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); - - Если Не ПараметрыВыполнения.ВнутрьТекущей Тогда - СтрокаТаблицы.Заголовок = ТекущаяСтрока.Заголовок; - СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы); - ТекущаяСтрока.Заголовок = ""; - СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(ТекущаяСтрока); - КонецЕсли; - - // Перемещение текущей группировки в новую. - Для Каждого ПеремещаемаяСтрока Из СтрокиПеремещаемыеВНовуюГруппировку Цикл - Результат = ТаблицыПолейПереместить("СтруктураВарианта", ПеремещаемаяСтрока, СтрокаТаблицы); - КонецЦикла; - - // Бантики. - Элементы.СтруктураВарианта.Развернуть(СтрокаТаблицы.ПолучитьИдентификатор(), Истина); - Элементы.СтруктураВарианта.ТекущаяСтрока = СтрокаТаблицы.ПолучитьИдентификатор(); - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; + Если Элементы.СтруктураВарианта_Сгруппировать.Доступность Тогда + ДобавитьГруппировкуСтруктурыВарианта(Ложь); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СтруктураВарианта_ДобавитьТаблицу(Команда) - Если Не Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность Тогда - Возврат; + Если Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность Тогда + ДобавитьЭлементСтруктурыНастроек(Тип("ТаблицаКомпоновкиДанных")); КонецЕсли; - ДобавитьТаблицуИлиДиаграмму(Тип("ТаблицаКомпоновкиДанных")); КонецПроцедуры &НаКлиенте Процедура СтруктураВарианта_ДобавитьДиаграмму(Команда) - Если Не Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность Тогда - Возврат; + Если Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность Тогда + ДобавитьЭлементСтруктурыНастроек(Тип("ДиаграммаКомпоновкиДанных")); КонецЕсли; - ДобавитьТаблицуИлиДиаграмму(Тип("ДиаграммаКомпоновкиДанных")); КонецПроцедуры &НаКлиенте Процедура СтруктураВарианта_УстановитьФлажки(Команда) - УстановитьФлажкиИспользованиеВоВсемДереве("СтруктураВарианта", Истина); + ИзменитьИспользование("СтруктураВарианта"); КонецПроцедуры &НаКлиенте Процедура СтруктураВарианта_СнятьФлажки(Команда) - УстановитьФлажкиИспользованиеВоВсемДереве("СтруктураВарианта", Ложь); -КонецПроцедуры - -&НаКлиенте -Процедура ДобавитьТаблицуИлиДиаграмму(ТипЭлемента) - ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные; - - Результат = ТаблицыПолейВставить("СтруктураВарианта", ТипЭлемента, ТекущаяСтрока, Истина); - ЭлементКД = Результат.ЭлементКД; - - СтрокаТаблицы = Результат.СтрокаТаблицы; - СтрокаТаблицы.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЭлемента); - СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; - СтрокаТаблицы.ФлажокДоступен = Истина; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки(СтрокаТаблицы.Тип); - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СтруктураВарианта"); - ВложенныеСтроки = СтрокаТаблицы.ПолучитьЭлементы(); - - Если СтрокаТаблицы.Тип = "Диаграмма" Тогда - - ЭлементКД.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); - УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.СоединениеЗначенийПоСериям", ТипСоединенияЗначенийПоСериямДиаграммы.СоединениеКраев); - УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.ЛинииСоединенияЗначенийПоСериям"); - УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.ЦветСоединенияЗначенийПоСериям", WebЦвета.СеребристоСерый); - УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.РежимСглаживания", РежимСглаживанияДиаграммы.ГладкаяКривая); - УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.РежимПолупрозрачности", РежимПолупрозрачностиДиаграммы.Использовать); - - СтрокаТаблицы.Представление = НСтр("ru = 'Диаграмма'"); - - ВложенныйЭлементКД = ЭлементКД.Точки; - ВложеннаяСтрока = ВложенныеСтроки.Добавить(); - ВложеннаяСтрока.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ВложенныйЭлементКД)); - ВложеннаяСтрока.Подтип = "ДиаграммаТочки"; - ВложеннаяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ВложенныйЭлементКД); - ВложеннаяСтрока.ИндексКартинки = -1; - ВложеннаяСтрока.Представление = НСтр("ru = 'Точки'"); - - ВложенныйЭлементКД = ЭлементКД.Серии; - ВложеннаяСтрока = ВложенныеСтроки.Добавить(); - ВложеннаяСтрока.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ВложенныйЭлементКД)); - ВложеннаяСтрока.Подтип = "ДиаграммаСерии"; - ВложеннаяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ВложенныйЭлементКД); - ВложеннаяСтрока.ИндексКартинки = -1; - ВложеннаяСтрока.Представление = НСтр("ru = 'Серии'"); - - ИначеЕсли СтрокаТаблицы.Тип = "Таблица" Тогда - - СтрокаТаблицы.Представление = НСтр("ru = 'Таблица'"); - - ВложенныйЭлементКД = ЭлементКД.Строки; - ВложеннаяСтрока = ВложенныеСтроки.Добавить(); - ВложеннаяСтрока.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ВложенныйЭлементКД)); - ВложеннаяСтрока.Подтип = "ТаблицаСтроки"; - ВложеннаяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ВложенныйЭлементКД); - ВложеннаяСтрока.ИндексКартинки = -1; - ВложеннаяСтрока.Представление = НСтр("ru = 'Строки'"); - - ВложенныйЭлементКД = ЭлементКД.Колонки; - ВложеннаяСтрока = ВложенныеСтроки.Добавить(); - ВложеннаяСтрока.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ВложенныйЭлементКД)); - ВложеннаяСтрока.Подтип = "ТаблицаКолонки"; - ВложеннаяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ВложенныйЭлементКД); - ВложеннаяСтрока.ИндексКартинки = -1; - ВложеннаяСтрока.Представление = НСтр("ru = 'Колонки'"); - - КонецЕсли; - - Элементы.СтруктураВарианта.Развернуть(СтрокаТаблицы.ПолучитьИдентификатор(), Истина); - УстановитьМодифицированность(); + ИзменитьИспользование("СтруктураВарианта", Ложь); КонецПроцедуры &НаКлиенте @@ -1793,14 +1164,14 @@ Возврат; КонецЕсли; // Проверка источника. - СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - Если СтрокаТаблицы = Неопределено Тогда + Строка = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Если Строка = Неопределено Тогда СтандартнаяОбработка = Ложь; Возврат; КонецЕсли; - Если СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаТаблицы.Тип = "Настройки" Тогда + Если Строка.Тип = "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных" + Или Строка.Тип = "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных" + Или Строка.Тип = "НастройкиКомпоновкиДанных" Тогда СтандартнаяОбработка = Ложь; Возврат; КонецЕсли; @@ -1814,8 +1185,8 @@ Возврат; КонецЕсли; // Проверка источника. - СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - Если СтрокаТаблицы = Неопределено Тогда + Строка = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Если Строка = Неопределено Тогда ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; Возврат; КонецЕсли; @@ -1841,37 +1212,36 @@ КонецЕсли; Если ДопустимоТолькоНаличиеГруппировок - И СтрокаТаблицы.Тип <> "Группировка" - И СтрокаТаблицы.Тип <> "ГруппировкаТаблицы" - И СтрокаТаблицы.Тип <> "ГруппировкаДиаграммы" Тогда + И Строка.Тип <> "Группировка" + И Строка.Тип <> "ГруппировкаТаблицы" + И Строка.Тип <> "ГруппировкаДиаграммы" Тогда ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; Возврат; КонецЕсли; КоллекцииКоллекций = Новый Массив; - КоллекцииКоллекций.Добавить(СтрокаТаблицы.ПолучитьЭлементы()); + КоллекцииКоллекций.Добавить(Строка.ПолучитьЭлементы()); Количество = 1; Пока Количество > 0 Цикл Коллекция = КоллекцииКоллекций[0]; Количество = Количество - 1; КоллекцииКоллекций.Удалить(0); - Для Каждого ВложеннаяСтрокаТаблицы Из Коллекция Цикл - Если ВложеннаяСтрокаТаблицы = НовыйРодитель Тогда + Для Каждого ВложеннаяСтрока Из Коллекция Цикл + Если ВложеннаяСтрока = НовыйРодитель Тогда ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; Возврат; КонецЕсли; Если ДопустимоТолькоНаличиеГруппировок - И ВложеннаяСтрокаТаблицы.Тип <> "Группировка" - И ВложеннаяСтрокаТаблицы.Тип <> "ГруппировкаТаблицы" - И ВложеннаяСтрокаТаблицы.Тип <> "ГруппировкаДиаграммы" Тогда + И ВложеннаяСтрока.Тип <> "Группировка" + И ВложеннаяСтрока.Тип <> "ГруппировкаТаблицы" + И ВложеннаяСтрока.Тип <> "ГруппировкаДиаграммы" Тогда ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; Возврат; КонецЕсли; - КоллекцииКоллекций.Добавить(ВложеннаяСтрокаТаблицы.ПолучитьЭлементы()); + КоллекцииКоллекций.Добавить(ВложеннаяСтрока.ПолучитьЭлементы()); Количество = Количество + 1; КонецЦикла; КонецЦикла; - КонецПроцедуры &НаКлиенте @@ -1879,43 +1249,35 @@ // Все проверки пройдены. СтандартнаяОбработка = Ложь; - СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Строка = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); НовыйРодитель = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторЦели); - Результат = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, НовыйРодитель); + Результат = ПереместитьЭлементыСтруктурыВарианта(Строка, НовыйРодитель); Элементы.СтруктураВарианта.Развернуть(НовыйРодитель.ПолучитьИдентификатор(), Истина); - Элементы.СтруктураВарианта.ТекущаяСтрока = Результат.СтрокаТаблицы.ПолучитьИдентификатор(); + Элементы.СтруктураВарианта.ТекущаяСтрока = Результат.Строка.ПолучитьИдентификатор(); - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; + УстановитьМодифицированность(); КонецПроцедуры &НаКлиенте Процедура СтруктураВариантаИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("СтруктураВарианта"); + ИзменитьИспользованиеЭлементаНастройки("СтруктураВарианта"); КонецПроцедуры &НаКлиенте Процедура СтруктураВариантаЗаголовокПриИзменении(Элемент) - СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда + Строка = Элементы.СтруктураВарианта.ТекущиеДанные; + Если Строка = Неопределено Тогда Возврат; КонецЕсли; - СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы); - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; + ОбновитьЗаголовокЭлементаСтруктурыВарианта(Строка); + УстановитьМодифицированность(); КонецПроцедуры &НаКлиенте Процедура СтруктураВарианта_ПереместитьВверх(Команда) - Контекст = НовыйКонтекст("СтруктураВарианта", "Переместить"); Контекст.Вставить("Направление", -1); ОпределитьВыделенныеСтроки(Контекст); @@ -1925,12 +1287,10 @@ КонецЕсли; СдвинутьСтроки(Контекст); - КонецПроцедуры &НаКлиенте Процедура СтруктураВарианта_ПереместитьВниз(Команда) - Контекст = НовыйКонтекст("СтруктураВарианта", "Переместить"); Контекст.Вставить("Направление", 1); ОпределитьВыделенныеСтроки(Контекст); @@ -1940,7 +1300,6 @@ КонецЕсли; СдвинутьСтроки(Контекст); - КонецПроцедуры &НаКлиенте @@ -1954,11 +1313,7 @@ &НаКлиенте Процедура СтруктураВариантаПередУдалением(Элемент, Отказ) - Если РасширенныйРежим = 0 Или Не Элементы.СтруктураВарианта_Удалить.Доступность Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); + УдалитьСтроки(Элемент, Отказ); КонецПроцедуры &НаКлиенте @@ -2039,19 +1394,19 @@ КонецЦикла; // 1. Переместить нижнюю строку на уровень с верхней. - Результат1 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВверх, СтрокаТаблицыВниз.ПолучитьРодителя(), СтрокаТаблицыВниз); - СтрокаТаблицыВверх = Результат1.СтрокаТаблицы; + Результат = ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицыВверх, СтрокаТаблицыВниз.ПолучитьРодителя(), СтрокаТаблицыВниз); + СтрокаТаблицыВверх = Результат.Строка; // 2. Запомнить какие строки нужно переместить. СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы(); // 3. Обмен строками. Для Каждого СтрокаТаблицы Из СтрокиВверх Цикл - Результат2 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВниз); + ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицы, СтрокаТаблицыВниз); КонецЦикла; Для Каждого СтрокаТаблицыИдентификатор Из МассивИдентификаторовСтрокВниз Цикл СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(СтрокаТаблицыИдентификатор); - Результат3 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВверх); + ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицы, СтрокаТаблицыВверх); КонецЦикла; // 4. Переместить верхнюю строку в нижнюю. @@ -2061,8 +1416,8 @@ Иначе ПередЧемВставить = СтрокиВверх[Индекс]; КонецЕсли; - Результат4 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВниз, СтрокаТаблицыВверх, ПередЧемВставить); - СтрокаТаблицыВниз = Результат4.СтрокаТаблицы; + Результат = ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицыВниз, СтрокаТаблицыВверх, ПередЧемВставить); + СтрокаТаблицыВниз = Результат.Строка; // Бантики. Если ПараметрыВыполнения.Режим = "ВнизИВправо" Тогда @@ -2099,23 +1454,24 @@ &НаКлиенте Процедура СоставГруппировкиИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("СоставГруппировки"); + ИзменитьИспользованиеЭлементаНастройки("СоставГруппировки"); КонецПроцедуры &НаКлиенте -Процедура СоставГруппировкиВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) +Процедура СоставГруппировкиВыбор(Элемент, ИдентификаторСтроки, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - СтрокаТаблицы = Элементы.СоставГруппировки.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда + + Строка = Элементы.СоставГруппировки.ТекущиеДанные; + Если Строка = Неопределено Тогда Возврат; КонецЕсли; - ИмяКолонки = Поле.Имя; - Если ИмяКолонки = "СоставГруппировкиПредставление" Тогда - Если СтрокаТаблицы.ТипНастройки = "ПолеГруппировки" Тогда - ТаблицыПолейИзменить("СоставГруппировки", СтрокаИдентификатор, СтрокаТаблицы); + + Если Поле = Элементы.СоставГруппировкиПоле Тогда + Если ТипЗнч(Строка.Поле) = Тип("ПолеКомпоновкиДанных") Тогда + СоставГруппировкиВыбратьПоле(ИдентификаторСтроки, Строка); КонецЕсли; - ИначеЕсли ИмяКолонки = "СоставГруппировкиТипГруппировки" - Или ИмяКолонки = "СоставГруппировкиТипДополнения" Тогда + ИначеЕсли Поле = Элементы.СоставГруппировкиТипГруппировки + Или Поле = Элементы.СоставГруппировкиТипДополнения Тогда СтандартнаяОбработка = Истина; КонецЕсли; КонецПроцедуры @@ -2123,92 +1479,54 @@ &НаКлиенте Процедура СоставГруппировкиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) Отказ = Истина; - Обработчик = Новый ОписаниеОповещения("СоставГруппировкиПослеВыбораПоля", ЭтотОбъект); - ТаблицыПолейПоказатьВыборПоля("СоставГруппировки", Обработчик); + ВыбратьПоле("СоставГруппировки", Новый ОписаниеОповещения("СоставГруппировкиПослеВыбораПоля", ЭтотОбъект)); КонецПроцедуры &НаКлиенте -Процедура СоставГруппировкиПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт - Если ДоступноеПолеКД = Неопределено Тогда +Процедура СоставГруппировкиПередУдалением(Элемент, Отказ) + УдалитьСтроки(Элемент, Отказ); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиТипГруппировкиПриИзменении(Элемент) + Строка = Элементы.СоставГруппировки.ТекущиеДанные; + Если Строка = Неопределено Тогда Возврат; КонецЕсли; - Результат = ТаблицыПолейВставить("СоставГруппировки", Тип("ПолеГруппировкиКомпоновкиДанных"), 0, Ложь); + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек); - ЭлементКД = Результат.ЭлементКД; - ЭлементКД.Использование = Истина; - ЭлементКД.Поле = ДоступноеПолеКД.Поле; - - СтрокаТаблицы = Результат.СтрокаТаблицы; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; - СтрокаТаблицы.ТипГруппировки = ЭлементКД.ТипГруппировки; - СтрокаТаблицы.ТипДополнения = ЭлементКД.ТипДополнения; - СтрокаТаблицы.ПолеКД = ЭлементКД.Поле; - - Если ДоступноеПолеКД.Ресурс Тогда - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Ресурс"); - ИначеЕсли ДоступноеПолеКД.Таблица Тогда - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Таблица"); - ИначеЕсли ДоступноеПолеКД.Папка Тогда - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Группа"); - Иначе - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); - КонецЕсли; - - ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(ДоступноеПолеКД.ТипЗначения, Ложь); - Если ИнформацияОТипах.СодержитТипПериод Или ИнформацияОТипах.СодержитТипДата Тогда - СтрокаТаблицы.ПоказыватьТипДополнения = Истина; - КонецЕсли; - - ПослеИзмененияФлажкаИспользование("СоставГруппировки", СтрокаТаблицы, ЭлементКД); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЭлементНастройки.ТипГруппировки = Строка.ТипГруппировки; УстановитьМодифицированность(); КонецПроцедуры -&НаКлиенте -Процедура СоставГруппировкиТипГруппировкиПриИзменении(Элемент) - ТаблицыПолейИзменитьТипГруппировки("СоставГруппировки"); -КонецПроцедуры - &НаКлиенте Процедура СоставГруппировкиТипДополненияПриИзменении(Элемент) - ТаблицыПолейИзменитьТипГруппировки("СоставГруппировки"); -КонецПроцедуры - -&НаКлиенте -Процедура СоставГруппировкиПередУдалением(Элемент, Отказ) - ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); + Строка = Элементы.СоставГруппировки.ТекущиеДанные; + Если Строка = Неопределено Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЭлементНастройки.ТипДополнения = Строка.ТипДополнения; + + УстановитьМодифицированность(); КонецПроцедуры &НаКлиенте Процедура СоставГруппировки_ПереместитьВверх(Команда) - - Контекст = НовыйКонтекст("СоставГруппировки", "Переместить"); - Контекст.Вставить("Направление", -1); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СдвинутьСтроки(Контекст); - + СдвинутьПолеГруппировки(); КонецПроцедуры &НаКлиенте Процедура СоставГруппировки_ПереместитьВниз(Команда) - - Контекст = НовыйКонтекст("СоставГруппировки", "Переместить"); - Контекст.Вставить("Направление", 1); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СдвинутьСтроки(Контекст); - + СдвинутьПолеГруппировки(Ложь); КонецПроцедуры #КонецОбласти @@ -2218,84 +1536,84 @@ &НаКлиенте Процедура ОформлениеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) Отказ = Истина; - Если РасширенныйРежим = 0 Тогда - Возврат; + + Строка = КорневаяСтрокаПоУмолчанию("Оформление"); + Если Строка <> Неопределено Тогда + Элементы.Оформление.ТекущаяСтрока = Строка.ПолучитьИдентификатор(); КонецЕсли; - ОформлениеИзменитьЭлемент("Оформление", Неопределено, Неопределено); + ОформлениеИзменитьЭлемент(); КонецПроцедуры &НаКлиенте -Процедура ОформлениеВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) +Процедура ОформлениеВыбор(Элемент, ИдентификаторСтроки, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если РасширенныйРежим <> 1 Тогда - Возврат; - КонецЕсли; - СтрокаТаблицы = Элементы.Оформление.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда + + Строка = Элементы.Оформление.ТекущиеДанные; + Если Строка = Неопределено Или Строка.ЭтоРаздел Тогда Возврат; КонецЕсли; - ИмяКолонки = Поле.Имя; - Если ИмяКолонки = "ОформлениеЗаголовок" Тогда // Изменение порядка. - - ОформлениеИзменитьЭлемент("Оформление", СтрокаИдентификатор, СтрокаТаблицы); - - ИначеЕсли ИмяКолонки = "ОформлениеИндексКартинкиДоступа" Тогда // Изменение быстрого доступа к отбору. - - ТаблицыПолейИзменитьУровеньДоступа("Оформление", СтрокаИдентификатор, Истина, Ложь); - + Если Строка.ЭтоПараметрВывода Тогда + Если Строка(Строка.Идентификатор) = "TITLE" + И Поле = Элементы.ОформлениеЗаголовок Тогда + + Обработчик = Новый ОписаниеОповещения("ОформлениеВводЗаголовкаЗавершение", ЭтотОбъект, ИдентификаторСтроки); + ПоказатьВводСтроки(Обработчик, Строка.Значение, "Заголовок",, Истина); + КонецЕсли; + ИначеЕсли Поле = Элементы.ОформлениеЗаголовок Тогда // Изменение порядка. + ОформлениеИзменитьЭлемент(ИдентификаторСтроки, Строка); + ИначеЕсли Поле = Элементы.ОформлениеИндексКартинкиДоступа Тогда // Изменение быстрого доступа к отбору. + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "УсловноеОформление", ИдентификаторЭлементаСтруктурыНастроек); + ВыбратьРежимОтображения(СвойствоЭлементаСтруктуры, "Оформление", ИдентификаторСтроки, Истина, Ложь); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОформлениеПередУдалением(Элемент, Отказ) - ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); + УдалитьСтроки(Элемент, Отказ); КонецПроцедуры &НаКлиенте Процедура ОформлениеИспользованиеПриИзменении(Элемент) - ТаблицыПолейИзменитьИспользование("Оформление"); + ИзменитьИспользованиеЭлементаНастройки("Оформление"); КонецПроцедуры &НаКлиенте Процедура Оформление_ПереместитьВверх(Команда) - - Контекст = НовыйКонтекст("Оформление", "Переместить"); - Контекст.Вставить("Направление", -1); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СдвинутьСтроки(Контекст); - + СдвинутьОформление(); КонецПроцедуры &НаКлиенте Процедура Оформление_ПереместитьВниз(Команда) - - Контекст = НовыйКонтекст("Оформление", "Переместить"); - Контекст.Вставить("Направление", 1); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - СдвинутьСтроки(Контекст); - + СдвинутьОформление(Ложь); КонецПроцедуры &НаКлиенте Процедура Оформление_УстановитьФлажки(Команда) - УстановитьФлажкиИспользованиеВоВсемДереве("Оформление", Истина); + ИзменитьИспользованиеПредопределенныхПараметровВывода(); + ИзменитьИспользование("Оформление"); КонецПроцедуры &НаКлиенте Процедура Оформление_СнятьФлажки(Команда) - УстановитьФлажкиИспользованиеВоВсемДереве("Оформление", Ложь); + ИзменитьИспользованиеПредопределенныхПараметровВывода(Ложь); + ИзменитьИспользование("Оформление", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьКолонтитулы(Команда) + Перем Настройки; + + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("НастройкиКолонтитулов", Настройки); + + ОткрытьФорму("ОбщаяФорма.НастройкаКолонтитулов", + Новый Структура("Настройки", Настройки), + ЭтотОбъект, + УникальныйИдентификатор,,, + Новый ОписаниеОповещения("ЗапомнитьНастройкиКолонтитулов", ЭтотОбъект), + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры #КонецОбласти @@ -2312,124 +1630,3025 @@ ЗаписатьИЗакрыть(Ложь); КонецПроцедуры -&НаКлиенте -Процедура НастройкиПоУмолчанию(Команда) - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("ИмяСобытия", "НастройкиПоУмолчанию"); - ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); - ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); - ЗаполнитьБыстрыеНастройкиКлиент(ПараметрыЗаполнения); -КонецПроцедуры - &НаКлиенте Процедура ИзменитьУсловияОтборов(Команда) ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТипФормыВладельца", ТипФормыОтчета); ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); Обработчик = Новый ОписаниеОповещения("ИзменитьУсловияОтборовЗавершение", ЭтотОбъект); - ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик); + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета", ПараметрыФормы, ЭтотОбъект, Истина,,, Обработчик); КонецПроцедуры &НаКлиенте -Процедура ИзменитьУсловияОтборовЗавершение(ВыборПользователя, Контекст) Экспорт - Если ВыборПользователя = Неопределено - Или ВыборПользователя = КодВозвратаДиалога.Отмена - Или ВыборПользователя.Количество() = 0 Тогда +Процедура ИзменитьУсловияОтборовЗавершение(УсловияОтборов, Контекст) Экспорт + Если УсловияОтборов = Неопределено + Или УсловияОтборов = КодВозвратаДиалога.Отмена + Или УсловияОтборов.Количество() = 0 Тогда Возврат; КонецЕсли; - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьУсловияОтборов"); - ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); - ПараметрыЗаполнения.Вставить("УсловияОтборов", ВыборПользователя); - ЗаполнитьБыстрыеНастройкиКлиент(ПараметрыЗаполнения); + + ПараметрыОбновления = Новый Структура; + ПараметрыОбновления.Вставить("ИмяСобытия", "ИзменитьУсловияОтборов"); + ПараметрыОбновления.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); + ПараметрыОбновления.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + ПараметрыОбновления.Вставить("УсловияОтборов", УсловияОтборов); + + ОбновитьФорму(ПараметрыОбновления); КонецПроцедуры &НаКлиенте Процедура ОчиститьНастройкиОтНесуществующихПолей(Команда) - РасширенныйРежим = 1; - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("ИмяСобытия", "ОчиститьНастройкиОтНесуществующихПолей"); - ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Истина); - ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); - ПараметрыЗаполнения.Вставить("ОчиститьНастройкиОтНесуществующихПолей", Истина); - ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); - ЗаполнитьБыстрыеНастройкиКлиент(ПараметрыЗаполнения); + УдалитьПомеченныеНаУдалениеПоля(); + + ПараметрыОбновления = Новый Структура; + ПараметрыОбновления.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); + + ОбновитьФорму(ПараметрыОбновления); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Подключаемые команды &НаКлиенте -Процедура Подключаемый_ИзменитьВидСравнения(Команда) - ИдентификаторЭлемента = Прав(Команда.Имя, 32); - Контекст = Новый Структура; - Контекст.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - Обработчик = Новый ОписаниеОповещения("ПослеВыбораВидаСравнения", ЭтотОбъект, Контекст); - ОтчетыКлиент.ИзменитьВидСравнения(ЭтотОбъект, ИдентификаторЭлемента, Обработчик); +Процедура Подключаемый_ВыбратьПериод(Команда) + ОтчетыКлиент.ВыбратьПериод(ЭтотОбъект, Команда.Имя); КонецПроцедуры &НаКлиенте -Процедура ПослеВыбораВидаСравнения(ВидСравнения, Контекст) Экспорт - Если ВидСравнения <> Неопределено Тогда - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьВидСравнения"); - ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); - ЗаполнитьБыстрыеНастройкиКлиент(ПараметрыЗаполнения); - КонецЕсли; +Процедура Подключаемый_Список_Подбор(Команда) + ПутьКСписку = СтрЗаменить(Команда.Имя, "Подбор", ""); + + ПараметрыЗаполнения = ПараметрыЗаполненияСписка(); + ПараметрыЗаполнения.ПутьКСписку = ПутьКСписку; + ПараметрыЗаполнения.Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку]; + ПараметрыЗаполнения.Владелец = Элементы[ПутьКСписку]; + + НачатьЗаполнениеСписка(Элементы[Команда.Имя], ПараметрыЗаполнения); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_Список_ВставитьИзБуфера(Команда) + ПутьКСписку = СтрЗаменить(Команда.Имя, "ВставитьИзБуфера", ""); + + Список = ЭтотОбъект[ПутьКСписку]; + ПолеСписка = Элементы[ПутьКСписку]; + + Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку]; + Сведения = ОтчетыКлиент.СведенияОЭлементеНастройки(Отчет.КомпоновщикНастроек, Индекс); + ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; + + ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора(Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент); + Список.ТипЗначения = ОтчетыКлиент.ТипЗначенияОграниченныйСвязьюПоТипу( + Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент, Сведения.Описание); + + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("ОписаниеТипов", ОписаниеТиповБезПримитивных(Список.ТипЗначения)); + ПараметрыПоиска.Вставить("ПредставлениеПоля", ПолеСписка.Заголовок); + ПараметрыПоиска.Вставить("Сценарий", "ВставкаИзБуфераОбмена"); + ПараметрыПоиска.Вставить("ПараметрыВыбора", ПараметрыВыбора); + + Обработчик = Новый ОписаниеОповещения("ВставитьИзБуфераЗавершение", ЭтотОбъект, ПутьКСписку); + + МодульЗагрузкаДанныхИзФайлаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗагрузкаДанныхИзФайлаКлиент"); + МодульЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗаполненияСсылок(ПараметрыПоиска, Обработчик); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область ПоляГруппировки -&НаКлиенте -Процедура ОтборыПриИзмененииТекущейСтроки() Экспорт +// Чтение настроек. + +&НаСервере +Процедура ОбновитьПоляГруппировки() + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек); - СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - ОтборыПриИзмененииТекущейСтрокиНаСервере(Ложь, Ложь); + Если СвойствоЭлементаСтруктуры = Неопределено Тогда Возврат; КонецЕсли; - ЭтоОтбор = Не СтрокаТаблицы.ЭтоПараметр И Не СтрокаТаблицы.ЭтоРаздел; - ЭтоПараметрИлиОтбор = Не СтрокаТаблицы.ЭтоРаздел; + Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл + Строка = СоставГруппировки.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки); + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + + Если ТипЗнч(ЭлементНастройки) = Тип("АвтоПолеГруппировкиКомпоновкиДанных") Тогда + Строка.Заголовок = НСтр("ru = 'Авто (по всем полям)'"); + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент", "Предопределенный"); + Продолжить; + КонецЕсли; + + ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПоляПолейГруппировок.НайтиПоле(ЭлементНастройки.Поле); + Если ОписаниеНастройки = Неопределено Тогда + УстановитьПометкуУдаления("СоставГруппировки", Строка); + Продолжить; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки); + Строка.ПоказыватьТипДополнения = ОписаниеНастройки.ТипЗначения.СодержитТип(Тип("Дата")); + + Если ОписаниеНастройки.Ресурс Тогда + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Ресурс"); + ИначеЕсли ОписаниеНастройки.Таблица Тогда + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Таблица"); + ИначеЕсли ОписаниеНастройки.Папка Тогда + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Группа"); + Иначе + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// Добавление, изменение элементов. + +&НаКлиенте +Процедура СоставГруппировкиВыбратьПоле(ИдентификаторСтроки, Строка) + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); - ОтборыПриИзмененииТекущейСтрокиНаСервере(ЭтоОтбор, ЭтоПараметрИлиОтбор); - - Если Не СтрокаТаблицы.ЭтоРаздел И Не СтрокаТаблицы.ЭтоГруппа Тогда - Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы( - СтрокаТаблицы.Условие, - СтрокаТаблицы.ВыборГруппИЭлементов); + Обработчик = Новый ОписаниеОповещения("СоставГруппировкиПослеВыбораПоля", ЭтотОбъект, ИдентификаторСтроки); + ВыбратьПоле("СоставГруппировки", Обработчик, ЭлементНастройки.Поле); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиПослеВыбораПоля(ОписаниеНастройки, ИдентификаторСтроки) Экспорт + Если ОписаниеНастройки = Неопределено Тогда + Возврат; КонецЕсли; + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек); + + Если ИдентификаторСтроки = Неопределено Тогда + Строка = СоставГруппировки.ПолучитьЭлементы().Добавить(); + ЭлементНастройки = СвойствоЭлементаСтруктуры.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + Иначе + Строка = СоставГруппировки.НайтиПоИдентификатору(ИдентификаторСтроки); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + КонецЕсли; + + ЭлементНастройки.Использование = Истина; + ЭлементНастройки.Поле = ОписаниеНастройки.Поле; + + ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки); + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + + ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки); + + Строка.ПоказыватьТипДополнения = ОписаниеНастройки.ТипЗначения.СодержитТип(Тип("Дата")); + + Если ОписаниеНастройки.Ресурс Тогда + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Ресурс"); + ИначеЕсли ОписаниеНастройки.Таблица Тогда + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Таблица"); + ИначеЕсли ОписаниеНастройки.Папка Тогда + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Группа"); + Иначе + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); + КонецЕсли; + + ИзменитьИспользованиеСвязанныхЭлементовНастроек("СоставГруппировки", Строка, ЭлементНастройки); + + Элементы.СоставГруппировки.ТекущаяСтрока = Строка.ПолучитьИдентификатор(); + + УстановитьМодифицированность(); +КонецПроцедуры + +// Сдвиг элементов. + +&НаКлиенте +Процедура СдвинутьПолеГруппировки(ВНачало = Истина) + ИдентификаторыСтрок = Элементы.СоставГруппировки.ВыделенныеСтроки; + Если ИдентификаторыСтрок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек); + + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + Строка = СоставГруппировки.НайтиПоИдентификатору(ИдентификаторСтроки); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы; + Строки = СоставГруппировки.ПолучитьЭлементы(); + + Индекс = ЭлементыНастроек.Индекс(ЭлементНастройки); + Граница = ЭлементыНастроек.Количество() - 1; + + Если ВНачало Тогда // Сдвиг в начало коллекции. + Если Индекс = 0 Тогда + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, Граница); + Строки.Сдвинуть(Индекс, Граница); + Иначе + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -1); + Строки.Сдвинуть(Индекс, -1); + КонецЕсли; + Иначе // Сдвиг в конец коллекции. + Если Индекс = Граница Тогда + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -Граница); + Строки.Сдвинуть(Индекс, -Граница); + Иначе + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, 1); + Строки.Сдвинуть(Индекс, 1); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + УстановитьМодифицированность(); +КонецПроцедуры + +#КонецОбласти + +#Область ПараметрыДанныхИОтборы + +// Чтение настроек. + +&НаСервере +Процедура ОбновитьПараметрыДанных() + Если РасширенныйРежим = 0 + Или РежимИзмененияЭлементаСтруктурыНастроек Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "ПараметрыДанных", ИдентификаторЭлементаСтруктурыНастроек); + + Раздел = Отборы.ПолучитьЭлементы().Добавить(); + Раздел.ЭтоРаздел = Истина; + Раздел.Заголовок = НСтр("ru = 'Параметры'"); + Раздел.Картинка = ОтчетыКлиентСервер.ИндексКартинки("ПараметрыДанных"); + Раздел.Идентификатор = "ПараметрыДанных"; + ЭлементыРаздела = Раздел.ПолучитьЭлементы(); + + Если СвойствоЭлементаСтруктуры = Неопределено + Или СвойствоЭлементаСтруктуры.Элементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Схема = ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы); + + Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл + НайденныйПараметр = Схема.Параметры.Найти(ЭлементНастройки.Параметр); + Если НайденныйПараметр <> Неопределено И НайденныйПараметр.ОграничениеИспользования Тогда + Продолжить; + КонецЕсли; + + Строка = ЭлементыРаздела.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки); + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Строка.КартинкаРежимаОтображения = КартинкаРежимаОтображенияЭлементаНастройки(ЭлементНастройки); + Строка.Картинка = -1; + Строка.ЭтоПараметр = Истина; + Строка.ЭтоПериод = (ТипЗнч(Строка.Значение) = Тип("СтандартныйПериод")); + + ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПараметры.НайтиПараметр(ЭлементНастройки.Параметр); + Если ОписаниеНастройки <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки,, "Использование"); + Строка.ОтображатьИспользование = (ОписаниеНастройки.Использование <> ИспользованиеПараметраКомпоновкиДанных.Всегда); + + Если ОписаниеНастройки.ДоступныеЗначения <> Неопределено Тогда + ЭлементСписка = ОписаниеНастройки.ДоступныеЗначения.НайтиПоЗначению(ЭлементНастройки.Значение); + Если ЭлементСписка <> Неопределено Тогда + Строка.ПредставлениеЗначения = ЭлементСписка.Представление; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Строка.ПредставлениеПользовательскойНастройки) Тогда + Строка.ПредставлениеПользовательскойНастройки = Строка.Заголовок; + КонецЕсли; + Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки); + КонецЦикла; КонецПроцедуры &НаСервере -Процедура ОтборыПриИзмененииТекущейСтрокиНаСервере(ЭтоОтбор, ЭтоПараметрИлиОтбор) +Процедура ОбновитьОтборы(Строки = Неопределено, ЭлементыНастроек = Неопределено) + Если РасширенныйРежим = 0 Тогда + Возврат; + КонецЕсли; - Элементы.Отборы_Удалить.Доступность = ЭтоОтбор; + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + + Если СвойствоЭлементаСтруктуры = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Строки = Неопределено Тогда + Раздел = Отборы.ПолучитьЭлементы().Добавить(); + Раздел.ЭтоРаздел = Истина; + Раздел.Заголовок = НСтр("ru = 'Отборы'"); + Раздел.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Отборы"); + Раздел.Идентификатор = "Отборы"; + Строки = Раздел.ПолучитьЭлементы(); + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + + Если ЭлементыНастроек = Неопределено Тогда + ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы; + КонецЕсли; + + Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл + Строка = Строки.Добавить(); + + Если Не УстановитьДанныеСтрокиОтборов(Строка, СвойствоЭлементаСтруктуры, ЭлементНастройки) Тогда + УстановитьПометкуУдаления("Отборы", Строка); + КонецЕсли; + + Если ТипЗнч(ЭлементНастройки) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + ОбновитьОтборы(Строка.ПолучитьЭлементы(), ЭлементНастройки.Элементы); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция УстановитьДанныеСтрокиОтборов(Строка, СвойствоЭлементаСтруктуры, ЭлементНастройки, ОписаниеНастройки = Неопределено) + УстановленыУспешно = Истина; + + ЭтоГруппа = (ТипЗнч(ЭлементНастройки) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + + Если ОписаниеНастройки = Неопределено Тогда + Если Не ЭтоГруппа Тогда + ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПоляОтбора.НайтиПоле(ЭлементНастройки.ЛевоеЗначение); + УстановленыУспешно = (ОписаниеНастройки <> Неопределено); + КонецЕсли; + + Если ОписаниеНастройки = Неопределено Тогда + ОписаниеНастройки = Новый Структура("ДоступныеЗначения, ДоступныеВидыСравнения"); + ОписаниеНастройки.Вставить("ТипЗначения", Новый ОписаниеТипов("Неопределено")); + КонецЕсли; + КонецЕсли; + + ДоступныеВидыСравнения = ОписаниеНастройки.ДоступныеВидыСравнения; + Если ДоступныеВидыСравнения <> Неопределено + И ДоступныеВидыСравнения.Количество() > 0 + И ДоступныеВидыСравнения.НайтиПоЗначению(ЭлементНастройки.ВидСравнения) = Неопределено Тогда + ЭлементНастройки.ВидСравнения = ДоступныеВидыСравнения[0].Значение; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки); + ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки); + + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Строка.ОтображатьИспользование = Истина; + Строка.ЭтоПериод = (ТипЗнч(Строка.ПравоеЗначение) = Тип("СтандартныйПериод")); + Строка.ЭтоУникальныйИдентификатор = (ТипЗнч(Строка.ПравоеЗначение) = Тип("УникальныйИдентификатор")); + + Строка.ЭтоГруппа = ЭтоГруппа; + Строка.КартинкаРежимаОтображения = КартинкаРежимаОтображенияЭлементаНастройки(ЭлементНастройки); + Строка.Картинка = -1; + + Если ЭтоГруппа Тогда + Строка.Заголовок = Строка.ТипГруппы; + Иначе + ОтчетыКлиентСервер.ПривестиЗначениеКТипу(ЭлементНастройки.ПравоеЗначение, ОписаниеНастройки.ТипЗначения); + КонецЕсли; + + Если Не ЗначениеЗаполнено(Строка.ПредставлениеПользовательскойНастройки) Тогда + Если ЗначениеЗаполнено(ЭлементНастройки.Представление) Тогда + Строка.ПредставлениеПользовательскойНастройки = ЭлементНастройки.Представление; + Иначе + Строка.ПредставлениеПользовательскойНастройки = Строка.Заголовок; + КонецЕсли; + КонецЕсли; + Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки); + + ПривестиЗначениеКВидуСравнения(Строка, ЭлементНастройки); + УстановитьПредставлениеЗначения(Строка); + + Возврат УстановленыУспешно; +КонецФункции + +// Добавление, изменение элементов. + +&НаКлиенте +Процедура ОтборыВыбратьГруппу(ИдентификаторСтроки) + Обработчик = Новый ОписаниеОповещения("ОтборыПослеВыбораГруппы", ЭтотОбъект, ИдентификаторСтроки); + + Список = Новый СписокЗначений; + Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); + Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли); + Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе); + + ПоказатьВыборИзМеню(Обработчик, Список); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПослеВыбораГруппы(ТипГруппы, ИдентификаторСтроки) Экспорт + Если ТипГруппы = Неопределено Тогда + Возврат; + КонецЕсли; + + Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки); + Строка.ТипГруппы = ТипГруппы.Значение; + Строка.Заголовок = Строка.ТипГруппы; + Строка.ПредставлениеПользовательскойНастройки = Строка.ТипГруппы; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЭлементНастройки.ТипГруппы = ТипГруппы.Значение; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыВыбратьПоле(ИдентификаторСтроки, Строка) + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + Обработчик = Новый ОписаниеОповещения("ОтборыПослеВыбораПоля", ЭтотОбъект, ИдентификаторСтроки); + ВыбратьПоле("Отборы", Обработчик, ЭлементНастройки.ЛевоеЗначение); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПослеВыбораПоля(ОписаниеНастройки, ИдентификаторСтроки) Экспорт + Если ОписаниеНастройки = Неопределено Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + + Если ИдентификаторСтроки = Неопределено Тогда + Родитель = Элементы.Отборы.ТекущиеДанные; + Если Не Родитель.ЭтоРаздел И Не Родитель.ЭтоГруппа Тогда + Родитель = Родитель.ПолучитьРодителя(); + КонецЕсли; + Строка = Родитель.ПолучитьЭлементы().Добавить(); + + РодительЭлементаНастройки = СвойствоЭлементаСтруктуры; + Если ТипЗнч(Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + РодительЭлементаНастройки = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(Родитель.Идентификатор); + КонецЕсли; + ЭлементНастройки = РодительЭлементаНастройки.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Иначе + Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + КонецЕсли; + + ЭлементНастройки.Использование = Истина; + ЭлементНастройки.ЛевоеЗначение = ОписаниеНастройки.Поле; + ЭлементНастройки.ПравоеЗначение = ОписаниеНастройки.Тип.ПривестиЗначение(); + ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; + ЭлементНастройки.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; + ЭлементНастройки.ПредставлениеПользовательскойНастройки = ""; + + ДоступныеВидыСравнения = ОписаниеНастройки.ДоступныеВидыСравнения; + Если ДоступныеВидыСравнения <> Неопределено + И ДоступныеВидыСравнения.Количество() > 0 + И ДоступныеВидыСравнения.НайтиПоЗначению(ЭлементНастройки.ВидСравнения) = Неопределено Тогда + ЭлементНастройки.ВидСравнения = ДоступныеВидыСравнения[0].Значение; + КонецЕсли; + + УстановитьДанныеСтрокиОтборов(Строка, СвойствоЭлементаСтруктуры, ЭлементНастройки, ОписаниеНастройки); + + Раздел = КорневаяСтрокаПоУмолчанию("Отборы"); + Элементы.Отборы.Развернуть(Раздел.ПолучитьИдентификатор(), Истина); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПриИзмененииТекущейСтроки() + Строка = Элементы.Отборы.ТекущиеДанные; + Если Строка = Неопределено Тогда + ОтборыПриИзмененииТекущейСтрокиНаСервере(); + Возврат; + КонецЕсли; + + ОтборыПриИзмененииТекущейСтрокиНаСервере(Не Строка.ЭтоПараметр И Не Строка.ЭтоРаздел, Строка.ЭтоРаздел); + + Если Строка.ЭтоРаздел Или Строка.ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + Элементы.ОтборыВидСравнения.РежимВыбораИзСписка = (Строка.ДоступныеВидыСравнения <> Неопределено); + Если Строка.ДоступныеВидыСравнения <> Неопределено Тогда + Список = Элементы.ОтборыВидСравнения.СписокВыбора; + Список.Очистить(); + + Для Каждого ВидыСравнения Из Строка.ДоступныеВидыСравнения Цикл + ЗаполнитьЗначенияСвойств(Список.Добавить(), ВидыСравнения); + КонецЦикла; + КонецЕсли; + + Если Строка.ЭтоПараметр Тогда + Условие = ВидСравненияКомпоновкиДанных.Равно; + Если Строка.ДоступенСписокЗначений Тогда + Условие = ВидСравненияКомпоновкиДанных.ВСписке; + КонецЕсли; + Иначе + Условие = Строка.ВидСравнения; + КонецЕсли; + + ПолеЗначения = ?(Строка.ЭтоПараметр, Элементы.ОтборыЗначение, Элементы.ОтборыПравоеЗначение); + ПолеЗначения.ДоступныеТипы = Строка.ТипЗначения; + ПолеЗначения.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы(Строка.ВыборГруппИЭлементов, Условие); + + Список = ПолеЗначения.СписокВыбора; + Список.Очистить(); + Если Строка.ДоступныеЗначения <> Неопределено Тогда + Для Каждого ДоступноеЗначение Из Строка.ДоступныеЗначения Цикл + ЗаполнитьЗначенияСвойств(Список.Добавить(), ДоступноеЗначение); + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ОтборыПриИзмененииТекущейСтрокиНаСервере(ЭтоОтбор = Ложь, ЭтоРаздел = Ложь) + Элементы.Отборы_Удалить.Доступность = ЭтоОтбор; Элементы.Отборы_Удалить1.Доступность = ЭтоОтбор; - Элементы.Отборы_Сгруппировать.Доступность = ЭтоОтбор; + Элементы.Отборы_Сгруппировать.Доступность = ЭтоОтбор; Элементы.Отборы_Сгруппировать1.Доступность = ЭтоОтбор; - Элементы.Отборы_Разгруппировать.Доступность = ЭтоОтбор; + Элементы.Отборы_Разгруппировать.Доступность = ЭтоОтбор; Элементы.Отборы_Разгруппировать1.Доступность = ЭтоОтбор; - Элементы.Отборы_ПереместитьВверх.Доступность = ЭтоОтбор; + Элементы.Отборы_ПереместитьВверх.Доступность = ЭтоОтбор; Элементы.Отборы_ПереместитьВверх1.Доступность = ЭтоОтбор; - Элементы.Отборы_ПереместитьВниз.Доступность = ЭтоОтбор; + Элементы.Отборы_ПереместитьВниз.Доступность = ЭтоОтбор; Элементы.Отборы_ПереместитьВниз1.Доступность = ЭтоОтбор; - Элементы.КомандыОтборов_Показывать.Доступность = ЭтоПараметрИлиОтбор; - Элементы.КомандыОтборов_Показывать1.Доступность = ЭтоПараметрИлиОтбор; - Элементы.Отборы_ПоказыватьТолькоФлажокВШапкеОтчета.Доступность = ЭтоОтбор; + Элементы.КомандыОтборов_Показывать.Доступность = Не ЭтоРаздел; + Элементы.КомандыОтборов_Показывать1.Доступность = Не ЭтоРаздел; + Элементы.Отборы_ПоказыватьТолькоФлажокВШапкеОтчета.Доступность = ЭтоОтбор; Элементы.Отборы_ПоказыватьТолькоФлажокВШапкеОтчета1.Доступность = ЭтоОтбор; - Элементы.Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета.Доступность = ЭтоОтбор; + Элементы.Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета.Доступность = ЭтоОтбор; Элементы.Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета1.Доступность = ЭтоОтбор; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыУстановитьРежимОтображения(РежимОтображения) + Строка = Элементы.Отборы.ТекущиеДанные; + Если Строка = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Строка.ЭтоПараметр Тогда + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "ПараметрыДанных"); + Иначе + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + КонецЕсли; + + ВыбратьРежимОтображения(СвойствоЭлементаСтруктуры, "Отборы", Строка.ПолучитьИдентификатор(), Истина, Строка.ЭтоПараметр, РежимОтображения); +КонецПроцедуры + +// Изменение группировки элементов. + +&НаКлиенте +Функция ПараметрыГруппировкиОтборов() + Строки = Новый Массив; + Родители = Новый Массив; + + ИдентификаторыСтрок = Элементы.Отборы.ВыделенныеСтроки; + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки); + Родитель = Строка.ПолучитьРодителя(); + + Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0 + Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + Строки.Добавить(Строка); + Родители.Добавить(Родитель); + КонецЦикла; + + Если Строки.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите элементы.'")); + Возврат Неопределено; + КонецЕсли; + + Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители); + Если Родители.Количество() > 1 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выбранные элементы не могут быть сгруппированы, поскольку они принадлежат разным родителям.'")); + Возврат Неопределено; + КонецЕсли; + + Строки = МассивСортировать(Строки); + Родитель = Родители[0]; + Индекс = Родитель.ПолучитьЭлементы().Индекс(Строки[0]); + + Возврат Новый Структура("Строки, Родитель, Индекс", Строки, Родитель, Индекс); +КонецФункции + +&НаКлиенте +Процедура ИзменитьГруппировкуОтборов(ОтборыУзлаНастроек, Строки, НаследникиЭлементовНастроек, НаследникиСтрок) + Для Каждого СтрокаИсточник Из Строки Цикл + ЭлементНастройкиИсточник = ОтборыУзлаНастроек.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор); + + Если ЭлементНастройкиИсточник.Родитель = Неопределено Тогда + РодительЭлементаНастройкиИсточника = ОтборыУзлаНастроек; + Иначе + РодительЭлементаНастройкиИсточника = ЭлементНастройкиИсточник.Родитель; + КонецЕсли; + РодительЭлементаНастройкиПриемника = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточника); + + РодительСтрокиИсточника = СтрокаИсточник.ПолучитьРодителя(); + РодительСтрокиПриемника = НаследникиСтрок.Получить(РодительСтрокиИсточника); + + Индекс = РодительЭлементаНастройкиПриемника.Элементы.Индекс(РодительЭлементаНастройкиИсточника); + Если Индекс < 0 Тогда + ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемника.Элементы.Добавить(ТипЗнч(ЭлементНастройкиИсточник)); + СтрокаПриемник = РодительСтрокиПриемника.ПолучитьЭлементы().Добавить(); + Иначе // Это удаление группировки. + ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемника.Элементы.Вставить(Индекс, ТипЗнч(ЭлементНастройкиИсточник)); + СтрокаПриемник = РодительСтрокиПриемника.ПолучитьЭлементы().Вставить(Индекс); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник); + ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник); + СтрокаПриемник.Идентификатор = ОтборыУзлаНастроек.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник); + + НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник); + НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник); + + ИзменитьГруппировкуОтборов(ОтборыУзлаНастроек, СтрокаИсточник.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьБазовыеЭлементыГруппировкиОтборов(ОтборыУзлаНастроек, ПараметрыГруппировки) + Строки = ПараметрыГруппировки.Родитель.ПолучитьЭлементы(); + + ЭлементыНастроек = ОтборыУзлаНастроек.Элементы; + Если ТипЗнч(ПараметрыГруппировки.Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + ЭлементыНастроек = ОтборыУзлаНастроек.ПолучитьОбъектПоИдентификатору(ПараметрыГруппировки.Родитель.Идентификатор).Элементы; + КонецЕсли; + + Индекс = ПараметрыГруппировки.Строки.ВГраница(); + Пока Индекс >= 0 Цикл + Строка = ПараметрыГруппировки.Строки[Индекс]; + ЭлементНастройки = ОтборыУзлаНастроек.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор); + + Строки.Удалить(Строка); + ЭлементыНастроек.Удалить(ЭлементНастройки); + + Индекс = Индекс - 1; + КонецЦикла; +КонецПроцедуры + +// Сдвиг элементов. + +&НаКлиенте +Процедура СдвинутьОтборы(ВНачало = Истина) + ПараметрыСдвига = ПараметрыСдвигаОтборов(); + Если ПараметрыСдвига = Неопределено Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + + Для Каждого Строка Из ПараметрыСдвига.Строки Цикл + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы; + Если ЭлементНастройки.Родитель <> Неопределено Тогда + ЭлементыНастроек = ЭлементНастройки.Родитель.Элементы; + КонецЕсли; + Строки = ПараметрыСдвига.Родитель.ПолучитьЭлементы(); + + Индекс = ЭлементыНастроек.Индекс(ЭлементНастройки); + Граница = ЭлементыНастроек.Количество() - 1; + + Если ВНачало Тогда // Сдвиг в начало коллекции. + Если Индекс = 0 Тогда + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, Граница); + Строки.Сдвинуть(Индекс, Граница); + Иначе + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -1); + Строки.Сдвинуть(Индекс, -1); + КонецЕсли; + Иначе // Сдвиг в конец коллекции. + Если Индекс = Граница Тогда + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -Граница); + Строки.Сдвинуть(Индекс, -Граница); + Иначе + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, 1); + Строки.Сдвинуть(Индекс, 1); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Функция ПараметрыСдвигаОтборов() + Строки = Новый Массив; + Родители = Новый Массив; + + ИдентификаторыСтрок = Элементы.Отборы.ВыделенныеСтроки; + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки); + Родитель = Строка.ПолучитьРодителя(); + + Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0 + Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + Строки.Добавить(Строка); + Родители.Добавить(Родитель); + КонецЦикла; + + Если Строки.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите элементы.'")); + Возврат Неопределено; + КонецЕсли; + + Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители); + Если Родители.Количество() > 1 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выбранные элементы не могут быть перемещены, поскольку они принадлежат разным родителям.'")); + Возврат Неопределено; + КонецЕсли; + + Возврат Новый Структура("Строки, Родитель", МассивСортировать(Строки), Родители[0]); +КонецФункции + +#КонецОбласти + +#Область ВыбранныеПоля + +// Чтение настроек. + +&НаСервере +Процедура ОбновитьВыбранныеПоля(Строки = Неопределено, ЭлементыНастроек = Неопределено) + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + Если СвойствоЭлементаСтруктуры = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Строки = Неопределено Тогда + Раздел = ВыбранныеПоля.ПолучитьЭлементы().Добавить(); + Раздел.ЭтоРаздел = Истина; + Раздел.Заголовок = НСтр("ru = 'Поля'"); + Раздел.Картинка = ОтчетыКлиентСервер.ИндексКартинки("ВыбранныеПоля"); + Раздел.Идентификатор = "ВыбранныеПоля"; + Строки = Раздел.ПолучитьЭлементы(); + КонецЕсли; + + КартинкаГруппы = ОтчетыКлиентСервер.ИндексКартинки("Группа"); + КартинкаЭлемента = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); + + Если ЭлементыНастроек = Неопределено Тогда + ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы; + КонецЕсли; + + Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл + Строка = Строки.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки); + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + + Если ТипЗнч(ЭлементНастройки) = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда + Строка.Заголовок = НСтр("ru = 'Авто (поля родителя)'"); + Строка.Картинка = 6; + Продолжить; + КонецЕсли; + + Если ТипЗнч(ЭлементНастройки) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + Строка.ЭтоГруппа = Истина; + Строка.Картинка = КартинкаГруппы; + Строка.Заголовок = ЗаголовокГруппыВыбранныхПолей(ЭлементНастройки); + + ОбновитьВыбранныеПоля(Строка.ПолучитьЭлементы(), ЭлементНастройки.Элементы); + Иначе + ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПоляВыбора.НайтиПоле(ЭлементНастройки.Поле); + Если ОписаниеНастройки = Неопределено Тогда + УстановитьПометкуУдаления("ВыбранныеПоля", Строка); + Иначе + ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки); + Строка.Картинка = КартинкаЭлемента; + КонецЕсли; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// Добавление, изменение элементов. + +&НаКлиенте +Процедура ВыбранныеПоляВыбратьГруппу(ИдентификаторСтроки, Строка) + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ЗаголовокГруппы", ЭлементНастройки.Заголовок); + ПараметрыФормы.Вставить("Расположение", ЭлементНастройки.Расположение); + + Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПослеВыбораГруппы", ЭтотОбъект, ИдентификаторСтроки); + + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ГруппаВыбранныхПолей", + ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор,,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПослеВыбораГруппы(СвойстваГруппы, ИдентификаторСтроки) Экспорт + Если ТипЗнч(СвойстваГруппы) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки); + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЭлементНастройки.Заголовок = СвойстваГруппы.ЗаголовокГруппы; + ЭлементНастройки.Расположение = СвойстваГруппы.Расположение; + + ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки); + + Если ЭлементНастройки.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда + Строка.Заголовок = Строка.Заголовок + " (" + Строка(ЭлементНастройки.Расположение) + ")"; + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляВыбратьПоле(ИдентификаторСтроки, Строка) + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПослеВыбораПоля", ЭтотОбъект, ИдентификаторСтроки); + ВыбратьПоле("ВыбранныеПоля", Обработчик, ЭлементНастройки.Поле); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПослеВыбораПоля(ОписаниеНастройки, ИдентификаторСтроки = Неопределено) Экспорт + Если ОписаниеНастройки = Неопределено Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + Если ИдентификаторСтроки = Неопределено Тогда + Родитель = Элементы.ВыбранныеПоля.ТекущиеДанные; + Если Родитель = Неопределено Тогда + Родитель = КорневаяСтрокаПоУмолчанию("ВыбранныеПоля"); + КонецЕсли; + + Если Не Родитель.ЭтоРаздел И Не Родитель.ЭтоГруппа Тогда + Родитель = Родитель.ПолучитьРодителя(); + КонецЕсли; + Строка = Родитель.ПолучитьЭлементы().Добавить(); + + РодительЭлементаНастройки = СвойствоЭлементаСтруктуры; + Если ТипЗнч(Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + РодительЭлементаНастройки = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(Родитель.Идентификатор); + КонецЕсли; + ЭлементНастройки = РодительЭлементаНастройки.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + Иначе + Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + КонецЕсли; + + ЭлементНастройки.Использование = Истина; + ЭлементНастройки.Поле = ОписаниеНастройки.Поле; + + ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки); + ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки); + + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); + + УстановитьМодифицированность(); +КонецПроцедуры + +// Изменение группировки элементов. + +&НаКлиенте +Функция ПараметрыГруппировкиВыбранныхПолей() + Строки = Новый Массив; + Родители = Новый Массив; + + ИдентификаторыСтрок = Элементы.ВыбранныеПоля.ВыделенныеСтроки; + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки); + Родитель = Строка.ПолучитьРодителя(); + + Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0 + Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + Строки.Добавить(Строка); + Родители.Добавить(Родитель); + КонецЦикла; + + Если Строки.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите элементы.'")); + Возврат Неопределено; + КонецЕсли; + + Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители); + Если Родители.Количество() > 1 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выбранные элементы не могут быть сгруппированы, поскольку они принадлежат разным родителям.'")); + Возврат Неопределено; + КонецЕсли; + + Строки = МассивСортировать(Строки); + Родитель = Родители[0]; + Индекс = Родитель.ПолучитьЭлементы().Индекс(Строки[0]); + + Возврат Новый Структура("Строки, Родитель, Индекс", Строки, Родитель, Индекс); +КонецФункции + +&НаКлиенте +Процедура ВыбранныеПоляПередГруппировкойПолей(СвойстваГруппы, ПараметрыГруппировки) Экспорт + Если ТипЗнч(СвойстваГруппы) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + // Обработка элементов настроек. + ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры; + Если ТипЗнч(ПараметрыГруппировки.Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(ПараметрыГруппировки.Родитель.Идентификатор); + КонецЕсли; + + ЭлементНастройкиПриемник = ЭлементНастройкиИсточник.Элементы.Вставить(ПараметрыГруппировки.Индекс, Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + ЭлементНастройкиПриемник.Заголовок = СвойстваГруппы.ЗаголовокГруппы; + ЭлементНастройкиПриемник.Расположение = СвойстваГруппы.Расположение; + + НаследникиЭлементовНастроек = Новый Соответствие; + НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник); + + // Обработка строк. + СтрокаИсточник = ПараметрыГруппировки.Родитель; + СтрокаПриемник = СтрокаИсточник.ПолучитьЭлементы().Вставить(ПараметрыГруппировки.Индекс); + ЗаполнитьЗначенияСвойств(СтрокаПриемник, ЭлементНастройкиПриемник); + СтрокаПриемник.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник); + СтрокаПриемник.ЭтоГруппа = Истина; + СтрокаПриемник.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Группа"); + СтрокаПриемник.Заголовок = ЗаголовокГруппыВыбранныхПолей(ЭлементНастройкиПриемник); + + НаследникиСтрок = Новый Соответствие; + НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник); + + ИзменитьГруппировкуВыбранныхПолей(СвойствоЭлементаСтруктуры, ПараметрыГруппировки.Строки, НаследникиЭлементовНастроек, НаследникиСтрок); + УдалитьБазовыеЭлементыГруппировкиВыбранныхПолей(СвойствоЭлементаСтруктуры, ПараметрыГруппировки); + + Раздел = ВыбранныеПоля.ПолучитьЭлементы()[0]; + Элементы.ВыбранныеПоля.Развернуть(Раздел.ПолучитьИдентификатор(), Истина); + Элементы.ВыбранныеПоля.ТекущаяСтрока = СтрокаПриемник.ПолучитьИдентификатор(); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьГруппировкуВыбранныхПолей(ВыбранныеПоляУзлаНастроек, Строки, НаследникиЭлементовНастроек, НаследникиСтрок) + Для Каждого СтрокаИсточник Из Строки Цикл + ЭлементНастройкиИсточник = ВыбранныеПоляУзлаНастроек.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор); + + Если ЭлементНастройкиИсточник.Родитель = Неопределено Тогда + РодительЭлементаНастройкиИсточника = ВыбранныеПоляУзлаНастроек; + Иначе + РодительЭлементаНастройкиИсточника = ЭлементНастройкиИсточник.Родитель; + КонецЕсли; + РодительЭлементаНастройкиПриемника = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточника); + + РодительСтрокиИсточника = СтрокаИсточник.ПолучитьРодителя(); + РодительСтрокиПриемника = НаследникиСтрок.Получить(РодительСтрокиИсточника); + + Индекс = РодительЭлементаНастройкиПриемника.Элементы.Индекс(РодительЭлементаНастройкиИсточника); + Если Индекс < 0 Тогда + ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемника.Элементы.Добавить(ТипЗнч(ЭлементНастройкиИсточник)); + СтрокаПриемник = РодительСтрокиПриемника.ПолучитьЭлементы().Добавить(); + Иначе // Это удаление группировки. + ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемника.Элементы.Вставить(Индекс, ТипЗнч(ЭлементНастройкиИсточник)); + СтрокаПриемник = РодительСтрокиПриемника.ПолучитьЭлементы().Вставить(Индекс); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник); + ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник); + СтрокаПриемник.Идентификатор = ВыбранныеПоляУзлаНастроек.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник); + СтрокаПриемник.ЭтоГруппа = (ТипЗнч(ЭлементНастройкиПриемник) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + + НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник); + НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник); + + ИзменитьГруппировкуВыбранныхПолей(ВыбранныеПоляУзлаНастроек, СтрокаИсточник.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьБазовыеЭлементыГруппировкиВыбранныхПолей(ВыбранныеПоляУзлаНастроек, ПараметрыГруппировки) + Строки = ПараметрыГруппировки.Родитель.ПолучитьЭлементы(); + + ЭлементыНастроек = ВыбранныеПоляУзлаНастроек.Элементы; + Если ТипЗнч(ПараметрыГруппировки.Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + ЭлементыНастроек = ВыбранныеПоляУзлаНастроек.ПолучитьОбъектПоИдентификатору(ПараметрыГруппировки.Родитель.Идентификатор).Элементы; + КонецЕсли; + + Индекс = ПараметрыГруппировки.Строки.ВГраница(); + Пока Индекс >= 0 Цикл + Строка = ПараметрыГруппировки.Строки[Индекс]; + ЭлементНастройки = ВыбранныеПоляУзлаНастроек.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор); + + Строки.Удалить(Строка); + ЭлементыНастроек.Удалить(ЭлементНастройки); + + Индекс = Индекс - 1; + КонецЦикла; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ЗаголовокГруппыВыбранныхПолей(ЭлементНастройки) + ЗаголовокГруппы = ЭлементНастройки.Заголовок; + + Если Не ЗначениеЗаполнено(ЗаголовокГруппы) Тогда + ЗаголовокГруппы = "(" + ЭлементНастройки.Расположение + ")"; + ИначеЕсли ЭлементНастройки.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда + ЗаголовокГруппы = ЗаголовокГруппы + " (" + ЭлементНастройки.Расположение + ")"; + КонецЕсли; + + Возврат ЗаголовокГруппы; +КонецФункции + +// Перетаскивание элементов. + +&НаКлиенте +Процедура ПроверитьПеретаскиваемыеСтрокиИзВыбранныхПолей(ИдентификаторыСтрок) + Родители = Новый Массив; + + Индекс = ИдентификаторыСтрок.ВГраница(); + Пока Индекс >= 0 Цикл + ИдентификаторСтроки = ИдентификаторыСтрок[Индекс]; + + Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки); + Родитель = Строка.ПолучитьРодителя(); + + Если Родитель = Неопределено + Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0 + Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + ИдентификаторыСтрок.Удалить(Индекс); + Иначе + Родители.Добавить(Родитель); + КонецЕсли; + + Индекс = Индекс - 1; + КонецЦикла; + + Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители); + Если Родители.Количество() > 1 Тогда + ИдентификаторыСтрок.Очистить(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПеретащитьВыбранныеПоляВПределахКоллекции(ПараметрыПеретаскивания, ТекущаяСтрока) + ТекущиеДанные = ВыбранныеПоля.НайтиПоИдентификатору(ТекущаяСтрока); + + Строки = Новый Массив; + Для Каждого ИдентификаторСтроки Из ПараметрыПеретаскивания.Значение Цикл + Строки.Добавить(ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки)); + КонецЦикла; + + СтрокаИсточник = Строки[0].ПолучитьРодителя(); + Если ТекущиеДанные.ЭтоРаздел Или ТекущиеДанные.ЭтоГруппа Тогда + СтрокаПриемник = ТекущиеДанные; + Иначе + СтрокаПриемник = ТекущиеДанные.ПолучитьРодителя(); + КонецЕсли; + + Индекс = СтрокаПриемник.ПолучитьЭлементы().Индекс(ТекущиеДанные); + Если Индекс < 0 Тогда + Индекс = 0; + КонецЕсли; + + НаследникиСтрок = Новый Соответствие; + НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник); + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры; + Если ТипЗнч(СтрокаИсточник.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор); + КонецЕсли; + + ЭлементНастройкиПриемник = СвойствоЭлементаСтруктуры; + Если ТипЗнч(СтрокаПриемник.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + ЭлементНастройкиПриемник = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(СтрокаПриемник.Идентификатор); + КонецЕсли; + + НаследникиЭлементовНастроек = Новый Соответствие; + НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник); + + ПеретащитьВыбранныеПоля(СвойствоЭлементаСтруктуры, Индекс, Строки, НаследникиЭлементовНастроек, НаследникиСтрок); + + Элементы.ВыбранныеПоля.Развернуть(ВыбранныеПоля.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ПеретащитьВыбранныеПоля(ВыбранныеПоляУзлаНастроек, Индекс, Строки, НаследникиЭлементовНастроек, НаследникиСтрок) + Для Каждого СтрокаИсточник Из Строки Цикл + ЭлементНастройкиИсточник = ВыбранныеПоляУзлаНастроек.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор); + + РодительЭлементаНастройкиИсточник = ВыбранныеПоляУзлаНастроек; + Если ЭлементНастройкиИсточник.Родитель <> Неопределено Тогда + РодительЭлементаНастройкиИсточник = ЭлементНастройкиИсточник.Родитель; + КонецЕсли; + + РодительЭлементаНастройкиПриемник = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточник); + РодительСтрокиПриемник = НаследникиСтрок.Получить(СтрокаИсточник.ПолучитьРодителя()); + + Если Индекс > РодительЭлементаНастройкиПриемник.Элементы.Количество() - 1 Тогда + ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемник.Элементы.Добавить(ТипЗнч(ЭлементНастройкиИсточник)); + СтрокаПриемник = РодительСтрокиПриемник.ПолучитьЭлементы().Добавить(); + Иначе + ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемник.Элементы.Вставить(Индекс, ТипЗнч(ЭлементНастройкиИсточник)); + СтрокаПриемник = РодительСтрокиПриемник.ПолучитьЭлементы().Вставить(Индекс); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник); + ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник); + СтрокаПриемник.Идентификатор = ВыбранныеПоляУзлаНастроек.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник); + СтрокаПриемник.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); + СтрокаПриемник.ЭтоГруппа = (ТипЗнч(ЭлементНастройкиПриемник) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + + НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник); + НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник); + + Если ТипЗнч(ЭлементНастройкиПриемник) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + СтрокаПриемник.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Группа"); + ПеретащитьВыбранныеПоля(ВыбранныеПоляУзлаНастроек, Индекс, СтрокаИсточник.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок) + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// Сдвиг элементов. + +&НаКлиенте +Процедура СдвинутьВыбранныеПоля(ВНачало = Истина) + ПараметрыСдвига = ПараметрыСдвигаВыбранныхПолей(); + Если ПараметрыСдвига = Неопределено Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + Для Каждого Строка Из ПараметрыСдвига.Строки Цикл + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы; + Если ЭлементНастройки.Родитель <> Неопределено Тогда + ЭлементыНастроек = ЭлементНастройки.Родитель.Элементы; + КонецЕсли; + Строки = ПараметрыСдвига.Родитель.ПолучитьЭлементы(); + + Индекс = ЭлементыНастроек.Индекс(ЭлементНастройки); + Граница = ЭлементыНастроек.Количество() - 1; + + Если ВНачало Тогда // Сдвиг в начало коллекции. + Если Индекс = 0 Тогда + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, Граница); + Строки.Сдвинуть(Индекс, Граница); + Иначе + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -1); + Строки.Сдвинуть(Индекс, -1); + КонецЕсли; + Иначе // Сдвиг в конец коллекции. + Если Индекс = Граница Тогда + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -Граница); + Строки.Сдвинуть(Индекс, -Граница); + Иначе + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, 1); + Строки.Сдвинуть(Индекс, 1); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Функция ПараметрыСдвигаВыбранныхПолей() + Строки = Новый Массив; + Родители = Новый Массив; + + ИдентификаторыСтрок = Элементы.ВыбранныеПоля.ВыделенныеСтроки; + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки); + Родитель = Строка.ПолучитьРодителя(); + + Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0 + Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + Строки.Добавить(Строка); + Родители.Добавить(Родитель); + КонецЦикла; + + Если Строки.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите элементы.'")); + Возврат Неопределено; + КонецЕсли; + + Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители); + Если Родители.Количество() > 1 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выбранные элементы не могут быть перемещены, поскольку они принадлежат разным родителям.'")); + Возврат Неопределено; + КонецЕсли; + + Возврат Новый Структура("Строки, Родитель", МассивСортировать(Строки), Родители[0]); +КонецФункции + +// Общее + +&НаКлиентеНаСервереБезКонтекста +Процедура ПривестиЗначениеКВидуСравнения(Строка, ЭлементНастройки = Неопределено) + ИмяПоляЗначения = ?(Строка.ЭтоПараметр, "Значение", "ПравоеЗначение"); + ТекущееЗначение = Строка[ИмяПоляЗначения]; + + Если Строка.ДоступенСписокЗначений + Или ОтчетыКлиентСервер.ЭтоВидСравненияСписка(Строка.ВидСравнения) Тогда + + Значение = ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение); + Значение.ЗаполнитьПометки(Истина); + + Если Строка.ДоступныеЗначения <> Неопределено Тогда + Для Каждого ЭлементСписка Из Значение Цикл + НайденныйЭлемент = Строка.ДоступныеЗначения.НайтиПоЗначению(ЭлементСписка.Значение); + Если НайденныйЭлемент <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЭлементСписка, НайденныйЭлемент,, "Пометка"); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + Значение = Неопределено; + Если ТипЗнч(ТекущееЗначение) <> Тип("СписокЗначений") Тогда + Значение = ТекущееЗначение; + ИначеЕсли ТекущееЗначение.Количество() > 0 Тогда + Значение = ТекущееЗначение[0].Значение; + КонецЕсли; + КонецЕсли; + + Строка[ИмяПоляЗначения] = Значение; + + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + Или ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭлементНастройки[ИмяПоляЗначения] = Значение; + КонецЕсли; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьПредставлениеЗначения(Строка) + Строка.ПредставлениеЗначения = ""; + + ДоступныеЗначения = Строка.ДоступныеЗначения; + Если ДоступныеЗначения = Неопределено Тогда + Возврат; + КонецЕсли; + + Значение = ?(Строка.ЭтоПараметр, Строка.Значение, Строка.ПравоеЗначение); + НайденныйЭлемент = ДоступныеЗначения.НайтиПоЗначению(Значение); + Если НайденныйЭлемент <> Неопределено Тогда + Строка.ПредставлениеЗначения = НайденныйЭлемент.Представление; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьСписокВыбора(Строка, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ТекущееЗначение = ?(Строка.ЭтоПараметр, Строка.Значение, Строка.ПравоеЗначение); + + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; + Если Строка.ЭтоПараметр Тогда + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(КомпоновщикНастроек, "ПараметрыДанных"); + Иначе + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек); + КонецЕсли; + + ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; + + ТекущиеНастройки = ЭлементСтруктурыНастроек(КомпоновщикНастроек.Настройки, ИдентификаторЭлементаСтруктурыНастроек); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ОписаниеЭлементаНастройки = ОтчетыКлиентСервер.НайтиДоступнуюНастройку(ТекущиеНастройки, ЭлементНастройки); + + ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора(ТекущиеНастройки, ПользовательскиеНастройки, ЭлементНастройки); + Строка.ТипЗначения = ОтчетыКлиент.ТипЗначенияОграниченныйСвязьюПоТипу( + ТекущиеНастройки, ПользовательскиеНастройки, ЭлементНастройки, ОписаниеЭлементаНастройки); + + Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки(ЭлементНастройки, ОписаниеЭлементаНастройки); + ВыборГруппИЭлементов = ОтчетыКлиент.ЗначениеТипаИспользованиеГруппИЭлементов(Строка.ВыборГруппИЭлементов, Условие); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение, Истина)); + ПараметрыОткрытия.Вставить("ОписаниеТипов", Строка.ТипЗначения); + ПараметрыОткрытия.Вставить("ЗначенияДляВыбора", Строка.ДоступныеЗначения); + ПараметрыОткрытия.Вставить("ЗначенияДляВыбораЗаполнены", Строка.ДоступныеЗначения <> Неопределено); + ПараметрыОткрытия.Вставить("ОграничиватьВыборУказаннымиЗначениями", ПараметрыОткрытия.ЗначенияДляВыбораЗаполнены); + ПараметрыОткрытия.Вставить("Представление", Строка.ПредставлениеПользовательскойНастройки); + ПараметрыОткрытия.Вставить("ПараметрыВыбора", Новый Массив(ПараметрыВыбора)); + ПараметрыОткрытия.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); + + Обработчик = Новый ОписаниеОповещения("ЗавершитьВыборИзСписка", ЭтотОбъект, Строка.ПолучитьИдентификатор()); + Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыОткрытия, ЭтотОбъект,,,, Обработчик, Режим); +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьВыборИзСписка(Список, ИдентификаторСтроки) Экспорт + Если ТипЗнч(Список) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки); + Если Строка = Неопределено Тогда + Возврат; + КонецЕсли; + + ВыбранныеЗначения = Новый СписокЗначений; + Для Каждого ЭлементСписка Из Список Цикл + Если ЭлементСписка.Пометка Тогда + ЗаполнитьЗначенияСвойств(ВыбранныеЗначения.Добавить(), ЭлементСписка); + КонецЕсли; + КонецЦикла; + + ИмяПоляЗначения = ?(Строка.ЭтоПараметр, "Значение", "ПравоеЗначение"); + КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек("Отборы", Строка); + + Строка[ИмяПоляЗначения] = ВыбранныеЗначения; + Строка.Использование = Истина; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЗаполнитьЗначенияСвойств(ЭлементНастройки, Строка, "Использование, " + ИмяПоляЗначения); + + УстановитьМодифицированность(); +КонецПроцедуры + +#КонецОбласти + +#Область Порядок + +// Чтение настроек. + +&НаСервере +Процедура ОбновитьСортировку() + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + Если СвойствоЭлементаСтруктуры = Неопределено Тогда + Возврат; + КонецЕсли; + + Раздел = Сортировка.ПолучитьЭлементы().Добавить(); + Раздел.ЭтоРаздел = Истина; + Раздел.Заголовок = НСтр("ru = 'Сортировки'"); + Раздел.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Сортировки"); + Строки = Раздел.ПолучитьЭлементы(); + + ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы; + + Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл + Строка = Строки.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки); + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + + Если ТипЗнч(ЭлементНастройки) = Тип("АвтоЭлементПорядкаКомпоновкиДанных") Тогда + Строка.Заголовок = НСтр("ru = 'Авто (сортировки родителя)'"); + Строка.ЭтоАвтоПоле = Истина; + Строка.Картинка = 6; + Продолжить; + КонецЕсли; + + ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПоляПорядка.НайтиПоле(ЭлементНастройки.Поле); + Если ОписаниеНастройки = Неопределено Тогда + УстановитьПометкуУдаления("Сортировка", Строка); + Иначе + ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки); + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// Добавление, изменение элементов. + +&НаКлиенте +Процедура СортировкаВыбратьПоле(ИдентификаторСтроки, Строка) + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + Обработчик = Новый ОписаниеОповещения("СортировкаПослеВыбораПоля", ЭтотОбъект, ИдентификаторСтроки); + ВыбратьПоле("Сортировка", Обработчик, ЭлементНастройки.Поле); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПослеВыбораПоля(ОписаниеНастройки, ИдентификаторСтроки = Неопределено) Экспорт + Если ОписаниеНастройки = Неопределено Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + Если ИдентификаторСтроки = Неопределено Тогда + Родитель = Элементы.Сортировка.ТекущиеДанные; + Если Не Родитель.ЭтоРаздел Тогда + Родитель = Родитель.ПолучитьРодителя(); + КонецЕсли; + Строка = Родитель.ПолучитьЭлементы().Добавить(); + + РодительЭлементаНастройки = СвойствоЭлементаСтруктуры; + Если ТипЗнч(Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + РодительЭлементаНастройки = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(Родитель.Идентификатор); + КонецЕсли; + ЭлементНастройки = РодительЭлементаНастройки.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + Иначе + Строка = Сортировка.НайтиПоИдентификатору(ИдентификаторСтроки); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + КонецЕсли; + + ЭлементНастройки.Использование = Истина; + ЭлементНастройки.Поле = ОписаниеНастройки.Поле; + + ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки); + ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки); + + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); + + Элементы.Сортировка.Развернуть(Сортировка.ПолучитьЭлементы()[0].ПолучитьИдентификатор()); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьТипУпорядочиванияСтрок(ТипУпорядочивания) + Строки = Сортировка.ПолучитьЭлементы()[0].ПолучитьЭлементы(); + Если Строки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + Для Каждого Строка Из Строки Цикл + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЭлементНастройки.ТипУпорядочивания = ТипУпорядочивания; + Строка.ТипУпорядочивания = ЭлементНастройки.ТипУпорядочивания; + КонецЦикла; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьТипУпорядочивания(Строка) + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + Если ЭлементНастройки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр Тогда + ЭлементНастройки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; + Иначе + ЭлементНастройки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + КонецЕсли; + Строка.ТипУпорядочивания = ЭлементНастройки.ТипУпорядочивания; + + УстановитьМодифицированность(); +КонецПроцедуры + +// Перетаскивание элементов. + +&НаКлиенте +Процедура ПеретащитьВыбранныеПоляВСортировку(Строки) + ВыбранныеПоляЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + СортировкаЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + Раздел = Сортировка.ПолучитьЭлементы()[0]; + + Для Каждого СтрокаИсточник Из Строки Цикл + ЭлементНастройкиИсточник = ВыбранныеПоляЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор); + Если ТипЗнч(ЭлементНастройкиИсточник) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + ПеретащитьВыбранныеПоляВСортировку(СтрокаИсточник.ПолучитьЭлементы()); + Иначе + Если НайтиПолеПорядка(СортировкаЭлементаСтруктуры, ЭлементНастройкиИсточник.Поле) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ЭлементНастройкиПриемник = СортировкаЭлементаСтруктуры.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник); + ЭлементНастройкиПриемник.Использование = Истина; + + ОписаниеНастройки = СортировкаЭлементаСтруктуры.ДоступныеПоляПорядка.НайтиПоле(ЭлементНастройкиИсточник.Поле); + + СтрокаПриемник = Раздел.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаПриемник, ЭлементНастройкиПриемник); + ЗаполнитьЗначенияСвойств(СтрокаПриемник, ОписаниеНастройки); + СтрокаПриемник.Идентификатор = СортировкаЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник); + СтрокаПриемник.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); + КонецЕсли; + КонецЦикла; + + Элементы.Сортировка.Развернуть(Раздел.ПолучитьИдентификатор()); + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ПеретащитьСортировкуВнутриКоллекции(ПараметрыПеретаскивания, ТекущаяСтрока) КонецПроцедуры +&НаКлиенте +Функция НайтиПолеПорядка(СортировкаУзлаНастроек, Поле) + Для Каждого ЭлементНастройки Из СортировкаУзлаНастроек.Элементы Цикл + Если ЭлементНастройки.Поле = Поле Тогда + Возврат Поле; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +&НаКлиенте +Процедура ПеретащитьПоляСортировкиВВыбранныеПоля(Строки) + ВыбранныеПоляЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + СортировкаЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + РазделВыбранныхПолей = ВыбранныеПоля.ПолучитьЭлементы()[0]; + РазделПолейСортировки = Сортировка.ПолучитьЭлементы()[0]; + + Индекс = Строки.Количество() - 1; + Пока Индекс >= 0 Цикл + СтрокаИсточник = Строки[Индекс]; + ЭлементНастройкиИсточник = СортировкаЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор); + + Если НайтиВыбранноеПоле(ВыбранныеПоляЭлементаСтруктуры, ЭлементНастройкиИсточник.Поле) = Неопределено Тогда + ЭлементНастройкиПриемник = ВыбранныеПоляЭлементаСтруктуры.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник); + + ОписаниеНастройки = ВыбранныеПоляЭлементаСтруктуры.ДоступныеПоляВыбора.НайтиПоле(ЭлементНастройкиИсточник.Поле); + + СтрокаПриемник = РазделВыбранныхПолей.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаПриемник, ЭлементНастройкиПриемник); + ЗаполнитьЗначенияСвойств(СтрокаПриемник, ОписаниеНастройки); + СтрокаПриемник.Идентификатор = ВыбранныеПоляЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник); + СтрокаПриемник.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); + КонецЕсли; + + СортировкаЭлементаСтруктуры.Элементы.Удалить(ЭлементНастройкиИсточник); + РазделПолейСортировки.ПолучитьЭлементы().Удалить(СтрокаИсточник); + + Индекс = Индекс - 1; + КонецЦикла; + + Элементы.ВыбранныеПоля.Развернуть(РазделВыбранныхПолей.ПолучитьИдентификатор(), Истина); + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Функция НайтиВыбранноеПоле(ВыбранныеПоляУзлаНастроек, Поле) + НайденноеПоле = Неопределено; + + Для Каждого ЭлементНастройки Из ВыбранныеПоляУзлаНастроек.Элементы Цикл + Если ТипЗнч(ЭлементНастройки) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + НайденноеПоле = НайтиВыбранноеПоле(ЭлементНастройки, Поле); + ИначеЕсли ЭлементНастройки.Поле = Поле Тогда + НайденноеПоле = Поле; + КонецЕсли; + КонецЦикла; + + Возврат НайденноеПоле; +КонецФункции + +// Сдвиг элементов. + +&НаКлиенте +Процедура СдвинутьСортировку(ВНачало = Истина) + ИдентификаторыСтрок = Элементы.Сортировка.ВыделенныеСтроки; + ИдентификаторРаздела = Сортировка.ПолучитьЭлементы()[0].ПолучитьИдентификатор(); + + ИндексРаздела = ИдентификаторыСтрок.Найти(ИдентификаторРаздела); + Если ИндексРаздела <> Неопределено Тогда + ИдентификаторыСтрок.Удалить(ИндексРаздела); + КонецЕсли; + + Если ИдентификаторыСтрок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + Строка = Сортировка.НайтиПоИдентификатору(ИдентификаторСтроки); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы; + Строки = Строка.ПолучитьРодителя().ПолучитьЭлементы(); + + Индекс = ЭлементыНастроек.Индекс(ЭлементНастройки); + Граница = ЭлементыНастроек.Количество() - 1; + + Если ВНачало Тогда // Сдвиг в начало коллекции. + Если Индекс = 0 Тогда + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, Граница); + Строки.Сдвинуть(Индекс, Граница); + Иначе + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -1); + Строки.Сдвинуть(Индекс, -1); + КонецЕсли; + Иначе // Сдвиг в конец коллекции. + Если Индекс = Граница Тогда + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -Граница); + Строки.Сдвинуть(Индекс, -Граница); + Иначе + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, 1); + Строки.Сдвинуть(Индекс, 1); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + УстановитьМодифицированность(); +КонецПроцедуры + +#КонецОбласти + +#Область Оформление + +// Чтение настроек. + +&НаСервере +Процедура ОбновитьОформление() + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "УсловноеОформление", ИдентификаторЭлементаСтруктурыНастроек); + + Если СвойствоЭлементаСтруктуры = Неопределено Тогда + Возврат; + КонецЕсли; + + ПрочитатьПредопределенныеПараметрыОформления(); + + Если РежимИзмененияЭлементаСтруктурыНастроек Тогда + Строки = Оформление.ПолучитьЭлементы(); + Иначе + Раздел = Оформление.ПолучитьЭлементы().Добавить(); + Раздел.Заголовок = НСтр("ru = 'Условное оформление'"); + Раздел.Представление = НСтр("ru = 'Условное оформление'"); + Раздел.Картинка = ОтчетыКлиентСервер.ИндексКартинки("УсловноеОформление"); + Раздел.ЭтоРаздел = Истина; + Строки = Раздел.ПолучитьЭлементы(); + КонецЕсли; + + Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл + Строка = Строки.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки); + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Строка.Картинка = -1; + + Если ЭлементОформленияПомеченНаУдаление(ЭлементНастройки.Поля) Тогда + УстановитьПометкуУдаления("Оформление", Строка); + КонецЕсли; + + Строка.Представление = ОтчетыКлиентСервер.ПредставлениеЭлементаУсловногоОформления( + ЭлементНастройки, ЭлементНастройки, ?(Строка.ПометкаУдаления, "ПометкаУдаления", "")); + + Если ЗначениеЗаполнено(Строка.ПредставлениеПользовательскойНастройки) Тогда + Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки; + Иначе + Строка.Заголовок = Строка.Представление; + КонецЕсли; + + Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки); + Строка.КартинкаРежимаОтображения = КартинкаРежимаОтображенияЭлементаНастройки(ЭлементНастройки); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Функция ЭлементОформленияПомеченНаУдаление(Поля) + ДоступныеПоля = Поля.ДоступныеПоляОформляемыхПолей; + + Для Каждого Элемент Из Поля.Элементы Цикл + Если ДоступныеПоля.НайтиПоле(Элемент.Поле) = Неопределено Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; +КонецФункции + +// Определяет свойства параметров вывода, влияющих на отображение заголовка, параметров данных и отборов. +// См. также ОтчетыСервер.ИнициализироватьПредопределенныеПараметрыВывода(). +// +&НаСервере +Процедура ПрочитатьПредопределенныеПараметрыОформления() + Если РежимИзмененияЭлементаСтруктурыНастроек Тогда + Возврат; + КонецЕсли; + + ПредопределенныеПараметры = ПредопределенныеПараметрыВывода(Отчет.КомпоновщикНастроек.Настройки); + + // Параметр вывода Заголовок. + Объект = ПредопределенныеПараметры.TITLE.Объект; + + Строка = Оформление.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Объект, "Использование, Значение"); + Строка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Заголовок: %1'"), + ?(ЗначениеЗаполнено(Объект.Значение), Объект.Значение, "<Отсутствует>")); + Строка.Представление = НСтр("ru = 'Заголовок'"); + Строка.Идентификатор = ПредопределенныеПараметры.TITLE.Идентификатор; + Строка.Картинка = -1; + Строка.КартинкаРежимаОтображения = 4; + Строка.ЭтоПараметрВывода = Истина; + + // Параметр вывода ВыводитьПараметры. + Объект = ПредопределенныеПараметры.DATAPARAMETERSOUTPUT.Объект; + + Строка = Оформление.ПолучитьЭлементы().Добавить(); + Строка.Использование = (Объект.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто); + Строка.Заголовок = НСтр("ru = 'Выводить параметры и отборы'"); + Строка.Представление = НСтр("ru = 'Выводить параметры и отборы'"); + Строка.Идентификатор = ПредопределенныеПараметры.DATAPARAMETERSOUTPUT.Идентификатор; + Строка.Картинка = -1; + Строка.КартинкаРежимаОтображения = 4; + Строка.ЭтоПараметрВывода = Истина; +КонецПроцедуры + +// Добавление, изменение элементов. + +&НаКлиенте +Процедура ОформлениеИзменитьЭлемент(ИдентификаторСтроки = Неопределено, Строка = Неопределено) + Обработчик = Новый ОписаниеОповещения("ОформлениеИзменитьЭлементЗавершение", ЭтотОбъект, ИдентификаторСтроки); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); + ПараметрыФормы.Вставить("ИдентификаторЭлементаСтруктурыНастроек", ИдентификаторЭлементаСтруктурыНастроек); + Если Строка = Неопределено Тогда + ПараметрыФормы.Вставить("ИдентификаторКД", Неопределено); + ПараметрыФормы.Вставить("Наименование", ""); + Иначе + ПараметрыФормы.Вставить("ИдентификаторКД", Строка.Идентификатор); + ПараметрыФормы.Вставить("Наименование", Строка.Заголовок); + КонецЕсли; + ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Элемент условного оформления отчета ""%1""'"), ВариантНаименование)); + + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ЭлементУсловногоОформленияОтчета", + ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор,,, Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ОформлениеИзменитьЭлементЗавершение(Результат, ИдентификаторСтроки) Экспорт + Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "УсловноеОформление", ИдентификаторЭлементаСтруктурыНастроек); + + Раздел = КорневаяСтрокаПоУмолчанию("Оформление"); + + Если ИдентификаторСтроки = Неопределено Тогда + Если Раздел = Неопределено Тогда + Строка = Оформление.ПолучитьЭлементы().Добавить(); + Иначе + Строка = Раздел.ПолучитьЭлементы().Добавить(); + КонецЕсли; + ЭлементНастройки = СвойствоЭлементаСтруктуры.Элементы.Добавить(); + Иначе + Строка = Оформление.НайтиПоИдентификатору(ИдентификаторСтроки); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЭлементНастройки.Отбор.Элементы.Очистить(); + ЭлементНастройки.Поля.Элементы.Очистить(); + КонецЕсли; + + ОтчетыКлиентСервер.ЗаполнитьСвойстваРекурсивно(СвойствоЭлементаСтруктуры, ЭлементНастройки, Результат.ЭлементКД); + ЭлементНастройки.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; + ЭлементНастройки.Представление = Результат.Наименование; + + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Строка.Использование = ЭлементНастройки.Использование; + Строка.Заголовок = Результат.Наименование; + Строка.Представление = Результат.Наименование; + Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.Представление); + + Если Строка.ЭтоПредопределенныйЗаголовок Тогда + ЭлементНастройки.ПредставлениеПользовательскойНастройки = ""; + Иначе + ЭлементНастройки.ПредставлениеПользовательскойНастройки = Строка.Заголовок; + КонецЕсли; + + Строка.Картинка = -1; + Строка.КартинкаРежимаОтображения = КартинкаРежимаОтображенияЭлементаНастройки(ЭлементНастройки); + + Если Раздел <> Неопределено Тогда + Элементы.Оформление.Развернуть(Раздел.ПолучитьИдентификатор()); + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура СинхронизироватьПредопределенныеПараметрыВывода(Использование, ЭлементНастройки) + ПараметрыВывода = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода; + + Значение = ?(Использование, ТипВыводаТекстаКомпоновкиДанных.Авто, ТипВыводаТекстаКомпоновкиДанных.НеВыводить); + + Если ЭлементНастройки.Параметр = Новый ПараметрКомпоновкиДанных("Заголовок") Тогда + СвязанныйЭлементНастройки = ПараметрыВывода.Элементы.Найти("TITLEOUTPUT"); + СвязанныйЭлементНастройки.Использование = Истина; + СвязанныйЭлементНастройки.Значение = Значение; + ИначеЕсли ЭлементНастройки.Параметр = Новый ПараметрКомпоновкиДанных("ВыводитьПараметрыДанных") Тогда + СвязанныйЭлементНастройки = ПараметрыВывода.Элементы.Найти("FILTEROUTPUT"); + ЗаполнитьЗначенияСвойств(СвязанныйЭлементНастройки, ЭлементНастройки, "Использование, Значение"); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОформлениеВводЗаголовкаЗавершение(Значение, Идентификатор) Экспорт + Если Значение = Неопределено Тогда + Возврат; + КонецЕсли; + + Строка = Оформление.НайтиПоИдентификатору(Идентификатор); + Строка.Использование = Истина; + Строка.Значение = Значение; + Строка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Заголовок: %1'"), + ?(ЗначениеЗаполнено(Значение), Значение, "<Отсутствует>")); + + ПараметрыВывода = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода; + ЭлементНастройки = ПараметрыВывода.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор); + ЭлементНастройки.Значение = Значение; + ЭлементНастройки.Использование = Истина; + + УстановитьМодифицированность(); +КонецПроцедуры + +// Сдвиг элементов. + +&НаКлиенте +Процедура СдвинутьОформление(ВНачало = Истина) + ИдентификаторыСтрок = Элементы.Оформление.ВыделенныеСтроки; + + Раздел = КорневаяСтрокаПоУмолчанию("Оформление"); + Если Раздел <> Неопределено Тогда + ИдентификаторРаздела = Раздел.ПолучитьИдентификатор(); + ИндексРаздела = ИдентификаторыСтрок.Найти(ИдентификаторРаздела); + Если ИндексРаздела <> Неопределено Тогда + ИдентификаторыСтрок.Удалить(ИндексРаздела); + КонецЕсли; + КонецЕсли; + + Если ИдентификаторыСтрок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, "УсловноеОформление", ИдентификаторЭлементаСтруктурыНастроек); + + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + Строка = Оформление.НайтиПоИдентификатору(ИдентификаторСтроки); + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы; + Строки = Строка.ПолучитьРодителя().ПолучитьЭлементы(); + + Индекс = ЭлементыНастроек.Индекс(ЭлементНастройки); + Граница = ЭлементыНастроек.Количество() - 1; + + Если ВНачало Тогда // Сдвиг в начало коллекции. + Если Индекс = 0 Тогда + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, Граница); + Строки.Сдвинуть(Индекс, Граница); + Иначе + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -1); + Строки.Сдвинуть(Индекс, -1); + КонецЕсли; + Иначе // Сдвиг в конец коллекции. + Если Индекс = Граница Тогда + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -Граница); + Строки.Сдвинуть(Индекс, -Граница); + Иначе + ЭлементыНастроек.Сдвинуть(ЭлементНастройки, 1); + Строки.Сдвинуть(Индекс, 1); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + УстановитьМодифицированность(); +КонецПроцедуры + +// Использование элементов. + +&НаКлиенте +Процедура ИзменитьИспользованиеПредопределенныхПараметровВывода(Использование = Истина) + Если РежимИзмененияЭлементаСтруктурыНастроек Тогда + Возврат; + КонецЕсли; + + Строки = Оформление.ПолучитьЭлементы(); + СвойствоЭлементаСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода; + + Для Каждого Строка Из Строки Цикл + Если ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + Строка.Использование = Использование; + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЭлементНастройки.Использование = Использование; + КонецЦикла; +КонецПроцедуры + +// Обработчик закрытия общей формы НастройкаКолонтитулов. +// См. Синтакс-помощник: ОткрытьФорму - ОписаниеОповещенияОЗакрытии. +// +&НаКлиенте +Процедура ЗапомнитьНастройкиКолонтитулов(Настройки, ДополнительныеПараметры) Экспорт + ПредыдущиеНастройки = Неопределено; + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("НастройкиКолонтитулов", ПредыдущиеНастройки); + + Если Настройки <> ПредыдущиеНастройки Тогда + УстановитьМодифицированность(); + КонецЕсли; + + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("НастройкиКолонтитулов", Настройки); +КонецПроцедуры + +#КонецОбласти + +#Область Структура + +// Чтение настроек. + +&НаСервере +Процедура ОбновитьСтруктуру() + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура"); + Если СвойствоЭлементаСтруктуры = Неопределено Тогда + Возврат; + КонецЕсли; + + Раздел = СтруктураВарианта.ПолучитьЭлементы().Добавить(); + Раздел.Представление = НСтр("ru = 'Отчет'"); + Раздел.ЭтоРаздел = Истина; + Раздел.Картинка = -1; + Раздел.Тип = СвойствоЭлементаСтруктуры; + Строки = Раздел.ПолучитьЭлементы(); + + ОбновитьКоллекциюСтруктуры(СвойствоЭлементаСтруктуры, "Структура", Строки); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьКоллекциюСтруктуры(Знач Узел, Знач ИмяКоллекции, Строки) + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура"); + ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; + + Коллекция = Узел[ИмяКоллекции]; + + // Добавление заголовка коллекции. + Если ИмяКоллекции <> "Структура" + И (ТипЗнч(Коллекция) = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + Или ТипЗнч(Коллекция) = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных")) Тогда + Строка = Строки.Добавить(); + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(Коллекция); + Строка.Представление = ИмяКоллекции; + Строка.Картинка = -1; + Строка.Тип = Коллекция; + Строки = Строка.ПолучитьЭлементы(); + КонецЕсли; + + Для Каждого Элемент Из Коллекция Цикл + Если ЗначениеЗаполнено(Элемент.ИдентификаторПользовательскойНастройки) Тогда + СодержитПользовательскиеЭлементыСтруктуры = Истина; + КонецЕсли; + + ЭлементПользовательскойНастройки = ПользовательскиеНастройки.Найти(Элемент.ИдентификаторПользовательскойНастройки); + + Строка = Строки.Добавить(); + Строка.Использование = Истина; + + Если ТипЗнч(Элемент) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Узел = Элемент.Настройки; + СодержитВложенныеОтчеты = Истина; + Иначе + Узел = Элемент; + ЗаполнитьЗначенияСвойств(Строка, Элемент); + + Если РасширенныйРежим = 0 И ЭлементПользовательскойНастройки <> Неопределено Тогда + Строка.Использование = ЭлементПользовательскойНастройки.Использование; + КонецЕсли; + КонецЕсли; + + Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(Узел); + Строка.ФлажокДоступен = Истина; + + СвойстваЭлемента = СвойстваЭлементаКоллекцииСтруктуры(Элемент); + ЗаполнитьЗначенияСвойств(Строка, СвойстваЭлемента); + + Если СвойстваЭлемента.ПометкаУдаления Тогда + УстановитьПометкуУдаления("СтруктураВарианта", Строка); + КонецЕсли; + + Для Каждого ИмяКоллекции Из СвойстваЭлемента.ИменаКоллекций Цикл + ОбновитьКоллекциюСтруктуры(Узел, ИмяКоллекции, Строка.ПолучитьЭлементы()); + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Функция СвойстваЭлементаКоллекцииСтруктуры(Элемент) + СвойстваЭлемента = ПалитраСвойствЭлементаКоллекцииСтруктуры(); + + ТипЭлемента = ТипЗнч(Элемент); + Если ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + + СвойстваЭлемента.Представление = ПредставлениеПолейГруппировки(Элемент, СвойстваЭлемента.ПометкаУдаления); + ИменаКоллекций = "Структура"; + ИначеЕсли ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Объекты = Элемент.Родитель.ДоступныеОбъекты.Элементы; + ОписаниеОбъекта = Объекты.Найти(Элемент.ИдентификаторОбъекта); + СвойстваЭлемента.Представление = ОписаниеОбъекта.Заголовок; + Если Не ЗначениеЗаполнено(СвойстваЭлемента.Представление) Тогда + СвойстваЭлемента.Представление = НСтр("ru = 'Вложенная группировка'"); + КонецЕсли; + ИменаКоллекций = "Структура"; + ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") Тогда + СвойстваЭлемента.Представление = НСтр("ru = 'Таблица'"); + ИменаКоллекций = "Строки, Колонки"; + ИначеЕсли ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда + СвойстваЭлемента.Представление = НСтр("ru = 'Диаграмма'"); + ИменаКоллекций = "Точки, Серии"; + Иначе + СвойстваЭлемента.Представление = Строка(ТипЭлемента); + ИменаКоллекций = ""; + КонецЕсли; + + Если ТипЭлемента <> Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ЗаголовокЭлемента = Элемент.ПараметрыВывода.Элементы.Найти("Заголовок"); + Если ЗаголовокЭлемента <> Неопределено Тогда + СвойстваЭлемента.Заголовок = ЗаголовокЭлемента.Значение; + КонецЕсли; + КонецЕсли; + + СвойстваЭлемента.ИменаКоллекций = СтрРазделить(ИменаКоллекций, ", ", Ложь); + + ПредставлениеТипаЭлемента = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЭлемента); + СостояниеЭлемента = ?(СвойстваЭлемента.ПометкаУдаления, "ПометкаУдаления", Неопределено); + СвойстваЭлемента.Картинка = ОтчетыКлиентСервер.ИндексКартинки(ПредставлениеТипаЭлемента, СостояниеЭлемента); + + СвойстваЭлемента.Тип = Элемент; + + УстановитьПризнакиВложенныхЭлементовНастроек(Элемент, СвойстваЭлемента); + + Возврат СвойстваЭлемента; +КонецФункции + +&НаСервере +Функция ПалитраСвойствЭлементаКоллекцииСтруктуры() + СвойстваЭлемента = Новый Структура; + СвойстваЭлемента.Вставить("Представление", ""); + СвойстваЭлемента.Вставить("Заголовок", ""); + СвойстваЭлемента.Вставить("ИменаКоллекций", Новый Массив); + СвойстваЭлемента.Вставить("ПометкаУдаления", Ложь); + СвойстваЭлемента.Вставить("Картинка", -1); + СвойстваЭлемента.Вставить("Тип", ""); + СвойстваЭлемента.Вставить("СодержитОтборы", Ложь); + СвойстваЭлемента.Вставить("СодержитПоляИлиСортировки", Ложь); + СвойстваЭлемента.Вставить("СодержитУсловноеОформление", Ложь); + + Возврат СвойстваЭлемента; +КонецФункции + +&НаСервере +Функция ПредставлениеПолейГруппировки(ЭлементНастройки, ПометкаУдаления) + Если ЗначениеЗаполнено(ЭлементНастройки.ПредставлениеПользовательскойНастройки) Тогда + Возврат ЭлементНастройки.ПредставлениеПользовательскойНастройки; + КонецЕсли; + + Поля = ЭлементНастройки.ПоляГруппировки; + Если Поля.Элементы.Количество() = 0 Тогда + Возврат НСтр("ru = '<Детальные записи>'"); + КонецЕсли; + + ПредставлениеПолей = ""; + Для Каждого Элемент Из Поля.Элементы Цикл + ОписаниеПоля = Поля.ДоступныеПоляПолейГруппировок.НайтиПоле(Элемент.Поле); + Если ОписаниеПоля = Неопределено Тогда + ПометкаУдаления = Истина; + КонецЕсли; + + ПредставлениеПолей = ПредставлениеПолей + + ?(ЗначениеЗаполнено(ПредставлениеПолей), ", ", "") + + ?(ОписаниеПоля = Неопределено, Строка(Элемент.Поле), ОписаниеПоля.Заголовок); + + Если Элемент.ТипГруппировки <> ТипГруппировкиКомпоновкиДанных.Элементы Тогда + ПредставлениеПолей = ПредставлениеПолей + " (" + Элемент.ТипГруппировки + ")"; + КонецЕсли; + КонецЦикла; + + Возврат ПредставлениеПолей; +КонецФункции + +&НаСервере +Процедура УстановитьПризнакиВложенныхЭлементовНастроек(ЭлементСтруктуры, СвойстваЭлементаСтруктуры) + ТипЭлемента = ТипЗнч(ЭлементСтруктуры); + Если ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") + Или ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") + Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Возврат; + КонецЕсли; + + СвойстваЭлементаСтруктуры.СодержитОтборы = ЭлементСтруктуры.Отбор.Элементы.Количество(); + СвойстваЭлементаСтруктуры.СодержитУсловноеОформление = ЭлементСтруктуры.УсловноеОформление.Элементы.Количество(); + + ВложенныеЭлементы = ЭлементСтруктуры.Выбор.Элементы; + СодержитПоля = ВложенныеЭлементы.Количество() > 0 + И Не (ВложенныеЭлементы.Количество() = 1 + И ТипЗнч(ВложенныеЭлементы[0]) = Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + + ВложенныеЭлементы = ЭлементСтруктуры.Порядок.Элементы; + СодержитСортировки = ВложенныеЭлементы.Количество() > 0 + И Не (ВложенныеЭлементы.Количество() = 1 + И ТипЗнч(ВложенныеЭлементы[0]) = Тип("АвтоЭлементПорядкаКомпоновкиДанных")); + + СвойстваЭлементаСтруктуры.СодержитПоляИлиСортировки = СодержитПоля Или СодержитСортировки; + + // Установка служебных признаков. + Если СвойстваЭлементаСтруктуры.СодержитОтборы Тогда + СодержитВложенныеОтборы = Истина; + КонецЕсли; + + Если СвойстваЭлементаСтруктуры.СодержитПоляИлиСортировки Тогда + СодержитВложенныеПоляИлиСортировки = Истина; + КонецЕсли; + + Если СвойстваЭлементаСтруктуры.СодержитУсловноеОформление Тогда + СодержитВложенноеУсловноеОформление = Истина; + КонецЕсли; +КонецПроцедуры + +// Добавление, изменение элементов. + +&НаКлиенте +Процедура ДобавитьГруппировкуСтруктурыВарианта(СледующийУровень = Истина) + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("СледующийУровень", СледующийУровень); + ПараметрыВыполнения.Вставить("Оборачивать", Истина); + + ИдентификаторЭлементаСтруктуры = Неопределено; + Строка = Элементы.СтруктураВарианта.ТекущиеДанные; + Если Строка <> Неопределено Тогда + Если Не СледующийУровень Тогда + Строка = Строка.ПолучитьРодителя(); + КонецЕсли; + + Если СледующийУровень Тогда + Если Строка.Тип = "НастройкиКомпоновкиДанных" И Не Строка.ФлажокДоступен Тогда + ПараметрыВыполнения.Оборачивать = Ложь; + ИначеЕсли Строка.ПолучитьЭлементы().Количество() > 1 Тогда + ПараметрыВыполнения.Оборачивать = Ложь; + КонецЕсли; + КонецЕсли; + + Пока Строка <> Неопределено Цикл + Если Строка.Тип = "НастройкиКомпоновкиДанных" + Или Строка.Тип = "НастройкиВложенногоОбъектаКомпоновкиДанных" + Или Строка.Тип = "ГруппировкаКомпоновкиДанных" + Или Строка.Тип = "ГруппировкаТаблицыКомпоновкиДанных" + Или Строка.Тип = "ГруппировкаДиаграммыКомпоновкиДанных" Тогда + ИдентификаторЭлементаСтруктуры = Строка.Идентификатор; + Прервать; + КонецЕсли; + Строка = Строка.ПолучитьРодителя(); + КонецЦикла; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("СтруктураВариантаПослеВыбораПоля", ЭтотОбъект, ПараметрыВыполнения); + ВыбратьПоле("СтруктураВарианта", Обработчик, Неопределено, ИдентификаторЭлементаСтруктуры); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьЭлементСтруктурыНастроек(ТипЭлемента) + ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные; + + Результат = ВставитьЭлементСтруктурыНастроек(ТипЭлемента, ТекущаяСтрока, Истина); + ЭлементНастройки = Результат.ЭлементНастройки; + + Строка = Результат.Строка; + Строка.Тип = ЭлементНастройки; + Строка.Заголовок = Строка.Представление; + Строка.ФлажокДоступен = Истина; + Строка.Использование = ЭлементНастройки.Использование; + + ПредставлениеТипаЭлемента = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементНастройки)); + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки(ПредставлениеТипаЭлемента); + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура"); + ПодчиненныеСтроки = Строка.ПолучитьЭлементы(); + + Если Строка.Тип = "ДиаграммаКомпоновкиДанных" Тогда + ЭлементНастройки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + УстановитьПараметрВывода(ЭлементНастройки, "ТипДиаграммы.СоединениеЗначенийПоСериям", ТипСоединенияЗначенийПоСериямДиаграммы.СоединениеКраев); + УстановитьПараметрВывода(ЭлементНастройки, "ТипДиаграммы.ЛинииСоединенияЗначенийПоСериям"); + УстановитьПараметрВывода(ЭлементНастройки, "ТипДиаграммы.ЦветСоединенияЗначенийПоСериям", WebЦвета.СеребристоСерый); + УстановитьПараметрВывода(ЭлементНастройки, "ТипДиаграммы.РежимСглаживания", РежимСглаживанияДиаграммы.ГладкаяКривая); + УстановитьПараметрВывода(ЭлементНастройки, "ТипДиаграммы.РежимПолупрозрачности", РежимПолупрозрачностиДиаграммы.Использовать); + + Строка.Представление = НСтр("ru = 'Диаграмма'"); + + ПодчиненныйЭлементНастройки = ЭлементНастройки.Точки; + ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); + ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки; + ПодчиненнаяСтрока.Подтип = "ДиаграммаТочки"; + ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки); + ПодчиненнаяСтрока.Картинка = -1; + ПодчиненнаяСтрока.Представление = НСтр("ru = 'Точки'"); + + ПодчиненныйЭлементНастройки = ЭлементНастройки.Серии; + ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); + ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки; + ПодчиненнаяСтрока.Подтип = "ДиаграммаСерии"; + ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки); + ПодчиненнаяСтрока.Картинка = -1; + ПодчиненнаяСтрока.Представление = НСтр("ru = 'Серии'"); + ИначеЕсли Строка.Тип = "ТаблицаКомпоновкиДанных" Тогда + Строка.Представление = НСтр("ru = 'Таблица'"); + + ПодчиненныйЭлементНастройки = ЭлементНастройки.Строки; + ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); + ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки; + ПодчиненнаяСтрока.Подтип = "ТаблицаСтроки"; + ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки); + ПодчиненнаяСтрока.Картинка = -1; + ПодчиненнаяСтрока.Представление = НСтр("ru = 'Строки'"); + + ПодчиненныйЭлементНастройки = ЭлементНастройки.Колонки; + ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить(); + ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки; + ПодчиненнаяСтрока.Подтип = "ТаблицаКолонки"; + ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки); + ПодчиненнаяСтрока.Картинка = -1; + ПодчиненнаяСтрока.Представление = НСтр("ru = 'Колонки'"); + КонецЕсли; + + Элементы.СтруктураВарианта.Развернуть(Строка.ПолучитьИдентификатор(), Истина); + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаПослеВыбораПоля(ОписаниеНастройки, ПараметрыВыполнения) Экспорт + Если ОписаниеНастройки = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные; + + СтрокиПеремещаемыеВНовуюГруппировку = Новый Массив; + Если ПараметрыВыполнения.Оборачивать Тогда + Если ПараметрыВыполнения.СледующийУровень Тогда + Найденные = ТекущаяСтрока.ПолучитьЭлементы(); + Для Каждого ПеремещаемаяСтрока Из Найденные Цикл + СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ПеремещаемаяСтрока); + КонецЦикла; + Иначе + СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ТекущаяСтрока); + КонецЕсли; + КонецЕсли; + + // Добавление новой группировки. + Результат = ВставитьЭлементСтруктурыНастроек(Тип("ГруппировкаКомпоновкиДанных"), ТекущаяСтрока, ПараметрыВыполнения.СледующийУровень); + + ЭлементНастройки = Результат.ЭлементНастройки; + ЭлементНастройки.Использование = Истина; + ЭлементНастройки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + ЭлементНастройки.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); + + Если ОписаниеНастройки = "<>" Тогда + // Детальные записи - добавлять поле не требуется. + Представление = НСтр("ru = '<Детальные записи>'"); + Иначе + ПолеГруппировки = ЭлементНастройки.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ПолеГруппировки.Использование = Истина; + ПолеГруппировки.Поле = ОписаниеНастройки.Поле; + Представление = ОписаниеНастройки.Заголовок; + КонецЕсли; + + Строка = Результат.Строка; + Строка.Использование = ЭлементНастройки.Использование; + Строка.Представление = Представление; + Строка.ФлажокДоступен = Истина; + Строка.Тип = ЭлементНастройки; + + ТипЭлемента = Тип(Строка.Тип); + ПредставлениеТипаЭлемента = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЭлемента); + СостояниеЭлемента = ?(Строка.ПометкаУдаления, "ПометкаУдаления", Неопределено); + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки(ПредставлениеТипаЭлемента, СостояниеЭлемента); + + Если Не ПараметрыВыполнения.СледующийУровень Тогда + Строка.Заголовок = ТекущаяСтрока.Заголовок; + ОбновитьЗаголовокЭлементаСтруктурыВарианта(Строка); + ТекущаяСтрока.Заголовок = ""; + ОбновитьЗаголовокЭлементаСтруктурыВарианта(ТекущаяСтрока); + КонецЕсли; + + // Перемещение текущей группировки в новую. + Для Каждого ПеремещаемаяСтрока Из СтрокиПеремещаемыеВНовуюГруппировку Цикл + Результат = ПереместитьЭлементыСтруктурыВарианта(ПеремещаемаяСтрока, Строка); + КонецЦикла; + + Элементы.СтруктураВарианта.Развернуть(Строка.ПолучитьИдентификатор(), Истина); + Элементы.СтруктураВарианта.ТекущаяСтрока = Строка.ПолучитьИдентификатор(); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Функция ВставитьЭлементСтруктурыНастроек(ТипЭлемента, Строка, СледующийУровень) + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура"); + + Если Строка = Неопределено Тогда + Строка = СтруктураВарианта; + Индекс = Неопределено; + ИндексЭлементаНастройки = Неопределено; + КонецЕсли; + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + + Если СледующийУровень Тогда + Строки = Строка.ПолучитьЭлементы(); + Индекс = Неопределено; + + ЭлементыНастроек = ЭлементыНастроек(СвойствоЭлементаСтруктуры, ЭлементНастройки); + ИндексЭлементаНастройки = Неопределено + Иначе // Вставка на один уровень со строкой. + Родитель = ПолучитьРодителя("СтруктураВарианта", Строка); + Строки = Родитель.ПолучитьЭлементы(); + Индекс = Строки.Индекс(Строка) + 1; + + РодительЭлементаНастройки = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементНастройки); + ЭлементыНастроек = ЭлементыНастроек(СвойствоЭлементаСтруктуры, РодительЭлементаНастройки); + ИндексЭлементаНастройки = ЭлементыНастроек.Индекс(ЭлементНастройки) + 1; + КонецЕсли; + + Если Индекс = Неопределено Тогда + НоваяСтрока = Строки.Добавить(); + Иначе + НоваяСтрока = Строки.Вставить(Индекс); + КонецЕсли; + + Если ОтчетыКлиент.ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипЗнч(ЭлементыНастроек)) Тогда + Если ИндексЭлементаНастройки = Неопределено Тогда + НовыйЭлементНастройки = ЭлементыНастроек.Добавить(ТипЭлемента); + Иначе + НовыйЭлементНастройки = ЭлементыНастроек.Вставить(ИндексЭлементаНастройки, ТипЭлемента); + КонецЕсли; + Иначе + Если ИндексЭлементаНастройки = Неопределено Тогда + НовыйЭлементНастройки = ЭлементыНастроек.Добавить(); + Иначе + НовыйЭлементНастройки = ЭлементыНастроек.Вставить(ИндексЭлементаНастройки); + КонецЕсли; + КонецЕсли; + Элементы.СтруктураВарианта.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); + НоваяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(НовыйЭлементНастройки); + + Результат = Новый Структура("Строка, СвойствоЭлементаСтруктуры, ЭлементНастройки"); + Результат.Строка = НоваяСтрока; + Результат.СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктуры; + Результат.ЭлементНастройки = НовыйЭлементНастройки; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция ПереместитьЭлементыСтруктурыВарианта(Знач Строка, Знач НовыйРодитель, + Знач ПередЧемВставить = Неопределено, Знач Индекс = Неопределено, Знач ИндексЭлементаНастройки = Неопределено) + + Результат = Новый Структура("Строка, ЭлементНастройки, Индекс, ИндексЭлементаНастройки"); + + ДобавлятьВКонец = (НовыйРодитель = Неопределено); + КудаВставить = ПолучитьЭлементы(СтруктураВарианта, НовыйРодитель); + + УзелКД = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура"); + + ЭлементКД = ЭлементНастройки(УзелКД, Строка); + НовыйРодительКД = ЭлементНастройки(УзелКД, НовыйРодитель); + КудаВставитьКД = ЭлементыНастроек(УзелКД, НовыйРодительКД); + ПередЧемВставитьКД = ЭлементНастройки(УзелКД, ПередЧемВставить); + + СтарыйРодитель = ПолучитьРодителя("СтруктураВарианта", Строка); + ОткудаПереместить = ПолучитьЭлементы(СтруктураВарианта, СтарыйРодитель); + + СтарыйРодительКД = ЭлементНастройки(УзелКД, СтарыйРодитель); + ОткудаПереместитьКД = ЭлементыНастроек(УзелКД, СтарыйРодительКД); + + Если ЭлементКД = ПередЧемВставитьКД Тогда + Результат.ЭлементНастройки = ЭлементКД; + Результат.Строка = Строка; + Иначе + Если Индекс = Неопределено Или ИндексЭлементаНастройки = Неопределено Тогда + Если ПередЧемВставитьКД = Неопределено Тогда + Если ДобавлятьВКонец Тогда + Индекс = КудаВставить.Количество(); + ИндексЭлементаНастройки = КудаВставитьКД.Количество(); + Иначе + Индекс = 0; + ИндексЭлементаНастройки = 0; + КонецЕсли; + Иначе + Индекс = КудаВставить.Индекс(ПередЧемВставить); + ИндексЭлементаНастройки = КудаВставитьКД.Индекс(ПередЧемВставитьКД); + Если СтарыйРодитель = НовыйРодитель Тогда + СтарыйИндекс = ОткудаПереместить.Индекс(Строка); + Если СтарыйИндекс <= Индекс Тогда + Индекс = Индекс + 1; + ИндексЭлементаНастройки = ИндексЭлементаНастройки + 1; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ПоискЭлементовКД = Новый Соответствие; + Результат.ЭлементНастройки = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКД, КудаВставитьКД, ИндексЭлементаНастройки, ПоискЭлементовКД); + + ПоискСтрокТаблицы = Новый Соответствие; + Результат.Строка = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, Строка, КудаВставить, Индекс, ПоискСтрокТаблицы); + + Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл + СтараяСтрока = КлючИЗначение.Ключ; + НоваяСтрока = КлючИЗначение.Значение; + НоваяСтрока.Идентификатор = ПоискЭлементовКД.Получить(СтараяСтрока.Идентификатор); + КонецЦикла; + + ОткудаПереместить.Удалить(Строка); + ОткудаПереместитьКД.Удалить(ЭлементКД); + КонецЕсли; + + Результат.Индекс = КудаВставить.Индекс(Результат.Строка); + Результат.ИндексЭлементаНастройки = КудаВставитьКД.Индекс(Результат.ЭлементНастройки); + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура СтруктураВариантаПриИзмененииТекущейСтроки() + Строка = Элементы.СтруктураВарианта.ТекущиеДанные; + Если Строка <> Неопределено Тогда + УстановитьСвойстваЭлементовСтруктурыВарианта(Строка.ПолучитьИдентификатор()); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура УстановитьСвойстваЭлементовСтруктурыВарианта(ИдентификаторСтроки) + Строка = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторСтроки); + Родитель = Строка.ПолучитьРодителя(); + ЕстьПодчиненные = (Строка.ПолучитьЭлементы().Количество() > 0); + ЕстьСоседние = ПолучитьЭлементы(СтруктураВарианта, Родитель).Количество() > 1; + + МожноДобавлятьВложенные = (Строка.Тип <> "ТаблицаКомпоновкиДанных" + И Строка.Тип <> "ДиаграммаКомпоновкиДанных"); + + МожноГруппировать = (Строка.Тип <> "НастройкиКомпоновкиДанных" + И Строка.Тип <> "НастройкиВложенногоОбъектаКомпоновкиДанных" + И Строка.Тип <> "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных" + И Строка.Тип <> "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных"); + + МожноОткрывать = (Строка.Тип <> "НастройкиКомпоновкиДанных" + И Строка.Тип <> "НастройкиВложенногоОбъектаКомпоновкиДанных" + И Строка.Тип <> "ТаблицаКомпоновкиДанных" + И Строка.Тип <> "ДиаграммаКомпоновкиДанных" + И Строка.Тип <> "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных" + И Строка.Тип <> "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных"); + + МожноУдалятьИПеремещать = (Строка.Тип <> "НастройкиКомпоновкиДанных" + И Строка.Тип <> "НастройкиВложенногоОбъектаКомпоновкиДанных" + И Строка.Тип <> "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных" + И Строка.Тип <> "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных"); + + МожноДобавлятьТаблицыИДиаграммы = (Строка.Тип = "НастройкиКомпоновкиДанных" + Или Строка.Тип = "НастройкиВложенногоОбъектаКомпоновкиДанных" + Или Строка.Тип = "ГруппировкаКомпоновкиДанных"); + + РодителяМожноПеремещать = (Родитель <> Неопределено + И Родитель.Тип <> "НастройкиКомпоновкиДанных" + И Родитель.Тип <> "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных" + И Родитель.Тип <> "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных"); + + Элементы.СтруктураВарианта_Добавить.Доступность = МожноДобавлятьВложенные; + Элементы.СтруктураВарианта_Добавить1.Доступность = МожноДобавлятьВложенные; + Элементы.СтруктураВарианта_Изменить.Доступность = МожноОткрывать; + Элементы.СтруктураВарианта_Изменить1.Доступность = МожноОткрывать; + Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_ДобавитьТаблицу1.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_ДобавитьДиаграмму1.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_Удалить.Доступность = МожноУдалятьИПеремещать; + Элементы.СтруктураВарианта_Удалить1.Доступность = МожноУдалятьИПеремещать; + Элементы.СтруктураВарианта_Сгруппировать.Доступность = МожноГруппировать; + Элементы.СтруктураВарианта_Сгруппировать1.Доступность = МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьВышеИЛевее.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьВышеИЛевее1.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьНижеИПравее.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьНижеИПравее1.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьВверх.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + Элементы.СтруктураВарианта_ПереместитьВверх1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + Элементы.СтруктураВарианта_ПереместитьВниз.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + Элементы.СтруктураВарианта_ПереместитьВниз1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьЭлементСтруктуры(Строка, ИмяСтраницы = Неопределено, ИспользоватьФормуВарианта = Неопределено) + Если Строка = Неопределено Тогда + Строки = СтруктураВарианта.ПолучитьЭлементы(); + Если Строки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Строка = Строки[0]; + КонецЕсли; + + Если ИспользоватьФормуВарианта = Неопределено Тогда + ИспользоватьФормуВарианта = (Строка.Тип = "ТаблицаКомпоновкиДанных" + Или Строка.Тип = "НастройкиВложенногоОбъектаКомпоновкиДанных"); + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ИзменитьЭлементСтруктурыЗавершение", ЭтотОбъект); + + ШаблонЗаголовка = НСтр("ru = 'Настройка %1 отчета ""%2""'"); + Если Строка.Тип = "ДиаграммаКомпоновкиДанных" Тогда + ПредставлениеЭлемента = НСтр("ru = 'диаграммы'"); + Иначе + ПредставлениеЭлемента = НСтр("ru = 'группировки'"); + КонецЕсли; + + Если ЗначениеЗаполнено(Строка.Заголовок) Тогда + ПредставлениеЭлемента = ПредставлениеЭлемента + " """ + Строка.Заголовок + """"; + ИначеЕсли ЗначениеЗаполнено(Строка.Представление) Тогда + ПредставлениеЭлемента = ПредставлениеЭлемента + " """ + Строка.Представление + """"; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование); + ПараметрыФормы.Вставить("ИдентификаторЭлементаСтруктурыНастроек", Строка.Идентификатор); + ПараметрыФормы.Вставить("ТипЭлементаСтруктурыНастроек", Строка.Тип); + ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗаголовка, ПредставлениеЭлемента, ВариантНаименование)); + Если ИмяСтраницы <> Неопределено Тогда + ПараметрыФормы.Вставить("ИмяСтраницы", ИмяСтраницы); + КонецЕсли; + + ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров); + Если ВыполнятьЗамеры Тогда + МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); + ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.ЗамерВремени( + НастройкиОтчета.КлючЗамеров + ".Настройки", Ложь, Ложь); + МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(ИдентификаторЗамера, НастройкиОтчета.ПрефиксЗамеров); + КонецЕсли; + + ИмяОткрываемойФормы = НастройкиОтчета.ПолноеИмя + ?(ИспользоватьФормуВарианта, ".ФормаВарианта", ".ФормаНастроек"); + ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы, ЭтотОбъект,,,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьЭлементСтруктурыЗавершение(Результат, Контекст) Экспорт + Если ТипЗнч(Результат) <> Тип("Структура") + Или Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + + Если Результат.ВариантМодифицирован Тогда + ОбновитьФорму(Результат); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область Общее + +#Область ОбработчикиОповещений + +&НаКлиенте +Функция ПараметрыЗаполненияСписка(ЗакрыватьПриВыборе = Ложь, МножественныйВыбор = Истина, ДобавлятьСтроку = Истина) + ПараметрыЗаполнения = Новый Структура("ПутьКСписку, Индекс, Владелец, ВыбранныйТип, ВыборГруппИЭлементов"); + ПараметрыЗаполнения.Вставить("ДобавлятьСтроку", ДобавлятьСтроку); + // Стандартные параметры формы. + ПараметрыЗаполнения.Вставить("ЗакрыватьПриВыборе", ЗакрыватьПриВыборе); + ПараметрыЗаполнения.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + ПараметрыЗаполнения.Вставить("Отбор", Новый Структура); + // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка). + ПараметрыЗаполнения.Вставить("МножественныйВыбор", МножественныйВыбор); + ПараметрыЗаполнения.Вставить("РежимВыбора", Истина); + // Предполагаемые реквизиты. + ПараметрыЗаполнения.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыЗаполнения.Вставить("РазрешитьНачалоПеретаскивания", Ложь); + + Возврат ПараметрыЗаполнения; +КонецФункции + +&НаКлиенте +Процедура НачатьЗаполнениеСписка(Элемент, ПараметрыЗаполнения) + Список = ЭтотОбъект[ПараметрыЗаполнения.ПутьКСписку]; + ПолеСписка = Элементы[ПараметрыЗаполнения.ПутьКСписку]; + ПолеЗначения = Элементы[ПараметрыЗаполнения.ПутьКСписку + "Значение"]; + + Сведения = ОтчетыКлиент.СведенияОЭлементеНастройки(Отчет.КомпоновщикНастроек, ПараметрыЗаполнения.Индекс); + + Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки(Сведения.ЭлементПользовательскойНастройки, Сведения.Описание); + ПолеЗначения.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы( + Сведения.Описание.ВыборГруппИЭлементов, Условие); + ПараметрыЗаполнения.ВыборГруппИЭлементов = ОтчетыКлиент.ЗначениеТипаИспользованиеГруппИЭлементов( + Сведения.Описание.ВыборГруппИЭлементов, Условие); + + РасширенноеОписаниеТипов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства, "РасширенноеОписаниеТипов", Новый Соответствие); + + РасширенноеОписаниеТипа = РасширенноеОписаниеТипов[ПараметрыЗаполнения.Индекс]; + Если РасширенноеОписаниеТипа <> Неопределено Тогда + Список.ТипЗначения = РасширенноеОписаниеТипа.ОписаниеТиповДляФормы; + КонецЕсли; + Список.ТипЗначения = ОписаниеТиповБезПримитивных(Список.ТипЗначения); + + ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; + + ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора(Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент); + ПараметрыЗаполнения.Вставить("ПараметрыВыбора", ПараметрыВыбора); + + Список.ТипЗначения = ОтчетыКлиент.ТипЗначенияОграниченныйСвязьюПоТипу( + Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент, Сведения.Описание, Список.ТипЗначения); + + Типы = Список.ТипЗначения.Типы(); + Если Типы.Количество() = 0 Тогда + Если ПараметрыЗаполнения.ДобавлятьСтроку Тогда + ПолеСписка.ДобавитьСтроку(); + КонецЕсли; + Возврат; + КонецЕсли; + + Если Типы.Количество() = 1 Тогда + ПараметрыЗаполнения.ВыбранныйТип = Типы[0]; + ЗавершитьЗаполнениеСписка(-1, ПараметрыЗаполнения); + Возврат; + КонецЕсли; + + ДоступныеТипы = Новый СписокЗначений; + ДоступныеТипы.ЗагрузитьЗначения(Типы); + + Обработчик = Новый ОписаниеОповещения("ЗавершитьЗаполнениеСписка", ЭтотОбъект, ПараметрыЗаполнения); + ПоказатьВыборИзМеню(Обработчик, ДоступныеТипы, Элемент); +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьЗаполнениеСписка(ВыбранныйЭлемент, ПараметрыЗаполнения) Экспорт + Если ВыбранныйЭлемент = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ВыбранныйЭлемент <> -1 Тогда + ПараметрыЗаполнения.ВыбранныйТип = ВыбранныйЭлемент.Значение; + КонецЕсли; + + ПараметрыПодбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства, "ПараметрыПодбора", Новый Соответствие); + + ПутьКФорме = ПараметрыПодбора[ПараметрыЗаполнения.Индекс]; + Если Не ЗначениеЗаполнено(ПутьКФорме) Тогда + ПутьКФорме = ПараметрыПодбора[ПараметрыЗаполнения.ВыбранныйТип]; + КонецЕсли; + + Для Каждого Параметр Из ПараметрыЗаполнения.ПараметрыВыбора Цикл + Если Не ЗначениеЗаполнено(Параметр.Имя) Тогда + Продолжить; + КонецЕсли; + + Если СтрНачинаетсяС(ВРег(Параметр.Имя), "ОТБОР.") Тогда + ПараметрыЗаполнения.Отбор.Вставить(Сред(Параметр.Имя, 7), Параметр.Значение); + Иначе + ПараметрыЗаполнения.Вставить(Параметр.Имя, Параметр.Значение); + КонецЕсли; + КонецЦикла; + + Владелец = ПараметрыЗаполнения.Владелец; + ПараметрыЗаполнения.Удалить("Владелец"); + + ОткрытьФорму(ПутьКФорме, ПараметрыЗаполнения, Владелец); +КонецПроцедуры + +&НаКлиенте +Процедура ВставитьИзБуфераЗавершение(НайденныеОбъекты, ПутьКСписку) Экспорт + Если НайденныеОбъекты = Неопределено Тогда + Возврат; + КонецЕсли; + + Список = ЭтотОбъект[ПутьКСписку]; + + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; + + Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку]; + ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс]; + + Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Если ЭлементНастройки.ПравоеЗначение = Неопределено Тогда + ЭлементНастройки.ПравоеЗначение = Новый СписокЗначений; + КонецЕсли; + Отмеченные = ЭлементНастройки.ПравоеЗначение; + Иначе + Отмеченные = ЭлементНастройки.Значение; + КонецЕсли; + + Для Каждого Значение Из НайденныеОбъекты Цикл + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, Значение, Неопределено, Истина); + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Отмеченные, Значение, Неопределено, Истина); + КонецЦикла; + + ЭлементНастройки.Использование = Истина; + + ОтчетыКлиент.ОбновитьСвойстваНастройки(ЭтотОбъект, КомпоновщикНастроек, ЭлементНастройки); + ОформитьСписок(Элементы[ПутьКСписку], ЭлементНастройки); +КонецПроцедуры + +#КонецОбласти + +&НаКлиентеНаСервереБезКонтекста +Функция СвойствоЭлементаСтруктурыНастроек(КомпоновщикНастроек, Ключ, ИдентификаторЭлемента = Неопределено, Режим = Неопределено) + Настройки = КомпоновщикНастроек.Настройки; + + Если Ключ = "Структура" Тогда + Возврат Настройки; + КонецЕсли; + + ЭлементСтруктуры = ЭлементСтруктурыНастроек(Настройки, ИдентификаторЭлемента); + + ТипЭлементаСтруктуры = ТипЗнч(ЭлементСтруктуры); + Если ЭлементСтруктуры = Неопределено + Или (ТипЭлементаСтруктуры = Тип("ТаблицаКомпоновкиДанных") И Ключ <> "Выбор" И Ключ <> "УсловноеОформление") + Или (ТипЭлементаСтруктуры = Тип("ДиаграммаКомпоновкиДанных") И Ключ <> "Выбор" И Ключ <> "УсловноеОформление") + Или (ТипЭлементаСтруктуры = Тип("НастройкиКомпоновкиДанных") И Ключ = "ПоляГруппировки") + Или (ТипЭлементаСтруктуры = Тип("ГруппировкаКомпоновкиДанных") И Ключ = "ПараметрыДанных") + Или (ТипЭлементаСтруктуры = Тип("ГруппировкаТаблицыКомпоновкиДанных") И Ключ = "ПараметрыДанных") + Или (ТипЭлементаСтруктуры = Тип("ГруппировкаДиаграммыКомпоновкиДанных") И Ключ = "ПараметрыДанных") Тогда + Возврат Неопределено; + КонецЕсли; + + СвойствоЭлементаСтруктуры = ЭлементСтруктуры[Ключ]; + + Если Режим = 0 + И (ТипЗнч(СвойствоЭлементаСтруктуры) = Тип("ВыбранныеПоляКомпоновкиДанных") + Или ТипЗнч(СвойствоЭлементаСтруктуры) = Тип("ПорядокКомпоновкиДанных")) + И ЗначениеЗаполнено(СвойствоЭлементаСтруктуры.ИдентификаторПользовательскойНастройки) Тогда + + СвойствоЭлементаСтруктуры = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти( + СвойствоЭлементаСтруктуры.ИдентификаторПользовательскойНастройки); + КонецЕсли; + + Возврат СвойствоЭлементаСтруктуры; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ЭлементСтруктурыНастроек(Настройки, ИдентификаторЭлемента) + Если ТипЗнч(ИдентификаторЭлемента) = Тип("ИдентификаторКомпоновкиДанных") Тогда + ЭлементСтруктуры = Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторЭлемента); + Иначе + ЭлементСтруктуры = Настройки; + КонецЕсли; + + Возврат ЭлементСтруктуры; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция КлючСвойстваЭлементаСтруктурыНастроек(ИмяКоллекции, Строка) + Ключ = Неопределено; + + Если ИмяКоллекции = "СоставГруппировки" Тогда + Ключ = "ПоляГруппировки"; + ИначеЕсли ИмяКоллекции = "Параметры" Или ИмяКоллекции = "Отборы" Тогда + Если Строка.Свойство("ЭтоПараметр") И Строка.ЭтоПараметр Тогда + Ключ = "ПараметрыДанных"; + Иначе + Ключ = "Отбор"; + КонецЕсли; + ИначеЕсли ИмяКоллекции = "ВыбранныеПоля" Тогда + Ключ = "Выбор"; + ИначеЕсли ИмяКоллекции = "Сортировка" Тогда + Ключ = "Порядок"; + ИначеЕсли ИмяКоллекции = "Оформление" Тогда + Если Строка.Свойство("ЭтоПараметрВывода") И Строка.ЭтоПараметрВывода Тогда + Ключ = "ПараметрыВывода"; + Иначе + Ключ = "УсловноеОформление"; + КонецЕсли; + ИначеЕсли ИмяКоллекции = "СтруктураВарианта" Тогда + Ключ = "Структура"; + КонецЕсли; + + Возврат Ключ; +КонецФункции + +&НаКлиенте +Процедура УдалитьСтроки(Элемент, Отказ) + Отказ = Истина; + + ИдентификаторыСтрок = Элемент.ВыделенныеСтроки; + + Индекс = ИдентификаторыСтрок.ВГраница(); + Пока Индекс >= 0 Цикл + Строка = ЭтотОбъект[Элемент.Имя].НайтиПоИдентификатору(ИдентификаторыСтрок[Индекс]); + Индекс = Индекс - 1; + + Если ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") + Или (Строка.Свойство("ЭтоРаздел") И Строка.ЭтоРаздел) + Или (Строка.Свойство("ЭтоПараметр") И Строка.ЭтоПараметр) + Или (Строка.Свойство("ЭтоПараметрВывода") И Строка.ЭтоПараметрВывода) Тогда + Продолжить; + КонецЕсли; + + Строки = ПолучитьРодителя(Элемент.Имя, Строка).ПолучитьЭлементы(); + Если Строки.Индекс(Строка) < 0 Тогда + Продолжить; + КонецЕсли; + + КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек(Элемент.Имя, Строка); + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + Если ТипЗнч(ЭлементНастройки) = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + Или ТипЗнч(ЭлементНастройки) = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + РодительЭлементаНастройки = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементНастройки); + ИмяКоллекции = ИмяКоллекцииНастроекПоИдентификатору(Строка.Идентификатор); + ЭлементыНастроек = ЭлементыНастроек(СвойствоЭлементаСтруктуры, РодительЭлементаНастройки, ИмяКоллекции); + + ЭлементыНастроек.Удалить(ЭлементНастройки); + Строки.Удалить(Строка); + КонецЦикла; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьИспользование(ИмяКоллекции, Использование = Истина, Строки = Неопределено) + Если Строки = Неопределено Тогда + КорневаяСтрока = КорневаяСтрокаПоУмолчанию(ИмяКоллекции); + Если КорневаяСтрока = Неопределено Тогда + Возврат; + КонецЕсли; + + Строки = КорневаяСтрока.ПолучитьЭлементы(); + КонецЕсли; + + Для Каждого Строка Из Строки Цикл + Строка.Использование = Использование; + + КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек(ИмяКоллекции, Строка); + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + Если Тип(ЭлементНастройки) <> Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + И Тип(ЭлементНастройки) <> Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда + ЭлементНастройки.Использование = Использование; + КонецЕсли; + + ИзменитьИспользование(ИмяКоллекции, Использование, Строка.ПолучитьЭлементы()); + КонецЦикла; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьИспользованиеЭлементаНастройки(ИмяКоллекции) + Строка = Элементы[ИмяКоллекции].ТекущиеДанные; + + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; + + КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек(ИмяКоллекции, Строка); + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + ЭлементНастройки.Использование = Строка.Использование; + + Если Строка.Свойство("ЭтоПараметрВывода") + И Строка.ЭтоПараметрВывода + И Строка(Строка.Идентификатор) = "DATAPARAMETERSOUTPUT" Тогда + + ЭлементНастройки.Использование = Истина; + ЭлементНастройки.Значение = ?(Строка.Использование, + ТипВыводаТекстаКомпоновкиДанных.Авто, ТипВыводаТекстаКомпоновкиДанных.НеВыводить); + КонецЕсли; + + Если РасширенныйРежим = 0 И ИмяКоллекции = "СтруктураВарианта" Тогда + ЭлементПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти( + ЭлементНастройки.ИдентификаторПользовательскойНастройки); + Если ЭлементПользовательскойНастройки <> Неопределено Тогда + ЭлементПользовательскойНастройки.Использование = ЭлементНастройки.Использование; + КонецЕсли; + КонецЕсли; + + ИзменитьИспользованиеСвязанныхЭлементовНастроек(ИмяКоллекции, Строка, ЭлементНастройки); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьИспользованиеСвязанныхЭлементовНастроек(ИмяКоллекции, Строка, ЭлементНастройки) + Если ИмяКоллекции = "СоставГруппировки" Тогда + СвязаннаяКоллекция = "ВыбранныеПоля"; + ИначеЕсли ИмяКоллекции = "ВыбранныеПоля" Тогда + СвязаннаяКоллекция = "СоставГруппировки"; + Иначе + СвязаннаяКоллекция = Неопределено; + КонецЕсли; + + Если СвязаннаяКоллекция <> Неопределено И ЗначениеЗаполнено(Строка.Поле) Тогда + Условие = Новый Структура("Поле", Строка.Поле); + ИзменитьИспользованиеПоУсловию(СвязаннаяКоллекция, Условие, Строка.Использование); + ИначеЕсли Строка.Свойство("ЭтоПараметрВывода") И Строка.ЭтоПараметрВывода Тогда + СинхронизироватьПредопределенныеПараметрыВывода(Строка.Использование, ЭлементНастройки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьИспользованиеПоУсловию(ИмяКоллекции, Условие, Использование) + Коллекция = ЭтотОбъект[ИмяКоллекции]; + Найденные = ОтчетыКлиентСервер.НайтиСтрокиТаблицы(Коллекция, Условие); + + СвойствоЭлементаСтруктуры = Неопределено; + Для Каждого Строка Из Найденные Цикл + Если Строка.Использование = Использование Тогда + Продолжить; + КонецЕсли; + + Если СвойствоЭлементаСтруктуры = Неопределено Тогда + КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек(ИмяКоллекции, Строка); + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + КонецЕсли; + + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + Если ЭлементНастройки <> Неопределено Тогда + Строка.Использование = Использование; + ЭлементНастройки.Использование = Использование; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура УстановитьПометкуУдаления(ИмяКоллекции, Строка) + Строка.ПометкаУдаления = Истина; + + Если ИмяКоллекции = "Оформление" Тогда + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Ошибка"); + Иначе + Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент", "ПометкаУдаления"); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент + &НаКлиенте Процедура ЗаписатьИЗакрыть(Переформировать) ОповеститьОВыборе(РезультатВыбора(Переформировать)); @@ -2439,7 +4658,7 @@ Функция РезультатВыбора(Переформировать) РезультатВыбораСформирован = Истина; - Если РежимИзмененияУзлаВарианта И Не Переформировать Тогда + Если РежимИзмененияЭлементаСтруктурыНастроек И Не Переформировать Тогда Возврат Неопределено; КонецЕсли; @@ -2448,217 +4667,44 @@ РезультатВыбора.Вставить("Переформировать", Переформировать); РезультатВыбора.Вставить("ВариантМодифицирован", ВариантИзменен); РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", ВариантИзменен Или ПользовательскиеНастройкиМодифицированы); + РезультатВыбора.Вставить("СброситьПользовательскиеНастройки", РасширенныйРежим = 1); РезультатВыбора.Вставить("ФормаНастроекРасширенныйРежим", РасширенныйРежим); РезультатВыбора.Вставить("ФормаНастроекИмяСтраницы", Элементы.СтраницыНастроек.ТекущаяСтраница.Имя); - - Если РезультатВыбора.ВариантМодифицирован Тогда - РезультатВыбора.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); - КонецЕсли; - Если РезультатВыбора.ПользовательскиеНастройкиМодифицированы Тогда - РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); - КонецЕсли; - Если ВариантИзменен И РасширенныйРежим = 1 Тогда - РезультатВыбора.Вставить("СброситьПользовательскиеНастройки", Истина); - КонецЕсли; + РезультатВыбора.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); Возврат РезультатВыбора; КонецФункции -&НаКлиенте -Функция НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента) Экспорт - // Для пользовательских настроек хранятся идентификаторы компоновки данных, - // поскольку они не могут храниться по ссылке (происходит копирование значения). - Если ИдентификаторЭлемента = "Сортировка" Тогда - Если РежимИзмененияУзлаВарианта Тогда - КорневойУзел = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); - Возврат КорневойУзел.Порядок; - ИначеЕсли РасширенныйРежим = 1 Тогда - Возврат Отчет.КомпоновщикНастроек.Настройки.Порядок; - Иначе - ИдентификаторЭлемента = ИдентификаторЭлемента; - КонецЕсли; - ИначеЕсли ИдентификаторЭлемента = "ВыбранныеПоля" Тогда - Если РежимИзмененияУзлаВарианта Тогда - КорневойУзел = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); - Возврат КорневойУзел.Выбор; - ИначеЕсли РасширенныйРежим = 1 Тогда - Возврат Отчет.КомпоновщикНастроек.Настройки.Выбор; - Иначе - ИдентификаторЭлемента = ИдентификаторЭлемента; - КонецЕсли; - ИначеЕсли ИдентификаторЭлемента = "Отборы" Тогда - Если РежимИзмененияУзлаВарианта Тогда - КорневойУзел = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); - Возврат КорневойУзел.Отбор; - ИначеЕсли РасширенныйРежим = 1 Тогда - Возврат Отчет.КомпоновщикНастроек.Настройки.Отбор; - Иначе - ИдентификаторЭлемента = ИдентификаторЭлемента; - КонецЕсли; - ИначеЕсли ИдентификаторЭлемента = "СтруктураВарианта" Тогда - Если РасширенныйРежим = 1 Тогда - Возврат Отчет.КомпоновщикНастроек.Настройки; - Иначе - Возврат Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; - КонецЕсли; - КонецЕсли; - ИдентификаторКД = БыстрыйПоискПользовательскихНастроек.Получить(ИдентификаторЭлемента); - Возврат Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); -КонецФункции - -&НаКлиенте -Функция НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента) Экспорт - // Для пользовательских настроек хранятся идентификаторы компоновки данных, - // поскольку они не могут храниться по ссылке (происходит копирование значения). - ВсеДополнительныеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, "ЭлементыФормы"); - Если ВсеДополнительныеНастройки = Неопределено Тогда - Возврат Неопределено; - Иначе - Возврат ВсеДополнительныеНастройки[ИдентификаторЭлемента]; - КонецЕсли; -КонецФункции - -&НаКлиенте -Процедура ЗаполнитьБыстрыеНастройкиКлиент(ПараметрыЗаполнения = Неопределено) - Если ПараметрыЗаполнения = Неопределено Тогда - ПараметрыЗаполнения = Новый Структура("ИмяСобытия", "ПослеИзмененияКоллекции"); - КонецЕсли; - ПараметрыЗаполненияНаКлиенте = ПараметрыЗаполнения; - ПодключитьОбработчикОжидания("ЗаполнитьБыстрыеНастройкиОтложенно", 0.1, Истина); -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьБыстрыеНастройкиОтложенно() - БыстрыеНастройкиЗаполнить(ПараметрыЗаполненияНаКлиенте); - ПоказатьРезультатЗаполненияНастроек(); -КонецПроцедуры - -&НаКлиенте -Процедура ПоказатьРезультатЗаполненияНастроек() - Если ТипЗнч(РезультатЗаполненияНастроек) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; +&НаКлиентеНаСервереБезКонтекста +Функция ПредопределенныеПараметрыВывода(Настройки) + ПредопределенныеПараметры = Новый Структура("TITLE, TITLEOUTPUT, DATAPARAMETERSOUTPUT, FILTEROUTPUT"); - // Для платформы (переопределение доступных значений на клиенте). - СвоиСпискиВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатЗаполненияНастроек, "СвоиСпискиВыбора"); - Если ТипЗнч(СвоиСпискиВыбора) = Тип("Массив") Тогда - Для Каждого ИдентификаторЭлемента Из СвоиСпискиВыбора Цикл - НастройкаВарианта = НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента); - Если НастройкаВарианта = Неопределено Тогда - Продолжить; - КонецЕсли; - ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - Если ДополнительныеНастройки = Неопределено Тогда - Продолжить; - КонецЕсли; - Тип = ТипЗнч(НастройкаВарианта.ЭлементКД); - Если Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ДоступныеПараметры = НастройкаВарианта.УзелКД.ДоступныеПараметры; - Если ДоступныеПараметры = Неопределено Тогда - Продолжить; - КонецЕсли; - ДоступнаяНастройкаКД = ДоступныеПараметры.НайтиПараметр(НастройкаВарианта.ЭлементКД.Параметр); - ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ДоступныеПоляОтбора = НастройкаВарианта.УзелКД.ДоступныеПоляОтбора; - Если ДоступныеПоляОтбора = Неопределено Тогда - Продолжить; - КонецЕсли; - ДоступнаяНастройкаКД = ДоступныеПоляОтбора.НайтиПоле(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); - КонецЕсли; - Если ДоступнаяНастройкаКД = Неопределено - Или ТипЗнч(ДоступнаяНастройкаКД.ДоступныеЗначения) <> Тип("СписокЗначений") Тогда - Продолжить; - КонецЕсли; - Попытка - ДоступнаяНастройкаКД.ДоступныеЗначения.Очистить(); - Для Каждого Элемент Из ДополнительныеНастройки.ЗначенияДляВыбора Цикл - ЗаполнитьЗначенияСвойств(ДоступнаяНастройкаКД.ДоступныеЗначения.Добавить(), Элемент); - КонецЦикла; - Исключение - Продолжить; - КонецПопытки; - КонецЦикла; - КонецЕсли; - - // Разворачивание узлов деревьев. - РазвернутьУзлыДеревьев = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатЗаполненияНастроек, "РазвернутьУзлыДеревьев"); - Если ТипЗнч(РазвернутьУзлыДеревьев) = Тип("Массив") Тогда - Для Каждого ИмяЭлементаФормы Из РазвернутьУзлыДеревьев Цикл - СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, ИмяЭлементаФормы, "*", Истина); - КонецЦикла; - КонецЕсли; - - РезультатЗаполненияНастроек.Очистить(); - РезультатЗаполненияНастроек = Неопределено; -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьПараметрВывода(ЭлементКД, Имя, Значение = Неопределено, Использование = Истина) - ПараметрКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя)); - Если ПараметрКД = Неопределено Тогда - Возврат; - КонецЕсли; - Если Значение <> Неопределено Тогда - ПараметрКД.Значение = Значение; - КонецЕсли; - Если Использование <> Неопределено Тогда - ПараметрКД.Использование = Использование; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьПараметрыУниверсальногоОтчета(ПользовательскаяНастройкаКД) - - НеобходимоОбновитьНастройки = Ложь; - ОчищаемыеПараметры = Новый Массив; - - ПараметрТипОбъектаМетаданных = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТипОбъектаМетаданных"); - Если ПараметрТипОбъектаМетаданных <> Неопределено Тогда - Если ПользовательскаяНастройкаКД.Параметр = ПараметрТипОбъектаМетаданных.Параметр - И ПараметрТипОбъектаМетаданных.Значение <> ПользовательскаяНастройкаКД.Значение Тогда - ПараметрТипОбъектаМетаданных.Значение = ПользовательскаяНастройкаКД.Значение; - НеобходимоОбновитьНастройки = Истина; - ОчищаемыеПараметры.Добавить("ИсточникДанных"); - ОчищаемыеПараметры.Добавить("ИмяОбъектаМетаданных"); - ОчищаемыеПараметры.Добавить("ИмяТаблицы"); - КонецЕсли; - КонецЕсли; - ПараметрИмяОбъектаМетаданных = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяОбъектаМетаданных"); - Если ПараметрИмяОбъектаМетаданных <> Неопределено Тогда - Если ПользовательскаяНастройкаКД.Параметр = ПараметрИмяОбъектаМетаданных.Параметр - И ПараметрИмяОбъектаМетаданных.Значение <> ПользовательскаяНастройкаКД.Значение Тогда - ПараметрИмяОбъектаМетаданных.Значение = ПользовательскаяНастройкаКД.Значение; - НеобходимоОбновитьНастройки = Истина; - ОчищаемыеПараметры.Добавить("ИсточникДанных"); - ОчищаемыеПараметры.Добавить("ИмяТаблицы"); - КонецЕсли; - КонецЕсли; - ПараметрИмяТаблицы = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяТаблицы"); - Если ПараметрИмяТаблицы <> Неопределено Тогда - Если ПользовательскаяНастройкаКД.Параметр = ПараметрИмяТаблицы.Параметр - И ПараметрИмяТаблицы.Значение <> ПользовательскаяНастройкаКД.Значение Тогда - НеобходимоОбновитьНастройки = Истина; - ПараметрИмяТаблицы.Значение = ПользовательскаяНастройкаКД.Значение; - КонецЕсли; - КонецЕсли; - - Для Каждого ОчищаемыйПараметр Из ОчищаемыеПараметры Цикл - Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ОчищаемыйПараметр); - Если Параметр <> Неопределено Тогда - Параметр.Значение = ""; - КонецЕсли; + ПараметрыВывода = Настройки.ПараметрыВывода; + Для Каждого Параметр Из ПредопределенныеПараметры Цикл + СвойстваПараметра = Новый Структура("Объект, Идентификатор"); + СвойстваПараметра.Объект = ПараметрыВывода.Элементы.Найти(Параметр.Ключ); + СвойстваПараметра.Идентификатор = ПараметрыВывода.ПолучитьИдентификаторПоОбъекту(СвойстваПараметра.Объект); + + ПредопределенныеПараметры[Параметр.Ключ] = СвойстваПараметра; КонецЦикла; - Если НеобходимоОбновитьНастройки Тогда - Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь); - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Истина); - ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); - ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); - ПараметрыЗаполнения.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); - ЗаполнитьБыстрыеНастройкиКлиент(ПараметрыЗаполнения); + Возврат ПредопределенныеПараметры; +КонецФункции + +&НаКлиенте +Процедура УстановитьПараметрВывода(ЭлементСтруктуры, ИмяПараметра, Значение = Неопределено, Использование = Истина) + ЗначениеПараметра = ЭлементСтруктуры.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра)); + Если ЗначениеПараметра = Неопределено Тогда + Возврат; КонецЕсли; + Если Значение <> Неопределено Тогда + ЗначениеПараметра.Значение = Значение; + КонецЕсли; + + Если Использование <> Неопределено Тогда + ЗначениеПараметра.Использование = Использование; + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -2670,12 +4716,6 @@ Возврат Результат; КонецФункции -&НаКлиенте -Процедура ОбновитьФорму(Контекст) - ПараметрыЗаполнения = Новый Структура("ИмяСобытия", Контекст.ТаблицаИмя + "." + Контекст.Действие); - ЗаполнитьБыстрыеНастройкиКлиент(ПараметрыЗаполнения); -КонецПроцедуры - &НаКлиенте Процедура ОпределитьВыделенныеСтроки(Контекст) Контекст.Вставить("СтрокиДерева", Новый Массив); // Выделенные строки (не идентификаторы). @@ -2684,10 +4724,14 @@ ТаблицаРеквизит = ЭтотОбъект[Контекст.ТаблицаИмя]; ТекущаяСтрокаИдентификатор = ТаблицаЭлемент.ТекущаяСтрока; - Особенности = Новый Структура("МогутБытьРазделы, МогутБытьПараметры, МогутБытьГруппы, - |ТребоватьОдногоРодителя"); - Особенности.МогутБытьРазделы = (Контекст.ТаблицаИмя = "Отборы" Или Контекст.ТаблицаИмя = "ВыбранныеПоля" Или Контекст.ТаблицаИмя = "Сортировка"); + Особенности = Новый Структура("МогутБытьРазделы, МогутБытьПараметры, + |МогутБытьПараметрыВывода, МогутБытьГруппы, ТребоватьОдногоРодителя"); + Особенности.МогутБытьРазделы = (Контекст.ТаблицаИмя = "Отборы" + Или Контекст.ТаблицаИмя = "ВыбранныеПоля" + Или Контекст.ТаблицаИмя = "Сортировка" + Или Контекст.ТаблицаИмя = "Оформление"); Особенности.МогутБытьПараметры = (Контекст.ТаблицаИмя = "Отборы"); + Особенности.МогутБытьПараметрыВывода = (Контекст.ТаблицаИмя = "Оформление"); Особенности.ТребоватьОдногоРодителя = (Контекст.Действие = "Переместить" Или Контекст.Действие = "Сгруппировать"); Особенности.МогутБытьГруппы = (Контекст.ТаблицаИмя = "Отборы" Или Контекст.ТаблицаИмя = "ВыбранныеПоля"); Если Особенности.ТребоватьОдногоРодителя Тогда @@ -2700,7 +4744,7 @@ ВыделенныеСтроки = МассивСортировать(ТаблицаЭлемент.ВыделенныеСтроки, НаправлениеСортировки.Возр); Для Каждого СтрокаИдентификатор Из ВыделенныеСтроки Цикл СтрокаДерева = ТаблицаРеквизит.НайтиПоИдентификатору(СтрокаИдентификатор); - Если Не ДобавитьВыделеннуюСтроку(Контекст, СтрокаДерева, Особенности) Тогда + Если Не СтрокаДобавлена(Контекст, СтрокаДерева, Особенности) Тогда Возврат; КонецЕсли; Если Особенности.МогутБытьГруппы И СтрокаДерева.ЭтоГруппа Тогда @@ -2736,18 +4780,18 @@ КонецЦикла; КонецЦикла; КонецЕсли; - КонецПроцедуры &НаКлиенте -Функция ДобавитьВыделеннуюСтроку(Строки, СтрокаДерева, Особенности) +Функция СтрокаДобавлена(Строки, СтрокаДерева, Особенности) Если Строки.СтрокиДерева.Найти(СтрокаДерева) <> Неопределено Тогда Возврат Истина; // Пропустить строку. КонецЕсли; Если Особенности.МогутБытьРазделы И СтрокаДерева.ЭтоРаздел Тогда Возврат Истина; // Пропустить строку. КонецЕсли; - Если Особенности.МогутБытьПараметры И СтрокаДерева.ЭтоПараметр Тогда + Если (Особенности.МогутБытьПараметры И СтрокаДерева.ЭтоПараметр) + Или (Особенности.МогутБытьПараметрыВывода И СтрокаДерева.ЭтоПараметрВывода) Тогда Если Строки.Действие = "Переместить" Тогда Строки.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть перемещены.'"); ИначеЕсли Строки.Действие = "Сгруппировать" Тогда @@ -2755,7 +4799,8 @@ ИначеЕсли Строки.Действие = "Удалить" Тогда Строки.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть удалены.'"); КонецЕсли; - Возврат Ложь; КонецЕсли; + Возврат Ложь; + КонецЕсли; Если Особенности.ТребоватьОдногоРодителя Тогда Родитель = СтрокаДерева.ПолучитьРодителя(); Если Строки.ТекущийРодитель = -1 Тогда @@ -2773,90 +4818,26 @@ Возврат Истина; // Следующая строка. КонецФункции -&НаКлиенте -Процедура СгруппироватьСтроки(Контекст) - ТекущийРодитель = Контекст.ТекущийРодитель; - ТаблицаЭлемент = Элементы[Контекст.ТаблицаИмя]; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, Неопределено); - - Если Контекст.ТекущийРодитель = Неопределено Тогда - ТаблицаРеквизит = ЭтотОбъект[Контекст.ТаблицаИмя]; - Если Контекст.ТаблицаИмя = "Отборы" И Не РежимИзмененияУзлаВарианта Тогда - ТекущийРодитель = ТаблицаРеквизит.ПолучитьЭлементы()[1]; - Иначе - ТекущийРодитель = ТаблицаРеквизит; - КонецЕсли; - ТекущийРодительКД = УзелКД; - ИначеЕсли ТипЗнч(ТекущийРодитель.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда - ТекущийРодительКД = УзелКД; - Иначе - ТекущийРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(ТекущийРодитель.ИдентификаторКД); - КонецЕсли; - СтрокиРодителя = ТекущийРодитель.ПолучитьЭлементы(); - СтрокиРодителяКД = ТекущийРодительКД.Элементы; - - // Проверки пройдены. Добавление группы в родителя родителя. - Группы = ТаблицыПолейВставить(Контекст.ТаблицаИмя, Контекст.ТипГруппыКД, 0, Ложь); - - ЭлементКД = Группы.ЭлементКД; - ЭлементКД.Использование = Истина; - НоваяКоллекцияЭлементовКД = ЭлементКД.Элементы; - - ГруппаДерева = Группы.СтрокаТаблицы; - ГруппаДерева.Использование = ЭлементКД.Использование; - ГруппаДерева.ЭтоГруппа = Истина; - НоваяКоллекцияСтрокДерева = ГруппаДерева.ПолучитьЭлементы(); - - Если Контекст.ТаблицаИмя = "Отборы" Тогда - ГруппаДерева.Представление = Строка(ЭлементКД.ТипГруппы); - ГруппаДерева.ИндексКартинки = -1; - ГруппаДерева.ИндексКартинкиДоступа = 5; - ГруппаДерева.Заголовок = ГруппаДерева.Представление; - Иначе - ЭлементКД.Заголовок = Контекст.ЗаголовокГруппы; - ЭлементКД.Расположение = Контекст.Расположение; - ГруппаДерева.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Группа"); - ГруппаДерева.Представление = ЭлементКД.Заголовок; - Если ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда - ГруппаДерева.Представление = ГруппаДерева.Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; - КонецЕсли; - КонецЕсли; - - Для Каждого СтараяСтрокаДерева Из Контекст.СтрокиДерева Цикл - СтарыйЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтараяСтрокаДерева.ИдентификаторКД); - ТаблицыПолейСкопироватьРекурсивно(УзелКД, СтараяСтрокаДерева, НоваяКоллекцияСтрокДерева, СтарыйЭлементКД, НоваяКоллекцияЭлементовКД); - СтрокиРодителя.Удалить(СтараяСтрокаДерева); - СтрокиРодителяКД.Удалить(СтарыйЭлементКД); - КонецЦикла; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура СдвинутьСтроки(Контекст) ТекущийРодитель = Контекст.ТекущийРодитель; - ТаблицаЭлемент = Элементы[Контекст.ТаблицаИмя]; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, Неопределено); + УзелКД = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура"); Если Контекст.ТекущийРодитель = Неопределено Тогда ТаблицаРеквизит = ЭтотОбъект[Контекст.ТаблицаИмя]; - Если Контекст.ТаблицаИмя = "Отборы" И Не РежимИзмененияУзлаВарианта Тогда + Если Контекст.ТаблицаИмя = "Отборы" И Не РежимИзмененияЭлементаСтруктурыНастроек Тогда ТекущийРодитель = ТаблицаРеквизит.ПолучитьЭлементы()[1]; Иначе ТекущийРодитель = ТаблицаРеквизит; КонецЕсли; ТекущийРодительКД = УзелКД; - ИначеЕсли ТипЗнч(ТекущийРодитель.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + ИначеЕсли ТипЗнч(ТекущийРодитель.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда ТекущийРодительКД = УзелКД; Иначе - ТекущийРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(ТекущийРодитель.ИдентификаторКД); + ТекущийРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(ТекущийРодитель.Идентификатор); КонецЕсли; СтрокиРодителя = ТекущийРодитель.ПолучитьЭлементы(); - СтрокиРодителяКД = ПолучитьЭлементыКД(УзелКД, ТекущийРодительКД); + СтрокиРодителяКД = ЭлементыНастроек(УзелКД, ТекущийРодительКД); ВерхняяГраницаСтрок = СтрокиРодителя.Количество() - 1; ВыделеноСтрок = Контекст.СтрокиДерева.Количество(); @@ -2874,7 +4855,7 @@ КонецЕсли; СтрокаДерева = Контекст.СтрокиДерева[ИндексВМассиве]; - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.ИдентификаторКД); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.Идентификатор); ИндексВДереве = СтрокиРодителя.Индекс(СтрокаДерева); ГдеОкажетсяСтрока = ИндексВДереве + Контекст.Направление; @@ -2890,670 +4871,16 @@ КонецЕсли; КонецЦикла; - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура УдалитьСтроки(Контекст) - - ТаблицыПолейУдалить(Контекст.ТаблицаИмя, Контекст.СтрокиДерева, Ложь); - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Клиент - Параметры и отборы. - -&НаКлиенте -Процедура ОтборыПоказатьВыборПериода(СтрокаТаблицы) - Контекст = Новый Структура; - Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораПериода", ЭтотОбъект, Контекст); - Диалог = Новый ДиалогРедактированияСтандартногоПериода; - Диалог.Период = СтрокаТаблицы.Значение; - Диалог.Показать(Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗавершениеВыбораПериода(Период, Контекст) Экспорт - Если Период = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы.Значение = Период; - СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); - - Если СтрокаТаблицы.ЭтоПараметр Тогда - ЭлементКД.Значение = СтрокаТаблицы.Значение; - Иначе - ЭлементКД.ПравоеЗначение = СтрокаТаблицы.Значение; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыПоказатьВыборСсылки(СтрокаТаблицы, СтандартнаяОбработка) - ПараметрыВыбора = ПараметрыВыбораОтбора(СтрокаТаблицы); - Если ПараметрыВыбора = Неопределено Тогда - СтандартнаяОбработка = Истина; - Возврат; - КонецЕсли; - - ПараметрыВыбора.Вставить("МножественныйВыбор", Ложь); - ПараметрыВыбора.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(СтрокаТаблицы.Значение)); - ПараметрыВыбора.Вставить("Представление", СтрокаТаблицы.Представление); - - Контекст = Новый Структура; - Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); - Контекст.Вставить("ПараметрыВыбора", ПараметрыВыбора); - Контекст.Вставить("ТекущееЗначение", СтрокаТаблицы.Значение); - Контекст.Вставить("ПредставлениеПоля", СтрокаТаблицы.Представление); - - // Полное имя формы выбора. - // Свойство "ФормаВыбора" недоступно на клиенте даже для чтения, - // поэтому для хранения предустановленных имен форм выбора используется коллекция БыстрыйПоискИменОбъектовМетаданных. - Если ЗначениеЗаполнено(ПараметрыВыбора.ПутьКФорме) Тогда - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораСсылки", ЭтотОбъект, Контекст); - ОткрытьФорму( - ПараметрыВыбора.ПутьКФорме, - ПараметрыВыбора, - ЭтотОбъект, - , - , - , - Обработчик, - РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - Иначе - // Выбор типа из списка. - СписокВыбора = Новый СписокЗначений; - СписокВыбора.ЗагрузитьЗначения(ПараметрыВыбора.ОписаниеТипов.Типы()); - - Обработчик = Новый ОписаниеОповещения("ОтборыПоказатьВыборСсылкиПослеВыбораТипа", ЭтотОбъект, Контекст); - Если СписокВыбора.Количество() = 1 Тогда // Один тип - выбор не требуется. - ВыполнитьОбработкуОповещения(Обработчик, СписокВыбора[0]); - Иначе - ПоказатьВыборИзМеню(Обработчик, СписокВыбора); - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыПоказатьВыборСсылкиПослеВыбораТипа(ЭлементСписка, Контекст) Экспорт - Если ТипЗнч(ЭлементСписка) <> Тип("ЭлементСпискаЗначений") Тогда - Возврат; - КонецЕсли; - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораСсылки", ЭтотОбъект, Контекст); - ПараметрыВыбора = Контекст.ПараметрыВыбора; - - Тип = ЭлементСписка.Значение; - ПараметрыВыбораТипа = ВариантыОтчетовВызовСервера.ПараметрыВыбораТипа(Тип, ПараметрыВыбора); - Если ПараметрыВыбораТипа = Неопределено Тогда - ОтчетыКлиент.ВыбратьЗначениеПримитивногоТипа( - ЭтотОбъект, - Тип, - ПараметрыВыбора.ОписаниеТипов, - Контекст.ТекущееЗначение, - Контекст.ПредставлениеПоля, - Обработчик); - ИначеЕсли ПараметрыВыбораТипа.БыстрыйВыбор Тогда - ПоказатьВыборИзМеню(Обработчик, ПараметрыВыбораТипа.ЗначенияДляВыбора); - Иначе - ОткрытьФорму( - ПараметрыВыбораТипа.ПутьКФорме, - ПараметрыВыбора, - ЭтотОбъект, - , - , - , - Обработчик, - РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗавершениеВыбораСсылки(СсылкаИлиЭлементСписка, Контекст) Экспорт - Если ТипЗнч(СсылкаИлиЭлементСписка) = Тип("ЭлементСпискаЗначений") Тогда - НовоеЗначение = СсылкаИлиЭлементСписка.Значение; - Иначе - НовоеЗначение = СсылкаИлиЭлементСписка; - КонецЕсли; - Если Не Контекст.ПараметрыВыбора.ОписаниеТипов.СодержитТип(ТипЗнч(НовоеЗначение)) Или Не ЗначениеЗаполнено(НовоеЗначение) Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - УстановитьЗначение(СтрокаТаблицы, УзелКД, ЭлементКД, НовоеЗначение); - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Процедура УстановитьЗначение(СтрокаТаблицы, УзелКД, ЭлементКД, НовоеЗначение) - Если УзелКД <> Неопределено Тогда // Поле доступно по функциональным опциям - Если СтрокаТаблицы.ЭтоПараметр Тогда - Если ТипЗнч(УзелКД) = Тип("ДоступныйПараметрКомпоновкиДанных") Тогда - ДоступныйЭлементСКД = УзелКД; - Иначе - ДоступныйЭлементСКД = УзелКД.ДоступныеПараметры.НайтиПараметр(ЭлементКД.Параметр); - КонецЕсли; - ФорматРедактирования = ДоступныйЭлементСКД.ФорматРедактирования; - ЭлементКД.Значение = НовоеЗначение; - Иначе - Если ТипЗнч(УзелКД) = Тип("ДоступноеПолеОтбораКомпоновкиДанных") Тогда - ДоступныйЭлементСКД = УзелКД; - Иначе - ДоступныйЭлементСКД = УзелКД.ДоступныеПоляОтбора.НайтиПоле(ЭлементКД.ЛевоеЗначение); - КонецЕсли; - ФорматРедактирования = ДоступныйЭлементСКД.ФорматРедактирования; - ЭлементКД.ПравоеЗначение = НовоеЗначение; - КонецЕсли; - КонецЕсли; - СтрокаТаблицы.Значение = НовоеЗначение; - Если Не ПустаяСтрока(ФорматРедактирования) Тогда - СтрокаТаблицы.ПредставлениеЗначения = Формат(НовоеЗначение, ФорматРедактирования); - Иначе - СтрокаТаблицы.ПредставлениеЗначения = НовоеЗначение; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыПоказатьСписокСФлажками(СтрокаТаблицы) - ПараметрыВыбора = ПараметрыВыбораОтбора(СтрокаТаблицы); - Если ПараметрыВыбора = Неопределено Тогда - Возврат; - КонецЕсли; - - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВводаСпискомСФлажками", ЭтотОбъект, ПараметрыОбработчика); - - ПараметрыВыбора.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(СтрокаТаблицы.Значение)); - ПараметрыВыбора.Вставить("Представление", СтрокаТаблицы.Представление); - - Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыВыбора, ЭтотОбъект, , , , Обработчик, Блокировать); -КонецПроцедуры - -&НаКлиенте -Функция ПараметрыВыбораОтбора(СтрокаТаблицы) - ИдентификаторЭлемента = СтрокаТаблицы.ПолучитьИдентификатор(); - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Результат = Новый Структура("Представление, ЗначенияДляВыбора, ЗначенияДляВыбораЗаполнены, БыстрыйВыбор, - |ОграничиватьВыборУказаннымиЗначениями, ОписаниеТипов, ВводСписком"); - - ДополнительныеНастройки = СтрокаТаблицы.Дополнительно; - ЗаполнитьЗначенияСвойств(Результат, ДополнительныеНастройки); - - ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуИспользованиеГруппИЭлементов( - СтрокаТаблицы.Условие, - СтрокаТаблицы.ВыборГруппИЭлементов); - - // Включенный флажок ВводСписком означает что параметры готовятся для промежуточной формы ВводЗначенийСпискомСФлажками. - Результат.Вставить("ВводСписком", СтрокаТаблицы.ВводСписком); - - // Стандартные параметры формы. - Результат.Вставить("ЗакрыватьПриВыборе", Истина); - Результат.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); - Результат.Вставить("Отбор", Новый Структура); - // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка). - Результат.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); - Результат.Вставить("МножественныйВыбор", Ложь); - Результат.Вставить("РежимВыбора", Истина); - // Предполагаемые реквизиты. - Результат.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - Результат.Вставить("РазрешитьНачалоПеретаскивания", Ложь); - - Результат.Вставить("ПутьКФорме", ДополнительныеНастройки.ФормаВыбора); - - Результат.Вставить("ПараметрыВыбора", Новый Массив); - Результат.Вставить("КлючУникальности", ЭлементКД.ИдентификаторПользовательскойНастройки); - - // Фиксированные параметры выбора и связи от скрытых ведущих (предопределенные в текущем контексте). - Для Каждого ПараметрВыбора Из ДополнительныеНастройки.ПараметрыВыбора Цикл - Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - Если Результат.ВводСписком Тогда - Результат.ПараметрыВыбора.Добавить(ПараметрВыбора); - Иначе - Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда - Результат.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); - Иначе - Результат.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // Динамические связи от ведущих. - Связи = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); - Для Каждого Связь Из Связи Цикл - СтрокаВедущий = Отборы.НайтиПоИдентификатору(Связь.ВедущийИдентификаторВФорме); - Если СтрокаВедущий = Неопределено Тогда - Продолжить; - КонецЕсли; - Если Не СтрокаВедущий.Использование Тогда - Продолжить; - КонецЕсли; - ЗначениеВедущего = СтрокаВедущий.Значение; - ТипЗначенияВедущего = ТипЗнч(ЗначениеВедущего); - Если Связь.ТипСвязи = "ПоТипу" Тогда - Если СтрокаВедущий.Условие <> ВидСравненияКомпоновкиДанных.Равно - И СтрокаВедущий.Условие <> ВидСравненияКомпоновкиДанных.ВИерархии Тогда - Продолжить; - КонецЕсли; - Если ТипЗнч(Связь.ПодчиненныйИмяПараметра) = Тип("Число") И Связь.ПодчиненныйИмяПараметра > 0 Тогда - ТипСубконто = ВариантыОтчетовВызовСервера.ТипСубконто(ЗначениеВедущего, Связь.ПодчиненныйИмяПараметра); - Если ТипЗнч(ТипСубконто) = Тип("ОписаниеТипов") Тогда - ФильтрПоТипам = ТипСубконто.Типы(); - Иначе - Продолжить; - КонецЕсли; - Иначе - ФильтрПоТипам = Новый Массив; - ФильтрПоТипам.Добавить(ТипЗначенияВедущего); - КонецЕсли; - ВычитаемыеТипы = Результат.ОписаниеТипов.Типы(); - ОписанияТиповПересекаются = Ложь; - Для Каждого ТипКоторыйНадоОставить Из ФильтрПоТипам Цикл - Индекс = ВычитаемыеТипы.Найти(ТипКоторыйНадоОставить); - Если Индекс <> Неопределено Тогда - ВычитаемыеТипы.Удалить(Индекс); - ОписанияТиповПересекаются = Истина; - КонецЕсли; - КонецЦикла; - Если ОписанияТиповПересекаются Тогда - Результат.ОписаниеТипов = Новый ОписаниеТипов(Результат.ОписаниеТипов, , ВычитаемыеТипы); - КонецЕсли; - ИначеЕсли Связь.ТипСвязи = "ПоМетаданным" Или Связь.ТипСвязи = "ПараметровВыбора" Тогда - Если Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда - Продолжить; - КонецЕсли; - Если Связь.ТипСвязи = "ПоМетаданным" И Не Связь.ВедущийТип.СодержитТип(ТипЗначенияВедущего) Тогда - Продолжить; - КонецЕсли; - Если Результат.ВводСписком Тогда - Результат.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, ЗначениеВедущего)); - Иначе - Если ВРег(Лев(Связь.ПодчиненныйИмяПараметра, 6)) = ВРег("Отбор.") Тогда - Результат.Отбор.Вставить(Сред(Связь.ПодчиненныйИмяПараметра, 7), ЗначениеВедущего); - Иначе - Результат.Вставить(Связь.ПодчиненныйИмяПараметра, ЗначениеВедущего); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат Результат; -КонецФункции - -&НаКлиенте -Процедура ОтборыЗавершениеВводаСпискомСФлажками(РезультатВыбора, Контекст) Экспорт - Если ТипЗнч(РезультатВыбора) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - ДополнительныеНастройки = СтрокаТаблицы.Дополнительно; - - // Загрузка выбранных значений в 2 списка. - СписокЗначенийВСКД = Новый СписокЗначений; - Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - ДополнительныеНастройки.ЗначенияДляВыбора = Новый СписокЗначений; - КонецЕсли; - Для Каждого ЭлементСпискаВФорме Из РезультатВыбора Цикл - ЗначениеВФорме = ЭлементСпискаВФорме.Значение; - Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - Если ДополнительныеНастройки.ЗначенияДляВыбора.НайтиПоЗначению(ЗначениеВФорме) <> Неопределено Тогда - Продолжить; - КонецЕсли; - ЗаполнитьЗначенияСвойств(ДополнительныеНастройки.ЗначенияДляВыбора.Добавить(), ЭлементСпискаВФорме); - КонецЕсли; - Если ЭлементСпискаВФорме.Пометка Тогда - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВСКД, ЗначениеВФорме, ЭлементСпискаВФорме.Представление, Истина); - КонецЕсли; - КонецЦикла; - Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ЭлементКД.ПравоеЗначение = СписокЗначенийВСКД; - Иначе - ЭлементКД.Значение = СписокЗначенийВСКД; - КонецЕсли; - СтрокаТаблицы.Значение = СписокЗначенийВСКД; - - // Включение флажка Использование. - ЭлементКД.Использование = Истина; - СтрокаТаблицы.Использование = Истина; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыВыбратьВидСравнения(СтрокаТаблицы) - Если СтрокаТаблицы.ЭтоПараметр Тогда - Возврат; - КонецЕсли; - - Контекст = Новый Структура; - Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораВидаСравнения", ЭтотОбъект, Контекст); - - ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(СтрокаТаблицы.ТипЗначения, Ложь); - ТолькоБулево = ИнформацияОТипах.СодержитТипБулево И ИнформацияОТипах.КоличествоПримитивныхТипов = 1; - ФиксированныйСписок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы.Дополнительно, "ОграничиватьВыборУказаннымиЗначениями", Ложь); - - Список = Новый СписокЗначений; - - Если ИнформацияОТипах.ОграниченнойДлины Или ФиксированныйСписок Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Равно); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеРавно); - - Если ИнформацияОТипах.СодержитОбъектныеТипы Или ФиксированныйСписок Тогда - Список.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); - КонецЕсли; - - КонецЕсли; - - Если ИнформацияОТипах.ОграниченнойДлины И ИнформацияОТипах.СодержитОбъектныеТипы Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); // В списке включая подчиненные - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); // Не в списке включая подчиненные - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВИерархии); // В группе - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВИерархии); // Не в группе - - КонецЕсли; - - Если ИнформацияОТипах.ОграниченнойДлины И ИнформацияОТипах.КоличествоПримитивныхТипов > 0 И Не ТолькоБулево Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Меньше); - Список.Добавить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.Больше); - Список.Добавить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно); - - КонецЕсли; - - Если Не ФиксированныйСписок И ИнформацияОТипах.СодержитТипСтрока Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Содержит); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеСодержит); - - Список.Добавить(ВидСравненияКомпоновкиДанных.Подобно); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеПодобно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.НачинаетсяС); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеНачинаетсяС); - - КонецЕсли; - - Если ИнформацияОТипах.СодержитТипДата Или ИнформацияОТипах.СодержитТипСтрока - Или ФиксированныйСписок Или ИнформацияОТипах.СодержитОбъектныеТипы Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Заполнено); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеЗаполнено); - - КонецЕсли; - - ПоказатьВыборИзМеню(Обработчик, Список, Элементы.Отборы); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗавершениеВыбораВидаСравнения(Результат, Контекст) Экспорт - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы.Условие = Результат.Значение; - ЭлементКД.ВидСравнения = Результат.Значение; - - БылВводСписком = СтрокаТаблицы.ВводСписком; - СталВводСписком = Ложь; - Если СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВИерархии - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда - СтрокаТаблицы.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; - Иначе - Если СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВСписке - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВСписке - Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - СталВводСписком = Истина; - КонецЕсли; - СтрокаТаблицы.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы; - КонецЕсли; - Элементы.ОтборыЗначение.ВыборГруппИЭлементов = СтрокаТаблицы.ВыборГруппИЭлементов; - - Если БылВводСписком <> СталВводСписком Тогда - Если БылВводСписком Тогда - Если ТипЗнч(ЭлементКД.ПравоеЗначение) = Тип("СписокЗначений") - И ЭлементКД.ПравоеЗначение.Количество() > 0 Тогда - ЭлементКД.ПравоеЗначение = ЭлементКД.ПравоеЗначение[0].Значение; - Иначе - ЭлементКД.ПравоеЗначение = Неопределено; - КонецЕсли; - Иначе - Если ТипЗнч(ЭлементКД.ПравоеЗначение) = Тип("ПолеКомпоновкиДанных") Тогда - ЭлементКД.ПравоеЗначение = Неопределено; - Иначе - ЭлементКД.ПравоеЗначение = ОтчетыКлиентСервер.ЗначенияСписком(ЭлементКД.ПравоеЗначение); - КонецЕсли; - КонецЕсли; - Обновить(); // Серьезные изменения, для учета всех связей и особенностей вывода следует перерисовать полностью. - КонецЕсли; - УстановитьМодифицированность(); КонецПроцедуры -&НаКлиенте -Процедура ОтборыВыбратьЗначениеИзСписка(СтрокаТаблицы) - Если СтрокаТаблицы.Дополнительно = Неопределено Тогда - Возврат; - КонецЕсли; - ЗначенияДляВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы.Дополнительно, "ЗначенияДляВыбора"); - Если ТипЗнч(ЗначенияДляВыбора) <> Тип("СписокЗначений") Или ЗначенияДляВыбора.Количество() = 0 Тогда - Возврат; - КонецЕсли; - Контекст = Новый Структура; - Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); - Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораЗначенияИзСписка", ЭтотОбъект, Контекст); - ПоказатьВыборИзМеню(Обработчик, ЗначенияДляВыбора, Элементы.Отборы); -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыЗавершениеВыбораЗначенияИзСписка(Результат, Контекст) Экспорт - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - // Отражение изменений в значении. - Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ЭлементКД.ПравоеЗначение = Результат.Значение; - Иначе - ЭлементКД.Значение = Результат.Значение; - КонецЕсли; - СтрокаТаблицы.ПредставлениеЗначения = Результат.Представление; - - // Включение флажка Использование. - ЭлементКД.Использование = Истина; - СтрокаТаблицы.Использование = Истина; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ОтборыУстановитьУровеньДоступа(УровеньДоступа) - СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; - СтрокаИдентификатор = Элементы.Отборы.ТекущаяСтрока; - Если СтрокаТаблицы = Неопределено Или СтрокаИдентификатор = Неопределено Тогда - Возврат; - КонецЕсли; - ТаблицыПолейИзменитьУровеньДоступа("Отборы", СтрокаИдентификатор, Истина, Не СтрокаТаблицы.ЭтоПараметр, УровеньДоступа); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Клиент - Структура варианта. - -&НаКлиенте -Процедура ИзменитьУзелВарианта(СтрокаТаблицы, ИмяСтраницы, ИспользоватьФормуВарианта) - Если СтрокаТаблицы = Неопределено Тогда - ЭлементыСтруктуры = СтруктураВарианта.ПолучитьЭлементы(); - Если ЭлементыСтруктуры.Количество() = 0 Тогда - Возврат; - КонецЕсли; - СтрокаТаблицы = ЭлементыСтруктуры[0]; - КонецЕсли; - Если ИспользоватьФормуВарианта = Неопределено Тогда - ИспользоватьФормуВарианта = (СтрокаТаблицы.Тип = "Таблица" - Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта"); - КонецЕсли; - - Обработчик = Новый ОписаниеОповещения("ИзменитьУзелВариантаЗавершение", ЭтотОбъект); - - ШаблонЗаголовка = НСтр("ru = 'Настройка %1 отчета ""%2""'"); - Если СтрокаТаблицы.Тип = "Диаграмма" Тогда - ПредставлениеУзла = НСтр("ru = 'диаграммы'"); - Иначе - ПредставлениеУзла = НСтр("ru = 'группировки'"); - КонецЕсли; - Если ЗначениеЗаполнено(СтрокаТаблицы.Заголовок) Тогда - ПредставлениеУзла = ПредставлениеУзла + " """ + СтрокаТаблицы.Заголовок + """"; - ИначеЕсли ЗначениеЗаполнено(СтрокаТаблицы.Представление) Тогда - ПредставлениеУзла = ПредставлениеУзла + " """ + СтрокаТаблицы.Представление + """"; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СтруктураВарианта"); - ЭлементКД = НайтиОбъектКД(УзелКД, СтрокаТаблицы); - ПолныйПуть = ОтчетыКлиентСервер.ПолныйПутьКЭлементу(Отчет.КомпоновщикНастроек.Настройки, ЭлементКД); - Если ПолныйПуть = Неопределено Тогда - Возврат; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); - ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); - ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); - ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); - ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование); - ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", СтрокаТаблицы.ИдентификаторКД); - ПараметрыФормы.Вставить("ТипТекущегоУзлаКД", СтрокаТаблицы.Тип); - ПараметрыФормы.Вставить("ПолныйПутьТекущегоУзлаКД", ПолныйПуть); - ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеУзла, ВариантНаименование)); - Если ИмяСтраницы <> Неопределено Тогда - ПараметрыФормы.Вставить("ИмяСтраницы", ИмяСтраницы); - КонецЕсли; - - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров); - Если ВыполнятьЗамеры Тогда - МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); - ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.НачатьЗамерВремени( - Ложь, - НастройкиОтчета.КлючЗамеров + ".Настройки"); - МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(ИдентификаторЗамера, НастройкиОтчета.ПрефиксЗамеров); - КонецЕсли; - - ИмяОткрываемойФормы = НастройкиОтчета.ПолноеИмя + ?(ИспользоватьФормуВарианта, ".ФормаВарианта", ".ФормаНастроек"); - ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); -КонецПроцедуры - -&НаКлиенте -Процедура ИзменитьУзелВариантаЗавершение(Результат, Контекст) Экспорт - Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда - Возврат; - КонецЕсли; - ЗаполнитьБыстрыеНастройкиКлиент(Результат); -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Клиент - Таблицы полей (универсальные точки входа). &НаКлиенте -Процедура ТаблицыПолейИзменитьУровеньДоступа(ТаблицаИмя, СтрокаИдентификатор, ПоказыватьРежимыВвода, ПоказыватьРежимыФлажков, УровеньДоступа = Неопределено) - Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); - Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьУровеньДоступаЗавершение", ЭтотОбъект, Контекст); +Процедура ВыбратьРежимОтображения(ОтборыУзлаНастроек, ИмяКоллекции, ИдентификаторСтроки, ПоказыватьРежимыВвода, ПоказыватьРежимыФлажков, ТекущийРежимОтображения = Неопределено) + Контекст = Новый Структура("ОтборыУзлаНастроек, ИмяКоллекции, ИдентификаторСтроки", ОтборыУзлаНастроек, ИмяКоллекции, ИдентификаторСтроки); + Обработчик = Новый ОписаниеОповещения("РежимОтображенияПослеВыбора", ЭтотОбъект, Контекст); Список = Новый СписокЗначений; Если ПоказыватьРежимыВвода Тогда @@ -3570,912 +4897,311 @@ КонецЕсли; Список.Добавить("НеПоказывать", НСтр("ru = 'Не показывать'"), , БиблиотекаКартинок.СкрытаяНастройкаОтчета); - Если УровеньДоступа = Неопределено Тогда + Если ТекущийРежимОтображения = Неопределено Тогда ПоказатьВыборИзМеню(Обработчик, Список); Иначе - ЭлементСписка = Список.НайтиПоЗначению(УровеньДоступа); - ВыполнитьОбработкуОповещения(Обработчик, ЭлементСписка); + РежимОтображения = Список.НайтиПоЗначению(ТекущийРежимОтображения); + ВыполнитьОбработкуОповещения(Обработчик, РежимОтображения); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ТаблицыПолейИзменитьУровеньДоступаЗавершение(ЭлементСписка, Контекст) Экспорт - Если ТипЗнч(ЭлементСписка) <> Тип("ЭлементСпискаЗначений") Тогда +Процедура РежимОтображенияПослеВыбора(РежимОтображения, Контекст) Экспорт + Если РежимОтображения = Неопределено Тогда Возврат; КонецЕсли; - УровеньДоступа = ЭлементСписка.Значение; - Если УровеньДоступа = "ПоказыватьВШапкеОтчета" Тогда - ИндексКартинкиДоступа = 2; - ИначеЕсли УровеньДоступа = "ПоказыватьТолькоФлажокВШапкеОтчета" Тогда - ИндексКартинкиДоступа = 1; - ИначеЕсли УровеньДоступа = "ПоказыватьВНастройкахОтчета" Тогда - ИндексКартинкиДоступа = 4; - ИначеЕсли УровеньДоступа = "ПоказыватьТолькоФлажокВНастройкахОтчета" Тогда - ИндексКартинкиДоступа = 3; + + Если РежимОтображения.Значение = "ПоказыватьВШапкеОтчета" Тогда + КартинкаРежимаОтображения = 2; + ИначеЕсли РежимОтображения.Значение = "ПоказыватьТолькоФлажокВШапкеОтчета" Тогда + КартинкаРежимаОтображения = 1; + ИначеЕсли РежимОтображения.Значение = "ПоказыватьВНастройкахОтчета" Тогда + КартинкаРежимаОтображения = 4; + ИначеЕсли РежимОтображения.Значение = "ПоказыватьТолькоФлажокВНастройкахОтчета" Тогда + КартинкаРежимаОтображения = 3; Иначе - ИндексКартинкиДоступа = 5; + КартинкаРежимаОтображения = 5; КонецЕсли; - СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда + Строка = ЭтотОбъект[Контекст.ИмяКоллекции].НайтиПоИдентификатору(Контекст.ИдентификаторСтроки); + Если Строка = Неопределено Тогда Возврат; КонецЕсли; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда + ЭлементНастройки = Контекст.ОтборыУзлаНастроек.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор); + Если ЭлементНастройки = Неопределено Тогда Возврат; КонецЕсли; - ТаблицыПолейУстановитьУровеньДоступа(Контекст.ТаблицаИмя, СтрокаТаблицы, ЭлементКД, ИндексКартинкиДоступа); + УстановитьРежимОтображения(Контекст.ИмяКоллекции, Строка, ЭлементНастройки, КартинкаРежимаОтображения); УстановитьМодифицированность(); КонецПроцедуры &НаКлиенте -Процедура ТаблицыПолейУстановитьУровеньДоступа(ИмяТаблицы, СтрокаТаблицы, ЭлементКД, ИндексКартинкиДоступа) - Если ИндексКартинкиДоступа = Неопределено Тогда - ИндексКартинкиДоступа = СтрокаТаблицы.ИндексКартинкиДоступа; +Процедура УстановитьРежимОтображения(ИмяКоллекции, Строка, ЭлементНастройки, КартинкаРежимаОтображения = Неопределено) + Если КартинкаРежимаОтображения = Неопределено Тогда + КартинкаРежимаОтображения = Строка.КартинкаРежимаОтображения; Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = ИндексКартинкиДоступа; + Строка.КартинкаРежимаОтображения = КартинкаРежимаОтображения; КонецЕсли; - Если ИндексКартинкиДоступа = 1 Или ИндексКартинкиДоступа = 2 Тогда - ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; - ИначеЕсли ИндексКартинкиДоступа = 3 Или ИндексКартинкиДоступа = 4 Тогда - ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; + Если КартинкаРежимаОтображения = 1 Или КартинкаРежимаОтображения = 2 Тогда + ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; + ИначеЕсли КартинкаРежимаОтображения = 3 Или КартинкаРежимаОтображения = 4 Тогда + ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; Иначе - ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; КонецЕсли; - Если ИмяТаблицы = "Отборы" И Не СтрокаТаблицы.ЭтоПараметр Тогда - Если ИндексКартинкиДоступа = 1 Или ИндексКартинкиДоступа = 3 Тогда + Если ИмяКоллекции = "Отборы" И Не Строка.ЭтоПараметр Тогда + Если КартинкаРежимаОтображения = 1 Или КартинкаРежимаОтображения = 3 Тогда // Когда ПредставлениеПользовательскойНастройки заполнено, // то Представление работает как переключатель, // но также может использоваться для вывода в табличный документ. - ЭлементКД.Представление = СтрокаТаблицы.Заголовок; + ЭлементНастройки.Представление = Строка.Заголовок; Иначе - ЭлементКД.Представление = ""; + ЭлементНастройки.Представление = ""; КонецЕсли; - Если СтрокаТаблицы.ЗаголовокПереопределен Тогда - ЭлементКД.ПредставлениеПользовательскойНастройки = СтрокаТаблицы.Заголовок; + + Если Не Строка.ЭтоПредопределенныйЗаголовок Тогда + ЭлементНастройки.ПредставлениеПользовательскойНастройки = Строка.Заголовок; КонецЕсли; - ИначеЕсли ИмяТаблицы = "Оформление" Тогда + ИначеЕсли ИмяКоллекции = "Оформление" Тогда // Особенность УО - ПредставлениеПользовательскойНастройки может очищаться после ПолучитьНастройки(). - Если СтрокаТаблицы.ЗаголовокПереопределен Тогда - // Когда ПредставлениеПользовательскойНастройки заполнено, - // то Представление работает как переключатель, - // но также может использоваться для вывода в табличный документ. - ЭлементКД.Представление = СтрокаТаблицы.Заголовок; - Иначе - Если ИндексКартинкиДоступа = 1 Или ИндексКартинкиДоступа = 3 Тогда + Если Строка.ЭтоПредопределенныйЗаголовок Тогда + Если КартинкаРежимаОтображения = 1 Или КартинкаРежимаОтображения = 3 Тогда // Когда ПредставлениеПользовательскойНастройки заполнено, // то Представление работает как переключатель, // но также может использоваться для вывода в табличный документ. - ЭлементКД.Представление = СтрокаТаблицы.Заголовок; + ЭлементНастройки.Представление = Строка.Заголовок; Иначе - ЭлементКД.Представление = ""; + ЭлементНастройки.Представление = ""; + КонецЕсли; + Иначе + // Когда ПредставлениеПользовательскойНастройки заполнено, + // то Представление работает как переключатель, + // но также может использоваться для вывода в табличный документ. + ЭлементНастройки.Представление = Строка.Заголовок; + КонецЕсли; + КонецЕсли; + + Если ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда + ЭлементНастройки.ИдентификаторПользовательскойНастройки = ""; + ИначеЕсли Не ЗначениеЗаполнено(ЭлементНастройки.ИдентификаторПользовательскойНастройки) Тогда + ЭлементНастройки.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; + КонецЕсли; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция КартинкаРежимаОтображенияЭлементаНастройки(ЭлементНастройки) + КартинкаРежимаОтображения = 5; + + Если ЗначениеЗаполнено(ЭлементНастройки.ИдентификаторПользовательскойНастройки) Тогда + Если ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + Или ТипЗнч(ЭлементНастройки) = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда + КартинкаРежимаОтображения = 2; + Иначе + КартинкаРежимаОтображения = ?(ЗначениеЗаполнено(ЭлементНастройки.Представление), 1, 2); + КонецЕсли; + ИначеЕсли ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + Или ТипЗнч(ЭлементНастройки) = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда + КартинкаРежимаОтображения = 4; + Иначе + КартинкаРежимаОтображения = ?(ЗначениеЗаполнено(ЭлементНастройки.Представление), 3, 4); КонецЕсли; КонецЕсли; КонецЕсли; - Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда - ЭлементКД.ИдентификаторПользовательскойНастройки = ""; - ИначеЕсли Не ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда - ЭлементКД.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; - КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Клиент - Оформление. - -&НаКлиенте -Процедура ОформлениеИзменитьЭлемент(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) - Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); - Обработчик = Новый ОписаниеОповещения("ОформлениеИзменитьЭлементЗавершение", ЭтотОбъект, Контекст); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); - ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); - ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); - Если СтрокаТаблицы = Неопределено Тогда - ПараметрыФормы.Вставить("ИдентификаторКД", Неопределено); - ПараметрыФормы.Вставить("Наименование", ""); - Иначе - ПараметрыФормы.Вставить("ИдентификаторКД", СтрокаТаблицы.ИдентификаторКД); - ПараметрыФормы.Вставить("Наименование", СтрокаТаблицы.Заголовок); - КонецЕсли; - ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Элемент условного оформления отчета ""%1""'"), ВариантНаименование)); - - ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ЭлементУсловногоОформленияОтчета", ПараметрыФормы, ЭтотОбъект, , , , Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура ОформлениеИзменитьЭлементЗавершение(Результат, Контекст) Экспорт - Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда - Возврат; - КонецЕсли; - ЭтоНовый = (Контекст.СтрокаИдентификатор = Неопределено); - - Таблица = ЭтотОбъект[Контекст.ТаблицаИмя]; - Если ЭтоНовый Тогда - РезультатВставки = ТаблицыПолейВставить(Контекст.ТаблицаИмя, Тип("ЭлементУсловногоОформленияКомпоновкиДанных"), 0, Ложь); - СтрокаТаблицы = РезультатВставки.СтрокаТаблицы; - УзелКД = РезультатВставки.УзелКД; - ЭлементКД = РезультатВставки.ЭлементКД; - СтрокаТаблицы.ИндексКартинкиДоступа = 4; - Иначе - СтрокаТаблицы = Таблица.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - ЭлементКД.Отбор.Элементы.Очистить(); - ЭлементКД.Поля.Элементы.Очистить(); - КонецЕсли; - - ОтчетыКлиентСервер.ЗаполнитьСвойстваРекурсивно(УзелКД, ЭлементКД, Результат.ЭлементКД); - - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Заголовок = Результат.Наименование; - СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); - - ТаблицыПолейУстановитьУровеньДоступа(Контекст.ТаблицаИмя, СтрокаТаблицы, ЭлементКД, Неопределено); - - Если СтрокаТаблицы.ЗаголовокПереопределен Тогда - ЭлементКД.ПредставлениеПользовательскойНастройки = СтрокаТаблицы.Заголовок; - Иначе - ЭлементКД.ПредставлениеПользовательскойНастройки = ""; - КонецЕсли; - - УстановитьМодифицированность(); -КонецПроцедуры + Возврат КартинкаРежимаОтображения; +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Клиент - Таблицы полей (функциональная часть). -&НаКлиенте -Процедура ТаблицыПолейРазгруппировать(ТаблицаИмя) - ТаблицаЭлемент = Элементы[ТаблицаИмя]; - ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; - ВыделенныеСтроки = ТаблицаЭлемент.ВыделенныеСтроки; - ВыделенныеСтроки = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ВыделенныеСтроки); // Для платформы. - Если ВыделенныеСтроки.Количество() <> 1 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выберите одну группу.'")); - Возврат; - КонецЕсли; - - ГруппаДерева = ТаблицаРеквизит.НайтиПоИдентификатору(ВыделенныеСтроки[0]); - Если ГруппаДерева = Неопределено Или Не ГруппаДерева.ЭтоГруппа Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'")); - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, Неопределено); - ГруппаКД = УзелКД.ПолучитьОбъектПоИдентификатору(ГруппаДерева.ИдентификаторКД); - - Родитель = ГруппаДерева.ПолучитьРодителя(); - Если Родитель = Неопределено Тогда - Родитель = ТаблицаРеквизит; - КонецЕсли; - НоваяКоллекцияСтрокДерева = Родитель.ПолучитьЭлементы(); - - РодительКД = ГруппаКД.Родитель; - Если РодительКД = Неопределено Тогда - РодительКД = УзелКД; - КонецЕсли; - НоваяКоллекцияЭлементовКД = РодительКД.Элементы; - - Индекс = НоваяКоллекцияСтрокДерева.Индекс(ГруппаДерева); - ИндексКД = НоваяКоллекцияЭлементовКД.Индекс(ГруппаКД); - - ТекущаяСтрока = Неопределено; - ВыделенныеСтроки = Новый Массив; - - СтрокиРодителя = ГруппаДерева.ПолучитьЭлементы(); - СтрокиРодителяКД = ГруппаКД.Элементы; - Для Каждого СтараяСтрокаДерева Из СтрокиРодителя Цикл - СтарыйЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтараяСтрокаДерева.ИдентификаторКД); - ПеренесенныеСтроки = ТаблицыПолейСкопироватьРекурсивно(УзелКД, СтараяСтрокаДерева, НоваяКоллекцияСтрокДерева, СтарыйЭлементКД, НоваяКоллекцияЭлементовКД, Индекс, ИндексКД); - Индекс = Индекс + 1; - ИндексКД = ИндексКД + 1; - Если ТекущаяСтрока = Неопределено Тогда - ТекущаяСтрока = ПеренесенныеСтроки.СтрокаДерева; - КонецЕсли; - ВыделенныеСтроки.Добавить(ПеренесенныеСтроки.СтрокаДерева); - КонецЦикла; - - НоваяКоллекцияСтрокДерева.Удалить(ГруппаДерева); - НоваяКоллекцияЭлементовКД.Удалить(ГруппаКД); - - Если ТекущаяСтрока <> Неопределено Тогда - ТаблицаЭлемент.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); - КонецЕсли; - ТаблицаЭлемент.ВыделенныеСтроки.Очистить(); - Для Каждого СтрокаДерева Из ВыделенныеСтроки Цикл - ТаблицаЭлемент.ВыделенныеСтроки.Добавить(СтрокаДерева.ПолучитьИдентификатор()); - КонецЦикла; - - УстановитьМодифицированность(); -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейПередУдалением(ТаблицаИмя, Отказ) - Отказ = Истина; - - Контекст = НовыйКонтекст(ТаблицаИмя, "Удалить"); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда - ПоказатьПредупреждение(, Контекст.ПричинаОтказа); - Возврат; - КонецЕсли; - - УдалитьСтроки(Контекст); - ОбновитьФорму(Контекст); -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменить(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) - Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); - Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьЗавершение", ЭтотОбъект, Контекст); - - Таблица = ЭтотОбъект[ТаблицаИмя]; - СтрокаТаблицы = Таблица.НайтиПоИдентификатору(СтрокаИдентификатор); - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - - ТаблицыПолейПоказатьВыборПоля(ТаблицаИмя, Обработчик, ?(ТаблицаИмя = "Отборы", ЭлементКД.ЛевоеЗначение, ЭлементКД.Поле)); -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьЗавершение(ДоступноеПолеКД, Контекст) Экспорт - Если ДоступноеПолеКД = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; - Если Контекст.ТаблицаИмя = "Отборы" Тогда - ЭлементКД.ЛевоеЗначение = ДоступноеПолеКД.Поле; - Если ДоступноеПолеКД.ДоступныеВидыСравнения <> Неопределено - И ДоступноеПолеКД.ДоступныеВидыСравнения.НайтиПоЗначению(ЭлементКД.ВидСравнения) = Неопределено - И ДоступноеПолеКД.ДоступныеВидыСравнения.Количество() > 0 Тогда - ЭлементКД.ВидСравнения = ДоступноеПолеКД.ДоступныеВидыСравнения[0].Значение; - КонецЕсли; - ОтчетыКлиентСервер.ПривестиЗначениеКТипу(ЭлементКД.ПравоеЗначение, ДоступноеПолеКД.ТипЗначения); - Обновить(); // Серьезные изменения, для учета всех связей и особенностей вывода следует перерисовать полностью. - Иначе - ЭлементКД.Поле = ДоступноеПолеКД.Поле; - КонецЕсли; - - УстановитьМодифицированность(); -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьИспользование(ТаблицаИмя) - Таблица = Элементы[ТаблицаИмя]; - СтрокаТаблицы = Таблица.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы, "ВыводитьФлажок") = Ложь Тогда - СтрокаТаблицы.Использование = Истина; - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - ЭлементКД.Использование = СтрокаТаблицы.Использование; - - ПослеИзмененияФлажкаИспользование(ТаблицаИмя, СтрокаТаблицы, ЭлементКД); - - УстановитьМодифицированность(); -КонецПроцедуры - -&НаКлиенте -Процедура ПослеИзмененияФлажкаИспользование(ТаблицаИмя, СтрокаТаблицы, ЭлементКД) - Если ТаблицаИмя = "СоставГруппировки" Тогда - СвязаннаяТаблицаИмя = "ВыбранныеПоля"; - ИначеЕсли ТаблицаИмя = "ВыбранныеПоля" Тогда - СвязаннаяТаблицаИмя = "СоставГруппировки"; - Иначе - СвязаннаяТаблицаИмя = Неопределено; - КонецЕсли; - - Если СвязаннаяТаблицаИмя <> Неопределено И ЗначениеЗаполнено(СтрокаТаблицы.ПолеКД) Тогда - Условие = Новый Структура("ПолеКД", СтрокаТаблицы.ПолеКД); - УстановитьФлажокИспользованиеПоУсловию(СвязаннаяТаблицаИмя, Условие, СтрокаТаблицы.Использование); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьФлажокИспользованиеПоУсловию(ТаблицаИмя, Условие, Использование) - Таблица = ЭтотОбъект[ТаблицаИмя]; - Найденные = ОтчетыКлиентСервер.НайтиСтрокиТаблицы(Таблица, Условие); - УзелКД = Неопределено; - Для Каждого СтрокаТаблицы Из Найденные Цикл - Если СтрокаТаблицы.Использование = Использование Тогда - Продолжить; - КонецЕсли; - Если УзелКД = Неопределено Тогда - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - КонецЕсли; - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Продолжить; - КонецЕсли; - СтрокаТаблицы.Использование = Использование; - ЭлементКД.Использование = Использование; - КонецЦикла; -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьФлажкиИспользованиеВоВсемДереве(ТаблицаИмя, Использование, МассивСтрок = Неопределено, УзелКД = Неопределено) - ОпределятьУзелНаЛету = Ложь; - Если МассивСтрок = Неопределено Тогда - МассивСтрок = ЭтотОбъект[ТаблицаИмя].ПолучитьЭлементы(); - ОпределятьУзелНаЛету = (ТаблицаИмя = "Отборы"); - КонецЕсли; - - Для Каждого СтрокаДерева Из МассивСтрок Цикл - Если УзелКД = Неопределено Или ОпределятьУзелНаЛету Тогда - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаДерева); - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаДерева, "ВыводитьФлажок") <> Ложь - И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаДерева, "ЭтоРаздел") <> Истина Тогда - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.ИдентификаторКД); - Если ЭлементКД <> Неопределено И ТипЗнч(ЭлементКД) <> Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") - И ТипЗнч(ЭлементКД) <> Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда - СтрокаДерева.Использование = Использование; - ЭлементКД.Использование = Использование; - ПослеИзмененияФлажкаИспользование(ТаблицаИмя, СтрокаДерева, ЭлементКД); - КонецЕсли; - КонецЕсли; - - УстановитьФлажкиИспользованиеВоВсемДереве(ТаблицаИмя, Использование, СтрокаДерева.ПолучитьЭлементы(), УзелКД); - КонецЦикла; - - УстановитьМодифицированность(); -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьЗначение(ТаблицаИмя) - СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - УстановитьЗначение(СтрокаТаблицы, УзелКД, ЭлементКД, СтрокаТаблицы.Значение); - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьТипГруппировки(ТаблицаИмя) - СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Если СтрокаТаблицы.ПоказыватьТипДополнения Тогда - ЭлементКД.ТипДополнения = СтрокаТаблицы.ТипДополнения; - Иначе - ЭлементКД.ТипГруппировки = СтрокаТаблицы.ТипГруппировки; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьГруппу(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - - Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); - Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьГруппуЗавершение", ЭтотОбъект, Контекст); - - Если ТаблицаИмя = "Отборы" Тогда - Список = Новый СписокЗначений; - Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); - Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли); - Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе); - ПоказатьВыборИзМеню(Обработчик, Список); - Иначе - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЗаголовокГруппы", ЭлементКД.Заголовок); - ПараметрыФормы.Вставить("Расположение", ЭлементКД.Расположение); - - Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ГруппаВыбранныхПолей", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик, Блокировать); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейИзменитьГруппуЗавершение(Результат, Контекст) Экспорт - Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда - Возврат; - КонецЕсли; - - СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - Если Контекст.ТаблицаИмя = "Отборы" Тогда - ЭлементКД.ТипГруппы = Результат.Значение; - СтрокаТаблицы.Представление = Строка(Результат.Значение); - Если Не СтрокаТаблицы.ЗаголовокПереопределен Тогда - СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; - КонецЕсли; - Иначе - ЭлементКД.Заголовок = Результат.ЗаголовокГруппы; - ЭлементКД.Расположение = Результат.Расположение; - СтрокаТаблицы.Представление = ЭлементКД.Заголовок; - Если ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда - СтрокаТаблицы.Представление = СтрокаТаблицы.Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; - КонецЕсли; - КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Функция ТаблицыПолейВставить(ТаблицаИмя, ТипЭлемента, ТекущаяСтрока, ВнутрьСтроки) - Если ТекущаяСтрока = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - ТаблицаЭлемент = Элементы[ТаблицаИмя]; - ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); - - Если ТекущаяСтрока = 0 Тогда - ТекущаяСтрока = ТаблицаЭлемент.ТекущиеДанные; - КонецЕсли; - - Если ТекущаяСтрока = Неопределено Тогда - - КудаВставить = ТаблицаРеквизит.ПолучитьЭлементы(); - Индекс = Неопределено; - ЭлементКД = Неопределено; - КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, ТекущаяСтрока); - ИндексКД = Неопределено; - - Иначе - - ЭлементКД = НайтиОбъектКД(УзелКД, ТекущаяСтрока); - Если ВнутрьСтроки = Неопределено Тогда - ВнутрьСтроки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ТекущаяСтрока, "ЭтоГруппа", Ложь); - КонецЕсли; - - Если ЭлементКД = Неопределено Тогда - ВнутрьСтроки = Истина; - КонецЕсли; - - Если ВнутрьСтроки Тогда - КудаВставить = ТекущаяСтрока.ПолучитьЭлементы(); - Индекс = Неопределено; - КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, ЭлементКД); - ИндексКД = Неопределено - Иначе // Вставка на один уровень со строкой. - СтрокаРодитель = ТекущаяСтрока.ПолучитьРодителя(); - Если СтрокаРодитель = Неопределено Тогда - КудаВставить = ТаблицаРеквизит.ПолучитьЭлементы(); - Иначе - КудаВставить = СтрокаРодитель.ПолучитьЭлементы(); - КонецЕсли; - Индекс = КудаВставить.Индекс(ТекущаяСтрока) + 1; - РодительКД = НайтиОбъектКД(УзелКД, СтрокаРодитель); - КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, РодительКД); - ИндексКД = КудаВставитьКД.Индекс(ЭлементКД) + 1; - КонецЕсли; - - КонецЕсли; - - Если Индекс = Неопределено Тогда - НоваяСтрока = КудаВставить.Добавить(); - Иначе - НоваяСтрока = КудаВставить.Вставить(Индекс); - КонецЕсли; - - Если ОтчетыКлиентСервер.ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипЗнч(КудаВставитьКД)) Тогда - Если ИндексКД = Неопределено Тогда - НовыйЭлементКД = КудаВставитьКД.Добавить(ТипЭлемента); - Иначе - НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД, ТипЭлемента); - КонецЕсли; - Иначе - Если ИндексКД = Неопределено Тогда - НовыйЭлементКД = КудаВставитьКД.Добавить(); - Иначе - НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД); - КонецЕсли; - КонецЕсли; - ТаблицаЭлемент.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); - НоваяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(НовыйЭлементКД); - - Результат = Новый Структура("СтрокаТаблицы, УзелКД, ЭлементКД"); - Результат.СтрокаТаблицы = НоваяСтрока; - Результат.УзелКД = УзелКД; - Результат.ЭлементКД = НовыйЭлементКД; - Возврат Результат; -КонецФункции - -&НаКлиенте -Функция ТаблицыПолейПереместить(Знач ТаблицаИмя, Знач СтрокаТаблицы, Знач НовыйРодитель, - Знач ПередЧемВставить = Неопределено, Знач Индекс = Неопределено, Знач ИндексКД = Неопределено) - Результат = Новый Структура("СтрокаТаблицы, ЭлементКД, Индекс, ИндексКД"); - - ТаблицаЭлемент = Элементы[ТаблицаИмя]; - ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; - - ДобавлятьВКонец = (НовыйРодитель = Неопределено); - КудаВставить = ПолучитьЭлементы(ТаблицаРеквизит, НовыйРодитель); - Если ПередЧемВставить = Неопределено И ТаблицаИмя <> "СтруктураВарианта" Тогда - ЭтоРаздел = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоРаздел"); - ЭтоГруппа = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоГруппа"); - Если ЭтоРаздел <> Истина И ЭтоГруппа <> Истина Тогда // На один уровень с родителем. - ПередЧемВставить = НовыйРодитель; - НовыйРодитель = ПолучитьРодителя(ТаблицаИмя, НовыйРодитель); - КудаВставить = ПолучитьЭлементы(ТаблицаРеквизит, НовыйРодитель); - КонецЕсли; - КонецЕсли; - - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); - ЭлементКД = НайтиОбъектКД(УзелКД, СтрокаТаблицы); - НовыйРодительКД = НайтиОбъектКД(УзелКД, НовыйРодитель); - КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, НовыйРодительКД); - ПередЧемВставитьКД = НайтиОбъектКД(УзелКД, ПередЧемВставить); - - СтарыйРодитель = ПолучитьРодителя(ТаблицаИмя, СтрокаТаблицы); - ОткудаПереместить = ПолучитьЭлементы(ТаблицаРеквизит, СтарыйРодитель); - - СтарыйРодительКД = НайтиОбъектКД(УзелКД, СтарыйРодитель); - ОткудаПереместитьКД = ПолучитьЭлементыКД(УзелКД, СтарыйРодительКД); - - Если ЭлементКД = ПередЧемВставитьКД Тогда - Результат.ЭлементКД = ЭлементКД; - Результат.СтрокаТаблицы = СтрокаТаблицы; - Иначе - Если Индекс = Неопределено Или ИндексКД = Неопределено Тогда - Если ПередЧемВставитьКД = Неопределено Тогда - Если ДобавлятьВКонец Тогда - Индекс = КудаВставить.Количество(); - ИндексКД = КудаВставитьКД.Количество(); - Иначе - Индекс = 0; - ИндексКД = 0; - КонецЕсли; - Иначе - Индекс = КудаВставить.Индекс(ПередЧемВставить); - ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД); - Если СтарыйРодитель = НовыйРодитель Тогда - СтарыйИндекс = ОткудаПереместить.Индекс(СтрокаТаблицы); - Если СтарыйИндекс <= Индекс Тогда - Индекс = Индекс + 1; - ИндексКД = ИндексКД + 1; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - ПоискЭлементовКД = Новый Соответствие; - Результат.ЭлементКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); - - ПоискСтрокТаблицы = Новый Соответствие; - Результат.СтрокаТаблицы = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, СтрокаТаблицы, КудаВставить, Индекс, ПоискСтрокТаблицы); - - Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл - СтараяСтрока = КлючИЗначение.Ключ; - НоваяСтрока = КлючИЗначение.Значение; - НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); - КонецЦикла; - - ОткудаПереместить.Удалить(СтрокаТаблицы); - ОткудаПереместитьКД.Удалить(ЭлементКД); - КонецЕсли; - - Результат.Индекс = КудаВставить.Индекс(Результат.СтрокаТаблицы); - Результат.ИндексКД = КудаВставитьКД.Индекс(Результат.ЭлементКД); - - Возврат Результат; -КонецФункции - -&НаКлиенте -Процедура ТаблицыПолейУдалить(Знач ТаблицаИмя, Знач СтрокаТаблицыИлиМассивСтрок, Знач ИспользованиеАвтоПолей) - Таблица = ЭтотОбъект[ТаблицаИмя]; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); - Если ТипЗнч(СтрокаТаблицыИлиМассивСтрок) = Тип("ДанныеФормыЭлементДерева") Тогда - ТаблицыПолейУдалитьМеханика(ТаблицаИмя, Таблица, УзелКД, СтрокаТаблицыИлиМассивСтрок, ИспользованиеАвтоПолей); - Иначе - Количество = СтрокаТаблицыИлиМассивСтрок.Количество(); - Для Номер = 1 По Количество Цикл - ОбратныйИндекс = Количество - Номер; - СтрокаТаблицы = СтрокаТаблицыИлиМассивСтрок[ОбратныйИндекс]; - ТаблицыПолейУдалитьМеханика(ТаблицаИмя, Таблица, УзелКД, СтрокаТаблицы, ИспользованиеАвтоПолей); - КонецЦикла; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицыПолейУдалитьМеханика(ТаблицаИмя, Таблица, УзелКД, СтрокаТаблицы, ИспользованиеАвтоПолей) - ЭлементКД = НайтиОбъектКД(УзелКД, СтрокаТаблицы); - - СвязаннаяТаблицаИмя = Неопределено; - Если ТаблицаИмя = "ВыбранныеПоля" Тогда - Если СтрокаТаблицы.ЭтоРаздел Тогда - Возврат; - ИначеЕсли СтрокаТаблицы.ТипНастройки = "АвтоВыбранноеПоле" Тогда - Если ИспользованиеАвтоПолей <> Неопределено И ЭлементКД.Использование <> ИспользованиеАвтоПолей Тогда - СтрокаТаблицы.Использование = ИспользованиеАвтоПолей; - ЭлементКД.Использование = ИспользованиеАвтоПолей; - КонецЕсли; - Возврат; - КонецЕсли; - СвязаннаяТаблицаИмя = "СоставГруппировки"; - ИначеЕсли ТаблицаИмя = "Сортировка" Тогда - Если СтрокаТаблицы.ЭтоРаздел Тогда - Возврат; - ИначеЕсли СтрокаТаблицы.ТипНастройки = "АвтоЭлементПорядка" Тогда - Если ИспользованиеАвтоПолей <> Неопределено И ЭлементКД.Использование <> ИспользованиеАвтоПолей Тогда - СтрокаТаблицы.Использование = ИспользованиеАвтоПолей; - ЭлементКД.Использование = ИспользованиеАвтоПолей; - КонецЕсли; - Возврат; - КонецЕсли; - ИначеЕсли ТаблицаИмя = "СоставГруппировки" Тогда - Если СтрокаТаблицы.ТипНастройки = "АвтоПолеГруппировки" Тогда - Если ИспользованиеАвтоПолей <> Неопределено И ЭлементКД.Использование <> ИспользованиеАвтоПолей Тогда - СтрокаТаблицы.Использование = ИспользованиеАвтоПолей; - ЭлементКД.Использование = ИспользованиеАвтоПолей; - КонецЕсли; - Возврат; - КонецЕсли; - СвязаннаяТаблицаИмя = "ВыбранныеПоля"; - КонецЕсли; - Если СвязаннаяТаблицаИмя <> Неопределено И ЗначениеЗаполнено(СтрокаТаблицы.ПолеКД) Тогда - Условие = Новый Структура("ПолеКД", СтрокаТаблицы.ПолеКД); - УстановитьФлажокИспользованиеПоУсловию(СвязаннаяТаблицаИмя, Условие, Ложь); - КонецЕсли; - - Родитель = ПолучитьРодителя(ТаблицаИмя, СтрокаТаблицы); - СтрокиРодителя = ПолучитьЭлементы(Таблица, Родитель); - - РодительКД = НайтиОбъектКД(УзелКД, Родитель); - СтрокиРодителяКД = ПолучитьЭлементыКД(УзелКД, РодительКД); - - СтрокиРодителя.Удалить(СтрокаТаблицы); - СтрокиРодителяКД.Удалить(ЭлементКД); - -КонецПроцедуры - &НаКлиентеНаСервереБезКонтекста -Функция НайтиОбъектКД(Знач УзелКД, Знач СтрокаТаблицы) - Если СтрокаТаблицы = Неопределено Или ТипЗнч(СтрокаТаблицы.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда - Возврат Неопределено; - Иначе - Возврат УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); +Функция ЭлементНастройки(Знач УзелНастроек, Знач Строка) + ЭлементНастройки = Неопределено; + + Если Строка <> Неопределено + И ТипЗнч(Строка.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда + + ЭлементНастройки = УзелНастроек.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор); КонецЕсли; + + Если ТипЗнч(ЭлементНастройки) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ЭлементНастройки = ЭлементНастройки.Настройки; + КонецЕсли; + + Возврат ЭлементНастройки; КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьЭлементыКД(Знач УзелКД, Знач ОбъектКД) - Если ОбъектКД = Неопределено Тогда - ОбъектКД = УзелКД; +Функция ЭлементыНастроек(Знач СвойствоЭлементаСтруктуры, Знач ЭлементНастройки = Неопределено, ИмяКоллекции = Неопределено) + Если ЭлементНастройки = Неопределено Тогда + ЭлементНастройки = СвойствоЭлементаСтруктуры; КонецЕсли; - ТипОбъекта = ТипЗнч(ОбъектКД); + + Если ИмяКоллекции <> Неопределено + И СтрРазделить("Строки, Колонки, Серии, Точки", ", ", Ложь).Найти(ИмяКоллекции) <> Неопределено Тогда + Возврат ЭлементНастройки[ИмяКоллекции]; + КонецЕсли; + + ТипОбъекта = ТипЗнч(ЭлементНастройки); Если ТипОбъекта = Тип("НастройкиКомпоновкиДанных") Или ТипОбъекта = Тип("ГруппировкаКомпоновкиДанных") Или ТипОбъекта = Тип("ГруппировкаТаблицыКомпоновкиДанных") Или ТипОбъекта = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда - Возврат ОбъектКД.Структура; - ИначеЕсли ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + + Возврат ЭлементНастройки.Структура; + ИначеЕсли ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") + Или ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Или ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда - Возврат ОбъектКД; - Иначе - Возврат ОбъектКД.Элементы; + + Возврат ЭлементНастройки; + ИначеЕсли ТипОбъекта = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + + Возврат ЭлементНастройки.Настройки.Структура; КонецЕсли; + + Возврат ЭлементНастройки.Элементы; +КонецФункции + +&НаКлиенте +Функция ИмяКоллекцииНастроекПоИдентификатору(Идентификатор) + ИмяКоллекции = Неопределено; + + Путь = ВРег(Идентификатор); + Если СтрНайти(Путь, "SERIES") > 0 Тогда + ИмяКоллекции = "Серии"; + ИначеЕсли СтрНайти(Путь, "POINT") > 0 Тогда + ИмяКоллекции = "Точки"; + ИначеЕсли СтрНайти(Путь, "ROW") > 0 Тогда + ИмяКоллекции = "Строки"; + ИначеЕсли СтрНайти(Путь, "COLUMN") > 0 Тогда + ИмяКоллекции = "Колонки"; + КонецЕсли; + + Возврат ИмяКоллекции; +КонецФункции + +&НаКлиенте +Функция ПолучитьРодителяЭлементаНастройки(Знач СвойствоЭлементаСтруктуры, Знач ЭлементНастройки) + Родитель = Неопределено; + + ТипЭлемента = ТипЗнч(ЭлементНастройки); + Если ЭлементНастройки <> Неопределено + И ТипЭлемента <> Тип("ПолеГруппировкиКомпоновкиДанных") + И ТипЭлемента <> Тип("АвтоЭлементПорядкаКомпоновкиДанных") + И ТипЭлемента <> Тип("ЭлементПорядкаКомпоновкиДанных") + И ТипЭлемента <> Тип("ЭлементУсловногоОформленияКомпоновкиДанных") + И ТипЭлемента <> Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда + Родитель = ЭлементНастройки.Родитель; + КонецЕсли; + + Если Родитель = Неопределено Тогда + Родитель = СвойствоЭлементаСтруктуры; + КонецЕсли; + + Возврат Родитель; КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьЭлементы(Знач ДеревоФормы, Знач СтрокаДерева) - Если СтрокаДерева = Неопределено Тогда - СтрокаДерева = ДеревоФормы; +Функция ПолучитьЭлементы(Знач Дерево, Знач Строка) + Если Строка = Неопределено Тогда + Строка = Дерево; КонецЕсли; - Возврат СтрокаДерева.ПолучитьЭлементы(); + Возврат Строка.ПолучитьЭлементы(); КонецФункции &НаКлиенте -Функция ПолучитьРодителя(Знач ТаблицаИмя, Знач СтрокаДерева) - Если СтрокаДерева = Неопределено Тогда - СтрокаРодителя = Неопределено; - Иначе - СтрокаРодителя = СтрокаДерева.ПолучитьРодителя(); +Функция ПолучитьРодителя(Знач ИмяКоллекции, Знач Строка = Неопределено) + Родитель = Неопределено; + + Если Строка <> Неопределено Тогда + Родитель = Строка.ПолучитьРодителя(); КонецЕсли; - Если СтрокаРодителя = Неопределено Тогда - СтрокаРодителя = КорневаяСтрокаПоУмолчанию(ТаблицаИмя); + Если Родитель = Неопределено Тогда + Родитель = КорневаяСтрокаПоУмолчанию(ИмяКоллекции); КонецЕсли; - Возврат СтрокаРодителя; + Если Родитель = Неопределено Тогда + Родитель = ЭтотОбъект[ИмяКоллекции]; + КонецЕсли; + + Возврат Родитель; КонецФункции &НаКлиенте -Функция КорневаяСтрокаПоУмолчанию(Знач ТаблицаИмя) +Функция КорневаяСтрокаПоУмолчанию(Знач ИмяКоллекции) + КорневаяСтрока = Неопределено; - Если ТаблицаИмя = "ВыбранныеПоля" Тогда - Возврат ВыбранныеПоля.ПолучитьЭлементы()[0]; - - ИначеЕсли ТаблицаИмя = "Сортировка" Тогда - Возврат Сортировка.ПолучитьЭлементы()[0]; - - ИначеЕсли ТаблицаИмя = "СтруктураВарианта" Тогда - Возврат СтруктураВарианта.ПолучитьЭлементы()[0]; - - ИначеЕсли ТаблицаИмя = "Отборы" Тогда - Если РежимИзмененияУзлаВарианта Тогда - Возврат Отборы.ПолучитьЭлементы()[0]; + Если ИмяКоллекции = "ВыбранныеПоля" Тогда + КорневаяСтрока = ВыбранныеПоля.ПолучитьЭлементы()[0]; + ИначеЕсли ИмяКоллекции = "Сортировка" Тогда + КорневаяСтрока = Сортировка.ПолучитьЭлементы()[0]; + ИначеЕсли ИмяКоллекции = "СтруктураВарианта" Тогда + КорневаяСтрока = СтруктураВарианта.ПолучитьЭлементы()[0]; + ИначеЕсли ИмяКоллекции = "Параметры" Тогда + Если Не РежимИзмененияЭлементаСтруктурыНастроек Тогда + КорневаяСтрока = Отборы.ПолучитьЭлементы()[0]; + КонецЕсли; + ИначеЕсли ИмяКоллекции = "Отборы" Тогда + Если РежимИзмененияЭлементаСтруктурыНастроек Тогда + КорневаяСтрока = Отборы.ПолучитьЭлементы()[0]; Иначе - Возврат Отборы.ПолучитьЭлементы()[1]; + КорневаяСтрока = Отборы.ПолучитьЭлементы()[1]; + КонецЕсли; + ИначеЕсли ИмяКоллекции = "Оформление" Тогда + Если Не РежимИзмененияЭлементаСтруктурыНастроек Тогда + КорневаяСтрока = Оформление.ПолучитьЭлементы()[2]; КонецЕсли; - - Иначе - Возврат Неопределено; КонецЕсли; + Возврат КорневаяСтрока; КонецФункции &НаКлиенте -Функция НайтиПоИдентификатору(ТаблицаРеквизит, ИдентификаторСтроки) - Если ИдентификаторСтроки = Неопределено Тогда - СтрокаТаблицы = Неопределено; - Иначе - СтрокаТаблицы = ТаблицаРеквизит.НайтиПоИдентификатору(ИдентификаторСтроки); - КонецЕсли; - Возврат СтрокаТаблицы; -КонецФункции - -&НаКлиенте -Процедура ТаблицыПолейИзменитьНаправлениеСортировки(ТаблицаИмя, СтрокаТаблицы, Направление) - Если СтрокаТаблицы = Неопределено Тогда - СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - КонецЕсли; +Процедура ВыбратьПоле(ИмяКоллекции, Обработчик, Поле = Неопределено, ИдентификаторУзлаНастроек = Неопределено) + ПараметрыВыбора = Новый Структура; + ПараметрыВыбора.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыВыбора.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); + ПараметрыВыбора.Вставить("Режим", ИмяКоллекции); + ПараметрыВыбора.Вставить("ПолеКД", Поле); + ПараметрыВыбора.Вставить("ИдентификаторЭлементаСтруктурыНастроек", + ?(ИдентификаторУзлаНастроек = Неопределено, ИдентификаторЭлементаСтруктурыНастроек, ИдентификаторУзлаНастроек)); - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда - Возврат; - КонецЕсли; - - // Заполнение необязательных параметров. - Если Направление = Неопределено Тогда - Если ЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр Тогда - Направление = НаправлениеСортировкиКомпоновкиДанных.Убыв; - Иначе - Направление = НаправлениеСортировкиКомпоновкиДанных.Возр; - КонецЕсли; - КонецЕсли; - - // Изменение направления сортировки. - ЭлементКД.ТипУпорядочивания = Направление; - СтрокаТаблицы.Направление = Направление; - - УстановитьМодифицированность(); + ОткрытьФорму( + "ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ВыборПоляОтчета", + ПараметрыВыбора, ЭтотОбъект, УникальныйИдентификатор,,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры &НаКлиенте -Процедура ТаблицыПолейПоказатьВыборПоля(ТаблицаИмя, Обработчик, ПолеКД = Неопределено, ИдентификаторУзлаКД = Неопределено) - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); - ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); - ПараметрыФормы.Вставить("Режим", ТаблицаИмя); - ПараметрыФормы.Вставить("ПолеКД", ПолеКД); - ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", ?(ИдентификаторУзлаКД = Неопределено, ИдентификаторТекущегоУзлаКД, ИдентификаторУзлаКД)); +Процедура ОбновитьЗаголовокЭлементаСтруктурыВарианта(Строка) + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура"); - Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ВыборПоляОтчета", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик, Блокировать); -КонецПроцедуры - -&НаКлиенте -Функция ТаблицыПолейСкопироватьРекурсивно(УзелКД, ЧтоКопировать, КудаВставить, ЧтоКопироватьКД, КудаВставитьКД, Индекс = Неопределено, ИндексКД = Неопределено) - Результат = Новый Структура("СтрокаДерева, СтрокаКД"); - - ПоискЭлементовКД = Новый Соответствие; - Результат.СтрокаКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЧтоКопироватьКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); - - ПоискСтрокТаблицы = Новый Соответствие; - Результат.СтрокаДерева = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, ЧтоКопировать, КудаВставить, Индекс, ПоискСтрокТаблицы); - - Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл - СтараяСтрока = КлючИЗначение.Ключ; - НоваяСтрока = КлючИЗначение.Значение; - НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); - КонецЦикла; - - Возврат Результат; -КонецФункции - -&НаКлиенте -Процедура СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы) - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СтруктураВарианта", СтрокаТаблицы); - ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); - Если ЭлементКД = Неопределено Тогда + ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка); + Если ЭлементНастройки = Неопределено Тогда Возврат; КонецЕсли; - Если ТипЗнч(ЭлементКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - ЭлементКД = ЭлементКД.Настройки; - КонецЕсли; - ЗаголовокИспользование = ЗначениеЗаполнено(СтрокаТаблицы.Заголовок); - - ЗначениеПараметраКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьЗаголовок")); - Если ЗначениеПараметраКД <> Неопределено Тогда - ЗначениеПараметраКД.Использование = Истина; - Если ЗаголовокИспользование Тогда - ЗначениеПараметраКД.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить; + ЗначениеПараметра = ЭлементНастройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьЗаголовок")); + Если ЗначениеПараметра <> Неопределено Тогда + ЗначениеПараметра.Использование = Истина; + Если ЗначениеЗаполнено(Строка.Заголовок) Тогда + ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить; Иначе - ЗначениеПараметраКД.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить; + ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить; КонецЕсли; КонецЕсли; - ЗначениеПараметраКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок")); - Если ЗначениеПараметраКД <> Неопределено Тогда - ЗначениеПараметраКД.Использование = Истина; - ЗначениеПараметраКД.Значение = СтрокаТаблицы.Заголовок; + ЗначениеПараметра = ЭлементНастройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок")); + Если ЗначениеПараметра <> Неопределено Тогда + ЗначениеПараметра.Использование = Истина; + ЗначениеПараметра.Значение = Строка.Заголовок; КонецЕсли; КонецПроцедуры @@ -4483,20 +5209,969 @@ // Клиент или сервер &НаКлиентеНаСервереБезКонтекста -Функция ЭтоГруппа(ТипЭлемента) - Если ТипЭлемента = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") - Или ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") - Или ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") - Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") - Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") - Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда - Возврат Истина; +Функция МассивСортировать(ИсходныйМассив, Направление = Неопределено) + Если Направление = Неопределено Тогда + Направление = НаправлениеСортировки.Возр; КонецЕсли; - Возврат Ложь; + + Список = Новый СписокЗначений; + Список.ЗагрузитьЗначения(ИсходныйМассив); + Список.СортироватьПоЗначению(Направление); + + Возврат Список.ВыгрузитьЗначения(); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вызов сервера + +&НаСервере +Процедура ОбновитьФорму(ПараметрыОбновления = Неопределено) + СодержитВложенныеОтчеты = Ложь; + СодержитВложенныеОтборы = Ложь; + СодержитВложенныеПоляИлиСортировки = Ложь; + СодержитВложенноеУсловноеОформление = Ложь; + СодержитПользовательскиеЭлементыСтруктуры = Ложь; + + ЗагрузитьНастройкиВКомпоновщик(ПараметрыОбновления); + + Если РасширенныйРежим = 0 Тогда + ОтчетыСервер.ОбновитьЭлементыФормыНастроек(ЭтотОбъект, Элементы.Основное); + КонецЕсли; + + ОбновитьКоллекцииФормыНастроек(); + + УстановитьТипДиаграммы(); + ОбновитьСвойстваЭлементовФормы(); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьКоллекцииФормыНастроек() + // Очистка настроек. + СоставГруппировки.ПолучитьЭлементы().Очистить(); + Отборы.ПолучитьЭлементы().Очистить(); + ВыбранныеПоля.ПолучитьЭлементы().Очистить(); + Сортировка.ПолучитьЭлементы().Очистить(); + Оформление.ПолучитьЭлементы().Очистить(); + СтруктураВарианта.ПолучитьЭлементы().Очистить(); + + УстановитьТипДиаграммы(); + + // Обновление настроек. + ОбновитьПоляГруппировки(); + ОбновитьПараметрыДанных(); + ОбновитьОтборы(); + ОбновитьВыбранныеПоля(); + ОбновитьСортировку(); + ОбновитьОформление(); + ОбновитьСтруктуру(); + + // Поиск помеченных на удаление. + ПомеченныеНаУдаление.Очистить(); + НайтиПомеченныеНаУдалениеПоля(); +КонецПроцедуры + +&НаСервере +Процедура УстановитьТипДиаграммы() + Элементы.ТекущийТипДиаграммы.Видимость = Ложь; + + Если ТипЭлементаСтруктурыНастроек <> "ДиаграммаКомпоновкиДанных" Тогда + Возврат; + КонецЕсли; + + Элементы.ТекущийТипДиаграммы.ОграничениеТипа = Новый ОписаниеТипов("ТипДиаграммы"); + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторЭлементаСтруктурыНастроек); + Если ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ЭлементСтруктуры = ЭлементСтруктуры.Настройки; + КонецЕсли; + + ЭлементНастройки = ЭлементСтруктуры.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ТипДиаграммы")); + Если ЭлементНастройки <> Неопределено Тогда + ТекущийТипДиаграммы = ЭлементНастройки.Значение; + КонецЕсли; + + Элементы.ТекущийТипДиаграммы.Видимость = (ЭлементНастройки <> Неопределено); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСвойстваЭлементовФормы() + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; + + #Область ОбщиеПризнакиСвойствЭлементов + + ЭтоРасширенныйРежим = Булево(РасширенныйРежим); + ОтображатьИнформацию = ЭтоРасширенныйРежим И Не РежимИзмененияЭлементаСтруктурыНастроек; + + #КонецОбласти + + #Область СвойстваЭлементовПростогоРежимаРедактирования + + Элементы.Основное.Видимость = Не ЭтоРасширенныйРежим; + Элементы.Дополнительно.Видимость = Не ЭтоРасширенныйРежим; + + Элементы.ВыводитьЗаголовок.Видимость = Не ЭтоРасширенныйРежим; + Элементы.ВыводитьПараметрыИОтборы.Видимость = Не ЭтоРасширенныйРежим; + + #КонецОбласти + + #Область СвойстваЭлементовСтраницыСоставГруппировки + + ОтображатьСоставГруппировки = (ЭтоРасширенныйРежим + И РежимИзмененияЭлементаСтруктурыНастроек + И ТипЭлементаСтруктурыНастроек <> "ДиаграммаКомпоновкиДанных"); + + Элементы.СтраницаСоставГруппировки.Видимость = ОтображатьСоставГруппировки; + Элементы.КомандыСоставаГруппировки.Видимость = ОтображатьСоставГруппировки; + Элементы.СоставГруппировки.Видимость = ОтображатьСоставГруппировки; + + #КонецОбласти + + #Область СвойстваЭлементовСтраницыОтборы + + ОтображатьОтборы = (ЭтоРасширенныйРежим + И ТипЭлементаСтруктурыНастроек <> "ДиаграммаКомпоновкиДанных"); + + Если ЭтоРасширенныйРежим Тогда + Элементы.СтраницаОтборы.Заголовок = НСтр("ru = 'Отборы'"); + Иначе + Элементы.СтраницаОтборы.Заголовок = НСтр("ru = 'Основное'"); + КонецЕсли; + + Элементы.Отборы.Видимость = ОтображатьОтборы; + Элементы.ГруппаЕстьВложенныеОтборы.Видимость = ОтображатьОтборы; + Элементы.ГруппаЕстьВложенныеОтборы.Видимость = ОтображатьОтборы + И СодержитВложенныеОтборы + И ОтображатьИнформацию; + + #КонецОбласти + + #Область СвойстваЭлементовСтраницыПоляИСортировки + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + ОтображатьВыбранныеПоля = + ЗначениеЗаполнено(СвойствоЭлементаСтруктуры.ИдентификаторПользовательскойНастройки) Или ЭтоРасширенныйРежим; + + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим); + ОтображатьСортировки = + ТипЭлементаСтруктурыНастроек <> "ДиаграммаКомпоновкиДанных" + И (ЗначениеЗаполнено(СвойствоЭлементаСтруктуры.ИдентификаторПользовательскойНастройки) Или ЭтоРасширенныйРежим); + + Если ОтображатьВыбранныеПоля И ОтображатьСортировки Тогда + Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Поля и сортировки'"); + ИначеЕсли ОтображатьВыбранныеПоля Тогда + Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Поля'"); + ИначеЕсли ОтображатьСортировки Тогда + Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Сортировки'"); + КонецЕсли; + + Элементы.ВыбранныеПоля.Видимость = ОтображатьВыбранныеПоля; + Элементы.КомандыВыбранныхПолей_ДобавлениеУдаление.Видимость = ОтображатьВыбранныеПоля И ЭтоРасширенныйРежим; + Элементы.КомандыВыбранныхПолей_ДобавлениеУдаление1.Видимость = ОтображатьВыбранныеПоля И ЭтоРасширенныйРежим; + Элементы.КомандыВыбранныхПолей_Группы.Видимость = ОтображатьВыбранныеПоля И ЭтоРасширенныйРежим; + Элементы.КомандыВыбранныхПолей_Группы1.Видимость = ОтображатьВыбранныеПоля И ЭтоРасширенныйРежим; + + Элементы.КомандыПолейИСортировок.Видимость = ОтображатьВыбранныеПоля И ОтображатьСортировки; + + Элементы.Сортировка.Видимость = ОтображатьСортировки; + Элементы.КомандыСортировки_ДобавлениеУдаление.Видимость = ОтображатьСортировки И ЭтоРасширенныйРежим; + Элементы.КомандыСортировки_ДобавлениеУдаление1.Видимость = ОтображатьСортировки И ЭтоРасширенныйРежим; + + Элементы.ГруппаЕстьВложенныеПоляИлиСортировки.Видимость = СодержитВложенныеПоляИлиСортировки И ОтображатьИнформацию; + + #КонецОбласти + + #Область СвойстваЭлементовСтраницыОформление + + ОтображатьОформление = ЭтоРасширенныйРежим; + Элементы.Оформление.Видимость = ОтображатьОформление; + Элементы.ГруппаЕстьВложенноеОформление.Видимость = ОтображатьОформление + И СодержитВложенноеУсловноеОформление + И ОтображатьИнформацию; + + #КонецОбласти + + #Область СвойстваЭлементовСтраницыСтруктураВарианта + + ОтображатьСтруктуруВарианта = (СодержитПользовательскиеЭлементыСтруктуры Или ЭтоРасширенныйРежим) + И Не РежимИзмененияЭлементаСтруктурыНастроек; + Элементы.СтраницаСтруктураВарианта.Видимость = ОтображатьСтруктуруВарианта; + + Элементы.КомандыСтруктурыВарианта_Добавление.Видимость = ЭтоРасширенныйРежим; + Элементы.КомандыСтруктурыВарианта_Добавление1.Видимость = ЭтоРасширенныйРежим; + Элементы.КомандыСтруктурыВарианта_Изменение.Видимость = ЭтоРасширенныйРежим; + Элементы.КомандыСтруктурыВарианта_Изменение1.Видимость = ЭтоРасширенныйРежим; + Элементы.КомандыСтруктурыВарианта_ДвижениеПоИерархии.Видимость = ЭтоРасширенныйРежим; + Элементы.КомандыСтруктурыВарианта_ДвижениеПоИерархии1.Видимость = ЭтоРасширенныйРежим; + Элементы.КомандыСтруктурыВарианта_ДвижениеВнутриРодителя.Видимость = ЭтоРасширенныйРежим; + Элементы.КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1.Видимость = ЭтоРасширенныйРежим; + + Элементы.СтруктураВарианта.ИзменятьСоставСтрок = ЭтоРасширенныйРежим; + Элементы.СтруктураВарианта.ИзменятьПорядокСтрок = ЭтоРасширенныйРежим; + Элементы.СтруктураВарианта.РазрешитьНачалоПеретаскивания = ЭтоРасширенныйРежим; + Элементы.СтруктураВарианта.РазрешитьПеретаскивание = ЭтоРасширенныйРежим; + Элементы.СтруктураВарианта.Шапка = ЭтоРасширенныйРежим; + + Элементы.СтруктураВариантаЗаголовок.Видимость = ЭтоРасширенныйРежим; + + Элементы.СтруктураВариантаСодержитОтборы.Видимость = ЭтоРасширенныйРежим; + Элементы.СтруктураВариантаСодержитПоляИлиСортировки.Видимость = ЭтоРасширенныйРежим; + Элементы.СтруктураВариантаСодержитУсловноеОформление.Видимость = ЭтоРасширенныйРежим; + + #КонецОбласти + + #Область ОбщиеСвойстваЭлементов + + Если Не ЭтоРасширенныйРежим + И ЭтоМобильныйКлиент Тогда + ОтображатьСтраницы = Ложь; + Иначе + ОтображатьСтраницы = + ОтображатьСоставГруппировки + Или ОтображатьОтборы + Или ОтображатьВыбранныеПоля + Или ОтображатьСортировки + Или ОтображатьОформление + Или ОтображатьСтруктуруВарианта; + КонецЕсли; + + Если ОтображатьСтраницы Тогда + Элементы.СтраницыНастроек.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Иначе + Элементы.СтраницыНастроек.ТекущаяСтраница = Элементы.СтраницаОтборы; + Элементы.СтраницыНастроек.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + КонецЕсли; + + Элементы.ГруппаЕстьВложенныеОтчеты.Видимость = СодержитВложенныеОтчеты И ОтображатьИнформацию; + Элементы.ГруппаЕстьНесуществующиеПоля.Видимость = ПомеченныеНаУдаление.Количество() > 0 И ОтображатьИнформацию; + + Элементы.РасширенныйРежим.Видимость = НастройкиОтчета.РазрешеноИзменятьВарианты И Не РежимИзмененияЭлементаСтруктурыНастроек; + Элементы.ИзменитьУсловияОтборов.Видимость = РазрешитьИзменятьУсловияОтборов(); + + Если РежимИзмененияЭлементаСтруктурыНастроек Тогда + Элементы.ЗакрытьИСформировать.Заголовок = НСтр("ru = 'Завершить редактирование'"); + Элементы.Закрыть.Заголовок = НСтр("ru = 'Отмена'"); + Иначе + Элементы.ЗакрытьИСформировать.Заголовок = НСтр("ru = 'Закрыть и сформировать'"); + Элементы.Закрыть.Заголовок = НСтр("ru = 'Закрыть'"); + КонецЕсли; + + КоличествоДоступныхНастроек = ОтчетыСервер.КоличествоДоступныхНастроек(Отчет.КомпоновщикНастроек); + Элементы.ЗакрытьИСформировать.Видимость = КоличествоДоступныхНастроек.Итог > 0 Или ОтображатьСтраницы; + + #КонецОбласти +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Сервер + +&НаСервере +Процедура ОпределитьПоведениеВМобильномКлиенте() + ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент(); + Если Не ЭтоМобильныйКлиент Тогда + Возврат; + КонецЕсли; + + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + Элементы.ЗакрытьИСформировать.Отображение = ОтображениеКнопки.Картинка; +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформление() + УсловноеОформление.Элементы.Очистить(); + + #Область УсловноеОформлениеТаблицыФормыСоставГруппировки + + // ПоказыватьТипДополнения = Истина. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СоставГруппировки.ПоказыватьТипДополнения"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставГруппировкиТипГруппировки.Имя); + + // ПоказыватьТипДополнения = Ложь. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СоставГруппировки.ПоказыватьТипДополнения"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставГруппировкиТипДополнения.Имя); + + // Заголовок - Заполнено. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СоставГруппировки.Заголовок"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("СоставГруппировки.Заголовок")); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставГруппировкиПоле.Имя); + + #КонецОбласти + + #Область УсловноеОформлениеТаблицыФормыОтборы + + // ЭтоРаздел = Истина. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыКартинкаРежимаОтображения.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеПользовательскойНастройки.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЛевоеЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПравоеЗначение.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыИспользование.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЛевоеЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыКартинкаРежимаОтображения.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеПользовательскойНастройки.Имя); + + // ЭтоПараметр = Истина. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыКартинкаРежимаОтображения.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЛевоеЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПравоеЗначение.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЛевоеЗначение.Имя); + + // ЭтоПериод = Истина. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПериод"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя); + + // ОтображатьИспользование = Ложь. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ОтображатьИспользование"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыИспользование.Имя); + + // ЭтоРаздел = Ложь; ЭтоПараметр = Ложь; ЭтоГруппа = Ложь - это элемент отбора. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЛевоеЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыКартинкаРежимаОтображения.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя); + + // ЭтоГруппа = Истина. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыКартинкаРежимаОтображения.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЛевоеЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЛевоеЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПравоеЗначение.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.Заголовок"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("Отборы.ТипГруппы")); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеПользовательскойНастройки.Имя); + + // ЭтоУникальныйИдентификатор = Истина. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоУникальныйИдентификатор"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПравоеЗначение.Имя); + + // Заголовок - Заполнено. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.Заголовок"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("Отборы.Заголовок")); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЛевоеЗначение.Имя); + + // ПредставлениеЗначения - Заполнено. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ПредставлениеЗначения"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("Отборы.ПредставлениеЗначения")); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПравоеЗначение.Имя); + + // ЭтоПредопределенныйЗаголовок = Истина. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПредопределенныйЗаголовок"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеПользовательскойНастройки.Имя); + + #КонецОбласти + + #Область УсловноеОформлениеТаблицыФормыВыбранныеПоля + + // ЭтоРаздел = Истина. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВыбранныеПоля.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВыбранныеПоляИспользование.Имя); + + // Заголовок - Заполнено. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВыбранныеПоля.Заголовок"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("ВыбранныеПоля.Заголовок")); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВыбранныеПоляПоле.Имя); + + #КонецОбласти + + #Область УсловноеОформлениеТаблицыФормыСортировка + + // ЭтоРаздел = Истина. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сортировка.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаИспользование.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаТипУпорядочивания.Имя); + + // ЭтоАвтоПоле = Истина. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сортировка.ЭтоАвтоПоле"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаТипУпорядочивания.Имя); + + // Заголовок - Заполнено. + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сортировка.Заголовок"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("Сортировка.Заголовок")); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаПоле.Имя); + + #КонецОбласти + + #Область УсловноеОформлениеТаблицыФормыОформление + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформлениеЗаголовок.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформлениеИндексКартинкиДоступа.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Оформление.ЭтоПараметрВывода"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформлениеИспользование.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформлениеЗаголовок.Имя); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформлениеИндексКартинкиДоступа.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Оформление.ЭтоРаздел"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + + #КонецОбласти + + #Область УсловноеОформлениеТаблицыФормыСтруктураВарианта + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтруктураВарианта.ЭтоГруппа"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаПредставление.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтруктураВарианта.Заголовок"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РасширенныйРежим"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("СтруктураВарианта.Заголовок")); + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,, Истина)); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаПредставление.Имя); + + // + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтруктураВарианта.ФлажокДоступен"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаИспользование.Имя); + + #КонецОбласти +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьНастройкиВКомпоновщик(ПараметрыЗагрузки) + ПроверитьПараметрыЗагрузки(ПараметрыЗагрузки); + + ДоступныеНастройки = ОтчетыСервер.ДоступныеНастройки(ПараметрыЗагрузки, НастройкиОтчета); + + ОбновитьНастройкиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗагрузки, "ОбновитьНастройкиВарианта", Ложь); + Если ОбновитьНастройкиВарианта Тогда + ДоступныеНастройки.Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); + Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Новый НастройкиКомпоновкиДанных); + ДоступныеНастройки.ФиксированныеНастройки = Отчет.КомпоновщикНастроек.ФиксированныеНастройки; + КонецЕсли; + + СброситьПользовательскиеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗагрузки, "СброситьПользовательскиеНастройки", Ложь); + Если СброситьПользовательскиеНастройки Тогда + ДоступныеНастройки.ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; + КонецЕсли; + + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗагрузки.ОтчетОбъектИлиПолноеИмя); + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик( + ЭтотОбъект, + НастройкиОтчета.КлючСхемы, + КлючТекущегоВарианта, + ДоступныеНастройки.Настройки, + ДоступныеНастройки.ПользовательскиеНастройки); + КонецЕсли; + + НастройкиЗагружены = ОтчетыКлиентСервер.ЗагрузитьНастройки( + Отчет.КомпоновщикНастроек, + ДоступныеНастройки.Настройки, + ДоступныеНастройки.ПользовательскиеНастройки, + ДоступныеНастройки.ФиксированныеНастройки); + + // Установка фиксированных отборов выполняется через компоновщик, т.к. в нем наиболее полная коллекция настроек. + // В ПередЗагрузкой в параметрах могут отсутствовать те параметры, настройки которые не переопределялись. + Если НастройкиЗагружены И ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, ДоступныеНастройки.Настройки, НастройкиОтчета); + КонецЕсли; + + Если ФормаПараметры.Свойство("ФиксированныеНастройки") Тогда + ФормаПараметры.ФиксированныеНастройки = Отчет.КомпоновщикНастроек.ФиксированныеНастройки; + КонецЕсли; + + ОтчетыСервер.УстановитьДоступныеЗначения(ОтчетОбъект, ЭтотОбъект); + ОтчетыСервер.ИнициализироватьПредопределенныеПараметрыВывода(НастройкиОтчета, ДоступныеНастройки.Настройки); + + УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗагрузки, "УсловияОтборов"); + Если УсловияОтборов <> Неопределено Тогда + ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + Для Каждого Условие Из УсловияОтборов Цикл + ЭлементПользовательскойНастройки = ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(Условие.Ключ); + Если ЭлементПользовательскойНастройки <> Неопределено Тогда + ЭлементПользовательскойНастройки.ВидСравнения = Условие.Значение; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ИнициализироватьРеквизитыПредопределенныхПараметровВывода(); + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; + + Если ПараметрыЗагрузки.ВариантМодифицирован Тогда + ВариантИзменен = Истина; + КонецЕсли; + + Если ПараметрыЗагрузки.ПользовательскиеНастройкиМодифицированы Тогда + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПараметрыЗагрузки(ПараметрыЗагрузки) + Если ПараметрыЗагрузки = Неопределено Тогда + ПараметрыЗагрузки = Новый Структура; + КонецЕсли; + + Если Не ПараметрыЗагрузки.Свойство("ИмяСобытия") Тогда + ПараметрыЗагрузки.Вставить("ИмяСобытия", ""); + КонецЕсли; + + Если Не ПараметрыЗагрузки.Свойство("ВариантМодифицирован") Тогда + ПараметрыЗагрузки.Вставить("ВариантМодифицирован", ВариантМодифицирован); + КонецЕсли; + + Если Не ПараметрыЗагрузки.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда + ПараметрыЗагрузки.Вставить("ПользовательскиеНастройкиМодифицированы", ПользовательскиеНастройкиМодифицированы); + КонецЕсли; + + Если Не ПараметрыЗагрузки.Свойство("Результат") Тогда + ПараметрыЗагрузки.Вставить("Результат", Новый Структура); + КонецЕсли; + + Если Не ПараметрыЗагрузки.Свойство("Результат") Тогда + ПараметрыЗагрузки.Вставить("Результат", Новый Структура); + ПараметрыЗагрузки.Результат.Вставить("РазвернутьУзлыДеревьев", Новый Массив); + КонецЕсли; + + ПараметрыЗагрузки.Вставить("Прервать", Ложь); + ПараметрыЗагрузки.Вставить("ОтчетОбъектИлиПолноеИмя", НастройкиОтчета.ПолноеИмя); +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьРеквизитыПредопределенныхПараметровВывода() + Объект = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти("TITLE"); + ВыводитьЗаголовок = Объект.Использование; + + Объект = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти("DATAPARAMETERSOUTPUT"); + ВыводитьПараметрыИОтборы = (Объект.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто); +КонецПроцедуры + +&НаСервере +Функция ПолноеИмяРеквизита(Реквизит) + Возврат ?(ПустаяСтрока(Реквизит.Путь), "", Реквизит.Путь + ".") + Реквизит.Имя; КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ОписаниеТиповУдалитьПримитивные(ИсходноеОписаниеТипов) +Функция ОписаниеТиповБезПримитивных(ИсходноеОписаниеТипов) ВычитаемыеТипы = Новый Массив; Если ИсходноеОписаниеТипов.СодержитТип(Тип("Строка")) Тогда ВычитаемыеТипы.Добавить(Тип("Строка")); @@ -4513,1250 +6188,52 @@ Возврат Новый ОписаниеТипов(ИсходноеОписаниеТипов, , ВычитаемыеТипы); КонецФункции -&НаКлиентеНаСервереБезКонтекста -Функция ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы = Неопределено, ИдентификаторУзлаКД = Неопределено) - Если ЭтотОбъект.РасширенныйРежим = 1 Тогда - Если ИдентификаторУзлаКД = Неопределено Тогда - ИдентификаторУзлаКД = ЭтотОбъект.ИдентификаторТекущегоУзлаКД; - КонецЕсли; - Если ИдентификаторУзлаКД = Неопределено Тогда - КорневойУзел = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки; - Иначе - КорневойУзел = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторУзлаКД); - Если ТипЗнч(КорневойУзел) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - КорневойУзел = КорневойУзел.Настройки; - КонецЕсли; - КонецЕсли; - Если ТаблицаИмя = "Сортировка" Тогда - Возврат КорневойУзел.Порядок; - ИначеЕсли ТаблицаИмя = "ВыбранныеПоля" Тогда - Возврат КорневойУзел.Выбор; - ИначеЕсли ТаблицаИмя = "Отборы" Тогда - Если СтрокаТаблицы = Неопределено Или Не СтрокаТаблицы.ЭтоПараметр Тогда - Возврат КорневойУзел.Отбор; - Иначе - Возврат КорневойУзел.ПараметрыДанных; - КонецЕсли; - ИначеЕсли ТаблицаИмя = "СоставГруппировки" Тогда - Возврат КорневойУзел.ПоляГруппировки; - ИначеЕсли ТаблицаИмя = "Оформление" Тогда - Возврат КорневойУзел.УсловноеОформление; - ИначеЕсли ТаблицаИмя = "СтруктураВарианта" Тогда - Возврат КорневойУзел; - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменение узлов таблицы ""%1"" не поддерживается.'"), ТаблицаИмя); - КонецЕсли; - Иначе - Если ТаблицаИмя = "СтруктураВарианта" Тогда - Возврат ЭтотОбъект.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; - КонецЕсли; - ИдентификаторКД = ЭтотОбъект.БыстрыйПоискПользовательскихНастроек.Получить(ТаблицаИмя); - Если ИдентификаторКД = Неопределено Тогда - Возврат Неопределено; - Иначе - Возврат ЭтотОбъект.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); - КонецЕсли; - КонецЕсли; - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция МассивСортировать(ИсходныйМассив, НаправлениеСортировки = Неопределено) - Список = Новый СписокЗначений; - Список.ЗагрузитьЗначения(ИсходныйМассив); - Список.СортироватьПоЗначению(НаправлениеСортировки); - Возврат Список.ВыгрузитьЗначения(); -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента) - ПоискНастройкиВарианта = ЭтотОбъект.БыстрыйПоискНастроекВарианта.Получить(ИдентификаторЭлемента); - Если ПоискНастройкиВарианта = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - КорневойУзелКД = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторУзлаКД); - Результат = Новый Структура("УзелКД, ЭлементКД"); - Результат.УзелКД = КорневойУзелКД[ПоискНастройкиВарианта.ИмяКоллекции]; - Результат.ЭлементКД = Результат.УзелКД.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторЭлементаКД); - Возврат Результат; -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера - -&НаСервере -Функция БыстрыеНастройкиЗаполнить(Знач ПараметрыКлиента) - // Вставка значений по умолчанию для обязательных ключей параметров заполнения. - ПараметрыЗаполнения = БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента); - - // Вызов переопределяемого модуля. - Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек Тогда - ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); - ОтчетОбъект.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - КонецЕсли; - - // Сохранить состояние до начала изменения. - БыстрыеНастройкиЗапомнитьСостояние(ПараметрыЗаполнения); - - // Запись новых настроек варианта и пользовательских настроек в компоновщик. - БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения); - Если ПараметрыЗаполнения.Прервать Тогда - Возврат ПараметрыЗаполнения.Результат; - КонецЕсли; - - // Получение информации из КД. - УсловияВывода = Новый Структура; - УсловияВывода.Вставить("ТолькоПользовательские", РасширенныйРежим = 0); - УсловияВывода.Вставить("ТолькоБыстрые", Ложь); - УсловияВывода.Вставить("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); - Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках( - Отчет.КомпоновщикНастроек, - НастройкиОтчета, - ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя, - УсловияВывода); - - // Удаление элементов старых настроек. - БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения); - - // Добавление элементов актуальных настроек и загрузка значений. - БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация); - - // Добавление элементов актуальных настроек и загрузка значений. - РасширенныеНастройкиЗагрузитьЗначения(ПараметрыЗаполнения, Информация); - - // Связи. - ЗарегистрироватьОтключаемыеСвязи(Информация); - - // Сохранить состояние до начала изменения. - БыстрыеНастройкиВосстановитьСостояние(ПараметрыЗаполнения); - - // Заголовок и свойства элементов. - ОбновитьВидимостьДоступность(ПараметрыЗаполнения.ИмяСобытия); - - // Вызов переопределяемого модуля. - Если НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек Тогда - ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); - ОтчетОбъект.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - КонецЕсли; - - РезультатЗаполненияНастроек = ПараметрыЗаполнения.Результат; - - ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация); - ПараметрыЗаполнения.Очистить(); -КонецФункции - -&НаСервере -Процедура ОбновитьВидимостьДоступность(ИмяСобытия = "") - Если ИмяСобытия = "ПриСозданииНаСервере" Тогда - Если РежимИзмененияУзлаВарианта Тогда - Элементы.РасширенныйРежим.Видимость = Ложь; - Элементы.ЗакрытьИСформировать.Заголовок = НСтр("ru = 'Завершить редактирование'"); - Элементы.Закрыть.Заголовок = НСтр("ru = 'Отмена'"); - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Сервер - -&НаСервере -Процедура УстановитьУсловноеОформление() - - УсловноеОформление.Элементы.Очистить(); - - // Отборы. - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗаголовок.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЗаголовокПереопределен"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Ложь; - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); - - // - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыИспользование.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ВыводитьФлажок"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Ложь; - - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - - // - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыУсловие.Имя); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеЗначения.Имя); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыИндексКартинкиДоступа.Имя); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗаголовок.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); - - // - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыУсловие.Имя); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеЗначения.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); - - // - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеЗначения.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ФиксированныйСписокВыбора"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Ложь; - - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - - // - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ФиксированныйСписокВыбора"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - - // Выбранные поля. - - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВыбранныеПоляИспользование.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВыбранныеПоля.ЭтоРаздел"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - - // Сортировки. - - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаИспользование.Имя); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаНаправление.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сортировка.ЭтоРаздел"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - - // - - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаНаправление.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сортировка.ТипНастройки"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = "АвтоЭлементПорядка"; - - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - - // Состав группировки. - - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставГруппировкиТипГруппировки.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СоставГруппировки.ПоказыватьТипДополнения"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - - // - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставГруппировкиТипДополнения.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СоставГруппировки.ПоказыватьТипДополнения"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Ложь; - - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - - // Структура. - - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаПредставление.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтруктураВарианта.ЭтоГруппа"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(, , Истина)); - - // - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаПредставление.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтруктураВарианта.Подсвечивать"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(, , Истина)); - - // - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаИспользование.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтруктураВарианта.ФлажокДоступен"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Ложь; - - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - -КонецПроцедуры - -&НаСервере -Функция БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента) - ПараметрыЗаполнения = Новый Структура; - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыЗаполнения, ПараметрыКлиента, Истина); - Если Не ПараметрыЗаполнения.Свойство("ИмяСобытия") Тогда - ПараметрыЗаполнения.Вставить("ИмяСобытия", ""); - КонецЕсли; - Если Не ПараметрыЗаполнения.Свойство("ВариантМодифицирован") Тогда - ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь); - КонецЕсли; - Если Не ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда - ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); - КонецЕсли; - Если Не ПараметрыЗаполнения.Свойство("Результат") Тогда - ПараметрыЗаполнения.Вставить("Результат", Новый Структура); - ПараметрыЗаполнения.Результат.Вставить("РазвернутьУзлыДеревьев", Новый Массив); - КонецЕсли; - ПараметрыЗаполнения.Вставить("Прервать", Ложь); - ПараметрыЗаполнения.Вставить("ОтчетОбъектИлиПолноеИмя", НастройкиОтчета.ПолноеИмя); - Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек - Или НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек - Или НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда - ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя = РеквизитФормыВЗначение("Отчет"); - КонецЕсли; - - Возврат ПараметрыЗаполнения; -КонецФункции - -&НаСервере -Процедура БыстрыеНастройкиЗапомнитьСостояние(ПараметрыЗаполнения) - Если ПараметрыЗаполнения.ИмяСобытия = "ПриСозданииНаСервере" Тогда - Возврат; // Ничего восстанавливать не требуется. - КонецЕсли; - - ВыделенныеСтроки = Новый Структура; - ПараметрыЗаполнения.Вставить("ВыделенныеСтроки", ВыделенныеСтроки); - - ИменаТаблиц = "Отборы, ВыбранныеПоля, Сортировка, " + ?(РежимИзмененияУзлаВарианта, "СоставГруппировки", "СтруктураВарианта"); - ИменаТаблиц = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаТаблиц, ",", Истина, Истина); - Для Каждого ИмяТаблицы Из ИменаТаблиц Цикл - ВыделенныеСтроки.Вставить(ИмяТаблицы, ОтчетыСервер.ЗапомнитьВыделенныеСтроки(ЭтотОбъект, ИмяТаблицы, "ИдентификаторКД")); - КонецЦикла; - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПараметрыЗаполнения.Результат.РазвернутьУзлыДеревьев, ИменаТаблиц); -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиВосстановитьСостояние(ПараметрыЗаполнения) - ВыделенныеСтроки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ВыделенныеСтроки"); - Если ТипЗнч(ВыделенныеСтроки) = Тип("Структура") Тогда - Для Каждого КлючИЗначение Из ВыделенныеСтроки Цикл - ОтчетыСервер.ВосстановитьВыделенныеСтроки(ЭтотОбъект, КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; - КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения) - НовыеНастройкиКД = Неопределено; - НовыеПользовательскиеНастройкиКД = Неопределено; - Если ПараметрыЗаполнения.Свойство("КомпоновщикНастроекКД") Тогда - НовыеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки; - НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки; - Иначе - Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда - НовыеНастройкиКД = ПараметрыЗаполнения.НастройкиКД; - КонецЕсли; - Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда - НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.ПользовательскиеНастройкиКД; - КонецЕсли; - КонецЕсли; - - Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда - НовыеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеНастройкиXML"); - Если ТипЗнч(НовыеНастройкиXML) = Тип("Строка") Тогда - Попытка - НовыеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеНастройкиXML); - Исключение - НовыеНастройкиКД = Неопределено; - КонецПопытки; - НастройкиОтчета.НовыеНастройкиXML = Неопределено; - КонецЕсли; - - НовыеПользовательскиеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеПользовательскиеНастройкиXML"); - Если ТипЗнч(НовыеПользовательскиеНастройкиXML) = Тип("Строка") Тогда - Попытка - НовыеПользовательскиеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеПользовательскиеНастройкиXML); - Исключение - НовыеПользовательскиеНастройкиКД = Неопределено; - КонецПопытки; - НастройкиОтчета.НовыеПользовательскиеНастройкиXML = Неопределено; - КонецЕсли; - КонецЕсли; - - ОчиститьНастройкиОтНесуществующихПолей = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ОчиститьНастройкиОтНесуществующихПолей", Ложь); - - ОбновитьНастройкиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ОбновитьНастройкиВарианта", Ложь); - Если ОбновитьНастройкиВарианта Или ОчиститьНастройкиОтНесуществующихПолей Тогда - НовыеНастройкиКД = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); - Если ОчиститьНастройкиОтНесуществующихПолей Тогда - ОчиститьНастройкиОтНесуществующихПолейНаСервере(НовыеНастройкиКД); - КонецЕсли; - Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Новый НастройкиКомпоновкиДанных); - КонецЕсли; - - СброситьПользовательскиеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "СброситьПользовательскиеНастройки", Ложь); - Если СброситьПользовательскиеНастройки Или ОчиститьНастройкиОтНесуществующихПолей Тогда - НовыеПользовательскиеНастройкиКД = Новый ПользовательскиеНастройкиКомпоновкиДанных; - КонецЕсли; - - Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда - ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); - ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик( - ЭтотОбъект, - НастройкиОтчета.КлючСхемы, - КлючТекущегоВарианта, - НовыеНастройкиКД, - НовыеПользовательскиеНастройкиКД); - КонецЕсли; - - НастройкиЗагружены = ОтчетыКлиентСервер.ЗагрузитьНастройки(Отчет.КомпоновщикНастроек, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); - // Установка фиксированных отборов выполняется через компоновщик, т.к. в нем наиболее полная коллекция настроек. - // В ПередЗагрузкой в параметрах могут отсутствовать те параметры, настройки которые не переопределялись. - Если НастройкиЗагружены И ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда - ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета); - КонецЕсли; - - УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "УсловияОтборов"); - Если УсловияОтборов <> Неопределено Тогда - УзелКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; - Для Каждого КлючИЗначение Из УсловияОтборов Цикл - ПользовательскаяНастройкаКД = УзелКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); - ПользовательскаяНастройкаКД.ВидСравнения = КлючИЗначение.Значение; - КонецЦикла; - КонецЕсли; - - Если ПараметрыЗаполнения.ВариантМодифицирован Тогда - ВариантИзменен = Истина; - КонецЕсли; - Если ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда - ПользовательскиеНастройкиМодифицированы = Истина; - КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения) - // Удаление элементов. - УдаляемыеЭлементы = Новый Массив; - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.БыстрыеОтборы.ПодчиненныеЭлементы); - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.ОбычныеОтборы.ПодчиненныеЭлементы); - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноШапка.ПодчиненныеЭлементы); - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноГруппировки.ПодчиненныеЭлементы); - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноПодвал.ПодчиненныеЭлементы); - Для Каждого Элемент Из УдаляемыеЭлементы Цикл - Элементы.Удалить(Элемент); - КонецЦикла; - - // Удаление команд - УдаляемыеКоманды = Новый Массив; - Для Каждого Команда Из Команды Цикл - Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда - УдаляемыеКоманды.Добавить(Команда); - КонецЕсли; - КонецЦикла; - Для Каждого Команда Из УдаляемыеКоманды Цикл - Команды.Удалить(Команда); - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ДобавитьПодчиненныеЭлементы(Куда, Откуда) - Для Каждого ПодчиненныйЭлемент Из Откуда Цикл - Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") - Или ТипЗнч(ПодчиненныйЭлемент) = Тип("ТаблицаФормы") Тогда - ДобавитьПодчиненныеЭлементы(Куда, ПодчиненныйЭлемент.ПодчиненныеЭлементы); - КонецЕсли; - Куда.Добавить(ПодчиненныйЭлемент); - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация) - // Кэши для быстрого поиска с клиента. - СоответствиеПользовательскихНастроек = Новый Соответствие; - СоответствиеИменОбъектовМетаданных = Информация.СоответствиеИменОбъектовМетаданных; - СоответствиеНастроекВарианта = Новый Соответствие; - - // Удаление реквизитов - ПараметрыЗаполнения.Вставить("Реквизиты", Новый Структура); - ПараметрыЗаполнения.Реквизиты.Вставить("Добавляемые", Новый Массив); - ПараметрыЗаполнения.Реквизиты.Вставить("Удаляемые", Новый Массив); - ПараметрыЗаполнения.Реквизиты.Вставить("Существующие", Новый Соответствие); - ОписаниеТиповТаблицаЗначений = Новый ОписаниеТипов("ТаблицаЗначений"); - ВсеРеквизиты = ПолучитьРеквизиты(); - Для Каждого Реквизит Из ВсеРеквизиты Цикл - РеквизитПолноеИмя = ПолноеИмяРеквизита(Реквизит); - Если ПостоянныеРеквизиты.НайтиПоЗначению(РеквизитПолноеИмя) = Неопределено Тогда - ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(РеквизитПолноеИмя, Реквизит.ТипЗначения); - Подчиненные = ПолучитьРеквизиты(РеквизитПолноеИмя); - Если ОтчетыСервер.ОписанияТиповСовпадают(Реквизит.ТипЗначения, ОписаниеТиповТаблицаЗначений) Тогда - Для Каждого Подчиненный Из Подчиненные Цикл - ПодчиненныйПолноеИмя = ПолноеИмяРеквизита(Подчиненный); - ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(ПодчиненныйПолноеИмя, Подчиненный.ТипЗначения); - КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // Локальные переменные для установки значений и свойств после создания реквизитов. - ДобавленныеПоляВвода = Новый Структура; - ДобавленныеСпискиЗначений = Новый Массив; - ДобавленныеСтандартныеПериоды = Новый Массив; - - // Структура связей. - Связи = Информация.Связи; - - ИменаОсновныхРеквизитовФормы = Новый Соответствие; - ИменаЭлементовДляУстановкиСвязей = Новый Соответствие; - НастройкиСВидомСравненияРавно = Новый Соответствие; - - КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; - ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; - НастройкиКД = КомпоновщикНастроекКД.Настройки; - - ДополнительныеНастройкиЭлементов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПользовательскиеНастройкиКД.ДополнительныеСвойства, "ЭлементыФормы"); - Если ДополнительныеНастройкиЭлементов = Неопределено Тогда - ДополнительныеНастройкиЭлементов = Новый Соответствие; - КонецЕсли; - - Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; - - ГруппыВывода = Новый Структура; - ГруппыВывода.Вставить("БыстрыеОтборы", Новый Структура("Порядок, Размер, ЕстьДлинныеПоля", Новый Массив, 0, Ложь)); - ГруппыВывода.Вставить("ОбычныеОтборы", Новый Структура("Порядок, Размер, ЕстьДлинныеПоля", Новый Массив, 0, Ложь)); - ГруппыВывода.Вставить("ДополнительныеШапка", Новый Структура("Порядок, Размер", Новый Массив, 0)); - ГруппыВывода.Вставить("ДополнительныеПодвал", Новый Структура("Порядок, Размер", Новый Массив, 0)); - ГруппыВывода.Вставить("ДополнительныеЗакладки", Новый СписокЗначений); - ДополнительныеЗакладкиПоиск = Новый Соответствие; - - ОтчетОбъект = Неопределено; - - ЕстьЗагрузкаДанныхИзФайла = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла"); - - Если РежимИзмененияУзлаВарианта Тогда - ВыводимыеНастройки = Новый Массив; - Иначе - ВыводимыеНастройки = Информация.ПользовательскиеНастройки.Скопировать(Новый Структура("ВыводРазрешен", Истина)); - ВыводимыеНастройки.Сортировать("ИндексВКоллекции Возр"); - КонецЕсли; - - ВыводимыеТипыНастроек = Новый Массив; - Если РасширенныйРежим <> 1 Тогда - ВыводимыеТипыНастроек.Добавить("ЭлементОтбора"); - ВыводимыеТипыНастроек.Добавить("ГруппаЭлементовОтбора"); - ВыводимыеТипыНастроек.Добавить("ЗначениеПараметраНастроек"); - ВыводимыеТипыНастроек.Добавить("ЭлементУсловногоОформления"); - КонецЕсли; - - Прочее = Новый Структура; - Прочее.Вставить("Связи", Связи); - Прочее.Вставить("ОтчетОбъект", Неопределено); - Прочее.Вставить("ПараметрыЗаполнения", ПараметрыЗаполнения); - Прочее.Вставить("ПутьККомпоновщику", "Отчет.КомпоновщикНастроек"); - Прочее.Вставить("ЕстьЗагрузкаДанныхИзФайла", ЕстьЗагрузкаДанныхИзФайла); - Прочее.Вставить("ДополнительныеНастройкиЭлементов", ДополнительныеНастройкиЭлементов); - Прочее.Вставить("ИменаОсновныхРеквизитовФормы", ИменаОсновныхРеквизитовФормы); - Прочее.Вставить("ИменаЭлементовДляУстановкиСвязей", ИменаЭлементовДляУстановкиСвязей); - Прочее.Вставить("СоответствиеИменОбъектовМетаданных", СоответствиеИменОбъектовМетаданных); - Прочее.Вставить("ДобавленныеПоляВвода", ДобавленныеПоляВвода); - Прочее.Вставить("ДобавленныеСтандартныеПериоды", ДобавленныеСтандартныеПериоды); - Прочее.Вставить("ДобавленныеСпискиЗначений", ДобавленныеСпискиЗначений); - Прочее.Вставить("ЕстьОтборыСУсловиями", Ложь); - - Для Каждого СвойстваНастройки Из ВыводимыеНастройки Цикл - НастройкаВарианта = СвойстваНастройки.НастройкаВарианта; - Если НастройкаВарианта = Неопределено Тогда - Продолжить; - КонецЕсли; - - Если (СвойстваНастройки.Тип = "ВыбранныеПоля" - Или СвойстваНастройки.Тип = "Отбор" - Или СвойстваНастройки.Тип = "Порядок") - И СвойстваНастройки.СтрокаДерева = Информация.ДеревоВариантаКорневаяСтрока Тогда - // Регистрация в информации о пользовательских настройках. - ТаблицаИмя = СвойстваНастройки.Тип; - Если ТаблицаИмя = "Порядок" Тогда - ТаблицаИмя = "Сортировка"; - КонецЕсли; - СоответствиеПользовательскихНастроек.Вставить(ТаблицаИмя, СвойстваНастройки.ИдентификаторКД); - Продолжить; // Вывод не требуется. - КонецЕсли; - - Если ВыводимыеТипыНастроек.Найти(СвойстваНастройки.Тип) = Неопределено Тогда - Продолжить; - КонецЕсли; - - СоответствиеПользовательскихНастроек.Вставить(СвойстваНастройки.ИдентификаторЭлемента, СвойстваНастройки.ИдентификаторКД); - - ПоискНастройкиВарианта = Новый Структура; - ПоискНастройкиВарианта.Вставить("ИдентификаторУзлаКД", СвойстваНастройки.СтрокаДерева.ИдентификаторКД); - ПоискНастройкиВарианта.Вставить("ИмяКоллекции", НастройкаВарианта.ИмяКоллекции); - ПоискНастройкиВарианта.Вставить("ИдентификаторЭлементаКД", НастройкаВарианта.ИдентификаторКД); - СоответствиеНастроекВарианта.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ПоискНастройкиВарианта); - - // Определение группы для вывода. - Если СвойстваНастройки.Тип = "ЭлементУсловногоОформления" Тогда - // Определение раздела. - КорневаяСтрокаДереваВарианта = Неопределено; - ТекущаяСтрока = СвойстваНастройки.СтрокаДерева; - Пока ТекущаяСтрока <> Неопределено Цикл - Если ЗначениеЗаполнено(ТекущаяСтрока.Заголовок) И ТекущаяСтрока.УзелКД <> НастройкиКД Тогда - КорневаяСтрокаДереваВарианта = ТекущаяСтрока; - КонецЕсли; - ТекущаяСтрока = ТекущаяСтрока.Родитель; - КонецЦикла; - Если КорневаяСтрокаДереваВарианта = Неопределено Тогда // Раздел не найден. Вывод в основную часть. - ГруппаВывода = ГруппыВывода.ДополнительныеПодвал; - Иначе // Раздел найден. Вывод в группу на закладке "Дополнительно": - ЗаголовокЗакладки = КорневаяСтрокаДереваВарианта.Заголовок; - ГруппаВывода = ДополнительныеЗакладкиПоиск.Получить(ЗаголовокЗакладки); - Если ГруппаВывода = Неопределено Тогда - ГруппаВывода = Новый Структура("Порядок, Размер", Новый Массив, 0); - ГруппаВывода.Вставить("Заголовок", ЗаголовокЗакладки); - ГруппаВывода.Вставить("ИмяФлажка", ""); - ГруппыВывода.ДополнительныеЗакладки.Добавить(ГруппаВывода, ЗаголовокЗакладки); - ДополнительныеЗакладкиПоиск.Вставить(ЗаголовокЗакладки, ГруппаВывода); - КонецЕсли; - КонецЕсли; - Иначе - Если СвойстваНастройки.Быстрая Тогда - ГруппаВывода = ГруппыВывода.БыстрыеОтборы; - Иначе - ГруппаВывода = ГруппыВывода.ОбычныеОтборы; - КонецЕсли; - Если СтрДлина(СвойстваНастройки.Представление) > 40 Тогда - ГруппаВывода.ЕстьДлинныеПоля = Истина; - КонецЕсли; - КонецЕсли; - - //////////////////////////////////////////////////////////////////////////////// - // Генератор - - ОтчетыСервер.ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппаВывода, Прочее); - КонецЦикла; - - Элементы.ИзменитьУсловияОтборов.Видимость = Прочее.ЕстьОтборыСУсловиями; - - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.БыстрыеОтборы, Элементы.БыстрыеОтборы, 2, Ложь); - ГруппаВывода = ГруппыВывода.ОбычныеОтборы; - КоличествоКолонок = ?(ГруппаВывода.ЕстьДлинныеПоля И ГруппаВывода.Размер < 10, 1, 2); - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппаВывода, Элементы.ОбычныеОтборы, КоличествоКолонок, Ложь); - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ДополнительныеШапка, Элементы.СтраницаДополнительноШапка, 1); - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ДополнительныеПодвал, Элементы.СтраницаДополнительноПодвал, 1); - - НомерДополнительнойГруппы = 0; - Для Каждого ОписаниеЗакладки Из ГруппыВывода.ДополнительныеЗакладки Цикл - НомерДополнительнойГруппы = НомерДополнительнойГруппы + 1; - ГруппаВывода = ОписаниеЗакладки.Значение; - - ГруппаИмя = "ГруппаНастроек_" + Строка(НомерДополнительнойГруппы); - КолонкиИмя = "ГруппаНастроек_Колонки_" + Строка(НомерДополнительнойГруппы); - ОтступИмя = "ГруппаНастроек_Отступ_" + Строка(НомерДополнительнойГруппы); - - ТекущаяГруппа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.СтраницаДополнительноГруппировки); - ТекущаяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ТекущаяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; - ТекущаяГруппа.Заголовок = ГруппаВывода.Заголовок; - ТекущаяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет; - ТекущаяГруппа.ОтображатьЗаголовок = Истина; - ТекущаяГруппа.ШрифтЗаголовка = Новый Шрифт(ШрифтыСтиля.ОбычныйШрифтТекста, , , Истина); - ТекущаяГруппа.ЦветТекстаЗаголовка = ЦветаСтиля.ЦветТекстаПоля; - - Если ГруппаВывода.ИмяФлажка <> "" Тогда - ТекущаяГруппа.ОтображатьЗаголовок = Ложь; - Флажок = Элементы[ГруппаВывода.ИмяФлажка]; - Флажок.Заголовок = ГруппаВывода.Заголовок; - Элементы.Переместить(Флажок, ТекущаяГруппа); - КонецЕсли; - - Если ГруппаВывода.Размер > 0 Тогда - Колонки = Элементы.Добавить(КолонкиИмя, Тип("ГруппаФормы"), ТекущаяГруппа); - Колонки.Вид = ВидГруппыФормы.ОбычнаяГруппа; - Колонки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; - Колонки.Отображение = ОтображениеОбычнойГруппы.Нет; - Колонки.ОтображатьЗаголовок = Ложь; - - Отступ = Элементы.Добавить(ОтступИмя, Тип("ДекорацияФормы"), Колонки); - Отступ.Вид = ВидДекорацииФормы.Надпись; - Отступ.Заголовок = " "; - - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппаВывода, Колонки, 1); - КонецЕсли; - КонецЦикла; - - // Удаление старых и добавление новых реквизитов. - Для Каждого КлючИЗначение Из ПараметрыЗаполнения.Реквизиты.Существующие Цикл - ПараметрыЗаполнения.Реквизиты.Удаляемые.Добавить(КлючИЗначение.Ключ); - КонецЦикла; - ИзменитьРеквизиты(ПараметрыЗаполнения.Реквизиты.Добавляемые, ПараметрыЗаполнения.Реквизиты.Удаляемые); - - // Поля ввода (установка значений и связей). - Для Каждого КлючИЗначение Из ДобавленныеПоляВвода Цикл - ИмяРеквизита = КлючИЗначение.Ключ; - ЭтотОбъект[ИмяРеквизита] = КлючИЗначение.Значение; - Элементы[ИмяРеквизита].ПутьКДанным = ИмяРеквизита; - КонецЦикла; - - // Стандартные периоды (установка значений и связей). - Для Каждого СвойстваНастройки Из ДобавленныеСтандартныеПериоды Цикл - Дополнительно = СвойстваНастройки.Дополнительно; - ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение; - Элементы[Дополнительно.ПериодНачалоИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаНачала"; - Элементы[Дополнительно.ПериодОкончаниеИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаОкончания"; - КонецЦикла; - - // Поля подбора (установка значений и связей). - Для Каждого СвойстваНастройки Из ДобавленныеСпискиЗначений Цикл - Дополнительно = СвойстваНастройки.Дополнительно; - ТаблицаИмя = Дополнительно.ТаблицаИмя; - ТаблицаФормы = Элементы[ТаблицаИмя]; - КолонкаИспользование = Элементы[Дополнительно.ИмяКолонкиИспользование]; - КолонкаЗначение = Элементы[Дополнительно.ИмяКолонкиЗначение]; - СписокСФлажками = Новый СписокЗначений; - - ТипНеопределено = Тип("Неопределено"); - ОписаниеТиповНеопределено = Новый ОписаниеТипов("Неопределено"); - Количество = СвойстваНастройки.ОтмеченныеЗначения.Количество(); - Для Номер = 1 По Количество Цикл - ОбратныйИндекс = Количество - Номер; - ЭлементСписка = СвойстваНастройки.ОтмеченныеЗначения[ОбратныйИндекс]; - Значение = ЭлементСписка.Значение; - Если Не ЗначениеЗаполнено(ЭлементСписка.Представление) - И (Значение = Неопределено - Или Значение = ТипНеопределено - Или Значение = ОписаниеТиповНеопределено - Или Не ЗначениеЗаполнено(Значение)) Тогда - СвойстваНастройки.ОтмеченныеЗначения.Удалить(ОбратныйИндекс); - Продолжить; // Запрет пустых значений. - КонецЕсли; - Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями - И СвойстваНастройки.ЗначенияДляВыбора.НайтиПоЗначению(Значение) = Неопределено Тогда - СвойстваНастройки.ОтмеченныеЗначения.Удалить(ОбратныйИндекс); - Продолжить; // Выбранное значение не входит в список доступных для выбора. - КонецЕсли; - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокСФлажками, Значение, ЭлементСписка.Представление, Истина); - КонецЦикла; - - Для Каждого ЭлементСписка Из СвойстваНастройки.ЗначенияДляВыбора Цикл - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокСФлажками, ЭлементСписка.Значение, ЭлементСписка.Представление, Ложь); - КонецЦикла; - - СписокСФлажками.СортироватьПоПредставлению(НаправлениеСортировки.Возр); - - ЭтотОбъект[ТаблицаИмя] = СписокСФлажками; - ЭтотОбъект[ТаблицаИмя].ТипЗначения = СвойстваНастройки.ОписаниеТипов; - ТаблицаФормы.ПутьКДанным = ТаблицаИмя; - КолонкаЗначение.ПутьКДанным = ТаблицаИмя + ".Значение"; - КолонкаИспользование.ПутьКДанным = ТаблицаИмя + ".Пометка"; - - // Некоторые обработчики событий можно подключить только после установки связи элементов с данными. - ТаблицаФормы.УстановитьДействие("ПриНачалеРедактирования", "Подключаемый_СписокСПодбором_ПриНачалеРедактирования"); - ТаблицаФормы.УстановитьДействие("ПередОкончаниемРедактирования", "Подключаемый_СписокСПодбором_ПередОкончаниемРедактирования"); - ТаблицаФормы.УстановитьДействие("ПриИзменении", "Подключаемый_СписокСПодбором_ПриИзменении"); - Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - ТаблицаФормы.УстановитьДействие("ПередНачаломДобавления", "Подключаемый_ФиксированныйСписок_ПередНачаломДобавления"); - ТаблицаФормы.УстановитьДействие("ПередУдалением", "Подключаемый_ФиксированныйСписок_ПередУдалением"); - Иначе - ТаблицаФормы.УстановитьДействие("ОбработкаВыбора", "Подключаемый_СписокСПодбором_ОбработкаВыбора"); - КонецЕсли; - КолонкаИспользование.УстановитьДействие("ПриИзменении", "Подключаемый_СписокСПодбором_Использование_ПриИзменении"); - КонецЦикла; - - // Сохранение соответствий для быстрого поиска в данные формы. - БыстрыйПоискПользовательскихНастроек = Новый ФиксированноеСоответствие(СоответствиеПользовательскихНастроек); - БыстрыйПоискИменОбъектовМетаданных = Новый ФиксированноеСоответствие(СоответствиеИменОбъектовМетаданных); - БыстрыйПоискНастроекВарианта = Новый ФиксированноеСоответствие(СоответствиеНастроекВарианта); - - ПользовательскиеНастройкиКД.ДополнительныеСвойства.Вставить("ЭлементыФормы", ДополнительныеНастройкиЭлементов); -КонецПроцедуры - -&НаСервере -Функция ПолноеИмяРеквизита(Реквизит) - Возврат ?(ПустаяСтрока(Реквизит.Путь), "", Реквизит.Путь + ".") + Реквизит.Имя; -КонецФункции - -&НаСервере -Процедура РасширенныеНастройкиЗагрузитьЗначения(ПараметрыЗаполнения, Информация) - Если РежимИзмененияУзлаВарианта Тогда - Найденные = Информация.ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("ИдентификаторКД", ИдентификаторТекущегоУзлаКД), Истина); - КорневаяСтрока = Найденные[0]; - Иначе - КорневаяСтрока = Информация.ДеревоВариантаКорневаяСтрока; - КонецЕсли; - Информация.Вставить("ТекущаяСтрокаДерева", КорневаяСтрока); - Информация.НастройкиВарианта.Колонки.Добавить("ИдентификаторВФорме"); - - Если РежимИзмененияУзлаВарианта И ТипТекущегоУзлаКД <> "Диаграмма" Тогда - СоставГруппировки.ПолучитьЭлементы().Очистить(); - ЗарегистрироватьЭлементыСоставаГруппировки(); - Иначе - Элементы.СтраницаСоставГруппировки.Видимость = Ложь; - КонецЕсли; - - ВыбранныеПоля.ПолучитьЭлементы().Очистить(); - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "ВыбранныеПоля", Неопределено); - ВидимостьВыбранныхПолей = ЗарегистрироватьЭлементыВыбранныхПолей(УзелКД); - Если ВидимостьВыбранныхПолей Тогда - ПараметрыЗаполнения.Результат.РазвернутьУзлыДеревьев.Добавить("ВыбранныеПоля"); - КонецЕсли; - - ВидимостьСортировок = Ложь; - Если ТипТекущегоУзлаКД <> "Диаграмма" Тогда - Сортировка.ПолучитьЭлементы().Очистить(); - ВидимостьСортировок = ЗарегистрироватьЭлементыСортировки(); - КонецЕсли; - Если ВидимостьСортировок Тогда - ПараметрыЗаполнения.Результат.РазвернутьУзлыДеревьев.Добавить("Сортировка"); - КонецЕсли; - - ВидимостьТаблицыОтборов = (РасширенныйРежим = 1 И ТипТекущегоУзлаКД <> "Диаграмма"); - Если ВидимостьТаблицыОтборов Тогда - Отборы.ПолучитьЭлементы().Очистить(); - ЗарегистрироватьЭлементыПараметров(Информация); - ЗарегистрироватьЭлементыОтборов(Информация); - ПараметрыЗаполнения.Результат.РазвернутьУзлыДеревьев.Добавить("Отборы"); - КонецЕсли; - - ВидимостьУсловногоОформления = (РасширенныйРежим = 1); - Если ВидимостьУсловногоОформления Тогда - Оформление.ПолучитьЭлементы().Очистить(); - ЗарегистрироватьЭлементыОформления(Информация); - ПараметрыЗаполнения.Результат.РазвернутьУзлыДеревьев.Добавить("Оформление"); - КонецЕсли; - - Если ВидимостьВыбранныхПолей И ВидимостьСортировок Тогда - Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Поля и сортировки'"); - ИначеЕсли ВидимостьВыбранныхПолей Тогда - Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Поля'"); - ИначеЕсли ВидимостьСортировок Тогда - Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Сортировки'"); - КонецЕсли; - - Если РасширенныйРежим = 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) - И (ИдентификаторТекущегоУзлаКД = Неопределено); - -КонецПроцедуры - -// Перетаскивание. - &НаКлиенте -Процедура ПеретаскиваниеВПределахТаблицы(ИсточникПеретаскивания, ИдентификаторЦели) - // Определение параметров. - ТаблицаИмя = ИсточникПеретаскивания.ТаблицаИмя; - ПеремещаемыеСтроки = ИсточникПеретаскивания.СтрокиДерева; - ТекущаяСтрока = ИсточникПеретаскивания.ТекущаяСтрока; +Процедура ОформитьСписок(Элемент, ЭлементНастройки) + Значение = Неопределено; + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Значение = ЭлементНастройки.Значение; + ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Значение = ЭлементНастройки.ПравоеЗначение; + КонецЕсли; + + Если ТипЗнч(Значение) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; - ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; - СтрокаЦели = НайтиПоИдентификатору(ТаблицаРеквизит, ИдентификаторЦели); - Родитель = ПолучитьРодителя(ТаблицаИмя, СтрокаЦели); + Индекс = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Индекс(ЭлементНастройки); + ПутьКСписку = ПутьКДаннымЭлементов.ПоИндексу[Индекс]; - ТаблицаЭлемент = Элементы[ТаблицаИмя]; - ВыделенныеСтроки = ТаблицаЭлемент.ВыделенныеСтроки; - ВыделенныеСтроки.Очистить(); - - Для Каждого ПеремещаемаяСтрока Из ПеремещаемыеСтроки Цикл - ЭтоТекущая = (ПеремещаемаяСтрока = ТекущаяСтрока); - - // Перемещение. - Результат = ТаблицыПолейПереместить(ТаблицаИмя, ПеремещаемаяСтрока, СтрокаЦели); - - // Бантики. - НоваяСтрокаИдентификатор = Результат.СтрокаТаблицы.ПолучитьИдентификатор(); - Если ЭтоТекущая Тогда - ТаблицаЭлемент.ТекущаяСтрока = НоваяСтрокаИдентификатор; - КонецЕсли; - Если ВыделенныеСтроки.Найти(НоваяСтрокаИдентификатор) = Неопределено Тогда - ВыделенныеСтроки.Добавить(НоваяСтрокаИдентификатор); - КонецЕсли; - КонецЦикла; - - ТаблицаЭлемент.Развернуть(Родитель.ПолучитьИдентификатор(), Истина); - - УстановитьМодифицированность(); + Список = Элементы.Найти(ПутьКСписку); + Список.ЦветТекста = ?(ЭлементНастройки.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); КонецПроцедуры -&НаКлиенте -Процедура ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, ИдентификаторЦели) - // Определение параметров источника. - ИсточникТаблицаИмя = ИсточникПеретаскивания.ТаблицаИмя; - ИсточникТаблица = ЭтотОбъект[ИсточникТаблицаИмя]; - ИсточникУзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ИсточникТаблицаИмя); - - // Определение параметров приемника. - ЦельТаблицаИмя = "Сортировка"; - ЦельТаблица = ЭтотОбъект[ЦельТаблицаИмя]; - - ПередЧемВставить = НайтиПоИдентификатору(ЦельТаблица, ИдентификаторЦели); - - Если ПередЧемВставить <> Неопределено И ПередЧемВставить.ЭтоРаздел Тогда - // Цель перетаскивания - раздел, добавляем внутрь раздела. - ЦельРодитель = ПередЧемВставить; - ПередЧемВставить = Неопределено; - ДобавлятьВКонец = Ложь; - Иначе - // На один уровень с целью перетаскивания. - ЦельРодитель = ПолучитьРодителя(ЦельТаблицаИмя, ПередЧемВставить); - ДобавлятьВКонец = Истина; - КонецЕсли; - - КудаВставить = ПолучитьЭлементы(ЦельТаблица, ЦельРодитель); - - Если ПередЧемВставить = Неопределено Тогда - Количество = КудаВставить.Количество(); - Если Количество > 0 И Не ДобавлятьВКонец Тогда - ПередЧемВставить = КудаВставить[0]; - КонецЕсли; - КонецЕсли; - - ЦельУзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ЦельТаблицаИмя); - ПередЧемВставитьКД = НайтиОбъектКД(ЦельУзелКД, ПередЧемВставить); - ЦельРодительКД = НайтиОбъектКД(ЦельУзелКД, ЦельРодитель); - КудаВставитьКД = ПолучитьЭлементыКД(ЦельУзелКД, ЦельРодительКД); - - Если ПередЧемВставить = Неопределено Тогда - Если ДобавлятьВКонец Тогда - Индекс = КудаВставить.Количество(); - ИндексКД = КудаВставитьКД.Количество(); - Иначе - Индекс = 0; - ИндексКД = 0; - КонецЕсли; - Иначе - Индекс = КудаВставить.Индекс(ПередЧемВставить); - ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД); - КонецЕсли; - - БыстрыйПоискСтрокиПоПолюКД = Новый Соответствие; - Для Каждого СтрокаТаблицы Из КудаВставить Цикл - ЭлементКД = НайтиОбъектКД(ЦельУзелКД, СтрокаТаблицы); - Если ТипЗнч(ЭлементКД) = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда - БыстрыйПоискСтрокиПоПолюКД.Вставить(ЭлементКД.Поле, СтрокаТаблицы); - КонецЕсли; - КонецЦикла; - - ТипЭлемента = Тип("ЭлементПорядкаКомпоновкиДанных"); - - // Вывод результата. - ИсточникТекущаяСтрока = ИсточникПеретаскивания.ТекущаяСтрока; - ЦельТекущаяСтрока = Неопределено; - - // Обход источника. - ПеремещенныеСтроки = Новый Массив; - Обработанные = Новый Массив; - - Коллекции = Новый Массив; - Количество = 0; - ТекущаяКоллекция = ИсточникПеретаскивания.СтрокиДерева; - Пока Истина Цикл - // Обход текущей коллекции. - Для Каждого ИсточникСтрокаТаблицы Из ТекущаяКоллекция Цикл - Если ИсточникСтрокаТаблицы.ТипНастройки = "АвтоВыбранноеПоле" Тогда - Продолжить; - КонецЕсли; - Если Обработанные.Найти(ИсточникСтрокаТаблицы) <> Неопределено Тогда - Продолжить; - КонецЕсли; - Обработанные.Добавить(ИсточникСтрокаТаблицы); - - // Регистрация новой коллекции к обработке. - Если ИсточникСтрокаТаблицы.ЭтоГруппа Тогда - Коллекции.Добавить(ИсточникСтрокаТаблицы.ПолучитьЭлементы()); - Количество = Количество + 1; - Продолжить; - КонецЕсли; - - // Анализ строки источника. - ЭтоТекущая = (ИсточникСтрокаТаблицы = ИсточникТекущаяСтрока); - - ИсточникОбъектКД = НайтиОбъектКД(ИсточникУзелКД, ИсточникСтрокаТаблицы); - ПолеКД = ИсточникОбъектКД.Поле; - - ДоступноеПолеКД = ЦельУзелКД.ДоступныеПоляПорядка.НайтиПоле(ПолеКД); - Если ДоступноеПолеКД = Неопределено Тогда - Продолжить; // Не удалось добавить поле. - КонецЕсли; - - НайденнаяСтрока = БыстрыйПоискСтрокиПоПолюКД.Получить(ПолеКД); - Если НайденнаяСтрока <> Неопределено Тогда - Результат = ТаблицыПолейПереместить(ЦельТаблицаИмя, НайденнаяСтрока, ЦельРодитель, , Индекс, ИндексКД); - НоваяСтрока = Результат.СтрокаТаблицы; - Индекс = Результат.Индекс + 1; - ИндексКД = Результат.ИндексКД + 1; - ПеремещенныеСтроки.Добавить(НоваяСтрока); - БыстрыйПоискСтрокиПоПолюКД.Вставить(ПолеКД, НоваяСтрока); - Продолжить; // Строка перемещена, добавлять новую не требуется. - КонецЕсли; - - НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД, ТипЭлемента); - НовыйЭлементКД.Использование = Истина; - НовыйЭлементКД.Поле = ПолеКД; - НовыйЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; - - НоваяСтрока = КудаВставить.Вставить(Индекс); - НоваяСтрока.ИдентификаторКД = ЦельУзелКД.ПолучитьИдентификаторПоОбъекту(НовыйЭлементКД); - НоваяСтрока.Использование = НовыйЭлементКД.Использование; - НоваяСтрока.Представление = ДоступноеПолеКД.Заголовок; - НоваяСтрока.Направление = НовыйЭлементКД.ТипУпорядочивания; - НоваяСтрока.ТипНастройки = "ЭлементПорядка"; - НоваяСтрока.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); - - Индекс = Индекс + 1; - ИндексКД = ИндексКД + 1; - - Если ЭтоТекущая Или ЦельТекущаяСтрока = Неопределено Тогда - ЦельТекущаяСтрока = НоваяСтрока; - КонецЕсли; - - ПеремещенныеСтроки.Добавить(НоваяСтрока); - БыстрыйПоискСтрокиПоПолюКД.Вставить(ПолеКД, НоваяСтрока); - - КонецЦикла; - - // Переход к следующей коллекции. - Если Количество = 0 Тогда - Прервать; - КонецЕсли; - Количество = Количество - 1; - ТекущаяКоллекция = Коллекции[0]; - Коллекции.Удалить(0); - КонецЦикла; - - // Бантики. - ЦельТаблицаЭлемент = Элементы[ЦельТаблицаИмя]; - ТекущийЭлемент = ЦельТаблицаЭлемент; - ЦельТаблицаЭлемент.ВыделенныеСтроки.Очистить(); - Если ЦельТекущаяСтрока <> Неопределено Тогда - ЦельТаблицаЭлемент.ТекущаяСтрока = ЦельТекущаяСтрока.ПолучитьИдентификатор(); - КонецЕсли; - Для Каждого НоваяСтрока Из ПеремещенныеСтроки Цикл - НоваяСтрокаИдентификатор = НоваяСтрока.ПолучитьИдентификатор(); - Если ЦельТаблицаЭлемент.ВыделенныеСтроки.Найти(НоваяСтрокаИдентификатор) = Неопределено Тогда - ЦельТаблицаЭлемент.ВыделенныеСтроки.Добавить(НоваяСтрокаИдентификатор); - КонецЕсли; - КонецЦикла; - - ЦельТаблицаЭлемент.Развернуть(ЦельРодитель.ПолучитьИдентификатор(), Истина); - - УстановитьМодифицированность(); -КонецПроцедуры - -&НаКлиенте -Процедура ПеретаскиваниеСортировокВВыбранныеПоля(ИсточникПеретаскивания, ИдентификаторЦели) - ТаблицыПолейУдалить(ИсточникПеретаскивания.ТаблицаИмя, ИсточникПеретаскивания.СтрокиДерева, Ложь); - УстановитьМодифицированность(); -КонецПроцедуры - -&НаКлиенте -Функция ЗарегистрироватьНачалоПеретаскивания(ТаблицаИмя, ИсточникПеретаскивания = Неопределено) - - Контекст = НовыйКонтекст(ТаблицаИмя, "НачалоПеретаскивания"); - ОпределитьВыделенныеСтроки(Контекст); - Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда +&НаСервере +Функция РазрешитьИзменятьУсловияОтборов() + Если Булево(РасширенныйРежим) Тогда Возврат Ложь; КонецЕсли; - ИсточникПеретаскивания = Новый Структура("ТаблицаИмя, СтрокиДерева, ТекущаяСтрока"); - ЗаполнитьЗначенияСвойств(ИсточникПеретаскивания, Контекст); - ИсточникПеретаскиванияНаКлиенте = ИсточникПеретаскивания; - Возврат Истина; + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; -КонецФункции - -&НаКлиенте -Процедура ПроверитьВозможностьПеретаскивания(ТаблицаИмя, ИдентификаторЦели, ПараметрыПеретаскивания) - ИсточникПеретаскивания = ИсточникПеретаскиванияНаКлиенте; - Если ИсточникПеретаскивания = Неопределено Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - ИначеЕсли ИсточникПеретаскивания.ТаблицаИмя = ТаблицаИмя Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение; - Если ИдентификаторЦели <> Неопределено Тогда - СтрокаРодитель = ЭтотОбъект[ТаблицаИмя].НайтиПоИдентификатору(ИдентификаторЦели); - Пока СтрокаРодитель <> Неопределено И Не СтрокаРодитель.ЭтоРаздел Цикл - Если ИсточникПеретаскивания.СтрокиДерева.Найти(СтрокаРодитель) <> Неопределено Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Прервать; - КонецЕсли; - СтрокаРодитель = СтрокаРодитель.ПолучитьРодителя(); - КонецЦикла; + ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки; + Для Каждого ЭлементПользовательскойНастройки Из ПользовательскиеНастройки.Элементы Цикл + ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( + КомпоновщикНастроек.Настройки, + ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,, + ПользовательскиеНастройки); + + Если ТипЗнч(ЭлементНастройки) <> Тип("ЭлементОтбораКомпоновкиДанных") + Или ТипЗнч(ЭлементНастройки.ПравоеЗначение) = Тип("СтандартныйПериод") + Или ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда + Продолжить; КонецЕсли; - Иначе - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Выбор; - КонецЕсли; -КонецПроцедуры + + Возврат Истина; + КонецЦикла; + + Возврат Ложь; +КонецФункции &НаКлиенте Процедура УстановитьМодифицированность() @@ -5766,672 +6243,273 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура Обновить() - ЗаполнитьБыстрыеНастройкиКлиент(); -КонецПроцедуры +#КонецОбласти -// Регистрация настроек. +#Область ОбработкаПомеченныхНаУдалениеПолей + +// Поиск полей, помеченных на удаление. &НаСервере -Функция ЗарегистрироватьЭлементСтруктурыОтчета(СтрокаДерева, СтрокиРодителя) - Если СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаДерева.Тип = "Настройки" Тогда - Использование = Истина; - ФлажокДоступен = Ложь; - Иначе - Если СтрокаДерева.ПользовательскаяНастройка = Неопределено Тогда - Использование = СтрокаДерева.УзелКД.Использование; - ФлажокДоступен = (РасширенныйРежим = 1); - Иначе - Использование = СтрокаДерева.ПользовательскаяНастройка.ПользовательскаяНастройкаКД.Использование; - ФлажокДоступен = Истина; - КонецЕсли; +Процедура НайтиПомеченныеНаУдалениеПоля(Знач ЭлементыСтруктуры = Неопределено) + Если РежимИзмененияЭлементаСтруктурыНастроек Тогда + Возврат; КонецЕсли; - Если Не Использование И Не ФлажокДоступен Тогда - Возврат Ложь; - КонецЕсли; - - СтрокаФормы = СтрокиРодителя.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаФормы, СтрокаДерева, "ИдентификаторКД, Представление, Заголовок, Тип, Подтип, - |СодержитОтборы, СодержитУсловноеОформление"); - СтрокаФормы.СодержитПоляИлиСортировки = СтрокаДерева.СодержитПоля Или СтрокаДерева.СодержитСортировки; - - СтрокаФормы.ФлажокДоступен = ФлажокДоступен; - СтрокаФормы.Использование = Использование; - Если СтрокаФормы.ФлажокДоступен И РасширенныйРежим = 0 Тогда - СтрокаФормы.ИдентификаторКД = СтрокаДерева.ПользовательскаяНастройка.ИдентификаторКД; - КонецЕсли; - Если РасширенныйРежим = 0 И ЗначениеЗаполнено(СтрокаФормы.Заголовок) Тогда - СтрокаФормы.Представление = СтрокаФормы.Заголовок; - СтрокаФормы.Подсвечивать = Истина; - КонецЕсли; + Настройки = Отчет.КомпоновщикНастроек.Настройки; - // Типы: "Группировка", "ГруппировкаТаблицы", "ГруппировкаДиаграммы", - // "Таблица", "Диаграмма", "НастройкиВложенногоОбъекта". - СтрокаФормы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки(СтрокаДерева.Тип, СтрокаДерева.Состояние); - Если СтрокаФормы.Тип = "Настройки" Тогда - СтрокаФормы.ИндексКартинки = -1; - СтрокаФормы.ЭтоРаздел = Истина; - СтрокаФормы.Заголовок = ""; - СтрокаФормы.Представление = НСтр("ru = 'Отчет'"); - СтрокаФормы.СодержитОтборы = Ложь; - СтрокаФормы.СодержитПоляИлиСортировки = Ложь; - СтрокаФормы.СодержитУсловноеОформление = Ложь; - СтрокаФормы.Подсвечивать = Ложь; + Если ЭлементыСтруктуры = Неопределено Тогда + ЭлементыСтруктуры = Настройки.Структура; + + НайтиПомеченныеНаУдалениеВыбранныеПоля(Настройки); + НайтиПомеченныеНаУдалениеПоляОтбора(Настройки); + НайтиПомеченныеНаУдалениеПоляПорядка(Настройки); + НайтиПомеченныеНаУдалениеЭлементыУсловногоОформления(Настройки); КонецЕсли; - - ПодчиненныеСтрокиРодителя = СтрокаФормы.ПолучитьЭлементы(); - ЕстьВложенныеФлажки = Ложь; - Для Каждого ПодчиненнаяСтрокаДерева Из СтрокаДерева.Строки Цикл - Если ЗарегистрироватьЭлементСтруктурыОтчета(ПодчиненнаяСтрокаДерева, ПодчиненныеСтрокиРодителя) Тогда - ЕстьВложенныеФлажки = Истина; + Для Каждого ЭлементСтруктуры Из ЭлементыСтруктуры Цикл + ТипЭлемента = ТипЗнч(ЭлементСтруктуры); + Если ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + + НайтиПомеченныеНаУдалениеВыбранныеПоля(Настройки, ЭлементСтруктуры); + НайтиПомеченныеНаУдалениеПоляОтбора(Настройки, ЭлементСтруктуры); + НайтиПомеченныеНаУдалениеПоляПорядка(Настройки, ЭлементСтруктуры); + НайтиПомеченныеНаУдалениеЭлементыУсловногоОформления(Настройки, ЭлементСтруктуры); + НайтиПомеченныеНаУдалениеПоляГруппировки(Настройки, ЭлементСтруктуры); КонецЕсли; + + ИменаКоллекций = ИменаКоллекцийЭлементаСтруктуры(ЭлементСтруктуры); + Для Каждого ИмяКоллекции Из ИменаКоллекций Цикл + КоллекцияЭлементаСтруктуры = ЭлементыНастроек(ЭлементСтруктуры,, ИмяКоллекции); + НайтиПомеченныеНаУдалениеПоля(КоллекцияЭлементаСтруктуры); + КонецЦикла; КонецЦикла; - Возврат СтрокаФормы.ФлажокДоступен Или ЕстьВложенныеФлажки; -КонецФункции + Обработанные = ПомеченныеНаУдаление.Выгрузить(); + Обработанные.Свернуть("ИдентификаторЭлементаСтруктуры, ИдентификаторЭлемента, КлючСвойстваЭлементаСтруктуры"); + Обработанные.Сортировать("ИдентификаторЭлементаСтруктуры Убыв, КлючСвойстваЭлементаСтруктуры, ИдентификаторЭлемента"); + + ПомеченныеНаУдаление.Загрузить(Обработанные); +КонецПроцедуры &НаСервере -Процедура ЗарегистрироватьЭлементыСоставаГруппировки(УзелКД = Неопределено, НаборСтрокКД = Неопределено, НаборСтрок = Неопределено) - Если УзелКД = Неопределено Тогда - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СоставГруппировки", Неопределено); - Если УзелКД = Неопределено Тогда - Возврат; +Процедура НайтиПомеченныеНаУдалениеВыбранныеПоля(Настройки, Знач ЭлементСтруктуры = Неопределено, Группа = Неопределено) + Если ЭлементСтруктуры = Неопределено Тогда + ЭлементСтруктуры = Настройки; + КонецЕсли; + + СвойствоЭлементаСтруктуры = ЭлементСтруктуры.Выбор; + ДоступныеПоля = СвойствоЭлементаСтруктуры.ДоступныеПоляВыбора; + ТипАвтоПоля = Тип("АвтоВыбранноеПолеКомпоновкиДанных"); + ТипГруппы = Тип("ГруппаВыбранныхПолейКомпоновкиДанных"); + + ЭлементыНастроек = ?(Группа = Неопределено, СвойствоЭлементаСтруктуры.Элементы, Группа.Элементы); + Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл + Если ТипЗнч(ЭлементНастройки) = ТипГруппы Тогда + НайтиПомеченныеНаУдалениеВыбранныеПоля(Настройки, ЭлементСтруктуры, ЭлементНастройки); + Продолжить; КонецЕсли; + + Если ТипЗнч(ЭлементНастройки) = ТипАвтоПоля + Или ДоступныеПоля.НайтиПоле(ЭлементНастройки.Поле) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Запись = ПомеченныеНаУдаление.Добавить(); + Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); + Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Запись.КлючСвойстваЭлементаСтруктуры = "Выбор"; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура НайтиПомеченныеНаУдалениеПоляОтбора(Настройки, Знач ЭлементСтруктуры = Неопределено, Группа = Неопределено) + Если ЭлементСтруктуры = Неопределено Тогда + ЭлементСтруктуры = Настройки; КонецЕсли; - Если НаборСтрокКД = Неопределено Тогда - НаборСтрокКД = УзелКД.Элементы; + + СвойствоЭлементаСтруктуры = ЭлементСтруктуры.Отбор; + ДоступныеПоля = СвойствоЭлементаСтруктуры.ДоступныеПоляОтбора; + ТипГруппы = Тип("ГруппаЭлементовОтбораКомпоновкиДанных"); + + ЭлементыНастроек = ?(Группа = Неопределено, СвойствоЭлементаСтруктуры.Элементы, Группа.Элементы); + Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл + Если ТипЗнч(ЭлементНастройки) = ТипГруппы Тогда + НайтиПомеченныеНаУдалениеПоляОтбора(Настройки, ЭлементСтруктуры, ЭлементНастройки); + Продолжить; + КонецЕсли; + + Если ДоступныеПоля.НайтиПоле(ЭлементНастройки.ЛевоеЗначение) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Запись = ПомеченныеНаУдаление.Добавить(); + Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); + Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Запись.КлючСвойстваЭлементаСтруктуры = "Отбор"; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура НайтиПомеченныеНаУдалениеПоляПорядка(Настройки, Знач ЭлементСтруктуры = Неопределено) + Если ЭлементСтруктуры = Неопределено Тогда + ЭлементСтруктуры = Настройки; КонецЕсли; - Если НаборСтрок = Неопределено Тогда - НаборСтрок = СоставГруппировки.ПолучитьЭлементы(); + + СвойствоЭлементаСтруктуры = ЭлементСтруктуры.Порядок; + ДоступныеПоля = СвойствоЭлементаСтруктуры.ДоступныеПоляПорядка; + ТипАвтоПоля = Тип("АвтоЭлементПорядкаКомпоновкиДанных"); + + Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл + Если ТипЗнч(ЭлементНастройки) = ТипАвтоПоля + Или ДоступныеПоля.НайтиПоле(ЭлементНастройки.Поле) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Запись = ПомеченныеНаУдаление.Добавить(); + Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); + Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Запись.КлючСвойстваЭлементаСтруктуры = "Порядок"; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура НайтиПомеченныеНаУдалениеЭлементыУсловногоОформления(Настройки, Знач ЭлементСтруктуры = Неопределено) + Если ЭлементСтруктуры = Неопределено Тогда + ЭлементСтруктуры = Настройки; КонецЕсли; - ДоступныеПоля = УзелКД.ДоступныеПоляПолейГруппировок; - Для Каждого ЭлементКД Из НаборСтрокКД Цикл - ТипНастройки = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); - ПолеКД = Неопределено; - Если ТипНастройки = "ПолеГруппировки" Тогда - Если Не ЗначениеЗаполнено(ЭлементКД.Поле) Тогда + + СвойствоЭлементаСтруктуры = ЭлементСтруктуры.УсловноеОформление; + + Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл + ДоступныеПоля = ЭлементНастройки.Поля.ДоступныеПоляОформляемыхПолей; + Для Каждого Элемент Из ЭлементНастройки.Поля.Элементы Цикл + Если ДоступныеПоля.НайтиПоле(Элемент.Поле) <> Неопределено Тогда Продолжить; КонецЕсли; - ПолеКД = ЭлементКД.Поле; - КонецЕсли; + + Запись = ПомеченныеНаУдаление.Добавить(); + Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); + Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Запись.КлючСвойстваЭлементаСтруктуры = "УсловноеОформление"; + КонецЦикла; - СтрокаТаблицы = НаборСтрок.Добавить(); - СтрокаТаблицы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); - СтрокаТаблицы.ТипНастройки = ТипНастройки; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.ПолеКД = ПолеКД; - - Если ТипНастройки = "АвтоПолеГруппировки" Тогда - СтрокаТаблицы.Представление = НСтр("ru = 'Авто (по всем полям)'"); - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Элемент", "Предопределенный"); - ИначеЕсли ТипНастройки = "ПолеГруппировки" Тогда - СтрокаТаблицы.ТипГруппировки = ЭлементКД.ТипГруппировки; - СтрокаТаблицы.ТипДополнения = ЭлементКД.ТипДополнения; - ДоступноеПолеКД = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); - Если ДоступноеПолеКД = Неопределено Тогда - СтрокаТаблицы.Представление = ОтчетыКлиентСервер.ИмяВПредставление(Строка(ЭлементКД.Поле)); - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Элемент", "ПометкаУдаления"); - Иначе - СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; - Если ДоступноеПолеКД.Ресурс Тогда - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Ресурс"); - ИначеЕсли ДоступноеПолеКД.Таблица Тогда - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Таблица"); - ИначеЕсли ДоступноеПолеКД.Папка Тогда - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Группа"); - Иначе - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); - КонецЕсли; - ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(ДоступноеПолеКД.ТипЗначения, Ложь); - Если ИнформацияОТипах.СодержитТипПериод Или ИнформацияОТипах.СодержитТипДата Тогда - СтрокаТаблицы.ПоказыватьТипДополнения = Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; + НайтиПомеченныеНаУдалениеЭлементыОтбораУсловногоОформления(Настройки, ЭлементСтруктуры, ЭлементНастройки); КонецЦикла; КонецПроцедуры &НаСервере -Функция ЗарегистрироватьЭлементыВыбранныхПолей(УзелКД, НаборСтрокКД = Неопределено, НаборСтрок = Неопределено, ДоступныеПоля = Неопределено) - Если УзелКД = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - Если НаборСтрокКД = Неопределено Тогда - НаборСтрокКД = УзелКД.Элементы; - КонецЕсли; - Если НаборСтрок = Неопределено Тогда - СтрокаРаздел = ВыбранныеПоля.ПолучитьЭлементы().Добавить(); - СтрокаРаздел.ЭтоРаздел = Истина; - СтрокаРаздел.Представление = НСтр("ru = 'Поля'"); - СтрокаРаздел.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("ВыбранныеПоля"); - СтрокаРаздел.ИдентификаторКД = "ВыбранныеПоля"; - НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); - КонецЕсли; - Если ДоступныеПоля = Неопределено Тогда - ДоступныеПоля = УзелКД.ДоступныеПоляВыбора; +Процедура НайтиПомеченныеНаУдалениеЭлементыОтбораУсловногоОформления(Настройки, ЭлементСтруктуры, ЭлементОформления, Группа = Неопределено) + СвойствоЭлементаСтруктуры = ЭлементСтруктуры.УсловноеОформление; + + ДоступныеПоля = ЭлементОформления.Отбор.ДоступныеПоляОтбора; + ТипГруппы = Тип("ГруппаЭлементовОтбораКомпоновкиДанных"); + + ЭлементыНастроек = ?(Группа = Неопределено, ЭлементОформления.Отбор.Элементы, Группа.Элементы); + Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл + Если ТипЗнч(ЭлементНастройки) = ТипГруппы Тогда + НайтиПомеченныеНаУдалениеЭлементыОтбораУсловногоОформления( + Настройки, ЭлементСтруктуры, ЭлементОформления, ЭлементНастройки); + Продолжить; + КонецЕсли; + + Если ДоступныеПоля.НайтиПоле(ЭлементНастройки.ЛевоеЗначение) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Запись = ПомеченныеНаУдаление.Добавить(); + Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); + Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементОформления); + Запись.КлючСвойстваЭлементаСтруктуры = "УсловноеОформление"; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура НайтиПомеченныеНаУдалениеПоляГруппировки(Настройки, ЭлементСтруктуры) + СвойствоЭлементаСтруктуры = ЭлементСтруктуры.ПоляГруппировки; + ДоступныеПоля = СвойствоЭлементаСтруктуры.ДоступныеПоляПолейГруппировок; + ТипАвтоПоля = Тип("АвтоПолеГруппировкиКомпоновкиДанных"); + + Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл + Если ТипЗнч(ЭлементНастройки) = ТипАвтоПоля + Или ДоступныеПоля.НайтиПоле(ЭлементНастройки.Поле) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Запись = ПомеченныеНаУдаление.Добавить(); + Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); + Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); + Запись.КлючСвойстваЭлементаСтруктуры = "ПоляГруппировки"; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Функция ИменаКоллекцийЭлементаСтруктуры(Элемент) + ИменаКоллекций = ""; + + ТипЭлемента = ТипЗнч(Элемент); + Если ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") + Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + + ИменаКоллекций = "Структура"; + ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") Тогда + ИменаКоллекций = "Строки, Колонки"; + ИначеЕсли ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда + ИменаКоллекций = "Точки, Серии"; КонецЕсли; - ИндексКартинкиГруппы = ОтчетыКлиентСервер.ИндексКартинки("Группа"); - ИндексКартинкиЭлемента = ОтчетыКлиентСервер.ИндексКартинки("Элемент"); - Для Каждого ЭлементКД Из НаборСтрокКД Цикл - ТипНастройки = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); - ЭтоГруппа = Ложь; - ПолеКД = Неопределено; - Если ТипНастройки = "АвтоВыбранноеПоле" Тогда - Представление = НСтр("ru = 'Авто (поля родителя)'"); - ИндексКартинки = 6; - Иначе - Если ТипНастройки = "ГруппаВыбранныхПолей" Тогда - ЭтоГруппа = Истина; - ИндексКартинки = ИндексКартинкиГруппы; - Иначе - ИндексКартинки = ИндексКартинкиЭлемента; - КонецЕсли; + Возврат СтрРазделить(ИменаКоллекций, ", ", Ложь); +КонецФункции + +// Удаление полей, помеченных на удаление. + +&НаКлиенте +Процедура УдалитьПомеченныеНаУдалениеПоля() + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; + + Для Каждого Запись Из ПомеченныеНаУдаление Цикл + СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек( + КомпоновщикНастроек, Запись.КлючСвойстваЭлементаСтруктуры, Запись.ИдентификаторЭлементаСтруктуры, РасширенныйРежим); + + ЭлементНастройки = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(Запись.ИдентификаторЭлемента); + Если ЭлементНастройки = Неопределено Тогда + Продолжить; + КонецЕсли; + + РодительЭлементаНастройки = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементНастройки); + ЭлементыНастроек = ЭлементыНастроек(СвойствоЭлементаСтруктуры, РодительЭлементаНастройки); + ЭлементыНастроек.Удалить(ЭлементНастройки); + + Если ЭлементыНастроек.Количество() = 0 + И ТипЗнч(РодительЭлементаНастройки) = Тип("ПоляГруппировкиКомпоновкиДанных") Тогда - Представление = ЭлементКД.Заголовок; - Если ЗначениеЗаполнено(ЭлементКД.Поле) Тогда - ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); - ПолеКД = ЭлементКД.Поле; - Иначе - Если Не ЭтоГруппа Тогда + ЭлементСтруктуры = КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Запись.ИдентификаторЭлементаСтруктуры); + Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") Тогда + ЭлементыСтруктуры = ЭлементСтруктуры.Структура; + Если ЭлементыСтруктуры.Количество() = 0 Тогда Продолжить; КонецЕсли; - ДоступноеПоле = Неопределено; - КонецЕсли; - Если ДоступноеПоле = Неопределено Тогда - Если Не ЭтоГруппа Тогда - ИндексКартинки = 5; - Представление = ОтчетыКлиентСервер.ИмяВПредставление(Строка(ЭлементКД.Поле)); - КонецЕсли; - ИначеЕсли Представление = "" Тогда - Представление = ДоступноеПоле.Заголовок; - КонецЕсли; - Если ЭтоГруппа И ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда - Представление = Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; - КонецЕсли; - КонецЕсли; - - СтрокаТаблицы = НаборСтрок.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ЭлементКД); - СтрокаТаблицы.ТипНастройки = ТипНастройки; - СтрокаТаблицы.ИндексКартинки = ИндексКартинки; - СтрокаТаблицы.ЭтоГруппа = ЭтоГруппа; - СтрокаТаблицы.Представление = Представление; - СтрокаТаблицы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); - СтрокаТаблицы.ПолеКД = ПолеКД; - - Если ЭтоГруппа Тогда - ЗарегистрироватьЭлементыВыбранныхПолей(УзелКД, ЭлементКД.Элементы, СтрокаТаблицы.ПолучитьЭлементы(), ДоступныеПоля); - КонецЕсли; - КонецЦикла; - - Возврат Истина; -КонецФункции - -&НаСервере -Функция ЗарегистрироватьЭлементыСортировки() - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Сортировка", Неопределено); - Если УзелКД = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - НаборСтрокКД = УзелКД.Элементы; - - СтрокаРаздел = Сортировка.ПолучитьЭлементы().Добавить(); - СтрокаРаздел.ЭтоРаздел = Истина; - СтрокаРаздел.Представление = НСтр("ru = 'Сортировки'"); - СтрокаРаздел.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Сортировки"); - СтрокаРаздел.ИдентификаторКД = Неопределено; - НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); - - ДоступныеПоля = УзелКД.ДоступныеПоляПорядка; - Для Каждого ЭлементКД Из НаборСтрокКД Цикл - ТипНастройки = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); - Если ТипНастройки = "ЭлементПорядка" И Не ЗначениеЗаполнено(ЭлементКД.Поле) Тогда - Продолжить; - КонецЕсли; - - СтрокаТаблицы = НаборСтрок.Добавить(); - СтрокаТаблицы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); - СтрокаТаблицы.ТипНастройки = ТипНастройки; - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.ИндексКартинки = -1; - - Если ТипНастройки = "АвтоЭлементПорядка" Тогда - СтрокаТаблицы.Представление = НСтр("ru = 'Авто (сортировки родителя)'"); - ИначеЕсли ТипНастройки = "ЭлементПорядка" Тогда - СтрокаТаблицы.Направление = ЭлементКД.ТипУпорядочивания; - ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); - Если ДоступноеПоле = Неопределено Тогда - СтрокаТаблицы.Представление = ОтчетыКлиентСервер.ИмяВПредставление(Строка(ЭлементКД.Поле)); - Иначе - СтрокаТаблицы.Представление = ДоступноеПоле.Заголовок; + + Индекс = ЭлементыСтруктуры.Количество() - 1; + Пока Индекс >= 0 Цикл + ЭлементыСтруктуры.Удалить(ЭлементыСтруктуры[Индекс]); + Индекс = Индекс - 1; + КонецЦикла; + Иначе // ГруппировкаТаблицыКомпоновкиДанных или ГруппировкаДиаграммыКомпоновкиДанных. + РодительЭлементаСтруктуры = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементСтруктуры); + ИмяКоллекции = ИмяКоллекцииНастроекПоИдентификатору(Запись.ИдентификаторЭлементаСтруктуры); + ЭлементыСтруктуры = ЭлементыНастроек(СвойствоЭлементаСтруктуры, РодительЭлементаСтруктуры, ИмяКоллекции); + ЭлементыСтруктуры.Удалить(ЭлементСтруктуры); КонецЕсли; КонецЕсли; КонецЦикла; - Возврат Истина; -КонецФункции - -&НаСервере -Процедура ЗарегистрироватьЭлементыПараметров(Информация) - Если РежимИзмененияУзлаВарианта Тогда - Возврат; - КонецЕсли; - - УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "ПараметрыДанных"); - Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); - Если Найденные.Количество() = 0 Тогда - Возврат; - КонецЕсли; - НаборСтрокВарианта = Найденные[0].Строки; - - СтрокаРаздел = Отборы.ПолучитьЭлементы().Добавить(); - СтрокаРаздел.ЭтоРаздел = Истина; - СтрокаРаздел.ЭтоПараметр = Истина; - СтрокаРаздел.Представление = НСтр("ru = 'Параметры'"); - СтрокаРаздел.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("ПараметрыДанных"); - СтрокаРаздел.ИдентификаторКД = "ПараметрыДанных"; - НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); - - Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл - Если Не НастройкаВарианта.ВыводРазрешен Тогда - Продолжить; - КонецЕсли; - - ДоступнаяНастройкаКД = НастройкаВарианта.ДоступнаяНастройкаКД; - ЭлементКД = НастройкаВарианта.ЭлементКД; - - Если ЗначениеЗаполнено(ДоступнаяНастройкаКД.Заголовок) Тогда - Представление = ДоступнаяНастройкаКД.Заголовок; - Иначе - Представление = Строка(ЭлементКД.Параметр); - КонецЕсли; - - СтрокаТаблицы = НаборСтрок.Добавить(); - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; - СтрокаТаблицы.Представление = Представление; - СтрокаТаблицы.ЭтоПараметр = Истина; - СтрокаТаблицы.ИндексКартинки = -1; - СтрокаТаблицы.ТипЗначения = ДоступнаяНастройкаКД.ТипЗначения; - СтрокаТаблицы.ВводСписком = НастройкаВарианта.ВводСписком; - СтрокаТаблицы.ВыводитьФлажок = НастройкаВарианта.ВыводитьФлажок; - СтрокаТаблицы.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; - - УстановитьЗначение(СтрокаТаблицы, ДоступнаяНастройкаКД, ЭлементКД, НастройкаВарианта.Значение); - - Если НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями - И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда - Если СтрокаТаблицы.ВводСписком Тогда - Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СписокЗначений") Тогда - Для Каждого ЭлементСписка Из СтрокаТаблицы.Значение Цикл - ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(ЭлементСписка.Значение); - Если ЭлементДляВыбора <> Неопределено Тогда - ЭлементСписка.Представление = ЭлементДляВыбора.Представление; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Иначе - СтрокаТаблицы.ФиксированныйСписокВыбора = Истина; - ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(СтрокаТаблицы.Значение); - Если ЭлементДляВыбора <> Неопределено Тогда - СтрокаТаблицы.ПредставлениеЗначения = ЭлементДляВыбора.Представление; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); - - Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СтандартныйПериод") Тогда - СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); - СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета"); - Иначе - СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("Неопределено"); - КонецЕсли; - - СтрокаТаблицы.Заголовок = Представление; - Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда - Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда - СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; - КонецЕсли; - Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = 2; - ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = 4; - Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = 5; - КонецЕсли; - Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = 5; - КонецЕсли; - - Дополнительно = Новый Структура( - "ОписаниеТипов, БыстрыйВыбор, ОграничиватьВыборУказаннымиЗначениями, - |ПараметрыВыбора, ФормаВыбора, ЗначенияДляВыбора, ЗначенияДляВыбораЗаполнены"); - ЗаполнитьЗначенияСвойств(Дополнительно, НастройкаВарианта); - Если Дополнительно.ЗначенияДляВыбораЗаполнены = Неопределено Тогда - Дополнительно.ЗначенияДляВыбораЗаполнены = Ложь; - КонецЕсли; - СтрокаТаблицы.Дополнительно = Дополнительно; - - КонецЦикла; + УстановитьМодифицированность(); КонецПроцедуры -&НаСервере -Процедура ЗарегистрироватьЭлементыОтборов(Информация, НаборСтрокВарианта = Неопределено, НаборСтрокФормы = Неопределено) - Если НаборСтрокВарианта = Неопределено Тогда - УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "Отбор"); - Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); - Если Найденные.Количество() = 0 Тогда - Возврат; - КонецЕсли; - НаборСтрокВарианта = Найденные[0].Строки; - КонецЕсли; - Если НаборСтрокФормы = Неопределено Тогда - НаборСтрокФормы = Отборы.ПолучитьЭлементы(); - СтрокаРаздел = НаборСтрокФормы.Добавить(); - СтрокаРаздел.ЭтоРаздел = Истина; - СтрокаРаздел.Представление = НСтр("ru = 'Отборы'"); - СтрокаРаздел.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Отборы"); - СтрокаРаздел.ИдентификаторКД = "Отборы"; - НаборСтрокФормы = СтрокаРаздел.ПолучитьЭлементы(); - КонецЕсли; - Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл - Если НастройкаВарианта.Тип = "ГруппаЭлементовОтбора" Тогда - ЭтоГруппа = Истина; - ИначеЕсли НастройкаВарианта.Тип = "ЭлементОтбора" Тогда - ЭтоГруппа = Ложь; - Иначе - Продолжить; - КонецЕсли; - - ЭлементКД = НастройкаВарианта.ЭлементКД; - - СтрокаТаблицы = НаборСтрокФормы.Добавить(); - СтрокаТаблицы.Использование = НастройкаВарианта.ЭлементКД.Использование; - СтрокаТаблицы.Представление = НастройкаВарианта.ПредставлениеПоУмолчанию; - СтрокаТаблицы.Заголовок = НастройкаВарианта.Представление; - СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; - СтрокаТаблицы.ЭтоПараметр = Ложь; - СтрокаТаблицы.ИндексКартинки = -1; - СтрокаТаблицы.ЭтоГруппа = ЭтоГруппа; - СтрокаТаблицы.ВводСписком = НастройкаВарианта.ВводСписком; - СтрокаТаблицы.ВыводитьФлажок = НастройкаВарианта.ВыводитьФлажок; - СтрокаТаблицы.ФормаВыбора = НастройкаВарианта.ФормаВыбора; - СтрокаТаблицы.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; - СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); - - НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); - - Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда - Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = ?(НастройкаВарианта.ВыводитьТолькоФлажок, 1, 2); - ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = ?(НастройкаВарианта.ВыводитьТолькоФлажок, 3, 4); - Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = 5; - КонецЕсли; - Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = 5; - КонецЕсли; - - Если НастройкаВарианта.Состояние = "ПометкаУдаления" Тогда - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Ошибка"); - КонецЕсли; - - Если ЭтоГруппа Тогда - ЗарегистрироватьЭлементыОтборов(Информация, НастройкаВарианта.Строки, СтрокаТаблицы.ПолучитьЭлементы()); - Иначе - УстановитьЗначение(СтрокаТаблицы, НастройкаВарианта.ДоступнаяНастройкаКД, ЭлементКД, НастройкаВарианта.Значение); - Если НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями - И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда - Если СтрокаТаблицы.ВводСписком Тогда - Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СписокЗначений") Тогда - Для Каждого ЭлементСписка Из СтрокаТаблицы.Значение Цикл - ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(ЭлементСписка.Значение); - Если ЭлементДляВыбора <> Неопределено Тогда - ЭлементСписка.Представление = ЭлементДляВыбора.Представление; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Иначе - СтрокаТаблицы.ФиксированныйСписокВыбора = Истина; - ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(СтрокаТаблицы.Значение); - Если ЭлементДляВыбора <> Неопределено Тогда - СтрокаТаблицы.ПредставлениеЗначения = ЭлементДляВыбора.Представление; - КонецЕсли; - КонецЕсли; - КонецЕсли; - СтрокаТаблицы.ТипЗначения = НастройкаВарианта.ОписаниеТипов; - Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СтандартныйПериод") Тогда - СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); - СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета"); - Иначе - СтрокаТаблицы.Условие = НастройкаВарианта.ВидСравнения; - СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ВидСравненияКомпоновкиДанных"); - КонецЕсли; - КонецЕсли; - - Дополнительно = Новый Структура( - "ОписаниеТипов, БыстрыйВыбор, ОграничиватьВыборУказаннымиЗначениями, - |ПараметрыВыбора, ФормаВыбора, ЗначенияДляВыбора, ЗначенияДляВыбораЗаполнены"); - ЗаполнитьЗначенияСвойств(Дополнительно, НастройкаВарианта); - Если Дополнительно.ЗначенияДляВыбораЗаполнены = Неопределено Тогда - Дополнительно.ЗначенияДляВыбораЗаполнены = Ложь; - КонецЕсли; - СтрокаТаблицы.Дополнительно = Дополнительно; - - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ЗарегистрироватьОтключаемыеСвязи(Информация) - ОтключаемыеСвязи.Очистить(); - Для Каждого ОписаниеСвязи Из Информация.ОтключаемыеСвязи Цикл - Связь = ОтключаемыеСвязи.Добавить(); - ЗаполнитьЗначенияСвойств(Связь, ОписаниеСвязи); - Если РасширенныйРежим = 1 Тогда - Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторВФорме; - Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторВФорме; - Иначе - Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторЭлемента; - Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторЭлемента; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ЗарегистрироватьЭлементыОформления(Информация, НаборСтрокВарианта = Неопределено, НаборСтрокФормы = Неопределено) - Если НаборСтрокВарианта = Неопределено Тогда - УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "УсловноеОформление"); - Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); - Если Найденные.Количество() = 0 Тогда - Возврат; - КонецЕсли; - НаборСтрокВарианта = Найденные[0].Строки; - КонецЕсли; - Если НаборСтрокФормы = Неопределено Тогда - НаборСтрокФормы = Оформление.ПолучитьЭлементы(); - КонецЕсли; - Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл - ЭлементКД = НастройкаВарианта.ЭлементКД; - - СтрокаТаблицы = НаборСтрокФормы.Добавить(); - СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Представление = НастройкаВарианта.ПредставлениеПоУмолчанию; - СтрокаТаблицы.Заголовок = НастройкаВарианта.Представление; - СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; - СтрокаТаблицы.ИндексКартинки = -1; - СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); - - Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда - Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = 2; - ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = 4; - Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = 5; - КонецЕсли; - Иначе - СтрокаТаблицы.ИндексКартинкиДоступа = 5; - КонецЕсли; - Если НастройкаВарианта.Состояние = "ПометкаУдаления" Тогда - СтрокаТаблицы.ИндексКартинки = ОтчетыКлиентСервер.ИндексКартинки("Ошибка"); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -// Очистка настроек от несуществующих полей. - -&НаСервереБезКонтекста -Процедура ОчиститьНастройкиОтНесуществующихПолейНаСервере(НастройкиКД) - // Метод ".Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.Полное)" не подходит, поскольку: - // 1. Цель "удалить", а не "отключить". - // 2. После его использования могут остаться группировки <Детальные записи> с отключенными недоступными полями. - - УсловияВывода = Новый Структура; - УсловияВывода.Вставить("ТолькоПользовательские", Ложь); - УсловияВывода.Вставить("ТолькоБыстрые", Ложь); - УсловияВывода.Вставить("ИдентификаторТекущегоУзлаКД", Неопределено); - - Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках( - Новый Структура("Настройки, ПользовательскиеНастройки", НастройкиКД, Новый ПользовательскиеНастройкиКомпоновкиДанных), - ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(), - Неопределено, - УсловияВывода); - - Найденные = Информация.ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("Состояние", "ПометкаУдаления"), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - НастройкаВариантаКД = СтрокаДерева.УзелКД; - Если СтрокаДерева.Тип = "Группировка" - Или СтрокаДерева.Тип = "ГруппировкаТаблицы" - Или СтрокаДерева.Тип = "ГруппировкаДиаграммы" Тогда - ПоляГруппировкиКД = НастройкаВариантаКД.ПоляГруппировки; - ДоступныеПоляКД = ПоляГруппировкиКД.ДоступныеПоляПолейГруппировок; - Количество = ПоляГруппировкиКД.Элементы.Количество(); - ОбратныйИндекс = Количество; - Пока ОбратныйИндекс > 0 Цикл - ОбратныйИндекс = ОбратныйИндекс - 1; - ПолеГруппировкиКД = ПоляГруппировкиКД.Элементы[ОбратныйИндекс]; - Если ТипЗнч(ПолеГруппировкиКД) = Тип("ПолеГруппировкиКомпоновкиДанных") - И ДоступныеПоляКД.НайтиПоле(ПолеГруппировкиКД.Поле) = Неопределено Тогда - Количество = Количество - 1; - ПоляГруппировкиКД.Элементы.Удалить(ПолеГруппировкиКД); - КонецЕсли; - КонецЦикла; - Если Количество > 0 Тогда - Продолжить; // В группировке остались не помеченные поля. - КонецЕсли; - КонецЕсли; - - // Переместить подчиненные элементы на уровень с удаляемым элементом. - КорневаяСтрока = СтрокаДерева; - Пока КорневаяСтрока.Тип <> "Настройки" Цикл - КорневаяСтрока = КорневаяСтрока.Родитель; - КонецЦикла; - Для Каждого ПодчиненнаяСтрокаДерева Из СтрокаДерева.Строки Цикл - ПеремещениеСвязанныхСтрок(Информация.ДеревоВарианта, КорневаяСтрока.УзелКД, ПодчиненнаяСтрокаДерева, СтрокаДерева.Родитель, СтрокаДерева); - КонецЦикла; - - // Удалить элемент КД. - СтрокиРодителяКД = ПолучитьЭлементыКД(НастройкиКД, СтрокаДерева.Родитель.УзелКД); - СтрокиРодителяКД.Удалить(СтрокаДерева.УзелКД); - КонецЦикла; - - Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(Новый Структура("Состояние", "ПометкаУдаления"), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - Если СтрокаДерева.Родитель = Неопределено Тогда - Продолжить; // Корневые коллекции нельзя удалить (типа "Настройки.Отбор"). - КонецЕсли; - УзелКД = СтрокаДерева.Владелец.ЭлементКД; - РодительКД = СтрокаДерева.Родитель.ЭлементКД; - СтрокиРодителяКД = ПолучитьЭлементыКД(УзелКД, РодительКД); - СтрокиРодителяКД.Удалить(СтрокаДерева.ЭлементКД); - КонецЦикла; - - ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация); - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция ПеремещениеСвязанныхСтрок(Коллекция, УзелКД, Знач ЭлементДерева, Знач НовыйРодитель, - Знач ПередЧемВставить = Неопределено, Знач Индекс = Неопределено, Знач ИндексКД = Неопределено) - Результат = Новый Структура("ЭлементДерева, ЭлементКД, Индекс, ИндексКД"); - - ДобавлятьВКонец = (НовыйРодитель = Неопределено); - КудаВставить = ?(НовыйРодитель = Неопределено, Коллекция.Строки, НовыйРодитель.Строки); - Если ПередЧемВставить = Неопределено Тогда - ЭтоРаздел = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоРаздел"); - ЭтоГруппа = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоГруппа"); - Если ЭтоРаздел <> Истина И ЭтоГруппа <> Истина Тогда // На один уровень с родителем. - ПередЧемВставить = НовыйРодитель; - НовыйРодитель = ?(НовыйРодитель.Родитель = Неопределено, Коллекция, НовыйРодитель.Родитель); - КудаВставить = ?(НовыйРодитель = Неопределено, Коллекция.Строки, НовыйРодитель.Строки); - КонецЕсли; - КонецЕсли; - - ЭлементКД = НайтиОбъектКД(УзелКД, ЭлементДерева); - НовыйРодительКД = НайтиОбъектКД(УзелКД, НовыйРодитель); - КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, НовыйРодительКД); - ПередЧемВставитьКД = НайтиОбъектКД(УзелКД, ПередЧемВставить); - - СтарыйРодитель = ?(ЭлементДерева.Родитель = Неопределено, Коллекция, ЭлементДерева.Родитель); - ОткудаПереместить = ?(СтарыйРодитель = Неопределено, Коллекция.Строки, СтарыйРодитель.Строки); - - СтарыйРодительКД = НайтиОбъектКД(УзелКД, СтарыйРодитель); - ОткудаПереместитьКД = ПолучитьЭлементыКД(УзелКД, СтарыйРодительКД); - - Если ЭлементКД = ПередЧемВставитьКД Тогда - Результат.ЭлементКД = ЭлементКД; - Результат.ЭлементДерева = ЭлементДерева; - Иначе - Если Индекс = Неопределено Или ИндексКД = Неопределено Тогда - Если ПередЧемВставитьКД = Неопределено Тогда - Если ДобавлятьВКонец Тогда - Индекс = КудаВставить.Количество(); - ИндексКД = КудаВставитьКД.Количество(); - Иначе - Индекс = 0; - ИндексКД = 0; - КонецЕсли; - Иначе - Индекс = КудаВставить.Индекс(ПередЧемВставить); - ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД); - Если СтарыйРодитель = НовыйРодитель Тогда - СтарыйИндекс = ОткудаПереместить.Индекс(ЭлементДерева); - Если СтарыйИндекс <= Индекс Тогда - Индекс = Индекс + 1; - ИндексКД = ИндексКД + 1; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - ПоискЭлементовКД = Новый Соответствие; - Результат.ЭлементКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); - - ПоискСтрокТаблицы = Новый Соответствие; - Результат.ЭлементДерева = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, ЭлементДерева, КудаВставить, Индекс, ПоискСтрокТаблицы); - - Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл - СтараяСтрока = КлючИЗначение.Ключ; - НоваяСтрока = КлючИЗначение.Значение; - НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); - КонецЦикла; - - ОткудаПереместить.Удалить(ЭлементДерева); - ОткудаПереместитьКД.Удалить(ЭлементКД); - КонецЕсли; - - Результат.Индекс = КудаВставить.Индекс(Результат.ЭлементДерева); - Результат.ИндексКД = КудаВставитьКД.Индекс(Результат.ЭлементКД); - - Возврат Результат; -КонецФункции +#КонецОбласти #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаОтчета/Form.form b/SSL/src/CommonForms/ФормаОтчета/Form.form index 80be390f8..9b9d7b24b 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаОтчета/Form.form @@ -1,8 +1,8 @@ - БыстрыеНастройки - 416 + КомпоновщикНастроекПользовательскиеНастройки + 758 true true @@ -10,11 +10,12 @@ <key>ru</key> - <value>Быстрые настройки</value> + <value>Настройки</value> + false - БыстрыеНастройкиРасширеннаяПодсказка - 417 + КомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 759 Label true true @@ -24,8 +25,9 @@ UsualGroup - HorizontalIfPossible + Vertical Auto + WeakSeparation true true Auto @@ -33,11 +35,11 @@ - ОсновнаяКоманднаяПанель - 5 + КомандыИПоказатели + 715 - ГруппаГлавное - 643 + ОсновнаяКоманднаяПанель + 717 СформироватьОтчет 101 @@ -65,17 +67,168 @@ Auto InCommandBarAndInAdditionalSubmenu - - ФормироватьСразу - 468 + + ГруппаНастройкиОтчета + 104 + + ВсеНастройки + 458 + true + true + + true + + + ВсеНастройкиРасширеннаяПодсказка + 459 + Label + true + true + + Left + + + Form.Command.ВсеНастройки + Normal + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ГруппаСохранениеВыборВариантаОтчета + 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> + + true + + ГруппаВариантыОтчетаРасширеннаяПодсказка + 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.ВыбратьВариантОтчета + + Picture + Normal + + true true true + + <key>ru</key> + <value>Настройки отчета</value> + - ФормироватьСразуРасширеннаяПодсказка - 469 + ГруппаНастройкиОтчетаРасширеннаяПодсказка + 144 Label true true @@ -83,14 +236,308 @@ Left - Form.Command.ФормироватьСразу - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu + + + + ГруппаРаботаВТаблице + 518 + + Найти + 62 + true + true + + true + + + НайтиРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.Find + Normal + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ГруппаУправлениеГруппировками + 710 + + РазвернутьВсеГруппы + 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 + + true + true + + true + + + <key>ru</key> + <value>Управление группировками</value> + + + ГруппаУправлениеГруппировкамиРасширеннаяПодсказка + 711 + Label + true + true + + Left + + + + Compact + + + true + true + + true + + + <key>ru</key> + <value>Работа в таблице</value> + + + ГруппаРаботаВТаблицеРасширеннаяПодсказка + 519 + 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 + + + Сохранить + 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> + + + ГруппаВыводРасширеннаяПодсказка + 535 + Label + true + true + + Left + + + true true @@ -99,11 +546,12 @@
      <key>ru</key> - <value>Главное</value> + <value>Основная командная панель</value> + false - ГруппаГлавноеРасширеннаяПодсказка - 644 + ОсновнаяКоманднаяПанельРасширеннаяПодсказка + 718 Label true true @@ -111,22 +559,29 @@ Left - + CommandBar + + Left +
      - ГруппаНастройкиОтчета - 104 - - ВсеНастройки - 458 + ГруппаПоказатель + 724 + + Показатель + 721 true true true + + Показатель + + None - ВсеНастройкиРасширеннаяПодсказка - 459 + ПоказательРасширеннаяПодсказка + 723 Label true true @@ -134,86 +589,255 @@ Left - Form.Command.ВсеНастройки - Normal - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ИзменитьУсловияОтборов - 630 - true - true - - true - - - ИзменитьУсловияОтборовРасширеннаяПодсказка - 631 - Label + + ПоказательКонтекстноеМеню + 722 + true + + InputField + true + Enter + true + Left + true + + 10 true true - - Left - - - Form.Command.ИзменитьУсловияОтборов - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СброситьНастройки - 382 - true - true - - true - - - СброситьНастройкиРасширеннаяПодсказка - 383 - Label - true - true - - Left - - - Form.Command.НастройкиПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu + true + true + true + true + Normal + - ГруппаВариантыОтчета - 358 - - СохранитьВариант - 506 - - <key>ru</key> - <value>Сохранить вариант отчета...</value> - + ГруппаПоказатели + 684 + + ГруппаВидыПоказателей + 728 + + РассчитатьСумму + 688 + + <key>ru</key> + <value>Сумма</value> + + true + true + + true + + + РассчитатьСуммуРасширеннаяПодсказка + 689 + Label + true + true + + Left + + + Form.Command.РассчитатьСумму + Normal + Auto + true + true + UserCmds + Auto + + + РассчитатьКоличество + 690 + + <key>ru</key> + <value>Количество</value> + + true + true + + true + + + РассчитатьКоличествоРасширеннаяПодсказка + 691 + Label + true + true + + Left + + + Form.Command.РассчитатьКоличество + Normal + Auto + true + true + UserCmds + Auto + + + РассчитатьСреднее + 692 + + <key>ru</key> + <value>Среднее</value> + + true + true + + true + + + РассчитатьСреднееРасширеннаяПодсказка + 693 + Label + true + true + + Left + + + Form.Command.РассчитатьСреднее + Normal + Auto + true + true + UserCmds + Auto + + + РассчитатьМинимум + 694 + + <key>ru</key> + <value>Минимум</value> + + true + true + + true + + + РассчитатьМинимумРасширеннаяПодсказка + 695 + Label + true + true + + Left + + + Form.Command.РассчитатьМинимум + Normal + Auto + true + true + UserCmds + Auto + + + РассчитатьМаксимум + 696 + + <key>ru</key> + <value>Максимум</value> + + true + true + + true + + + РассчитатьМаксимумРасширеннаяПодсказка + 697 + Label + true + true + + Left + + + Form.Command.РассчитатьМаксимум + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаВсеПоказатели + 686 + + РассчитатьВсеПоказатели + 698 + + <key>ru</key> + <value>Все показатели</value> + + true + true + + true + + + РассчитатьВсеПоказателиРасширеннаяПодсказка + 699 + Label + true + true + + Left + + + Form.Command.РассчитатьВсеПоказатели + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Все показатели</value> + + true + + ГруппаВсеПоказателиРасширеннаяПодсказка + 687 + Label + true + true + + Left + + + + true true true + + <key>ru</key> + <value>Рассчитать</value> + + + ru + Расчет выбранного, либо всех доступных показателей + - СохранитьВариантРасширеннаяПодсказка - 507 + ГруппаВидыПоказателейРасширеннаяПодсказка + 729 Label true true @@ -221,21 +845,326 @@ Left - Form.StandardCommand.SaveVariant + Popup + + + CommonPicture.Сумма + + Picture + Normal + + + true + true + + true + + + <key>ru</key> + <value>Показатели</value> + + + ru + Выполняет расчет определенного или всех показателей выделенных ячеек + + true + + ГруппаПоказателиРасширеннаяПодсказка + 685 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value>Показатель</value> + + true + false + + ГруппаПоказательРасширеннаяПодсказка + 725 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Right + Auto + true + true + Auto + Auto + + + + КоманднаяПанельЕще + 719 + + ГруппаГлавноеЕще + 643 + + СформироватьОтчетЕще + 730 + true + true + + true + + + СформироватьОтчетЕщеРасширеннаяПодсказка + 731 + Label + true + true + + Left + + + Form.Command.ОтчетСкомпоноватьРезультат Normal - PictureAndText + Auto true true UserCmds - - CommonPicture.СохранитьВариантОтчета - Auto - InCommandBarAndInAdditionalSubmenu + InAdditionalSubmenu + + + ФормироватьСразу + 468 + true + true + + true + + + ФормироватьСразуРасширеннаяПодсказка + 469 + Label + true + true + + Left + + + Form.Command.ФормироватьСразу + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Главное</value> + + + ГруппаГлавноеЕщеРасширеннаяПодсказка + 644 + Label + true + true + + Left + + + + + + ГруппаНастройкиОтчетаЕще + 732 + + ВсеНастройкиЕще + 734 + true + true + + true + + + ВсеНастройкиЕщеРасширеннаяПодсказка + 735 + Label + true + true + + Left + + + Form.Command.ВсеНастройки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ИзменитьУсловияОтборов + 630 + true + true + + true + + + ИзменитьУсловияОтборовРасширеннаяПодсказка + 631 + Label + true + true + + Left + + + Form.Command.ИзменитьУсловияОтборов + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СброситьНастройки + 382 + true + true + + true + + + СброситьНастройкиРасширеннаяПодсказка + 383 + Label + true + true + + Left + + + Form.Command.НастройкиПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu - ВариантыОтчета - 360 + ГруппаСохранениеВариантаОтчетаЕще + 736 + + СохранитьВариантЕще + 738 + true + true + + true + + + СохранитьВариантЕщеРасширеннаяПодсказка + 739 + Label + true + true + + Left + + + Form.StandardCommand.SaveVariant + Normal + PictureAndText + true + true + UserCmds + + CommonPicture.СохранитьВариантОтчета + + Auto + InAdditionalSubmenu + + + ГруппаВариантыОтчетаЕще + 776 + true + true + + true + + + <key>ru</key> + <value>Варианты отчета</value> + + true + + ГруппаВариантыОтчетаЕщеРасширеннаяПодсказка + 777 + Label + true + true + + Left + + + + + + ДругиеОтчетыЕще + 740 + true + true + + true + + + ДругиеОтчетыЕщеРасширеннаяПодсказка + 741 + Label + true + true + + Left + + + Form.Command.ДругиеОтчеты + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true @@ -245,9 +1174,14 @@ ru Варианты отчета + + ru + Выбрать другой вариант отчета или сохранить новый + + true - ВариантыОтчетаРасширеннаяПодсказка - 361 + ГруппаСохранениеВариантаОтчетаЕщеРасширеннаяПодсказка + 737 Label true true @@ -255,19 +1189,296 @@ Left - + Popup + + + CommonPicture.ВыбратьВариантОтчета + + Picture + Normal + - - ДругиеОтчеты - 508 + + ГруппаПрочиеНастройкиОтчетаЕще + 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> + + true + + ГруппаИзменениеВариантаОтчетаЕщеРасширеннаяПодсказка + 451 + Label + true + true + + Left + + + + + + ГруппаПользовательскиеНастройкиЕще + 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 + + + <key>ru</key> + <value>Пользовательские настройки</value> + + + ГруппаПользовательскиеНастройкиЕщеРасширеннаяПодсказка + 505 + Label + true + true + + Left + + + + + + ГруппаСхемаОтчетаЕще + 706 + + ЗагрузитьСхему + 700 + true + true + + true + + + ЗагрузитьСхемуРасширеннаяПодсказка + 701 + Label + true + true + + Left + + + Form.Command.ЗагрузитьСхему + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РедактироватьСхему + 702 + true + true + + true + + + РедактироватьСхемуРасширеннаяПодсказка + 703 + Label + true + true + + Left + + + Form.Command.РедактироватьСхему + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВосстановитьСтандартнуюСхему + 704 + true + true + + true + + + ВосстановитьСтандартнуюСхемуРасширеннаяПодсказка + 705 + Label + true + true + + Left + + + Form.Command.ВосстановитьСтандартнуюСхему + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Схема</value> + + + ГруппаСхемаОтчетаЕщеРасширеннаяПодсказка + 707 + Label + true + true + + Left + + + + true true true + + <key>ru</key> + <value>Прочее</value> + - ДругиеОтчетыРасширеннаяПодсказка - 509 + ГруппаПрочиеНастройкиОтчетаЕщеРасширеннаяПодсказка + 503 Label true true @@ -275,14 +1486,11 @@ Left - Form.Command.ДругиеОтчеты - Normal - PictureAndText - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu + Popup + + Auto + Normal + true true @@ -291,15 +1499,11 @@ <key>ru</key> - <value>Варианты отчета</value> + <value>Настройки отчета</value> - - ru - Выбрать другой вариант отчета или сохранить новый - - ГруппаВариантыОтчетаРасширеннаяПодсказка - 359 + ГруппаНастройкиОтчетаЕщеРасширеннаяПодсказка + 733 Label true true @@ -307,32 +1511,106 @@ Left - Popup - - - CommonPicture.ВыбратьВариантОтчета - - Picture - Normal - + - ГруппаПрочиеНастройкиОтчета - 502 + ГруппаРаботаВТаблицеЕще + 742 + + НайтиЕще + 744 + true + true + + true + + + НайтиЕщеРасширеннаяПодсказка + 745 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РазвернутьВсеГруппыЕще + 746 + true + true + + true + + + РазвернутьВсеГруппыЕщеРасширеннаяПодсказка + 747 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.ExpandAllGroups + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СвернутьВсеГруппыЕще + 748 + true + true + + true + + + СвернутьВсеГруппыЕщеРасширеннаяПодсказка + 749 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.CollapseAllGroups + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + - КомандыВариантовОтчета - 450 + КомандыТабличногоДокумента + 526 - ИзменитьВариант - 452 + ЗафиксироватьТаблицу + 528 true true true - ИзменитьВариантРасширеннаяПодсказка - 453 + ЗафиксироватьТаблицуРасширеннаяПодсказка + 529 Label true true @@ -340,7 +1618,7 @@ Left - Form.Command.ИзменитьВариантОтчета + Form.Item.ОтчетТабличныйДокумент.StandardCommand.FixTable Normal Auto true @@ -350,11 +1628,467 @@ InAdditionalSubmenu - ВыбратьВариант - 639 + ОтображатьГруппировки + 530 + true + true + + true + + + ОтображатьГруппировкиРасширеннаяПодсказка + 531 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.ShowGroups + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Редактирование + 532 + true + true + + true + + + РедактированиеРасширеннаяПодсказка + 533 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.Edit + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Таблица</value> + + + КомандыТабличногоДокументаРасширеннаяПодсказка + 527 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + true + true + + true + + + <key>ru</key> + <value>Работа в таблице</value> + + + ГруппаРаботаВТаблицеЕщеРасширеннаяПодсказка + 743 + Label + true + true + + Left + + + + + + ГруппаПрограммныйИнтерфейс + 641 + true + true + + true + + + <key>ru</key> + <value>Группа кнопок</value> + + + ru + Динамически добавляемые кнопки + + + ГруппаПрограммныйИнтерфейсРасширеннаяПодсказка + 642 + Label + true + true + + Left + + + + + + ГруппаВыводЕще + 726 + + ПечатьЕще + 750 + true + true + + true + + + ПечатьЕщеРасширеннаяПодсказка + 751 + Label + true + true + + Left + + + Form.StandardCommand.Print + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПараметрыСтраницы + 94 + true + true + + true + + + ПараметрыСтраницыРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.PageSetup + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СохранитьЕще + 752 + true + true + + true + + + СохранитьЕщеРасширеннаяПодсказка + 753 + Label + true + true + + Left + + + Form.StandardCommand.Save + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаОтправитьЕще + 754 + + ОтправитьПоПочтеЕще + 756 + true + true + + true + + + ОтправитьПоПочтеЕщеРасширеннаяПодсказка + 757 + Label + true + true + + Left + + + Form.Command.ОтправитьПоПочте + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Отправить</value> + + + ru + Отправить отчет по электронной почте + + + ГруппаОтправитьЕщеРасширеннаяПодсказка + 755 + Label + true + true + + Left + + + Popup + + + CommonPicture.ЭлектронноеПисьмо + + Picture + Normal + + + true + true + + true + + + <key>ru</key> + <value>Вывод</value> + + + ГруппаВыводЕщеРасширеннаяПодсказка + 727 + Label + true + true + + Left + + + + + + ГруппаВидыПоказателейЕще + 760 + + РассчитатьСуммуЕще + 762 + + <key>ru</key> + <value>Сумма</value> + + true + true + + true + + + РассчитатьСуммуЕщеРасширеннаяПодсказка + 763 + Label + true + true + + Left + + + Form.Command.РассчитатьСумму + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РассчитатьКоличествоЕще + 764 + + <key>ru</key> + <value>Количество</value> + + true + true + + true + + + РассчитатьКоличествоЕщеРасширеннаяПодсказка + 765 + Label + true + true + + Left + + + Form.Command.РассчитатьКоличество + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РассчитатьСреднееЕще + 766 + + <key>ru</key> + <value>Среднее</value> + + true + true + + true + + + РассчитатьСреднееЕщеРасширеннаяПодсказка + 767 + Label + true + true + + Left + + + Form.Command.РассчитатьСреднее + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РассчитатьМинимумЕще + 768 + + <key>ru</key> + <value>Минимум</value> + + true + true + + true + + + РассчитатьМинимумЕщеРасширеннаяПодсказка + 769 + Label + true + true + + Left + + + Form.Command.РассчитатьМинимум + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РассчитатьМаксимумЕще + 770 + + <key>ru</key> + <value>Максимум</value> + + true + true + + true + + + РассчитатьМаксимумЕщеРасширеннаяПодсказка + 771 + Label + true + true + + Left + + + Form.Command.РассчитатьМаксимум + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаВсеПоказателиЕще + 772 + + РассчитатьВсеПоказателиЕще + 774 <key>ru</key> - <value>Выбрать вариант отчета...</value> + <value>Все показатели</value> true true @@ -362,8 +2096,8 @@ true - ВыбратьВариантРасширеннаяПодсказка - 640 + РассчитатьВсеПоказателиЕщеРасширеннаяПодсказка + 775 Label true true @@ -371,7 +2105,7 @@ Left - Form.StandardCommand.LoadVariant + Form.Command.РассчитатьВсеПоказатели Normal Auto true @@ -387,90 +2121,11 @@ <key>ru</key> - <value>Команды вариантов отчета</value> - - true - - КомандыВариантовОтчетаРасширеннаяПодсказка - 451 - Label - true - true - - Left - - - - - - ГруппаПользовательскиеНастройки - 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 - - - <key>ru</key> - <value>Пользовательские настройки</value> + <value>Все показатели</value> - ГруппаПользовательскиеНастройкиРасширеннаяПодсказка - 505 + ГруппаВсеПоказателиЕщеРасширеннаяПодсказка + 773 Label true true @@ -487,247 +2142,15 @@ <key>ru</key> - <value>Прочее</value> + <value>Рассчитать</value> - - ГруппаПрочиеНастройкиОтчетаРасширеннаяПодсказка - 503 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - true - true - - true - - - <key>ru</key> - <value>Настройки отчета</value> - - - ГруппаНастройкиОтчетаРасширеннаяПодсказка - 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 - - + <toolTip> <key>ru</key> - <value>Таблица</value> - + Расчет выбранного, либо всех доступных показателей + - КомандыТабличногоДокументаРасширеннаяПодсказка - 527 + ГруппаВидыПоказателейЕщеРасширеннаяПодсказка + 761 Label true true @@ -741,69 +2164,17 @@ Normal - true - true - - true - - - <key>ru</key> - <value>Работа в таблице</value> - - - ГруппаРаботаВТаблицеРасширеннаяПодсказка - 519 - Label - true - true - - Left - - - - - - ГруппаПрограммныйИнтерфейс - 641 - true - true - - true - - - <key>ru</key> - <value>Группа кнопок</value> - - - ru - Динамически добавляемые кнопки - - - ГруппаПрограммныйИнтерфейсРасширеннаяПодсказка - 642 - Label - true - true - - Left - - - - - - ГруппаВывод - 534 - Печать - 52 + НовоеОкно + 41 true true true - ПечатьРасширеннаяПодсказка - 138 + НовоеОкноРасширеннаяПодсказка + 159 Label true true @@ -811,61 +2182,7 @@ 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 + Form.StandardCommand.NewWindow Normal Auto true @@ -875,20 +2192,16 @@ InAdditionalSubmenu - Сохранить - 51 - - <key>ru</key> - <value>Сохранить...</value> - + ИзменитьФорму + 42 true true true - СохранитьРасширеннаяПодсказка - 141 + ИзменитьФормуРасширеннаяПодсказка + 160 Label true true @@ -896,77 +2209,42 @@ Left - Form.StandardCommand.Save + Form.StandardCommand.CustomizeForm Normal - Picture + 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 - - ГруппаОтправить - 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 @@ -974,11 +2252,11 @@ <key>ru</key> - <value>Вывод</value> + <value>Командная панель еще</value> - ГруппаВыводРасширеннаяПодсказка - 535 + КоманднаяПанельЕщеРасширеннаяПодсказка + 720 Label true true @@ -986,116 +2264,11 @@ 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> - - - ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 133 - Label - true - true - + CommandBar + Left - - CommandBar - - Left - - - - НеОтсортированное - 516 + true true @@ -1103,11 +2276,11 @@ <key>ru</key> - <value>Не отсортированное</value> + <value>Команды, показатели</value> - НеОтсортированноеРасширеннаяПодсказка - 517 + КомандыИПоказателиРасширеннаяПодсказка + 716 Label true true @@ -1117,7 +2290,7 @@ UsualGroup - Vertical + AlwaysHorizontal Auto true true @@ -1136,6 +2309,7 @@ ОтчетТабличныйДокумент + true None ОтчетТабличныйДокументExtendedTooltip @@ -1266,6 +2440,10 @@ AdditionalDetailProcessing ОтчетТабличныйДокументОбработкаДополнительнойРасшифровки
      + + OnActivate + ОтчетТабличныйДокументПриАктивизацииОбласти + Selection ОтчетТабличныйДокументВыбор @@ -1274,7 +2452,7 @@ DetailProcessing ОтчетТабличныйДокументОбработкаРасшифровки - 60 + 59 true 15 true @@ -1290,6 +2468,837 @@ true + + ОбластьПоказателей + 660 + + ВидыПоказателей + 677 + + Сумма + 662 + true + true + + true + + + Сумма + + Left + + СуммаРасширеннаяПодсказка + 664 + Label + true + true + + Left + + + + СуммаКонтекстноеМеню + 663 + true + + InputField + true + Enter + true + Left + true + + 10 + true + true + false + true + true + true + true + Normal + + + + Количество + 665 + true + true + + true + + + Количество + + Left + + КоличествоРасширеннаяПодсказка + 667 + Label + true + true + + Left + + + + КоличествоКонтекстноеМеню + 666 + true + + InputField + true + Enter + true + Left + true + + 10 + true + true + false + true + true + true + true + Normal + + + + Среднее + 668 + true + true + + true + + + Среднее + + Left + + СреднееРасширеннаяПодсказка + 670 + Label + true + true + + Left + + + + СреднееКонтекстноеМеню + 669 + true + + InputField + true + Enter + true + Left + true + + 10 + true + true + false + true + true + true + true + Normal + + + + Минимум + 671 + true + true + + true + + + Минимум + + Left + + МинимумРасширеннаяПодсказка + 673 + Label + true + true + + Left + + + + МинимумКонтекстноеМеню + 672 + true + + InputField + true + Enter + true + Left + true + + 10 + true + true + false + true + true + true + true + Normal + + + + Максимум + 674 + true + true + + true + + + Максимум + + Left + + МаксимумРасширеннаяПодсказка + 676 + Label + true + true + + Left + + + + МаксимумКонтекстноеМеню + 675 + true + + InputField + true + Enter + true + Left + true + + 10 + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Виды показателей</value> + + true + false + + ВидыПоказателейРасширеннаяПодсказка + 678 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + + Style.ИтогиФонГруппы + + Auto + Auto + + + + СвернутьПоказатели + 682 + true + true + + true + + + СвернутьПоказателиРасширеннаяПодсказка + 683 + Label + true + true + + Left + + + Hyperlink + Form.Command.СвернутьПоказатели + Normal + Auto + true + true + UserCmds + Auto + + true + + true + + + <key>ru</key> + <value>Показатели</value> + + + ru + Показатели выделенных ячеек отчета + + true + true + + ОбластьПоказателейРасширеннаяПодсказка + 661 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Right + Auto + Button + true + true + Auto + Auto + + + + ПредопределенныеЭлементыНастроек + 791 + + Период1 + 778 + + Период1ДатаНачала + 780 + + <key>ru</key> + <value>Период (дата начала)</value> + + true + true + + true + + + Период1.StartDate + + None + + OnChange + Подключаемый_Период_ПриИзменении + + + Период1ДатаНачалаРасширеннаяПодсказка + 782 + Label + true + true + + Left + + + + Период1ДатаНачалаКонтекстноеМеню + 781 + true + + InputField + Enter + true + Left + true + + 9 + true + true + false + true + true + true + true + Normal + + + + Разделитель1 + 786 + + <key>ru</key> + <value>–</value> + + true + true + + true + + + Разделитель1РасширеннаяПодсказка + 788 + Label + true + true + + Left + + + + Разделитель1КонтекстноеМеню + 787 + true + + Label + true + true + + Left + + + + Период1ДатаОкончания + 783 + + <key>ru</key> + <value>Период (дата окончания)</value> + + true + true + + true + + + Период1.EndDate + + None + + OnChange + Подключаемый_Период_ПриИзменении + + + Период1ДатаОкончанияРасширеннаяПодсказка + 785 + Label + true + true + + Left + + + + Период1ДатаОкончанияКонтекстноеМеню + 784 + true + + InputField + Enter + true + Left + true + + 9 + true + true + false + true + true + true + true + Normal + + + + ВыбратьПериод1 + 789 + true + true + + true + + + ВыбратьПериод1РасширеннаяПодсказка + 790 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбратьПериод1 + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Период</value> + + true + + Период1РасширеннаяПодсказка + 779 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Период2 + 793 + + Период2ДатаНачала + 795 + + <key>ru</key> + <value>Период (дата начала)</value> + + true + true + + true + + + Период2.StartDate + + None + + OnChange + Подключаемый_Период_ПриИзменении + + + Период2ДатаНачалаРасширеннаяПодсказка + 797 + Label + true + true + + Left + + + + Период2ДатаНачалаКонтекстноеМеню + 796 + true + + InputField + Enter + true + Left + true + + 9 + true + true + false + true + true + true + true + Normal + + + + Разделитель2 + 798 + + <key>ru</key> + <value>–</value> + + true + true + + true + + + Разделитель2РасширеннаяПодсказка + 800 + Label + true + true + + Left + + + + Разделитель2КонтекстноеМеню + 799 + true + + Label + true + true + + Left + + + + Период2ДатаОкончания + 801 + + <key>ru</key> + <value>Период (дата окончания)</value> + + true + true + + true + + + Период2.EndDate + + None + + OnChange + Подключаемый_Период_ПриИзменении + + + Период2ДатаОкончанияРасширеннаяПодсказка + 803 + Label + true + true + + Left + + + + Период2ДатаОкончанияКонтекстноеМеню + 802 + true + + InputField + Enter + true + Left + true + + 9 + true + true + false + true + true + true + true + Normal + + + + ВыбратьПериод2 + 804 + true + true + + true + + + ВыбратьПериод2РасширеннаяПодсказка + 805 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбратьПериод2 + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Период</value> + + true + + Период2РасширеннаяПодсказка + 794 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Флажок1 + 806 + true + true + + true + + + Флажок1 + + + OnChange + Подключаемый_ЭлементНастройки_ПриИзменении + + + Флажок1РасширеннаяПодсказка + 808 + Label + true + true + + Left + + + + Флажок1КонтекстноеМеню + 807 + true + + CheckBoxField + Enter + true + Left + true + + + + Флажок2 + 809 + true + true + + true + + + Флажок2 + + + OnChange + Подключаемый_ЭлементНастройки_ПриИзменении + + + Флажок2РасширеннаяПодсказка + 811 + Label + true + true + + Left + + + + Флажок2КонтекстноеМеню + 810 + true + + CheckBoxField + Enter + true + Left + true + + + true + + true + + + <key>ru</key> + <value>Предопределенные элементы настроек</value> + + + ПредопределенныеЭлементыНастроекРасширеннаяПодсказка + 792 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + None false @@ -1313,10 +3322,6 @@ OnCreateAtServer ПриСозданииНаСервере - - OnClose - ПриЗакрытии - FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере @@ -1331,6 +3336,56 @@ UseIfNecessary auto true + + + СформироватьОтчет + + + + + ГруппаГлавноеЕще + + + + + ГруппаНастройкиОтчетаЕще + + + + + ГруппаРаботаВТаблицеЕще + + + + + ГруппаПрограммныйИнтерфейс + + + + + ГруппаВыводЕще + + + + + ГруппаВидыПоказателейЕще + + + + + НовоеОкно + + + + + ИзменитьФорму + + + + + Справка + + Отчет 1 @@ -1486,23 +3541,6 @@ true - - ОтчетСформирован - - <key>ru</key> - <value>Отчет сформирован</value> - - 14 - - Boolean - - - true - - - true - - ПравоВывода @@ -1571,53 +3609,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>БыстрыйПоискПользовательскихНастроек</name> - <title> - <key>ru</key> - <value>Быстрый поиск пользовательских настроек</value> - - 15 - - - true - - - true - - - - БыстрыйПоискИменОбъектовМетаданных - - <key>ru</key> - <value>Быстрый поиск имен объектов метаданных</value> - - 28 - - - true - - - true - - - - ЕстьБыстрыеНастройки - - <key>ru</key> - <value>Есть быстрые настройки</value> - - 17 - - Boolean - - - true - - - true - - ВариантыПанелиКлючТекущегоВарианта @@ -1636,23 +3627,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ЕстьОбычныеНастройки</name> - <title> - <key>ru</key> - <value>Есть обычные настройки</value> - - 31 - - Boolean - - - true - - - true - - ДобавленныеВарианты @@ -1860,12 +3834,12 @@ </columns> </attributes> <attributes> - <name>БыстрыйПоискНастроекВарианта</name> + <name>РезультатЗаполненияНастроек</name> <title> <key>ru</key> - <value>Быстрый поиск настроек варианта</value> + <value>Результат заполнения настроек</value> - 35 + 36 true @@ -1875,12 +3849,172 @@ - РезультатЗаполненияНастроек + Сумма <key>ru</key> - <value>Результат заполнения настроек</value> + <value>Сумма</value> - 36 + 37 + + Number + + 15 + 2 + + + + true + + + true + + + + Количество + + <key>ru</key> + <value>Количество</value> + + 38 + + Number + + 15 + 2 + + + + true + + + true + + + + Среднее + + <key>ru</key> + <value>Среднее</value> + + 39 + + Number + + 17 + 4 + + + + true + + + true + + + + Минимум + + <key>ru</key> + <value>Минимум</value> + + 40 + + Number + + 15 + 2 + + + + true + + + true + + + + Максимум + + <key>ru</key> + <value>Максимум</value> + + 41 + + Number + + 15 + 2 + + + + true + + + true + + + + Показатель + + <key>ru</key> + <value>Показатель</value> + + 42 + + Number + + 17 + 4 + + + + true + + + true + + + + Период1 + + <key>ru</key> + <value>Период</value> + + 43 + + StandardPeriod + + + true + + + true + + + + Период2 + + <key>ru</key> + <value>Период</value> + + 44 + + StandardPeriod + + + true + + + true + + + + ПутьКДаннымЭлементов + + <key>ru</key> + <value>Путь к данным элементов</value> + + 45 true @@ -1889,6 +4023,40 @@ true + + Флажок1 + + <key>ru</key> + <value>Флажок</value> + + 46 + + Boolean + + + true + + + true + + + + Флажок2 + + <key>ru</key> + <value>Флажок</value> + + 47 + + Boolean + + + true + + + true + + ВсеНастройки @@ -2011,33 +4179,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>ВычислитьСумму</name> - <title> - <key>ru</key> - <value>Подсчитать</value> - - 6 - - ru - Вычислить сумму чисел выделенных ячеек - - - true - - Alt+S - - CommonPicture.Сумма - - - - ВычислитьСумму - - - Picture - DontUse - Auto - ФормироватьСразу @@ -2102,26 +4243,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>ВыбратьПериод</name> - <title> - <key>ru</key> - <value>Выбрать период</value> - - 10 - - ru - Выбрать период - - - true - - - StdPicture.InputFieldSelect - - DontUse - Auto - ИзменитьУсловияОтборов @@ -2147,6 +4268,281 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>РассчитатьСумму</name> + <title> + <key>ru</key> + <value>Рассчитать сумму</value> + + 12 + + ru + Выполняет расчет суммы выделенных ячеек + + + true + + + + РассчитатьСумму + + + Auto + Auto + + + РассчитатьКоличество + + <key>ru</key> + <value>Рассчитать количество</value> + + 13 + + ru + Выполняет расчет количества выделенных ячеек + + + true + + + + РассчитатьКоличество + + + Auto + Auto + + + РассчитатьСреднее + + <key>ru</key> + <value>Рассчитать среднее</value> + + 14 + + ru + Выполняет расчет среднего значения выделенных ячеек + + + true + + + + РассчитатьСреднее + + + Auto + Auto + + + РассчитатьМинимум + + <key>ru</key> + <value>Рассчитать минимум</value> + + 15 + + ru + Выполняет расчет минимального значения выделенных ячеек + + + true + + + + РассчитатьМинимум + + + Auto + Auto + + + РассчитатьМаксимум + + <key>ru</key> + <value>Рассчитать максимум</value> + + 16 + + ru + Выполняет расчет максимального значения выделенных ячеек + + + true + + + + РассчитатьМаксимум + + + Auto + Auto + + + РассчитатьВсеПоказатели + + <key>ru</key> + <value>Рассчитать все показатели</value> + + 17 + + ru + Выполняет расчет всех показателей выделенных ячеек + + + true + + + + РассчитатьВсеПоказатели + + + Auto + Auto + + + СвернутьПоказатели + + <key>ru</key> + <value>Свернуть</value> + + 18 + + ru + Свернуть панель показателей + + + true + + + CommonPicture.СтрелкаВнизЗеленая + + + + СвернутьПоказатели + + + Picture + Auto + Auto + + + ЗагрузитьСхему + + <key>ru</key> + <value>Загрузить схему</value> + + 6 + + ru + Загружает схему компоновки данных из xml-файла + + + true + + + StdPicture.OpenFile + + + + ЗагрузитьСхему + + + DontUse + Auto + + + РедактироватьСхему + + <key>ru</key> + <value>Редактировать схему</value> + + 19 + + ru + Открывает конструктор схемы компоновки данных (доступно только в толстом клиенте) + + + true + + + StdPicture.DataCompositionSettingsWizard + + + + РедактироватьСхему + + + TextPicture + DontUse + Auto + + + ВосстановитьСтандартнуюСхему + + <key>ru</key> + <value>Стандартная схема</value> + + 20 + + ru + Восстановить стандартную схему + + + true + + + + ВосстановитьСтандартнуюСхему + + + DontUse + Auto + + + ВыбратьПериод1 + + <key>ru</key> + <value>Выбрать период</value> + + 10 + + true + + + StdPicture.InputFieldSelect + + + + Подключаемый_ВыбратьПериод + + + Picture + Auto + Auto + + + ВыбратьПериод2 + + <key>ru</key> + <value>Выбрать период</value> + + 21 + + true + + + StdPicture.InputFieldSelect + + + + Подключаемый_ВыбратьПериод + + + Picture + Auto + Auto + Ссылка @@ -2190,6 +4586,7 @@ OnUpdateUserSettingSetAtServer ПриОбновленииСоставаПользовательскихНастроекНаСервере + DontShow ОтчетТабличныйДокумент ОтчетДанныеРасшифровки ОтчетНаименованиеТекущегоВарианта diff --git a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html index 98b6d4573..889b052e7 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html +++ b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html @@ -29,7 +29,7 @@
      • Отправить сейчас, для этого:
        • -
          с помощью флажков выберите один или несколько форматов, в которых необходимо отправить отчет.
          +
          с помощью флажков выберите один или несколько форматов, в которых необходимо отправить отчет.
        • при необходимости включите флажок Дополнительно упаковать в архив (.zip).
        • @@ -51,7 +51,6 @@
          • Для поиска в отчете воспользуйтесь командой Найти.
          • С помощью кнопок  Свернуть все группы или  Развернуть все группы можно скрыть или показать группировку отчета.
          • Для сохранения результата отчета в файл нажмите , укажите наименование файла и путь для сохранения. -
          • Нажмите , для того чтобы посчитать показатели выделенных ячеек.
          • С помощью команд контекстного меню по правой кнопке мыши можно:
            • Открыть значение выделенной ячейки;
            • Отфильтровать записи по значению выбранного поля; diff --git a/SSL/src/CommonForms/ФормаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаОтчета/Module.bsl index 7993358c5..760f3fc35 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -1,10 +1,16 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте Перем ОбработчикПослеФормированияНаКлиенте Экспорт; &НаКлиенте -Перем ПараметрыОбработчика; -&НаКлиенте Перем ВыполнятьЗамеры; &НаКлиенте Перем ИдентификаторЗамера; @@ -25,6 +31,8 @@ Возврат; КонецЕсли; + ОпределитьПоведениеВМобильномКлиенте(); + // Определение ключевых параметров отчета. РежимРасшифровки = (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка <> Неопределено); ПравоВывода = ПравоДоступа("Вывод", Метаданные); @@ -80,7 +88,7 @@ КонецЕсли; // Определение настроек отчета. - ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчета(Параметры.Отчет, Истина); + ТипОтчетаСтрокой = ВариантыОтчетов.ТипОтчета(Параметры.Отчет, Истина); Если ТипОтчетаСтрокой = Неопределено Тогда Информация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(ОтчетПолноеИмя); Параметры.Отчет = Информация.Отчет; @@ -95,6 +103,7 @@ НастройкиОтчета.Вставить("ПолноеИмя", ОтчетПолноеИмя); НастройкиОтчета.Вставить("Наименование", СокрЛП(ОтчетМетаданные.Представление())); НастройкиОтчета.Вставить("ОтчетСсылка", Параметры.Отчет); + НастройкиОтчета.Вставить("Подсистема", ФормаПараметры.Подсистема); НастройкиОтчета.Вставить("Внешний", ТипЗнч(НастройкиОтчета.ОтчетСсылка) = Тип("Строка")); НастройкиОтчета.Вставить("Безопасный", БезопасныйРежим() <> Ложь); ОбновитьИнформациюОВариантеОтчета(); @@ -109,7 +118,8 @@ // Параметры по умолчанию. Если Не ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "ВыводитьСуммуВыделенныхЯчеек", Истина) Тогда - Элементы.АвтоСуммаКнопка.Видимость = Ложь; + Элементы.ГруппаПоказатель.Видимость = Ложь; + Элементы.ОбластьПоказателей.Видимость = Ложь; Элементы.ОтчетТабличныйДокумент.УстановитьДействие("ПриАктивизацииОбласти", ""); КонецЕсли; @@ -128,9 +138,10 @@ НастройкиОтчета.РазрешеноИзменятьВарианты = Ложь; КонецЕсли; - РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "РазрешеноВыбиратьИНастраиватьВариантыБезСохранения"); + РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + НастройкиОтчета, "РазрешеноВыбиратьИНастраиватьВариантыБезСохранения", Ложь); - Если РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = Истина Тогда + Если РазрешеноВыбиратьИНастраиватьВариантыБезСохранения Тогда НастройкиОтчета.РазрешеноИзменятьВарианты = Истина; НастройкиОтчета.РазрешеноВыбиратьВарианты = Истина; ВариантМодифицирован = Ложь; @@ -146,11 +157,14 @@ ПолноеИмяРеквизита = Реквизит.Имя + ?(ПустаяСтрока(Реквизит.Путь), "", "." + Реквизит.Путь); ПостоянныеРеквизиты.Добавить(ПолноеИмяРеквизита); КонецЦикла; + Для Каждого Команда Из Команды Цикл ПостоянныеКоманды.Добавить(Команда.Имя); КонецЦикла; - УстановитьВидимостьДоступность(); + Если Не РежимВариантаОтчета() Тогда + УстановитьВидимостьДоступность(); + КонецЕсли; // Тесная интеграция с почтой и рассылкой. ДоступнаОтправкаПисем = Ложь; @@ -172,7 +186,7 @@ Элементы.ГруппаОтправить.Видимость = Ложь; КонецЕсли; - // Определение что отчет может содержать некорректные данные. + // Определение, что отчет может содержать некорректные данные. Если Не Элементы.ФормироватьСразу.Пометка Тогда Попытка ИспользуемыеТаблицы = ВариантыОтчетов.ИспользуемыеТаблицы(ОтчетОбъект.СхемаКомпоновкиДанных); @@ -188,15 +202,12 @@ КонецПопытки; КонецЕсли; - Если ФормаПараметры.Подсистема = Неопределено Или Не НастройкиОтчета.РазрешеноВыбиратьВарианты Тогда - Элементы.ДругиеОтчеты.Видимость = Ложь; - КонецЕсли; + ОтобразитьСостояниеОтчета(НСтр("ru = 'Отчет не сформирован. Нажмите ""Сформировать"" для получения отчета.'")); ОтчетыПереопределяемый.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); Если НастройкиОтчета.События.ПриСозданииНаСервере Тогда ОтчетОбъект.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -211,7 +222,7 @@ ФормированиеПриОткрытии = Истина; ПодключитьОбработчикОжидания("СФормировать", 0.1, Истина); КонецЕсли; - ПоказатьРезультатЗаполненияНастроек(); + РассчитатьПоказатели(); КонецПроцедуры &НаКлиенте @@ -234,10 +245,37 @@ Или СуффиксФормыИсточника = ВРег("ФормаНастроек") Или СуффиксФормыИсточника = ВРег("ФормаВариантаОтчета") Или СуффиксФормыИсточника = ВРег("ФормаВарианта") Тогда - БыстрыеНастройкиЗаполнитьКлиент(Результат); + + ОбновитьЭлементыФормыНастроек(Результат); РезультатОбработан = Истина; КонецЕсли; КонецЕсли; + ИначеЕсли ТипЗнч(ПодчиненнаяФорма) = Тип("КонструкторСхемыКомпоновкиДанных") Тогда +#Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + Если Тип(Результат) = Тип("СхемаКомпоновкиДанных") Тогда + НастройкиОтчета.АдресСхемы = ПоместитьВоВременноеХранилище(Результат, УникальныйИдентификатор); + + Путь = ПолучитьИмяВременногоФайла(); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(Путь, "UTF-8"); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Результат, "dataCompositionSchema", "http://v8.1c.ru/8.1/data-composition-system/schema"); + ЗаписьXML.Закрыть(); + + ДвоичныеДанные = Новый ДвоичныеДанные(Путь); + НачатьУдалениеФайлов(, Путь); + + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СхемаКомпоновкиДанных", ДвоичныеДанные); + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь); + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + ПараметрыЗаполнения.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); + ПараметрыЗаполнения.Вставить("ИмяСобытия", "НастройкиПоУмолчанию"); + + ОбновитьЭлементыФормыНастроек(ПараметрыЗаполнения); + КонецЕсли; +#КонецЕсли КонецЕсли; // Механизмы расширения. @@ -251,11 +289,10 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) ОповещениеОбработано = Ложь; - Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() + Если ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияИзменениеВарианта() Или ИмяСобытия = "Запись_НаборКонстант" Тогда ОповещениеОбработано = Истина; ВариантыПанелиКлючТекущегоВарианта = " - "; - ПодключитьОбработчикОжидания("ВидимостьДоступностьЕслиТребуется", 0.1, Истина); КонецЕсли; ОтчетыКлиентПереопределяемый.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник, ОповещениеОбработано); КонецПроцедуры @@ -274,7 +311,6 @@ Возврат; КонецЕсли; - // Вызов переопределяемого модуля. ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); Если НастройкиОтчета.События.ПередЗагрузкойВариантаНаСервере Тогда ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); @@ -317,8 +353,9 @@ Иначе Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); КонецЕсли; + // Установка фиксированных отборов выполняется через компоновщик, т.к. в нем наиболее полная коллекция настроек. - // В ПередЗагрузкой в параметрах могут отсутствовать те параметры, настройки которые не переопределялись. + // В ПередЗагрузкой в параметрах могут отсутствовать те параметры, настройки которых не переопределялись. Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, Отчет.КомпоновщикНастроек.Настройки, НастройкиОтчета); КонецЕсли; @@ -328,7 +365,6 @@ ОбновитьИнформациюОВариантеОтчета(); КонецЕсли; - // Вызов переопределяемого модуля. Если НастройкиОтчета.События.ПриЗагрузкеВариантаНаСервере Тогда ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетОбъект.ПриЗагрузкеВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); @@ -354,14 +390,11 @@ &НаСервере Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД) - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - Если Не РежимВариантаОтчета() Тогда + Если Параметры.Свойство("АвтоТест") + Или Не РежимВариантаОтчета() Тогда Возврат; КонецЕсли; - // Вызов переопределяемого модуля. Если НастройкиОтчета.События.ПриЗагрузкеПользовательскихНастроекНаСервере Тогда ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетОбъект.ПриЗагрузкеПользовательскихНастроекНаСервере(ЭтотОбъект, НовыеПользовательскиеНастройкиКД); @@ -370,21 +403,15 @@ &НаСервере Процедура ПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - Если Не РежимВариантаОтчета() Тогда + Если Параметры.Свойство("АвтоТест") + Или Не РежимВариантаОтчета() Тогда Возврат; КонецЕсли; + СтандартнаяОбработка = Ложь; - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("ИмяСобытия", "ПриОбновленииСоставаПользовательскихНастроекНаСервере"); - ПараметрыЗаполнения.Вставить("СтандартнаяОбработкаСобытия", СтандартнаяОбработка); - БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); - Если ПараметрыЗаполнения.СтандартнаяОбработкаСобытия <> СтандартнаяОбработка Тогда - СтандартнаяОбработка = ПараметрыЗаполнения.СтандартнаяОбработкаСобытия; - КонецЕсли; + ПараметрыОбновления = Новый Структура("ИмяСобытия", "ПриОбновленииСоставаПользовательскихНастроекНаСервере"); + ОбновитьЭлементыФормыНастроекНаСервере(ПараметрыОбновления); КонецПроцедуры &НаСервере @@ -392,42 +419,38 @@ Если Не РежимВариантаОтчета() Тогда Возврат; КонецЕсли; - ПользовательскиеНастройкиКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; - Для Каждого ПользовательскаяНастройкаКД Из ПользовательскиеНастройкиКД.Элементы Цикл - Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ПользовательскаяНастройкаКД)); - - Если Тип = "ЗначениеПараметраНастроек" - И ТипЗнч(ПользовательскаяНастройкаКД.Значение) = Тип("СтандартныйПериод") - И ПользовательскаяНастройкаКД.Использование Тогда - - ИдентификаторЭлемента = ОтчетыКлиентСервер.ПривестиИдентификаторКИмени(ПользовательскаяНастройкаКД.ИдентификаторПользовательскойНастройки); - - ПериодНачало = Элементы.Найти(Тип + "_Начало_" + ИдентификаторЭлемента); - ПериодОкончание = Элементы.Найти(Тип + "_Окончание_" + ИдентификаторЭлемента); - Если ПериодНачало = Неопределено Или ПериодОкончание = Неопределено Тогда - Продолжить; - КонецЕсли; - - Значение = ПользовательскаяНастройкаКД.Значение; - Если ПериодНачало.АвтоОтметкаНезаполненного - И Не ЗначениеЗаполнено(Значение.ДатаНачала) - И Не ЗначениеЗаполнено(Значение.ДатаОкончания) Тогда - ТекстОшибки = НСтр("ru = 'Не указан период'"); - ПутьКДанным = ПериодНачало.ПутьКДанным; - ИначеЕсли Значение.ДатаНачала > Значение.ДатаОкончания Тогда - ТекстОшибки = НСтр("ru = 'Конец периода должен быть больше начала'"); - ПутьКДанным = ПериодОкончание.ПутьКДанным; - Иначе - Продолжить; - КонецЕсли; - - Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , ПутьКДанным); - + + ЭлементыНастроек = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; + Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл + Если ТипЗнч(ЭлементНастройки) <> Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + Или ТипЗнч(ЭлементНастройки.Значение) <> Тип("СтандартныйПериод") + Или Не ЭлементНастройки.Использование Тогда + Продолжить; КонецЕсли; + ШаблонИмени = "КомпоновщикНастроекПользовательскиеНастройкиЭлемент" + ЭлементыНастроек.Индекс(ЭлементНастройки); + + ДатаНачала = Элементы.Найти(ШаблонИмени + "ДатаНачала"); + ДатаОкончания = Элементы.Найти(ШаблонИмени + "ДатаОкончания"); + Если ДатаНачала = Неопределено Или ДатаОкончания = Неопределено Тогда + Продолжить; + КонецЕсли; + + Значение = ЭлементНастройки.Значение; + Если ДатаНачала.АвтоОтметкаНезаполненного = Истина + И Не ЗначениеЗаполнено(Значение.ДатаНачала) + И Не ЗначениеЗаполнено(Значение.ДатаОкончания) Тогда + ТекстОшибки = НСтр("ru = 'Не указан период'"); + ПутьКДанным = ДатаНачала.ПутьКДанным; + ИначеЕсли Значение.ДатаНачала > Значение.ДатаОкончания Тогда + ТекстОшибки = НСтр("ru = 'Конец периода должен быть больше начала'"); + ПутьКДанным = ДатаОкончания.ПутьКДанным; + Иначе + Продолжить; + КонецЕсли; + + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, ПутьКДанным,, Отказ); КонецЦикла; - КонецПроцедуры &НаСервере @@ -441,7 +464,7 @@ НастройкиКД = НовыеНастройкиКД; ВариантыПанелиКлючТекущегоВарианта = " - "; ОбновитьИнформациюОВариантеОтчета(); - УстановитьВидимостьДоступность(Ложь); + УстановитьВидимостьДоступность(Истина); КонецПроцедуры &НаСервере @@ -453,20 +476,6 @@ ЗаполнитьКомандыВыбораВариантов(); КонецПроцедуры -&НаКлиенте -Процедура ПриЗакрытии(ЗавершениеРаботы) - - Если ЗавершениеРаботы Тогда - Возврат; - КонецЕсли; - - Если ФоновоеЗаданиеИдентификатор <> Неопределено Тогда - ФоновоеЗаданиеОтменить(ФоновоеЗаданиеИдентификатор); - ФоновоеЗаданиеИдентификатор = Неопределено; - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -525,118 +534,53 @@ ОтчетыКлиентПереопределяемый.ОбработкаДополнительнойРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); КонецПроцедуры +&НаКлиенте +Процедура ОтчетТабличныйДокументПриАктивизацииОбласти(Элемент) + ПодключитьОбработчикОжидания("РассчитатьПоказателиДинамически", 0.2, Истина); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Подключаемые &НаКлиенте -Процедура Подключаемый_ФлажокИспользование_ПриИзменении(Элемент) - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); +Процедура Подключаемый_ЭлементНастройки_ПриИзменении(Элемент) + КомпоновщикНастроек = Отчет.КомпоновщикНастроек; - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Индекс = ПутьКДаннымЭлементов.ПоИмени[Элемент.Имя]; + Если Индекс = Неопределено Тогда + Индекс = ОтчетыКлиентСервер.ИндексЭлементаНастройкиПоПути(Элемент.Имя); + КонецЕсли; - ОтчетыКлиент.ОтразитьИзмененияВПодчиненных(ЭтотОбъект, ИдентификаторЭлемента, ПользовательскаяНастройкаКД); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ПолеВвода_ПриИзменении(Элемент) - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс]; - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - Значение = ПользовательскаяНастройкаКД.Значение; - ИначеЕсли ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Значение = ПользовательскаяНастройкаКД.ПравоеЗначение; + ЭтоФлажок = СтрНачинаетсяС(Элемент.Имя, "Флажок") Или СтрЗаканчиваетсяНа(Элемент.Имя, "Флажок"); + Если ЭтоФлажок Тогда + ЭлементНастройки.Значение = ЭтотОбъект[Элемент.Имя]; + КонецЕсли; + + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + И НастройкиОтчета.ЗагрузитьНастройкиПриИзмененииПараметров.Найти(ЭлементНастройки.Параметр) <> Неопределено Тогда + + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь); + + ПараметрыОбновления = Новый Структура; + ПараметрыОбновления.Вставить("КомпоновщикНастроекКД", КомпоновщикНастроек); + ПараметрыОбновления.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + + ОбновитьЭлементыФормыНастроек(ПараметрыОбновления); Иначе - Возврат; - КонецЕсли; - - Если ЗначениеЗаполнено(Значение) Тогда - ПользовательскаяНастройкаКД.Использование = Истина; - КонецЕсли; - - ОтчетыКлиент.ОтразитьИзмененияВПодчиненных(ЭтотОбъект, ИдентификаторЭлемента, ПользовательскаяНастройкаКД); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ФлажокЗначения_ПриИзменении(Элемент) - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - Значение = ЭтотОбъект[Элемент.Имя]; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + ОтчетыКлиент.ОбновитьСвойстваНастройки(ЭтотОбъект, КомпоновщикНастроек, ЭлементНастройки); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура Подключаемый_СписокКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОтчетыКлиент.СписокКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); +Процедура Подключаемый_ЭлементНастройки_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ПоказатьСписокВыбора(Элемент, СтандартнаяОбработка) КонецПроцедуры &НаКлиенте -Процедура Подключаемый_ЗначениеКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОтчетыКлиент.ЗначениеКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ВидСравнения_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - Подключаемый_ИзменитьВидСравнения(Элемент); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые - Стандартный период. - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении(Элемент) - // Формирование сведений по элементу. - ПериодНачалоИмя = Элемент.Имя; - ЗначениеИмя = СтрЗаменить(ПериодНачалоИмя, "_Начало_", "_Значение_"); - ИдентификаторЭлемента = Прав(ПериодНачалоИмя, 32); - - Значение = ЭтотОбъект[ЗначениеИмя]; - Заполнено = ЗначениеЗаполнено(Значение.ДатаНачала); - Если Заполнено Тогда - Значение.ДатаНачала = НачалоДня(Значение.ДатаНачала); - КонецЕсли; - - // Запись значения в пользовательские настройки компоновки данных. - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - Если Заполнено Тогда - ПользовательскаяНастройкаКД.Использование = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении(Элемент) - // Формирование сведений по элементу. - ПериодОкончаниеИмя = Элемент.Имя; - ЗначениеИмя = СтрЗаменить(ПериодОкончаниеИмя, "_Окончание_", "_Значение_"); - ИдентификаторЭлемента = Прав(ПериодОкончаниеИмя, 32); - - Значение = ЭтотОбъект[ЗначениеИмя]; - Заполнено = ЗначениеЗаполнено(Значение.ДатаОкончания); - Если Заполнено Тогда - Значение.ДатаОкончания = КонецДня(Значение.ДатаОкончания); - КонецЕсли; - - // Запись значения в пользовательские настройки компоновки данных. - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - Если Заполнено Тогда - ПользовательскаяНастройкаКД.Использование = Истина; - КонецЕсли; +Процедура Подключаемый_Период_ПриИзменении(Элемент) + ОтчетыКлиент.УстановитьПериод(ЭтотОбъект, Элемент.Имя); КонецПроцедуры &НаКлиенте @@ -654,10 +598,10 @@ ПараметрыФормы = Новый Структура; ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина); - ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); - ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); - ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); ПараметрыФормы.Вставить("ВариантНаименование", Строка(ОтчетНаименованиеТекущегоВарианта)); Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; @@ -667,9 +611,9 @@ ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров); Если ВыполнятьЗамеры Тогда МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); - ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.НачатьЗамерВремени( - Ложь, - НастройкиОтчета.КлючЗамеров + ".Настройки"); + ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.ЗамерВремени( + НастройкиОтчета.КлючЗамеров + ".Настройки", + Ложь, Ложь); МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(ИдентификаторЗамера, НастройкиОтчета.ПрефиксЗамеров); КонецЕсли; @@ -685,18 +629,18 @@ Если Результат = Неопределено Тогда Возврат; КонецЕсли; - БыстрыеНастройкиЗаполнитьКлиент(Результат); + ОбновитьЭлементыФормыНастроек(Результат); КонецПроцедуры &НаКлиенте Процедура ИзменитьВариантОтчета(Команда) ПараметрыФормы = Новый Структура; ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина); - ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); - ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); - ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); - ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); - ПараметрыФормы.Вставить("ПредставлениеВарианта", Строка(ОтчетНаименованиеТекущегоВарианта)); + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("ПредставлениеВарианта", Строка(ОтчетНаименованиеТекущегоВарианта)); ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ЭтотОбъект); @@ -710,10 +654,9 @@ ПараметрыЗаполнения.Вставить("СброситьНастройкиВарианта", Истина); ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь); КонецЕсли; - ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); - БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + ОбновитьЭлементыФормыНастроек(ПараметрыЗаполнения); КонецПроцедуры &НаКлиенте @@ -735,14 +678,8 @@ Сформировать(); КонецПроцедуры -&НаКлиенте -Процедура ВычислитьСумму(Команда) - СтандартныеПодсистемыКлиент.ПоказатьРасчетЯчеек(ЭтотОбъект, ОтчетТабличныйДокумент); -КонецПроцедуры - &НаКлиенте Процедура ФормироватьСразу(Команда) - ФормироватьСразу = Не Элементы.ФормироватьСразу.Пометка; Элементы.ФормироватьСразу.Пометка = ФормироватьСразу; @@ -753,15 +690,14 @@ ПользовательскиеНастройкиМодифицированы = Истина; ЗаполнитьЗначенияСвойств(Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния, СостояниеДоИзменения); - КонецПроцедуры &НаКлиенте Процедура ДругиеОтчеты(Команда) ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВариантСсылка", НастройкиОтчета.ВариантСсылка); - ПараметрыФормы.Вставить("ОтчетСсылка", НастройкиОтчета.ОтчетСсылка); - ПараметрыФормы.Вставить("ПодсистемаСсылка", ФормаПараметры.Подсистема); + ПараметрыФормы.Вставить("ВариантСсылка", НастройкиОтчета.ВариантСсылка); + ПараметрыФормы.Вставить("ОтчетСсылка", НастройкиОтчета.ОтчетСсылка); + ПараметрыФормы.Вставить("ПодсистемаСсылка", ФормаПараметры.Подсистема); ПараметрыФормы.Вставить("ОтчетНаименование", НастройкиОтчета.Наименование); Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; @@ -769,6 +705,93 @@ ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ПанельДругихОтчетов", ПараметрыФормы, ЭтотОбъект, Истина, , , , Блокировать); КонецПроцедуры +&НаКлиенте +Процедура ЗагрузитьСхему(Команда) + + ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьСхемуПослеПомещенияФайла", ЭтотОбъект); + + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Файлы XML (*.xml) |*.xml'"); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + + ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения, ПараметрыЗагрузки); + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьСхему(Команда) +#Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы); + + Если СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных") Тогда + СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ДополнительныеСвойства.СхемаКомпоновкиДанных = Неопределено; + КонецЕсли; + + Конструктор = Новый КонструкторСхемыКомпоновкиДанных(СхемаКомпоновкиДанных); + Конструктор.Редактировать(ЭтотОбъект); +#Иначе + ПоказатьПредупреждение(, (НСтр("ru='Для того чтобы редактировать схему компоновки, необходимо запустить приложение в режиме толстого клиента.'"))); +#КонецЕсли +КонецПроцедуры + +&НаКлиенте +Процедура ВосстановитьСтандартнуюСхему(Команда) + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Очистить(); + + ПараметрыДанных = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы; + ИменаПараметровКОчистке = СтрРазделить("ТипОбъектаМетаданных, ИмяОбъектаМетаданных, ИмяТаблицы", ", ", Ложь); + Для Каждого ИмяПараметра Из ИменаПараметровКОчистке Цикл + НайденныйПараметр = ПараметрыДанных.Найти(ИмяПараметра); + Если НайденныйПараметр <> Неопределено Тогда + НайденныйПараметр.Значение = Неопределено; + КонецЕсли; + КонецЦикла; + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + + ОбновитьЭлементыФормыНастроек(ПараметрыЗаполнения); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики команд расчета показателей. + +&НаКлиенте +Процедура РассчитатьСумму(Команда) + РассчитатьПоказатели(Команда.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьКоличество(Команда) + РассчитатьПоказатели(Команда.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьСреднее(Команда) + РассчитатьПоказатели(Команда.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьМинимум(Команда) + РассчитатьПоказатели(Команда.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьМаксимум(Команда) + РассчитатьПоказатели(Команда.Имя); +КонецПроцедуры + +&НаКлиенте +Процедура РассчитатьВсеПоказатели(Команда) + УстановитьВидимостьПоказателей(Не Элементы.РассчитатьВсеПоказатели.Пометка); +КонецПроцедуры + +&НаКлиенте +Процедура СвернутьПоказатели(Команда) + УстановитьВидимостьПоказателей(Ложь); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Подключаемые @@ -792,58 +815,43 @@ ПоказатьПредупреждение(, НСтр("ru = 'Вариант отчета не найден.'")); Возврат; КонецЕсли; + ВариантФормы = Найденные[0]; НастройкиОтчета.Удалить("ФормаНастроекРасширенныйРежим"); + ЗагрузитьВариант(ВариантФормы.КлючВарианта); + КлючУникальности = ОтчетыКлиентСервер.КлючУникальности(НастройкиОтчета.ПолноеИмя, ВариантФормы.КлючВарианта); - ПоказатьРезультатЗаполненияНастроек(); + Если Элементы.ФормироватьСразу.Пометка Тогда ПодключитьОбработчикОжидания("Сформировать", 0.1, Истина); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура Подключаемый_ИзменитьВидСравнения(Команда) - ИдентификаторЭлемента = Прав(Команда.Имя, 32); - Контекст = Новый Структура; - Контекст.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - Обработчик = Новый ОписаниеОповещения("ПослеВыбораВидаСравнения", ЭтотОбъект, Контекст); - ОтчетыКлиент.ИзменитьВидСравнения(ЭтотОбъект, ИдентификаторЭлемента, Обработчик); -КонецПроцедуры - -&НаКлиенте -Процедура ПослеВыбораВидаСравнения(ВидСравнения, Контекст) Экспорт - Если ВидСравнения = Неопределено Тогда - Возврат; - КонецЕсли; - ПараметрыЗаполнения = Новый Структура; - ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьВидСравнения"); - ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); - БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); -КонецПроцедуры - &НаКлиенте Процедура ИзменитьУсловияОтборов(Команда) ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТипФормыВладельца", ТипФормыОтчета); ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); - ПараметрыФормы.Вставить("ТолькоБыстрые", Истина); Обработчик = Новый ОписаниеОповещения("ИзменитьУсловияОтборовЗавершение", ЭтотОбъект); - ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик); + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета", ПараметрыФормы, ЭтотОбъект, Истина,,, Обработчик); КонецПроцедуры &НаКлиенте -Процедура ИзменитьУсловияОтборовЗавершение(ВыборПользователя, Контекст) Экспорт - Если ВыборПользователя = Неопределено - Или ВыборПользователя = КодВозвратаДиалога.Отмена - Или ВыборПользователя.Количество() = 0 Тогда +Процедура ИзменитьУсловияОтборовЗавершение(УсловияОтборов, Контекст) Экспорт + Если УсловияОтборов = Неопределено + Или УсловияОтборов = КодВозвратаДиалога.Отмена + Или УсловияОтборов.Количество() = 0 Тогда Возврат; КонецЕсли; ПараметрыЗаполнения = Новый Структура; ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьУсловияОтборов"); + ПараметрыЗаполнения.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); - ПараметрыЗаполнения.Вставить("УсловияОтборов", ВыборПользователя); - БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + ПараметрыЗаполнения.Вставить("УсловияОтборов", УсловияОтборов); + + ОбновитьЭлементыФормыНастроек(ПараметрыЗаполнения); КонецПроцедуры #КонецОбласти @@ -854,21 +862,17 @@ // Клиент &НаКлиенте -Процедура ФоновоеЗаданиеПроверитьНаКлиенте() - Задание = ФоновоеЗаданиеПроверитьНаСервере(); - Если Задание.Выполняется Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); - ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", ПараметрыОбработчика.ТекущийИнтервал, Истина); - Иначе - Если ОтчетСформирован Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Отчет сформирован'"), , Заголовок); - Иначе - ПоказатьОповещениеПользователя(НСтр("ru = 'Отчет не сформирован'"), , Заголовок); - КонецЕсли; - ПослеФормированияНаКлиенте(); +Процедура ОбновитьЭлементыФормыНастроек(ПараметрыОбновления) + ОбновитьЭлементыФормыНастроекНаСервере(ПараметрыОбновления); + + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОбновления, "Переформировать", Ложь) Тогда + ОчиститьСообщения(); + Сформировать(); КонецЕсли; КонецПроцедуры +#Область ФормированиеСОтправкойПоПочте + &НаКлиенте Процедура СформироватьПередОтправкойПоПочте(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда @@ -884,55 +888,214 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура Сформировать() - Отказ = Ложь; - ОтчетыКлиентПереопределяемый.ПередФормированием(ЭтотОбъект, Отказ); - Если Отказ Тогда - Возврат; - КонецЕсли; - ПередФормированиемНаКлиенте(); - ТребуетсяОбработчик = ФоновоеЗаданиеЗапустить(ФормированиеПриОткрытии, НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный); - Если ТребуетсяОбработчик Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); - ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 1, Истина); - Иначе - ПослеФормированияНаКлиенте(); - КонецЕсли; -КонецПроцедуры +#КонецОбласти + +#Область Формирование &НаКлиенте -Процедура ПередФормированиемНаКлиенте() - ОтчетСформирован = Ложь; +Процедура Сформировать() ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров); Если ВыполнятьЗамеры Тогда Комментарий = НастройкиОтчета.ПрефиксЗамеров + "; " + НСтр("ru = 'Непосредственно:'") + " " + Строка(Непосредственно); МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); - ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.НачатьЗамерВремени( - Ложь, - НастройкиОтчета.КлючЗамеров + ".Формирование"); + ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.ЗамерВремени( + НастройкиОтчета.КлючЗамеров + ".Формирование", + Ложь, Ложь); МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(ИдентификаторЗамера, Комментарий); КонецЕсли; + + Результат = РезультатФормированияОтчета(ФормированиеПриОткрытии, НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный); + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + Если Результат.Статус <> "Выполняется" Тогда + ПослеФормирования(Результат, Ложь); + Возврат; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ПослеФормирования", ЭтотОбъект, Истина); + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + + ДлительныеОперацииКлиент.ОжидатьЗавершение(Результат, Обработчик, ПараметрыОжидания); КонецПроцедуры &НаКлиенте -Процедура ПослеФормированияНаКлиенте() - ОтключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте"); +Процедура ПослеФормирования(Результат, ЗагрузитьРезультатФормированияОтчета) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Результат.Статус = "Выполнено" Тогда + Если ЗагрузитьРезультатФормированияОтчета Тогда + ЗагрузитьРезультатФормированияОтчета(); + КонецЕсли; + ПоказатьОповещениеПользователя(НСтр("ru = 'Отчет сформирован'"),, Заголовок); + ИначеЕсли Результат.Статус = "Ошибка" Тогда + ПоказатьОшибкиФормирования(Результат.КраткоеПредставлениеОшибки); + ПоказатьОповещениеПользователя(НСтр("ru = 'Отчет не сформирован'"),, Заголовок); + КонецЕсли; + ФормированиеПриОткрытии = Ложь; + + ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров); Если ВыполнятьЗамеры Тогда МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); МодульОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(ИдентификаторЗамера); КонецЕсли; - ПоказатьРезультатЗаполненияНастроек(); - ОбновитьОтображениеДанных(); - Обработчик = ОбработчикПослеФормированияНаКлиенте; - Если ТипЗнч(Обработчик) = Тип("ОписаниеОповещения") Тогда - ВыполнитьОбработкуОповещения(Обработчик, ОтчетСформирован); - ОбработчикПослеФормированияНаКлиенте = Неопределено; - КонецЕсли; - ОтчетыКлиентПереопределяемый.ПослеФормирования(ЭтотОбъект, ОтчетСформирован); + + ОтчетыКлиентПереопределяемый.ПослеФормирования(ЭтотОбъект, Результат.Статус = "Выполнено"); КонецПроцедуры +&НаСервере +Функция РезультатФормированияОтчета(Знач ФормированиеПриОткрытии, Непосредственно) + + Если ЗначениеЗаполнено(ФоновоеЗаданиеИдентификатор) Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); + ФоновоеЗаданиеИдентификатор = Неопределено; + КонецЕсли; + + Если Не ПроверитьЗаполнение() Тогда + Если ФормированиеПриОткрытии Тогда + ТекстОшибки = ""; + Сообщения = ПолучитьСообщенияПользователю(Истина); + Для Каждого Сообщение Из Сообщения Цикл + ТекстОшибки = ТекстОшибки + ?(ТекстОшибки = "", "", ";" + Символы.ПС + Символы.ПС) + Сообщение.Текст; + КонецЦикла; + ПоказатьОшибкиФормирования(ТекстОшибки); + КонецЕсли; + Возврат Неопределено; + КонецЕсли; + + ИмяОтчета = СтрРазделить(НастройкиОтчета.ПолноеИмя, ".")[1]; + ПараметрыФормирования = ПараметрыФормированияОтчета(ИмяОтчета, Непосредственно); + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнение отчета: %1'"), + ИмяОтчета); + ПараметрыВыполнения.ЗапуститьНеВФоне = Непосредственно; + + Результат = ДлительныеОперации.ВыполнитьВФоне( + "ВариантыОтчетов.СформироватьОтчетВФоне", + ПараметрыФормирования, + ПараметрыВыполнения); + + ФоновоеЗаданиеИдентификатор = Результат.ИдентификаторЗадания; + ФоновоеЗаданиеАдресХранилища = Результат.АдресРезультата; + + Если Результат.Статус <> "Выполняется" Тогда + ЗагрузитьРезультатФормированияОтчета(); + Иначе + ОтобразитьСостояниеОтчета(НСтр("ru = 'Отчет формируется...'"), БиблиотекаКартинок.ДлительнаяОперация48); + КонецЕсли; + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ПараметрыФормированияОтчета(ИмяОтчета, Непосредственно) + ПараметрыФормированияОтчета = Новый Структура; + ПараметрыФормированияОтчета.Вставить("СсылкаОтчета", НастройкиОтчета.ОтчетСсылка); + ПараметрыФормированияОтчета.Вставить("СсылкаВарианта", НастройкиОтчета.ВариантСсылка); + ПараметрыФормированияОтчета.Вставить("КлючВарианта", КлючТекущегоВарианта); + ПараметрыФормированияОтчета.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормированияОтчета.Вставить("ФиксированныеНастройкиКД", Отчет.КомпоновщикНастроек.ФиксированныеНастройки); + ПараметрыФормированияОтчета.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормированияОтчета.Вставить("СхемаМодифицирована", НастройкиОтчета.СхемаМодифицирована); + ПараметрыФормированияОтчета.Вставить("КлючСхемы", НастройкиОтчета.КлючСхемы); + ПараметрыФормированияОтчета.Вставить("ИмяКлючевойОперации"); + ПараметрыФормированияОтчета.Вставить("КомментарийКлючевойОперации"); + + ЗаполнитьЗначенияСвойств(ПараметрыФормированияОтчета, ПараметрыЗамеровФормированияОтчета(ИмяОтчета)); + + Если Непосредственно Тогда + Если НастройкиОтчета.СхемаМодифицирована Тогда + ПараметрыФормированияОтчета.Вставить("АдресСхемы", НастройкиОтчета.АдресСхемы); + КонецЕсли; + ПараметрыФормированияОтчета.Вставить("Объект", РеквизитФормыВЗначение("Отчет")); + ПараметрыФормированияОтчета.Вставить("ПолноеИмя", НастройкиОтчета.ПолноеИмя); + Иначе + Если НастройкиОтчета.СхемаМодифицирована Тогда + ПараметрыФормированияОтчета.Вставить("СхемаКД", ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы)); + КонецЕсли; + КонецЕсли; + + Возврат ПараметрыФормированияОтчета; +КонецФункции + +&НаСервере +Функция ПараметрыЗамеровФормированияОтчета(ИмяОтчета) + ПараметрыЗамеров = Новый Структура("ИмяКлючевойОперации, КомментарийКлючевойОперации"); + + Если Не НастройкиОтчета.ВыполнятьЗамеры + Или Не ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров) Тогда + Возврат ПараметрыЗамеров; + КонецЕсли; + + КомментарийКлючевойОперации = Новый Соответствие; + КомментарийКлючевойОперации.Вставить("ИмяОтчета", ИмяОтчета); + КомментарийКлючевойОперации.Вставить("ИмяИсходногоВарианта", НастройкиОтчета.ИмяИсходногоВарианта); + КомментарийКлючевойОперации.Вставить("Внешний", Число(НастройкиОтчета.Внешний)); + КомментарийКлючевойОперации.Вставить("Пользовательский", Число(НастройкиОтчета.Пользовательский)); + КомментарийКлючевойОперации.Вставить("Расшифровка", Число(РежимРасшифровки)); + КомментарийКлючевойОперации.Вставить("Модифицирован", Число(ВариантМодифицирован)); + + ПараметрыЗамеров.ИмяКлючевойОперации = НастройкиОтчета.КлючЗамеров + ".Формирование"; + ПараметрыЗамеров.КомментарийКлючевойОперации = КомментарийКлючевойОперации; + + Возврат ПараметрыЗамеров; +КонецФункции + +&НаСервере +Процедура ЗагрузитьРезультатФормированияОтчета() + Если Не ЭтоАдресВременногоХранилища(ФоновоеЗаданиеАдресХранилища) Тогда + Возврат; + КонецЕсли; + + Результат = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + + УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + ФоновоеЗаданиеАдресХранилища = Неопределено; + ФоновоеЗаданиеИдентификатор = Неопределено; + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Успех = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "Успех"); + Если Успех <> Истина Тогда + ПоказатьОшибкиФормирования(Результат.ТекстОшибки); + Возврат; + КонецЕсли; + + ДанныеЕщеОбновляются = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ДанныеЕщеОбновляются", Ложь); + Если ДанныеЕщеОбновляются Тогда + ОбщегоНазначения.СообщитьПользователю(ВариантыОтчетов.СообщениеДанныеЕщеОбновляются()); + КонецЕсли; + + ОтобразитьСостояниеОтчета(); + + ЗаполнитьЗначенияСвойств(НастройкиОтчета.Печать, ОтчетТабличныйДокумент); // Сохранение настроек печати. + ОтчетТабличныйДокумент = Результат.ТабличныйДокумент; + ЗаполнитьЗначенияСвойств(ОтчетТабличныйДокумент, НастройкиОтчета.Печать); // Восстановление. + + Если ЗначениеЗаполнено(ОтчетДанныеРасшифровки) И ЭтоАдресВременногоХранилища(ОтчетДанныеРасшифровки) Тогда + УдалитьИзВременногоХранилища(ОтчетДанныеРасшифровки); + КонецЕсли; + ОтчетДанныеРасшифровки = ПоместитьВоВременноеХранилище(Результат.Расшифровка, УникальныйИдентификатор); + + Если Не Результат.ВариантМодифицирован + И Не Результат.ПользовательскиеНастройкиМодифицированы Тогда + Возврат; + КонецЕсли; + + Результат.Вставить("ИмяСобытия", "ПослеФормирования"); + Результат.Вставить("Непосредственно", Ложь); + ОбновитьЭлементыФормыНастроекНаСервере(Результат); +КонецПроцедуры + +#КонецОбласти + &НаКлиенте Процедура ПоказатьДиалогОтправкиПоПочте() Вложение = Новый Структура; @@ -951,104 +1114,63 @@ КонецПроцедуры &НаКлиенте -Процедура ВидимостьДоступностьЕслиТребуется() - Если ВариантыПанелиКлючТекущегоВарианта <> " - " Тогда // Изменения уже применены - Возврат; +Процедура ПоказатьСписокВыбора(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + Сведения = ОтчетыКлиент.СведенияОЭлементеНастройки(Отчет.КомпоновщикНастроек, Элемент.Имя); + ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; + + ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора( + Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент); + + Элемент.ДоступныеТипы = ОтчетыКлиент.ТипЗначенияОграниченныйСвязьюПоТипу( + Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент, Сведения.Описание); + + Если ТипЗнч(Сведения.ЭлементПользовательскойНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ТекущееЗначение = Сведения.ЭлементПользовательскойНастройки.Значение; + Иначе + ТекущееЗначение = Сведения.ЭлементПользовательскойНастройки.ПравоеЗначение; КонецЕсли; - УстановитьВидимостьДоступность(); + + Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки(Сведения.ЭлементПользовательскойНастройки, Сведения.Описание); + ВыборГруппИЭлементов = ОтчетыКлиент.ЗначениеТипаИспользованиеГруппИЭлементов( + Сведения.Описание.ВыборГруппИЭлементов, Условие); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение)); + ПараметрыОткрытия.Вставить("ОписаниеТипов", Элемент.ДоступныеТипы); + ПараметрыОткрытия.Вставить("ЗначенияДляВыбора", Элемент.СписокВыбора); + ПараметрыОткрытия.Вставить("ЗначенияДляВыбораЗаполнены", Элемент.СписокВыбора.Количество() > 0); + ПараметрыОткрытия.Вставить("ОграничиватьВыборУказаннымиЗначениями", ПараметрыОткрытия.ЗначенияДляВыбораЗаполнены); + ПараметрыОткрытия.Вставить("Представление", Элемент.Заголовок); + ПараметрыОткрытия.Вставить("ПараметрыВыбора", Новый Массив(ПараметрыВыбора)); + ПараметрыОткрытия.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); + + Обработчик = Новый ОписаниеОповещения("ЗавершитьВыборИзСписка", ЭтотОбъект, Сведения.ЭлементПользовательскойНастройки); + Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыОткрытия, ЭтотОбъект,,,, Обработчик, Режим); КонецПроцедуры &НаКлиенте -Функция НайтиПользовательскуюНастройкуЭлемента(ИмяИлиИдентификаторЭлемента) Экспорт - // Для пользовательских настроек хранятся идентификаторы компоновки данных, - // поскольку они не могут храниться по ссылке (происходит копирование значения). - Если СтрДлина(ИмяИлиИдентификаторЭлемента) = 32 Тогда - ИдентификаторЭлемента = ИмяИлиИдентификаторЭлемента; - Иначе - ИдентификаторЭлемента = Прав(ИмяИлиИдентификаторЭлемента, 32); - КонецЕсли; - ИдентификаторКД = БыстрыйПоискПользовательскихНастроек.Получить(ИдентификаторЭлемента); - Если ИдентификаторКД = Неопределено Тогда - Возврат Неопределено; - Иначе - Возврат Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); - КонецЕсли; -КонецФункции - -&НаКлиенте -Функция НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента) Экспорт - // Для пользовательских настроек хранятся идентификаторы компоновки данных, - // поскольку они не могут храниться по ссылке (происходит копирование значения). - ВсеДополнительныеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, "ЭлементыФормы"); - Если ВсеДополнительныеНастройки = Неопределено Тогда - Возврат Неопределено; - Иначе - Возврат ВсеДополнительныеНастройки[ИдентификаторЭлемента]; - КонецЕсли; -КонецФункции - -&НаКлиенте -Процедура БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения) - Если ПараметрыЗаполнения = Неопределено Тогда - Возврат; - КонецЕсли; - БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); - ПоказатьРезультатЗаполненияНастроек(); - Если ПараметрыЗаполнения.Свойство("Переформировать") И ПараметрыЗаполнения.Переформировать Тогда - ОчиститьСообщения(); - Сформировать(); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПоказатьРезультатЗаполненияНастроек() - Если ТипЗнч(РезультатЗаполненияНастроек) <> Тип("Структура") Тогда +Процедура ЗавершитьВыборИзСписка(Список, ЭлементПользовательскойНастройки) Экспорт + Если ТипЗнч(Список) <> Тип("СписокЗначений") Тогда Возврат; КонецЕсли; - СвоиСпискиВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатЗаполненияНастроек, "СвоиСпискиВыбора"); - Если ТипЗнч(СвоиСпискиВыбора) = Тип("Массив") Тогда - Для Каждого ИдентификаторЭлемента Из СвоиСпискиВыбора Цикл - НастройкаВарианта = НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента); - Если НастройкаВарианта = Неопределено Тогда - Продолжить; - КонецЕсли; - ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - Если ДополнительныеНастройки = Неопределено - Или ТипЗнч(ДополнительныеНастройки.ЗначенияДляВыбора) <> Тип("СписокЗначений") Тогда - Продолжить; - КонецЕсли; - Тип = ТипЗнч(НастройкаВарианта.ЭлементКД); - Если Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ДоступныеПараметры = НастройкаВарианта.УзелКД.ДоступныеПараметры; - Если ДоступныеПараметры = Неопределено Тогда - Продолжить; - КонецЕсли; - ДоступнаяНастройкаКД = ДоступныеПараметры.НайтиПараметр(НастройкаВарианта.ЭлементКД.Параметр); - ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ДоступныеПоляОтбора = НастройкаВарианта.УзелКД.ДоступныеПоляОтбора; - Если ДоступныеПоляОтбора = Неопределено Тогда - Продолжить; - КонецЕсли; - ДоступнаяНастройкаКД = ДоступныеПоляОтбора.НайтиПоле(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); - КонецЕсли; - Если ДоступнаяНастройкаКД = Неопределено - Или ТипЗнч(ДоступнаяНастройкаКД.ДоступныеЗначения) <> Тип("СписокЗначений") Тогда - Продолжить; - КонецЕсли; - Попытка - ДоступнаяНастройкаКД.ДоступныеЗначения.Очистить(); - Для Каждого Элемент Из ДополнительныеНастройки.ЗначенияДляВыбора Цикл - ЗаполнитьЗначенияСвойств(ДоступнаяНастройкаКД.ДоступныеЗначения.Добавить(), Элемент); - КонецЦикла; - Исключение - Продолжить; - КонецПопытки; - КонецЦикла; - КонецЕсли; + ВыбранныеЗначения = Новый СписокЗначений; + Для Каждого ЭлементСписка Из Список Цикл + Если ЭлементСписка.Пометка Тогда + ЗаполнитьЗначенияСвойств(ВыбранныеЗначения.Добавить(), ЭлементСписка); + КонецЕсли; + КонецЦикла; - РезультатЗаполненияНастроек.Очистить(); + Если ТипЗнч(ЭлементПользовательскойНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЭлементПользовательскойНастройки.Значение = ВыбранныеЗначения; + Иначе + ЭлементПользовательскойНастройки.ПравоеЗначение = ВыбранныеЗначения; + КонецЕсли; + ЭлементПользовательскойНастройки.Использование = Истина; КонецПроцедуры &НаКлиенте @@ -1061,68 +1183,173 @@ Или СтрНачинаетсяС(АдресСсылкиВРег, ВРег("https://")) Или СтрНачинаетсяС(АдресСсылкиВРег, ВРег("e1cib/")) Или СтрНачинаетсяС(АдресСсылкиВРег, ВРег("e1c://")) Тогда - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресСсылки); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(АдресСсылки); Возврат Истина; КонецЕсли; Возврат Ложь; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент или сервер - -&НаКлиентеНаСервереБезКонтекста -Функция НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента) - ПоискНастройкиВарианта = ЭтотОбъект.БыстрыйПоискНастроекВарианта.Получить(ИдентификаторЭлемента); - Если ПоискНастройкиВарианта = Неопределено Тогда - Возврат Неопределено; +&НаКлиенте +Процедура ЗагрузитьСхемуПослеПомещенияФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + Если ВыбранныеФайлы = Неопределено Тогда + Возврат; КонецЕсли; - КорневойУзелКД = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторУзлаКД); - Результат = Новый Структура("УзелКД, ЭлементКД"); - Результат.УзелКД = КорневойУзелКД[ПоискНастройкиВарианта.ИмяКоллекции]; - Результат.ЭлементКД = Результат.УзелКД.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторЭлементаКД); - Возврат Результат; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ВыбранныеФайлы.Хранение); + + ДополнительныеСвойства = Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства; + ДополнительныеСвойства.Очистить(); + ДополнительныеСвойства.Вставить("СхемаКомпоновкиДанных", ДвоичныеДанные); + ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь); + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + ПараметрыЗаполнения.Вставить("КомпоновщикНастроекКД", Отчет.КомпоновщикНастроек); + + ОбновитьЭлементыФормыНастроек(ПараметрыЗаполнения); +КонецПроцедуры + +#Область РасчетПоказателейВыделенныхЯчеек + +// Выполняет расчет и вывод показателей выделенной области ячеек. +// См. обработчик события ОтчетТабличныйДокументПриАктивизацииОбласти. +// +&НаКлиенте +Процедура РассчитатьПоказателиДинамически() + Перем ТекущаяКоманда; + + КомандыПоказателей = КомандыПоказателей(); + Для Каждого Команда Из КомандыПоказателей Цикл + Если Элементы[Команда.Ключ].Пометка Тогда + ТекущаяКоманда = Команда.Ключ; + Прервать; + КонецЕсли; + КонецЦикла; + + РассчитатьПоказатели(ТекущаяКоманда); +КонецПроцедуры + +// Выполняет расчет и вывод показателей выделенных областей ячеек табличного документа. +// +// Параметры: +// ТекущаяКоманда - Строка - имя команды расчета показателя, например, "РассчитатьСумму". +// Определяет, какой показатель является основным. +// +&НаКлиенте +Процедура РассчитатьПоказатели(ТекущаяКоманда = "РассчитатьСумму") + // Расчет показателей. + ПараметрыРасчета = ОбщегоНазначенияСлужебныйКлиент.ПараметрыРасчетаПоказателейЯчеек(ОтчетТабличныйДокумент); + Если ПараметрыРасчета.РассчитатьНаСервере Тогда + РасчетныеПоказатели = РасчетныеПоказателиСервер(ПараметрыРасчета); + Иначе + РасчетныеПоказатели = ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек( + ОтчетТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти); + КонецЕсли; + + // Установка значений показателей. + ЗаполнитьЗначенияСвойств(ЭтотОбъект, РасчетныеПоказатели); + + // Переключение и форматирование показателей. + КомандыПоказателей = КомандыПоказателей(); + Для Каждого Команда Из КомандыПоказателей Цикл + Элементы[Команда.Ключ].Пометка = Ложь; + + ЗначениеПоказателя = РасчетныеПоказатели[Команда.Значение]; + РазрядностьПоказателя = Мин(СтрДлина(Макс(ЗначениеПоказателя, -ЗначениеПоказателя) % 1) - 2, 4); + + Элементы[Команда.Значение].ФорматРедактирования = "ЧДЦ=" + РазрядностьПоказателя + "; ЧРГ=' '; ЧН=0"; + КонецЦикла; + Элементы[ТекущаяКоманда].Пометка = Истина; + + // Вывод основного показателя. + ТекущийПоказатель = КомандыПоказателей[ТекущаяКоманда]; + Показатель = ЭтотОбъект[ТекущийПоказатель]; + Элементы.Показатель.ФорматРедактирования = Элементы[ТекущийПоказатель].ФорматРедактирования; + Элементы.ГруппаВидыПоказателей.Картинка = БиблиотекаКартинок[ТекущийПоказатель]; + Элементы.ГруппаВидыПоказателейЕще.Картинка = БиблиотекаКартинок[ТекущийПоказатель]; +КонецПроцедуры + +// Рассчитывает показатели числовых ячеек в табличном документе. +// см. ОтчетыКлиентСервер.РасчетныеПоказателиЯчеек. +// +&НаСервере +Функция РасчетныеПоказателиСервер(ПараметрыРасчета) + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек(ОтчетТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти); КонецФункции +// Определяет соответствие между командами расчета показателей и показателями. +// +// Возвращаемое значение: +// Соответствие - Ключ - имя команды, Значение - имя показателя. +// +&НаКлиенте +Функция КомандыПоказателей() + КомандыПоказателей = Новый Соответствие(); + КомандыПоказателей.Вставить("РассчитатьСумму", "Сумма"); + КомандыПоказателей.Вставить("РассчитатьКоличество", "Количество"); + КомандыПоказателей.Вставить("РассчитатьСреднее", "Среднее"); + КомандыПоказателей.Вставить("РассчитатьМинимум", "Минимум"); + КомандыПоказателей.Вставить("РассчитатьМаксимум", "Максимум"); + + Возврат КомандыПоказателей; +КонецФункции + +// Управляет признаком видимости панели расчетных показателей. +// +// Параметры: +// Видимость - Булево - Признак включения / выключения видимости панели показателей. +// См. также Синтакс-помощник: ГруппаФормы.Видимость. +// +&НаКлиенте +Процедура УстановитьВидимостьПоказателей(Видимость) + Элементы.ОбластьПоказателей.Видимость = Видимость; + Элементы.РассчитатьВсеПоказатели.Пометка = Видимость; +КонецПроцедуры + +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // Вызов сервера &НаСервере -Процедура УстановитьВидимостьДоступность(ОбновитьКоманды = Истина) - +Процедура УстановитьВидимостьДоступность(ПриСохраненииВарианта = Ложь) ПоказыватьКомандыВыбораВариантов = РежимВариантаОтчета() И НастройкиОтчета.РазрешеноВыбиратьВарианты; - Если ОбновитьКоманды Тогда + Если Не ПриСохраненииВарианта Тогда ПоказыватьКомандыИзмененияВарианта = ПоказыватьКомандыВыбораВариантов И НастройкиОтчета.РазрешеноИзменятьВарианты; - ЕстьНастройки = ЕстьБыстрыеНастройки Или ЕстьОбычныеНастройки; + РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + НастройкиОтчета, "РазрешеноВыбиратьИНастраиватьВариантыБезСохранения", Ложь); + КоличествоДоступныхНастроек = ОтчетыСервер.КоличествоДоступныхНастроек(Отчет.КомпоновщикНастроек); - Элементы.ВсеНастройки.Видимость = ПоказыватьКомандыИзмененияВарианта Или ЕстьОбычныеНастройки; - Элементы.ВариантыОтчета.Видимость = ПоказыватьКомандыВыбораВариантов; - Элементы.ИзменитьВариант.Видимость = ПоказыватьКомандыИзмененияВарианта; - Элементы.ВыбратьВариант.Видимость = ПоказыватьКомандыВыбораВариантов; + Элементы.ВсеНастройки.Видимость = ПоказыватьКомандыИзмененияВарианта Или КоличествоДоступныхНастроек.Обычных > 0; + Элементы.ВсеНастройкиЕще.Видимость = Элементы.ВсеНастройки.Видимость; + Элементы.ГруппаВариантыОтчета.Видимость = ПоказыватьКомандыВыбораВариантов; + + РазрешеноСохранятьВариант = ПоказыватьКомандыИзмененияВарианта + И Не РазрешеноВыбиратьИНастраиватьВариантыБезСохранения; ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "СохранитьВариант", - "Видимость", - ПоказыватьКомандыИзмененияВарианта); // Кнопка исчезает, если команда недоступна по правам. - Элементы.ИзменитьУсловияОтборов.Видимость = ЕстьНастройки И РежимВариантаОтчета(); + Элементы, "СохранитьВариант", "Видимость", РазрешеноСохранятьВариант); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "ВыбратьНастройки", - "Видимость", - ПоказыватьКомандыВыбораВариантов И ЕстьНастройки); // Кнопка исчезает, если команда недоступна по правам. + Элементы, "СохранитьВариантЕще", "Видимость", РазрешеноСохранятьВариант); + + Элементы.ДругиеОтчеты.Видимость = НастройкиОтчета.Подсистема <> Неопределено + И НастройкиОтчета.РазрешеноВыбиратьВарианты; + Элементы.ДругиеОтчетыЕще.Видимость = Элементы.ДругиеОтчеты.Видимость; + + Элементы.ИзменитьВариант.Видимость = ПоказыватьКомандыИзмененияВарианта; + Элементы.ВыбратьВариант.Видимость = ПоказыватьКомандыВыбораВариантов; + + РазрешеноИспользоватьНастройки = ПоказыватьКомандыВыбораВариантов И КоличествоДоступныхНастроек.Итог > 0; ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "СохранитьНастройки", - "Видимость", - ПоказыватьКомандыВыбораВариантов И ЕстьНастройки); // Кнопка исчезает, если команда недоступна по правам. - - РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "РазрешеноВыбиратьИНастраиватьВариантыБезСохранения"); - - Если РазрешеноВыбиратьИНастраиватьВариантыБезСохранения = Истина Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СохранитьВариант", "Видимость", Ложь); + Элементы, "ВыбратьНастройки", "Видимость", РазрешеноИспользоватьНастройки); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, "СохранитьНастройки", "Видимость", РазрешеноИспользоватьНастройки); + + Элементы.ИзменитьУсловияОтборов.Видимость = КоличествоДоступныхНастроек.Итог > 0 И РежимВариантаОтчета(); + + Если РазрешеноВыбиратьИНастраиватьВариантыБезСохранения Тогда ВариантМодифицирован = Ложь; КонецЕсли; - КонецЕсли; // Команды выбора вариантов. @@ -1147,6 +1374,13 @@ КонецЕсли; КонецЕсли; + // Команды модификации Схемы. + Элементы.РедактироватьСхему.Видимость = НастройкиОтчета.РазрешеноРедактироватьСхему; + Элементы.ВосстановитьСтандартнуюСхему.Видимость = НастройкиОтчета.РазрешеноВосстанавливатьСтандартнуюСхему; + Элементы.ЗагрузитьСхему.Видимость = НастройкиОтчета.РазрешеноЗагружатьСхему + // В модели сервиса загрузка произвольной СКД недоступна с точки зрения безопасности. + И Не ОбщегоНазначения.РазделениеВключено(); + // Заголовок. ОтчетНаименованиеТекущегоВарианта = СокрЛП(ОтчетНаименованиеТекущегоВарианта); Если ЗначениеЗаполнено(ОтчетНаименованиеТекущегоВарианта) Тогда @@ -1154,240 +1388,12 @@ Иначе Заголовок = НастройкиОтчета.Наименование; КонецЕсли; + Если РежимРасшифровки Тогда Заголовок = Заголовок + " (" + НСтр("ru = 'Расшифровка'") + ")"; КонецЕсли; КонецПроцедуры -&НаСервере -Функция БыстрыеНастройкиЗаполнить(Знач ПараметрыКлиента) - // Вставка значений по умолчанию для обязательных ключей параметров заполнения. - ПараметрыЗаполнения = БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента); - - // Вызов переопределяемого модуля. - Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек Тогда - ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); - ОтчетОбъект.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - КонецЕсли; - - // Запись новых настроек варианта и пользовательских настроек в компоновщик. - БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения); - - // Получение информации из КД. - УсловияВывода = Новый Структура; - УсловияВывода.Вставить("ТолькоПользовательские", Истина); - УсловияВывода.Вставить("ТолькоБыстрые", Истина); - УсловияВывода.Вставить("ИдентификаторТекущегоУзлаКД", Неопределено); - Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках( - Отчет.КомпоновщикНастроек, - НастройкиОтчета, - ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя, - УсловияВывода); - ЕстьБыстрыеНастройки = Информация.ЕстьБыстрыеНастройки; - ЕстьОбычныеНастройки = Информация.ЕстьОбычныеНастройки; - - // Удаление элементов старых настроек. - БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения); - - // Добавление элементов актуальных настроек и загрузка значений. - БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация); - - // Связи. - ЗарегистрироватьОтключаемыеСвязи(Информация); - - // Стандартные периоды. - НастройкиОтчета.Вставить("СтандартныеПериоды", Новый Массив); - СтандартныеПериоды = Информация.ПользовательскиеНастройки.НайтиСтроки(Новый Структура("ТипЭлементов", "СтандартныйПериод")); - Для Каждого СвойстваНастройки Из СтандартныеПериоды Цикл - НастройкиОтчета.СтандартныеПериоды.Добавить(СвойстваНастройки.ИдентификаторКД); - КонецЦикла; - - // Обработка дополнительных настроек. - ПослеИзмененияКлючевыхСостояний(ПараметрыЗаполнения); - - УстановитьВидимостьДоступность(); - - // Вызов переопределяемого модуля. - Если НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек Тогда - ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); - ОтчетОбъект.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); - КонецЕсли; - - Если НастройкиОтчета.Свойство("ОтчетОбъект") Тогда - НастройкиОтчета.Удалить("ОтчетОбъект"); - КонецЕсли; - - РезультатЗаполненияНастроек = ПараметрыЗаполнения.Результат; - - ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация); -КонецФункции - -&НаСервере -Функция ФоновоеЗаданиеЗапустить(Знач ФормированиеПриОткрытии, Непосредственно) - Если ФоновоеЗаданиеИдентификатор <> Неопределено Тогда - ФоновоеЗаданиеОтменить(ФоновоеЗаданиеИдентификатор); - ФоновоеЗаданиеИдентификатор = Неопределено; - КонецЕсли; - - Если Не ПроверитьЗаполнение() Тогда - Если ФормированиеПриОткрытии Тогда - ТекстОшибки = ""; - Сообщения = ПолучитьСообщенияПользователю(Истина); - Для Каждого Сообщение Из Сообщения Цикл - ТекстОшибки = ТекстОшибки + ?(ТекстОшибки = "", "", ";" + Символы.ПС + Символы.ПС) + Сообщение.Текст; - КонецЦикла; - ПоказатьОшибкиФормирования(ТекстОшибки); - КонецЕсли; - Возврат Ложь; - КонецЕсли; - - // Запуск фонового задания - ПараметрыФормированияОтчета = Новый Структура; - ПараметрыФормированияОтчета.Вставить("СсылкаОтчета", НастройкиОтчета.ОтчетСсылка); - ПараметрыФормированияОтчета.Вставить("СсылкаВарианта", НастройкиОтчета.ВариантСсылка); - ПараметрыФормированияОтчета.Вставить("КлючВарианта", КлючТекущегоВарианта); - ПараметрыФормированияОтчета.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); - ПараметрыФормированияОтчета.Вставить("ФиксированныеНастройкиКД", Отчет.КомпоновщикНастроек.ФиксированныеНастройки); - ПараметрыФормированияОтчета.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); - ПараметрыФормированияОтчета.Вставить("СхемаМодифицирована", НастройкиОтчета.СхемаМодифицирована); - ПараметрыФормированияОтчета.Вставить("КлючСхемы", НастройкиОтчета.КлючСхемы); - - ИмяОтчета = СтрРазделить(НастройкиОтчета.ПолноеИмя, ".")[1]; - - Если НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров) Тогда - Разрезы = Новый Соответствие; - Разрезы.Вставить("ИмяОтчета", ИмяОтчета); - Разрезы.Вставить("ИмяИсходногоВарианта", НастройкиОтчета.ИмяИсходногоВарианта); - Разрезы.Вставить("Внешний", Число(НастройкиОтчета.Внешний)); - Разрезы.Вставить("Пользовательский", Число(НастройкиОтчета.Пользовательский)); - Разрезы.Вставить("Расшифровка", Число(РежимРасшифровки)); - Разрезы.Вставить("Модифицирован", Число(ВариантМодифицирован)); - - Если НастройкиОтчета.Свойство("СтандартныеПериоды") Тогда - Для Каждого ИдентификаторКД Из НастройкиОтчета.СтандартныеПериоды Цикл - ПользовательскаяНастройкаКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Значение = ПользовательскаяНастройкаКД.ПравоеЗначение; - ИначеЕсли ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - Значение = ПользовательскаяНастройкаКД.Значение; - Иначе - Продолжить; - КонецЕсли; - Если ПользовательскаяНастройкаКД.Использование И ТипЗнч(Значение) = Тип("СтандартныйПериод") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Разрезы, ОтчетыСервер.АнализПериода(Значение), Истина); - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ПараметрыФормированияОтчета.Вставить("ИмяКлючевойОперации", НастройкиОтчета.КлючЗамеров + ".Формирование"); - ПараметрыФормированияОтчета.Вставить("КомментарийКлючевойОперации", Разрезы); - КонецЕсли; - - Если Непосредственно Тогда - Если НастройкиОтчета.СхемаМодифицирована Тогда - ПараметрыФормированияОтчета.Вставить("АдресСхемы", НастройкиОтчета.АдресСхемы); - КонецЕсли; - ПараметрыФормированияОтчета.Вставить("Объект", РеквизитФормыВЗначение("Отчет")); - ПараметрыФормированияОтчета.Вставить("ПолноеИмя", НастройкиОтчета.ПолноеИмя); - Иначе - Если НастройкиОтчета.СхемаМодифицирована Тогда - ПараметрыФормированияОтчета.Вставить("СхемаКД", ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы)); - КонецЕсли; - КонецЕсли; - - ПараметрыЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - ПараметрыЗапуска.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполнение отчета: %1'"), - ИмяОтчета); - ПараметрыЗапуска.ОжидатьЗавершение = Ложь; - ПараметрыЗапуска.ЗапуститьНеВФоне = Непосредственно; - РезультатФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне( - "ВариантыОтчетов.СформироватьОтчетВФоне", - ПараметрыФормированияОтчета, - ПараметрыЗапуска); - - Если РезультатФоновогоЗадания.Статус = "Ошибка" Тогда - ПоказатьОшибкиФормирования(РезультатФоновогоЗадания.КраткоеПредставлениеОшибки); - Возврат Ложь; - КонецЕсли; - - ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; - ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресРезультата; - - Если РезультатФоновогоЗадания.Статус = "Выполнено" Тогда - ФоновоеЗаданиеЗагрузитьРезультат(); - ЗаданиеЗапущено = Ложь; - Иначе - ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; - ОтображениеСостояния.Видимость = Истина; - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; - ОтображениеСостояния.Картинка = БиблиотекаКартинок.ДлительнаяОперация48; - ОтображениеСостояния.Текст = НСтр("ru = 'Отчет формируется...'"); - - ЗаданиеЗапущено = Истина; - КонецЕсли; - - Возврат ЗаданиеЗапущено; -КонецФункции - -&НаСервере -Функция ФоновоеЗаданиеПроверитьНаСервере() - Задание = НайтиЗаданиеСлужебный(ФоновоеЗаданиеИдентификатор); - Если Не Задание.Выполняется Тогда - Если Задание.Успех Тогда - ФоновоеЗаданиеЗагрузитьРезультат(); - Иначе - ПоказатьОшибкиФормирования(Задание.Ошибка); - КонецЕсли; - КонецЕсли; - Задание.Удалить("Ошибка"); - Возврат Задание; -КонецФункции - -&НаСервере -Функция НайтиЗаданиеСлужебный(Знач Идентификатор) - // Считывает состояние фонового задания по переданному идентификатору. - // - // Параметры: - // Идентификатор - УникальныйИдентификатор - Идентификатор фонового задания. - // - // Возвращаемое значение: - // Неопределено - Задание не найдено. - // Структура - Сведения о задании. - // * Выполняется - Булево - Истина когда фоновое задание еще выполняется. - // * Успешно - Булево - Истина когда сеанс фонового задания завершился без ошибок. - // * Ошибка - Строка, ИнформацияОбОшибке, Неопределено - Описание ошибки. - // - Результат = Новый Структура("Выполняется, Успех, Ошибка", Ложь, Ложь, Неопределено); - Если Идентификатор = Неопределено Тогда - Возврат Результат; - КонецЕсли; - Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); - Если Задание = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда - Результат.Выполняется = Истина; - Иначе - Результат.Выполняется = Ложь; - Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда - Результат.Успех = Истина; - Иначе - Результат.Успех = Ложь; - Результат.Ошибка = Задание.ИнформацияОбОшибке; - КонецЕсли; - КонецЕсли; - - Возврат Результат; -КонецФункции - -&НаСервереБезКонтекста -Процедура ФоновоеЗаданиеОтменить(ФоновоеЗаданиеИдентификатор) - ДлительныеОперации.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); -КонецПроцедуры - &НаСервере Процедура ЗагрузитьВариант(КлючВарианта) Если Не РежимРасшифровки Тогда @@ -1401,343 +1407,218 @@ ВариантМодифицирован = Ложь; ПользовательскиеНастройкиМодифицированы = Ложь; НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек = Истина; - // Загрузка нового варианта. + УстановитьТекущийВариант(КлючВарианта); - // Переключение состояния. + ОтобразитьСостояниеОтчета(НСтр("ru = 'Выбран другой вариант отчета. Нажмите ""Сформировать"" для получения отчета.'"), + БиблиотекаКартинок.Информация32); +КонецПроцедуры + +&НаСервере +Процедура ОтобразитьСостояниеОтчета(Знач ТекстСостояния = "", Знач КартинкаСостояния = Неопределено) + + ОтображатьСостояние = Не ПустаяСтрока(ТекстСостояния); + Если КартинкаСостояния = Неопределено Или Не ОтображатьСостояние Тогда + КартинкаСостояния = Новый Картинка; + КонецЕсли; + ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; - ОтображениеСостояния.Видимость = Истина; - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; - ОтображениеСостояния.Картинка = БиблиотекаКартинок.Информация32; - ОтображениеСостояния.Текст = НСтр("ru = 'Выбран другой вариант отчета. Нажмите ""Сформировать"" для получения отчета.'"); + ОтображениеСостояния.Видимость = ОтображатьСостояние; + ОтображениеСостояния.ДополнительныйРежимОтображения = + ?(ОтображатьСостояние, ДополнительныйРежимОтображения.Неактуальность, ДополнительныйРежимОтображения.НеИспользовать); + ОтображениеСостояния.Картинка = КартинкаСостояния; + ОтображениеСостояния.Текст = ТекстСостояния; + + Элементы.ОтчетТабличныйДокумент.ТолькоПросмотр = ОтображатьСостояние + Или Элементы.ОтчетТабличныйДокумент.Вывод = ИспользованиеВывода.Запретить; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Сервер &НаСервере -Функция БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента) - ПараметрыЗаполнения = Новый Структура; - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыЗаполнения, ПараметрыКлиента, Истина); - Если Не ПараметрыЗаполнения.Свойство("ИмяСобытия") Тогда - ПараметрыЗаполнения.Вставить("ИмяСобытия", ""); - КонецЕсли; - Если Не ПараметрыЗаполнения.Свойство("ВариантМодифицирован") Тогда - ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь); - КонецЕсли; - Если Не ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда - ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); - КонецЕсли; - Если Не ПараметрыЗаполнения.Свойство("Результат") Тогда - ПараметрыЗаполнения.Вставить("Результат", Новый Структура); +Процедура ОпределитьПоведениеВМобильномКлиенте() + Если Не ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Возврат; КонецЕсли; - ПараметрыЗаполнения.Вставить("ОтчетОбъектИлиПолноеИмя", НастройкиОтчета.ПолноеИмя); - Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек - Или НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек - Или НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда - ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя = РеквизитФормыВЗначение("Отчет"); - КонецЕсли; + Элементы.КомандыИПоказатели.Заголовок = НСтр("ru = 'показатели'"); + Элементы.ГруппаНастройкиОтчета.Видимость = Ложь; + Элементы.ГруппаРаботаВТаблице.Видимость = Ложь; + Элементы.ГруппаВывод.Видимость = Ложь; - Возврат ПараметрыЗаполнения; -КонецФункции + Элементы.ГруппаПоказатель.РастягиватьПоГоризонтали = Неопределено; + Элементы.Показатель.Ширина = 0; +КонецПроцедуры &НаСервере -Процедура БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения) +Процедура ОбновитьЭлементыФормыНастроекНаСервере(ПараметрыОбновления = Неопределено) + ЗагрузитьНастройкиВКомпоновщик(ПараметрыОбновления); - НовыеНастройкиКД = Неопределено; - НовыеПользовательскиеНастройкиКД = Неопределено; - Если ПараметрыЗаполнения.Свойство("КомпоновщикНастроекКД") Тогда - НовыеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки; - НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки; - Иначе - Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда - НовыеНастройкиКД = ПараметрыЗаполнения.НастройкиКД; - КонецЕсли; - Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда - НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.ПользовательскиеНастройкиКД; - КонецЕсли; - КонецЕсли; + ОтчетыСервер.ОбновитьЭлементыФормыНастроек(ЭтотОбъект, Элементы.КомпоновщикНастроекПользовательскиеНастройки); - Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда - НовыеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеНастройкиXML"); - Если ТипЗнч(НовыеНастройкиXML) = Тип("Строка") Тогда - Попытка - НовыеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеНастройкиXML); - Исключение - НовыеНастройкиКД = Неопределено; - КонецПопытки; - НастройкиОтчета.НовыеНастройкиXML = Неопределено; - КонецЕсли; + Если ПараметрыОбновления.ИмяСобытия <> "ПослеФормирования" Тогда + Переформировать = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОбновления, "Переформировать", Ложь); - НовыеПользовательскиеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеПользовательскиеНастройкиXML"); - Если ТипЗнч(НовыеПользовательскиеНастройкиXML) = Тип("Строка") Тогда - Попытка - НовыеПользовательскиеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеПользовательскиеНастройкиXML); - Исключение - НовыеПользовательскиеНастройкиКД = Неопределено; - КонецПопытки; - НастройкиОтчета.НовыеПользовательскиеНастройкиXML = Неопределено; + Если Переформировать Тогда + ОтобразитьСостояниеОтчета(НСтр("ru = 'Отчет формируется...'"), БиблиотекаКартинок.ДлительнаяОперация48); + + ИначеЕсли ПараметрыОбновления.ВариантМодифицирован + Или ПараметрыОбновления.ПользовательскиеНастройкиМодифицированы Тогда + + ОтобразитьСостояниеОтчета(НСтр("ru = 'Изменились настройки. Нажмите ""Сформировать"" для получения отчета.'")); КонецЕсли; КонецЕсли; - СброситьНастройкиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "СброситьНастройкиВарианта", Ложь); + // В безопасном режиме отчеты нельзя сохранить при помощи стандартного диалога, + // возникающего перед закрытием, поскольку не включается привилегированный режим при доступе к планам обмена. + Если НастройкиОтчета.Безопасный + И Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ВариантМодифицирован = Ложь; + КонецЕсли; + + // Также стандартный диалог не показывается если пользователю запрещено изменять варианты этого отчета. + Если Не НастройкиОтчета.РазрешеноИзменятьВарианты Тогда + ВариантМодифицирован = Ложь; + КонецЕсли; + + УстановитьВидимостьДоступность(); +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьНастройкиВКомпоновщик(ПараметрыЗагрузки) + ПроверитьПараметрыЗагрузки(ПараметрыЗагрузки); + + ДоступныеНастройки = ОтчетыСервер.ДоступныеНастройки(ПараметрыЗагрузки, НастройкиОтчета); + + СброситьНастройкиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ПараметрыЗагрузки, "СброситьНастройкиВарианта", Ложь); Если СброситьНастройкиВарианта Тогда ЗагрузитьВариант(КлючТекущегоВарианта); КонецЕсли; - СброситьПользовательскиеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "СброситьПользовательскиеНастройки", Ложь); + СброситьПользовательскиеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ПараметрыЗагрузки, "СброситьПользовательскиеНастройки", Ложь); Если СброситьПользовательскиеНастройки Тогда - НовыеПользовательскиеНастройкиКД = Новый ПользовательскиеНастройкиКомпоновкиДанных; + ДоступныеНастройки.ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; КонецЕсли; - Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда - ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик( ЭтотОбъект, НастройкиОтчета.КлючСхемы, КлючТекущегоВарианта, - НовыеНастройкиКД, - НовыеПользовательскиеНастройкиКД); + ДоступныеНастройки.Настройки, + ДоступныеНастройки.ПользовательскиеНастройки); КонецЕсли; - НастройкиЗагружены = ОтчетыКлиентСервер.ЗагрузитьНастройки(Отчет.КомпоновщикНастроек, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); - Если НастройкиЗагружены Тогда - // Установка фиксированных отборов выполняется через компоновщик, т.к. в нем наиболее полная коллекция настроек. - // В ПередЗагрузкой в параметрах могут отсутствовать те параметры, настройки которые не переопределялись. - Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда - ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, Отчет.КомпоновщикНастроек.Настройки, НастройкиОтчета); - КонецЕсли; - Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); - Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); - // Подготовка к предварительной инициализации компоновщика (используется при расшифровке). - Если НастройкиОтчета.СхемаМодифицирована Тогда - Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("АдресСхемы", НастройкиОтчета.АдресСхемы); - КонецЕсли; + НастройкиЗагружены = ОтчетыКлиентСервер.ЗагрузитьНастройки( + Отчет.КомпоновщикНастроек, + ДоступныеНастройки.Настройки, + ДоступныеНастройки.ПользовательскиеНастройки, + ДоступныеНастройки.ФиксированныеНастройки); + + // Установка фиксированных отборов выполняется через компоновщик, т.к. в нем наиболее полная коллекция настроек. + // В ПередЗагрузкой в параметрах могут отсутствовать те параметры, настройки которые не переопределялись. + Если НастройкиЗагружены И ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, Отчет.КомпоновщикНастроек.Настройки, НастройкиОтчета); КонецЕсли; - Если ПараметрыЗаполнения.Свойство("ФормаНастроекРасширенныйРежим") Тогда - НастройкиОтчета.Вставить("ФормаНастроекРасширенныйРежим", ПараметрыЗаполнения.ФормаНастроекРасширенныйРежим); - КонецЕсли; - Если ПараметрыЗаполнения.Свойство("ФормаНастроекИмяСтраницы") Тогда - НастройкиОтчета.Вставить("ФормаНастроекИмяСтраницы", ПараметрыЗаполнения.ФормаНастроекИмяСтраницы); + Если ФормаПараметры.Свойство("ФиксированныеНастройки") Тогда + ФормаПараметры.ФиксированныеНастройки = Отчет.КомпоновщикНастроек.ФиксированныеНастройки; КонецЕсли; - УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "УсловияОтборов"); - Если УсловияОтборов <> Неопределено Тогда - УзелКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; - Для Каждого КлючИЗначение Из УсловияОтборов Цикл - ПользовательскаяНастройкаКД = УзелКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); - ПользовательскаяНастройкаКД.ВидСравнения = КлючИЗначение.Значение; - КонецЦикла; + ОтчетыСервер.УстановитьДоступныеЗначения(ОтчетОбъект, ЭтотОбъект); + ОтчетыСервер.ИнициализироватьПредопределенныеПараметрыВывода(НастройкиОтчета, Отчет.КомпоновщикНастроек.Настройки); + + ДополнительныеСвойства = Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства; + ДополнительныеСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); + ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); + + // Подготовка к предварительной инициализации компоновщика (используется при расшифровке). + Если НастройкиОтчета.СхемаМодифицирована Тогда + ДополнительныеСвойства.Вставить("АдресСхемы", НастройкиОтчета.АдресСхемы); КонецЕсли; - Если ПараметрыЗаполнения.ВариантМодифицирован Тогда + Если ПараметрыЗагрузки.Свойство("ФормаНастроекРасширенныйРежим") Тогда + НастройкиОтчета.Вставить("ФормаНастроекРасширенныйРежим", ПараметрыЗагрузки.ФормаНастроекРасширенныйРежим); + КонецЕсли; + + Если ПараметрыЗагрузки.Свойство("ФормаНастроекИмяСтраницы") Тогда + НастройкиОтчета.Вставить("ФормаНастроекИмяСтраницы", ПараметрыЗагрузки.ФормаНастроекИмяСтраницы); + КонецЕсли; + + УстановитьУсловияОтборов(ПараметрыЗагрузки); + + Если ПараметрыЗагрузки.ВариантМодифицирован Тогда ВариантМодифицирован = Истина; КонецЕсли; - Если ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда + Если ПараметрыЗагрузки.ПользовательскиеНастройкиМодифицированы Тогда ПользовательскиеНастройкиМодифицированы = Истина; КонецЕсли; Если НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек Тогда НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек = Ложь; Элементы.ФормироватьСразу.Пометка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, + ДополнительныеСвойства, "ФормироватьСразу", НастройкиОтчета.ФормироватьСразу); КонецЕсли; КонецПроцедуры &НаСервере -Процедура БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения) - // Удаление элементов. - УдаляемыеЭлементы = Новый Массив; - ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.БыстрыеНастройки.ПодчиненныеЭлементы); - Для Каждого Элемент Из УдаляемыеЭлементы Цикл - Элементы.Удалить(Элемент); - КонецЦикла; - - // Удаление команд - УдаляемыеКоманды = Новый Массив; - Для Каждого Команда Из Команды Цикл - Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда - УдаляемыеКоманды.Добавить(Команда); - КонецЕсли; - КонецЦикла; - Для Каждого Команда Из УдаляемыеКоманды Цикл - Команды.Удалить(Команда); - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ДобавитьПодчиненныеЭлементы(Куда, Откуда) - Для Каждого ПодчиненныйЭлемент Из Откуда Цикл - Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") - Или ТипЗнч(ПодчиненныйЭлемент) = Тип("ТаблицаФормы") Тогда - ДобавитьПодчиненныеЭлементы(Куда, ПодчиненныйЭлемент.ПодчиненныеЭлементы); - КонецЕсли; - Куда.Добавить(ПодчиненныйЭлемент); - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация) - // Кэши для быстрого поиска с клиента. - СоответствиеПользовательскихНастроек = Новый Соответствие; - СоответствиеИменОбъектовМетаданных = Информация.СоответствиеИменОбъектовМетаданных; - СоответствиеНастроекВарианта = Новый Соответствие; - - // Удаление реквизитов - ПараметрыЗаполнения.Вставить("Реквизиты", Новый Структура); - ПараметрыЗаполнения.Реквизиты.Вставить("Добавляемые", Новый Массив); - ПараметрыЗаполнения.Реквизиты.Вставить("Удаляемые", Новый Массив); - ПараметрыЗаполнения.Реквизиты.Вставить("Существующие", Новый Соответствие); - ВсеРеквизиты = ПолучитьРеквизиты(); - Для Каждого Реквизит Из ВсеРеквизиты Цикл - ПолноеИмяРеквизита = Реквизит.Имя + ?(ПустаяСтрока(Реквизит.Путь), "", "." + Реквизит.Путь); - Если ПостоянныеРеквизиты.НайтиПоЗначению(ПолноеИмяРеквизита) = Неопределено Тогда - ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(ПолноеИмяРеквизита, Реквизит.ТипЗначения); - КонецЕсли; - КонецЦикла; - - // Локальные переменные для установки значений и свойств после создания реквизитов. - ДобавленныеПоляВвода = Новый Структура; - ДобавленныеСтандартныеПериоды = Новый Массив; - - // Структура связей. - Связи = Информация.Связи; - - ИменаОсновныхРеквизитовФормы = Новый Соответствие; - ИменаЭлементовДляУстановкиСвязей = Новый Соответствие; - ИменаФлажковИспользование = Новый Соответствие; - НастройкиСВидомСравненияРавно = Новый Соответствие; - - КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; - ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; - НастройкиКД = КомпоновщикНастроекКД.ПолучитьНастройки(); - - ДополнительныеНастройкиЭлементов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПользовательскиеНастройкиКД.ДополнительныеСвойства, "ЭлементыФормы"); - Если ДополнительныеНастройкиЭлементов = Неопределено Тогда - ДополнительныеНастройкиЭлементов = Новый Соответствие; +Процедура ПроверитьПараметрыЗагрузки(ПараметрыЗагрузки) + Если ПараметрыЗагрузки = Неопределено Тогда + ПараметрыЗагрузки = Новый Структура; КонецЕсли; - Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; + Если Не ПараметрыЗагрузки.Свойство("ИмяСобытия") Тогда + ПараметрыЗагрузки.Вставить("ИмяСобытия", ""); + КонецЕсли; - ГруппыВывода = Новый Структура; - ГруппыВывода.Вставить("Быстрые", Новый Структура("Порядок, Размер", Новый Массив, 0)); + Если Не ПараметрыЗагрузки.Свойство("ВариантМодифицирован") Тогда + ПараметрыЗагрузки.Вставить("ВариантМодифицирован", ВариантМодифицирован); + КонецЕсли; - ЕстьЗагрузкаДанныхИзФайла = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла"); + Если Не ПараметрыЗагрузки.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда + ПараметрыЗагрузки.Вставить("ПользовательскиеНастройкиМодифицированы", ПользовательскиеНастройкиМодифицированы); + КонецЕсли; - ВыводимыеНастройки = Информация.ПользовательскиеНастройки.Скопировать(Новый Структура("ВыводРазрешен, Быстрая", Истина, Истина)); - ВыводимыеНастройки.Сортировать("ИндексВКоллекции Возр"); + Если Не ПараметрыЗагрузки.Свойство("Результат") Тогда + ПараметрыЗагрузки.Вставить("Результат", Новый Структура); + КонецЕсли; - Прочее = Новый Структура; - Прочее.Вставить("Связи", Связи); - Прочее.Вставить("ОтчетОбъект", Неопределено); - Прочее.Вставить("ПараметрыЗаполнения", ПараметрыЗаполнения); - Прочее.Вставить("ПутьККомпоновщику", "Отчет.КомпоновщикНастроек"); - Прочее.Вставить("ЕстьЗагрузкаДанныхИзФайла", ЕстьЗагрузкаДанныхИзФайла); - Прочее.Вставить("ДополнительныеНастройкиЭлементов", ДополнительныеНастройкиЭлементов); - Прочее.Вставить("ИменаОсновныхРеквизитовФормы", ИменаОсновныхРеквизитовФормы); - Прочее.Вставить("ИменаЭлементовДляУстановкиСвязей", ИменаЭлементовДляУстановкиСвязей); - Прочее.Вставить("СоответствиеИменОбъектовМетаданных", СоответствиеИменОбъектовМетаданных); - Прочее.Вставить("ДобавленныеПоляВвода", ДобавленныеПоляВвода); - Прочее.Вставить("ДобавленныеСтандартныеПериоды", ДобавленныеСтандартныеПериоды); - Прочее.Вставить("ДобавленныеСпискиЗначений", Неопределено); - Прочее.Вставить("ЕстьОтборыСУсловиями", Ложь); - - ГруппаВывода = ГруппыВывода.Быстрые; - - Для Каждого СвойстваНастройки Из ВыводимыеНастройки Цикл - СоответствиеПользовательскихНастроек.Вставить(СвойстваНастройки.ИдентификаторЭлемента, СвойстваНастройки.ИдентификаторКД); - - Если СвойстваНастройки.НастройкаВарианта <> Неопределено Тогда - ПоискНастройкиВарианта = Новый Структура; - ПоискНастройкиВарианта.Вставить("ИдентификаторУзлаКД", СвойстваНастройки.СтрокаДерева.ИдентификаторКД); - ПоискНастройкиВарианта.Вставить("ИмяКоллекции", СвойстваНастройки.НастройкаВарианта.ИмяКоллекции); - ПоискНастройкиВарианта.Вставить("ИдентификаторЭлементаКД", СвойстваНастройки.НастройкаВарианта.ИдентификаторКД); - СоответствиеНастроекВарианта.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ПоискНастройкиВарианта); - КонецЕсли; - - ОтчетыСервер.ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппаВывода, Прочее); - КонецЦикла; - - Элементы.ИзменитьУсловияОтборов.Видимость = Прочее.ЕстьОтборыСУсловиями; - - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппаВывода, Элементы.БыстрыеНастройки, 2, Ложь); - - // Удаление старых и добавление новых реквизитов. - Для Каждого КлючИЗначение Из ПараметрыЗаполнения.Реквизиты.Существующие Цикл - ПараметрыЗаполнения.Реквизиты.Удаляемые.Добавить(КлючИЗначение.Ключ); - КонецЦикла; - ИзменитьРеквизиты(ПараметрыЗаполнения.Реквизиты.Добавляемые, ПараметрыЗаполнения.Реквизиты.Удаляемые); - - // Поля ввода (установка значений и связей). - Для Каждого КлючИЗначение Из ДобавленныеПоляВвода Цикл - ИмяРеквизита = КлючИЗначение.Ключ; - ЭтотОбъект[ИмяРеквизита] = КлючИЗначение.Значение; - Элементы[ИмяРеквизита].ПутьКДанным = ИмяРеквизита; - КонецЦикла; - - // Стандартные периоды (установка значений и связей). - Для Каждого СвойстваНастройки Из ДобавленныеСтандартныеПериоды Цикл - Дополнительно = СвойстваНастройки.Дополнительно; - ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение; - Элементы[Дополнительно.ПериодНачалоИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаНачала"; - Элементы[Дополнительно.ПериодОкончаниеИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаОкончания"; - КонецЦикла; - - // Сохранение соответствий для быстрого поиска в данные формы. - БыстрыйПоискПользовательскихНастроек = Новый ФиксированноеСоответствие(СоответствиеПользовательскихНастроек); - БыстрыйПоискИменОбъектовМетаданных = Новый ФиксированноеСоответствие(СоответствиеИменОбъектовМетаданных); - БыстрыйПоискНастроекВарианта = Новый ФиксированноеСоответствие(СоответствиеНастроекВарианта); - - ПользовательскиеНастройкиКД.ДополнительныеСвойства.Вставить("ЭлементыФормы", ДополнительныеНастройкиЭлементов); + ПараметрыЗагрузки.Вставить("ОтчетОбъектИлиПолноеИмя", НастройкиОтчета.ПолноеИмя); КонецПроцедуры &НаСервере -Процедура ФоновоеЗаданиеЗагрузитьРезультат() - - РезультатФормирования = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); - - УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); - ФоновоеЗаданиеАдресХранилища = Неопределено; - ФоновоеЗаданиеИдентификатор = Неопределено; - - Успех = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатФормирования, "Успех"); - Если Успех <> Истина Тогда - ПоказатьОшибкиФормирования(РезультатФормирования.ТекстОшибки); +Процедура УстановитьУсловияОтборов(ПараметрыЗагрузки) + УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗагрузки, "УсловияОтборов"); + Если УсловияОтборов = Неопределено Тогда Возврат; КонецЕсли; - ДанныеЕщеОбновляются = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатФормирования, "ДанныеЕщеОбновляются", Ложь); - Если ДанныеЕщеОбновляются Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ВариантыОтчетов.СообщениеДанныеЕщеОбновляются()); - КонецЕсли; + Настройки = Отчет.КомпоновщикНастроек.Настройки; + ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; - ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; - ОтображениеСостояния.Видимость = Ложь; - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; - ОтображениеСостояния.Картинка = Новый Картинка; - ОтображениеСостояния.Текст = ""; - - ЗаполнитьЗначенияСвойств(НастройкиОтчета.Печать, ОтчетТабличныйДокумент); // Сохранение настроек печати. - ОтчетТабличныйДокумент = РезультатФормирования.ТабличныйДокумент; - ЗаполнитьЗначенияСвойств(ОтчетТабличныйДокумент, НастройкиОтчета.Печать); // Восстановление. - - ОтчетСформирован = Истина; - - Если ЗначениеЗаполнено(ОтчетДанныеРасшифровки) И ЭтоАдресВременногоХранилища(ОтчетДанныеРасшифровки) Тогда - УдалитьИзВременногоХранилища(ОтчетДанныеРасшифровки); - КонецЕсли; - ОтчетДанныеРасшифровки = ПоместитьВоВременноеХранилище(РезультатФормирования.Расшифровка, УникальныйИдентификатор); - - Если РезультатФормирования.ВариантМодифицирован - Или РезультатФормирования.ПользовательскиеНастройкиМодифицированы Тогда - РезультатФормирования.Вставить("ИмяСобытия", "ПослеФормирования"); - РезультатФормирования.Вставить("Непосредственно", Ложь); - БыстрыеНастройкиЗаполнить(РезультатФормирования); - КонецЕсли; + Для Каждого Условие Из УсловияОтборов Цикл + ЭлементПользовательскойНастройки = ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(Условие.Ключ); + ЭлементПользовательскойНастройки.ВидСравнения = Условие.Значение; + + Если ОтчетыКлиентСервер.ЭтоВидСравненияСписка(ЭлементПользовательскойНастройки.ВидСравнения) + И ТипЗнч(ЭлементПользовательскойНастройки.ПравоеЗначение) <> Тип("СписокЗначений") Тогда + + ЭлементПользовательскойНастройки.ПравоеЗначение = ОтчетыКлиентСервер.ЗначенияСписком( + ЭлементПользовательскойНастройки.ПравоеЗначение, Истина); + КонецЕсли; + + ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( + Настройки, ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,, ПользовательскиеНастройки); + + ЗаполнитьЗначенияСвойств(ЭлементНастройки, ЭлементПользовательскойНастройки, "ВидСравнения, ПравоеЗначение"); + КонецЦикла; КонецПроцедуры &НаСервере @@ -1753,81 +1634,12 @@ ПодробноеПредставлениеОшибки = ""; КонецЕсли; - ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; - ОтображениеСостояния.Видимость = Истина; - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; - ОтображениеСостояния.Картинка = Новый Картинка; - ОтображениеСостояния.Текст = ОписаниеОшибки; - + ОтобразитьСостояниеОтчета(ОписаниеОшибки); Если Не ПустаяСтрока(ПодробноеПредставлениеОшибки) Тогда ВариантыОтчетов.ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Предупреждение, ПодробноеПредставлениеОшибки, НастройкиОтчета.ВариантСсылка); КонецЕсли; КонецПроцедуры -&НаСервере -Процедура РекурсивныйАнализНастроекКД(Коллекция, Соответствие) - Если Коллекция = Неопределено Тогда - РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы, Соответствие); - РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, Соответствие); - РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы, Соответствие); - РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.ФиксированныеНастройки.ПараметрыДанных.Элементы, Соответствие); - Иначе - // Регистрация значений включенных отборов и параметров КД, не выведенных в быстрый доступ. - Для Каждого НастройкаВарианта Из Коллекция Цикл - // ЭлементОтбораКомпоновкиДанных, ГруппаЭлементовОтбораКомпоновкиДанных, - // ЗначениеПараметраКомпоновкиДанных, ЗначениеПараметраНастроекКомпоновкиДанных. - Если ТипЗнч(НастройкаВарианта) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда - Значение = НастройкаВарианта.Значение; - Если ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) Тогда - ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(НастройкаВарианта.Параметр)); - Соответствие.Вставить(ПолеКД, Значение); - КонецЕсли; - РекурсивныйАнализНастроекКД(НастройкаВарианта.ЗначенияВложенныхПараметров, Соответствие); - Продолжить; - КонецЕсли; - - Если НастройкаВарианта.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ - И ЗначениеЗаполнено(НастройкаВарианта.ИдентификаторПользовательскойНастройки) Тогда - Продолжить; - КонецЕсли; - Если НастройкаВарианта.Использование <> Истина Тогда - Продолжить; - КонецЕсли; - - Если ТипЗнч(НастройкаВарианта) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - РекурсивныйАнализНастроекКД(НастройкаВарианта.Элементы, Соответствие); - Продолжить; - КонецЕсли; - - Если ТипЗнч(НастройкаВарианта) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Значение = НастройкаВарианта.ПравоеЗначение; - Если ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) Тогда - ПолеКД = НастройкаВарианта.ЛевоеЗначение; - Соответствие.Вставить(ПолеКД, Значение); - КонецЕсли; - ИначеЕсли ТипЗнч(НастройкаВарианта) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда - Значение = НастройкаВарианта.ПравоеЗначение; - Если ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) Тогда - ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(НастройкаВарианта.Параметр)); - Соответствие.Вставить(ПолеКД, Значение); - КонецЕсли; - РекурсивныйАнализНастроекКД(НастройкаВарианта.ЗначенияВложенныхПараметров, Соответствие); - КонецЕсли; - - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) - Если ТипЗнч(Значение) = Тип("ПолеКомпоновкиДанных") Тогда - Возврат ЗначениеЗаполнено(Строка(Значение)); - Иначе - Возврат ЗначениеЗаполнено(Значение); - КонецЕсли; -КонецФункции - &НаСервере Процедура ЗаполнитьКомандыВыбораВариантов() ВариантыФормы = РеквизитФормыВЗначение("ДобавленныеВарианты"); @@ -1835,10 +1647,9 @@ АвторизованныйПользователь = Пользователи.АвторизованныйПользователь(); ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("Отчеты", ОтчетыКлиентСервер.ЗначениеВМассив(НастройкиОтчета.ОтчетСсылка)); - ПараметрыПоиска.Вставить("ПолучатьИтоговуюТаблицу", Истина); - РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); - ТаблицаВариантов = РезультатПоиска.ТаблицаЗначений; + ПараметрыПоиска.Вставить("Отчеты", ОтчетыСервер.ЗначениеВМассив(НастройкиОтчета.ОтчетСсылка)); + ПараметрыПоиска.Вставить("ТолькоЛичные", Истина); + ТаблицаВариантов = ВариантыОтчетов.ТаблицаВариантовОтчетов(ПараметрыПоиска); Если НастройкиОтчета.Внешний Тогда // Добавить предопределенные варианты внешнего отчета в таблицу вариантов. Для Каждого ЭлементСписка Из НастройкиОтчета.ПредопределенныеВарианты Цикл СтрокаТаблицы = ТаблицаВариантов.Добавить(); @@ -1849,9 +1660,7 @@ ТаблицаВариантов.Свернуть("Ссылка, КлючВарианта, Наименование, Автор, ТолькоДляАвтора"); ТаблицаВариантов.Сортировать("Наименование Возр, КлючВарианта Возр"); - Группа = Элементы.ВариантыОтчета; - КнопкиГруппы = Группа.ПодчиненныеЭлементы; - ПоследнийИндекс = ВариантыФормы.Количество() - 1; + ГраницаМеню = ВариантыФормы.Количество() - 1; Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл Если СтрокаТаблицы.ТолькоДляАвтора = Истина И СтрокаТаблицы.Автор <> АвторизованныйПользователь Тогда @@ -1861,105 +1670,76 @@ Если Найденные.Количество() = 1 Тогда ВариантФормы = Найденные[0]; ВариантФормы.Найден = Истина; + Кнопка = Элементы.Найти(ВариантФормы.ИмяКоманды); Кнопка.Видимость = Истина; Кнопка.Заголовок = СтрокаТаблицы.Наименование; - Элементы.Переместить(Кнопка, Группа); + Элементы.Переместить(Кнопка, Элементы.ГруппаВариантыОтчета); + + // Подменю Еще (Все действия). + КнопкаЕще = Элементы.Найти(ВариантФормы.ИмяКоманды + "Еще"); + КнопкаЕще.Видимость = Истина; + КнопкаЕще.Заголовок = СтрокаТаблицы.Наименование; + Элементы.Переместить(КнопкаЕще, Элементы.ГруппаВариантыОтчетаЕще); Иначе - ПоследнийИндекс = ПоследнийИндекс + 1; + ГраницаМеню = ГраницаМеню + 1; ВариантФормы = ВариантыФормы.Добавить(); ЗаполнитьЗначенияСвойств(ВариантФормы, СтрокаТаблицы); ВариантФормы.Найден = Истина; - ВариантФормы.ИмяКоманды = "ВыбратьВариант_" + Формат(ПоследнийИндекс, "ЧН=0; ЧГ="); + ВариантФормы.ИмяКоманды = "ВыбратьВариант_" + Формат(ГраницаМеню, "ЧН=0; ЧГ="); Команда = Команды.Добавить(ВариантФормы.ИмяКоманды); Команда.Действие = "Подключаемый_ЗагрузитьВариантОтчета"; - Кнопка = Элементы.Добавить(ВариантФормы.ИмяКоманды, Тип("КнопкаФормы"), Группа); + Кнопка = Элементы.Добавить(ВариантФормы.ИмяКоманды, Тип("КнопкаФормы"), Элементы.ГруппаВариантыОтчета); Кнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; Кнопка.ИмяКоманды = ВариантФормы.ИмяКоманды; Кнопка.Заголовок = СтрокаТаблицы.Наименование; + // Подменю Еще (Все действия). + КнопкаЕще = Элементы.Добавить(ВариантФормы.ИмяКоманды + "Еще", Тип("КнопкаФормы"), Элементы.ГруппаВариантыОтчетаЕще); + КнопкаЕще.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; + КнопкаЕще.ИмяКоманды = ВариантФормы.ИмяКоманды; + КнопкаЕще.Заголовок = СтрокаТаблицы.Наименование; + ПостоянныеКоманды.Добавить(ВариантФормы.ИмяКоманды); КонецЕсли; + Кнопка.Пометка = (КлючТекущегоВарианта = СтрокаТаблицы.КлючВарианта); + Кнопка.ТолькоВоВсехДействиях = Ложь; + + КнопкаЕще.Пометка = (КлючТекущегоВарианта = СтрокаТаблицы.КлючВарианта); + КнопкаЕще.ТолькоВоВсехДействиях = Истина; КонецЦикла; Найденные = ВариантыФормы.НайтиСтроки(Новый Структура("Найден", Ложь)); Для Каждого ВариантФормы Из Найденные Цикл Кнопка = Элементы.Найти(ВариантФормы.ИмяКоманды); Кнопка.Видимость = Ложь; + + // Подменю Еще (Все действия). + КнопкаЕще = Элементы.Найти(ВариантФормы.ИмяКоманды + "Еще"); + КнопкаЕще.Видимость = Ложь; КонецЦикла; ВариантыФормы.Колонки.Удалить("Найден"); ЗначениеВРеквизитФормы(ВариантыФормы, "ДобавленныеВарианты"); КонецПроцедуры -&НаСервере -Процедура ПослеИзмененияКлючевыхСостояний(ПараметрыЗаполнения) - Если ПараметрыЗаполнения.ИмяСобытия <> "ПослеФормирования" Тогда - Переформировать = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "Переформировать"); - Если Переформировать = Истина Тогда - ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; - ОтображениеСостояния.Видимость = Истина; - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; - ОтображениеСостояния.Картинка = БиблиотекаКартинок.ДлительнаяОперация48; - ОтображениеСостояния.Текст = НСтр("ru = 'Отчет формируется...'"); - ИначеЕсли ПараметрыЗаполнения.ВариантМодифицирован - Или ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда - ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; - ОтображениеСостояния.Видимость = Истина; - ОтображениеСостояния.Текст = НСтр("ru = 'Изменились настройки. Нажмите ""Сформировать"" для получения отчета.'"); - Если Переформировать = Неопределено Тогда - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; - Иначе - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; - КонецЕсли; - КонецЕсли; - КонецЕсли; - // В безопасном режиме отчеты нельзя сохранить при помощи стандартного диалога, - // возникающего перед закрытием, поскольку не включается привилегированный режим при доступе к планам обмена. - Если НастройкиОтчета.Безопасный - И Не Пользователи.ЭтоПолноправныйПользователь() Тогда - ВариантМодифицирован = Ложь; - КонецЕсли; - // Также стандартный диалог не показывается если пользователю запрещено изменять варианты этого отчета. - Если Не НастройкиОтчета.РазрешеноИзменятьВарианты Тогда - ВариантМодифицирован = Ложь; - КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура ЗарегистрироватьОтключаемыеСвязи(Информация) - ОтключаемыеСвязи.Очистить(); - Для Каждого ОписаниеСвязи Из Информация.ОтключаемыеСвязи Цикл - Связь = ОтключаемыеСвязи.Добавить(); - ЗаполнитьЗначенияСвойств(Связь, ОписаниеСвязи); - Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторЭлемента; - Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторЭлемента; - - Если ОписаниеСвязи.Свойство("ВедущийТип") - И ТипЗнч(ОписаниеСвязи.ВедущийТип) = Тип("Тип") Тогда - Связь.ВедущийТип = Новый ОписаниеТипов( - ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеСвязи.ВедущийТип)); - КонецЕсли; - - Если ОписаниеСвязи.Свойство("ПодчиненныйТип") - И ТипЗнч(ОписаниеСвязи.ПодчиненныйТип) = Тип("Тип") Тогда - Связь.ПодчиненныйТип = Новый ОписаниеТипов( - ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеСвязи.ПодчиненныйТип)); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - &НаСервере Процедура ОбновитьИнформациюОВариантеОтчета() - Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); - Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); + ДополнительныеСвойства = Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства; + ДополнительныеСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); + ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + НастройкиОтчета.Вставить("ВариантСсылка", Неопределено); + НастройкиОтчета.Вставить("КлючЗамеров", Неопределено); + НастройкиОтчета.Вставить("ПредопределенныйСсылка", Неопределено); + НастройкиОтчета.Вставить("ИмяИсходногоВарианта", Неопределено); + НастройкиОтчета.Вставить("Пользовательский", Неопределено); + + Запрос = Новый Запрос(" + |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ВариантыОтчетов.Ссылка КАК ВариантСсылка, | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров, | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйСсылка, @@ -1974,25 +1754,27 @@ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ВариантыОтчетов.Отчет = &Отчет - | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта + |"); Запрос.УстановитьПараметр("Отчет", НастройкиОтчета.ОтчетСсылка); Запрос.УстановитьПараметр("КлючВарианта", КлючТекущегоВарианта); Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - НастройкиОтчета.Вставить("ВариантСсылка", Выборка.ВариантСсылка); - НастройкиОтчета.Вставить("КлючЗамеров", Выборка.КлючЗамеров); - НастройкиОтчета.Вставить("ПредопределенныйСсылка", Выборка.ПредопределенныйСсылка); - НастройкиОтчета.Вставить("ИмяИсходногоВарианта", ?(Выборка.Пользовательский, Выборка.ИмяИсходногоВарианта, КлючТекущегоВарианта)); - НастройкиОтчета.Вставить("Пользовательский", Выборка.Пользовательский); - Иначе - НастройкиОтчета.Вставить("ВариантСсылка", Неопределено); - НастройкиОтчета.Вставить("КлючЗамеров", Неопределено); - НастройкиОтчета.Вставить("ПредопределенныйСсылка", Неопределено); - НастройкиОтчета.Вставить("ИмяИсходногоВарианта", Неопределено); - НастройкиОтчета.Вставить("Пользовательский", Неопределено); + Если Не Выборка.Следующий() Тогда + Возврат; КонецЕсли; + + КлючЗамеров = Выборка.КлючЗамеров; + Если Не ЗначениеЗаполнено(КлючЗамеров) Тогда + КлючЗамеров = ОбщегоНазначения.СократитьСтрокуКонтрольнойСуммой( + НастройкиОтчета.ПолноеИмя + "." + КлючТекущегоВарианта, 135); + КонецЕсли; + + НастройкиОтчета.ВариантСсылка = Выборка.ВариантСсылка; + НастройкиОтчета.КлючЗамеров = КлючЗамеров; + НастройкиОтчета.ПредопределенныйСсылка = Выборка.ПредопределенныйСсылка; + НастройкиОтчета.ИмяИсходногоВарианта = ?(Выборка.Пользовательский, Выборка.ИмяИсходногоВарианта, КлючТекущегоВарианта); + НастройкиОтчета.Пользовательский = Выборка.Пользовательский; КонецПроцедуры &НаСервере diff --git a/SSL/src/CommonForms/ФормаПоиска/Form.form b/SSL/src/CommonForms/ФормаПоиска/Form.form index ff08060e8..437d34379 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Form.form +++ b/SSL/src/CommonForms/ФормаПоиска/Form.form @@ -1,5 +1,9 @@ + + <key>ru</key> + <value>Поиск документов, файлов или отчетов</value> + СостояниеПоиска 75 @@ -584,7 +588,6 @@ DontBlock true - true true Vertical true diff --git a/SSL/src/CommonForms/ФормаПоиска/Module.bsl b/SSL/src/CommonForms/ФормаПоиска/Module.bsl index 91c209f18..b822fcc6e 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Module.bsl +++ b/SSL/src/CommonForms/ФормаПоиска/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,7 +15,7 @@ Возврат; КонецЕсли; - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда Возврат; КонецЕсли; @@ -59,7 +66,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Если ПользователиКлиент.ЭтоСеансВнешнегоПользователя() Тогда Отказ = Истина; ПоказатьПредупреждение(, НСтр("ru = 'Недостаточно прав для выполнения поиска'")); КонецЕсли; @@ -114,7 +121,7 @@ КонецЕсли; Оповещение = Новый ОписаниеОповещения("ПослеОткрытияНавигационнойСсылки", ЭтотОбъект); - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СсылкаHTML.href, Оповещение); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СсылкаHTML.href, Оповещение); КонецПроцедуры @@ -179,7 +186,7 @@ КонецЕсли; Если ОбщегоНазначенияСлужебныйКлиент.ЭтоНавигационнаяСсылка(СтрокаПоиска) Тогда - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СтрокаПоиска); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаПоиска); СтрокаПоиска = ""; Возврат; КонецЕсли; diff --git a/SSL/src/CommonForms/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonForms/ЭлектроннаяПодпись/Module.bsl index 2be281337..4ff0a1347 100644 --- a/SSL/src/CommonForms/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonForms/ЭлектроннаяПодпись/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl new file mode 100644 index 000000000..14c3a5200 --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластера/Module.bsl @@ -0,0 +1,1916 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +#Область КонструкторыПараметровПрограммногоИнтерфейса + +// Конструктор структуры, описывающей параметры подключения к администрируемому кластеру серверов. +// +// Возвращаемое значение: +// Структура - где: +// * ТипПодключения - Строка - возможные значения: +// "COM" - при подключении к агенту сервера с использованием COM-объекта V8*.ComConnector; +// "RAS" - при подключении к серверу администрирования (ras) с использованием консольного +// клиента сервера администрирования (rac); +// * АдресАгентаСервера - Строка - сетевой адрес агента сервера (только при ТипПодключения = "COM"); +// * ПортАгентаСервера - Число - сетевой порт агента сервера (только при ТипПодключения = "COM"), +// типичное значение 1540; +// * АдресСервераАдминистрирования - Строка - сетевой адрес сервера администрирования ras (только. +// При ТипПодключения = "RAS"); +// * ПортСервераАдминистрирования - Число - сетевой порт сервера администрирования ras (только при. +// ТипПодключения = "RAS"), типичное значение 1545; +// * ПортКластера - Число - сетевой порт менеджера администрируемого кластера, типичное значение 1541; +// * ИмяАдминистратораКластера - Строка - имя учетной записи администратора кластера (если для кластера +// не задан список администраторов - используется пустая строка); +// * ПарольАдминистратораКластера - Строка - пароль учетной записи администратора кластера (если +// для кластера не задан список администраторов или для учетной записи не установлен пароль - +// используется пустая строка). +// +Функция ПараметрыАдминистрированияКластера() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("ТипПодключения", "COM"); // "COM" или "RAS" + + // Только для "COM" + Результат.Вставить("АдресАгентаСервера", ""); + Результат.Вставить("ПортАгентаСервера", 1540); + + // Только для "RAS" + Результат.Вставить("АдресСервераАдминистрирования", ""); + Результат.Вставить("ПортСервераАдминистрирования", 1545); + + Результат.Вставить("ПортКластера", 1541); + Результат.Вставить("ИмяАдминистратораКластера", ""); + Результат.Вставить("ПарольАдминистратораКластера", ""); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей параметры подключения к администрируемой информационной базе кластера. +// +// Возвращаемое значение: +// Структура - где: +// * ИмяВКластере - Строка - имя администрируемой информационной базы в кластере серверов, +// * ИмяАдминистратораИнформационнойБазы - Строка - имя пользователя информационной базы с правами +// администратора (если для информационной базы не задан список пользователей ИБ - используется +// пустая строка), +// * ПарольАдминистратораИнформационнойБазы - Строка - пароль пользователя информационной базы +// с правами администратора (если для информационной базы не задан список пользователей ИБ или +// для пользователя ИБ не установлен пароль - используется пустая строка). +// +Функция ПараметрыАдминистрированияИнформационнойБазыКластера() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("ИмяВКластере", ""); + Результат.Вставить("ИмяАдминистратораИнформационнойБазы", ""); + Результат.Вставить("ПарольАдминистратораИнформационнойБазы", ""); + + Возврат Результат; + +КонецФункции + +// Проверяет корректность параметров администрирования. +// +// Параметры: +// ПараметрыАдминистрированияКластера - (См. АдминистрированиеКластера.ПараметрыАдминистрированияКластера) +// ПараметрыАдминистрированияИБ - (См. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера) +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера, +// ПроверятьПараметрыАдминистрированияКластера - Булево - флаг необходимости проверки параметров администрирования +// кластера. +// ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево - флаг необходимости проверки параметров +// администрирования кластера. +// +Процедура ПроверитьПараметрыАдминистрирования(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, + ПроверятьПараметрыАдминистрированияКластера = Истина, + ПроверятьПараметрыАдминистрированияИнформационнойБазы = Истина) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + МенеджерАдминистрирования.ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, ПроверятьПараметрыАдминистрированияИнформационнойБазы, ПроверятьПараметрыАдминистрированияКластера); + +КонецПроцедуры + +#КонецОбласти + +#Область БлокировкаСеансовИРегламентныхЗаданий + +// Конструктор структуры, описывающей свойства блокировки сеансов и регламентных заданий +// информационной базы. +// +// Возвращаемое значение: +// Структура - где: +// * БлокировкаСеансов - Булево - флаг установки блокировки новых сеансов с информационной базой, +// * ДатаС - Дата - момент начала блокировки новых сеансов с информационной базой, +// * ДатаПо - Дата - момент окончания блокировки новых сеансов с информационной базой, +// * Сообщение - Строка - сообщение, отображаемое пользователю при попытке установки нового сеанса +// с информационной базой при установленной блокировке новых сеансов, +// * КодРазрешения - Строка - код обхода блокировки новых сеансов с информационной базой, +// * БлокировкаРегламентныхЗаданий - Булево - флаг блокировки выполнения регламентных заданий информационной базы. +// +Функция СвойстваБлокировкиСеансовИРегламентныхЗаданий() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("БлокировкаСеансов"); + Результат.Вставить("ДатаС"); + Результат.Вставить("ДатаПо"); + Результат.Вставить("Сообщение"); + Результат.Вставить("КодРазрешения"); + Результат.Вставить("ПараметрБлокировки"); + Результат.Вставить("БлокировкаРегламентныхЗаданий"); + + Возврат Результат; + +КонецФункции + +// Возвращает текущее состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - описывает параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - описывает параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// +// Возвращаемое значение: +// Структура - структура, описывающая состояние блокировки сеансов и регламентных заданий, +// описание см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Результат = МенеджерАдминистрирования.БлокировкаСеансовИЗаданийИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ); + + Возврат Результат; + +КонецФункции + +// Устанавливает новое состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// СвойстваБлокировкиСеансовИЗаданий - Структура - описывающая состояние блокировки сеансов и регламентных заданий, +// описание см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Процедура УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач СвойстваБлокировкиСеансовИЗаданий) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + СвойстваБлокировкиСеансовИЗаданий); + +КонецПроцедуры + +// Снимает блокировку сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// +Процедура СнятьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + СвойстваБлокировки = СвойстваБлокировкиСеансовИРегламентныхЗаданий(); + СвойстваБлокировки.БлокировкаСеансов = Ложь; + СвойстваБлокировки.ДатаС = Неопределено; + СвойстваБлокировки.ДатаПо = Неопределено; + СвойстваБлокировки.Сообщение = ""; + СвойстваБлокировки.КодРазрешения = ""; + СвойстваБлокировки.БлокировкаРегламентныхЗаданий = Ложь; + + УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + СвойстваБлокировки); + +КонецПроцедуры + +#КонецОбласти + +#Область БлокировкаРегламентныхЗаданий + +// Возвращает текущее состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - (См. АдминистрированиеКластера.ПараметрыАдминистрированияКластера) +// ПараметрыАдминистрированияИБ - (См. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера) +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// +// Возвращаемое значение: +// Булево - блокировка установлена. +// +Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Результат = МенеджерАдминистрирования.БлокировкаРегламентныхЗаданийИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ); + + Возврат Результат; + +КонецФункции + +// Устанавливает новое состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// БлокировкаРегламентныхЗаданий - Булево - флаг установки блокировки регламентных заданий информационной базы. +// +Процедура УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач БлокировкаРегламентныхЗаданий) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + БлокировкаРегламентныхЗаданий); + +КонецПроцедуры + +#КонецОбласти + +#Область СеансыИнформационнойБазы + +// Конструктор структуры, описывающей свойства сеанса информационной базы. +// +// Возвращаемое значение: +// Структура - где: +// * Номер - Число - номер сеанса. Уникален среди всех сеансов информационной базы, +// * ИмяПользователя - Строка - имя аутентифицированного пользователя информационной базы, +// * ИмяКлиентскогоКомпьютера - Строка - имя или сетевой адрес компьютера, установившего +// сеанс с информационной базой, +// * ИдентификаторКлиентскогоПриложения - Строка - идентификатор приложения, установившего сеанс. +// Возможные значения - см. описание к функции глобального контекста ПредставлениеПриложения(), +// * ИдентификаторЯзыка - Строка - идентификатор языка интерфейса, +// * МоментСозданияСеанса - Дата - момент установки сеанса, +// * МоментПоследнейАктивностиСеанса - Дата - момент последней активности сеанса, +// * Блокировка - Число - номер сеанса, который является причиной ожидания управляемой транзакционной +// блокировки в том случае, если сеанс выполняет установку управляемых транзакционных блокировок +// и ожидает снятия блокировок, установленных другим сеансом (иначе - значение равно 0), +// * БлокировкаСУБД - Число - номер сеанса, который является причиной ожидания транзакционной +// блокировки в том случае, если сеанс исполняет запрос к СУБД и ожидает транзакционную +// блокировку, установленную другим сеансом (иначе - значение равно 0), +// * Передано - Число - объем данных, переданных меду сервером "1С:Предприятия" и клиентским приложением +// данного сеанса с момента начала сеанса (в байтах), +// * ПереданоЗа5Минут - Число - объем данных, переданных между сервером "1С:Предприятия" и клиентским +// приложением данного сеанса за последние 5 минут (в байтах), +// * СерверныхВызовов - Число - количество вызовов сервера "1С:Предприятия" от имена данного сеанса с +// момента начала сеанса, +// * СерверныхВызововЗа5Минут - Число - количество вызовов сервера "1С:Предприятия" от имени данного сеанса +// за последние 5 минут, +// * ДлительностьСерверныхВызовов - Число - время исполнения вызовов сервера "1С:Предприятия" от имени +// данного сеанса с момента начала сеанса (в секундах), +// * ДлительностьТекущегоСерверногоВызова - Число - интервал времени в миллисекундах, прошедший с момента начала +// обращения, в случае, если сеанс выполняется вызов сервера "1С:Предприятия" (иначе - значение равно 0), +// * ДлительностьСерверныхВызововЗа5Минут - Число - время исполнения вызовов сервера 1С:Предприятия от имени +// данного сеанса за последние 5 минут (в миллисекундах), +// * ПереданоСУБД - Число - количество данных, переданных и полученных от СУБД от имени данного сеанса с +// момента начала сеанса (в байтах), +// * ПереданоСУБДЗа5Минут - Число - количество данных, переданных и полученных от СУБД от имени данного сеанса +// за последние 5 минут (в байтах), +// * ДлительностьВызововСУБД - Число - время исполнения запросов к СУБД от имени данного сеанса с момента начала +// сеанса (в миллисекундах), +// * ДлительностьТекущегоВызоваСУБД - Число - интервал времени в миллисекундах, прошедший с начала выполнения +// запроса в случае, если сеанс выполняет запрос к СУБД (иначе - значение равно 0), +// * ДлительностьВызововСУБДЗа5Минут - Число - суммарное время исполнения запросов к СУБД от имени данного сеанса +// за последние 5 минут (в миллисекундах). +// * СоединениеСУБД - Строка - номер соединения с СУБД в терминах СУБД в том случае, если в момент получения списка +// сеансов выполняется запрос к СУБД, открыта транзакция или определены временные таблицы (т.е. захвачено +// соединение с СУБД). Если соединение с СУБД не захвачено - значение равно пустой строке, +// * ВремяСоединенияСУБД - Число - время соединения с СУБД с момента захвата (в миллисекундах). Если соединение с. +// СУБД не захвачено - значение равно 0, +// * МоментЗахватаСоединенияСУБД - Дата - момент времени, когда соединение с СУБД было последний раз +// захвачено другим сеансом. +// * ОписаниеСоединения - Структура, Неопределено - содержит описание соединения, которому назначен сеанс, +// описание полей см. АдминистрированиеКластера.СвойстваОписанияСоединения(). Иначе - Неопределено. +// * Спящий - Булево - сеанс находится в спящем режиме. +// * ЗавершитьЧерез - Число - Интервал времени в секундах, по истечении которого спящий сеанс завершается. +// * ЗаснутьЧерез - Число - Интервал времени в секундах, по истечении которого неактивный сеанс переводится в спящий +// режим. +// * ПрочитаноСДиска - Число - содержит количество данных в байтах, прочитанных с диска сеансом с момента начала сеанса. +// * ПрочитаноСДискаВТекущемВызове - Число - Содержит количество данных в байтах, прочитанных с диска с начала +// выполнения текущего вызова. +// * ПрочитаноСДискаЗа5Минут - Число - содержит количество данных в байтах, прочитанных с диска сеансом за последние +// 5 минут. +// * Лицензия - Структура, Неопределено - содержит информацию о клиентской лицензии, используемой этим сеансом, +// описание полей см. АдминистрированиеКластера.СвойстваЛицензии(). +// Неопределено, если сеанс не использует лицензию. +// * ЗанятоПамяти - Число - содержит объем памяти в байтах, занятый в процессе вызовов с момента начала сеанса. +// * ЗанятоПамятиВТекущемВызове - Число - содержит объем памяти в байтах, занятый с начала выполнения текущего вызова. +// Если в данный момент вызов не выполняется, содержит 0. +// * ЗанятоПамятиЗа5Минут - Число - содержит объем памяти в байтах, занятый в процессе вызовов за последние 5 минут. +// * ЗаписаноНаДиск - Число - содержит количество данных в байтах, записанных на диск сеансом с момента начала сеанса. +// * ЗаписаноНаДискВТекущемВызове - Число - содержит количество данных в байтах, записанных на диск с начала +// выполнения текущего вызова. +// * ЗаписаноНаДискЗа5Минут - Число - содержит количество данных в байтах, записанных на диск сеансом за последние 5 +// минут. +// * РабочийПроцесс - Структура, Неопределено - содержит рабочий процесс, с которым установлено соединение, если +// сеанс назначен соединению, описание полей см. АдминистрированиеКластера.СвойстваРабочегоПроцесса(). +// Иначе - Неопределено. +// +Функция СвойстваСеанса() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Номер"); + Результат.Вставить("ИмяПользователя"); + Результат.Вставить("ИмяКлиентскогоКомпьютера"); + Результат.Вставить("ИдентификаторКлиентскогоПриложения"); + Результат.Вставить("ИдентификаторЯзыка"); + Результат.Вставить("МоментСозданияСеанса"); + Результат.Вставить("МоментПоследнейАктивностиСеанса"); + Результат.Вставить("Блокировка"); + Результат.Вставить("БлокировкаСУБД"); + Результат.Вставить("Передано"); + Результат.Вставить("ПереданоЗа5Минут"); + Результат.Вставить("СерверныхВызовов"); + Результат.Вставить("СерверныхВызововЗа5Минут"); + Результат.Вставить("ДлительностьСерверныхВызовов"); + Результат.Вставить("ДлительностьТекущегоСерверногоВызова"); + Результат.Вставить("ДлительностьСерверныхВызововЗа5Минут"); + Результат.Вставить("ПереданоСУБД"); + Результат.Вставить("ПереданоСУБДЗа5Минут"); + Результат.Вставить("ДлительностьВызововСУБД"); + Результат.Вставить("ДлительностьТекущегоВызоваСУБД"); + Результат.Вставить("ДлительностьВызововСУБДЗа5Минут"); + Результат.Вставить("СоединениеСУБД"); + Результат.Вставить("ВремяСоединенияСУБД"); + Результат.Вставить("МоментЗахватаСоединенияСУБД"); + Результат.Вставить("ОписаниеСоединения"); + Результат.Вставить("Спящий"); + Результат.Вставить("ЗавершитьЧерез"); + Результат.Вставить("ЗаснутьЧерез"); + Результат.Вставить("ПрочитаноСДиска"); + Результат.Вставить("ПрочитаноСДискаВТекущемВызове"); + Результат.Вставить("ПрочитаноСДискаЗа5Минут"); + Результат.Вставить("Лицензия"); + Результат.Вставить("ЗанятоПамяти"); + Результат.Вставить("ЗанятоПамятиВТекущемВызове"); + Результат.Вставить("ЗанятоПамятиЗа5Минут"); + Результат.Вставить("ЗаписаноНаДиск"); + Результат.Вставить("ЗаписаноНаДискВТекущемВызове"); + Результат.Вставить("ЗаписаноНаДискЗа5Минут"); + Результат.Вставить("РабочийПроцесс"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства лицензии. +// +// Возвращаемое значение: +// Структура - структура с полями: +// * ИмяФайла - Строка - Содержит полное имя используемого файла программной лицензии. +// * ПолноеПредставление - Строка - содержит локализованное строковое представление лицензии, как в свойстве +// "Лицензия" диалога свойств сеанса или свойств рабочего процесса консоли кластера +// * КраткоеПредставление - Строка - содержит локализованное строковое представление лицензии, как в колонке +// "Лицензия" списка сеансов или рабочих процессов. +// * ВыданаСервером - Булево - Истина - лицензия получена сервером "1С:Предприятия" и выдана клиентскому приложению. +// Ложь - лицензия получена клиентским приложением. +// * ТипЛицензии - Число - содержит тип лицензии: +// 0 - программная лицензия платформы; +// 1 - аппаратная лицензия (ключ защиты программы). +// * МаксимальноеКоличествоПользователейДляКомплекта - Число - содержит максимальное количество пользователей, +// допустимое для данного комплекта, если используется программная лицензия платформы. Иначе совпадает +// с значением свойства MaxUsersCur. +// * МаксимальноеКоличествоПользователейВКлюче - Число - содержит максимальное количество пользователей в +// используемом ключе защиты программы или в используемом файле программной лицензии. +// * ЛицензияПолученаЧерезAladdinLicenseManager - Булево - Истина, если для аппаратной лицензии ключ защиты программы +// является сетевым, лицензия получена через менеджер лицензий Aladdin License Manager; Ложь в +// противном случае. +// * АдресПроцесса - Строка - содержит адрес сервера, на котором запущен процесс, получивший лицензию. +// * ИдентификаторПроцесса - Строка - Содержит идентификатор процесса, получившего лицензию, присвоенный ему +// операционной системой. +// * ПортПроцесса - Число - содержит номер IP-порта серверного процесса, получившего лицензию. +// * СерияКлюча - Строка - содержит серию ключа защиты программы для аппаратной лицензии или регистрационный номер +// комплекта для программной лицензии платформы. +// +Функция СвойстваЛицензии() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("ИмяФайла"); + Результат.Вставить("ПолноеПредставление"); + Результат.Вставить("КраткоеПредставление"); + Результат.Вставить("ВыданаСервером"); + Результат.Вставить("ТипЛицензии"); + Результат.Вставить("МаксимальноеКоличествоПользователейДляКомплекта"); + Результат.Вставить("МаксимальноеКоличествоПользователейВКлюче"); + Результат.Вставить("ЛицензияПолученаЧерезAladdinLicenseManager"); + Результат.Вставить("АдресПроцесса"); + Результат.Вставить("ИдентификаторПроцесса"); + Результат.Вставить("ПортПроцесса"); + Результат.Вставить("СерияКлюча"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства описания соединения. +// +// Возвращаемое значение: +// Структура - структура с полями: +// * ИмяПриложения - Строка - содержит имя приложения, установившего соединение с фермой серверов "1С:Предприятия". +// * Блокировка - Число - содержит идентификатор соединения, блокирующего работу данного соединения (в Сервисе +// транзакционных блокировок). +// * МоментУстановкиСоединения - Дата - содержит момент времени, когда соединение было установлено. +// * Номер - Число - содержит идентификатор соединения. Позволяет различить разные соединения, установленные одним +// и тем же приложением с одного и того же клиентского компьютера +// * ИмяКлиентскогоКомпьютера - Строка - содержит имя пользовательского компьютера, с которого установлено соединение. +// * НомерСеанса - Число - содержит номер сеанса, если соединению назначен сеанс, иначе - 0. +// * РабочийПроцесс - Структура - содержит интерфейс объекта с описанием серверного процесса, с которым установлено +// данное соединение. +// +Функция СвойстваОписанияСоединения() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("ИмяПриложения"); + Результат.Вставить("Блокировка"); + Результат.Вставить("МоментУстановкиСоединения"); + Результат.Вставить("Номер"); + Результат.Вставить("ИмяКлиентскогоКомпьютера"); + Результат.Вставить("НомерСеанса"); + Результат.Вставить("РабочийПроцесс"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства рабочего процесса. +// +// Возвращаемое значение: +// Структура - структура с полями: +// * ДоступнаяПроизводительность - Число - Средняя за последние 5 минут доступная производительность. Определяется +// по времени реакции рабочего процесса на эталонный запрос. В соответствии с доступной +// производительностью кластер серверов принимает решение о распределении клиентов между рабочими +// процессами. +// * ЗатраченоКлиентом - Число - Показывает среднее время, затрачиваемое рабочим процессом на обратные вызовы +// методов клиентского приложения при выполнении одного клиентского обращения +// * РеакцияСервера - Число - Показывает среднее время обслуживания рабочим процессом одного клиентского обращения. +// Оно складывается из: значений свойств ЗатраченоСервером, ЗатраченоСУБД, ЗатраченоМенеджеромБлокировок, +// ЗатраченоКлиентом. +// * ЗатраченоСУБД - Число - Показывает среднее время, затрачиваемое рабочим процессом на обращения к серверу баз +// данных при выполнении одного клиентского обращения. +// * ЗатраченоМенеджеромБлокировок - Число - Показывает среднее время обращения к менеджеру блокировок. +// * ЗатраченоСервером - Число - Показывает среднее время, затрачиваемое самим рабочим процессом на выполнение +// одного клиентского обращения. +// * КлиентскихПотоков - Число - Показывает среднее количество клиентских потоков, исполняемых рабочим процессом кластера. +// * ОтносительнаяПроизводительность - Число - Относительная производительность процесса. Может находиться в +// диапазоне от 1 до 1000. Используется в процессе выбора рабочего процесса, к которому будет +// подсоединен очередной клиент. Клиенты распределяются между рабочими процессами пропорционально +// производительности рабочих процессов. +// * Соединений - Число - Количество соединений рабочего процесса с пользовательскими приложениями. +// * ИмяКомпьютера - Строка - Содержит имя или IP-адрес компьютера, на котором должен быть запущен рабочий процесс. +// * Включен - Булево - Устанавливается кластером при необходимости запустить или остановить рабочий процесс. +// Истина - процесс должен быть запущен и будет запущен при возможности. +// Ложь - процесс должен быть остановлен и будет остановлен после отсоединения всех пользователей или +// после истечения времени, заданного настройками кластера. +// * Порт - Число - Содержит номер основного IP-порта рабочего процесса. Этот порт выделяется динамически при старте +// рабочего процесса из диапазонов портов, определенных для соответствующего рабочего сервера. +// * ПревышениеНадКритическимЗначением - Число - Содержит время, в течение которого объем виртуальной памяти +// рабочего процесса превышает критическое значение, установленное для кластера, в секундах. +// * ЗанятоПамяти - Число - Содержит объем виртуальной памяти, занимаемой рабочим процессом, в килобайтах. +// * Идентификатор - Строка - Идентификатор активного рабочего процесса в терминах операционной системы. +// * Запущен - Число - Состояние рабочего процесса. +// 0 - процесс неактивен (либо не загружен в память, либо не может выполнять клиентские запросы); +// 1 - процесс активен (работает). +// * КоличествоВызововПоКоторымПосчитанаСтатистика - Число - Количество вызовов, по которым посчитана статистика. +// * МоментЗапуска - Дата - Содержит момент запуска рабочего процесса. Если процесс не запущен, то пустая дата. +// * Использование - Число - Определяет использование рабочего процесса кластером. Устанавливается администратором. +// Возможные значения: +// 0 - не использовать, процесс не должен быть запущен; +// 1 - использовать, процесс должен быть запущен; +// 2 - использовать как резервный, процесс должен быть запущен только при невозможности запуска +// процесса со значением 1 этого свойства. +// * Лицензия - Структура, Неопределено - Содержит информацию о серверной лицензии, используемой рабочим процессом. +// Неопределено - рабочий процесс не использует серверную лицензию. +// +Функция СвойстваРабочегоПроцесса() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("ДоступнаяПроизводительность"); + Результат.Вставить("ЗатраченоКлиентом"); + Результат.Вставить("РеакцияСервера"); + Результат.Вставить("ЗатраченоСУБД"); + Результат.Вставить("ЗатраченоМенеджеромБлокировок"); + Результат.Вставить("ЗатраченоСервером"); + Результат.Вставить("КлиентскихПотоков"); + Результат.Вставить("ОтносительнаяПроизводительность"); + Результат.Вставить("Соединений"); + Результат.Вставить("ИмяКомпьютера"); + Результат.Вставить("Включен"); + Результат.Вставить("Порт"); + Результат.Вставить("ПревышениеНадКритическимЗначением"); + Результат.Вставить("ЗанятоПамяти"); + Результат.Вставить("Идентификатор"); + Результат.Вставить("Запущен"); + Результат.Вставить("КоличествоВызововПоКоторымПосчитанаСтатистика"); + Результат.Вставить("МоментЗапуска"); + Результат.Вставить("Использование"); + Результат.Вставить("Лицензия"); + + Возврат Результат; + +КонецФункции + +// Возвращает описания сеансов информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - (См. АдминистрированиеКластера.ПараметрыАдминистрированияКластера) +// ПараметрыАдминистрированияИБ - (См. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера) +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// Фильтр - Массив из Структура - описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// * Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// * ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// - Структура - ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +// Возвращаемое значение: +// Массив из (см. АдминистрированиеКластера.СвойстваСеанса) +// +Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач Фильтр = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.СеансыИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Фильтр); + +КонецФункции + +// Удаляет сеансы с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// Фильтр - Массив из Структура - описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// * Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// * ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// - Структура - ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +Процедура УдалитьСеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач Фильтр = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УдалитьСеансыИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Фильтр); + +КонецПроцедуры + +#КонецОбласти + +#Область СоединенияСИнформационнойБазой + +// Конструктор структуры, описывающей свойства соединения с информационной базой. +// +// Возвращаемое значение: +// Структура - где: +// * Номер - Число - номер соединения с информационной базой. +// * ИмяПользователя - Строка - имя пользователя 1С:Предприятия, подсоединенного к информационной базе. +// * ИмяКлиентскогоКомпьютера - Строка - имя компьютера, с которого установлено соединение. +// * ИдентификаторКлиентскогоПриложения - Строка - идентификатор приложения, установившего соединение. +// Возможные значения - см. описание к функции глобального контекста ПредставлениеПриложения(), +// * МоментУстановкиСоединения - Дата - момент установки соединения. +// * РежимСоединенияСИнформационнойБазой - Число - режим соединения с информационной базой (0 - +// разделяемый, 1 - монопольный), +// * РежимСоединенияСБазойДанных - Число - режим соединения с базой данных (0 - соединение не установлено, +// 1 - разделяемый, 2 - монопольный). +// * БлокировкаСУБД - Число - идентификатор соединения, блокирующего работу данного соединения в СУБД. +// * Передано - Число - объем данных, полученных и отправленных соединением. +// * ПереданоЗа5Минут - Число - объем данных, полученных и отправленных соединением за последние 5 минут. +// * СерверныхВызовов - Число - количество серверных вызовов. +// * СерверныхВызововЗа5Минут - Число - количество серверных вызовов соединения за последние 5 минут. +// * ПереданоСУБД - Число - объем данных, переданных между сервером 1С:Предприятия и сервером баз данных, +// с момента установки данного соединения, +// * ПереданоСУБДЗа5Минут - Число - объем данных, переданных между сервером 1С:Предприятия и сервером баз +// данных за последние 5 минут, +// * СоединениеСУБД - Строка - идентификатор процесса соединения с СУБД (если на момент получения списка +// соединений данное соединение выполняло обращение к серверу СУБД, в противном случае - значение равно +// пустой строке). Идентификатор возвращается в терминах сервера СУБД. +// * ВремяСУБД - Число - время в секундах, в течении которого выполняется обращение к серверу СУБД (если на момент +// получения списка соединений данное соединение выполняло обращение к серверу СУБД, в противном случае +// значение равно 0). +// * МоментЗахватаСоединенияСУБД - Дата - момент последнего захвата соединения с сервером СУБД. +// * ДлительностьСерверныхВызовов - Число - длительность всех серверных вызовов соединения. +// * ДлительностьВызововСУБД - Число - время вызовов СУБД, инициированных соединением. +// * ДлительностьТекущегоСерверногоВызова - Число - длительность текущего серверного вызова. +// * ДлительностьТекущегоВызоваСУБД - Число - длительность текущего вызова сервера СУБД. +// * ДлительностьСерверныхВызововЗа5Минут - Число - длительность серверных вызовов соединения за последние 5 минут. +// * ДлительностьВызововСУБДЗа5Минут - Число - длительность вызовов соединения СУБД за последние 5 минут. +// * ПрочитаноСДиска - Число - Содержит количество данных в байтах, прочитанных с диска сеансом с момента начала сеанса. +// * ПрочитаноСДискаВТекущемВызове - Число - Содержит количество данных в байтах, прочитанных с диска с начала +// выполнения текущего вызова. +// * ПрочитаноСДискаЗа5Минут - Число - Содержит количество данных в байтах, прочитанных с диска сеансом за +// последние 5 минут. +// * ЗанятоПамяти - Число - Содержит объем памяти в байтах, занятый в процессе вызовов с момента начала сеанса. +// * ЗанятоПамятиВТекущемВызове - Число - Содержит объем памяти в байтах, занятый с начала выполнения текущего +// вызова. Если в данный момент вызов не выполняется, содержит 0. +// * ЗанятоПамятиЗа5Минут - Число - Содержит объем памяти в байтах, занятый в процессе вызовов за последние 5 минут. +// * ЗаписаноНаДиск - Число - Содержит количество данных в байтах, записанных на диск сеансом с момента начала сеанса. +// * ЗаписаноНаДискВТекущемВызове - Число - Содержит количество данных в байтах, записанных на диск с начала +// выполнения текущего вызова. +// * ЗаписаноНаДискЗа5Минут - Число - Содержит количество данных в байтах, записанных на диск сеансом за +// последние 5 минут. +// * УправлениеНаходитсяНаСервере - Число - Указывает, находится ли управление на сервере (0 - не находится, 1 - находится). +// +Функция СвойстваСоединения() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Номер"); + Результат.Вставить("ИмяПользователя"); + Результат.Вставить("ИмяКлиентскогоКомпьютера"); + Результат.Вставить("ИдентификаторКлиентскогоПриложения"); + Результат.Вставить("МоментУстановкиСоединения"); + Результат.Вставить("РежимСоединенияСИнформационнойБазой"); + Результат.Вставить("РежимСоединенияСБазойДанных"); + Результат.Вставить("БлокировкаСУБД"); + Результат.Вставить("Передано"); + Результат.Вставить("ПереданоЗа5Минут"); + Результат.Вставить("СерверныхВызовов"); + Результат.Вставить("СерверныхВызововЗа5Минут"); + Результат.Вставить("ПереданоСУБД"); + Результат.Вставить("ПереданоСУБДЗа5Минут"); + Результат.Вставить("СоединениеСУБД"); + Результат.Вставить("ВремяСУБД"); + Результат.Вставить("МоментЗахватаСоединенияСУБД"); + Результат.Вставить("ДлительностьСерверныхВызовов"); + Результат.Вставить("ДлительностьВызововСУБД"); + Результат.Вставить("ДлительностьТекущегоСерверногоВызова"); + Результат.Вставить("ДлительностьТекущегоВызоваСУБД"); + Результат.Вставить("ДлительностьСерверныхВызововЗа5Минут"); + Результат.Вставить("ДлительностьВызововСУБДЗа5Минут"); + Результат.Вставить("ПрочитаноСДиска"); + Результат.Вставить("ПрочитаноСДискаВТекущемВызове"); + Результат.Вставить("ПрочитаноСДискаЗа5Минут"); + Результат.Вставить("ЗанятоПамяти"); + Результат.Вставить("ЗанятоПамятиВТекущемВызове"); + Результат.Вставить("ЗанятоПамятиЗа5Минут"); + Результат.Вставить("ЗаписаноНаДиск"); + Результат.Вставить("ЗаписаноНаДискВТекущемВызове"); + Результат.Вставить("ЗаписаноНаДискЗа5Минут"); + Результат.Вставить("УправлениеНаходитсяНаСервере"); + + Возврат Результат; + +КонецФункции + +// Возвращает описания соединений с информационной базой. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// Фильтр - Массив из Структура - описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// * Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// * ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// - Структура - ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +// Возвращаемое значение: +// Массив - массив структур, описывающих свойства соединений. Описание структур - +// см. АдминистрированиеКластера.СвойстваСоединения(). +// +Функция СоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач Фильтр = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.СоединенияСИнформационнойБазой( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Фильтр); + +КонецФункции + +// Разрывает соединения с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// Фильтр - Массив - массив из структур описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// * Свойство - Строка - имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(). +// * ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений). +// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// - Структура - ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +Процедура РазорватьСоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач Фильтр = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.РазорватьСоединенияСИнформационнойБазой( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Фильтр); + +КонецПроцедуры + +#КонецОбласти + +#Область ПрофилиБезопасности + +// Возвращает имя профиля безопасности, назначенного для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// +// Возвращаемое значение: +// Строка - имя профиля безопасности, назначенного для информационной базы. Если для информационной базы не назначен +// профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ПрофильБезопасностиИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ); + +КонецФункции + +// Возвращает имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности +// безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// +// Возвращаемое значение: +// Строка - имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности безопасного +// режима. Если для информационной базы не назначен профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ); + +КонецФункции + +// Назначает для информационной базы использование профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности. +// +Процедура УстановитьПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач ИмяПрофиля = "") Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УстановитьПрофильБезопасностиИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + ИмяПрофиля); + +КонецПроцедуры + +// Назначает для информационной базы использование профиля безопасности безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(), +// Параметр может быть опущен в том случае, если аналогичные поля были указаны в структуре, переданной +// в качестве значения параметра ПараметрыАдминистрированияКластера. +// ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности безопасного режима. +// +Процедура УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач ИмяПрофиля = "") Экспорт + + Если ПараметрыАдминистрированияИБ = Неопределено Тогда + ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера; + КонецЕсли; + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + ИмяПрофиля); + +КонецПроцедуры + +// Проверяет существование в кластере серверов профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ИмяПрофиля - Строка - имя профиля безопасности, существование которого проверяется. +// +Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ПрофильБезопасностиСуществует( + ПараметрыАдминистрированияКластера, + ИмяПрофиля); + +КонецФункции + +// Конструктор структуры, описывающей свойства профиля безопасности. +// +// Возвращаемое значение: +// Структура - структура с полями: +// * Имя - Строка - имя профиля безопасности, +// * Описание - Строка - описание профиля безопасности, +// * ПрофильБезопасногоРежима - Булево - определяет возможность использования профиля безопасности +// в качестве профиля безопасности безопасного режима (как при указании в качестве профиля +// безопасного режима для информационной базы, так и при вызове. +// УстановитьБезопасныйРежим(<Имя профиля>) из кода конфигурации. +// * ПолныйДоступКПривилегированномуРежиму - Булево - определяет возможность установки +// привилегированного режима из безопасного режима данного профиля безопасности. +// * ПолныйДоступКФункциямКриптографии - Булево - определяет разрешение на использование криптографического +// функционала (подпись, проверка подписи, шифрование, расшифрование, работа с хранилищем сертификатов, +// проверка сертификатов, извлечение сертификатов из подписи) при работе на сервере. +// На клиенте функции криптографии не блокируются. +// Истина - исполнение разрешено. Ложь - исполнение запрещено. +// * ПолныйДоступКРасширениюВсехМодулей - Булево - определяет, разрешено ли изменение всех модулей в расширении +// конфигурации: +// Истина - разрешено расширять любой модуль. +// Ложь - разрешено расширять модули из списка разрешенных. +// * ДоступныеДляРасширенияМодули - Строка - используется, когда расширение всех модулей не разрешено. +// Содержит список полных имен объектов конфигурации или модулей, расширение которых разрешено, +// разделенных ";". Указание полного имени объекта конфигурации разрешает расширение всех модулей +// объекта. Указанием полного имени модуля разрешает расширение конкретного модуля. +// * НедоступныеДляРасширенияМодули - Строка - используется, когда расширение всех модулей разрешено. +// Содержит список полных имен объектов конфигурации или модулей, расширение которых не разрешено, +// разделенных ";". Указание полного имени объекта конфигурации запрещает расширение всех модулей +// объекта. +// * ПолныйДоступКРасширениюПравДоступа - Булево - определяет, разрешено ли повышение прав на объекты конфигурации +// расширениями, ограниченными профилем безопасности: +// Истина - повышение прав разрешено. +// Ложь - повышение прав не разрешено. +// Если указан список ролей расширяемой конфигурации, допускается повышение права, если хотя бы одна +// роль из списка включает в себя требуемое право. +// * РолиОграничивающиеРасширениеПравДоступа - Строка - содержит список имен ролей, влияющих на изменение прав +// доступа из расширения. При изменении списка ролей изменения в составе ролей учитываются только после +// перезапуска текущих сеансов и для новых сеансов. +// * ПолныйДоступКФайловойСистеме - Булево - определяет наличие ограничений на доступ к файловой +// системе. При установке значения равным Ложь доступ будет предоставлен только к каталогам файловой +// системы, перечисленным в свойстве ВиртуальныеКаталоги. +// * ПолныйДоступКCOMОбъектам - Булево - определяет наличие ограничений на доступ к использованию. +// COM-объектов. При установке значения равным Ложь, доступ будет предоставлен только к COM-классам, +// перечисленным в свойстве COM-классы. +// * ПолныйДоступКВнешнимКомпонентам - Булево - определяет наличие ограничений на доступ к использованию +// внешних компонент. При установке значения равным Ложь, доступ будет предоставлен только к внешним +// компонентам, перечисленным в свойстве ВнешниеКомпоненты. +// * ПолныйДоступКВнешнимМодулям - Булево - определяет наличие ограничений на доступ к использованию внешних +// модулей (внешние отчеты и обработки, вызовы Выполнить() и Вычислить()) в небезопасном режиме. +// При установке значения равным Ложь, будет предоставлена возможность использовать в небезопасном +// режиме только внешние модули, перечисленные в свойстве ВнешниеМодули. +// * ПолныйДоступКПриложениямОперационнойСистемы - Булево - определяет наличие ограничений на доступ к +// использованию приложений операционной системы. При установке значения равным Ложь, будет +// предоставлена возможность использовать только приложения операционной системы, перечисленные в +// свойстве ПриложенияОС. +// * ПолныйДоступКИнтернетРесурсам - Булево - определяет наличие ограничений на доступ к использованию +// интернет-ресурсов. При установке значения равным Ложь, будет предоставлена возможность использовать +// только интернет-ресурсы, перечисленные в свойстве интернетРесурсы. +// * ВиртуальныеКаталоги - Массив - массив структур, описывающих виртуальные каталоги, к которым предоставляется +// доступ при установке ПолныйДоступКФайловойСистеме = Ложь. Описания полей структур +// см. АдминистрированиеКластера.СвойстваВиртуальногоКаталога(). +// * COMКлассы - Массив - массив структур, описывающих COM-классы, к которым предоставляется доступ при установке +// ПолныйДоступКCOMОбъектам = Ложь. Описания полей структур +// см. АдминистрированиеКластера.СвойстваCOMКласса(). +// * ВнешниеКомпоненты - Массив - массив структур, описывающих внешние компоненты, к которым предоставляется доступ +// при установке ПолныйДоступКВнешнимКомпонентам = Ложь. Описания полей структур +// см. АдминистрированиеКластера.СвойстваВнешнейКомпоненты(). +// * ВнешниеМодули - Массив - массив структур, описывающих внешние модули, к которым предоставляется доступ в +// небезопасном режиме при установке ПолныйДоступКВнешнимМодулям = Ложь. Описания полей структур +// см. АдминистрированиеКластера.СвойстваВнешнегоМодуля(). +// * ПриложенияОС - Массив - массив структур, описывающих приложения операционной системы, к которым предоставляется +// доступ при установке ПолныйДоступКПриложениямОперационнойСистемы = Ложь. Описания полей структур +// см. АдминистрированиеКластера.СвойстваПриложенияОС(). +// * ИнтернетРесурсы - Массив - массив структур, описывающих интернет-ресурсы, к которым предоставляется доступ при +// установке ПолныйДоступКИнтернетРесурсам = Ложь. Описания полей структур +// см. АдминистрированиеКластера.СвойстваИнтернетРесурса(). +// +Функция СвойстваПрофиляБезопасности() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя", ""); + Результат.Вставить("Описание", ""); + Результат.Вставить("ПрофильБезопасногоРежима", Ложь); + Результат.Вставить("ПолныйДоступКПривилегированномуРежиму", Ложь); + Результат.Вставить("ПолныйДоступКФункциямКриптографии", Ложь); + + Результат.Вставить("ПолныйДоступКРасширениюВсехМодулей", Ложь); + Результат.Вставить("ДоступныеДляРасширенияМодули", ""); + Результат.Вставить("НедоступныеДляРасширенияМодули", ""); + + Результат.Вставить("ПолныйДоступКРасширениюПравДоступа", Ложь); + Результат.Вставить("РолиОграничивающиеРасширениеПравДоступа", ""); + + Результат.Вставить("ПолныйДоступКФайловойСистеме", Ложь); + Результат.Вставить("ПолныйДоступКCOMОбъектам", Ложь); + Результат.Вставить("ПолныйДоступКВнешнимКомпонентам", Ложь); + Результат.Вставить("ПолныйДоступКВнешнимМодулям", Ложь); + Результат.Вставить("ПолныйДоступКПриложениямОперационнойСистемы", Ложь); + Результат.Вставить("ПолныйДоступКИнтернетРесурсам", Ложь); + + Результат.Вставить("ВиртуальныеКаталоги", Новый Массив()); + Результат.Вставить("COMКлассы", Новый Массив()); + Результат.Вставить("ВнешниеКомпоненты", Новый Массив()); + Результат.Вставить("ВнешниеМодули", Новый Массив()); + Результат.Вставить("ПриложенияОС", Новый Массив()); + Результат.Вставить("ИнтернетРесурсы", Новый Массив()); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства виртуального каталога. +// +// Возвращаемое значение: +// Структура - структура с полями: +// * ЛогическийURL - Строка - логический URL каталога. +// * ФизическийURL - Строка - физический URL каталога на сервере для размещения данных виртуального каталога. +// * Описание - Строка - описание виртуального каталога. +// * ЧтениеДанных - Булево - флаг разрешения чтения данных из виртуального каталога. +// * ЗаписьДанных - Булево - флаг разрешения записи данных в виртуальный каталог. +// +Функция СвойстваВиртуальногоКаталога() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("ЛогическийURL"); + Результат.Вставить("ФизическийURL"); + + Результат.Вставить("Описание"); + + Результат.Вставить("ЧтениеДанных"); + Результат.Вставить("ЗаписьДанных"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства COM-класса. +// +// Возвращаемое значение: +// Структура - структура с полями: +// * Имя - Строка - имя COM-класса, используется в качестве ключа при поиске. +// * Описание - Строка - описание COM-класса. +// * ФайлМоникер - Строка - имя файла, по которому создается объект методом глобального контекста +// ПолучитьCOMОбъект() с пустым значением второго параметра. +// * CLSID - Строка - представление идентификатора COM-класса в формате системного реестра MS Windows +// без фигурных скобок, по которому он может быть создан операционной системой. +// * Компьютер - Строка - имя компьютера, на котором может быть создан COM-объект. +// +Функция СвойстваCOMКласса() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя"); + Результат.Вставить("Описание"); + + Результат.Вставить("ФайлМоникер"); + Результат.Вставить("CLSID"); + Результат.Вставить("Компьютер"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства внешней компоненты. +// +// Возвращаемое значение: +// Структура - структура с полями: +// * Имя - Строка - имя внешней компоненты, используется в качестве ключа для поиска. +// * Описание - Строка - описание внешней компоненты. +// * ХэшСумма - Строка - контрольная сумма разрешенной внешней компоненты, вычисленная алгоритмом SHA-1 и +// преобразованная к строке base64. +// +Функция СвойстваВнешнейКомпоненты() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя"); + Результат.Вставить("Описание"); + + Результат.Вставить("ХэшСумма"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства внешнего модуля. +// +// Возвращаемое значение: +// Структура - структура с полями: +// * Имя - Строка - имя внешнего модуля, используется в качестве ключа для поиска. +// * Описание - Строка - описание внешнего модуля. +// * ХэшСумма - Строка - контрольная сумма разрешенного внешнего модуля, вычисленная алгоритмом SHA-1 и +// преобразованная к строке base64. +// +Функция СвойстваВнешнегоМодуля() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя"); + Результат.Вставить("Описание"); + + Результат.Вставить("ХэшСумма"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей свойства приложения операционной системы. +// +// Возвращаемое значение: +// Структура - структура с полями: +// * Имя - Строка - имя приложения операционной системы, используется в качестве ключа для поиска. +// * Описание - Строка - описание приложения операционной системы. +// * ШаблонСтрокиЗапуска - Строка - шаблон строки запуска приложения (состоит из последовательности шаблонных слов, +// разделенных пробелами). +// +Функция СвойстваПриложенияОС() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя"); + Результат.Вставить("Описание"); + + Результат.Вставить("ШаблонСтрокиЗапуска"); + + Возврат Результат; + +КонецФункции + +// Конструктор структуры, описывающей Интернет-ресурс. +// +// Возвращаемое значение: +// Структура - структура с полями: +// * Имя - Строка - имя интернет-ресурса, используется в качестве ключа для поиска. +// * Описание - Строка - описание интернет-ресурса. +// * Протокол - Строка - разрешаемый сетевой протокол. Возможные значения: +// HTTP, +// HTTPS, +// FTP, +// FTPS, +// POP3, +// SMTP, +// IMAP. +// * Адрес - Строка - сетевой адрес Интернет-ресурса без указания протокола и порта. +// * Порт - Число - сетевой порт Интернет-ресурса. +// +Функция СвойстваИнтернетРесурса() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Имя"); + Результат.Вставить("Описание"); + + Результат.Вставить("Протокол"); + Результат.Вставить("Адрес"); + Результат.Вставить("Порт"); + + Возврат Результат; + +КонецФункции + +// Возвращает свойства профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// +// Возвращаемое значение: +// Структура - структура, описывающая профиль безопасности, описание см. +// АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Функция ПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ПрофильБезопасности( + ПараметрыАдминистрированияКластера, + ИмяПрофиля); + +КонецФункции + +// Создает профиль безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// СвойстваПрофиляБезопасности - Структура - структура, описывающая свойства создаваемого профиля безопасности, +// описание см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Процедура СоздатьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.СоздатьПрофильБезопасности( + ПараметрыАдминистрированияКластера, + СвойстваПрофиляБезопасности); + +КонецПроцедуры + +// Устанавливает свойства для существующего профиля безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// СвойстваПрофиляБезопасности - Структура - структура, описывающая устанавливаемые для профиля безопасности свойства, +// описание см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Процедура УстановитьСвойстваПрофиляБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УстановитьСвойстваПрофиляБезопасности( + ПараметрыАдминистрированияКластера, + СвойстваПрофиляБезопасности); + +КонецПроцедуры + +// Удаляет профиль безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// +Процедура УдалитьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + МенеджерАдминистрирования.УдалитьПрофильБезопасности( + ПараметрыАдминистрированияКластера, + ИмяПрофиля); + +КонецПроцедуры + +#КонецОбласти + +#Область ИнформационныеБазы + +// Возвращает внутренний идентификатор информационной базы. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИнформационнойБазы - Структура - структура, описывающая параметры подключения к +// информационной базе, описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: +// Строка - внутренний идентификатор информационной базы. +// +Функция ИдентификаторИнформационнойБазы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ИдентификаторИнформационнойБазы( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИнформационнойБазы); + +КонецФункции + +// Возвращает описания информационных баз. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - (См. АдминистрированиеКластера.ПараметрыАдминистрированияКластера) +// Фильтр - Структура - параметры фильтрации информационных баз. +// +// Возвращаемое значение: +// Массив из Структура - свойства. +// +Функция СвойстваИнформационныхБаз(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.СвойстваИнформационныхБаз( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + Фильтр); + +КонецФункции + +#КонецОбласти + +#Область Кластер + +// Возвращает внутренний идентификатор кластера серверов. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// +// Возвращаемое значение: +// Строка - внутренний идентификатор кластера серверов. +// +Функция ИдентификаторКластера(Знач ПараметрыАдминистрированияКластера) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ИдентификаторКластера(ПараметрыАдминистрированияКластера); + +КонецФункции + +// Возвращает описания кластеров серверов. +// +// ПараметрыАдминистрированияКластера - (См. АдминистрированиеКластера.ПараметрыАдминистрированияКластера) +// Фильтр - Структура - параметры фильтрации кластеров серверов. +// +// Возвращаемое значение: +// Массив из Структура - свойства. +// +Функция СвойстваКластеров(Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.СвойстваКластеров(ПараметрыАдминистрированияКластера, Фильтр); + +КонецФункции + +#КонецОбласти + +#Область РабочиеПроцессыСерверы + +// Возвращает описания рабочих процессов. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// Фильтр - Структура - параметры фильтрации рабочих процессов. +// +// Возвращаемое значение: +// Массив - массив структур, описывающих свойства рабочих процессов. +// +Функция СвойстваРабочихПроцессов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.СвойстваРабочихПроцессов( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + Фильтр); + +КонецФункции + +// Возвращает описания рабочих серверов. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - описывает параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// Фильтр - Структура - параметры фильтрации рабочих серверов. +// +// Возвращаемое значение: +// Массив - массив структур, описывающих свойства рабочих серверов. +// +Функция СвойстваРабочихСерверов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.СвойстваРабочихСерверов( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + Фильтр); + +КонецФункции + +#КонецОбласти + +// Возвращает описания сеансов информационной базы. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - (См. АдминистрированиеКластера.ПараметрыАдминистрированияКластера) +// ИдентификаторИнформационнойБазы - Строка - внутренний идентификатор информационной базы. +// Фильтр - Массив из Структура - описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// * Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// * ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// - Структура - ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// ИспользоватьСловарь - Булево - если Истина - возвращаемый результат будет заполнен с использован словаря, +// иначе - без использования. +// +// Возвращаемое значение: +// - Массив из (См. АдминистрированиеКластера.СвойстваСеанса) +// - Массив из Соответствие - описывающих свойства сеансов в нотации утилиты rac (при ИспользоватьСловарь = Ложь). +// +Функция СвойстваСеансов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИдентификаторИнформационнойБазы, Знач Фильтр = Неопределено, Знач ИспользоватьСловарь = Истина) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.СвойстваСеансов( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИдентификаторИнформационнойБазы, + Фильтр, + ИспользоватьСловарь); + +КонецФункции + +// Возвращает описания соединений с информационной базой. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - (См. АдминистрированиеКластера.ПараметрыАдминистрированияКластера) +// ИдентификаторИнформационнойБазы - Строка - внутренний идентификатор информационной базы. +// ПараметрыАдминистрированияИнформационнойБазы - (См. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера) +// Фильтр - Массив из Структура - описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// * Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// * ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// * Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// - Структура - ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// ИспользоватьСловарь - Булево - если Истина - возвращаемый результат будет заполнен с использован словаря, +// иначе - без использования. +// +// Возвращаемое значение: +// - Массив из (См. АдминистрированиеКластера.СвойстваСоединения) +// - Массив из Соответствие - описывающих свойства соединений в нотации утилиты rac (при ИспользоватьСловарь = Ложь). +// +Функция СвойстваСоединений(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИдентификаторИнформационнойБазы, Знач ПараметрыАдминистрированияИнформационнойБазы, Знач Фильтр = Неопределено, Знач ИспользоватьСловарь = Ложь) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.СвойстваСоединений( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИдентификаторИнформационнойБазы, + ПараметрыАдминистрированияИнформационнойБазы, + Фильтр, + ИспользоватьСловарь); + +КонецФункции + +// Возвращает путь к консольному клиенту сервера администрирования. +// +// Параметры: +// ПараметрыАдминистрированияКластера - (См. АдминистрированиеКластера.ПараметрыАдминистрированияКластера) +// +// Возвращаемое значение: +// Строка - путь к консольному клиенту сервера администрирования. +// +Функция ПутьККлиентуСервераАдминистрирования(Знач ПараметрыАдминистрированияКластера) Экспорт + + МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера); + + Возврат МенеджерАдминистрирования.ПутьККлиентуСервераАдминистрирования(); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Добавляет к фильтру новое условие. +// +Процедура ДобавитьУсловиеФильтра(Фильтр, Знач Свойство, Знач ВидСравненияЗначений, Знач Значение) Экспорт + + Если Фильтр = Неопределено Тогда + + Если ВидСравненияЗначений = ВидСравнения.Равно Тогда + + Фильтр = Новый Структура; + Фильтр.Вставить(Свойство, Значение); + + Иначе + + НовыйЭлементФильтра = Новый Структура("Свойство, ВидСравнения, Значение", Свойство, ВидСравненияЗначений, Значение); + + Фильтр = Новый Массив; + Фильтр.Добавить(НовыйЭлементФильтра); + + КонецЕсли; + + ИначеЕсли ТипЗнч(Фильтр) = Тип("Структура") Тогда + + СуществующийЭлементФильтра = Новый Структура("Свойство, ВидСравнения, Значение", Фильтр.Ключ, ВидСравнения.Равно, Фильтр.Значение); + НовыйЭлементФильтра = Новый Структура("Свойство, ВидСравнения, Значение", Свойство, ВидСравненияЗначений, Значение); + + Фильтр = Новый Массив; + Фильтр.Добавить(СуществующийЭлементФильтра); + Фильтр.Добавить(НовыйЭлементФильтра); + + ИначеЕсли ТипЗнч(Фильтр) = Тип("Массив") Тогда + + Фильтр.Добавить(Новый Структура("Свойство, ВидСравнения, Значение", Свойство, ВидСравненияЗначений, Значение)); + + Иначе + + ВызватьИсключение НСтр("ru = 'Неверный тип параметра Фильтр, ожидалось <Структура> или <Массив>'"); + + КонецЕсли; + +КонецПроцедуры + +// Проверяет значения свойств объекта на соответствие условиям, указанным в фильтре. +// +// Параметры: +// ПроверяемыйОбъект - Структура - структура с полями: +// * Ключ - Строка - Имя свойства,значение которого сравнивается с фильтром, +// * Значение - Произвольный - Значение свойства, которое сравнивается с фильтром, +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +// Возвращаемое значение: +// Булево - Истина если значения свойств объекта удовлетворяют условиям, указанным в фильтре, +// Ложь - если не удовлетворяют. +// +Функция ПроверитьУсловияФильтра(Знач ПроверяемыйОбъект, Знач Фильтр = Неопределено) Экспорт + + Если Фильтр = Неопределено Или Фильтр.Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + + ВыполненоУсловий = 0; + + Для Каждого Условие Из Фильтр Цикл + + Если ТипЗнч(Условие) = Тип("Структура") Тогда + + Поле = Условие.Свойство; + ТребуемоеЗначение = Условие.Значение; + ВидСравненияЗначений = Условие.ВидСравнения; + + ИначеЕсли ТипЗнч(Условие) = Тип("КлючИЗначение") Тогда + + Поле = Условие.Ключ; + ТребуемоеЗначение = Условие.Значение; + ВидСравненияЗначений = ВидСравнения.Равно; + + Иначе + + ВызватьИсключение НСтр("ru = 'Неверный тип значения параметра Фильтр, ожидалось <Структура> или <КлючИЗначение>'"); + + КонецЕсли; + + ПроверяемоеЗначение = ПроверяемыйОбъект[Поле]; + УсловиеВыполнено = ПроверитьУсловиеФильтра(ПроверяемоеЗначение, ВидСравненияЗначений, ТребуемоеЗначение); + + Если УсловиеВыполнено Тогда + ВыполненоУсловий = ВыполненоУсловий + 1; + Иначе + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат ВыполненоУсловий = Фильтр.Количество(); + +КонецФункции + +// Проверяет значения на соответствие условиям, указанным в фильтре. +// +// Параметры: +// ПроверяемоеЗначение - Число, Строка, Дата, Булево - значение, которое сравнивается с условием, +// ВидСравненияЗначений - значение системного перечисления ВидСравнения, вид сравнения значений с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается проверяемое значение. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение. +// +// Возвращаемое значение: Булево, Истина если значение удовлетворяет условиям, Ложь - если не удовлетворяет. +// +Функция ПроверитьУсловиеФильтра(Знач ПроверяемоеЗначение, Знач ВидСравненияЗначений, Знач Значение) + + Если ВидСравненияЗначений = ВидСравнения.Равно Тогда + + Возврат ПроверяемоеЗначение = Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.НеРавно Тогда + + Возврат ПроверяемоеЗначение <> Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.Больше Тогда + + Возврат ПроверяемоеЗначение > Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.БольшеИлиРавно Тогда + + Возврат ПроверяемоеЗначение >= Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.Меньше Тогда + + Возврат ПроверяемоеЗначение < Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.МеньшеИлиРавно Тогда + + Возврат ПроверяемоеЗначение <= Значение; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.ВСписке Тогда + + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + + Возврат Значение.НайтиПоЗначению(ПроверяемоеЗначение) <> Неопределено; + + ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда + + Возврат Значение.Найти(ПроверяемоеЗначение) <> Неопределено; + + КонецЕсли; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.НеВСписке Тогда + + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + + Возврат Значение.НайтиПоЗначению(ПроверяемоеЗначение) = Неопределено; + + ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда + + Возврат Значение.Найти(ПроверяемоеЗначение) = Неопределено; + + КонецЕсли; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.Интервал Тогда + + Возврат ПроверяемоеЗначение > Значение.С И ПроверяемоеЗначение < Значение.По; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.ИнтервалВключаяГраницы Тогда + + Возврат ПроверяемоеЗначение >= Значение.С И ПроверяемоеЗначение <= Значение.По; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.ИнтервалВключаяНачало Тогда + + Возврат ПроверяемоеЗначение >= Значение.С И ПроверяемоеЗначение < Значение.По; + + ИначеЕсли ВидСравненияЗначений = ВидСравнения.ИнтервалВключаяОкончание Тогда + + Возврат ПроверяемоеЗначение > Значение.С И ПроверяемоеЗначение <= Значение.По; + + КонецЕсли; + +КонецФункции + +// Возвращает общий модуль, реализующий программный интерфейс для администрирования кластера +// серверов, соответствующий типу подключения к администрируемому кластеру серверов. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// +// Возвращаемое значение: ОбщийМодуль. +// +Функция МенеджерАдминистрирования(Знач ПараметрыАдминистрирования) + + Если ПараметрыАдминистрирования.ТипПодключения = "COM" Тогда + + Возврат АдминистрированиеКластераCOM; + + ИначеЕсли ПараметрыАдминистрирования.ТипПодключения = "RAS" Тогда + + Возврат АдминистрированиеКластераRAS; + + Иначе + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неизвестный тип параметра ПараметрыАдминистрирования (%1), ожидалось ""COM"" или ""RAS""'"), + ПараметрыАдминистрирования.ТипПодключения); + + КонецЕсли; + +КонецФункции + +// Возвращает дату, соответствующую пустой дате в реестре кластера серверов. +// +// Возвращаемое значение: +// Дата - Дата и время. +// +Функция ПустаяДата() Экспорт + + Возврат Дата(1, 1, 1, 0, 0, 0); + +КонецФункции + +// Дополняет данные о сеансе по информации из описания блокировки +// +// Параметры: +// ДанныеСеансов - Соответствие - Структура, накапливающая данные сеансов по КлючСеанса в виде структуры с полями РежимБлокировкиБД, Разделитель +// ТекстБлокировки - Строка - Исходный текст блокировки, получаемый из списка блокировок (RAS/COM) +// КлючСеанса - Произвольный - идентификатор сеанса +// ИмяИнформационнойБазы - Строка - искомое имя информационной базы, сеансы других ИБ игнорируются +// +Процедура ДанныеСеансаИзБлокировки(ДанныеСеансов, Знач ТекстБлокировки, Знач КлючСеанса, Знач ИмяИнформационнойБазы) Экспорт + + ТекстНРег = НРег(ТекстБлокировки); + + ТекстНРег = СтрЗаменить(ТекстНРег, "db(", "бд("); + ТекстНРег = СтрЗаменить(ТекстНРег, "(session,", "(сеанс,"); + ТекстНРег = СтрЗаменить(ТекстНРег, ",shared", ",разделяемая"); + ТекстНРег = СтрЗаменить(ТекстНРег, ",exceptional", ",исключительная"); + ТекстНРег = СтрЗаменить(ТекстНРег, ",exclusive", ",исключительная"); + + Если Лев(ТекстНРег, 9) = "бд(сеанс," Тогда + ЗначенияБлокировкиСтрокой = Сред(ТекстНРег, СтрНайти(ТекстНРег, "(") + 1, СтрНайти(ТекстНРег, ")") - СтрНайти(ТекстНРег, "(") - 1); + ЗначенияБлокировки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЗначенияБлокировкиСтрокой, ","); + Если ЗначенияБлокировки.Количество() >= 3 + И ЗначенияБлокировки[0] = "сеанс" + И ЗначенияБлокировки[1] = НРег(ИмяИнформационнойБазы) Тогда + + Если СтрНайти(ЗначенияБлокировкиСтрокой, "'") > 0 Тогда + ЗначениеРазделителя = Сред(ЗначенияБлокировкиСтрокой, СтрНайти(ЗначенияБлокировкиСтрокой, "'") + 1); + ЗначениеРазделителя = Лев(ЗначениеРазделителя, СтрНайти(ЗначениеРазделителя, "'") - 1); + Иначе + ЗначениеРазделителя = ""; + КонецЕсли; + + ДанныеСеансов[КлючСеанса] = Новый Структура("РежимБлокировкиБД,Разделитель", ЗначенияБлокировки[2], ЗначениеРазделителя); + + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/АдминистрированиеКластера/АдминистрированиеКластера.mdo b/SSL/src/CommonModules/АдминистрированиеКластера/АдминистрированиеКластера.mdo new file mode 100644 index 000000000..e0ce2471f --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластера/АдминистрированиеКластера.mdo @@ -0,0 +1,11 @@ + + + АдминистрированиеКластера + + ru + Администрирование кластера + + true + true + true + diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl new file mode 100644 index 000000000..b5d89d29c --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOM/Module.bsl @@ -0,0 +1,2193 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +#Область БлокировкаСеансовИЗаданий + +// Возвращает текущее состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: +// Структура - структура, описывающая состояние блокировки сеансов и регламентных заданий, +// описание см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + Результат = ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора( + ИнформационнаяБаза, + СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий()); + + Если Результат.ДатаС = АдминистрированиеКластера.ПустаяДата() Тогда + Результат.ДатаС = Неопределено; + КонецЕсли; + + Если Результат.ДатаПо = АдминистрированиеКластера.ПустаяДата() Тогда + Результат.ДатаПо = Неопределено; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.КодРазрешения) Тогда + Результат.КодРазрешения = ""; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.Сообщение) Тогда + Результат.Сообщение = ""; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.ПараметрБлокировки) Тогда + Результат.ПараметрБлокировки = ""; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Устанавливает новое состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// СвойстваБлокировкиСеансовИЗаданий - Структура - структура, описывающая состояние блокировки сеансов и регламентных +// заданий, описание см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Процедура УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач СвойстваБлокировкиСеансовИЗаданий) Экспорт + + УстанавливаемаяБлокировка = Новый Структура(); + Для Каждого КлючИЗначение Из СвойстваБлокировкиСеансовИЗаданий Цикл + УстанавливаемаяБлокировка.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + + Если Не ЗначениеЗаполнено(УстанавливаемаяБлокировка.ДатаС) Тогда + УстанавливаемаяБлокировка.ДатаС = АдминистрированиеКластера.ПустаяДата(); + КонецЕсли; + + Если Не ЗначениеЗаполнено(УстанавливаемаяБлокировка.ДатаПо) Тогда + УстанавливаемаяБлокировка.ДатаПо = АдминистрированиеКластера.ПустаяДата(); + КонецЕсли; + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ИнформационнаяБаза, + УстанавливаемаяБлокировка, + СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий()); + + СоединениеСРабочимПроцессом.UpdateInfoBase(ИнформационнаяБаза); + +КонецПроцедуры + +// Проверяет корректность параметров администрирования. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ПроверятьПараметрыАдминистрированияКластера - Булево - флаг необходимости проверки параметров администрирования +// кластера. +// ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево - флаг необходимости проверки параметров +// администрирования кластера. +// +Процедура ПроверитьПараметрыАдминистрирования(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, + ПроверятьПараметрыАдминистрированияИнформационнойБазы = Истина, + ПроверятьПараметрыАдминистрированияКластера = Истина) Экспорт + + Если ПроверятьПараметрыАдминистрированияКластера ИЛИ ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда + + Попытка + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + Исключение + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Если компонента ""comcntr"" не зарегистрирована или ее версия не совпадает с требуемой, + |следует зарегистрировать ее на компьютере %2 выполнив команду cmd с повышением привилегий UAC + |для учетной записи ОС Windows, от имени которой выполняется 1С:Предприятие. + | + |Например: + |regsvr32.exe ""%3comcntr.dll""'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + ИмяКомпьютера(), + КаталогПрограммы()); + КонецПопытки; + + КонецЕсли; + + Если ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ПолучитьИБ(СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область БлокировкаРегламентныхЗаданий + +// Возвращает текущее состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: +// Булево - состояние блокировки. +// +Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + Возврат ИнформационнаяБаза.ScheduledJobsDenied; + +КонецФункции + +// Устанавливает новое состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// БлокировкаРегламентныхЗаданий - Булево - флаг установки блокировки регламентных заданий информационной базы. +// +Процедура УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач БлокировкаРегламентныхЗаданий) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + ИнформационнаяБаза.ScheduledJobsDenied = БлокировкаРегламентныхЗаданий; + СоединениеСРабочимПроцессом.UpdateInfoBase(ИнформационнаяБаза); + +КонецПроцедуры + +#КонецОбласти + +#Область СеансыИнформационнойБазы + +// Возвращает описания сеансов информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +// Возвращаемое значение: +// Массив - массив структур, описывающих свойства сеансов. Описание +// см. АдминистрированиеКластера.СвойстваСеанса(). +// +Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ОписаниеИнформационнойБазы = ПолучитьОписаниеИБ( + СоединениеСАгентомСервера, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере); + + Возврат ПолучитьСеансы(СоединениеСАгентомСервера, Кластер, ОписаниеИнформационнойБазы, Фильтр, Истина); + +КонецФункции + +// Удаляет сеансы с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +Процедура УдалитьСеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ОписаниеИнформационнойБазы = ПолучитьОписаниеИБ( + СоединениеСАгентомСервера, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере); + + КоличествоПопыток = 3; + ВсеСеансыУдалены = Ложь; + + Для ТекущаяПопытка = 0 По КоличествоПопыток Цикл + + Сеансы = ПолучитьСеансы(СоединениеСАгентомСервера, Кластер, ОписаниеИнформационнойБазы, Фильтр, Ложь); + + Если Сеансы.Количество() = 0 Тогда + + ВсеСеансыУдалены = Истина; + Прервать; + + ИначеЕсли ТекущаяПопытка = КоличествоПопыток Тогда + + Прервать; + + КонецЕсли; + + Для каждого Сеанс Из Сеансы Цикл + + Попытка + + СоединениеСАгентомСервера.TerminateSession(Кластер, Сеанс); + + Исключение + + // Сеанс мог завершиться к моменту вызова TerminateSession. + Продолжить; + + КонецПопытки; + + КонецЦикла; + + КонецЦикла; + + Если НЕ ВсеСеансыУдалены Тогда + + ВызватьИсключение НСтр("ru = 'Не удалось удалить сеансы.'"); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СоединенияСИнформационнойБазой + +// Возвращает описания соединений с информационной базой. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +// Возвращаемое значение: +// Массив - массив структур, описывающих свойства соединений. Описание +// см. АдминистрированиеКластера.СвойстваСоединения(). +// +Функция СоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + Возврат ПолучитьСоединения( + COMСоединитель, + СоединениеСАгентомСервера, + Кластер, + ПараметрыАдминистрированияИБ, + Фильтр, + Истина); + +КонецФункции + +// Разрывает соединения с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +Процедура РазорватьСоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + Значение = Новый Массив; + Значение.Добавить("1CV8"); // идентификатор приложения 1С:Предприятие в режиме запуска "Толстый клиент". + Значение.Добавить("1CV8C"); // идентификатор приложения 1С:Предприятие в режиме запуска "Тонкий клиент". + Значение.Добавить("WebClient"); // идентификатор приложения 1С:Предприятие в режиме запуска "Веб-клиент". + Значение.Добавить("Designer"); // идентификатор приложения Конфигуратор. + Значение.Добавить("COMConnection"); // идентификатор сессии внешнего соединения 1С:Предприятия через COM. + Значение.Добавить("WSConnection"); // идентификатор сессии Web-сервиса. + Значение.Добавить("BackgroundJob"); // идентификатор сессии обработки заданий. + Значение.Добавить("WebServerExtension"); // идентификатор расширения Web-сервера. + + АдминистрированиеКластера.ДобавитьУсловиеФильтра(Фильтр, "ИдентификаторКлиентскогоПриложения", ВидСравнения.ВСписке, Значение); + + КоличествоПопыток = 3; + ВсеСоединенияРазорваны = Ложь; + + Для ТекущаяПопытка = 0 По КоличествоПопыток Цикл + + Соединения = ПолучитьСоединения( + COMСоединитель, + СоединениеСАгентомСервера, + Кластер, + ПараметрыАдминистрированияИБ, + Фильтр, + Ложь); + + Если Соединения.Количество() = 0 Тогда + + ВсеСоединенияРазорваны = Истина; + Прервать; + + ИначеЕсли ТекущаяПопытка = КоличествоПопыток Тогда + + Прервать; + + КонецЕсли; + + Для каждого Соединение Из Соединения Цикл + + Попытка + + Соединение.СоединениеСРабочимПроцессом.Disconnect(Соединение.Соединение); + + Исключение + + // Соединение могло уже завершиться к моменту вызова Disconnect. + Продолжить; + + КонецПопытки; + + КонецЦикла; + + КонецЦикла; + + Если НЕ ВсеСоединенияРазорваны Тогда + + ВызватьИсключение НСтр("ru = 'Не удалось разорвать соединения.'"); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПрофилиБезопасности + +// Возвращает имя профиля безопасности, назначенного для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: +// Строка - имя профиля безопасности, назначенного для информационной базы. Если для информационной базы не назначен +// профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + Если ЗначениеЗаполнено(ИнформационнаяБаза.SecurityProfileName) Тогда + Результат = ИнформационнаяБаза.SecurityProfileName; + Иначе + Результат = ""; + КонецЕсли; + + ИнформационнаяБаза = Неопределено; + СоединениеСРабочимПроцессом = Неопределено; + Кластер = Неопределено; + СоединениеСАгентомСервера = Неопределено; + COMСоединитель = Неопределено; + + Возврат Результат; + +КонецФункции + +// Возвращает имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности +// безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: +// Строка - имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности безопасного +// режима. Если для информационной базы не назначен профиль безопасности, возвращается пустая строка. +// +Функция ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + Если ЗначениеЗаполнено(ИнформационнаяБаза.SafeModeSecurityProfileName) Тогда + Результат = ИнформационнаяБаза.SafeModeSecurityProfileName; + Иначе + Результат = ""; + КонецЕсли; + + ИнформационнаяБаза = Неопределено; + СоединениеСРабочимПроцессом = Неопределено; + Кластер = Неопределено; + СоединениеСАгентомСервера = Неопределено; + COMСоединитель = Неопределено; + + Возврат Результат; + +КонецФункции + +// Назначает для информационной базы использование профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности. +// +Процедура УстановитьПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач ИмяПрофиля = "") Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + ИнформационнаяБаза.SecurityProfileName = ИмяПрофиля; + + СоединениеСРабочимПроцессом.UpdateInfoBase(ИнформационнаяБаза); + + ИнформационнаяБаза = Неопределено; + СоединениеСРабочимПроцессом = Неопределено; + Кластер = Неопределено; + СоединениеСАгентомСервера = Неопределено; + COMСоединитель = Неопределено + +КонецПроцедуры + +// Назначает для информационной базы использование профиля безопасности безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности безопасного режима. +// +Процедура УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач ИмяПрофиля = "") Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + СоединениеСРабочимПроцессом = СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер); + + ИнформационнаяБаза = ПолучитьИБ( + СоединениеСРабочимПроцессом, + Кластер, + ПараметрыАдминистрированияИБ.ИмяВКластере, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + ИнформационнаяБаза.SafeModeSecurityProfileName = ИмяПрофиля; + + СоединениеСРабочимПроцессом.UpdateInfoBase(ИнформационнаяБаза); + + ИнформационнаяБаза = Неопределено; + СоединениеСРабочимПроцессом = Неопределено; + Кластер = Неопределено; + СоединениеСАгентомСервера = Неопределено; + COMСоединитель = Неопределено + +КонецПроцедуры + +// Проверяет существование в кластере серверов профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности, существование которого проверяется. +// +Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + Для Каждого ПрофильБезопасности Из СоединениеСАгентомСервера.GetSecurityProfiles(Кластер) Цикл + + Если ПрофильБезопасности.Name = ИмяПрофиля Тогда + Возврат Истина; + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Возвращает свойства профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка, имя профиля безопасности. +// +// Возвращаемое значение: +// Структура - структура, описывающая профиль безопасности, описание см. +// АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Функция ПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ПрофильБезопасности = ПолучитьПрофильБезопасности(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + + Результат = ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора( + ПрофильБезопасности, + СловарьСвойствПрофиляБезопасности()); + + // Виртуальный каталоги + Результат.Вставить("ВиртуальныеКаталоги", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьВиртуальныеКаталоги(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствВиртуальногоКаталога())); + + // Разрешенные COM-классы + Результат.Вставить("COMКлассы", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьCOMКлассы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствCOMКласса())); + + // Внешние компоненты + Результат.Вставить("ВнешниеКомпоненты", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьВнешниеКомпоненты(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствВнешнейКомпоненты())); + + // Внешние модули + Результат.Вставить("ВнешниеМодули", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьВнешниеМодули(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствВнешнегоМодуля())); + + // Приложения ОС + Результат.Вставить("ПриложенияОС", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьПриложенияОС(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствПриложенияОС())); + + // Интернет-ресурсы + Результат.Вставить("ИнтернетРесурсы", + ОписанияОбъектовОбъектнойМоделиCOMАдминистратора( + ПолучитьИнтернетРесурсы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля), + СловарьСвойствИнтернетРесурса())); + + Возврат Результат; + +КонецФункции + +// Создает профиль безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// СвойстваПрофиляБезопасности - Структура - структура, описывающая свойства создаваемого профиля безопасности, +// описание см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Процедура СоздатьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ПрофильБезопасности = СоединениеСАгентомСервера.CreateSecurityProfile(); + ПрименитьИзмененияСвойствПрофиляБезопасности(СоединениеСАгентомСервера, Кластер, ПрофильБезопасности, СвойстваПрофиляБезопасности); + +КонецПроцедуры + +// Устанавливает свойства для существующего профиля безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// СвойстваПрофиляБезопасности - Структура - структура, описывающая устанавливаемые для профиля безопасности свойства, +// описание см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Процедура УстановитьСвойстваПрофиляБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ПрофильБезопасности = ПолучитьПрофильБезопасности( + СоединениеСАгентомСервера, + Кластер, + СвойстваПрофиляБезопасности.Имя); + + ПрименитьИзмененияСвойствПрофиляБезопасности(СоединениеСАгентомСервера, Кластер, ПрофильБезопасности, СвойстваПрофиляБезопасности); + +КонецПроцедуры + +// Удаляет профиль безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// +Процедура УдалитьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + COMСоединитель = COMСоединитель(); + + СоединениеСАгентомСервера = СоединениеСАгентомСервера( + COMСоединитель, + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + ПараметрыАдминистрированияКластера.ПортАгентаСервера); + + Кластер = ПолучитьКластер( + СоединениеСАгентомСервера, + ПараметрыАдминистрированияКластера.ПортКластера, + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера, + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера); + + ПолучитьПрофильБезопасности( + СоединениеСАгентомСервера, + Кластер, + ИмяПрофиля); + + СоединениеСАгентомСервера.UnregSecurityProfile(Кластер, ИмяПрофиля); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Создает COM-объект V8*.ComConnector. +// +// Возвращаемое значение: +// COMОбъект. +// +Функция COMСоединитель() + + Если БезопасныйРежим() <> Ложь Тогда + ВызватьИсключение НСтр("ru = 'Администрирование кластера невозможно в безопасном режиме'"); + КонецЕсли; + + Если ОбщегоНазначения.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'В модели сервиса недопустимо выполнение прикладной информационной базой функций администрирования кластера'"); + КонецЕсли; + + Возврат Новый COMОбъект(ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); + +КонецФункции + +// Устанавливает соединение с агентом сервера. +// +// Параметры: +// COMСоединитель - COMОбъект - com-объект V8*.ComConnector. +// АдресАгентаСервера - Строка - сетевой адрес агента сервера. +// ПортАгентаСервера - Число - сетевой порт агента сервера (типичное значение 1540). +// +// Возвращаемое значение: +// COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// +Функция СоединениеСАгентомСервера(COMСоединитель, Знач АдресАгентаСервера, Знач ПортАгентаСервера) + + АдресИПорт = АдресАгентаСервера + ":" + Формат(ПортАгентаСервера, "ЧГ=0"); + Попытка + + СтрокаСоединенияСАгентомСервера = "tcp://" + АдресИПорт; + СоединениеСАгентомСервера = COMСоединитель.ConnectAgent(СтрокаСоединенияСАгентомСервера); + Возврат СоединениеСАгентомСервера; + + Исключение + ВызватьИсключение; + КонецПопытки; + +КонецФункции + +// Возвращает кластер серверов. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// ПортКластера - Число - сетевой порт менеджера кластера (типичное значение 1541). +// ИмяАдминистратораКластера - Строка - имя учетной записи администратора кластера. +// ПарольАдминистратораКластера - Строка - пароль учетной записи администратора кластера. +// +// Возвращаемое значение: +// COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// +Функция ПолучитьКластер(СоединениеСАгентомСервера, Знач ПортКластера, Знач ИмяАдминистратораКластера, Знач ПарольАдминистратораКластера) + + Для Каждого Кластер Из СоединениеСАгентомСервера.GetClusters() Цикл + Если Кластер.MainPort = ПортКластера Тогда + Попытка + СоединениеСАгентомСервера.Authenticate(Кластер, ИмяАдминистратораКластера, ПарольАдминистратораКластера); + Возврат Кластер; + Исключение + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'На рабочем сервере %1 не найден кластер %2'"), + СоединениеСАгентомСервера.ConnectionString, + ПортКластера); + +КонецФункции + +// Устанавливает соединение с рабочим процессом. +// +// Параметры: +// COMСоединитель - COMОбъект, com-объект V8*.ComConnector. +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// +// Возвращаемое значение: +// COMОбъект - com-объект, реализующий интерфейс IV8ServerConnection. +// +Функция СоединениеСРабочимПроцессом(COMСоединитель, СоединениеСАгентомСервера, Кластер) + + Для Каждого РабочийПроцесс Из СоединениеСАгентомСервера.GetWorkingProcesses(Кластер) Цикл + Если РабочийПроцесс.Running И РабочийПроцесс.IsEnable Тогда + СтрокаСоединенияСРабочимПроцессом = РабочийПроцесс.HostName + ":" + Формат(РабочийПроцесс.MainPort, "ЧГ="); + Возврат COMСоединитель.ConnectWorkingProcess(СтрокаСоединенияСРабочимПроцессом); + КонецЕсли; + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдено активных рабочих процессов.'"), + Кластер.HostName, + Формат(Кластер.MainPort, "ЧГ=0")); + +КонецФункции + +// Возвращает описание информационной базы. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИмяВКластере - Строка - имя информационной базы в кластере серверов. +// +// Возвращаемое значение: +// COMОбъект - com-объект, реализующий интерфейс IInfoBaseShort. +// +Функция ПолучитьОписаниеИБ(СоединениеСАгентомСервера, Кластер, Знач ИмяВКластере) + + Для Каждого ОписаниеИнформационнойБазы Из СоединениеСАгентомСервера.GetInfoBases(Кластер) Цикл + + Если ОписаниеИнформационнойБазы.Name = ИмяВКластере Тогда + + Возврат ОписаниеИнформационнойБазы; + + КонецЕсли; + + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""'"), + Кластер.HostName, + Формат(Кластер.MainPort, "ЧГ=0"), + ИмяВКластере); + +КонецФункции + +// Возвращает информационную базу. +// +// Параметры: +// СоединениеСРабочимПроцессом - COMОбъект - com-объект, реализующий интерфейс IV8ServerConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИмяВКластере - Строка - имя информационной базы в кластере серверов. +// ИмяАдминистратораИБ - Строка - имя администратора информационной базы. +// ПарольАдминистратораИБ - Строка - пароль администратора информационной базы. +// +// Возвращаемое значение: +// COMОбъект - com-объект, реализующий интерфейс IInfoBaseInfo. +// +Функция ПолучитьИБ(СоединениеСРабочимПроцессом, Кластер, Знач ИмяВКластере, Знач ИмяАдминистратораИБ, Знач ПарольАдминистратораИБ) + + СоединениеСРабочимПроцессом.AddAuthentication(ИмяАдминистратораИБ, ПарольАдминистратораИБ); + + Для Каждого ИнформационнаяБаза Из СоединениеСРабочимПроцессом.GetInfoBases() Цикл + + Если ИнформационнаяБаза.Name = ИмяВКластере Тогда + + Если Не ЗначениеЗаполнено(ИнформационнаяБаза.DBMS) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неправильные имя и пароль администратора информационной базы %1 в кластере серверов %2:%3 (имя: ""%4"").'"), + ИмяВКластере, + Кластер.HostName, + Кластер.MainPort, + ИмяАдминистратораИБ); + + КонецЕсли; + + Возврат ИнформационнаяБаза; + + КонецЕсли; + + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найдена информационная база ""%3""'"), + Кластер.HostName, + Формат(Кластер.MainPort, "ЧГ=0"), + ИмяВКластере); + +КонецФункции + +// Возвращает сеансы информационной базы. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИнформационнаяБаза - COMОбъект - com-объект, реализующий интерфейс IInfoBaseInfo. +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// Описания - Булево - если значение равно Ложь, функция вернет массив com-объектов, реализующих интерфейс ISessionInfo, +// иначе - массив структур, описывающих свойства сеансов, +// описание см. АдминистрированиеКластера.СвойстваСеанса(). +// +// Возвращаемое значение: Массив(COMОбъект), Массив(Структура). +// +Функция ПолучитьСеансы(СоединениеСАгентомСервера, Кластер, ИнформационнаяБаза, Знач Фильтр = Неопределено, Знач Описания = Ложь) + + Сеансы = Новый Массив; + + Словарь = СловарьСвойствСеансов(); + БлокировкиСеансов = Новый Соответствие(); + + Для Каждого Блокировка Из СоединениеСАгентомСервера.GetInfoBaseLocks(Кластер, ИнформационнаяБаза) Цикл + + Если Блокировка.Session <> Неопределено Тогда + + АдминистрированиеКластера.ДанныеСеансаИзБлокировки( + БлокировкиСеансов, + Блокировка.LockDescr, + Блокировка.Session.SessionID, + ИнформационнаяБаза.Name); + + КонецЕсли; + + КонецЦикла; + + Для Каждого Сеанс Из СоединениеСАгентомСервера.GetInfoBaseSessions(Кластер, ИнформационнаяБаза) Цикл + + ОписаниеСеанса = ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(Сеанс, Словарь); + ОписаниеСеанса.Вставить("РежимБлокировкиБД", + ?(БлокировкиСеансов[ОписаниеСеанса.Номер] <> Неопределено, БлокировкиСеансов[ОписаниеСеанса.Номер].РежимБлокировкиБД, "")); + ОписаниеСеанса.Вставить("Разделитель", + ?(БлокировкиСеансов[ОписаниеСеанса.Номер] <> Неопределено, БлокировкиСеансов[ОписаниеСеанса.Номер].Разделитель, "")); + + Если АдминистрированиеКластера.ПроверитьУсловияФильтра(ОписаниеСеанса, Фильтр) Тогда + + Если Описания Тогда + Сеансы.Добавить(ОписаниеСеанса); + Иначе + Сеансы.Добавить(Сеанс); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат Сеансы; + +КонецФункции + +// Возвращает соединения с информационной базой. +// +// Параметры: +// COMСоединитель - COMОбъект - com-объект V8*.ComConnector. +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИмяВКластере - Строка - имя информационной базы в кластере серверов. +// ИмяАдминистратораИБ - Строка - имя администратора информационной базы. +// ПарольАдминистратораИБ - Строка - пароль администратора информационной базы. +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// Описания - Булево - если значение равно Ложь, функция вернет массив com-объектов, реализующих интерфейс +// IConnectionShort, иначе - массив структур, описывающих свойства соединений, +// описание см. АдминистрированиеКластера.СвойстваСоединения(). +// +// Возвращаемое значение: +// Массив - массив com-объектов или массив структур. +// +Функция ПолучитьСоединения(COMСоединитель, СоединениеСАгентомСервера, Кластер, ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено, Знач Описания = Ложь) + + ИмяВКластере = ПараметрыАдминистрированияИБ.ИмяВКластере; + ИмяАдминистратораИБ = ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы; + ПарольАдминистратораИБ = ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы; + + Соединения = Новый Массив(); + Словарь = СловарьСвойствСоединений(); + + // Рабочие процессы, зарегистрированные в кластере. + Для каждого РабочийПроцесс Из СоединениеСАгентомСервера.GetWorkingProcesses(Кластер) Цикл + + Если РабочийПроцесс.Running = 0 Тогда + Продолжить; + КонецЕсли; + + // Административное соединение с рабочим процессом. + СтрокаСоединенияСРабочимПроцессом = РабочийПроцесс.HostName + ":" + Формат(РабочийПроцесс.MainPort, "ЧГ="); + СоединениеСРабочимПроцессом = COMСоединитель.ConnectWorkingProcess(СтрокаСоединенияСРабочимПроцессом); + + // Получение информационных баз (аутентификация не требуется). + Для каждого ИнформационнаяБаза Из СоединениеСРабочимПроцессом.GetInfoBases() Цикл + + // Это требуемая информационная база. + Если ИнформационнаяБаза.Name = ИмяВКластере Тогда + + // Для получение соединений с информационной базой требуется аутентификация. + СоединениеСРабочимПроцессом.AddAuthentication(ИмяАдминистратораИБ, ПарольАдминистратораИБ); + + // Получение соединений с информационной базой. + Для каждого Соединение Из СоединениеСРабочимПроцессом.GetInfoBaseConnections(ИнформационнаяБаза) Цикл + + ОписаниеСоединения = ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(Соединение, Словарь); + + // Проверка соединения на соответствие требуемым фильтрам. + Если АдминистрированиеКластера.ПроверитьУсловияФильтра(ОписаниеСоединения, Фильтр) Тогда + + Если Описания Тогда + + Соединения.Добавить(ОписаниеСоединения); + + Иначе + + Соединения.Добавить(Новый Структура("СоединениеСРабочимПроцессом, Соединение", СоединениеСРабочимПроцессом, Соединение)); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Возврат Соединения; + +КонецФункции + +// Возвращает профиль безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИмяПрофиля - Строка - имя профиля безопасности. +// +// Возвращаемое значение: +// COMОбъект - com-объект, реализующий интерфейс ISecurityProfile. +// +Функция ПолучитьПрофильБезопасности(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + Для Каждого ПрофильБезопасности Из СоединениеСАгентомСервера.GetSecurityProfiles(Кластер) Цикл + + Если ПрофильБезопасности.Name = ИмяПрофиля Тогда + Возврат ПрофильБезопасности; + КонецЕсли; + + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1:%2 не найден профиль безопасности ""%3""'"), + Кластер.HostName, + Формат(Кластер.MainPort, "ЧГ=0"), + ИмяПрофиля); + +КонецФункции + +// Возвращает виртуальные каталоги, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИмяПрофиля - Строка - имя профиля безопасности. +// +// Возвращаемое значение: +// Массив - массив com-объектов, реализующих интерфейс ISecurityProfileVirtualDirectory. +// +Функция ПолучитьВиртуальныеКаталоги(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + ВиртуальныеКаталоги = Новый Массив(); + + Для Каждого ВиртуальныйКаталог Из СоединениеСАгентомСервера.GetSecurityProfileVirtualDirectories(Кластер, ИмяПрофиля) Цикл + + ВиртуальныеКаталоги.Добавить(ВиртуальныйКаталог); + + КонецЦикла; + + Возврат ВиртуальныеКаталоги; + +КонецФункции + +// Возвращает COM-классы, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИмяПрофиля - Строка - имя профиля безопасности. +// +// Возвращаемое значение: +// Массив- массив com-объектов, реализующих интерфейс ISecurityProfileCOMClass. +// +Функция ПолучитьCOMКлассы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + COMКлассы = Новый Массив(); + + Для Каждого COMКласс Из СоединениеСАгентомСервера.GetSecurityProfileCOMClasses(Кластер, ИмяПрофиля) Цикл + + COMКлассы.Добавить(COMКласс); + + КонецЦикла; + + Возврат COMКлассы; + +КонецФункции + +// Возвращает внешние компоненты, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИмяПрофиля - Строка - имя профиля безопасности. +// +// Возвращаемое значение: +// Массив - массив com-объектов, реализующих интерфейс ISecurityProfileAddIn. +// +Функция ПолучитьВнешниеКомпоненты(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + ВнешниеКомпоненты = Новый Массив(); + + Для Каждого ВнешняяКомпонента Из СоединениеСАгентомСервера.GetSecurityProfileAddIns(Кластер, ИмяПрофиля) Цикл + + ВнешниеКомпоненты.Добавить(ВнешняяКомпонента); + + КонецЦикла; + + Возврат ВнешниеКомпоненты; + +КонецФункции + +// Возвращает внешние модули, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИмяПрофиля - Строка - имя профиля безопасности. +// +// Возвращаемое значение: +// Массив - массив com-объектов, реализующих интерфейс ISecurityProfileExternalModule. +// +Функция ПолучитьВнешниеМодули(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + ВнешниеМодули = Новый Массив(); + + Для Каждого ВнешнийМодуль Из СоединениеСАгентомСервера.GetSecurityProfileUnSafeExternalModules(Кластер, ИмяПрофиля) Цикл + + ВнешниеМодули.Добавить(ВнешнийМодуль); + + КонецЦикла; + + Возврат ВнешниеМодули; + +КонецФункции + +// Возвращает приложения ОС, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИмяПрофиля - Строка - имя профиля безопасности. +// +// Возвращаемое значение: +// Массив - массив com-объектов, реализующих интерфейс ISecurityProfileApplication. +// +Функция ПолучитьПриложенияОС(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + ПриложенияОС = Новый Массив(); + + Для Каждого ПриложениеОС Из СоединениеСАгентомСервера.GetSecurityProfileApplications(Кластер, ИмяПрофиля) Цикл + + ПриложенияОС.Добавить(ПриложениеОС); + + КонецЦикла; + + Возврат ПриложенияОС; + +КонецФункции + +// Возвращает приложения ОС, разрешенные в профиле безопасности. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ИмяПрофиля - Строка - имя профиля безопасности. +// +// Возвращаемое значение: +// Массив - массив com-объектов, реализующих интерфейс ISecurityProfileInternetResource. +// +Функция ПолучитьИнтернетРесурсы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля) + + ИнтернетРесурсы = Новый Массив(); + + Для Каждого ИнтернетРесурс Из СоединениеСАгентомСервера.GetSecurityProfileInternetResources(Кластер, ИмяПрофиля) Цикл + + ИнтернетРесурсы.Добавить(ИнтернетРесурс); + + КонецЦикла; + + Возврат ИнтернетРесурсы; + +КонецФункции + +// Перезаписывает свойства профиля безопасности переданными. +// +// Параметры: +// СоединениеСАгентомСервера - COMОбъект - com-объект, реализующий интерфейс IV8AgentConnection. +// Кластер - COMОбъект - com-объект, реализующий интерфейс IClusterInfo. +// ПрофильБезопасности - COMОбъект - com-объект, реализующий интерфейс ISecurityProfile. +// СвойстваПрофиляБезопасности - Структура - структура, описывающая профиль безопасности, +// описание см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Процедура ПрименитьИзмененияСвойствПрофиляБезопасности(СоединениеСАгентомСервера, Кластер, ПрофильБезопасности, СвойстваПрофиляБезопасности) + + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ПрофильБезопасности, + СвойстваПрофиляБезопасности, + СловарьСвойствПрофиляБезопасности()); + + ИмяПрофиля = СвойстваПрофиляБезопасности.Имя; + + СоединениеСАгентомСервера.RegSecurityProfile(Кластер, ПрофильБезопасности); + + // Виртуальный каталоги + УдаляемыеВиртуальныеКаталоги = ПолучитьВиртуальныеКаталоги(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемыйВиртуальныйКаталог Из УдаляемыеВиртуальныеКаталоги Цикл + СоединениеСАгентомСервера.UnregSecurityProfileVirtualDirectory( + Кластер, + ИмяПрофиля, + УдаляемыйВиртуальныйКаталог.Alias); + КонецЦикла; + СоздаваемыеВиртуальныеКаталоги = СвойстваПрофиляБезопасности.ВиртуальныеКаталоги; + Для Каждого СоздаваемыйВиртуальныйКаталог Из СоздаваемыеВиртуальныеКаталоги Цикл + ВиртуальныйКаталог = СоединениеСАгентомСервера.CreateSecurityProfileVirtualDirectory(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ВиртуальныйКаталог, + СоздаваемыйВиртуальныйКаталог, + СловарьСвойствВиртуальногоКаталога()); + СоединениеСАгентомСервера.RegSecurityProfileVirtualDirectory(Кластер, ИмяПрофиля, ВиртуальныйКаталог); + КонецЦикла; + + // Разрешенные COM-классы + УдаляемыеCOMКлассы = ПолучитьCOMКлассы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемыйCOMКласс Из УдаляемыеCOMКлассы Цикл + СоединениеСАгентомСервера.UnregSecurityProfileCOMClass( + Кластер, + ИмяПрофиля, + УдаляемыйCOMКласс.Name); + КонецЦикла; + СоздаваемыеCOMКлассы = СвойстваПрофиляБезопасности.COMКлассы; + Для Каждого СоздаваемыйCOMКласс Из СоздаваемыеCOMКлассы Цикл + COMКласс = СоединениеСАгентомСервера.CreateSecurityProfileCOMClass(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + COMКласс, + СоздаваемыйCOMКласс, + СловарьСвойствCOMКласса()); + СоединениеСАгентомСервера.RegSecurityProfileCOMClass(Кластер, ИмяПрофиля, COMКласс); + КонецЦикла; + + // Внешние компоненты + УдаляемыеВнешниеКомпоненты = ПолучитьВнешниеКомпоненты(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемыйВнешнийКомпонент Из УдаляемыеВнешниеКомпоненты Цикл + СоединениеСАгентомСервера.UnregSecurityProfileAddIn( + Кластер, + ИмяПрофиля, + УдаляемыйВнешнийКомпонент.Name); + КонецЦикла; + СоздаваемыеВнешниеКомпоненты = СвойстваПрофиляБезопасности.ВнешниеКомпоненты; + Для Каждого СоздаваемыйВнешнийКомпонент Из СоздаваемыеВнешниеКомпоненты Цикл + ВнешнийКомпонент = СоединениеСАгентомСервера.CreateSecurityProfileAddIn(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ВнешнийКомпонент, + СоздаваемыйВнешнийКомпонент, + СловарьСвойствВнешнейКомпоненты()); + СоединениеСАгентомСервера.RegSecurityProfileAddIn(Кластер, ИмяПрофиля, ВнешнийКомпонент); + КонецЦикла; + + // Внешние модули + УдаляемыеВнешниеМодули = ПолучитьВнешниеМодули(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемыйВнешнийМодуль Из УдаляемыеВнешниеМодули Цикл + СоединениеСАгентомСервера.UnregSecurityProfileUnSafeExternalModule( + Кластер, + ИмяПрофиля, + УдаляемыйВнешнийМодуль.Name); + КонецЦикла; + СоздаваемыеВнешниеМодули = СвойстваПрофиляБезопасности.ВнешниеМодули; + Для Каждого СоздаваемыйВнешнийМодуль Из СоздаваемыеВнешниеМодули Цикл + ВнешнийМодуль = СоединениеСАгентомСервера.CreateSecurityProfileUnSafeExternalModule(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ВнешнийМодуль, + СоздаваемыйВнешнийМодуль, + СловарьСвойствВнешнегоМодуля()); + СоединениеСАгентомСервера.RegSecurityProfileUnSafeExternalModule(Кластер, ИмяПрофиля, ВнешнийМодуль); + КонецЦикла; + + // Приложения ОС + УдаляемыеПриложенияОС = ПолучитьПриложенияОС(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемоеПриложениеОС Из УдаляемыеПриложенияОС Цикл + СоединениеСАгентомСервера.UnregSecurityProfileApplication( + Кластер, + ИмяПрофиля, + УдаляемоеПриложениеОС.Name); + КонецЦикла; + СоздаваемыеПриложенияОС = СвойстваПрофиляБезопасности.ПриложенияОС; + Для Каждого СоздаваемоеПриложениеОС Из СоздаваемыеПриложенияОС Цикл + ПриложениеОС = СоединениеСАгентомСервера.CreateSecurityProfileApplication(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ПриложениеОС, + СоздаваемоеПриложениеОС, + СловарьСвойствПриложенияОС()); + СоединениеСАгентомСервера.RegSecurityProfileApplication(Кластер, ИмяПрофиля, ПриложениеОС); + КонецЦикла; + + // Интернет-ресурсы + УдаляемыеИнтернетРесурсы = ПолучитьИнтернетРесурсы(СоединениеСАгентомСервера, Кластер, ИмяПрофиля); + Для Каждого УдаляемыйИнтернетРесурс Из УдаляемыеИнтернетРесурсы Цикл + СоединениеСАгентомСервера.UnregSecurityProfileInternetResource( + Кластер, + ИмяПрофиля, + УдаляемыйИнтернетРесурс.Name); + КонецЦикла; + СоздаваемыеИнтернетРесурсы = СвойстваПрофиляБезопасности.ИнтернетРесурсы; + Для Каждого СоздаваемыйИнтернетРесурс Из СоздаваемыеИнтернетРесурсы Цикл + ИнтернетРесурс = СоединениеСАгентомСервера.CreateSecurityProfileInternetResource(); + ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию( + ИнтернетРесурс, + СоздаваемыйИнтернетРесурс, + СловарьСвойствИнтернетРесурса()); + СоединениеСАгентомСервера.RegSecurityProfileInternetResource(Кластер, ИмяПрофиля, ИнтернетРесурс); + КонецЦикла; + +КонецПроцедуры + +// Формирует описание для объекта объектной модели COM-администратора. +// +// Параметры: +// Объект - COMОбъект - com-объект, для которого формируется описание. +// Словарь - Соответствие - содержит соответствие свойств объекта и в описании: +// * Ключ - Имя свойства в описании, +// * Значение - Имя свойства объекта. +// +// Возвращаемое значение: +// Структура - описание объекта объектной модели COM-администратора по переданному словарю. +// +Функция ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(Знач Объект, Знач Словарь) + + СвойстваОбъекта = Новый Структура; + Для Каждого ФрагментСловаря Из Словарь Цикл + Если ТипЗнч(ФрагментСловаря.Значение) = Тип("Строка") Тогда + СвойстваОбъекта.Вставить(ФрагментСловаря.Значение); + ИначеЕсли ТипЗнч(ФрагментСловаря.Значение) = Тип("ФиксированнаяСтруктура") Тогда + СвойстваОбъекта.Вставить(ФрагментСловаря.Значение.Ключ); + КонецЕсли; + КонецЦикла; + ЗаполнитьЗначенияСвойств(СвойстваОбъекта, Объект); + + Описание = Новый Структура(); + Для Каждого ФрагментСловаря Из Словарь Цикл + Если ТипЗнч(ФрагментСловаря.Значение) = Тип("Строка") Тогда + Описание.Вставить(ФрагментСловаря.Ключ, СвойстваОбъекта[ФрагментСловаря.Значение]); + ИначеЕсли ТипЗнч(ФрагментСловаря.Значение) = Тип("ФиксированнаяСтруктура") Тогда + ПодчиненныйОбъект = СвойстваОбъекта[ФрагментСловаря.Значение.Ключ]; + Если ПодчиненныйОбъект = Неопределено Тогда + Описание.Вставить(ФрагментСловаря.Ключ, Неопределено); + Иначе + Свойство = ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(ПодчиненныйОбъект, ФрагментСловаря.Значение.Словарь); + Описание.Вставить(ФрагментСловаря.Ключ, Свойство); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Описание; + +КонецФункции + +// Формирует описания объектов объектной модели COM-администратора. +// +// Параметры: +// Объекты - Массив - массив com-объектов. +// Словарь - Соответствие - содержит соответствие свойств объекта и в описании: +// * Ключ - Имя свойства в описании, +// * Значение - Имя свойства объекта. +// +// Возвращаемое значение: Массив(Структура), описания объекта объектной модели COM-администратора +// по переданному словарю. +// +Функция ОписанияОбъектовОбъектнойМоделиCOMАдминистратора(Знач Объекты, Знач Словарь) + + Описания = Новый Массив(); + + Для Каждого Объект Из Объекты Цикл + Описания.Добавить(ОписаниеОбъектаОбъектнойМоделиCOMАдминистратора(Объект, Словарь)); + КонецЦикла; + + Возврат Описания; + +КонецФункции + +// Заполняет свойства объекта объектной модели COM-администратора по свойствам из +// переданного описания. +// +// Параметры: +// Объект - COMОбъект - com-объект, свойства которого заполняются. +// Описание - Структура - описание, используемое для заполнения свойств объекта. +// Словарь - Соответствие - содержит соответствие свойств объекта и в описании: +// * Ключ - Имя свойства в описании, +// * Значение - Имя свойства объекта. +// +Процедура ЗаполнитьСвойстваОбъектаОбъектнойМоделиCOMАдминистратораПоОписанию(Объект, Знач Описание, Знач Словарь) + + СвойстваОбъекта = Новый Структура; + Для Каждого ФрагментСловаря Из Словарь Цикл + Если ТипЗнч(ФрагментСловаря.Значение) = Тип("Строка") Тогда + Если Описание.Свойство(ФрагментСловаря.Ключ) Тогда + СвойстваОбъекта.Вставить(ФрагментСловаря.Значение, Описание[ФрагментСловаря.Ключ]); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ЗаполнитьЗначенияСвойств(Объект, СвойстваОбъекта); + +КонецПроцедуры + +// Возвращает соответствие имен свойств информационной базы, описывающих состояние +// блокировки сеансов и регламентных заданий, для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. +// АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий()). +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий() + + Результат = АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий(); + + Результат.БлокировкаСеансов = "SessionsDenied"; + Результат.ДатаС = "DeniedFrom"; + Результат.ДатаПо = "DeniedTo"; + Результат.Сообщение = "DeniedMessage"; + Результат.КодРазрешения = "PermissionCode"; + Результат.ПараметрБлокировки = "DeniedParameter"; + Результат.БлокировкаРегламентныхЗаданий = "ScheduledJobsDenied"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств сеансов информационной базы для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваСеанса()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствСеансов() + + Лицензия = Новый Структура; + Лицензия.Вставить("Ключ", "License"); + Лицензия.Вставить("Словарь", СловарьСвойствЛицензии()); + + ОписаниеСоединения = Новый Структура; + ОписаниеСоединения.Вставить("Ключ", "Connection"); + ОписаниеСоединения.Вставить("Словарь", СловарьСвойствОписанияСоединения()); + + РабочийПроцесс = Новый Структура; + РабочийПроцесс.Вставить("Ключ", "Process"); + РабочийПроцесс.Вставить("Словарь", СловарьСвойствРабочегоПроцесса()); + + Результат = АдминистрированиеКластера.СвойстваСеанса(); + + Результат.Номер = "SessionID"; + Результат.ИмяПользователя = "UserName"; + Результат.ИмяКлиентскогоКомпьютера = "Host"; + Результат.ИдентификаторКлиентскогоПриложения = "AppID"; + Результат.ИдентификаторЯзыка = "Locale"; + Результат.МоментСозданияСеанса = "StartedAt"; + Результат.МоментПоследнейАктивностиСеанса = "LastActiveAt"; + Результат.БлокировкаСУБД = "blockedByDBMS"; + Результат.Блокировка = "blockedByLS"; + Результат.Передано = "bytesAll"; + Результат.ПереданоЗа5Минут = "bytesLast5Min"; + Результат.СерверныхВызовов = "callsAll"; + Результат.СерверныхВызововЗа5Минут = "callsLast5Min"; + Результат.ДлительностьСерверныхВызовов = "durationAll"; + Результат.ДлительностьТекущегоСерверногоВызова = "durationCurrent"; + Результат.ДлительностьСерверныхВызововЗа5Минут = "durationLast5Min"; + Результат.ПереданоСУБД = "dbmsBytesAll"; + Результат.ПереданоСУБДЗа5Минут = "dbmsBytesLast5Min"; + Результат.ДлительностьВызововСУБД = "durationAllDBMS"; + Результат.ДлительностьТекущегоВызоваСУБД = "durationCurrentDBMS"; + Результат.ДлительностьВызововСУБДЗа5Минут = "durationLast5MinDBMS"; + Результат.СоединениеСУБД = "dbProcInfo"; + Результат.ВремяСоединенияСУБД = "dbProcTook"; + Результат.МоментЗахватаСоединенияСУБД = "dbProcTookAt"; + Результат.Спящий = "Hibernate"; + Результат.ЗавершитьЧерез = "HibernateSessionTerminateTime"; + Результат.ЗаснутьЧерез = "PassiveSessionHibernateTime"; + Результат.ПрочитаноСДиска = "InBytesAll"; + Результат.ПрочитаноСДискаВТекущемВызове = "InBytesCurrent"; + Результат.ПрочитаноСДискаЗа5Минут = "InBytesLast5Min"; + Результат.ЗанятоПамяти = "MemoryAll"; + Результат.ЗанятоПамятиВТекущемВызове = "MemoryCurrent"; + Результат.ЗанятоПамятиЗа5Минут = "MemoryLast5Min"; + Результат.ЗаписаноНаДиск = "OutBytesAll"; + Результат.ЗаписаноНаДискВТекущемВызове = "OutBytesCurrent"; + Результат.ЗаписаноНаДискЗа5Минут = "OutBytesLast5Min"; + Результат.Лицензия = Новый ФиксированнаяСтруктура(Лицензия); + Результат.ОписаниеСоединения = Новый ФиксированнаяСтруктура(ОписаниеСоединения); + Результат.РабочийПроцесс = Новый ФиксированнаяСтруктура(РабочийПроцесс); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств соединений с информационной базой для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// +Функция СловарьСвойствСоединений() + + Результат = АдминистрированиеКластера.СвойстваСоединения(); + + Результат.Номер = "ConnID"; + Результат.ИмяПользователя = "UserName"; + Результат.ИмяКлиентскогоКомпьютера = "HostName"; + Результат.ИдентификаторКлиентскогоПриложения = "AppID"; + Результат.МоментУстановкиСоединения = "ConnectedAt"; + Результат.РежимСоединенияСИнформационнойБазой = "IBConnMode"; + Результат.РежимСоединенияСБазойДанных = "dbConnMode"; + Результат.БлокировкаСУБД = "blockedByDBMS"; + Результат.Передано = "bytesAll"; + Результат.ПереданоЗа5Минут = "bytesLast5Min"; + Результат.СерверныхВызовов = "callsAll"; + Результат.СерверныхВызововЗа5Минут = "callsLast5Min"; + Результат.ПереданоСУБД = "dbmsBytesAll"; + Результат.ПереданоСУБДЗа5Минут = "dbmsBytesLast5Min"; + Результат.СоединениеСУБД = "dbProcInfo"; + Результат.ВремяСУБД = "dbProcTook"; + Результат.МоментЗахватаСоединенияСУБД = "dbProcTookAt"; + Результат.ДлительностьСерверныхВызовов = "durationAll"; + Результат.ДлительностьВызововСУБД = "durationAllDBMS"; + Результат.ДлительностьТекущегоСерверногоВызова = "durationCurrent"; + Результат.ДлительностьТекущегоВызоваСУБД = "durationCurrentDBMS"; + Результат.ДлительностьСерверныхВызововЗа5Минут = "durationLast5Min"; + Результат.ДлительностьВызововСУБДЗа5Минут = "durationLast5MinDBMS"; + Результат.ПрочитаноСДиска = "InBytesAll"; + Результат.ПрочитаноСДискаВТекущемВызове = "InBytesCurrent"; + Результат.ПрочитаноСДискаЗа5Минут = "InBytesLast5Min"; + Результат.ЗанятоПамяти = "MemoryAll"; + Результат.ЗанятоПамятиВТекущемВызове = "MemoryCurrent"; + Результат.ЗанятоПамятиЗа5Минут = "MemoryLast5Min"; + Результат.ЗаписаноНаДиск = "OutBytesAll"; + Результат.ЗаписаноНаДискВТекущемВызове = "OutBytesCurrent"; + Результат.ЗаписаноНаДискЗа5Минут = "OutBytesLast5Min"; + Результат.УправлениеНаходитсяНаСервере = "ThreadMode"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств профиля безопасности для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваПрофиляБезопасности()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствПрофиляБезопасности() + + Результат = АдминистрированиеКластера.СвойстваПрофиляБезопасности(); + + Результат.Имя = "Name"; + Результат.Описание = "Descr"; + Результат.ПрофильБезопасногоРежима = "SafeModeProfile"; + Результат.ПолныйДоступКПривилегированномуРежиму = "PrivilegedModeInSafeModeAllowed"; + Результат.ПолныйДоступКФункциямКриптографии = "CryptographyAllowed"; + + Результат.ПолныйДоступКРасширениюВсехМодулей = "AllModulesExtension"; + Результат.ДоступныеДляРасширенияМодули = "ModulesAvailableForExtension"; + Результат.НедоступныеДляРасширенияМодули = "ModulesNotAvailableForExtension"; + + Результат.ПолныйДоступКРасширениюПравДоступа = "RightExtension"; + Результат.РолиОграничивающиеРасширениеПравДоступа = "RightExtensionDefinitionRoles"; + + Результат.ПолныйДоступКФайловойСистеме = "FileSystemFullAccess"; + Результат.ПолныйДоступКCOMОбъектам = "COMFullAccess"; + Результат.ПолныйДоступКВнешнимКомпонентам = "AddInFullAccess"; + Результат.ПолныйДоступКВнешнимМодулям = "UnSafeExternalModuleFullAccess"; + Результат.ПолныйДоступКПриложениямОперационнойСистемы = "ExternalAppFullAccess"; + Результат.ПолныйДоступКИнтернетРесурсам = "InternetFullAccess"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств виртуального каталога для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваВиртуальногоКаталога()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствВиртуальногоКаталога() + + Результат = АдминистрированиеКластера.СвойстваВиртуальногоКаталога(); + + Результат.ЛогическийURL = "Alias"; + Результат.ФизическийURL = "PhysicalPath"; + + Результат.Описание = "Descr"; + + Результат.ЧтениеДанных = "AllowedRead"; + Результат.ЗаписьДанных = "AllowedWrite"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств COM-класса для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваCOMКласса()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствCOMКласса() + + Результат = АдминистрированиеКластера.СвойстваCOMКласса(); + + Результат.Имя = "Name"; + Результат.Описание = "Descr"; + + Результат.ФайлМоникер = "FileName"; + Результат.CLSID = "ObjectUUID"; + Результат.Компьютер = "ComputerName"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств внешней компоненты для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваВнешнейКомпоненты()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствВнешнейКомпоненты() + + Результат = АдминистрированиеКластера.СвойстваВнешнейКомпоненты(); + + Результат.Имя = "Name"; + Результат.Описание = "Descr"; + + Результат.ХэшСумма = "AddInHash"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств внешнего модуля для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваВнешнегоМодуля()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствВнешнегоМодуля() + + Результат = АдминистрированиеКластера.СвойстваВнешнегоМодуля(); + + Результат.Имя = "Name"; + Результат.Описание = "Descr"; + + Результат.ХэшСумма = "ExternalModuleHash"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств приложения операционной системы для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваПриложенияОС()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствПриложенияОС() + + Результат = АдминистрированиеКластера.СвойстваПриложенияОС(); + + Результат.Имя = "Name"; + Результат.Описание = "Descr"; + + Результат.ШаблонСтрокиЗапуска = "CommandMask"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств Интернет-ресурса для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваИнтернетРесурса()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствИнтернетРесурса() + + Результат = АдминистрированиеКластера.СвойстваИнтернетРесурса(); + + Результат.Имя = "Name"; + Результат.Описание = "Descr"; + + Результат.Протокол = "Protocol"; + Результат.Адрес = "Address"; + Результат.Порт = "Port"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств Описания соединения для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваОписанияСоединения()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствОписанияСоединения() + + РабочийПроцесс = Новый Структура; + РабочийПроцесс.Вставить("Ключ", "Process"); + РабочийПроцесс.Вставить("Словарь", СловарьСвойствРабочегоПроцесса()); + + Результат = АдминистрированиеКластера.СвойстваОписанияСоединения(); + + Результат.ИмяПриложения = "Application"; + Результат.Блокировка = "blockedByLS"; + Результат.МоментУстановкиСоединения = "ConnectedAt"; + Результат.Номер = "ConnID"; + Результат.ИмяКлиентскогоКомпьютера = "Host"; + Результат.НомерСеанса = "SessionID"; + Результат.РабочийПроцесс = Новый ФиксированнаяСтруктура(РабочийПроцесс); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств Лицензии для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваЛицензии()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствЛицензии() + + Результат = АдминистрированиеКластера.СвойстваЛицензии(); + + Результат.ИмяФайла = "FileName"; + Результат.ПолноеПредставление = "FullPresentation"; + Результат.КраткоеПредставление = "ShortPresentation"; + Результат.ВыданаСервером = "IssuedByServer"; + Результат.ТипЛицензии = "LicenseType"; + Результат.МаксимальноеКоличествоПользователейДляКомплекта = "MaxUsersAll"; + Результат.МаксимальноеКоличествоПользователейВКлюче = "MaxUsersCur"; + Результат.ЛицензияПолученаЧерезAladdinLicenseManager = "Net"; + Результат.АдресПроцесса = "RMngrAddress"; + Результат.ИдентификаторПроцесса = "RMngrPID"; + Результат.ПортПроцесса = "RMngrPort"; + Результат.СерияКлюча = "Series"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств Рабочего процесса для структур, используемых в API и +// объектов объектной модели COM-администратора. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваРабочегоПроцесса()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствРабочегоПроцесса() + + Лицензия = Новый Структура; + Лицензия.Вставить("Ключ", "License"); + Лицензия.Вставить("Словарь", СловарьСвойствЛицензии()); + + Результат = АдминистрированиеКластера.СвойстваРабочегоПроцесса(); + + Результат.ДоступнаяПроизводительность = "AvailablePerfomance"; + Результат.ЗатраченоКлиентом = "AvgBackCallTime"; + Результат.РеакцияСервера = "AvgCallTime"; + Результат.ЗатраченоСУБД = "AvgDBCallTime"; + Результат.ЗатраченоМенеджеромБлокировок = "AvgLockCallTime"; + Результат.ЗатраченоСервером = "AvgServerCallTime"; + Результат.КлиентскихПотоков = "AvgThreads"; + Результат.ОтносительнаяПроизводительность = "Capacity"; + Результат.Соединений = "Connections"; + Результат.ИмяКомпьютера = "HostName"; + Результат.Включен = "IsEnable"; + Результат.Порт = "MainPort"; + Результат.ПревышениеНадКритическимЗначением = "MemoryExcessTime"; + Результат.ЗанятоПамяти = "MemorySize"; + Результат.Идентификатор = "PID"; + Результат.Запущен = "Running"; + Результат.КоличествоВызововПоКоторымПосчитанаСтатистика = "SelectionSize"; + Результат.МоментЗапуска = "StartedAt"; + Результат.Использование = "Use"; + Результат.Лицензия = Новый ФиксированнаяСтруктура(Лицензия); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOM/АдминистрированиеКластераCOM.mdo b/SSL/src/CommonModules/АдминистрированиеКластераCOM/АдминистрированиеКластераCOM.mdo new file mode 100644 index 000000000..b6debb446 --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOM/АдминистрированиеКластераCOM.mdo @@ -0,0 +1,11 @@ + + + АдминистрированиеКластераCOM + + ru + Администрирование кластера COM + + true + true + true + diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl index 44aebd9fe..b628059bd 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс #Область БлокировкаСеансовИЗаданий @@ -1022,7 +1030,9 @@ // Функция COMСоединитель() -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + // АПК:547-выкл код сохранен для обратной совместимости, используется в устаревшем программном интерфейсе. + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Если БезопасныйРежим() <> Ложь Тогда ВызватьИсключение НСтр("ru = 'Внимание! Администрирование кластера невозможно в безопасном режиме'"); КонецЕсли; @@ -1036,6 +1046,8 @@ Возврат Новый COMОбъект(СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ИмяCOMСоединителя); #КонецЕсли + // АПК:547-вкл + КонецФункции // Устанавливает соединение с агентом сервера. diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/АдминистрированиеКластераCOMКлиентСервер.mdo b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/АдминистрированиеКластераCOMКлиентСервер.mdo index 306f8562d..d0ce4879e 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/АдминистрированиеКластераCOMКлиентСервер.mdo +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/АдминистрированиеКластераCOMКлиентСервер.mdo @@ -3,7 +3,7 @@ АдминистрированиеКластераCOMКлиентСервер ru - Администрирование кластера COMКлиент сервер + Администрирование кластера COM клиент сервер true true diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl new file mode 100644 index 000000000..d5403d397 --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластераRAS/Module.bsl @@ -0,0 +1,3240 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +#Область БлокировкаСеансовИЗаданий + +// Возвращает текущее состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: +// Структура - структура, описывающая состояние блокировки сеансов и регламентных заданий, +// описание см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + Результат = СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий()); + + Если Результат.ДатаС = АдминистрированиеКластера.ПустаяДата() Тогда + Результат.ДатаС = Неопределено; + КонецЕсли; + + Если Результат.ДатаПо = АдминистрированиеКластера.ПустаяДата() Тогда + Результат.ДатаПо = Неопределено; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.КодРазрешения) Тогда + Результат.КодРазрешения = ""; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.Сообщение) Тогда + Результат.Сообщение = ""; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат.ПараметрБлокировки) Тогда + Результат.ПараметрБлокировки = ""; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Устанавливает новое состояние блокировки сеансов и регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// СвойстваБлокировкиСеансовИЗаданий - Структура - структура, описывающая состояние блокировки сеансов и регламентных заданий, +// описание см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий(). +// +Процедура УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач СвойстваБлокировкиСеансовИЗаданий) Экспорт + + УстановитьСвойстваИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий(), + СвойстваБлокировкиСеансовИЗаданий); + +КонецПроцедуры + +// Проверяет корректность параметров администрирования. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ПроверятьПараметрыАдминистрированияКластера - Булево - флаг необходимости проверки параметров администрирования кластера +// ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево - флаг необходимости проверки параметров +// администрирования кластера. +// +Процедура ПроверитьПараметрыАдминистрирования(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, + ПроверятьПараметрыАдминистрированияИнформационнойБазы = Истина, + ПроверятьПараметрыАдминистрированияКластера = Истина) Экспорт + + Если ПроверятьПараметрыАдминистрированияКластера Или ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда + + Попытка + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + СвойстваРабочихПроцессов(ИдентификаторКластера, ПараметрыАдминистрированияКластера); + Исключение + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + |Если на компьютере %2 не запущен сервер администрирования (ras) + |следует его запустить, например, так: + | + |""%3ras.exe"" cluster --port=%4 %5:%6 + | + |В противном случае следует проверить параметры подключения и сетевого экрана.'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + ИмяКомпьютера(), + КаталогПрограммы(), + Формат(ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования, "ЧГ="), + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + Формат(ПараметрыАдминистрированияКластера.ПортАгентаСервера, "ЧГ=")); + КонецПопытки; + + КонецЕсли; + + Если ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда + + Словарь = Новый Структура(); + Словарь.Вставить("БлокировкаСеансов", "sessions-deny"); + + СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Словарь); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область БлокировкаРегламентныхЗаданий + +// Возвращает текущее состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: Булево. +// +Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + Словарь = Новый Структура("БлокировкаРегламентныхЗаданий", "scheduled-jobs-deny"); + + СвойстваИБ = СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Словарь); + Возврат СвойстваИБ.БлокировкаРегламентныхЗаданий; + +КонецФункции + +// Устанавливает новое состояние блокировки регламентных заданий для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// БлокировкаРегламентныхЗаданий - Булево - флаг установки блокировки регламентных заданий информационной базы. +// +Процедура УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач БлокировкаРегламентныхЗаданий) Экспорт + + Словарь = Новый Структура("БлокировкаРегламентныхЗаданий", "scheduled-jobs-deny"); + Свойства = Новый Структура("БлокировкаРегламентныхЗаданий", БлокировкаРегламентныхЗаданий); + + УстановитьСвойстваИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Словарь, + Свойства); + +КонецПроцедуры + +#КонецОбласти + +#Область СеансыИнформационнойБазы + +// Возвращает описания сеансов информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +// Возвращаемое значение: +// Массив - массив структур, описывающих свойства сеансов, описание +// см. АдминистрированиеКластера.СвойстваСеанса(). +// +Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + ИдентификаторИнформационнойБазы = ИдентификаторИнформационнойБазы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + + ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + + // Лицензии для процессов. + Команда = "process list --licenses " + ПараметрыКластера; + ЛицензииПроцессов = Новый Соответствие; + Для Каждого Лицензия Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойствЛицензии()) Цикл + Лицензия.Вставить("license-type", ?(Лицензия["license-type"] = "soft", 0, 1)); + ЛицензииПроцессов.Вставить(Лицензия["process"], Лицензия); + КонецЦикла; + + // Процессы. + Команда = "process list " + ПараметрыКластера; + Процессы = Новый Соответствие; + Для Каждого Процесс Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойствРабочегоПроцесса()) Цикл + Процесс.Вставить("license", ЛицензииПроцессов[Процесс["process"]]); + Процесс.Вставить("running", ?(Процесс["running"], 1, 0)); + Процесс.Вставить("use", ?(Процесс["use"] = "used", 1, ?(Процесс["use"] = "not-used", 0, 2))); // "not-used" - это неточное значение. + Процессы.Вставить(Процесс["process"], Процесс); + КонецЦикла; + + // Описания соединений. + Команда = "connection list " + ПараметрыКластера; + ОписанияСоединений = Новый Соответствие; + Для Каждого Соединение Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойствОписанияСоединения()) Цикл + Соединение.Вставить("process", Процессы[Соединение["process"]]); + ОписанияСоединений.Вставить(Соединение["connection"], Соединение); + КонецЦикла; + + // Лицензии для сеансов. + Команда = "session list --licenses " + ПараметрыКластера; + ЛицензииСеансов = Новый Соответствие; + Для Каждого ЛицензияСеанса Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойствЛицензии()) Цикл + ЛицензияСеанса.Вставить("license-type", ?(ЛицензияСеанса["license-type"] = "soft", 0, 1)); + ЛицензииСеансов.Вставить(ЛицензияСеанса["session"], ЛицензияСеанса); + КонецЦикла; + + // Блокировки сеансов. + Команда = "lock list --infobase=%1 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИдентификаторИнформационнойБазы); + БлокировкиСеансов = Новый Соответствие(); + Для Каждого БлокировкаСеанса Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойствБлокировки()) Цикл + АдминистрированиеКластера.ДанныеСеансаИзБлокировки(БлокировкиСеансов, + БлокировкаСеанса["descr"], + БлокировкаСеанса["session"], + ПараметрыАдминистрированияИБ.ИмяВКластере); + + КонецЦикла; + + // Сеансы. + Команда = "session list --infobase=%1 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИдентификаторИнформационнойБазы); + Фильтр = ФильтрВНотациюRac(Фильтр, СловарьСвойствСеансов()); + Результат = Новый Массив; + Для Каждого Сеанс Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , Фильтр, ТипыСвойствСеансов()) Цикл + Сеанс.Вставить("process", Процессы[Сеанс["process"]]); + Сеанс.Вставить("license", ЛицензииСеансов[Сеанс["session"]]); + Сеанс.Вставить("connection", ОписанияСоединений[Сеанс["connection"]]); + РазобранныйСеанс = РазобратьЭлементВывода(Сеанс, СловарьСвойствСеансов()); + + РазобранныйСеанс.Вставить("РежимБлокировкиБД", ?(БлокировкиСеансов[Сеанс["session"]] <> Неопределено, БлокировкиСеансов[Сеанс["session"]].РежимБлокировкиБД, "")); + РазобранныйСеанс.Вставить("Разделитель", ?(БлокировкиСеансов[Сеанс["session"]] <> Неопределено, БлокировкиСеансов[Сеанс["session"]].Разделитель, "")); + + Результат.Добавить(РазобранныйСеанс); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Удаляет сеансы с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +Процедура УдалитьСеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + ИдентификаторИнформационнойБазы = ИдентификаторИнформационнойБазы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + + ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + + КоличествоПопыток = 3; + ВсеСеансыУдалены = Ложь; + + Для ТекущаяПопытка = 0 По КоличествоПопыток Цикл + + Сеансы = СвойстваСеансов(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИдентификаторИнформационнойБазы, Фильтр, Ложь); + + Если Сеансы.Количество() = 0 Тогда + + ВсеСеансыУдалены = Истина; + Прервать; + + ИначеЕсли ТекущаяПопытка = КоличествоПопыток Тогда + + Прервать; + + КонецЕсли; + + Для Каждого Сеанс Из Сеансы Цикл + + Попытка + + Команда = "session terminate --session=%1 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, Сеанс.Получить("session")); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + + Исключение + + // Сеанс мог завершиться к моменту вызова rac session terminate. + Продолжить; + + КонецПопытки; + + КонецЦикла; + + КонецЦикла; + + Если Не ВсеСеансыУдалены Тогда + + ВызватьИсключение НСтр("ru = 'Не удалось удалить сеансы.'"); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СоединенияСИнформационнойБазой + +// Возвращает описания соединений с информационной базой. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +// Возвращаемое значение: Массив(Структура), массив структур, описывающих свойства соединений. Описание структур - +// см. АдминистрированиеКластера.СвойстваСоединения(). +// +Функция СоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + ИдентификаторИнформационнойБазы = ИдентификаторИнформационнойБазы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + Возврат СвойстваСоединений(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИдентификаторИнформационнойБазы, ПараметрыАдминистрированияИБ, Фильтр, Истина); + +КонецФункции + +// Разрывает соединения с информационной базой по фильтру. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// +Процедура РазорватьСоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт + + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + ИдентификаторИнформационнойБазы = ИдентификаторИнформационнойБазы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + + ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + + Значение = Новый Массив; + Значение.Добавить("1CV8"); // идентификатор приложения 1С:Предприятие в режиме запуска "Толстый клиент". + Значение.Добавить("1CV8C"); // идентификатор приложения 1С:Предприятие в режиме запуска "Тонкий клиент". + Значение.Добавить("WebClient"); // идентификатор приложения 1С:Предприятие в режиме запуска "Веб-клиент". + Значение.Добавить("Designer"); // идентификатор приложения Конфигуратор. + Значение.Добавить("COMConnection"); // идентификатор сессии внешнего соединения 1С:Предприятия через COM. + Значение.Добавить("WSConnection"); // идентификатор сессии Web-сервиса. + Значение.Добавить("BackgroundJob"); // идентификатор сессии обработки заданий. + Значение.Добавить("WebServerExtension"); // идентификатор расширения Web-сервера. + + АдминистрированиеКластера.ДобавитьУсловиеФильтра(Фильтр, "ИдентификаторКлиентскогоПриложения", ВидСравнения.ВСписке, Значение); + + КоличествоПопыток = 3; + ВсеСоединенияРазорваны = Ложь; + + Для ТекущаяПопытка = 0 По КоличествоПопыток Цикл + + Соединения = СвойстваСоединений(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИдентификаторИнформационнойБазы, ПараметрыАдминистрированияИБ, Фильтр, Ложь); + + Если Соединения.Количество() = 0 Тогда + + ВсеСоединенияРазорваны = Истина; + Прервать; + + ИначеЕсли ТекущаяПопытка = КоличествоПопыток Тогда + + Прервать; + + КонецЕсли; + + Для Каждого Соединение Из Соединения Цикл + + Попытка + + Команда = "connection disconnect --process=%1 --connection=%2 --infobase-user=%3 --infobase-pwd=%4 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, + Соединение.Получить("process"), + Соединение.Получить("connection"), + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + + Исключение + + // Соединение могло уже завершиться к моменту вызова rac connection disconnect. + Продолжить; + + КонецПопытки; + + КонецЦикла; + + КонецЦикла; + + Если Не ВсеСоединенияРазорваны Тогда + + ВызватьИсключение НСтр("ru = 'Не удалось разорвать соединения.'"); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПрофилиБезопасности + +// Возвращает имя профиля безопасности, назначенного для информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - (См. АдминистрированиеКластера.ПараметрыАдминистрированияКластера) +// ПараметрыАдминистрированияИБ - (См. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера) +// +// Возвращаемое значение: +// Строка - имя профиля безопасности, назначенного для информационной базы. Если для информационной базы не назначен +// профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + Словарь = Новый Структура(); + Словарь.Вставить("ИмяПрофиля", "security-profile-name"); + + Результат = СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Словарь).ИмяПрофиля; + Если ЗначениеЗаполнено(Результат) Тогда + Возврат Результат; + Иначе + Возврат ""; + КонецЕсли; + +КонецФункции + +// Возвращает имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности +// безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: +// Строка - имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности безопасного +// режима. Если для информационной базы не назначен профиль безопасности - возвращается пустая строка. +// +Функция ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт + + Словарь = Новый Структура(); + Словарь.Вставить("ИмяПрофиля", "safe-mode-security-profile-name"); + + Результат = СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Словарь).ИмяПрофиля; + Если ЗначениеЗаполнено(Результат) Тогда + Возврат Результат; + Иначе + Возврат ""; + КонецЕсли; + +КонецФункции + +// Назначает для информационной базы использование профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности. +// +Процедура УстановитьПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач ИмяПрофиля = "") Экспорт + + Словарь = Новый Структура(); + Словарь.Вставить("ИмяПрофиля", "security-profile-name"); + + Значения = Новый Структура(); + Значения.Вставить("ИмяПрофиля", ИмяПрофиля); + + УстановитьСвойстваИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Словарь, + Значения); + +КонецПроцедуры + +// Назначает для информационной базы использование профиля безопасности безопасного режима. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет +// отключено использование профиля безопасности безопасного режима. +// +Процедура УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач ИмяПрофиля = "") Экспорт + + Словарь = Новый Структура(); + Словарь.Вставить("ИмяПрофиля", "safe-mode-security-profile-name"); + + Значения = Новый Структура(); + Значения.Вставить("ИмяПрофиля", ИмяПрофиля); + + УстановитьСвойстваИнформационнойБазы( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИБ, + Словарь, + Значения); + +КонецПроцедуры + +// Проверяет существование в кластере серверов профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности, существование которого проверяется. +// +Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + Фильтр = Новый Структура("Имя", ИмяПрофиля); + + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + + ПрофилиБезопасности = ПолучитьПрофилиБезопасности(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + + Возврат (ПрофилиБезопасности.Количество() = 1); + +КонецФункции + +// Возвращает свойства профиля безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// +// Возвращаемое значение: +// Структура - структура, описывающая профиль безопасности, +// описание см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Функция ПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач ИдентификаторКластера = Неопределено) Экспорт + + Фильтр = Новый Структура("Имя", ИмяПрофиля); + + Если ИдентификаторКластера = Неопределено Тогда + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + КонецЕсли; + + ПрофилиБезопасности = ПолучитьПрофилиБезопасности(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + + Если ПрофилиБезопасности.Количество() <> 1 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1 не зарегистрирован профиль безопасности %2'"), ИдентификаторКластера, ИмяПрофиля); + КонецЕсли; + + Результат = ПрофилиБезопасности[0]; + Результат = ПреобразоватьЗначенияСвойствИспользованияСписковДоступа(Результат); + + // Виртуальный каталоги + Результат.Вставить("ВиртуальныеКаталоги", + ПолучитьВиртуальныеКаталоги(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + // Разрешенные COM-классы + Результат.Вставить("COMКлассы", + ПолучитьРазрешенныеCOMКлассы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + // Внешние компоненты + Результат.Вставить("ВнешниеКомпоненты", + ПолучитьРазрешенныеВнешниеКомпоненты(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + // Внешние модули + Результат.Вставить("ВнешниеМодули", + ПолучитьРазрешенныеВнешниеМодули(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + // Приложения ОС + Результат.Вставить("ПриложенияОС", + ПолучитьРазрешенныеПриложенияОС(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + // Интернет-ресурсы + Результат.Вставить("ИнтернетРесурсы", + ПолучитьРазрешенныеИнтернетРесурсы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля)); + + Возврат Результат; + +КонецФункции + +// Создает профиль безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// СвойстваПрофиляБезопасности - Структура, описывающая свойства создаваемого профиля безопасности, +// описание см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Процедура СоздатьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + ИмяПрофиля = СвойстваПрофиляБезопасности.Имя; + + Фильтр = Новый Структура("Имя", ИмяПрофиля); + + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + + ПрофилиБезопасности = ПолучитьПрофилиБезопасности(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + + Если ПрофилиБезопасности.Количество() = 1 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1 уже зарегистрирован профиль безопасности %2'"), ИдентификаторКластера, ИмяПрофиля); + КонецЕсли; + + ОбновитьСвойстваПрофиляБезопасности(ПараметрыАдминистрированияКластера, СвойстваПрофиляБезопасности); + +КонецПроцедуры + +// Устанавливает свойства для существующего профиля безопасности по переданному описанию. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// СвойстваПрофиляБезопасности - Структура - структура, описывающая устанавливаемые для профиля безопасности свойства, +// описание см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Процедура УстановитьСвойстваПрофиляБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт + + ИмяПрофиля = СвойстваПрофиляБезопасности.Имя; + + Фильтр = Новый Структура("Имя", ИмяПрофиля); + + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + + ПрофилиБезопасности = ПолучитьПрофилиБезопасности(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + + Если ПрофилиБезопасности.Количество() <> 1 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1 не зарегистрирован профиль безопасности %2'"), ИдентификаторКластера, ИмяПрофиля); + КонецЕсли; + + СтарыеСвойства = ПрофильБезопасности(ПараметрыАдминистрированияКластера, ИмяПрофиля, ИдентификаторКластера); + + ОбновитьСвойстваПрофиляБезопасности(ПараметрыАдминистрированияКластера, СвойстваПрофиляБезопасности, СтарыеСвойства); + +КонецПроцедуры + +// Удаляет профиль безопасности. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// +Процедура УдалитьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт + + Команда = "profile remove --name=%1 " + ПараметрыКластера(ПараметрыАдминистрированияКластера); + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + +КонецПроцедуры + +#КонецОбласти + +#Область ИнформационныеБазы + +// Возвращает внутренний идентификатор информационной базы. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +// Возвращаемое значение: +// Строка - внутренний идентификатор информационной базы. +// +Функция ИдентификаторИнформационнойБазы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы) Экспорт + + Фильтр = Новый Структура("name", ПараметрыАдминистрированияИнформационнойБазы.ИмяВКластере); + + ИнформационныеБазы = СвойстваИнформационныхБаз(ИдентификаторКластера, ПараметрыАдминистрированияКластера, Фильтр); + + Если ИнформационныеБазы.Количество() = 1 Тогда + Возврат ИнформационныеБазы[0].Получить("infobase"); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В кластере серверов %1 не зарегистрирована информационная база %2'"), ИдентификаторКластера, ПараметрыАдминистрированияИнформационнойБазы.ИмяВКластере); + КонецЕсли; + +КонецФункции + +// Возвращает описания информационных баз. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// Фильтр - Структура - параметры фильтрации информационных баз. +// +// Возвращаемое значение: Массив(Структура). +// +Функция СвойстваИнформационныхБаз(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт + + Команда = "infobase summary list " + ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + Свойства = ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , Фильтр, ТипыСвойствОписанияБазы()); + + Возврат Свойства; + +КонецФункции + +#КонецОбласти + +#Область Кластер + +// Возвращает внутренний идентификатор кластера серверов. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// +// Возвращаемое значение: +// Строка - внутренний идентификатор кластера серверов. +// +Функция ИдентификаторКластера(Знач ПараметрыАдминистрированияКластера) Экспорт + + Фильтр = Новый Структура("port", ПараметрыАдминистрированияКластера.ПортКластера); + + Кластеры = СвойстваКластеров(ПараметрыАдминистрированияКластера, Фильтр); + + Если Кластеры.Количество() = 1 Тогда + Возврат Кластеры[0].Получить("cluster"); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не обнаружен кластер серверов с портом %1'"), ПараметрыАдминистрированияКластера.ПортКластера); + КонецЕсли; + +КонецФункции + +// Возвращает описания кластеров серверов. +// +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// Фильтр - Структура - параметры фильтрации кластеров серверов. +// +// Возвращаемое значение: +// Массив - массив соответствий, описаний кластеров в нотации rac. +// +Функция СвойстваКластеров(Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт + + Если ЗначениеЗаполнено(ПараметрыАдминистрированияКластера.АдресСервераАдминистрирования) Тогда + Сервер = СокрЛП(ПараметрыАдминистрированияКластера.АдресСервераАдминистрирования); + Если ЗначениеЗаполнено(ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования) Тогда + Сервер = Сервер + ":" + ПривестиЗначение(ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования); + КонецЕсли; + Иначе + Сервер = ""; + КонецЕсли; + + Возврат ЗапуститьКоманду("cluster list " + Сервер, ПараметрыАдминистрированияКластера, , Фильтр, ТипыСвойствКластера()); + +КонецФункции + +#КонецОбласти + +#Область РабочиеПроцессыСерверы + +// Возвращает описания рабочих процессов. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// Фильтр - Структура - параметры фильтрации рабочих процессов. +// +// Возвращаемое значение: +// Массив - массив соответствий, описаний рабочих процессов в нотации rac. +// +Функция СвойстваРабочихПроцессов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт + + Возврат ЗапуститьКоманду("process list " + ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера), ПараметрыАдминистрированияКластера, , Фильтр); + +КонецФункции + +// Возвращает описания рабочих серверов. +// +// Параметры: +// ИдентификаторКластера - Строка, внутренний идентификатор кластера серверов, +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// Фильтр - Структура - параметры фильтрации рабочих серверов. +// +// Возвращаемое значение: +// Массив - массив соответствий, описаний рабочих серверов в нотации rac. +// +Функция СвойстваРабочихСерверов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт + + ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + + Возврат ЗапуститьКоманду("server list " + ПараметрыКластера, ПараметрыАдминистрированияКластера, , Фильтр, ТипыСвойствРабочихСерверов()); + +КонецФункции + +#КонецОбласти + +// Возвращает описания сеансов информационной базы. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИдентификаторИнформационнойБазы - Строка - внутренний идентификатор информационной базы. +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// ИспользоватьСловарь - Булево - если Истина - возвращаемый результат будет заполнен с использован словаря, иначе - без +// использования. +// +// Возвращаемое значение: +// Массив - массив структур, описывающих свойства сеансов( описание +// см. АдминистрированиеКластера.СвойстваСеанса()), +// или массив соответствий, описывающих свойства сеансов в нотации утилиты rac +// (при ИспользоватьСловарь = Ложь). +// +Функция СвойстваСеансов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИдентификаторИнформационнойБазы, Знач Фильтр = Неопределено, Знач ИспользоватьСловарь = Истина) Экспорт + + Команда = "session list --infobase=%1 " + ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + ПодставитьПараметрыВКоманду(Команда, ИдентификаторИнформационнойБазы); + + Если ИспользоватьСловарь Тогда + Словарь = СловарьСвойствСеансов(); + Иначе + Словарь = Неопределено; + Фильтр = ФильтрВНотациюRac(Фильтр, СловарьСвойствСеансов()); + КонецЕсли; + + Результат = ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, Словарь, Фильтр, ТипыСвойствСеансов()); + + Возврат Результат; + +КонецФункции + +// Возвращает описания соединений с информационной базой. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИдентификаторИнформационнойБазы - Строка - внутренний идентификатор информационной базы. +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить. +// Варианты: +// 1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив: +// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см. +// Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(), +// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным +// в условии фильтра. Допустимые значения: +// ВидСравнения.Равно, +// ВидСравнения.НеРавно, +// ВидСравнения.Больше (только для числовых значений), +// ВидСравнения.БольшеИлиРавно (только для числовых значений), +// ВидСравнения.Меньше (только для числовых значений), +// ВидСравнения.МеньшеИлиРавно (только для числовых значений), +// ВидСравнения.ВСписке, +// ВидСравнения.НеВСписке, +// ВидСравнения.Интервал (только для числовых значений), +// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений), +// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений), +// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений), +// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым +// сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке +// в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми +// будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы, +// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны +// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться +// соответствующее сравнение, +// 2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым +// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на +// равенство. +// ИспользоватьСловарь - Булево - если Истина - возвращаемый результат будет заполнен с использован словаря, иначе - без +// использования. +// +// Возвращаемое значение: +// Массив - массив структур, описывающих свойства соединений (описание +// см. АдминистрированиеКластера.СвойстваСоединения()) +// или массив соответствий, описывающих свойства соединений в нотации утилиты rac +// (при ИспользоватьСловарь = Ложь). +// +Функция СвойстваСоединений(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИдентификаторИнформационнойБазы, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено, Знач ИспользоватьСловарь = Ложь) Экспорт + + ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + + Если ИспользоватьСловарь Тогда + Словарь = СловарьСвойствСоединений(); + Иначе + Словарь = Неопределено; + Фильтр = ФильтрВНотациюRac(Фильтр, СловарьСвойствСоединений()); + КонецЕсли; + + Результат = Новый Массив(); + РабочиеПроцессы = СвойстваРабочихПроцессов(ИдентификаторКластера, ПараметрыАдминистрированияКластера); + + Для Каждого РабочийПроцесс Из РабочиеПроцессы Цикл + + Команда = "connection list --process=%1 --infobase=%2 --infobase-user=%3 --infobase-pwd=%4 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, + РабочийПроцесс.Получить("process"), + ИдентификаторИнформационнойБазы, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + СоединенияРабочегоПроцесса = ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, Словарь, Фильтр, ТипыСвойствСоединений()); + Для Каждого Соединение Из СоединенияРабочегоПроцесса Цикл + Если ИспользоватьСловарь Тогда + Если Соединение.РежимСоединенияСБазойДанных = "none" Тогда + Соединение.Вставить("РежимСоединенияСБазойДанных", 0); + ИначеЕсли Соединение.РежимСоединенияСБазойДанных = "shared" Тогда + Соединение.Вставить("РежимСоединенияСБазойДанных", 1); + Иначе // exclusive + Соединение.Вставить("РежимСоединенияСБазойДанных", 2); + КонецЕсли; + Соединение.Вставить("РежимСоединенияСИнформационнойБазой", ?(Соединение.РежимСоединенияСИнформационнойБазой = "shared", 0, 1)); + Соединение.Вставить("УправлениеНаходитсяНаСервере", ?(Соединение.УправлениеНаходитсяНаСервере = "client", 0, 1)); + Иначе + Соединение.Вставить("process", РабочийПроцесс.Получить("process")); + КонецЕсли; + Результат.Добавить(Соединение); + КонецЦикла; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает путь к консольному клиенту сервера администрирования. +// +// Возвращаемое значение: +// Строка - путь к консольному клиенту сервера администрирования. +// +Функция ПутьККлиентуСервераАдминистрирования() Экспорт + + КаталогЗапуска = КаталогИсполняемыхФайловПлатформы(); + Клиент = КаталогЗапуска + "rac"; + + СисИнфо = Новый СистемнаяИнформация(); + Если (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + Клиент = Клиент + ".exe"; + КонецЕсли; + + Возврат Клиент; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает каталог исполняемых файлов платформы. +// +// Возвращаемое значение: +// Строка - каталог исполняемых файлов платформы. +// +Функция КаталогИсполняемыхФайловПлатформы() + + Результат = КаталогПрограммы(); + СимволРазделителя = ПолучитьРазделительПути(); + + Если Прав(Результат, 1) <> СимволРазделителя Тогда + Результат = Результат + СимволРазделителя; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает значения свойств информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Словарь - Структура - соответствие имен свойств для API и потока вывода утилиты rac. +// +// Возвращаемое значение: +// Структура - описание информационной базы, составленное по переданному словарю. +// +Функция СвойстваИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Словарь) + + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + ИдентификаторИнформационнойБазы = ИдентификаторИнформационнойБазы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + + ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + + Команда = "infobase info --infobase=%1 --infobase-user=%2 --infobase-pwd=%3"; + ПодставитьПараметрыВКоманду(Команда, + ИдентификаторИнформационнойБазы, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + Результат = ЗапуститьКоманду(Команда + " " + ПараметрыКластера, ПараметрыАдминистрированияКластера, Словарь, , ТипыСвойствИнформационнойБазы()); + + Возврат Результат[0]; + +КонецФункции + +// Устанавливает значения свойств информационной базы. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// Словарь - Структура - соответствие имен свойств для API и потока вывода утилиты rac. +// ЗначенияСвойств - Структура - устанавливаемые значения свойств информационной базы: +// * Ключ - имя свойства в нотации API, +// * Значение - устанавливаемое для свойства значение. +// +Процедура УстановитьСвойстваИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Словарь, Знач ЗначенияСвойств) + + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + ИдентификаторИнформационнойБазы = ИдентификаторИнформационнойБазы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + + ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + + ПараметрыПолучения = Новый Структура; + ПараметрыПолучения.Вставить("ПараметрыАдминистрированияКластера", ПараметрыАдминистрированияКластера); + ПараметрыПолучения.Вставить("ПараметрыАдминистрированияИБ", ПараметрыАдминистрированияИБ); + ПараметрыПолучения.Вставить("ТипОбъекта", "infobase"); + ПоддерживаемыеСвойства = ПоддерживаемыеСвойстваОбъектов(ПараметрыПолучения); + + Команда = "infobase update --infobase=%1 --infobase-user=%2 --infobase-pwd=%3"; + ПодставитьПараметрыВКоманду(Команда, + ИдентификаторИнформационнойБазы, + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы); + + // Для этих двух булевых свойств отличается представление. + НовыеЗначенияСвойств = ОбщегоНазначения.СкопироватьРекурсивно(ЗначенияСвойств); + Для Каждого КлючИЗначение Из Словарь Цикл + Если КлючИЗначение.Значение = "scheduled-jobs-deny" Или КлючИЗначение.Значение = "sessions-deny" Тогда + НовыеЗначенияСвойств.Вставить(КлючИЗначение.Ключ, Формат(НовыеЗначенияСвойств[КлючИЗначение.Ключ], "БЛ=off; БИ=on")); + КонецЕсли; + КонецЦикла; + + ДобавитьПараметрыКомандыПоСловарю(Команда, Словарь, НовыеЗначенияСвойств, ПоддерживаемыеСвойства); + + ЗапуститьКоманду(Команда + " " + ПараметрыКластера, ПараметрыАдминистрированияКластера); + +КонецПроцедуры + +// Возвращает описания профилей безопасности. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// Фильтр - Структура - параметры фильтрации профилей безопасности. +// +// Возвращаемое значение: +// Массив - массив описаний в нотации rac. +// +Функция ПолучитьПрофилиБезопасности(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) + + Команда = "profile list " + ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + Результат = ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, СловарьСвойствПрофиляБезопасности(), Фильтр, ТипыСвойствПрофиля()); + + Возврат Результат; + +КонецФункции + +// Возвращает описания виртуальных каталогов. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// Фильтр - Структура - параметры фильтрации виртуальных каталогов. +// +// Возвращаемое значение: +// Массив - массив описаний в нотации rac. +// +Функция ПолучитьВиртуальныеКаталоги(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат СпискиКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "directory", // Не локализуется + СловарьСвойствВиртуальногоКаталога(), + , + ТипыСвойствВиртуальногоКаталога()); + +КонецФункции + +// Возвращает описания COM-классов. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// Фильтр - Структура - параметры фильтрации COM-классов. +// +// Возвращаемое значение: +// Массив - массив описаний в нотации rac. +// +Функция ПолучитьРазрешенныеCOMКлассы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат СпискиКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "com", // Не локализуется + СловарьСвойствCOMКласса(), + , + ТипыСвойствCOMКласса()); + +КонецФункции + +// Возвращает описания внешних компонент. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// Фильтр - Структура - параметры фильтрации внешних компонент. +// +// Возвращаемое значение: +// Массив - массив описаний в нотации rac. +// +Функция ПолучитьРазрешенныеВнешниеКомпоненты(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат СпискиКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "addin", // Не локализуется + СловарьСвойствВнешнейКомпоненты(), + , + ТипыСвойствВнешнейКомпоненты()); + +КонецФункции + +// Возвращает описания внешних модулей. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// Фильтр - Структура - параметры фильтрации внешних модулей. +// +// Возвращаемое значение: +// Массив - массив описаний в нотации rac. +// +Функция ПолучитьРазрешенныеВнешниеМодули(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат СпискиКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "module", // Не локализуется + СловарьСвойствВнешнегоМодуля(), + , + ТипыСвойствВнешнегоМодуля()); + +КонецФункции + +// Возвращает описания приложений ОС. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// Фильтр - Структура - параметры фильтрации приложений ОС. +// +// Возвращаемое значение: +// Массив - массив описаний в нотации rac. +// +Функция ПолучитьРазрешенныеПриложенияОС(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат СпискиКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "app", // Не локализуется + СловарьСвойствПриложенияОС(), + , + ТипыСвойствПриложенияОС()); + +КонецФункции + +// Возвращает описания Интернет-ресурсов. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// Фильтр - Структура - параметры фильтрации Интернет-ресурсов. +// +// Возвращаемое значение: +// Массив - массив описаний в нотации rac. +// +Функция ПолучитьРазрешенныеИнтернетРесурсы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач Фильтр = Неопределено) + + Возврат СпискиКонтроляДоступа( + ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "inet", // Не локализуется + СловарьСвойствИнтернетРесурса(), + , + ТипыСвойствИнтернетРесурса()); + +КонецФункции + +// Возвращает описания элементов списка контроля доступа. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// ИмяСписка - Строка - имя списка контроля доступа (acl) в нотации утилиты rac. +// Словарь - Структура - соответствие имен свойств в потоке вывода утилиты rac и в требуемом описании. +// Фильтр - Структура - параметры фильтрации элементов списка контроля доступа. +// +// Возвращаемое значение: +// Массив - массив описаний в нотации rac. +// +Функция СпискиКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач ИмяСписка, Знач Словарь, Знач Фильтр = Неопределено, Знач ТипыСвойств = Неопределено) + + Команда = "profile acl --name=%1 %2 list " + ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, ИмяСписка); + + Результат = ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, Словарь, Фильтр, ТипыСвойств); + + Возврат Результат; + +КонецФункции + +// Обновляет свойства профиля безопасности (включая обновление использования и состава acl'ей). +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// НовыеСвойства - Структура - структура, описывающая устанавливаемые для профиля безопасности свойства, +// описание см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// СтарыеСвойства - Структура - структура, описывающая устанавливаемые для профиля безопасности свойства, +// описание см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). +// +Процедура ОбновитьСвойстваПрофиляБезопасности(Знач ПараметрыАдминистрированияКластера, Знач НовыеСвойства, Знач СтарыеСвойства = Неопределено) + + Если СтарыеСвойства = Неопределено Тогда + СтарыеСвойства = АдминистрированиеКластера.СвойстваПрофиляБезопасности(); + КонецЕсли; + + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + + ИмяПрофиля = НовыеСвойства.Имя; + + ПараметрыПолучения = Новый Структура; + ПараметрыПолучения.Вставить("ПараметрыАдминистрированияКластера", ПараметрыАдминистрированияКластера); + ПараметрыПолучения.Вставить("ТипОбъекта", "profile"); + ПоддерживаемыеСвойства = ПоддерживаемыеСвойстваОбъектов(ПараметрыПолучения); + + СловарьСвойствПрофиля = СловарьСвойствПрофиляБезопасности(Ложь); + Для Каждого ФрагментСловаря Из СловарьСвойствПрофиля Цикл + Если НовыеСвойства.Свойство(ФрагментСловаря.Ключ) Тогда + Если НовыеСвойства[ФрагментСловаря.Ключ] <> СтарыеСвойства[ФрагментСловаря.Ключ] Тогда + Команда = "profile update"; + ДобавитьПараметрыКомандыПоСловарю(Команда, СловарьСвойствПрофиля, НовыеСвойства, ПоддерживаемыеСвойства.profile); + ЗапуститьКоманду(Команда + " " + ПараметрыКластера, ПараметрыАдминистрированияКластера); + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Для Каждого ФрагментСловаря Из СловарьСвойствИспользованияСписокКонтроляДоступа() Цикл + Если НовыеСвойства[ФрагментСловаря.Ключ] = СтарыеСвойства[ФрагментСловаря.Ключ] Тогда + Продолжить; + КонецЕсли; + УстановитьИспользованиеСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ФрагментСловаря.Значение, Не НовыеСвойства[ФрагментСловаря.Ключ]); + КонецЦикла; + + // Виртуальные каталоги + ОбновитьЭлементыСпискаКонтроляДоступа(ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "directory", + СловарьСвойствВиртуальногоКаталога(), + НовыеСвойства.ВиртуальныеКаталоги, + СтарыеСвойства.ВиртуальныеКаталоги); + + // Разрешенные COM-классы + ОбновитьЭлементыСпискаКонтроляДоступа(ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "com", + СловарьСвойствCOMКласса(), + НовыеСвойства.COMКлассы, + СтарыеСвойства.COMКлассы); + + // Внешние компоненты + ОбновитьЭлементыСпискаКонтроляДоступа(ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "addin", + СловарьСвойствВнешнейКомпоненты(), + НовыеСвойства.ВнешниеКомпоненты, + СтарыеСвойства.ВнешниеКомпоненты); + + // Внешние модули + ОбновитьЭлементыСпискаКонтроляДоступа(ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "module", + СловарьСвойствВнешнегоМодуля(), + НовыеСвойства.ВнешниеМодули, + СтарыеСвойства.ВнешниеМодули); + + // Приложения ОС + ОбновитьЭлементыСпискаКонтроляДоступа(ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "app", + СловарьСвойствПриложенияОС(), + НовыеСвойства.ПриложенияОС, + СтарыеСвойства.ПриложенияОС); + + // Интернет-ресурсы + ОбновитьЭлементыСпискаКонтроляДоступа(ИдентификаторКластера, + ПараметрыАдминистрированияКластера, + ИмяПрофиля, + "inet", + СловарьСвойствИнтернетРесурса(), + НовыеСвойства.ИнтернетРесурсы, + СтарыеСвойства.ИнтернетРесурсы); + +КонецПроцедуры + +// Устанавливает использование acl'а для профиля безопасности. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// ИмяСписка - Строка - имя списка контроля доступа (acl) в нотации утилиты rac. +// Использование - Булево - флаг использования acl'a. +// +Процедура УстановитьИспользованиеСпискаКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля, Знач ИмяСписка, Знач Использование) + + Команда = "profile acl --name=%1 %2 --access=%3 " + ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, ИмяСписка, ?(Использование, "list", "full")); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + +КонецПроцедуры + +// Удаляет элемент acl'a для профиля безопасности. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// ИмяСписка - Строка - имя списка контроля доступа (acl) в нотации утилиты rac. +// КлючЭлемента = Строка - значением ключевого свойства элемента acl'a. +// +Процедура УдалитьЭлементСпискаКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, + Знач ИмяПрофиля, Знач ИмяСписка, Знач КлючЭлемента) + + КлючСписка = КлючиСписковКонтроляДоступа()[ИмяСписка]; + + Команда = "profile acl --name=%1 %2 remove --%3=%4 " + ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, ИмяСписка, КлючСписка, КлючЭлемента); + + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + +КонецПроцедуры + +// Обновляет элемент acl'a для профиля безопасности. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// ИмяСписка - Строка - имя списка контроля доступа (acl) в нотации утилиты rac. +// Словарь - Структура - соответствие имен свойств в потоке вывода утилиты rac и в требуемом описании. +// СвойстваЭлемента - Структура - значения свойств элемента списка контроля доступа. +// +Процедура ОбновитьЭлементСпискаКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, + Знач ИмяПрофиля, Знач ИмяСписка, Знач Словарь, Знач СвойстваЭлемента) + + ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера); + + ПараметрыПолучения = Новый Структура; + ПараметрыПолучения.Вставить("ПараметрыАдминистрированияКластера", ПараметрыАдминистрированияКластера); + ПараметрыПолучения.Вставить("ТипОбъекта", "profile"); + ПоддерживаемыеСвойства = ПоддерживаемыеСвойстваОбъектов(ПараметрыПолучения); + + Команда = "profile acl --name=%1 %2 update"; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, ИмяСписка); + ДобавитьПараметрыКомандыПоСловарю(Команда, Словарь, СвойстваЭлемента, ПоддерживаемыеСвойства["profile_" + ИмяСписка]); + + ЗапуститьКоманду(Команда + " " + ПараметрыКластера, ПараметрыАдминистрированияКластера); + +КонецПроцедуры + +// Обновляет элементы acl'a для профиля безопасности. +// +// Параметры: +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИмяПрофиля - Строка - имя профиля безопасности. +// ИмяСписка - Строка - имя списка контроля доступа (acl) в нотации утилиты rac. +// Словарь - Структура - соответствие имен свойств в потоке вывода утилиты rac и в требуемом описании. +// НовыеЭлементы - Структура - значения свойств элемента списка контроля доступа. +// СтарыеЭлементы - Структура - значения свойств элемента списка контроля доступа. +// +Процедура ОбновитьЭлементыСпискаКонтроляДоступа(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, + Знач ИмяПрофиля, Знач ИмяСписка, Знач Словарь, Знач НовыеЭлементы, Знач СтарыеЭлементы = Неопределено) + + Если СтарыеЭлементы = Неопределено Или СтарыеЭлементы.Количество() = 0 Тогда + Для Каждого НовыйЭлемент Из НовыеЭлементы Цикл + ОбновитьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, Словарь, НовыйЭлемент); + КонецЦикла; + Возврат; + КонецЕсли; + + КлючСписка = КлючиСписковКонтроляДоступа()[ИмяСписка]; + ИмяКлючевогоПараметра = ""; + Для Каждого КлючИЗначение Из Словарь Цикл + Если КлючИЗначение.Значение = КлючСписка Тогда + ИмяКлючевогоПараметра = КлючИЗначение.Ключ; + КонецЕсли; + КонецЦикла; + + ЭлементыДляУдаления = Новый Соответствие; + Для Каждого СтарыйЭлемент Из СтарыеЭлементы Цикл + ЭлементыДляУдаления.Вставить(СтарыйЭлемент[ИмяКлючевогоПараметра], СтарыйЭлемент); + КонецЦикла; + + // Создание или обновление (если свойства различаются). + Для Каждого НовыйЭлемент Из НовыеЭлементы Цикл + Ключ = НовыйЭлемент[ИмяКлючевогоПараметра]; + СтарыйЭлемент = ЭлементыДляУдаления.Получить(Ключ); + Если СтарыйЭлемент = Неопределено Тогда + ОбновитьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, Словарь, НовыйЭлемент); + Иначе + ЭлементыДляУдаления.Удалить(Ключ); + // Обновление только если различаются свойства. + Для Каждого КлючИЗначение Из НовыйЭлемент Цикл + Если КлючИЗначение.Значение <> СтарыйЭлемент[КлючИЗначение.Ключ] Тогда + ОбновитьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, Словарь, НовыйЭлемент); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + // Удаление ненужных элементов. + Для Каждого КлючИЗначение Из ЭлементыДляУдаления Цикл + УдалитьЭлементСпискаКонтроляДоступа(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ИмяПрофиля, ИмяСписка, КлючИЗначение.Ключ); + КонецЦикла; + +КонецПроцедуры + +// Выполняет преобразование значений свойств использования списков контроля доступа (используется +// нестандартное форматирование значений при передаче значений в утилиту rac - Истина="full", Ложь="list"). +// +// Параметры: +// Описание - Структура - структура, содержащая описание объекта, полученное из потока вывода +// утилиты rac. +// +// Возвращаемое значение: +// Структура - структура, в которой значения "full" и "list" преобразованы в Истина и Ложь. +// +Функция ПреобразоватьЗначенияСвойствИспользованияСписковДоступа(Знач Описание) + + Словарь = СловарьСвойствИспользованияСписокКонтроляДоступа(); + + Результат = Новый Структура; + + Для Каждого КлючИЗначение Из Описание Цикл + + Если Словарь.Свойство(КлючИЗначение.Ключ) Тогда + + Если КлючИЗначение.Значение = "list" Тогда + + Значение = Ложь; + + ИначеЕсли КлючИЗначение.Значение = "full" Тогда + + Значение = Истина; + + КонецЕсли; + + Результат.Вставить(КлючИЗначение.Ключ, Значение); + + Иначе + + Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Преобразует значение встроенного языка к нотации консольного клиента сервера +// администрирования. +// +// Параметры: +// Значение - Произвольный - значение, которое необходимо преобразовать. +// +// Возвращаемое значение: +// Строка - значение, приведенное к нотации консольного клиента сервера администрирования. +// +Функция ПривестиЗначение(Знач Значение) + + Если ТипЗнч(Значение) = Тип("Дата") Тогда + + Возврат XMLСтрока(Значение); + + ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда + + Возврат Формат(Значение, "БЛ=no; БИ=yes"); + + ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда + + Возврат Формат(Значение, "ЧРД=,; ЧН=0; ЧГ=0; ЧО=1"); + + ИначеЕсли ТипЗнч(Значение) = Тип("Строка") Тогда + + // В документации написано: + // Строки, допускающие произвольные символы, выводятся в двойных кавычках, при этом двойные кавычки в самих строках дублируются. + Цифры = "0123456789"; + Латиница = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + Кириллица = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯабвгдежзийклмнопрстуфхцчшщыъьэюя"; // АПК:1036 алфовит не проверять орфографически. + ДопустимыеСимволы = Цифры + Латиница + Кириллица + "-"; + Если СтрокаСодержитТолькоДопустимыеСимволы(Значение, ДопустимыеСимволы) Тогда + Возврат Значение; + Иначе + Возврат """" + СтрЗаменить(Значение, """", """""") + """"; + КонецЕсли; + + КонецЕсли; + + Возврат Строка(Значение); + +КонецФункции + +Функция СтрокаСодержитТолькоДопустимыеСимволы(Строка, ДопустимыеСимволы) + + ВсеДопустимыеСимволы = Новый Соответствие; + Для Позиция = 1 По СтрДлина(ДопустимыеСимволы) Цикл + ВсеДопустимыеСимволы[Сред(ДопустимыеСимволы, Позиция, 1)] = Истина; + КонецЦикла; + + Для Позиция = 1 По СтрДлина(Строка) Цикл + Если ВсеДопустимыеСимволы[Сред(Строка, Позиция, 1)] = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + + +// Преобразует элемент потока вывода, содержащий значение к нотации консольного клиента +// сервера администрирования, к значению встроенного языка. +// +// Параметры: +// ЭлементВывода - Строка - элемент потока вывода, содержащий значение к нотации консольного клиента +// сервера администрирования. +// ТипЭлемента - Тип - тип элемента, один из простых типов: Строка, Булево, Дата, Число +// +// Возвращаемое значение: +// Произвольный - значение встроенного языка. +// +Функция ПривестиЭлементВывода(ЭлементВывода, ТипЭлемента) + + Если ТипЭлемента = Тип("Строка") Тогда + + Возврат ЭлементВывода; + + ИначеЕсли ТипЭлемента = Тип("Число") Тогда + + Если ПустаяСтрока(ЭлементВывода) Тогда + Возврат 0; + КонецЕсли; + + Попытка + Возврат Число(ЭлементВывода); + Исключение + ВызватьИсключение НСтр("ru = 'Неправильный формат.'"); + КонецПопытки; + + ИначеЕсли ТипЭлемента = Тип("Дата") Тогда + + Если ПустаяСтрока(ЭлементВывода) Тогда + Возврат Дата(1, 1, 1); + КонецЕсли; + + Попытка + Возврат XMLЗначение(Тип("Дата"), ЭлементВывода); + Исключение + ВызватьИсключение НСтр("ru = 'Неправильный формат.'"); + КонецПопытки; + + ИначеЕсли ТипЭлемента = Тип("Булево") Тогда + + Если ЭлементВывода = "on" Или ЭлементВывода = "yes" Тогда + Возврат Истина; + ИначеЕсли ЭлементВывода = "off" Или ЭлементВывода = "no" Тогда + Возврат Ложь; + Иначе + ВызватьИсключение НСтр("ru = 'Неправильный формат.'"); + КонецЕсли; + + ИначеЕсли ТипЭлемента = Неопределено Тогда + + // Попытка понять какой тип в строке не производится, + // т.к., например, пустая строка может быть пустой датой, + // а в строке могут быть только числа (например PID рабочего процесса). + + Если ПустаяСтрока(ЭлементВывода) Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат ЭлементВывода; + + Иначе + + ВызватьИсключение НСтр("ru = 'Неверный тип элемента.'"); + + КонецЕсли; + + Возврат ЭлементВывода; + +КонецФункции + +// Преобразует перенаправленный поток вывода консольного клиента сервера +// администрирования к массиву соответствий (элементы массива - объекты, +// ключи соответствия - имена свойств, значения соответствия - значения свойств). +// +// Параметры: +// ПотокВывода - Строка - перенаправленный поток вывода, +// Словарь - Структура - выступающая в качестве словаря сопоставления имен свойств объектов. +// В нотации утилиты rac и в нотации API, +// Фильтр - Структура - условия фильтрации объектов (только для потоков вывода команд, возвращающих +// коллекции объектов). +// ТипыСвойств - Соответствие - где ключ - имя свойства, значение - тип свойства. +// +// Возвращаемое значение: +// Массив - массив описаний объектов, структур или соответствий (в зависимости от заполненности свойства Словарь). +// +Функция ПарсерВывода(Знач ПотокВывода, Знач Словарь, Знач Фильтр = Неопределено, ТипыСвойств = Неопределено) + + Результат = Новый Массив; + ЭлементРезультата = Новый Соответствие; + + Позиция = 1; + КонецВывода = СтрДлина(ПотокВывода); + + Пока Позиция <= КонецВывода Цикл + + ИмяСвойства = ПрочитатьДоРазделителя(ПотокВывода, Позиция, ":"); + СтрокаСвойства = ПрочитатьДоРазделителя(ПотокВывода, Позиция, Символы.ПС); + ТипСвойства = ?(ТипыСвойств = Неопределено, Неопределено, ТипыСвойств.Получить(ИмяСвойства)); + ЗначениеСвойства = ПривестиЭлементВывода(СтрокаСвойства, ТипСвойства); + ЭлементРезультата.Вставить(ИмяСвойства, ЗначениеСвойства); + + Если Сред(ПотокВывода, Позиция, 1) = Символы.ПС Тогда + Позиция = Позиция + 1; + ПарсерЭлементаВывода(ЭлементРезультата, Результат, Словарь, Фильтр); + ЭлементРезультата = Новый Соответствие; + КонецЕсли; + + КонецЦикла; + + Если ЭлементРезультата.Количество() > 0 Тогда + ПарсерЭлементаВывода(ЭлементРезультата, Результат, Словарь, Фильтр); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Читает строку до разделителя, сдвигая позицию. +// +// Параметры: +// Поток - Строка - текст. +// Позиция - Число - номер символа, который сейчас является текущим. +// Разделитель - Символ - символ, который является разделителем. +// +// Возвращаемое значение: +// Строка - строка, прочитанная с текущей позиции до разделителя, при этом из нее удалены лишние кавычки. +Функция ПрочитатьДоРазделителя(Поток, Позиция, Разделитель) + + ТекущийСимвол = Сред(Поток, Позиция, 1); + + // Сдвинуть позицию на значащий символ. + Пока ПустаяСтрока(ТекущийСимвол) И Не ТекущийСимвол = Разделитель И Позиция < СтрДлина(Поток) Цикл + Позиция = Позиция + 1; + ТекущийСимвол = Сред(Поток, Позиция, 1); + КонецЦикла; + + Если ТекущийСимвол = Разделитель Тогда + Позиция = Позиция + 1; + Возврат ""; + КонецЕсли; + + Кавычка = """"; + Если ТекущийСимвол = Кавычка Тогда + Позиция = Позиция + 1; + НачальнаяПозиция = Позиция; + // Нужно идти до следующей одиночной кавычки + Пока Позиция <= СтрДлина(Поток) Цикл + НайденнаяКавычка = СтрНайти(Поток, Кавычка, НаправлениеПоиска.СНачала, Позиция); + Если НайденнаяКавычка = 0 Тогда + ВызватьИсключение НСтр("ru = 'Неправильный формат.'"); + ИначеЕсли Сред(Поток, НайденнаяКавычка + 1, 1) = Кавычка Тогда + Позиция = НайденнаяКавычка + 2; + Иначе + Позиция = НайденнаяКавычка + 1; + // За кавычкой может быть разделитель. + Если Сред(Поток, Позиция, 1) = Разделитель Тогда + Позиция = Позиция + 1; + КонецЕсли; + Прервать; + КонецЕсли; + КонецЦикла; + Если Позиция > СтрДлина(Поток) Тогда + ВызватьИсключение НСтр("ru = 'Неправильный формат.'"); + КонецЕсли; + Значение = СокрЛП(Сред(Поток, НачальнаяПозиция, НайденнаяКавычка - НачальнаяПозиция)); + Значение = СтрЗаменить(Значение, Кавычка + Кавычка, Кавычка); + Возврат Значение; + Иначе + // Простой случай, прочитать нужно до следующего разделителя + ПозицияРазделителя = СтрНайти(Поток, Разделитель, НаправлениеПоиска.СНачала, Позиция); + Значение = СокрЛП(Сред(Поток, Позиция, ПозицияРазделителя - Позиция)); + Позиция = ПозицияРазделителя + 1; + Возврат Значение; + КонецЕсли; + +КонецФункции + +// Преобразует элемент перенаправленного потока вывода консольного клиента сервера администрирования +// к соответствию. Ключи соответствия - имена свойств, значения соответствия - значения свойств. +// +// Параметры: +// ЭлементРезультата - Строка - элемент потока вывода, +// Результата - Массив - массив, в который должен быть добавлен распарсенный объект, +// Словарь - Структура - структура, выступающая в качестве словаря сопоставления имен свойств объектов. +// В нотации утилиты rac и в нотации API, +// Фильтр - Структура - условия фильтрации объектов (только для потоков вывода команд, возвращающих +// коллекции объектов). +// +Процедура ПарсерЭлементаВывода(ЭлементРезультата, Результат, Словарь, Фильтр) + + Если Словарь <> Неопределено Тогда + Объект = РазобратьЭлементВывода(ЭлементРезультата, Словарь); + Иначе + Объект = ЭлементРезультата; + КонецЕсли; + + Если Фильтр <> Неопределено И Не АдминистрированиеКластера.ПроверитьУсловияФильтра(Объект, Фильтр) Тогда + Возврат; + КонецЕсли; + + Результат.Добавить(Объект); + +КонецПроцедуры + +// Разбирает элемент перенаправленного потока вывода консольного клиента сервера администрирования. +// +// Параметры: +// ЭлементВывода - Строка - элемент перенаправленного потока вывода клиента сервера администрирования. +// Словарь - Структура - структура, выступающая в качестве словаря сопоставления имен свойств объектов +// в нотации утилиты rac и в нотации API. +// +// Возвращаемое значение: +// Структура - структура, у которой ключи - имена свойств в нотации API, значения - значения свойств +// из перенаправленного потока вывода. +// +Функция РазобратьЭлементВывода(Знач ЭлементВывода, Знач Словарь) + + Результат = Новый Структура(); + + Для Каждого ФрагментСловаря Из Словарь Цикл + Если ТипЗнч(ФрагментСловаря.Значение) = Тип("ФиксированнаяСтруктура") Тогда + ПодчиненныйОбъект = ЭлементВывода[ФрагментСловаря.Значение.Ключ]; + Если ПодчиненныйОбъект = Неопределено Тогда + Результат.Вставить(ФрагментСловаря.Ключ, Неопределено); + Иначе + Свойство = РазобратьЭлементВывода(ЭлементВывода[ФрагментСловаря.Значение.Ключ], ФрагментСловаря.Значение.Словарь); + Результат.Вставить(ФрагментСловаря.Ключ, Свойство); + КонецЕсли; + Иначе + Результат.Вставить(ФрагментСловаря.Ключ, ЭлементВывода[ФрагментСловаря.Значение]); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Преобразует фильтр в нотацию утилиты rac. +// +// Параметры: +// Фильтр - Структура, Массив - фильтр в нотации API. +// Словарь - Структура - описание соответствия имен свойств в нотации API и в нотации утилиты rac. +// +// Возвращаемое значение: +// Структура, Массив - фильтр в нотации утилиты rac. +// +Функция ФильтрВНотациюRac(Знач Фильтр, Знач Словарь) + + Если Фильтр = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если Словарь = Неопределено Тогда + Возврат Фильтр; + КонецЕсли; + + Результат = Новый Массив(); + + Для Каждого Условие Из Фильтр Цикл + + Если ТипЗнч(Условие) = Тип("КлючИЗначение") Тогда + + Результат.Добавить(Новый Структура("Свойство, ВидСравнения, Значение", Словарь[Условие.Ключ], ВидСравнения.Равно, Условие.Значение)); + + ИначеЕсли ТипЗнч(Условие) = Тип("Структура") Тогда + + Результат.Добавить(Новый Структура("Свойство, ВидСравнения, Значение", Словарь[Условие.Свойство], Условие.ВидСравнения, Условие.Значение)); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает соответствие имен свойств информационной базы, описывающих состояние +// блокировки сеансов и регламентных заданий, для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствБлокировкиСеансовИРегламентныхЗаданий() + + Результат = АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий(); + + Результат.БлокировкаСеансов = "sessions-deny"; + Результат.ДатаС = "denied-from"; + Результат.ДатаПо = "denied-to"; + Результат.Сообщение = "denied-message"; + Результат.КодРазрешения = "permission-code"; + Результат.ПараметрБлокировки = "denied-parameter"; + Результат.БлокировкаРегламентныхЗаданий = "scheduled-jobs-deny"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств сеансов информационной базы для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваСеанса()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствСеансов() + + Лицензия = Новый Структура; + Лицензия.Вставить("Ключ", "license"); + Лицензия.Вставить("Словарь", СловарьСвойствЛицензии()); + + ОписаниеСоединения = Новый Структура; + ОписаниеСоединения.Вставить("Ключ", "connection"); + ОписаниеСоединения.Вставить("Словарь", СловарьСвойствОписанияСоединения()); + + РабочийПроцесс = Новый Структура; + РабочийПроцесс.Вставить("Ключ", "process"); + РабочийПроцесс.Вставить("Словарь", СловарьСвойствРабочегоПроцесса()); + + Результат = АдминистрированиеКластера.СвойстваСеанса(); + + Результат.Номер = "session-id"; + Результат.ИмяПользователя = "user-name"; + Результат.ИмяКлиентскогоКомпьютера = "host"; + Результат.ИдентификаторКлиентскогоПриложения = "app-id"; + Результат.ИдентификаторЯзыка = "locale"; + Результат.МоментСозданияСеанса = "started-at"; + Результат.МоментПоследнейАктивностиСеанса = "last-active-at"; + Результат.БлокировкаСУБД = "blocked-by-dbms"; + Результат.Блокировка = "blocked-by-ls"; + Результат.Передано = "bytes-all"; + Результат.ПереданоЗа5Минут = "bytes-last-5min"; + Результат.СерверныхВызовов = "calls-all"; + Результат.СерверныхВызововЗа5Минут = "calls-last-5min"; + Результат.ДлительностьСерверныхВызовов = "duration-all"; + Результат.ДлительностьТекущегоСерверногоВызова = "duration-current"; + Результат.ДлительностьСерверныхВызововЗа5Минут = "duration-last-5min"; + Результат.ПереданоСУБД = "dbms-bytes-all"; + Результат.ПереданоСУБДЗа5Минут = "dbms-bytes-last-5min"; + Результат.ДлительностьВызововСУБД = "duration-all-dbms"; + Результат.ДлительностьТекущегоВызоваСУБД = "duration-current-dbms"; + Результат.ДлительностьВызововСУБДЗа5Минут = "duration-last-5min-dbms"; + Результат.СоединениеСУБД = "db-proc-info"; + Результат.ВремяСоединенияСУБД = "db-proc-took"; + Результат.МоментЗахватаСоединенияСУБД = "db-proc-took-at"; + Результат.Спящий = "hibernate"; + Результат.ЗавершитьЧерез = "hibernate-session-terminate-time"; + Результат.ЗаснутьЧерез = "passive-session-hibernate-time"; + Результат.ПрочитаноСДиска = "read-total"; + Результат.ПрочитаноСДискаВТекущемВызове = "read-current"; + Результат.ПрочитаноСДискаЗа5Минут = "read-last-5min"; + Результат.ЗанятоПамяти = "memory-total"; + Результат.ЗанятоПамятиВТекущемВызове = "memory-current"; + Результат.ЗанятоПамятиЗа5Минут = "memory-last-5min"; + Результат.ЗаписаноНаДиск = "write-total"; + Результат.ЗаписаноНаДискВТекущемВызове = "write-current"; + Результат.ЗаписаноНаДискЗа5Минут = "write-last-5min"; + Результат.Лицензия = Новый ФиксированнаяСтруктура(Лицензия); + Результат.ОписаниеСоединения = Новый ФиксированнаяСтруктура(ОписаниеСоединения); + Результат.РабочийПроцесс = Новый ФиксированнаяСтруктура(РабочийПроцесс); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств соединений с информационной базой для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваСоединения()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствСоединений() + + Результат = АдминистрированиеКластера.СвойстваСоединения(); + + Результат.Номер = "conn-id"; + Результат.ИмяПользователя = "user-name"; + Результат.ИмяКлиентскогоКомпьютера = "host"; + Результат.ИдентификаторКлиентскогоПриложения = "app-id"; + Результат.МоментУстановкиСоединения = "connected-at"; + Результат.РежимСоединенияСИнформационнойБазой = "ib-conn-mode"; + Результат.РежимСоединенияСБазойДанных = "db-conn-mode"; + Результат.БлокировкаСУБД = "blocked-by-dbms"; + Результат.Передано = "bytes-all"; + Результат.ПереданоЗа5Минут = "bytes-last-5min"; + Результат.СерверныхВызовов = "calls-all"; + Результат.СерверныхВызововЗа5Минут = "calls-last-5min"; + Результат.ПереданоСУБД = "dbms-bytes-all"; + Результат.ПереданоСУБДЗа5Минут = "dbms-bytes-last-5min"; + Результат.СоединениеСУБД = "db-proc-info"; + Результат.ВремяСУБД = "db-proc-took"; + Результат.МоментЗахватаСоединенияСУБД = "db-proc-took-at"; + Результат.ДлительностьСерверныхВызовов = "duration-all"; + Результат.ДлительностьВызововСУБД = "duration-all-dbms"; + Результат.ДлительностьТекущегоСерверногоВызова = "duration-current"; + Результат.ДлительностьТекущегоВызоваСУБД = "duration-current-dbms"; + Результат.ДлительностьСерверныхВызововЗа5Минут = "duration-last-5min"; + Результат.ДлительностьВызововСУБДЗа5Минут = "duration-last-5min-dbms"; + Результат.ПрочитаноСДиска = "read-total"; + Результат.ПрочитаноСДискаВТекущемВызове = "read-current"; + Результат.ПрочитаноСДискаЗа5Минут = "read-last-5min"; + Результат.ЗанятоПамяти = "memory-total"; + Результат.ЗанятоПамятиВТекущемВызове = "memory-current"; + Результат.ЗанятоПамятиЗа5Минут = "memory-last-5min"; + Результат.ЗаписаноНаДиск = "write-total"; + Результат.ЗаписаноНаДискВТекущемВызове = "write-current"; + Результат.ЗаписаноНаДискЗа5Минут = "write-last-5min"; + Результат.УправлениеНаходитсяНаСервере = "thread-mode"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств профиля безопасности для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваПрофиляБезопасности()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствПрофиляБезопасности(Знач ВключаяСвойстваИспользованияСписковКонтроляДоступа = Истина) + + Результат = АдминистрированиеКластера.СвойстваПрофиляБезопасности(); + + Результат.Удалить("COMКлассы"); + Результат.Удалить("ВиртуальныеКаталоги"); + Результат.Удалить("ВнешниеКомпоненты"); + Результат.Удалить("ВнешниеМодули"); + Результат.Удалить("ИнтернетРесурсы"); + Результат.Удалить("ПриложенияОС"); + + Результат.Имя = "name"; + Результат.Описание = "descr"; + Результат.ПрофильБезопасногоРежима = "config"; + Результат.ПолныйДоступКПривилегированномуРежиму = "priv"; + Результат.ПолныйДоступКФункциямКриптографии = "crypto"; + Результат.ПолныйДоступКРасширениюВсехМодулей = "all-modules-extension"; + Результат.ДоступныеДляРасширенияМодули = "modules-available-for-extension"; + Результат.НедоступныеДляРасширенияМодули = "modules-not-available-for-extension"; + Результат.ПолныйДоступКРасширениюПравДоступа = "right-extension"; + Результат.РолиОграничивающиеРасширениеПравДоступа = "right-extension-definition-roles"; + + СловарьСвойствИспользованияСписковКонтроляДоступа = СловарьСвойствИспользованияСписокКонтроляДоступа(); + Для Каждого ФрагментСловаря Из СловарьСвойствИспользованияСписковКонтроляДоступа Цикл + Если ВключаяСвойстваИспользованияСписковКонтроляДоступа Тогда + Результат[ФрагментСловаря.Ключ] = ФрагментСловаря.Значение; + Иначе + Результат.Удалить(ФрагментСловаря.Ключ); + КонецЕсли; + КонецЦикла; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств профиля безопасности для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваПрофиляБезопасности()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствИспользованияСписокКонтроляДоступа() + + Результат = Новый Структура(); + + Результат.Вставить("ПолныйДоступКФайловойСистеме", "directory"); + Результат.Вставить("ПолныйДоступКCOMОбъектам", "com"); + Результат.Вставить("ПолныйДоступКВнешнимКомпонентам", "addin"); + Результат.Вставить("ПолныйДоступКВнешнимМодулям", "module"); + Результат.Вставить("ПолныйДоступКПриложениямОперационнойСистемы", "app"); + Результат.Вставить("ПолныйДоступКИнтернетРесурсам", "inet"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств виртуального каталога для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваВиртуальногоКаталога()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствВиртуальногоКаталога() + + Результат = АдминистрированиеКластера.СвойстваВиртуальногоКаталога(); + + Результат.ЛогическийURL = "alias"; + Результат.ФизическийURL = "physicalPath"; + + Результат.Описание = "descr"; + + Результат.ЧтениеДанных = "allowedRead"; + Результат.ЗаписьДанных = "allowedWrite"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств COM-класса для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваCOMКласса()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствCOMКласса() + + Результат = АдминистрированиеКластера.СвойстваCOMКласса(); + + Результат.Имя = "name"; + Результат.Описание = "descr"; + + Результат.ФайлМоникер = "fileName"; + Результат.CLSID = "id"; + Результат.Компьютер = "host"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств внешней компоненты для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваВнешнейКомпоненты()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствВнешнейКомпоненты() + + Результат = АдминистрированиеКластера.СвойстваВнешнейКомпоненты(); + + Результат.Имя = "name"; + Результат.Описание = "descr"; + + Результат.ХэшСумма = "hash"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств внешнего модуля для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваВнешнегоМодуля()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствВнешнегоМодуля() + + Результат = АдминистрированиеКластера.СвойстваВнешнегоМодуля(); + + Результат.Имя = "name"; + Результат.Описание = "descr"; + + Результат.ХэшСумма = "hash"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств приложения операционной системы для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваПриложенияОС()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствПриложенияОС() + + Результат = АдминистрированиеКластера.СвойстваПриложенияОС(); + + Результат.Имя = "name"; + Результат.Описание = "descr"; + + Результат.ШаблонСтрокиЗапуска = "wild"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств Интернет-ресурса для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваИнтернетРесурса()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствИнтернетРесурса() + + Результат = АдминистрированиеКластера.СвойстваИнтернетРесурса(); + + Результат.Имя = "name"; + Результат.Описание = "descr"; + + Результат.Протокол = "protocol"; + Результат.Адрес = "url"; + Результат.Порт = "port"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств Описания соединения для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваОписанияСоединения()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствОписанияСоединения() + + РабочийПроцесс = Новый Структура; + РабочийПроцесс.Вставить("Ключ", "process"); + РабочийПроцесс.Вставить("Словарь", СловарьСвойствРабочегоПроцесса()); + + Результат = АдминистрированиеКластера.СвойстваОписанияСоединения(); + + Результат.ИмяПриложения = "application"; + Результат.Блокировка = "blocked-by-ls"; + Результат.МоментУстановкиСоединения = "connected-at"; + Результат.Номер = "conn-id"; + Результат.ИмяКлиентскогоКомпьютера = "host"; + Результат.НомерСеанса = "session-number"; + Результат.РабочийПроцесс = Новый ФиксированнаяСтруктура(РабочийПроцесс); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств Лицензии для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваЛицензии()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствЛицензии() + + Результат = АдминистрированиеКластера.СвойстваЛицензии(); + + Результат.ИмяФайла = "full-name"; + Результат.ПолноеПредставление = "full-presentation"; + Результат.КраткоеПредставление = "short-presentation"; + Результат.ВыданаСервером = "issued-by-server"; + Результат.ТипЛицензии = "license-type"; + Результат.МаксимальноеКоличествоПользователейДляКомплекта = "max-users-all"; + Результат.МаксимальноеКоличествоПользователейВКлюче = "max-users-cur"; + Результат.ЛицензияПолученаЧерезAladdinLicenseManager = "net"; + Результат.АдресПроцесса = "rmngr-address"; + Результат.ИдентификаторПроцесса = "rmngr-pid"; + Результат.ПортПроцесса = "rmngr-port"; + Результат.СерияКлюча = "series"; + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен свойств Рабочего процесса для структур, используемых в API и +// описаний объектов в выводе rac'a. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя свойства в API (см. АдминистрированиеКластера.СвойстваРабочегоПроцесса()), +// * Значение - Строка - имя свойства объекта. +// +Функция СловарьСвойствРабочегоПроцесса() + + Лицензия = Новый Структура; + Лицензия.Вставить("Ключ", "license"); + Лицензия.Вставить("Словарь", СловарьСвойствЛицензии()); + + Результат = АдминистрированиеКластера.СвойстваРабочегоПроцесса(); + + Результат.ДоступнаяПроизводительность = "available-perfomance"; + Результат.ЗатраченоКлиентом = "avg-back-call-time"; + Результат.РеакцияСервера = "avg-call-time"; + Результат.ЗатраченоСУБД = "avg-db-call-time"; + Результат.ЗатраченоМенеджеромБлокировок = "avg-lock-call-time"; + Результат.ЗатраченоСервером = "avg-server-call-time"; + Результат.КлиентскихПотоков = "avg-threads"; + Результат.ОтносительнаяПроизводительность = "capacity"; + Результат.Соединений = "connections"; + Результат.ИмяКомпьютера = "host"; + Результат.Включен = "is-enable"; + Результат.Порт = "port"; + Результат.ПревышениеНадКритическимЗначением = "memory-excess-time"; + Результат.ЗанятоПамяти = "memory-size"; + Результат.Идентификатор = "pid"; + Результат.Запущен = "running"; + Результат.КоличествоВызововПоКоторымПосчитанаСтатистика = "selection-size"; + Результат.МоментЗапуска = "started-at"; + Результат.Использование = "use"; + Результат.Лицензия = Новый ФиксированнаяСтруктура(Лицензия); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает имена ключевых свойств acl'ей (в нотации утилиты rac). +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - фиксированная структура, у которой: +// * Ключ - Строка - имя acl'a, +// * Значение - Строка - имя ключевого свойства. +// +Функция КлючиСписковКонтроляДоступа() + + Результат = Новый Структура(); + + Результат.Вставить("directory", "alias"); + Результат.Вставить("com", "name"); + Результат.Вставить("addin", "name"); + Результат.Вставить("module", "name"); + Результат.Вставить("app", "name"); + Результат.Вставить("inet", "name"); + + Возврат Новый ФиксированнаяСтруктура(Результат); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств кластера. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствКластера() + + Типы = Новый Соответствие; + + Типы.Вставить("cluster", Тип("Строка")); + Типы.Вставить("host", Тип("Строка")); + Типы.Вставить("port", Тип("Число")); + Типы.Вставить("name", Тип("Строка")); + Типы.Вставить("expiration-timeout", Тип("Число")); + Типы.Вставить("lifetime-limit", Тип("Число")); + Типы.Вставить("max-memory-size", Тип("Число")); + Типы.Вставить("max-memory-time-limit", Тип("Число")); + Типы.Вставить("security-level", Тип("Число")); + Типы.Вставить("session-fault-tolerance-level", Тип("Число")); + Типы.Вставить("load-balancing-mode", Тип("Строка")); + Типы.Вставить("errors-count-threshold", Тип("Число")); + Типы.Вставить("kill-problem-processes", Тип("Число")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств рабочих серверов. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствРабочихСерверов() + + Типы = Новый Соответствие; + + Типы.Вставить("server", Тип("Строка")); + Типы.Вставить("agent-host", Тип("Строка")); + Типы.Вставить("agent-port", Тип("Число")); + Типы.Вставить("port-range", Тип("Строка")); + Типы.Вставить("name", Тип("Строка")); + Типы.Вставить("using", Тип("Строка")); + Типы.Вставить("dedicate-managers", Тип("Строка")); + Типы.Вставить("infobases-limit", Тип("Число")); + Типы.Вставить("memory-limit", Тип("Число")); + Типы.Вставить("connections-limit", Тип("Число")); + Типы.Вставить("safe-working-processes-memory-limit", Тип("Число")); + Типы.Вставить("safe-call-memory-limit", Тип("Число")); + Типы.Вставить("cluster-port", Тип("Число")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств описания базы. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствОписанияБазы() + + Типы = Новый Соответствие; + + Типы.Вставить("infobase", Тип("Строка")); + Типы.Вставить("name", Тип("Строка")); + Типы.Вставить("descr", Тип("Строка")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств информационной базы. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствИнформационнойБазы() + + Типы = Новый Соответствие; + + Типы.Вставить("infobase", Тип("Строка")); + Типы.Вставить("name", Тип("Строка")); + Типы.Вставить("dbms", Тип("Строка")); + Типы.Вставить("db-server", Тип("Строка")); + Типы.Вставить("db-name", Тип("Строка")); + Типы.Вставить("db-user", Тип("Строка")); + Типы.Вставить("security-level", Тип("Число")); + Типы.Вставить("license-distribution", Тип("Строка")); + Типы.Вставить("scheduled-jobs-deny", Тип("Булево")); + Типы.Вставить("sessions-deny", Тип("Булево")); + Типы.Вставить("denied-from", Тип("Дата")); + Типы.Вставить("denied-message", Тип("Строка")); + Типы.Вставить("denied-parameter", Тип("Строка")); + Типы.Вставить("denied-to", Тип("Дата")); + Типы.Вставить("permission-code", Тип("Строка")); + Типы.Вставить("external-session-manager-connection-string", Тип("Строка")); + Типы.Вставить("external-session-manager-required", Тип("Булево")); + Типы.Вставить("security-profile-name", Тип("Строка")); + Типы.Вставить("safe-mode-security-profile-name", Тип("Строка")); + Типы.Вставить("descr", Тип("Строка")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств сеансов. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствСеансов() + + Типы = Новый Соответствие; + + Типы.Вставить("session", Тип("Строка")); + Типы.Вставить("session-id", Тип("Число")); + Типы.Вставить("infobase", Тип("Строка")); + Типы.Вставить("connection", Тип("Строка")); + Типы.Вставить("process", Тип("Строка")); + Типы.Вставить("user-name", Тип("Строка")); + Типы.Вставить("host", Тип("Строка")); + Типы.Вставить("app-id", Тип("Строка")); + Типы.Вставить("locale", Тип("Строка")); + Типы.Вставить("started-at", Тип("Дата")); + Типы.Вставить("last-active-at", Тип("Дата")); + Типы.Вставить("hibernate", Тип("Булево")); + Типы.Вставить("passive-session-hibernate-time", Тип("Число")); + Типы.Вставить("hibernate-session-terminate-time", Тип("Число")); + Типы.Вставить("blocked-by-dbms", Тип("Число")); + Типы.Вставить("blocked-by-ls", Тип("Число")); + Типы.Вставить("bytes-all", Тип("Число")); + Типы.Вставить("bytes-last-5min", Тип("Число")); + Типы.Вставить("calls-all", Тип("Число")); + Типы.Вставить("calls-last-5min", Тип("Число")); + Типы.Вставить("dbms-bytes-all", Тип("Число")); + Типы.Вставить("dbms-bytes-last-5min", Тип("Число")); + Типы.Вставить("db-proc-info", Тип("Строка")); + Типы.Вставить("db-proc-took", Тип("Число")); + Типы.Вставить("db-proc-took-at", Тип("Дата")); + Типы.Вставить("duration-all", Тип("Число")); + Типы.Вставить("duration-all-dbms", Тип("Число")); + Типы.Вставить("duration-current", Тип("Число")); + Типы.Вставить("duration-current-dbms", Тип("Число")); + Типы.Вставить("duration-last-5min", Тип("Число")); + Типы.Вставить("duration-last-5min-dbms", Тип("Число")); + Типы.Вставить("memory-current", Тип("Число")); + Типы.Вставить("memory-last-5min", Тип("Число")); + Типы.Вставить("memory-total", Тип("Число")); + Типы.Вставить("read-current", Тип("Число")); + Типы.Вставить("read-last-5min", Тип("Число")); + Типы.Вставить("read-total", Тип("Число")); + Типы.Вставить("write-current", Тип("Число")); + Типы.Вставить("write-last-5min", Тип("Число")); + Типы.Вставить("write-total", Тип("Число")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств соединений. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствСоединений() + + Типы = Новый Соответствие; + + Типы.Вставить("connection", Тип("Строка")); + Типы.Вставить("conn-id", Тип("Число")); + Типы.Вставить("user-name", Тип("Строка")); + Типы.Вставить("host", Тип("Строка")); + Типы.Вставить("app-id", Тип("Строка")); + Типы.Вставить("connected-at", Тип("Дата")); + Типы.Вставить("thread-mode", Тип("Строка")); + Типы.Вставить("ib-conn-mode", Тип("Строка")); + Типы.Вставить("db-conn-mode", Тип("Строка")); + Типы.Вставить("blocked-by-dbms", Тип("Число")); + Типы.Вставить("bytes-all", Тип("Число")); + Типы.Вставить("bytes-last-5min", Тип("Число")); + Типы.Вставить("calls-all", Тип("Число")); + Типы.Вставить("calls-last-5min", Тип("Число")); + Типы.Вставить("dbms-bytes-all", Тип("Число")); + Типы.Вставить("dbms-bytes-last-5min", Тип("Число")); + Типы.Вставить("db-proc-info", Тип("Строка")); + Типы.Вставить("db-proc-took", Тип("Число")); + Типы.Вставить("db-proc-took-at", Тип("Дата")); + Типы.Вставить("duration-all", Тип("Число")); + Типы.Вставить("duration-all-dbms", Тип("Число")); + Типы.Вставить("duration-current", Тип("Число")); + Типы.Вставить("duration-current-dbms", Тип("Число")); + Типы.Вставить("duration-last-5min", Тип("Число")); + Типы.Вставить("duration-last-5min-dbms", Тип("Число")); + Типы.Вставить("memory-current", Тип("Число")); + Типы.Вставить("memory-last-5min", Тип("Число")); + Типы.Вставить("memory-total", Тип("Число")); + Типы.Вставить("read-current", Тип("Число")); + Типы.Вставить("read-last-5min", Тип("Число")); + Типы.Вставить("read-total", Тип("Число")); + Типы.Вставить("write-current", Тип("Число")); + Типы.Вставить("write-last-5min", Тип("Число")); + Типы.Вставить("write-total", Тип("Число")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств профиля безопасности. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствПрофиля() + + Типы = Новый Соответствие; + + Типы.Вставить("name", Тип("Строка")); + Типы.Вставить("descr", Тип("Строка")); + Типы.Вставить("config", Тип("Булево")); + Типы.Вставить("priv", Тип("Булево")); + Типы.Вставить("directory", Тип("Строка")); + Типы.Вставить("com", Тип("Строка")); + Типы.Вставить("addin", Тип("Строка")); + Типы.Вставить("module", Тип("Строка")); + Типы.Вставить("app", Тип("Строка")); + Типы.Вставить("inet", Тип("Строка")); + Типы.Вставить("crypto", Тип("Булево")); + Типы.Вставить("right-extension", Тип("Булево")); + Типы.Вставить("right-extension-definition-roles", Тип("Строка")); + Типы.Вставить("all-modules-extension", Тип("Булево")); + Типы.Вставить("modules-available-for-extension", Тип("Строка")); + Типы.Вставить("modules-not-available-for-extension", Тип("Строка")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств описания соединения. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствОписанияСоединения() + + Типы = Новый Соответствие; + + Типы.Вставить("connection", Тип("Строка")); + Типы.Вставить("conn-id", Тип("Число")); + Типы.Вставить("host", Тип("Строка")); + Типы.Вставить("process", Тип("Строка")); + Типы.Вставить("infobase", Тип("Строка")); + Типы.Вставить("application", Тип("Строка")); + Типы.Вставить("connected-at", Тип("Дата")); + Типы.Вставить("session-number", Тип("Число")); + Типы.Вставить("blocked-by-ls", Тип("Число")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств лицензии. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствЛицензии() + + Типы = Новый Соответствие; + + // Возвращается только для лицензии рабочего процесса. + Типы.Вставить("process", Тип("Строка")); + Типы.Вставить("port", Тип("Число")); + Типы.Вставить("pid", Тип("Строка")); + Типы.Вставить("host", Тип("Строка")); + + // Возвращается только для лицензии сеанса. + Типы.Вставить("session", Тип("Строка")); + Типы.Вставить("user-name", Тип("Строка")); + Типы.Вставить("app-id", Тип("Строка")); + Типы.Вставить("host", Тип("Строка")); + + // Общее для всех лицензий. + Типы.Вставить("full-name", Тип("Строка")); + Типы.Вставить("series", Тип("Строка")); + Типы.Вставить("issued-by-server", Тип("Булево")); + Типы.Вставить("license-type", Тип("Строка")); + Типы.Вставить("net", Тип("Булево")); + Типы.Вставить("max-users-all", Тип("Число")); + Типы.Вставить("max-users-cur", Тип("Число")); + Типы.Вставить("rmngr-address", Тип("Строка")); + Типы.Вставить("rmngr-port", Тип("Число")); + Типы.Вставить("rmngr-pid", Тип("Строка")); + Типы.Вставить("short-presentation", Тип("Строка")); + Типы.Вставить("full-presentation", Тип("Строка")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств блокировки. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствБлокировки() + + Типы = Новый Соответствие; + + Типы.Вставить("connection", Тип("Строка")); + Типы.Вставить("session", Тип("Строка")); + Типы.Вставить("object", Тип("Строка")); + Типы.Вставить("locked", Тип("Дата")); + Типы.Вставить("descr", Тип("Строка")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств рабочего процесса. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствРабочегоПроцесса() + + Типы = Новый Соответствие; + + Типы.Вставить("process", Тип("Строка")); + Типы.Вставить("host", Тип("Строка")); + Типы.Вставить("port", Тип("Число")); + Типы.Вставить("pid", Тип("Строка")); + Типы.Вставить("is-enable", Тип("Булево")); + Типы.Вставить("running", Тип("Булево")); + Типы.Вставить("started-at", Тип("Дата")); + Типы.Вставить("use", Тип("Строка")); + Типы.Вставить("available-perfomance", Тип("Число")); + Типы.Вставить("capacity", Тип("Число")); + Типы.Вставить("connections", Тип("Число")); + Типы.Вставить("memory-size", Тип("Число")); + Типы.Вставить("memory-excess-time", Тип("Число")); + Типы.Вставить("selection-size", Тип("Число")); + Типы.Вставить("avg-back-call-time", Тип("Число")); + Типы.Вставить("avg-call-time", Тип("Число")); + Типы.Вставить("avg-db-call-time", Тип("Число")); + Типы.Вставить("avg-lock-call-time", Тип("Число")); + Типы.Вставить("avg-server-call-time", Тип("Число")); + Типы.Вставить("avg-threads", Тип("Число")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств виртуального каталога. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствВиртуальногоКаталога() + + Типы = Новый Соответствие; + + Типы.Вставить("alias", Тип("Строка")); + Типы.Вставить("physicalPath", Тип("Строка")); + Типы.Вставить("descr", Тип("Строка")); + Типы.Вставить("allowedRead", Тип("Булево")); + Типы.Вставить("allowedWrite", Тип("Булево")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств com-класса. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствCOMКласса() + + Типы = Новый Соответствие; + + Типы.Вставить("name", Тип("Строка")); + Типы.Вставить("descr", Тип("Строка")); + Типы.Вставить("fileName", Тип("Строка")); + Типы.Вставить("id", Тип("Строка")); + Типы.Вставить("host", Тип("Строка")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств внешней компоненты. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствВнешнейКомпоненты() + + Типы = Новый Соответствие; + + Типы.Вставить("name", Тип("Строка")); + Типы.Вставить("descr", Тип("Строка")); + Типы.Вставить("hash", Тип("Строка")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств внешнего модуля. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствВнешнегоМодуля() + + Типы = Новый Соответствие; + + Типы.Вставить("name", Тип("Строка")); + Типы.Вставить("descr", Тип("Строка")); + Типы.Вставить("hash", Тип("Строка")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств приложения ос. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствПриложенияОС() + + Типы = Новый Соответствие; + + Типы.Вставить("name", Тип("Строка")); + Типы.Вставить("descr", Тип("Строка")); + Типы.Вставить("wild", Тип("Строка")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Возвращает соответствие имен в нотации rac и типов для свойств интернет ресурса. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - в качестве ключа указано имя свойства, в качестве значения - Тип. +// +Функция ТипыСвойствИнтернетРесурса() + + Типы = Новый Соответствие; + + Типы.Вставить("name", Тип("Строка")); + Типы.Вставить("descr", Тип("Строка")); + Типы.Вставить("protocol", Тип("Строка")); + Типы.Вставить("url", Тип("Строка")); + Типы.Вставить("port", Тип("Число")); + + Возврат Новый ФиксированноеСоответствие(Типы); + +КонецФункции + +// Парсит результат выполнения команды и из первого объекта получает используемые свойства. +// +// Параметры: +// Команда - Строка - команда rac. +// ТипыСвойств - Соответствие - типы свойств объекта rac. +// +// Возвращаемое значение: +// Соответствие - в качестве ключа имя свойства, в качестве значения - Истина. +// +Функция ПоддерживаемыеСвойства(Команда, ПараметрыАдминистрированияКластера, ТипыСвойств) + + Результат = ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойств); + + Свойства = Новый Соответствие; + Для Каждого КлючИЗначение Из Результат[0] Цикл + Свойства.Вставить(КлючИЗначение.Ключ, Истина); + КонецЦикла; + + Возврат Свойства; + +КонецФункции + +// Запускает команду и парсит результат, в случае если он не пустой. +// +// Параметры: +// Команда - Строка - команда rac (с заполненными параметрами), которую надо выполнить, например: +// "profile list --cluster=166bf476-9675-4e85-a359-611f46512ac1". +// Словарь - Структура - словарь свойств, имеет смысл указывать если команда возвращает значение. +// Фильтр - Массив, Структура - фильтр в нотации API, имеет смысл указывать если команда возвращает значение. +// ТипыСвойств - Соответствие - где в качестве ключа указано имя свойства, а в качестве значения один из перечисленных +// типов: Строка, Дата, Число, Булево. +// +// Возвращаемое значение: +// Массив - массив описаний объектов (структур или соответствий). +// +Функция ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, Словарь = Неопределено, Фильтр = Неопределено, ТипыСвойств = Неопределено) + + Если БезопасныйРежим() <> Ложь Тогда + ВызватьИсключение НСтр("ru = 'Администрирование кластера невозможно в безопасном режиме'"); + КонецЕсли; + + Если ОбщегоНазначения.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'В модели сервиса недопустимо выполнение прикладной информационной базой функций администрирования кластера'"); + КонецЕсли; + + // Подставим в командную строку путь до утилиты rac и адрес сервера ras. + Клиент = ПутьККлиентуСервераАдминистрирования(); + ФайлКлиента = Новый Файл(Клиент); + Если Не ФайлКлиента.Существует() Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно выполнить операцию администрирования кластера серверов по причине: файл %1 не найден + | + |Для администрирования кластера через сервер администрирования (ras) требуется установить на данном + |компьютере клиент сервера администрирования (rac). + |Для его установки: + |- Для компьютеров с ОС Windows требуется переустановить платформу, установив компонент ""Сервер 1С:Предприятия""; + |- Для компьютеров с ОС Linux требуется установить пакет 1c-enterprise83-server*.'"), + ФайлКлиента.ПолноеИмя); + + КонецЕсли; + + КоманднаяСтрока = """" + Клиент + """ " + Команда; + + ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ТекущийКаталог = КаталогИсполняемыхФайловПлатформы(); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина; + + Результат = ФайловаяСистема.ЗапуститьПрограмму(КоманднаяСтрока, ПараметрыЗапускаПрограммы); + + ПотокВывода = Результат.ПотокВывода; + ПотокОшибок = Результат.ПотокОшибок; + + Если ЗначениеЗаполнено(ПотокОшибок) Тогда + ВызватьИсключение ПотокОшибок; + КонецЕсли; + + Если ПустаяСтрока(ПотокВывода) Тогда + Возврат Новый Массив; + КонецЕсли; + + Результат = ПарсерВывода(ПотокВывода, Словарь, Фильтр, ТипыСвойств); + + Возврат Результат; + +КонецФункции + +// Возвращает строку параметров для команды rac с указанием необходимых параметров кластера. +// +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов. +// +// Возвращаемое значение: +// Строка - строка параметров. +// +Функция ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера = Неопределено) + + Если ИдентификаторКластера = Неопределено Тогда + ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера); + КонецЕсли; + + ПараметрыКластера = "--cluster=" + ИдентификаторКластера; + Если ЗначениеЗаполнено(ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера) Тогда + ПараметрыКластера = ПараметрыКластера + " --cluster-user=""" + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера + """"; + Если ЗначениеЗаполнено(ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера) Тогда + ПараметрыКластера = ПараметрыКластера + " --cluster-pwd=""" + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера + """"; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ПараметрыАдминистрированияКластера.АдресСервераАдминистрирования) Тогда + Сервер = СокрЛП(ПараметрыАдминистрированияКластера.АдресСервераАдминистрирования); + Если ЗначениеЗаполнено(ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования) Тогда + Сервер = Сервер + ":" + ПривестиЗначение(ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования); + КонецЕсли; + ПараметрыКластера = ПараметрыКластера + " " + Сервер; + КонецЕсли; + + Возврат ПараметрыКластера; + +КонецФункции + +// Подставляет параметры в строку аналогично СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку() +// при этом приводит значение к формату rac. +// +// Параметры: +// Команда - Строка, команда в которой нужно заполнить параметры. +// Параметр - Произвольный. +// +Процедура ПодставитьПараметрыВКоманду(Команда, Знач Параметр1, + Знач Параметр2 = Неопределено, + Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено) + + Команда = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Команда, + ПривестиЗначение(Параметр1), + ПривестиЗначение(Параметр2), + ПривестиЗначение(Параметр3), + ПривестиЗначение(Параметр4)); + +КонецПроцедуры + +// Добавляет к команде rac параметры. +// +// Параметры: +// Команда - Строка - команда rac, к которой будут добавлены параметры. +// Словарь - Структура - словарь. +// ЗначенияСвойств - Структура - значения объекта в нотации API. +// ПоддерживаемыеСвойства - Соответствие - если указано, то добавляются параметры, которые есть в этой коллекции. +// +Процедура ДобавитьПараметрыКомандыПоСловарю(Команда, Словарь, ЗначенияСвойств, ПоддерживаемыеСвойства = Неопределено) + + Для Каждого ФрагментСловаря Из Словарь Цикл + ИмяПараметра = ФрагментСловаря.Значение; + Если ПоддерживаемыеСвойства <> Неопределено И ПоддерживаемыеСвойства.Получить(ИмяПараметра) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ЗначенияСвойств.Свойство(ФрагментСловаря.Ключ) Тогда + + ЗначениеПараметра = ПривестиЗначение(ЗначенияСвойств[ФрагментСловаря.Ключ]); + Команда = Команда + " --" + ИмяПараметра + "=" + ЗначениеПараметра; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Возвращает поддерживаемые свойства объектов rac. +// +// Параметры: +// ПараметрыПолучения - Структура - структура с ключами: +// * ТипОбъекта - Строка - "profile" или "infobase". +// * ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(). +// +// Возвращаемое значение: +// Структура, Соответствие - объект, содержащий имеющиеся свойства. +// +Функция ПоддерживаемыеСвойстваОбъектов(ПараметрыПолучения) + + Если ПараметрыПолучения.ТипОбъекта = "profile" Тогда + Возврат ПоддерживаемыеСвойстваПрофиля(ПараметрыПолучения.ПараметрыАдминистрированияКластера); + ИначеЕсли ПараметрыПолучения.ТипОбъекта = "infobase" Тогда + Возврат ПоддерживаемыеСвойстваИнформационнойБазы(ПараметрыПолучения.ПараметрыАдминистрированияКластера, + ПараметрыПолучения.ПараметрыАдминистрированияИБ); + КонецЕсли; + +КонецФункции + +// Возвращает поддерживаемые свойства профилем безопасности и списками доступа. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// +// Возвращаемое значение: +// Структура - структура, с ключами: +// * profile - Соответствие - где в качестве ключа указано поддерживаемое свойство, а в качестве значение - Истина. +// * profile_directory - Соответствие - где в качестве ключа указано поддерживаемое свойство, а в качестве значение +// - Истина. +// * profile_com - Соответствие - где в качестве ключа указано поддерживаемое свойство, а в качестве значение - Истина. +// * profile_addin - Соответствие - где в качестве ключа указано поддерживаемое свойство, а в качестве значение - Истина. +// * profile_module - Соответствие - где в качестве ключа указано поддерживаемое свойство, а в качестве значение - Истина. +// * profile_app - Соответствие - где в качестве ключа указано поддерживаемое свойство, а в качестве значение - Истина. +// * profile_inet - Соответствие - где в качестве ключа указано поддерживаемое свойство, а в качестве значение - Истина. +// +Функция ПоддерживаемыеСвойстваПрофиля(ПараметрыАдминистрированияКластера) + + ИмяПрофиля = "ServiceProfile-81e39185-997c-4ae3-81f7-e7582cfdfa03"; + ОписаниеПрофиля = НСтр("ru = 'Служебный профиль для проверки поддерживаемых свойств.'"); + + ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера); + + Команда = "profile update --name=%1 --descr=%2 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, ОписаниеПрофиля); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + + Команда = "profile acl --name=%1 directory update --alias=%2 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, "Каталог"); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + + Команда = "profile acl --name=%1 com update --name=%2 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, "ComОбъект"); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + + Команда = "profile acl --name=%1 addin update --name=%2 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, "ВнешняяКомпонента"); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + + Команда = "profile acl --name=%1 module update --name=%2 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, "ВнешнийМодуль"); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + + Команда = "profile acl --name=%1 app update --name=%2 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, "Приложение"); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + + Команда = "profile acl --name=%1 inet update --name=%2 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля, "ИнтернетРесурсы"); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + + Свойства = Новый Структура; + + Команда = "profile list " + ПараметрыКластера; + Свойства.Вставить("profile", ПоддерживаемыеСвойства(Команда, ПараметрыАдминистрированияКластера, ТипыСвойствПрофиля())); + + Команда = "profile acl --name=%1 directory list " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля); + Свойства.Вставить("profile_directory", ПоддерживаемыеСвойства(Команда, ПараметрыАдминистрированияКластера, ТипыСвойствВиртуальногоКаталога())); + + Команда = "profile acl --name=%1 com list " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля); + Свойства.Вставить("profile_com", ПоддерживаемыеСвойства(Команда, ПараметрыАдминистрированияКластера, ТипыСвойствCOMКласса())); + + Команда = "profile acl --name=%1 addin list " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля); + Свойства.Вставить("profile_addin", ПоддерживаемыеСвойства(Команда, ПараметрыАдминистрированияКластера, ТипыСвойствВнешнейКомпоненты())); + + Команда = "profile acl --name=%1 module list " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля); + Свойства.Вставить("profile_module", ПоддерживаемыеСвойства(Команда, ПараметрыАдминистрированияКластера, ТипыСвойствВнешнегоМодуля())); + + Команда = "profile acl --name=%1 app list " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля); + Свойства.Вставить("profile_app", ПоддерживаемыеСвойства(Команда, ПараметрыАдминистрированияКластера, ТипыСвойствПриложенияОС())); + + Команда = "profile acl --name=%1 inet list " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля); + Свойства.Вставить("profile_inet", ПоддерживаемыеСвойства(Команда, ПараметрыАдминистрированияКластера, ТипыСвойствИнтернетРесурса())); + + Команда = "profile remove --name=%1 " + ПараметрыКластера; + ПодставитьПараметрыВКоманду(Команда, ИмяПрофиля); + ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера); + + Возврат Свойства; + +КонецФункции + +// Возвращает поддерживаемые свойства профилем безопасности и списками доступа. +// +// Параметры: +// ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов, +// описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера(). +// +// Возвращаемое значение: +// Соответствие - где в качестве ключа указано поддерживаемое свойство, а в качестве значение - Истина. +// +Функция ПоддерживаемыеСвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ) + + СвойстваБазы = СвойстваИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, Неопределено); + + Свойства = Новый Соответствие; + + Для Каждого КлючИЗначение Из СвойстваБазы Цикл + Свойства.Вставить(КлючИЗначение.Ключ, Истина); + КонецЦикла; + + Возврат Свойства; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRAS/АдминистрированиеКластераRAS.mdo b/SSL/src/CommonModules/АдминистрированиеКластераRAS/АдминистрированиеКластераRAS.mdo new file mode 100644 index 000000000..b26b19d4d --- /dev/null +++ b/SSL/src/CommonModules/АдминистрированиеКластераRAS/АдминистрированиеКластераRAS.mdo @@ -0,0 +1,11 @@ + + + АдминистрированиеКластераRAS + + ru + Администрирование кластера RAS + + true + true + true + diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl index bca9215a2..83bdf10ac 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Не ВебКлиент И НЕ МобильныйКлиент Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -1658,6 +1666,8 @@ // Функция ВыполнитьКоманду(Знач Шаблон, Знач ПараметрыАдминистрированияКластера, Знач ЗначенияПараметров = Неопределено) + // АПК:547-выкл код сохранен для обратной совместимости, используется в устаревшем программном интерфейсе. + #Если Сервер Тогда Если БезопасныйРежим() <> Ложь Тогда @@ -1670,6 +1680,8 @@ #КонецЕсли + // АПК:547-вкл + // Подставим в командную строку путь до утилиты rac и адрес сервера ras. Клиент = ПутьККлиентуСервераАдминистрирования(); ФайлКлиента = Новый Файл(Клиент); @@ -1715,6 +1727,8 @@ КонецЦикла; КонецЕсли; + // АПК:223-выкл код сохранен для обратной совместимости, используется в устаревшем программном интерфейсе. + ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); ПараметрыЗапускаПрограммы.ТекущийКаталог = КаталогИсполняемыхФайловПлатформы(); ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; @@ -1723,6 +1737,8 @@ Результат = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(КоманднаяСтрока, ПараметрыЗапускаПрограммы); + // АПК:223-вкл + ПотокВывода = Результат.ПотокВывода; ПотокОшибок = Результат.ПотокОшибок; @@ -1763,7 +1779,7 @@ ИмяСвойства = СокрЛП(Лев(ЭлементПотока, ПоложениеРазделителя - 1)); ЗначениеСвойства = ПривестиЭлементВывода(СокрЛП(Прав(ЭлементПотока, СтрДлина(ЭлементПотока) - ПоложениеРазделителя))); - Если СвойстваЭкранируемыеКавычками().Найти(ИмяСвойства) <> Неопределено Тогда + Если СвойстваЭкранируемыеКавычками().Получить(ИмяСвойства) <> Неопределено Тогда Если СтрНачинаетсяС(ЗначениеСвойства, """") И СтрЗаканчиваетсяНа(ЗначениеСвойства, """") Тогда ЗначениеСвойства = Лев(ЗначениеСвойства, СтрДлина(ЗначениеСвойства) - 1); ЗначениеСвойства = Прав(ЗначениеСвойства, СтрДлина(ЗначениеСвойства) - 1) @@ -1775,11 +1791,8 @@ Иначе Если ЭлементРезультата.Количество() > 0 Тогда - ПарсерЭлементаВывода(ЭлементРезультата, Результат, Словарь, Фильтр); - ЭлементРезультата = Новый Соответствие(); - КонецЕсли; КонецЕсли; @@ -2274,13 +2287,11 @@ // Функция СвойстваЭкранируемыеКавычками() - Результат = Новый Массив(); - - Результат.Добавить("denied-message"); - Результат.Добавить("permission-code"); - Результат.Добавить("denied-parameter"); - - Возврат Новый ФиксированныйМассив(Результат); + Результат = Новый Соответствие(); + Результат["denied-message"] = Истина; + Результат["permission-code"] = Истина; + Результат["denied-parameter"] = Истина; + Возврат Новый ФиксированноеСоответствие(Результат); КонецФункции diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/АдминистрированиеКластераRASКлиентСервер.mdo b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/АдминистрированиеКластераRASКлиентСервер.mdo index a5741dd4e..b8e95fd8f 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/АдминистрированиеКластераRASКлиентСервер.mdo +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/АдминистрированиеКластераRASКлиентСервер.mdo @@ -3,7 +3,7 @@ АдминистрированиеКластераRASКлиентСервер ru - Администрирование кластера RASКлиент сервер + Администрирование кластера RAS клиент сервер true true diff --git a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl index 0c1c87aab..f5da60b30 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl @@ -1,7 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс +#Область УстаревшиеПроцедурыИФункции + #Область КонструкторыПараметровПрограммногоИнтерфейса +// Устарела. Следует использовать АдминистрированиеКластера.ПараметрыАдминистрированияКластера. // Конструктор структуры, описывающей параметры подключения к администрируемому // кластеру серверов. // @@ -47,6 +58,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера. // Конструктор структуры, описывающей параметры подключения к администрируемой информационной // базе кластера. // @@ -72,6 +84,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.ПроверитьПараметрыАдминистрирования. // Проверяет корректность параметров администрирования. // // Параметры: @@ -100,6 +113,7 @@ #Область БлокировкаСеансовИРегламентныхЗаданий +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий. // Конструктор структуры, описывающей свойства блокировки сеансов и регламентных заданий // информационной базы. // @@ -130,6 +144,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.БлокировкаСеансовИЗаданийИнформационнойБазы. // Возвращает текущее состояние блокировки сеансов и регламентных заданий для информационной базы. // // Параметры: @@ -157,6 +172,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы. // Устанавливает новое состояние блокировки сеансов и регламентных заданий для информационной базы. // // Параметры: @@ -179,6 +195,7 @@ КонецПроцедуры +// Устарела. Следует использовать АдминистрированиеКластера.СнятьБлокировкуСеансовИЗаданийИнформационнойБазы. // Снимает блокировку сеансов и регламентных заданий для информационной базы. // // Параметры: @@ -212,6 +229,7 @@ #Область БлокировкаРегламентныхЗаданий +// Устарела. Следует использовать АдминистрированиеКластера.БлокировкаРегламентныхЗаданийИнформационнойБазы. // Возвращает текущее состояние блокировки регламентных заданий для информационной базы. // // Параметры: @@ -239,6 +257,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы. // Устанавливает новое состояние блокировки регламентных заданий для информационной базы. // // Параметры: @@ -265,6 +284,7 @@ #Область СеансыИнформационнойБазы +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваСеанса. // Конструктор структуры, описывающей свойства сеанса информационной базы. // // Возвращаемое значение: @@ -349,6 +369,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СеансыИнформационнойБазы. // Возвращает описания сеансов информационной базы. // // Параметры: @@ -383,6 +404,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.УдалитьСеансыИнформационнойБазы. // Удаляет сеансы с информационной базой по фильтру. // // Параметры: @@ -417,6 +439,7 @@ #Область СоединенияСИнформационнойБазой +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваСоединения. // Конструктор структуры, описывающей свойства соединения с информационной базой. // // Возвращаемое значение: @@ -486,6 +509,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СоединенияСИнформационнойБазой. // Возвращает описания соединений с информационной базой. // // Параметры: @@ -520,6 +544,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.РазорватьСоединенияСИнформационнойБазой. // Разрывает соединения с информационной базой по фильтру. // // Параметры: @@ -555,6 +580,7 @@ #Область ПрофилиБезопасности +// Устарела. Следует использовать АдминистрированиеКластера.ПрофильБезопасностиИнформационнойБазы. // Возвращает имя профиля безопасности, назначенного для информационной базы. // // Параметры: @@ -581,6 +607,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы. // Возвращает имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности // безопасного режима. // @@ -609,6 +636,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.УстановитьПрофильБезопасностиИнформационнойБазы. // Назначает для информационной базы использование профиля безопасности. // // Параметры: @@ -634,6 +662,7 @@ КонецПроцедуры +// Устарела. Следует использовать АдминистрированиеКластера.УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы. // Назначает для информационной базы использование профиля безопасности безопасного режима. // // Параметры: @@ -659,6 +688,7 @@ КонецПроцедуры +// Устарела. Следует использовать АдминистрированиеКластера.ПрофильБезопасностиСуществует. // Проверяет существование в кластере серверов профиля безопасности. // // Параметры: @@ -678,6 +708,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваПрофиляБезопасности. // Конструктор структуры, описывающей свойства профиля безопасности. // // Возвращаемое значение: @@ -752,6 +783,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваВиртуальногоКаталога. // Конструктор структуры, описывающей свойства виртуального каталога. // // Возвращаемое значение: @@ -779,6 +811,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваCOMКласса. // Конструктор структуры, описывающей свойства COM-класса. // // Возвращаемое значение: @@ -806,6 +839,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваВнешнейКомпоненты. // Конструктор структуры, описывающей свойства внешней компоненты. // // Возвращаемое значение: @@ -828,6 +862,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваВнешнегоМодуля. // Конструктор структуры, описывающей свойства внешнего модуля. // // Возвращаемое значение: @@ -850,6 +885,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваПриложенияОС. // Конструктор структуры, описывающей свойства приложения операционной системы. // // Возвращаемое значение: @@ -872,6 +908,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваИнтернетРесурса. // Конструктор структуры, описывающей Интернет-ресурс. // // Возвращаемое значение: @@ -904,6 +941,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.ПрофильБезопасности. // Возвращает свойства профиля безопасности. // // Параметры: @@ -923,6 +961,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СоздатьПрофильБезопасности. // Создает профиль безопасности по переданному описанию. // // Параметры: @@ -939,6 +978,7 @@ КонецПроцедуры +// Устарела. Следует использовать АдминистрированиеКластера.УстановитьСвойстваПрофиляБезопасности. // Устанавливает свойства для существующего профиля безопасности по переданному описанию. // // Параметры: @@ -955,6 +995,7 @@ КонецПроцедуры +// Устарела. Следует использовать АдминистрированиеКластера.УдалитьПрофильБезопасности. // Удаляет профиль безопасности. // // Параметры: @@ -975,6 +1016,7 @@ #Область ИнформационныеБазы +// Устарела. Следует использовать АдминистрированиеКластера.ИдентификаторИнформационнойБазы. // Возвращает внутренний идентификатор информационной базы. // // Параметры: @@ -996,6 +1038,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваИнформационныхБаз. // Возвращает описания информационных баз. // // Параметры: @@ -1021,6 +1064,7 @@ #Область Кластер +// Устарела. Следует использовать АдминистрированиеКластера.ИдентификаторКластера. // Возвращает внутренний идентификатор кластера серверов. // // Параметры: @@ -1037,6 +1081,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваКластеров. // Возвращает описания кластеров серверов. // // Параметры: @@ -1058,6 +1103,7 @@ #Область РабочиеПроцессыСерверы +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваРабочихПроцессов. // Возвращает описания рабочих процессов. // // Параметры: @@ -1079,6 +1125,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваРабочихСерверов. // Возвращает описания рабочих серверов. // // Параметры: @@ -1102,6 +1149,7 @@ #КонецОбласти +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваСеансов. // Возвращает описания сеансов информационной базы. // // Параметры: @@ -1138,6 +1186,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.СвойстваСоединений. // Возвращает описания соединений с информационной базой. // // Параметры: @@ -1176,6 +1225,7 @@ КонецФункции +// Устарела. Следует использовать АдминистрированиеКластера.ПутьККлиентуСервераАдминистрирования. // Возвращает путь к консольному клиенту сервера администрирования. // // Параметры: @@ -1194,6 +1244,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Добавляет к фильтру новое условие. diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl index def11e199..b7f8eff6a 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определяет наименование с сокращением региона по его коду. @@ -44,7 +52,7 @@ // Возвращает код региона по наименованию. // // Параметры: -// Название - Строка - Наименование или полное наименование (с сокращением) региона. +// Название - Строка - наименование или полное наименование (с сокращением) региона. // Например, "Московская" или Московская обл". // // Возвращаемое значение: @@ -83,7 +91,7 @@ | Варианты.Порядок |"); - ЧастиСлова = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Название); + ЧастиСлова = АдресныйКлассификаторСлужебный.НаименованиеИСокращение(Название); Запрос.УстановитьПараметр("Наименование", ЧастиСлова.Наименование); Запрос.УстановитьПараметр("Сокращение", ЧастиСлова.Сокращение); Запрос.УстановитьПараметр("Название", Название); @@ -115,11 +123,11 @@ // // Возвращаемое значение: // ТаблицаЗначений - сведения о субъектах(регионах) РФ: -// * КодСубъектаРФ - Число - Код субъекта, например 77 для Москвы. -// * Наименование - Строка - Наименование субъекта. Например "Московская". -// * Сокращение - Строка - Сокращение субъекта. Например "обл". -// * ПочтовыйИндекс - Число - Индекс региона. Если 0 - то индекс не определен. -// * Идентификатор - УникальныйИдентификатор - Уникальный идентификационный код адресного объекта. +// * КодСубъектаРФ - Число - код субъекта, например 77 для Москвы. +// * Наименование - Строка - наименование субъекта. Например "Московская". +// * Сокращение - Строка - сокращение субъекта. Например "обл". +// * ПочтовыйИндекс - Число - индекс региона. Если 0 - то индекс не определен. +// * Идентификатор - УникальныйИдентификатор - уникальный идентификационный код адресного объекта. // Функция СубъектыРФ() Экспорт @@ -128,12 +136,12 @@ КонецФункции // Возвращает количество загруженных в адресный классификатор субъектов РФ. -// Т.к. при использовании веб-сервиса фирмы 1С предоставляющего через интернет сведения об -// адресах РФ в формате ФИАС всегда доступны адресные сведения по всем регионам РФ, +// Т.к. при использовании веб-сервиса фирмы "1С" предоставляющего через Интернет сведения об +// адресах РФ в формате ФИАС, всегда доступны адресные сведения по всем регионам РФ, // то возвращает общее количество субъектов РФ. // // Возвращаемое значение: -// Число - количество субъектов РФ содержащих загруженные адресные сведения в адресном классификаторе. +// Число - количество субъектов РФ, содержащих загруженные адресные сведения в адресном классификаторе. // Функция КоличествоЗагруженныхРегионов() Экспорт @@ -177,11 +185,11 @@ КонецФункции // Определяет наличие адресных сведений в адресном классификаторе. -// При использовании веб-сервиса фирмы 1С предоставляющего через интернет сведения об -// адресах РФ в формате ФИАС всегда возвращает Истина. +// При использовании веб-сервиса фирмы "1С" предоставляющего через Интернет сведения об +// адресах РФ в формате ФИАС, всегда возвращает Истина, если подключена интернет-поддержка пользователей. // // Возвращаемое значение: -// Булево - Истина, если адресный классификатор содержит сведения хотя бы по одному региону. +// Булево - Истина, если адресный классификатор содержит сведения хотя бы по одному региону; // Ложь, если адресные сведения отсутствуют. // Функция АдресныйКлассификаторЗагружен() Экспорт @@ -203,34 +211,34 @@ КонецФункции // Проверяет адреса на соответствие адресному классификатору -// и возвращает подходящие варианты содержащие сведения об адресе. +// и возвращает подходящие варианты, содержащие сведения об адресе. // // Параметры: // Адреса - Массив - проверяемые адреса. Содержит структуры с полями: -// * Адрес - Проверяемый адрес во внутреннем формате JSON или в XML, -// соответствующем XDTO пакету Адрес (http://www.v8.1c.ru/ssl/contactinfo). -// или его XML-сериализация соответствующая структуре XDTO-пакета. -// * ФорматАдреса - Строка - Устарело. Формат адреса. Варианты: -// * ФИАС адрес проверяется по всем уровням адреса. -// * КЛАДР, у адреса не проверяются на соответствие номера домов, округа, +// * Адрес - проверяемый адрес во внутреннем формате JSON или в XML, +// соответствующем XDTO-пакету Адрес (http://www.v8.1c.ru/ssl/contactinfo), +// или его XML-сериализация, соответствующая структуре XDTO-пакета. +// * ФорматАдреса - Строка - устарело. Формат адреса. Варианты: +// * ФИАС адрес проверяется по всем уровням адреса; +// * КЛАДР - у адреса не проверяются на соответствие номера домов, округа, // внутригородские районы, доп. территории и элементы доп. территорий. // // Возвращаемое значение: // Массив - результаты анализа. Каждый элемент массива содержит структуры с полями: -// * Ошибки - Массив - Описание ошибок поиска в классификаторе. Состоит из массива структур с полями: -// ** Ключ - Строка - Служебный идентификатор места ошибки - путь XPath в объекте XDTO. -// ** Текст - Строка - Текст ошибки. -// ** Подсказка - Строка - Текст возможного исправления ошибки. -// * Варианты - Массив - Устарело. Содержит описание найденных вариантов в виде массива структур с полями: -// ** Идентификатор - УникальныйИдентификатор - Уникальный идентификационный код адресного объекта ФИАС. -// ** Индекс - Число - Почтовый индекс адресного объекта. -// ** КодКЛАДР - Число - Код КЛАДР ближайшего объекта. -// ** OKATO - Число - Код общероссийского классификатора объектов административно-территориального деления. -// ** ОКТМО - Число - Код общероссийского классификатора территорий муниципальных образований. -// ** КодИФНСФЛ - Строка - Код инспекции ФНС обслуживающего физических лиц. -// ** КодИФНСЮЛ - Строка - Код инспекции ФНС обслуживающего юридические лица. -// ** КодУчасткаИФНСФЛ - Строка - Код территориального участка инспекции ФНС обслуживающего физических лиц. -// ** КодУчасткаИФНСЮЛ - Строка - Код территориального участка инспекции ФНС обслуживающего юридические лица. +// * Ошибки - Массив - описание ошибок поиска в классификаторе. Состоит из массива структур с полями: +// ** Ключ - Строка - служебный идентификатор места ошибки (путь XPath в объекте XDTO). +// ** Текст - Строка - текст ошибки. +// ** Подсказка - Строка - текст возможного исправления ошибки. +// * Варианты - Массив - устарело. Содержит описание найденных вариантов в виде массива структур с полями: +// ** Идентификатор - УникальныйИдентификатор - уникальный идентификационный код адресного объекта ФИАС. +// ** Индекс - Число - почтовый индекс адресного объекта. +// ** КодКЛАДР - Число - код КЛАДР ближайшего объекта. +// ** OKATO - Число - код общероссийского классификатора объектов административно-территориального деления. +// ** ОКТМО - Число - код общероссийского классификатора территорий муниципальных образований. +// ** КодИФНСФЛ - Строка - код инспекции ФНС обслуживающей физических лиц. +// ** КодИФНСЮЛ - Строка - код инспекции ФНС обслуживающей юридические лица. +// ** КодУчасткаИФНСФЛ - Строка - код территориального участка инспекции ФНС обслуживающей физических лиц. +// ** КодУчасткаИФНСЮЛ - Строка - код территориального участка инспекции ФНС обслуживающей юридические лица. // // Пример: // СтруктураПроверки = Новый Структура("Адрес, ФорматАдреса", Адрес, "ФИАС"); @@ -266,7 +274,7 @@ // Если уровень не указан, то возвращает первое найденное совпадение. // // Параметры: -// АдресноеСокращение - Строка - сокрушение адресного объекта. Например, "г". +// АдресноеСокращение - Строка - сокращение адресного объекта. Например, "г". // Уровень - Число - код уровня адресного объекта. Например, для уровня города 4. // // Возвращаемое значение: @@ -300,27 +308,27 @@ КонецФункции -// Определение кодов ОКТМО, ОКАТО, налоговых инспекций ФНС и др. адреса -// Возвращает коды адресного объекта. +// Возвращает коды адрес (ОКТМО, ОКАТО, налоговых инспекций ФНС и др.) и +// уникальные идентификационные коды адресного объекта и дома. // // Параметры: -// Адрес - Строка - Адрес во внутреннем формате JSON или XML соответствующий структуре XDTO-пакета Адрес. -// Источник - Строка - Источник получения кодов адреса: -// "Сервис1С" - коды будут получены через веб-сервис 1С предоставляющего сведения об адресах РФ в формате ФИАС; +// Адрес - Строка - адрес во внутреннем формате JSON или XML, соответствующий структуре XDTO-пакета Адрес. +// Источник - Строка - источник получения кодов адреса: +// "Сервис1С" - коды будут получены через веб-сервис "1С" предоставляющий сведения об адресах РФ в формате ФИАС; // "ЗагруженныеДанные" - сначала будет попытка определить коды по загруженным данным адресного классификатора, -// а затем если коды не были определены, то будут получены через веб-сервис 1С. +// а затем, если коды не были определены, то они будут получены через веб-сервис "1С". // Если параметр не указан, то определение кодов будет аналогично параметру ЗагруженныеДанные. // Возвращаемое значение: -// Структура - Коды адреса. Если адрес не найден, то поля структуры содержат пустые значения. -// * Идентификатор - Строка - Уникальный идентификационный код адресного объекта ФИАС. -// * ИдентификаторДома - Строка - Уникальный идентификационный код дома(здания) адресного объекта ФИАС. -// * КодКЛАДР - Строка - Код классификатор адресов России (КЛАДР). -// * КодИФНСФЛ - Строка - Код инспекции ФНС обслуживающего физических лиц. -// * КодИФНСЮЛ - Строка - Код инспекции ФНС обслуживающего юридические лица. -// * КодУчасткаИФНСФЛ - Строка - Код территориального участка инспекции ФНС обслуживающего физических лиц. -// * КодУчасткаИФНСЮЛ - Строка - Код территориального участка инспекции ФНС обслуживающего юридические лица. -// * OKATO - Строка - Код общероссийского классификатора объектов административно-территориального деления. -// * ОКТМО - Строка - Код общероссийского классификатора территорий муниципальных образований. +// Структура - коды адреса. Если адрес не найден, то поля структуры содержат пустые значения. +// * Идентификатор - Строка - уникальный идентификационный код адресного объекта ФИАС. +// * ИдентификаторДома - Строка - уникальный идентификационный код дома(здания) адресного объекта ФИАС. +// * КодКЛАДР - Строка - код классификатор адресов России (КЛАДР). +// * КодИФНСФЛ - Строка - код инспекции ФНС, обслуживающей физических лиц. +// * КодИФНСЮЛ - Строка - код инспекции ФНС, обслуживающей юридические лица. +// * КодУчасткаИФНСФЛ - Строка - код территориального участка инспекции ФНС, обслуживающей физических лиц. +// * КодУчасткаИФНСЮЛ - Строка - код территориального участка инспекции ФНС, обслуживающей юридические лица. +// * OKATO - Строка - код общероссийского классификатора объектов административно-территориального деления. +// * ОКТМО - Строка - код общероссийского классификатора территорий муниципальных образований. // Функция КодыАдреса(Адрес, Источник = Неопределено) Экспорт @@ -335,11 +343,11 @@ // Возвращает соответствие полных наименований адресных объектов и их сокращения. // // Параметры: -// НаименованияАдресныхОбъектов - Массив - Полные наименования адресных объектов. Если передан пустой массив, +// НаименованияАдресныхОбъектов - Массив - полные наименования адресных объектов. Если передан пустой массив, // то будут возвращен полный список наименований и сокращений. // // Возвращаемое значение: -// Соответствие - Соответствие найденных полных наименований адресных объектов их сокращениям. +// Соответствие - соответствие найденных полных наименований адресных объектов их сокращениям. // Функция СокращенияАдресныхОбъектов(НаименованияАдресныхОбъектов) Экспорт Возврат АдресныйКлассификаторСлужебный.СокращенияАдресныхОбъектов(НаименованияАдресныхОбъектов); @@ -357,13 +365,13 @@ // для которого требуется определить идентификационные коды. // Возвращаемое значение: // Структура - со свойствами: -// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Идентификационный код адресного объекта (улицы, +// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - идентификационный код адресного объекта (улицы, // нас. пункта). -// * ИдентификаторДома - УникальныйИдентификатор - Идентификационный код дома адресного объекта. -// * Отказ - Булево - Если Истина, то при работе с веб-сервисом возникла ошибка. -// * ПодробноеПредставлениеОшибки - Строка - Полное описание ошибки, если при работе с веб-сервисом возникла +// * ИдентификаторДома - УникальныйИдентификатор - идентификационный код дома адресного объекта. +// * Отказ - Булево - если Истина, то при работе с веб-сервисом возникла ошибка. +// * ПодробноеПредставлениеОшибки - Строка - полное описание ошибки, если при работе с веб-сервисом возникла // ошибка, иначе Неопределено. -// * КраткоеПредставлениеОшибки - Строка - Краткое описание ошибки, если при работе с веб-сервисом возникла +// * КраткоеПредставлениеОшибки - Строка - краткое описание ошибки, если при работе с веб-сервисом возникла // ошибка, иначе Неопределено. // Функция ИдентификаторыАдреса(Адрес) Экспорт @@ -376,7 +384,7 @@ // адресах РФ в формате ФИАС всегда возвращает Истина. // // Возвращаемое значение: -// Булево - Истина, если адресный классификатор содержит сведения хотя бы по одному региону. +// Булево - Истина, если адресный классификатор содержит сведения хотя бы по одному региону; // Ложь, если адресные сведения отсутствуют. // Функция КлассификаторЗагружен() Экспорт diff --git a/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl index fe7caa0ff..efb292816 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -190,11 +197,18 @@ КонецЦикла; Если СубъектыРФ.Количество() > 0 Тогда - АдресныйКлассификаторСлужебный.ЗагрузитьКлассификаторАдресов(СубъектыРФ, ОписаниеФайлов, Истина, Истина); + + ПараметрыЗагрузки = АдресныйКлассификаторСлужебный.ПараметрыЗагрузкиКлассификатораАдресов(); + ПараметрыЗагрузки.ЗагружатьИсториюАдресов = Истина; + ПараметрыЗагрузки.ЗагружатьПорциями = Истина; + ПараметрыЗагрузки.ОповещатьОПрогрессе = Ложь; + + АдресныйКлассификаторСлужебный.ЗагрузитьКлассификаторАдресов(СубъектыРФ, ОписаниеФайлов, ПараметрыЗагрузки); + КонецЕсли; Исключение - АдресныйКлассификаторСлужебный.УдалитьВременныйФайл(КаталогФайлов); + ФайловаяСистема.УдалитьВременныйФайл(КаталогФайлов); ВызватьИсключение; КонецПопытки; diff --git a/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl deleted file mode 100644 index feb534596..000000000 --- a/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl +++ /dev/null @@ -1,33 +0,0 @@ -#Область СлужебныеПроцедурыИФункции - -// Возвращает представление региона по коду. -// -// Параметры: -// КодРегиона - Число, Строка, Соответствие - код региона. -// -// Возвращаемое значение: -// Строка, Соответствие - представления. -// -Функция ПредставлениеРегионаПоКоду(КодРегиона) Экспорт - - Если ТипЗнч(КодРегиона) <> Тип("Соответствие") Тогда - Возврат ПредставлениеРегиона(КодРегиона); - КонецЕсли; - - Результат = Новый Соответствие; - Для Каждого КлючЗначение Из КодРегиона Цикл - Код = КлючЗначение.Ключ; - Результат.Вставить(Код, ПредставлениеРегиона(Код) ); - КонецЦикла; - - Возврат Результат; -КонецФункции - -Функция ПредставлениеРегиона(КодРегиона) - - Возврат Формат(КодРегиона, "ЧЦ=2; ЧН=; ЧВН=; ЧГ=") + " " + АдресныйКлассификатор.НаименованиеРегионаПоКоду(КодРегиона); - -КонецФункции - -#КонецОбласти - diff --git a/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/АдресныйКлассификаторВызовСервера.mdo b/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/АдресныйКлассификаторВызовСервера.mdo deleted file mode 100644 index 4528ab622..000000000 --- a/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/АдресныйКлассификаторВызовСервера.mdo +++ /dev/null @@ -1,10 +0,0 @@ - - - АдресныйКлассификаторВызовСервера - - ru - Адресный классификатор вызов сервера - - true - true - diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index bd24eec81..fcec7dd50 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -1,9 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму загрузки классификатора. // // Параметры: -// Параметры - ПараметрыВыполненияКоманды, Структура - параметры открытия формы. +// Параметры - ПараметрыВыполненияКоманды, Структура - параметры открытия формы. // Процедура ЗагрузитьАдресныйКлассификатор(Параметры = Неопределено) Экспорт @@ -19,7 +27,6 @@ КонецЦикла; КонецЕсли; - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); ИмяФормы = "РегистрСведений.АдресныеОбъекты.Форма.ЗагрузкаАдресногоКлассификатора"; ОткрытьФорму(ИмяФормы, ПараметрыФормы, @@ -33,14 +40,14 @@ // Открывает форму загрузки адресного классификатора. // // Параметры: -// ОповещениеОЗакрытие - ОписаниеОповещения - оповещение, которое вызывается при закрытие формы загрузки адресного классификатора. -// ПараметрыФормы - - Структура - параметры открытия формы: -// * КодРегионаДляЗагрузки - Число, Массив - Если указан, то регион будет отмечен для загрузки. +// ОповещениеОЗакрытие - ОписаниеОповещения - оповещение, которое вызывается при закрытии формы загрузки адресного классификатора. +// ПараметрыФормы - Структура - параметры открытия формы: +// * КодРегионаДляЗагрузки - Число, Массив - если указан, то регион будет отмечен для загрузки. // ПараметрыОткрытия - Структура - параметры открытия формы: -// * Владелец - Произвольный - Форма или элемент управления другой формы. -// * Уникальность - Произвольный - Ключ, значение которого будет использоваться для поиска уже открытых форм. -// * Окно - ОкноКлиентскогоПриложения, ВариантОткрытияОкна - Окно приложения, в котором будет открыта форма. -// * НавигационнаяСсылка - Строка - Задает навигационную ссылку, возвращаемую формой. +// * Владелец - Произвольный - форма или элемент управления другой формы. +// * Уникальность - Произвольный - ключ, значение которого будет использоваться для поиска уже открытых форм. +// * Окно - ОкноКлиентскогоПриложения, ВариантОткрытияОкна - окно приложения, в котором будет открыта форма. +// * НавигационнаяСсылка - Строка - задает навигационную ссылку, возвращаемую формой. // Процедура ПоказатьФормуЗагрузкиАдресногоКлассификатора(ОповещениеОЗакрытие = Неопределено, ПараметрыФормы = Неопределено, ПараметрыОткрытия = Неопределено) Экспорт @@ -125,58 +132,28 @@ СтандартнаяОбработка = Ложь; - ОповещениеПродолжения = Новый ОписаниеОповещения("ВыбратьКаталогЗавершениеКонтроляРасширенияРаботыСФайлами", ЭтотОбъект, Новый Структура); - ОповещениеПродолжения.ДополнительныеПараметры.Вставить("Форма", Форма); - ОповещениеПродолжения.ДополнительныеПараметры.Вставить("ПутьКДанным", ПутьКДанным); - ОповещениеПродолжения.ДополнительныеПараметры.Вставить("Заголовок", Заголовок); + Контекст = Новый Структура; + Контекст.Вставить("Форма", Форма); + Контекст.Вставить("ПутьКДанным", ПутьКДанным); + Контекст.Вставить("Заголовок", Заголовок); + Контекст.Вставить("ОповещениеЗавершения", ОповещениеЗавершения); - ОповещениеПродолжения.ДополнительныеПараметры.Вставить("ОповещениеЗавершения", ОповещениеЗавершения); - - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОповещениеПродолжения, , Ложь); -КонецПроцедуры - -// Завершение немодального выбора каталога. -// -Процедура ВыбратьКаталогЗавершениеКонтроляРасширенияРаботыСФайлами(Знач Результат, Знач ДополнительныеПараметры) Экспорт - - Если Результат <> Истина Тогда - // Отказ от установки расширения. - Возврат; - КонецЕсли; - - Форма = ДополнительныеПараметры.Форма; - ПутьКДанным = ДополнительныеПараметры.ПутьКДанным; - Заголовок = ДополнительныеПараметры.Заголовок; - - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); - Если Заголовок <> Неопределено Тогда - Диалог.Заголовок = Заголовок; - КонецЕсли; - - ТекущееЗначение = Форма; - ИмяРеквизита = ПутьКДанным; - - ЧастиПути = СтрЗаменить(ПутьКДанным, ".", Символы.ПС); - Для Позиция = 1 По СтрЧислоСтрок(ЧастиПути) Цикл - ИмяРеквизита = СтрПолучитьСтроку(ЧастиПути, Позиция); - ТекущееЗначение = ТекущееЗначение[ИмяРеквизита]; - КонецЦикла; - - Диалог.Каталог = ТекущееЗначение; - - ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьКаталогЗавершениеОтображенияДиалогаВыбораФайла", ЭтотОбъект, ДополнительныеПараметры); - Диалог.Показать(ОписаниеОповещения); + ОповещениеПродолжения = Новый ОписаниеОповещения( + "ВыбратьКаталогЗавершениеОтображенияДиалогаВыбораФайла", + ЭтотОбъект, Контекст); + + ФайловаяСистемаКлиент.ВыбратьКаталог(ОповещениеПродолжения, Контекст); КонецПроцедуры Процедура ВыбратьКаталогЗавершениеОтображенияДиалогаВыбораФайла(Каталог, ДополнительныеПараметры) Экспорт - Если Каталог <> Неопределено Тогда + Если Не ПустаяСтрока(Каталог) Тогда - ДополнительныеПараметры.Форма[ДополнительныеПараметры.ПутьКДанным] = Каталог[0]; + ДополнительныеПараметры.Форма[ДополнительныеПараметры.ПутьКДанным] = Каталог; Если ДополнительныеПараметры.ОповещениеЗавершения <> Неопределено Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеЗавершения, Каталог[0]); + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеЗавершения, Каталог); КонецЕсли; КонецЕсли; @@ -231,14 +208,14 @@ Процедура АнализДоступностиФайловКлассификатораВКаталогеЗавершение(ИндексРегиона, ДополнительныеПараметры) Экспорт - Если ИндексРегиона <= ДополнительныеПараметры.Результат.КодыРегионов.ВГраница() Тогда + Если ИндексРегиона <= ДополнительныеПараметры.Результат.КодыРегионов.Количество() - 1 Тогда - КодРегиона = ДополнительныеПараметры.Результат.КодыРегионов[ИндексРегиона]; + КодРегиона = ДополнительныеПараметры.Результат.КодыРегионов.Получить(ИндексРегиона); // Набор файлов для каждого региона. - ДополнительныеПараметры.Результат.ФайлыПоРегионам[КодРегиона] = Новый Массив; + ДополнительныеПараметры.Результат.ФайлыПоРегионам[КодРегиона.Значение] = Новый Массив; - ИмяФайла = Формат(КодРегиона, "ЧЦ=2; ЧН=; ЧВН=; ЧГ=") + ".ZIP"; - ДополнительныеПараметры.Вставить("КодРегиона", КодРегиона); + ИмяФайла = Формат(КодРегиона.Значение, "ЧЦ=2; ЧН=; ЧВН=; ЧГ=") + ".ZIP"; + ДополнительныеПараметры.Вставить("КодРегиона", КодРегиона.Значение); ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла); ДополнительныеПараметры.Вставить("ИндексРегиона", ИндексРегиона); ОписаниеОповещения = Новый ОписаниеОповещения("АнализДоступностиФайловКлассификатораВКаталогеПослеПоискаФайлов", ЭтотОбъект, ДополнительныеПараметры); @@ -246,15 +223,14 @@ Иначе // окончание цикла - // Собираем все в один вызов - Представления = АдресныйКлассификаторВызовСервера.ПредставлениеРегионаПоКоду(ДополнительныеПараметры.ОтсутствующиеФайлы); - - Для Каждого КлючЗначение Из Представления Цикл + Для каждого ОтсутствующийФайл Из ДополнительныеПараметры.ОтсутствующиеФайлы Цикл + Представление = ДополнительныеПараметры.Результат.КодыРегионов.НайтиПоЗначению(ОтсутствующийФайл.Ключ); + СообщениеОбОшибке = НСтр("ru = 'Для региона ""%1"" не найден файл данных ""%2""'") + Символы.ПС; СообщениеОбОшибке = СообщениеОбОшибке + НСтр("ru = 'Актуальные адресные сведения можно загрузить по адресу http://its.1c.ru/download/fias2'"); ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ДополнительныеПараметры.Результат.Ошибки, ДополнительныеПараметры.ПолеОшибки, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, КлючЗначение.Значение, ДополнительныеПараметры.ОтсутствующиеФайлы[КлючЗначение.Ключ]), Неопределено); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, Представление, ОтсутствующийФайл.Значение), Неопределено); КонецЦикла; ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеЗавершения, ДополнительныеПараметры.Результат); @@ -285,10 +261,7 @@ Функция МаскаФайла(ИмяФайла) - СистемнаяИнформация = Новый СистемнаяИнформация; - Платформа = СистемнаяИнформация.ТипПлатформы; - - НеУчитыватьРегистр = Платформа = ТипПлатформы.Windows_x86 Или Платформа = ТипПлатформы.Windows_x86_64; + НеУчитыватьРегистр = ОбщегоНазначенияКлиент.ЭтоWindowsКлиент(); Если НеУчитыватьРегистр Тогда Маска = ВРег(ИмяФайла); diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl deleted file mode 100644 index a97a17589..000000000 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl +++ /dev/null @@ -1,115 +0,0 @@ -#Область СлужебныеПроцедурыИФункции - -// Имя событие для записи в журнал регистрации. -// -Функция СобытиеЖурналаРегистрации() Экспорт - - Возврат НСтр("ru = 'Адресный классификатор'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - -// Разделяет исходный текст на наименование и сокращение. -// Сокращением считается последнее слово, отделенное пробельным символом. -// -// Параметры: -// Название - Строка - Полное название, например "Москва г". -// -// Возвращаемое значение: -// Структура - содержит поля. -// * Наименование - Строка - Наименование, например "Москва". Если сокращение выделить не удалось, то исходное -// название. -// * Сокращение - Строка - Сокращение, например "г". Если сокращение выделить не удалось, то пустая строка. -// -Функция НаименованиеИСокращение(Название) Экспорт - ТекстПоиска = СокрП(Название); - - Позиция = СтрДлина(ТекстПоиска); - Пока Позиция > 0 Цикл - Если ПустаяСтрока(Сред(ТекстПоиска, Позиция, 1)) Тогда - Прервать; - КонецЕсли; - Позиция = Позиция - 1; - КонецЦикла; - - Результат = Новый Структура("Наименование, Сокращение"); - Если Позиция = 0 Тогда - Результат.Наименование = ТекстПоиска; - Результат.Сокращение = ""; - Иначе - Результат.Наименование = СокрП(Лев(ТекстПоиска, Позиция)); - Результат.Сокращение = Сред(ТекстПоиска, Позиция + 1); - КонецЕсли; - - Возврат Результат; -КонецФункции - -// Набор уровней для запросов ФИАС. -// -// Возвращаемое значение: -// ФиксированныйМассив - набор числовых уровней. -// -Функция УровниКлассификатораФИАС() Экспорт - - Уровни = Новый Массив; - Уровни.Добавить(1); - Уровни.Добавить(2); - Уровни.Добавить(3); - Уровни.Добавить(5); - Уровни.Добавить(4); - Уровни.Добавить(6); - Уровни.Добавить(7); - Уровни.Добавить(90); - Уровни.Добавить(91); - - Возврат Новый ФиксированныйМассив(Уровни); -КонецФункции - -Функция ЭтоМуниципальныйАдрес(ТипАдреса) Экспорт - Возврат СтрСравнить(ТипАдреса, "Муниципальный") = 0; -КонецФункции - -Функция ИменаУровнейАдреса(ТипАдреса, ВключатьУлицу) Экспорт - Уровни = Новый Массив; - - Уровни.Добавить("Area"); - Если ТипАдреса = "ЕАЭС" Тогда - - Уровни.Добавить("District"); - Уровни.Добавить("City"); - Уровни.Добавить("Locality"); - - Иначе - - Если ЭтоМуниципальныйАдрес(ТипАдреса) Тогда - Уровни.Добавить("MunDistrict"); - Уровни.Добавить("Settlement"); - Иначе - Уровни.Добавить("District"); - Уровни.Добавить("City"); - КонецЕсли; - - Уровни.Добавить("CityDistrict"); - Уровни.Добавить("Locality"); - Уровни.Добавить("Territory"); - - Если ВключатьУлицу Тогда - Уровни.Добавить("Street"); - КонецЕсли; - КонецЕсли; - Возврат Уровни; -КонецФункции - -Функция ЗначениеСтроенияИлиПомещения(Тип, Значение) Экспорт - Возврат Новый Структура("type, number", Тип, Значение); -КонецФункции - -Функция ОсновнаяСтрана() Экспорт - Возврат "Россия"; -КонецФункции - -Функция ПрефиксВерсииЗапроса() Экспорт - Возврат "rest/v2/"; -КонецФункции - -#КонецОбласти - diff --git a/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl index 4f2e68fee..e780d2660 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // HTTPСоединение для вызова веб-сервиса 1С. @@ -19,12 +27,15 @@ ПарольПользователя = Авторизация.Пароль; КонецЕсли; - ТекущийURLВебСервиса = "api.orgaddress.1c.ru"; - Прокси = Неопределено; - Порт = Неопределено; + СтруктураURIВебСервиса = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресныйКлассификаторСлужебный.АдресВебСервисаКонтактнойИнформации()); + ИмяСервера = СтруктураURIВебСервиса.ИмяСервера; + + Порт = ?(ЗначениеЗаполнено(СтруктураURIВебСервиса.Порт), СтруктураURIВебСервиса.Порт, Неопределено); + Прокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); - Прокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"); + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси(СтруктураURIВебСервиса.Схема); КонецЕсли; ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); @@ -33,7 +44,7 @@ СохраненныйТекущийURLВебСервиса = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АдресныйКлассификатор", "URLСервисаКлассификатора1С"); Если ТипЗнч(СохраненныйТекущийURLВебСервиса) = Тип("Строка") И ЗначениеЗаполнено(СохраненныйТекущийURLВебСервиса) Тогда URLВебСервисаПоЧастям = СтрРазделить(СохраненныйТекущийURLВебСервиса, ":", Ложь); - ТекущийURLВебСервиса = СокрЛП(URLВебСервисаПоЧастям[0]); + ИмяСервера = СокрЛП(URLВебСервисаПоЧастям[0]); Если URLВебСервисаПоЧастям.Количество() > 1 Тогда ТипЧисло = Новый ОписаниеТипов("Число"); Порт = ТипЧисло.ПривестиЗначение(URLВебСервисаПоЧастям[1]); @@ -47,7 +58,7 @@ Попытка Соединение = Новый HTTPСоединение( - ТекущийURLВебСервиса, + ИмяСервера, Порт, ИмяПользователя, ПарольПользователя, @@ -62,22 +73,28 @@ Исключение ШаблонЗапроса = "%1:%2%3ping"; - URL = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, ТекущийURLВебСервиса, Порт, - АдресныйКлассификаторКлиентСервер.ПрефиксВерсииЗапроса()); - РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(URL); + URL = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, ИмяСервера, Порт, + АдресныйКлассификаторСлужебный.ПрефиксВерсииЗапроса()); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось установить HTTP-соединение с сервером %1:%2 |по причине: - |%3 - | - |Результат диагностики: - |%4'"), + |%3'"), Сервер, Формат(Порт, "ЧГ="), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), - РезультатДиагностики.ОписаниеОшибки); + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + РезультатДиагностики = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(URL); - ЗаписьЖурналаРегистрации(АдресныйКлассификаторКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + |Результат диагностики: + |%2'"), + РезультатДиагностики.ОписаниеОшибки); + КонецЕсли; + + ЗаписьЖурналаРегистрации(АдресныйКлассификаторСлужебный.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); КонецПопытки; @@ -91,9 +108,12 @@ Результат = Новый Соответствие; // Веб-сервис 1С - СервисРезультат = АдресныйКлассификаторСлужебный.ВерсияПоставщикаДанных(); - КлассификаторДоступен = (СервисРезультат.Данные = Истина); - + Если НЕ ОбщегоНазначения.РазделениеВключено() Тогда + СервисРезультат = АдресныйКлассификаторСлужебный.ВерсияПоставщикаДанных(); + КлассификаторДоступен = (СервисРезультат.Данные = Истина); + Иначе + КлассификаторДоступен = Ложь; + КонецЕсли; Результат.Вставить("КлассификаторДоступен", КлассификаторДоступен); ИспользоватьЗагруженные = Ложь; diff --git a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl index d05cab3db..39c8f0b28 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает информацию о доступности адресных сведений. @@ -147,7 +155,7 @@ Результат = Новый Структура("Данные, ОбщаяЧастьПредставления", ТаблицаДанныхДляВыбораПоПочтовомуИндексу()); СтруктураОписанияОшибкиПоставщика(Результат); - + ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(Результат, Индекс, ДополнительныеПараметры); Если Результат.Данные.Количество() = 0 Тогда @@ -233,18 +241,15 @@ И ТипЗнч(ЗагруженныеАдресныеСведения.Получить(КодРегиона)) = Тип("Структура") И ЗагруженныеАдресныеСведения.Получить(КодРегиона).ИспользоватьЗагруженные Тогда Адрес = РаспознатьАдресЗагруженныеДанные(ЧастиАдреса); + Если СтрСравнить(Адрес.addressType, АдресВСвободнойФорме()) <> 0 Тогда + Возврат Адрес; + КонецЕсли; ИначеЕсли ЗагруженныеАдресныеСведения.Получить("КлассификаторДоступен") = Истина Тогда Адрес = РаспознатьАдресВебСервис(ЧастиАдреса, Представление, ВСтруктуру); Возврат Адрес; - Иначе - Возврат Неопределено; КонецЕсли; - - Если СтрСравнить(Адрес.addressType, АдресВСвободнойФорме()) = 0 Тогда - Возврат Неопределено; - КонецЕсли; - - Возврат Адрес; + + Возврат Неопределено; КонецФункции @@ -322,10 +327,10 @@ НоваяСтрока.Идентификатор = СтрокаРезультатаВебСервис[ИмяИдентификатора]; НоваяСтрока.Представление = СтрокаРезультатаВебСервис[ИмяПоля]; Иначе - ИмяПоляПодбора = ?(ИмяПоля = "munName", "name", "munName"); - ИмяИдентификатораПодбора = ?(ИмяПоля = "munName", "id", "munId"); - НоваяСтрока.Идентификатор = СтрокаРезультатаВебСервис[ИмяИдентификатораПодбора]; - НоваяСтрока.Представление = СтрокаРезультатаВебСервис[ИмяПоляПодбора]; + ИмяПоля1 = ?(ИмяПоля = "munName", "name", "munName"); + ИмяИдентификатора1 = ?(ИмяПоля = "munName", "id", "munId"); + НоваяСтрока.Идентификатор = СтрокаРезультатаВебСервис[ИмяИдентификатора1]; + НоваяСтрока.Представление = СтрокаРезультатаВебСервис[ИмяПоля1]; КонецЕсли; НоваяСтрока.РегионЗагружен = Ложь; НоваяСтрока.Неактуален = Ложь; @@ -455,10 +460,10 @@ Если ЗначениеЗаполнено(СтрокаДанных[ИмяПоляИдентификатор]) Тогда ДанныеВыбора.Данные.Добавить(СтрокаДанных[ИмяПоляИдентификатор], СтрокаДанных[ИмяПоля]); Иначе - ИмяПоляПодбора = ?(ИмяПоля = "munName", "name", "munName"); - ИмяПоляИдентификаторПодбора = ?(ИмяПоля = "munName", "id", "munId"); - Если ЗначениеЗаполнено(СтрокаДанных[ИмяПоляИдентификаторПодбора]) Тогда - ДанныеВыбора.Данные.Добавить(СтрокаДанных[ИмяПоляИдентификаторПодбора], СтрокаДанных[ИмяПоляПодбора]); + ИмяПоля1 = ?(ИмяПоля = "munName", "name", "munName"); + ИмяПоляИдентификатор1 = ?(ИмяПоля = "munName", "id", "munId"); + Если ЗначениеЗаполнено(СтрокаДанных[ИмяПоляИдентификатор1]) Тогда + ДанныеВыбора.Данные.Добавить(СтрокаДанных[ИмяПоляИдентификатор1], СтрокаДанных[ИмяПоля1]); КонецЕсли; КонецЕсли; КонецЦикла; @@ -504,7 +509,7 @@ // Функция ВариантыАвтоподбора(Текст, ДополнительныеПараметры) Экспорт - Результат = Новый СписокЗначений; + Результат = Новый СписокЗначений; КешПредставлений = Новый Соответствие; ТолькоВебСервис = ДополнительныеПараметры.Свойство("ТолькоВебСервис") И ДополнительныеПараметры.ТолькоВебСервис; @@ -541,6 +546,7 @@ КонецЕсли; Возврат Результат; + КонецФункции // Возвращает список домов по идентификатору адресного объекта, поиск по подобию. @@ -718,7 +724,7 @@ Если АдресПустой(Результат.Данные) Тогда ЗаполнитьАктуальныеАдресныеСведенияСервис1С(Результат, СведенияОбАдресномОбъекте.Идентификатор, ЭтоМуниципальныйАдрес); - + Если АдресПустой(Результат.Данные) Тогда Результат.Данные = ОписаниеНовойКонтактнойИнформации(); КонецЕсли; @@ -821,10 +827,10 @@ Для каждого АдресаДляПроверки Из МестоПроверки.ВебСервис Цикл РезультатПроверки = Новый Структура(); - РезультатПроверки.Вставить("id", ""); + РезультатПроверки.Вставить("id", ""); РезультатПроверки.Вставить("АдресПроверен", Ложь); - РезультатПроверки.Вставить("Варианты", Новый Массив); - РезультатПроверки.Вставить("Ошибки", Новый Массив); + РезультатПроверки.Вставить("Варианты", Новый Массив); + РезультатПроверки.Вставить("Ошибки", Новый Массив); Результат.Данные.Добавить(РезультатПроверки); @@ -1019,7 +1025,6 @@ ИначеЕсли СтрДлина(КодКЛАДР) = 16 Тогда КодКЛАДР = "0" + КодКЛАДР; КонецЕсли; - Результат.КодыАдреса.КодКЛАДР = КодКЛАДР; СформироватьКодыКЛАДР(КодКЛАДР, Адрес, Результат.КодыКЛАДР); КодКЛАДРЗаполнены = Истина; @@ -1035,15 +1040,12 @@ КонецЕсли; - ОсновныеКодыЗаполнены = Ложь; - // Получаем код КЛАДР из веб-сервиса. Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] Или Источник = "Сервис1С" Тогда Если ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда - ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("selectByCode?code=%1&codeType=ID", - Строка(ИдентификаторАдресногоОбъекта)); + Строка(ИдентификаторАдресногоОбъекта)); РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); @@ -1055,21 +1057,16 @@ СформироватьКодыКЛАДР(Результат.КодыАдреса.КодКЛАДР, Адрес, Результат.КодыКЛАДР); КонецЕсли; - Если Не ОсновныеКодыЗаполнены Тогда - - Результат.КодыАдреса.Идентификатор = Сведения.Id; - Результат.КодыАдреса.КодКЛАДР = Формат(Сведения.codeKLADR,"ЧГ=0"); - Результат.КодыАдреса.ОКАТО = Формат(Сведения.okato,"ЧГ=0"); - Результат.КодыАдреса.ОКТМО = Формат(Сведения.oktmo,"ЧГ=0"); - Результат.КодыАдреса.КодИФНСФЛ = Формат(Сведения.ifnsFlCode,"ЧГ=0"); - Результат.КодыАдреса.КодИФНСЮЛ = Формат(Сведения.ifnsUlCode,"ЧГ=0"); - Результат.КодыАдреса.КодУчасткаИФНСФЛ = Формат(Сведения.ifnsFlAreaCode,"ЧГ=0"); - Результат.КодыАдреса.КодУчасткаИФНСЮЛ = Формат(Сведения.ifnsUlAreaCode,"ЧГ=0"); - - КонецЕсли; + Результат.КодыАдреса.КодКЛАДР = Сведения.codeKLADR; + Результат.КодыАдреса.Идентификатор = Сведения.Id; + Результат.КодыАдреса.ОКАТО = Сведения.okato; + Результат.КодыАдреса.ОКТМО = Сведения.oktmo; + Результат.КодыАдреса.КодИФНСФЛ = Сведения.ifnsFlCode; + Результат.КодыАдреса.КодИФНСЮЛ = Сведения.ifnsUlCode; + Результат.КодыАдреса.КодУчасткаИФНСФЛ = Сведения.ifnsFlAreaCode; + Результат.КодыАдреса.КодУчасткаИФНСЮЛ = Сведения.ifnsUlAreaCode; КонецЕсли; - КонецЕсли; КонецЕсли; @@ -1155,7 +1152,7 @@ Функция СведенияОРегионе(НаименованиеРегиона) Экспорт Результат = Новый Структура("Загружен, КодСубъектаРФ", Неопределено, Неопределено); - СведенияОРегионе = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(НаименованиеРегиона); + СведенияОРегионе = НаименованиеИСокращение(НаименованиеРегиона); Запрос = Новый Запрос; Запрос.Текст = @@ -1200,17 +1197,6 @@ КонецФункции -// Возвращает настройку текущего источника данных адресов. -// -// Возвращаемое значение: -// Строка - описание источника. Пустая строка - используются загружаемые в регистр данные. -// -Функция ИсточникДанныхАдресногоКлассификатора() Экспорт - - Возврат ПолучитьФункциональнуюОпцию("ИсточникДанныхАдресногоКлассификатора"); - -КонецФункции - // Возвращает информацию о состоянии загруженности регионов. // // Возвращаемое значение: @@ -1305,7 +1291,7 @@ // хранилище. // ОповещатьОПрогрессе - Булево - Флаг оповещения о прогрессе (см ДлительныеОперации.СообщитьПрогресс). // -Процедура ЗагрузитьКлассификаторАдресов(КодыСубъектовРФ, ОписаниеФайлов, ОповещатьОПрогрессе = Истина, ЗагружатьИсториюИзменений = Ложь, ЗагружатьПорциями = Ложь) Экспорт +Процедура ЗагрузитьКлассификаторАдресов(КодыСубъектовРФ, ОписаниеФайлов, ПараметрыЗагрузки) Экспорт ДатаЗагрузки = ТекущаяУниверсальнаяДата(); @@ -1313,162 +1299,65 @@ // Файлы уже подготовлены КаталогФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ОписаниеФайлов); Иначе - // Извлекаем файлы - КаталогФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( ПолучитьИмяВременногоФайла() ); - СоздатьКаталог(КаталогФайлов); + КаталогФайлов = ИзвлечьФайлыВКаталог(ОписаниеФайлов); + КонецЕсли; + + Попытка + + СлужебныеАдресныеСведения = СлужебныеАдресныеСведения(КаталогФайлов); + ОбновитьСлужебныеАдресныеСведения(СлужебныеАдресныеСведения); - Если ТипЗнч(ОписаниеФайлов) <> Тип("Массив") Тогда - // Если ОписаниеФайлов не массив, то данные передаются через константу, после извлечения очищаем передаваемые данные. - ПараметрыАдресногоКлассификатора = Константы.ПараметрыАдресногоКлассификатора.Получить().Получить(); - ОписаниеФайлов = ПараметрыАдресногоКлассификатора.ОписаниеФайлов; - ПараметрыАдресногоКлассификатора.Удалить("ОписаниеФайлов"); - ХранилищеПараметров = Новый ХранилищеЗначения(ПараметрыАдресногоКлассификатора); - Константы.ПараметрыАдресногоКлассификатора.Установить(ХранилищеПараметров); - КонецЕсли; + // 2. Все заказанные субъекты + ВсегоСубъектов = КодыСубъектовРФ.Количество(); + НомерПоПорядку = 0; - Для Каждого ОписаниеФайла Из ОписаниеФайлов Цикл - Файл = Новый Файл(ОписаниеФайла.Имя); - ПолноеИмяФайла = КаталогФайлов + ВРег(Файл.Имя); + Для Каждого СубъектРФ Из КодыСубъектовРФ Цикл - Данные = ОписаниеФайла.Хранение; - ТипДанных = ТипЗнч(Данные); + НаименованиеРегиона = АдресныйКлассификатор.НаименованиеРегионаПоКоду(СубъектРФ); + НомерПоПорядку = НомерПоПорядку + 1; - Если ТипДанных = Тип("ДвоичныеДанные") Тогда - Данные.Записать(ПолноеИмяФайла); + Если ПараметрыЗагрузки.ОповещатьОПрогрессе Тогда - ИначеЕсли ЭтоАдресВременногоХранилища(Данные) Тогда - Данные = ПолучитьИзВременногоХранилища(Данные); - Данные.Записать(ПолноеИмяФайла); - - Иначе - ПолноеИмяФайла = Данные; + ОсталосьДляЗагрузки = ВсегоСубъектов - НомерПоПорядку; + ОповеститьОПрогрессе(НаименованиеРегиона, СубъектРФ, ОсталосьДляЗагрузки); КонецЕсли; - Если ВРег(Прав(ПолноеИмяФайла, 4)) = ".ZIP" Тогда - Архив = Новый ЧтениеZipФайла(ПолноеИмяФайла); - Архив.ИзвлечьВсе(КаталогФайлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); - УдалитьВременныйФайл(ПолноеИмяФайла); + Попытка - ФайлыСтарогоФИАС = НайтиФайлы(КаталогФайлов, "*EXTRAINFO.FI"); - ФайлыНовогоФИАС = НайтиФайлы(КаталогФайлов, "*EXTRAACT.FI"); + ЗагрузитьАдресныеСведенияПоРегиону(СубъектРФ, КаталогФайлов, ПараметрыЗагрузки); - Если ФайлыНовогоФИАС.Количество() = 0 Тогда - - Если ФайлыСтарогоФИАС.Количество() > 0 Тогда - - ТекстПричины = НСтр("ru='Не допускается загрузка адресных сведений без поддержки муниципальных адресов.'"); - - Иначе - - ТекстПричины = НСтр("ru='Файл не содержит адресных сведений ФИАС'"); - - КонецЕсли; - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, - ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось загрузить адресные сведения из файла: %1 - |по причине: %2 - |Необходимо использовать адресные сведения расположенные по адресу https://its.1c.ru/download/fias2'"), ПолноеИмяФайла, ТекстПричины)); - ВызватьИсключение ТекстПричины; - - КонецЕсли; + // Ставим версию данных загрузки региона. + УстановитьИнформациюОЗагрузкеВерсии(СубъектРФ, СлужебныеАдресныеСведения.Версия, СлужебныеАдресныеСведения.ДатаВерсии, ДатаЗагрузки); - КонецЕсли; + Исключение + + // Во время загрузки возникла ошибка, очищаем частично загруженные данные. + КодыСубъектаРФ = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СубъектРФ); + + ОчиститьКлассификаторАдресов(КодыСубъектаРФ); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, + ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось загрузить адресные сведения субъекта РФ: %1 %2 + |по причине: %3'"), СубъектРФ, НаименованиеРегиона, ОписаниеОшибки())); + ВызватьИсключение; + КонецПопытки; КонецЦикла; - КонецЕсли; - - ВидыСведенийНеОбработаны = Истина; - - // 2. Все заказанные субъекты - ВсегоСубъектов = КодыСубъектовРФ.Количество(); - НомерПоПорядку = 0; - - Для Каждого СубъектРФ Из КодыСубъектовРФ Цикл - - НаименованиеРегиона = АдресныйКлассификатор.НаименованиеРегионаПоКоду(СубъектРФ); - - НомерПоПорядку = НомерПоПорядку + 1; - Если ОповещатьОПрогрессе Тогда - ТекстОсталосьЗагрузить = ?(ВсегоСубъектов - НомерПоПорядку > 0, " (" + НСтр("ru = 'осталось'") - + " " + Формат(ВсегоСубъектов - НомерПоПорядку, "ЧН=") + ")", ""); - ИнформацияОЗагрузке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка региона ""%1 - %2""'"), - СубъектРФ, НаименованиеРегиона) + ТекстОсталосьЗагрузить + "..."; - ДлительныеОперации.СообщитьПрогресс(, ИнформацияОЗагрузке); - КонецЕсли; - - Если ВидыСведенийНеОбработаны Тогда - // Общая справочная информация, понадобится потом. - СлужебныеАдресныеСведения = СлужебныеАдресныеСведения(Неопределено, КаталогФайлов); - // И сразу запишем - Набор = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей(); - Набор.Загрузить(СлужебныеАдресныеСведения.Сведения); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); - - ВидыСведенийНеОбработаны = Ложь; - КонецЕсли; - - Попытка - - ВерсияСубъектаРФ = ИнформацияОЗагрузкеВерсии(СубъектРФ).Версия; - - ЗагрузитьАдресныеОбъекты(СубъектРФ, КаталогФайлов, ЗагружатьПорциями); - ЗагрузитьДомаЗданияСтроения(СубъектРФ, КаталогФайлов, ЗагружатьПорциями); - - Если ЗагружатьИсториюИзменений Тогда - ЗагрузитьИсториюАдресныхОбъектов(СубъектРФ, КаталогФайлов, ЗагружатьПорциями); - ЗагрузитьПричиныИзмененияАдреса(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - КонецЕсли; - - ЗагрузитьДополнительныеСведения(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения, ЗагружатьИсториюИзменений); - - // Ставим версию данных загрузки региона. - УстановитьИнформациюОЗагрузкеВерсии(СубъектРФ, СлужебныеАдресныеСведения.Версия, СлужебныеАдресныеСведения.ДатаВерсии, ДатаЗагрузки); - - Исключение - // Во время загрузки возникла ошибка, очищаем частично загруженные данные. - КодыСубъектаРФ = Новый Массив; - КодыСубъектаРФ.Добавить(СубъектРФ); - ОчиститьКлассификаторАдресов(КодыСубъектаРФ); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, - ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось загрузить адресные сведения субъекта РФ: %1 %2 - |по причине: %3'"), СубъектРФ, НаименованиеРегиона, ОписаниеОшибки())); - ВызватьИсключение; - КонецПопытки; - - КонецЦикла; - - // 4. Загружаем сокращения адресов. - // Эти данные будут нужны при разборах адреса из строки. - АдресныеСокращения = АдресныеСокращения(КаталогФайлов); - Набор = РегистрыСведений.УровниСокращенийАдресныхСведений.СоздатьНаборЗаписей(); - Набор.Загрузить(АдресныеСокращения.Сведения); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); // Отключаем всю бизнес-логику для ускорения операции. - - // 5. Очищаем временный каталог. - Если ТипЗнч(ОписаниеФайлов) = Тип("Строка") Тогда - УдалитьВременныйФайл(КаталогФайлов); - КонецЕсли; - -КонецПроцедуры + // 4. Загружаем сокращения адресов. + // Эти данные будут нужны при разборах адреса из строки. + ОбновитьАдресныеСокращения(КаталогФайлов); -// Удаляет временный файл. -// Если при попытке удаления возникает ошибка, она игнорируется - файл будет удален позднее. -// -Процедура УдалитьВременныйФайл(ПолноеИмяФайла) Экспорт - - Если ПустаяСтрока(ПолноеИмяФайла) Тогда - Возврат; - КонецЕсли; - - Попытка - УдалитьФайлы(ПолноеИмяФайла) + // 5. Очищаем временный каталог. + ФайловаяСистема.УдалитьВременныйФайл(КаталогФайлов); + Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, - ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось удалить временный файл - |%1 по причине: %2'"), ПолноеИмяФайла, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()))); - КонецПопытки + + // Очищаем временный каталог. + ФайловаяСистема.УдалитьВременныйФайл(КаталогФайлов); + ВызватьИсключение; + + КонецПопытки; КонецПроцедуры @@ -1519,6 +1408,24 @@ ЗапросыРазрешений.Добавить(ЗапросРазрешений); + // Веб-сервис + + АдресВебСервиса = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресВебСервисаКонтактнойИнформации()); + Протокол = ВРег(АдресВебСервиса.Схема); + Адрес = АдресВебСервиса.Хост; + Порт = АдресВебСервиса.Порт; + Описание = НСтр("ru = 'Веб-сервис адресного классификатора.'"); + + Разрешения = Новый Массив; + Разрешения.Добавить( + МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание)); + + ВладелецРазрешения = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.РегистрыСведений.АдресныеОбъекты.ПолноеИмя()); + + ЗапросРазрешений = МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, ВладелецРазрешения, Истина); + + ЗапросыРазрешений.Добавить(ЗапросРазрешений); + КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. @@ -1556,12 +1463,12 @@ Разделы.Добавить(Подсистема); КонецЕсли; - // 1. Необходимость актуализировать адресный классификатор - в классификаторе нет записей о регионах. - ПоследнееОбновление = ОписаниеПоследнейЗагрузки(); + // 1. Необходимость актуализировать адресный классификатор - в старом классификаторе больше нет записей о регионах. + УстаревшийКлассификатор = ЗаполненныеРегионыУстаревшегоКлассификатора(); Для Каждого Раздел Из Разделы Цикл Дело = ТекущиеДела.Добавить(); Дело.Идентификатор = "АктуализацияАдресногоКлассификатора"; - Дело.ЕстьДела = Не ЗначениеЗаполнено(ПоследнееОбновление.ДатаПоследнейЗагрузки); + Дело.ЕстьДела = УстаревшийКлассификатор; Дело.Важное = Истина; Дело.СкрыватьВНастройках = Истина; Дело.Владелец = Раздел; @@ -1569,7 +1476,7 @@ Дело.Количество = 0; Дело.Подсказка = НСтр("ru = 'Автоподбор и проверка корректности адресов временно недоступны.'"); Дело.ПараметрыФормы = Новый Структура; - Дело.Форма = "РегистрСведений.АдресныеОбъекты.Форма.ЗагрузкаАдресногоКлассификатора"; + Дело.Форма = "РегистрСведений.АдресныеОбъекты.Форма.АктуализацияУстаревшегоКлассификатора"; Если Дело.ЕстьДела = Истина Тогда Возврат; КонецЕсли; @@ -1598,8 +1505,15 @@ #Область СлужебныеПроцедурыИФункции -Функция ЭтоМуниципальныйАдрес(ТипАдреса) - Возврат СтрСравнить(ТипАдреса, "Муниципальный") = 0; +// Возвращает настройку текущего источника данных адресов. +// +// Возвращаемое значение: +// Строка - описание источника. Пустая строка - используются загружаемые в регистр данные. +// +Функция ИсточникДанныхАдресногоКлассификатора() + + Возврат ПолучитьФункциональнуюОпцию("ИсточникДанныхАдресногоКлассификатора"); + КонецФункции Функция РаспознатьАдресВебСервис(ЧастиАдреса, Представление, ВСтруктуру) @@ -1617,7 +1531,7 @@ Если СтрСравнить(СтрСоединить(СтрРазделить(ЧастьАдреса.Сокращение, "0123456789")), ЧастьАдреса.Сокращение) <> 0 Тогда Если ТипыЗданий.Получить(ВРег(ЧастьАдреса.Наименование)) =Неопределено Тогда - Помещения.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения(ТРег(ЧастьАдреса.Наименование), ЧастьАдреса.Сокращение)); + Помещения.Добавить(ЗначениеСтроенияИлиПомещения(ТРег(ЧастьАдреса.Наименование), ЧастьАдреса.Сокращение)); Продолжить; // Помещение. КонецЕсли; КонецЕсли; @@ -1626,11 +1540,9 @@ КонецЦикла; - Текст = СтрСоединить(АдресДляПроверки, ", "); - ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("recognize?text=%1&limit=20", КодироватьСтроку(Представление, СпособКодированияСтроки.КодировкаURL)); - + РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса); Если РезультатВебСервис.Отказ Или РезультатВебСервис.Количество() = 0 Или РезультатВебСервис.Данные = Неопределено Тогда Возврат Адрес; @@ -1807,7 +1719,7 @@ СведенияОДоме.ТипДома = ТРег(ЭлементАдреса.Наименование); СведенияОДоме.НомерДома = Значение; ИначеЕсли КодыДомовВладенийИСтроений.Строения[Тип] <> Неопределено Тогда - Строения.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения(ТРег(ЭлементАдреса.Наименование), Значение)); + Строения.Добавить(ЗначениеСтроенияИлиПомещения(ТРег(ЭлементАдреса.Наименование), Значение)); Если КодыДомовВладенийИСтроений.Строения[Тип] = -1 Тогда СведенияОДоме.НомерКорпуса = Значение; Иначе @@ -1815,7 +1727,7 @@ СведенияОДоме.НомерСтроения = Значение; КонецЕсли; Иначе - Квартиры.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения(ТРег(ЭлементАдреса.Наименование), Значение)); + Квартиры.Добавить(ЗначениеСтроенияИлиПомещения(ТРег(ЭлементАдреса.Наименование), Значение)); КонецЕсли; КонецЦикла; @@ -1976,7 +1888,7 @@ Адрес.AddressType = ?(Муниципальный, МуниципальныйАдрес(), АдминистративноТерриториальныйАдрес()); - + ИдентификаторДомаИДополнительныеСведения = КодыПоИдентификаторуАдресногоОбъекта(Адрес.ID, СведенияОДоме); Если ИдентификаторДомаИДополнительныеСведения <> Неопределено Тогда @@ -2011,9 +1923,9 @@ Адрес.HouseType = ТРег(СведенияОДоме.ТипДома); Адрес.HouseNumber = СокрЛП(СтрЗаменить(ЭлементАдреса.Сокращение, "№", "")); ИначеЕсли КодыДомовВладенийИСтроений.Строения[ВРег(Тип)] <> Неопределено Тогда - Адрес.Buildings.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения(ТРег(Тип), СокрЛП(СтрЗаменить(ЭлементАдреса.Сокращение, "№", "")))); + Адрес.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(ТРег(Тип), СокрЛП(СтрЗаменить(ЭлементАдреса.Сокращение, "№", "")))); ИначеЕсли Помещения[ВРег(Тип)] <> Неопределено Тогда - Адрес.Apartments.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения(ТРег(Тип), СокрЛП(СтрЗаменить(ЭлементАдреса.Сокращение, "№", "")))); + Адрес.Apartments.Добавить(ЗначениеСтроенияИлиПомещения(ТРег(Тип), СокрЛП(СтрЗаменить(ЭлементАдреса.Сокращение, "№", "")))); КонецЕсли; КонецЦикла; @@ -2026,12 +1938,18 @@ КонецФункции +Функция АдминистративноТерриториальныйАдрес() + Возврат "Административно-территориальный"; +КонецФункции + +Функция МуниципальныйАдрес() + Возврат "Муниципальный"; +КонецФункции + // Локальная проверка одного адреса. // Процедура УстановитьИдентификаторыАдресаПоЗагруженнымДанным(Адрес) - ЭтоМуниципальныйАдрес = АдресныйКлассификаторКлиентСервер.ЭтоМуниципальныйАдрес(Адрес.AddressType); - Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 20 @@ -2126,12 +2044,11 @@ | ПО ДомаЗданияСтроения.АдресныйОбъект = АдресныеОбъекты.Идентификатор |"; - Если ЭтоМуниципальныйАдрес Тогда + Если ЭтоМуниципальныйАдрес(Адрес.AddressType) Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, ".РодительскийИдентификатор", ".МуниципальныйРодительскийИдентификатор"); КонецЕсли; - ИменаУровнейАдреса = АдресныйКлассификаторКлиентСервер.ИменаУровнейАдреса(Адрес.AddressType, Истина); - АдресныеСведенияДляЗапроса = Новый Массив; + ИменаУровнейАдреса = ИменаУровнейАдреса(Адрес.AddressType, Истина); Счетчик = 0; КакиеУровниПроверять = Новый Соответствие; @@ -2162,7 +2079,6 @@ Адреса = РезультатЗапроса[0]; Дома = РезультатЗапроса[1]; - СписокКорректныхАдресов = Новый Массив; Если Адреса.Пустой() Тогда Возврат; КонецЕсли; @@ -2189,21 +2105,6 @@ Возврат; КонецЕсли; - // Восстанавливаем недостающие адресные сведения - ДанныеАдреса = Новый Структура(); - ДанныеАдреса.Вставить("Идентификатор", ИдентификаторАдресногоОбъекта); - ДанныеАдреса.Вставить("Муниципальный", ЭтоМуниципальныйАдрес); - Результат = АктуальныеАдресныеСведения(ДанныеАдреса); - Если Не Результат.Отказ Тогда - - Если ЭтоМуниципальныйАдрес Тогда - ЗаполнитьЗначенияСвойств(Адрес, Результат.Данные, "district,districtType,districtId,city,cityType,cityId"); - Иначе - ЗаполнитьЗначенияСвойств(Адрес, Результат.Данные, "munDistrict,munDistrictType,munDistrictId,settlement,settlementType,settlementId"); - КонецЕсли; - - КонецЕсли; - // Проверяем дома СведенияОДоме = СведенияОДоме(); @@ -2494,7 +2395,7 @@ Результат["addressType"] = МуниципальныйАдрес(); КонецЕсли; - Если Результат["addressType"] =АдминистративноТерриториальныйАдрес() И Выборка.Количество() = 2 Тогда + Если Результат["addressType"] = АдминистративноТерриториальныйАдрес() И Выборка.Количество() = 2 Тогда СтрокаКодов = Выборка[1]; Иначе СтрокаКодов = Выборка[0]; @@ -2587,12 +2488,11 @@ КодСубъектаРФ = АдресныйКлассификатор.КодРегионаПоНаименованию(СокрЛП(Адрес.Area + " " + Адрес.AreaType)); Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); - ИменаУровнейАдреса = АдресныйКлассификаторКлиентСервер.ИменаУровнейАдреса(Адрес.AddressType, Истина); - АдресныеСведенияДляЗапроса = Новый Массив; + ИменаУровнейАдреса = ИменаУровнейАдреса(Адрес.AddressType, Истина); Счетчик = 0; КакиеУровниПроверять = Новый Соответствие; - Если АдресныйКлассификаторКлиентСервер.ЭтоМуниципальныйАдрес(Адрес.AddressType) Тогда + Если ЭтоМуниципальныйАдрес(Адрес.AddressType) Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, ".РодительскийИдентификатор", ".МуниципальныйРодительскийИдентификатор"); КонецЕсли; @@ -2851,7 +2751,6 @@ ПреобразоватьВводАдреса(Текст); ТекстПоиска = ЗамаскироватьСпецсимволыПодобия(Текст); - СписокФраз = СтрРазделить(ТекстПоиска, " "); Запрос = Новый Запрос(); @@ -2945,7 +2844,7 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "+ "" "" + АдресныеОбъекты.Сокращение", ""); КонецЕсли; - Если АдресныйКлассификаторКлиентСервер.ЭтоМуниципальныйАдрес(ТипаАдреса) Тогда + Если ЭтоМуниципальныйАдрес(ТипаАдреса) Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Муниципальный", "ИСТИНА"); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Муниципальный", "ЛОЖЬ"); @@ -3137,7 +3036,7 @@ // Заполнение адреса по индексу из загруженных данных. // -Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(Результат, ПочтовыйИндекс, ДополнительныеПараметры) +Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(Результат, Знач ПочтовыйИндекс, ДополнительныеПараметры) ТекстЗапроса = "ВЫБРАТЬ | ДомаЗданияСтроения.АдресныйОбъект КАК Идентификатор @@ -3256,9 +3155,8 @@ | ПО (АдресныеОбъекты4.МуниципальныйРодительскийИдентификатор = АдресныеОбъекты5.Идентификатор) |ГДЕ | АдресныеОбъекты.Наименование <> """" - | |УПОРЯДОЧИТЬ ПО - | Представление"; + | Представление, Муниципальный УБЫВ"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ПочтовыйИндекс", ПочтовыйИндекс); @@ -3325,7 +3223,7 @@ КонецЕсли; - Если АдресныйКлассификаторКлиентСервер.ЭтоМуниципальныйАдрес(ТипАдреса) Тогда + Если ЭтоМуниципальныйАдрес(ТипАдреса) Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "РодительскийИдентификатор", "МуниципальныйРодительскийИдентификатор"); КонецЕсли; @@ -3346,7 +3244,6 @@ КонецЕсли; Данные = Результат.Данные; - РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат; @@ -3390,7 +3287,7 @@ Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); - ПрефиксВерсииЗапроса = АдресныйКлассификаторКлиентСервер.ПрефиксВерсииЗапроса(); + ПрефиксВерсииЗапроса = ПрефиксВерсииЗапроса(); HTTPЗапрос = Новый HTTPЗапрос(ПрефиксВерсииЗапроса + "verify"); ИдентификаторЗапроса = Строка(Новый УникальныйИдентификатор); @@ -3482,6 +3379,125 @@ КонецПроцедуры +Процедура ЗагрузитьАдресныеСведенияПоРегиону(Знач СубъектРФ, Знач КаталогФайлов, ПараметрыЗагрузки) + + ЗагружатьОднимНабором = Не ПараметрыЗагрузки.ЗагружатьПорциями; + ЗагрузитьАдресныеОбъекты(СубъектРФ, КаталогФайлов, ЗагружатьОднимНабором); + ЗагрузитьДомаЗданияСтроения(СубъектРФ, КаталогФайлов, ЗагружатьОднимНабором); + + Если ПараметрыЗагрузки.ЗагружатьИсториюАдресов Тогда + ЗагрузитьИсториюАдресныхОбъектов(СубъектРФ, КаталогФайлов, ЗагружатьОднимНабором); + ЗагрузитьПричиныИзмененияАдреса(СубъектРФ, КаталогФайлов); + КонецЕсли; + + ЗагрузитьДополнительныеСведения(СубъектРФ, КаталогФайлов, ПараметрыЗагрузки.ЗагружатьИсториюАдресов); + +КонецПроцедуры + +Процедура ОбновитьАдресныеСокращения(Знач КаталогФайлов) + + АдресныеСокращения = АдресныеСокращения(КаталогФайлов); + Набор = РегистрыСведений.УровниСокращенийАдресныхСведений.СоздатьНаборЗаписей(); + Набор.Загрузить(АдресныеСокращения.Сведения); + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор); // Отключаем всю бизнес-логику для ускорения операции. + +КонецПроцедуры + +Процедура ОповеститьОПрогрессе(Знач НаименованиеРегиона, Знач СубъектРФ, Знач ОсталосьДляЗагрузки) + + Перем ИнформацияОЗагрузке, ТекстОсталосьЗагрузить, ШаблонСообщения; + + ШаблонСообщения = НСтр("ru = 'Загрузка региона ""%1 - %2"" %3'") + "..."; + + ТекстОсталосьЗагрузить = ?(ОсталосьДляЗагрузки > 0, + " (" + НСтр("ru = 'осталось'") + " " + Формат(ОсталосьДляЗагрузки, "ЧН=") + ")", + ""); + + ИнформацияОЗагрузке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, + СубъектРФ, НаименованиеРегиона, ТекстОсталосьЗагрузить); + + ДлительныеОперации.СообщитьПрогресс(, ИнформацияОЗагрузке); + +КонецПроцедуры + +Процедура ОбновитьСлужебныеАдресныеСведения(СлужебныеАдресныеСведения) + + Набор = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей(); + Набор.Загрузить(СлужебныеАдресныеСведения.Сведения); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); + +КонецПроцедуры + +Функция ИзвлечьФайлыВКаталог(ОписаниеФайлов) + + // Извлекаем файлы + КаталогФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( ПолучитьИмяВременногоФайла()); + СоздатьКаталог(КаталогФайлов); + + Если ТипЗнч(ОписаниеФайлов) <> Тип("Массив") Тогда + // Если ОписаниеФайлов не массив, то данные передаются через константу, после извлечения очищаем передаваемые данные. + ПараметрыАдресногоКлассификатора = Константы.ПараметрыАдресногоКлассификатора.Получить().Получить(); + ОписаниеФайлов = ПараметрыАдресногоКлассификатора.ОписаниеФайлов; + ПараметрыАдресногоКлассификатора.Удалить("ОписаниеФайлов"); + ХранилищеПараметров = Новый ХранилищеЗначения(ПараметрыАдресногоКлассификатора); + Константы.ПараметрыАдресногоКлассификатора.Установить(ХранилищеПараметров); + КонецЕсли; + + Для Каждого ОписаниеФайла Из ОписаниеФайлов Цикл + Файл = Новый Файл(ОписаниеФайла.Имя); + ПолноеИмяФайла = КаталогФайлов + ВРег(Файл.Имя); + + Данные = ОписаниеФайла.Хранение; + ТипДанных = ТипЗнч(Данные); + + Если ТипДанных = Тип("ДвоичныеДанные") Тогда + Данные.Записать(ПолноеИмяФайла); + + ИначеЕсли ЭтоАдресВременногоХранилища(Данные) Тогда + Данные = ПолучитьИзВременногоХранилища(Данные); + Данные.Записать(ПолноеИмяФайла); + + Иначе + ПолноеИмяФайла = Данные; + + КонецЕсли; + + Если ВРег(Прав(ПолноеИмяФайла, 4)) = ".ZIP" Тогда + Архив = Новый ЧтениеZipФайла(ПолноеИмяФайла); + Архив.ИзвлечьВсе(КаталогФайлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + ФайловаяСистема.УдалитьВременныйФайл(ПолноеИмяФайла); + + ФайлыСтарогоФИАС = НайтиФайлы(КаталогФайлов, "*EXTRAINFO.FI"); + ФайлыНовогоФИАС = НайтиФайлы(КаталогФайлов, "*EXTRAACT.FI"); + + Если ФайлыНовогоФИАС.Количество() = 0 Тогда + + Если ФайлыСтарогоФИАС.Количество() > 0 Тогда + + ТекстПричины = НСтр("ru='Не допускается загрузка адресных сведений без поддержки муниципальных адресов.'"); + + Иначе + + ТекстПричины = НСтр("ru='Файл не содержит адресных сведений ФИАС'"); + + КонецЕсли; + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, + ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось загрузить адресные сведения из файла: %1 + |по причине: %2 + |Необходимо использовать адресные сведения расположенные по адресу https://its.1c.ru/download/fias2'"), ПолноеИмяФайла, ТекстПричины)); + ВызватьИсключение ТекстПричины; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат КаталогФайлов; + +КонецФункции + #Область КонвертацияАдресаБазыВАдресВебСервиса Функция АдресДляПередачиВСервис(Адрес) @@ -3505,7 +3521,7 @@ Результат.Вставить("buildings", Новый Массив); Для Каждого Дом Из Адрес.buildings Цикл - ВебДом = НовыйДомДляДляПередачиВСервис(); + ВебДом = НовыйДомДляДляПередачиВСервис(); ВебДом.type = Дом.Type; ВебДом.number = Дом.Number; Результат.buildings.Добавить(ВебДом); @@ -3794,7 +3810,7 @@ ТипЭлементаСписка = СписокДляПроверки.Свойства().Получить("Item").Тип; ПроверяемыйАдрес = СписокДляПроверки.Item.Добавить(Сервис.ФабрикаXDTO.Создать(ТипЭлементаСписка)); - ПроверяемыйАдрес.Levels = АдресныйКлассификаторКлиентСервер.УровниКлассификатораФИАС(); + ПроверяемыйАдрес.Levels = УровниКлассификатораФИАС(); Если ЭтоКонтактнаяИнформацияВXML(АдресДляПроверки) Тогда АдресXDTO = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(АдресДляПроверки, Сервис.ФабрикаXDTO); ПроверяемыйАдрес.Address = АдресXDTO.Состав.Состав; @@ -3829,36 +3845,36 @@ Результат = Новый Структура("Ошибки, Варианты, АдресПроверен", Новый Массив, Новый Массив, Истина); ОшибкиПроверки = Результат.Ошибки; - ВариантыАдреса = Результат.Варианты; + + Если СтрСравнить("ВСвободнойФорме", Адрес.AddressType) = 0 Тогда + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", + НСтр("ru = 'Адрес не может быть проверен, так как он введен в свободной форме'") ); + Возврат Результат; + КонецЕсли; // Субъект должен быть всегда Если ПустаяСтрока(Адрес.Area) Тогда // Нет субъекта - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Не указан регион адреса'") ); + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Не указан регион адреса'")); Возврат Результат; КонецЕсли; - РегионЗагруженВАдресныеСведения = СведенияОРегионе(Адрес.Area + " " + Адрес.AreaType).Загружен; - Если РегионЗагруженВАдресныеСведения = Неопределено Тогда + РегионЗагруженВАдресныеСведения = СведенияОРегионе(Адрес.Area + " " + Адрес.AreaType); + Если РегионЗагруженВАдресныеСведения.КодСубъектаРФ = Неопределено Тогда ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регион ""%1"" не существует'"), Адрес.Area + " " + Адрес.AreaType)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Указан несуществующий регион ""%1""'"), Адрес.Area + " " + Адрес.AreaType)); Результат.АдресПроверен = Истина; Возврат Результат; - ИначеЕсли НЕ РегионЗагруженВАдресныеСведения Тогда - ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Отсутствуют адресные сведения по региону'") + ": " + Адрес.Area + " " + Адрес.AreaType + "."); + ИначеЕсли Не РегионЗагруженВАдресныеСведения.Загружен Тогда + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", + НСтр("ru = 'Отсутствуют адресные сведения по региону'") + ": " + Адрес.Area + " " + Адрес.AreaType + "."); Результат.АдресПроверен = Ложь; Возврат Результат; КонецЕсли; // Расшифровка свойств адреса Запрос = Новый Запрос("ВЫБРАТЬ - | Значение - |ИЗ - | РегистрСведений.СлужебныеАдресныеСведения - |ГДЕ - | Тип = ""ТипАдрЭл"" И Ключ = ""ПочтовыйИндекс"" - |;////////////////////////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ | Ключ КАК Сокращение, | Идентификатор КАК Идентификатор, | Значение КАК Значение @@ -3897,153 +3913,145 @@ | |ГДЕ | Расшифровка.Тип = ""ДопАдрЭлНомер"""); + НаборРезультатов = Запрос.ВыполнитьПакет(); - Таблица = НаборРезультатов[0].Выгрузить(); - Если Таблица.Количество() = 0 Тогда - ТипАдрЭлПочтовыйИндекс = ""; - Иначе - ТипАдрЭлПочтовыйИндекс = Таблица[0].Значение; - КонецЕсли; - - ТаблицаСокращенийДополнительных = НаборРезультатов[1].Выгрузить(); + ТаблицаСокращенийДополнительных = НаборРезультатов[0].Выгрузить(); ТаблицаСокращенийДополнительных.Индексы.Добавить("Сокращение, Значение"); - ТаблицаСокращенийЗданий = НаборРезультатов[2].Выгрузить(); + ТаблицаСокращенийЗданий = НаборРезультатов[1].Выгрузить(); ТаблицаСокращенийЗданий.Индексы.Добавить("ТипАдрЭл"); - Дополнительный = Новый Структура("Наименование, Сокращение"); - Подчиненный = Новый Структура("Наименование, Сокращение"); - ЗданияИПомещения = Новый Соответствие; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 20 -| АдресныеОбъектыУровень0.Наименование КАК НаименованиеУровень0, -| АдресныеОбъектыУровень0.Сокращение КАК СокращениеУровень0, -| АдресныеОбъектыУровень0.Идентификатор КАК ИдентификаторУровень0, -| АдресныеОбъектыУровень0.ДополнительныеАдресныеСведения КАК ДополнительныеСведения0, -| АдресныеОбъектыУровень1.Наименование КАК НаименованиеУровень1, -| АдресныеОбъектыУровень1.Сокращение КАК СокращениеУровень1, -| АдресныеОбъектыУровень1.Идентификатор КАК ИдентификаторУровень1, -| АдресныеОбъектыУровень1.ДополнительныеАдресныеСведения КАК ДополнительныеСведения1, -| АдресныеОбъектыУровень2.Наименование КАК НаименованиеУровень2, -| АдресныеОбъектыУровень2.Сокращение КАК СокращениеУровень2, -| АдресныеОбъектыУровень2.Идентификатор КАК ИдентификаторУровень2, -| АдресныеОбъектыУровень2.ДополнительныеАдресныеСведения КАК ДополнительныеСведения2, -| АдресныеОбъектыУровень3.Наименование КАК НаименованиеУровень3, -| АдресныеОбъектыУровень3.Сокращение КАК СокращениеУровень3, -| АдресныеОбъектыУровень3.Идентификатор КАК ИдентификаторУровень3, -| АдресныеОбъектыУровень3.ДополнительныеАдресныеСведения КАК ДополнительныеСведения3, -| АдресныеОбъектыУровень4.Наименование КАК НаименованиеУровень4, -| АдресныеОбъектыУровень4.Сокращение КАК СокращениеУровень4, -| АдресныеОбъектыУровень4.Идентификатор КАК ИдентификаторУровень4, -| АдресныеОбъектыУровень4.ДополнительныеАдресныеСведения КАК ДополнительныеСведения4, -| АдресныеОбъектыУровень5.Наименование КАК НаименованиеУровень5, -| АдресныеОбъектыУровень5.Сокращение КАК СокращениеУровень5, -| АдресныеОбъектыУровень5.Идентификатор КАК ИдентификаторУровень5, -| АдресныеОбъектыУровень5.ДополнительныеАдресныеСведения КАК ДополнительныеСведения5, -| ВЫБОР -| КОГДА НЕ АдресныеОбъектыУровень5.Идентификатор ЕСТЬ NULL -| ТОГДА АдресныеОбъектыУровень5.Идентификатор -| ИНАЧЕ ВЫБОР -| КОГДА НЕ АдресныеОбъектыУровень4.Идентификатор ЕСТЬ NULL -| ТОГДА АдресныеОбъектыУровень4.Идентификатор -| ИНАЧЕ ВЫБОР -| КОГДА НЕ АдресныеОбъектыУровень3.Идентификатор ЕСТЬ NULL -| ТОГДА АдресныеОбъектыУровень3.Идентификатор -| ИНАЧЕ ВЫБОР -| КОГДА НЕ АдресныеОбъектыУровень2.Идентификатор ЕСТЬ NULL -| ТОГДА АдресныеОбъектыУровень2.Идентификатор -| ИНАЧЕ ВЫБОР -| КОГДА НЕ АдресныеОбъектыУровень1.Идентификатор ЕСТЬ NULL -| ТОГДА АдресныеОбъектыУровень1.Идентификатор -| ИНАЧЕ ВЫБОР -| КОГДА НЕ АдресныеОбъектыУровень0.Идентификатор ЕСТЬ NULL -| ТОГДА АдресныеОбъектыУровень0.Идентификатор -| ИНАЧЕ АдресныеОбъектыУровень0.Идентификатор -| КОНЕЦ -| КОНЕЦ -| КОНЕЦ -| КОНЕЦ -| КОНЕЦ -| КОНЕЦ КАК Идентификатор -|ПОМЕСТИТЬ АдресныеОбъекты -|ИЗ -| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень0 -| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень1 -| ПО (АдресныеОбъектыУровень0.Идентификатор = АдресныеОбъектыУровень1.РодительскийИдентификатор) -| И (АдресныеОбъектыУровень1.Наименование = &Наименование1) -| И (АдресныеОбъектыУровень1.Сокращение = &Сокращение1) -| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень2 -| ПО (АдресныеОбъектыУровень1.Идентификатор = АдресныеОбъектыУровень2.РодительскийИдентификатор) -| И (АдресныеОбъектыУровень2.Наименование = &Наименование2) -| И (АдресныеОбъектыУровень2.Сокращение = &Сокращение2) -| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень3 -| ПО (АдресныеОбъектыУровень2.Идентификатор = АдресныеОбъектыУровень3.РодительскийИдентификатор) -| И (АдресныеОбъектыУровень3.Наименование = &Наименование3) -| И (АдресныеОбъектыУровень3.Сокращение = &Сокращение3) -| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень4 -| ПО (АдресныеОбъектыУровень3.Идентификатор = АдресныеОбъектыУровень4.РодительскийИдентификатор) -| И (АдресныеОбъектыУровень4.Наименование = &Наименование4) -| И (АдресныеОбъектыУровень4.Сокращение = &Сокращение4) -| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень5 -| ПО (АдресныеОбъектыУровень4.Идентификатор = АдресныеОбъектыУровень5.РодительскийИдентификатор) -| И (АдресныеОбъектыУровень5.Наименование = &Наименование5) -| И (АдресныеОбъектыУровень5.Сокращение = &Сокращение5) -|ГДЕ -| АдресныеОбъектыУровень0.Наименование = &Наименование0 -| И АдресныеОбъектыУровень0.Сокращение = &Сокращение0 -| И АдресныеОбъектыУровень0.Уровень = 1 -|; -| -|//////////////////////////////////////////////////////////////////////////////// -|ВЫБРАТЬ ПЕРВЫЕ 50 -| ДомаЗданияСтроения.АдресныйОбъект КАК АдресныйОбъект, -| ДомаЗданияСтроения.КодСубъектаРФ КАК КодСубъектаРФ, -| ДомаЗданияСтроения.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, -| ДомаЗданияСтроения.Строения КАК Строения, -| АдресныеОбъекты.Идентификатор КАК Идентификатор -|ИЗ -| АдресныеОбъекты КАК АдресныеОбъекты -| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения -| ПО ДомаЗданияСтроения.АдресныйОбъект = АдресныеОбъекты.Идентификатор -| ГДЕ НЕ ДомаЗданияСтроения.Строения ЕСТЬ NULL -|; -| -|//////////////////////////////////////////////////////////////////////////////// -|ВЫБРАТЬ -| АдресныеОбъекты.Идентификатор КАК Идентификатор, -| АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, -| АдресныеОбъекты.РодительскийИдентификатор КАК РодительскийИдентификатор, -| АдресныеОбъекты.МуниципальныйРодительскийИдентификатор КАК МуниципальныйРодительскийИдентификатор, -| АдресныеОбъекты.Наименование КАК Наименование, -| АдресныеОбъекты.Сокращение КАК Сокращение, -| АдресныеОбъекты.КодКЛАДР КАК КодКЛАДР, -| АдресныеОбъекты.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, -| АдресныеОбъекты.Уровень КАК Уровень -|ПОМЕСТИТЬ АдресныйОбъект -|ИЗ -| АдресныеОбъекты КАК АдресныеОбъектыИсточник -| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты -| ПО (АдресныеОбъекты.Идентификатор = АдресныеОбъектыИсточник.Идентификатор) -|; -| -|//////////////////////////////////////////////////////////////////////////////// -|ВЫБРАТЬ -| АдресныйОбъект.Идентификатор КАК Идентификатор, -| ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс, -| ДополнительныеСведения.ОКТМО КАК ОКТМО -|ИЗ -| АдресныйОбъект КАК АдресныйОбъект -| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения -| ПО (ДополнительныеСведения.Идентификатор = АдресныйОбъект.ДополнительныеАдресныеСведения)"; + | АдресныеОбъектыУровень0.Наименование КАК НаименованиеУровень0, + | АдресныеОбъектыУровень0.Сокращение КАК СокращениеУровень0, + | АдресныеОбъектыУровень0.Идентификатор КАК ИдентификаторУровень0, + | АдресныеОбъектыУровень0.ДополнительныеАдресныеСведения КАК ДополнительныеСведения0, + | АдресныеОбъектыУровень1.Наименование КАК НаименованиеУровень1, + | АдресныеОбъектыУровень1.Сокращение КАК СокращениеУровень1, + | АдресныеОбъектыУровень1.Идентификатор КАК ИдентификаторУровень1, + | АдресныеОбъектыУровень1.ДополнительныеАдресныеСведения КАК ДополнительныеСведения1, + | АдресныеОбъектыУровень2.Наименование КАК НаименованиеУровень2, + | АдресныеОбъектыУровень2.Сокращение КАК СокращениеУровень2, + | АдресныеОбъектыУровень2.Идентификатор КАК ИдентификаторУровень2, + | АдресныеОбъектыУровень2.ДополнительныеАдресныеСведения КАК ДополнительныеСведения2, + | АдресныеОбъектыУровень3.Наименование КАК НаименованиеУровень3, + | АдресныеОбъектыУровень3.Сокращение КАК СокращениеУровень3, + | АдресныеОбъектыУровень3.Идентификатор КАК ИдентификаторУровень3, + | АдресныеОбъектыУровень3.ДополнительныеАдресныеСведения КАК ДополнительныеСведения3, + | АдресныеОбъектыУровень4.Наименование КАК НаименованиеУровень4, + | АдресныеОбъектыУровень4.Сокращение КАК СокращениеУровень4, + | АдресныеОбъектыУровень4.Идентификатор КАК ИдентификаторУровень4, + | АдресныеОбъектыУровень4.ДополнительныеАдресныеСведения КАК ДополнительныеСведения4, + | АдресныеОбъектыУровень5.Наименование КАК НаименованиеУровень5, + | АдресныеОбъектыУровень5.Сокращение КАК СокращениеУровень5, + | АдресныеОбъектыУровень5.Идентификатор КАК ИдентификаторУровень5, + | АдресныеОбъектыУровень5.ДополнительныеАдресныеСведения КАК ДополнительныеСведения5, + | ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень5.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень5.Идентификатор + | ИНАЧЕ ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень4.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень4.Идентификатор + | ИНАЧЕ ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень3.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень3.Идентификатор + | ИНАЧЕ ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень2.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень2.Идентификатор + | ИНАЧЕ ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень1.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень1.Идентификатор + | ИНАЧЕ ВЫБОР + | КОГДА НЕ АдресныеОбъектыУровень0.Идентификатор ЕСТЬ NULL + | ТОГДА АдресныеОбъектыУровень0.Идентификатор + | ИНАЧЕ АдресныеОбъектыУровень0.Идентификатор + | КОНЕЦ + | КОНЕЦ + | КОНЕЦ + | КОНЕЦ + | КОНЕЦ + | КОНЕЦ КАК Идентификатор + |ПОМЕСТИТЬ АдресныеОбъекты + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень0 + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень1 + | ПО (АдресныеОбъектыУровень0.Идентификатор = АдресныеОбъектыУровень1.РодительскийИдентификатор) + | И (АдресныеОбъектыУровень1.Наименование = &Наименование1) + | И (АдресныеОбъектыУровень1.Сокращение = &Сокращение1) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень2 + | ПО (АдресныеОбъектыУровень1.Идентификатор = АдресныеОбъектыУровень2.РодительскийИдентификатор) + | И (АдресныеОбъектыУровень2.Наименование = &Наименование2) + | И (АдресныеОбъектыУровень2.Сокращение = &Сокращение2) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень3 + | ПО (АдресныеОбъектыУровень2.Идентификатор = АдресныеОбъектыУровень3.РодительскийИдентификатор) + | И (АдресныеОбъектыУровень3.Наименование = &Наименование3) + | И (АдресныеОбъектыУровень3.Сокращение = &Сокращение3) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень4 + | ПО (АдресныеОбъектыУровень3.Идентификатор = АдресныеОбъектыУровень4.РодительскийИдентификатор) + | И (АдресныеОбъектыУровень4.Наименование = &Наименование4) + | И (АдресныеОбъектыУровень4.Сокращение = &Сокращение4) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень5 + | ПО (АдресныеОбъектыУровень4.Идентификатор = АдресныеОбъектыУровень5.РодительскийИдентификатор) + | И (АдресныеОбъектыУровень5.Наименование = &Наименование5) + | И (АдресныеОбъектыУровень5.Сокращение = &Сокращение5) + |ГДЕ + | АдресныеОбъектыУровень0.Наименование = &Наименование0 + | И АдресныеОбъектыУровень0.Сокращение = &Сокращение0 + | И АдресныеОбъектыУровень0.Уровень = 1 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 50 + | ДомаЗданияСтроения.АдресныйОбъект КАК АдресныйОбъект, + | ДомаЗданияСтроения.КодСубъектаРФ КАК КодСубъектаРФ, + | ДомаЗданияСтроения.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | ДомаЗданияСтроения.Строения КАК Строения, + | АдресныеОбъекты.Идентификатор КАК Идентификатор, + | ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс + |ИЗ + | АдресныеОбъекты КАК АдресныеОбъекты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения + | ПО ДомаЗданияСтроения.АдресныйОбъект = АдресныеОбъекты.Идентификатор + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО ДополнительныеСведения.Идентификатор = ДомаЗданияСтроения.ДополнительныеАдресныеСведения + | ГДЕ НЕ ДомаЗданияСтроения.Строения ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | АдресныеОбъекты.Идентификатор КАК Идентификатор, + | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, + | АдресныеОбъекты.РодительскийИдентификатор КАК РодительскийИдентификатор, + | АдресныеОбъекты.МуниципальныйРодительскийИдентификатор КАК МуниципальныйРодительскийИдентификатор, + | АдресныеОбъекты.Наименование КАК Наименование, + | АдресныеОбъекты.Сокращение КАК Сокращение, + | АдресныеОбъекты.КодКЛАДР КАК КодКЛАДР, + | АдресныеОбъекты.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения, + | АдресныеОбъекты.Уровень КАК Уровень + |ПОМЕСТИТЬ АдресныйОбъект + |ИЗ + | АдресныеОбъекты КАК АдресныеОбъектыИсточник + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + | ПО (АдресныеОбъекты.Идентификатор = АдресныеОбъектыИсточник.Идентификатор) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | АдресныйОбъект.Идентификатор КАК Идентификатор, + | ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс, + | ДополнительныеСведения.ОКТМО КАК ОКТМО + |ИЗ + | АдресныйОбъект КАК АдресныйОбъект + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеСведения + | ПО (ДополнительныеСведения.Идентификатор = АдресныйОбъект.ДополнительныеАдресныеСведения)"; + - - ИменаУровнейАдреса = АдресныйКлассификаторКлиентСервер.ИменаУровнейАдреса(Адрес.AddressType, Истина); - АдресныеСведенияДляЗапроса = Новый Массив; + ИменаУровнейАдреса = ИменаУровнейАдреса(Адрес.AddressType, Истина); Счетчик = 0; КакиеУровниПроверять = Новый Соответствие; - Если АдресныйКлассификаторКлиентСервер.ЭтоМуниципальныйАдрес(Адрес.AddressType) Тогда + Если ЭтоМуниципальныйАдрес(Адрес.AddressType) Тогда Запрос.Текст= СтрЗаменить(Запрос.Текст, ".РодительскийИдентификатор", ".МуниципальныйРодительскийИдентификатор"); КонецЕсли; @@ -4067,7 +4075,6 @@ РезультатЗапроса = Запрос.ВыполнитьПакетСПромежуточнымиДанными(); Адреса = РезультатЗапроса[0]; Дома = РезультатЗапроса[1]; - АдресныйОбъект = РезультатЗапроса[2]; ДополнительныеСведения = РезультатЗапроса[3]; СписокКорректныхАдресов = Новый Массив; @@ -4075,7 +4082,8 @@ Если КакиеУровниПроверять["Distict"] <> Неопределено И АдресСтрока["Наименование" + КакиеУровниПроверять["Distict"]] = NULL Тогда ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СвРайМО/Район", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Район ""%1"" отсутствует в адресном классификаторе'"), Адрес.District + " " + Адрес.DistrictType)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Район ""%1"" отсутствует в адресном классификаторе'"), Адрес.District + " " + Адрес.DistrictType)); КонецЕсли; Если НЕ ДанныеУровняКорректные(Адрес, "Area", НСтр("ru='Субъект РФ'"), АдресСтрока, КакиеУровниПроверять, ОшибкиПроверки) Тогда @@ -4129,7 +4137,7 @@ Возврат Результат; КонецЕсли; - Результат.Ошибки.Очистить(); // Найден корректный адрес. Ошибок нет. + Результат.Ошибки.Очистить(); // Найденные корректные адрес. Ошибок нет. // Проверяем дома НомерДомаАдрес = Адрес.HouseNumber; @@ -4151,12 +4159,14 @@ Возврат Результат; // У адреса нет домов, корпусов и строений. Возможно это почтовый адреса с а/я или до востребования. КонецЕсли; - ВариантыДомов = КонструкторСпискаДомов(); - ДомаКорректный = Дома.Пустой(); // Домов нет, любой дом считаем корректным. - ИдентификаторДополнительныхСведений = Неопределено; + ПочтовыйИндекс = 0; + + ОписаниеТиповСтрока100 = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)); + ПохожиеВарианты = Новый ТаблицаЗначений; + ПохожиеВарианты.Колонки.Добавить("Дом", ОписаниеТиповСтрока100); + ПохожиеВарианты.Индексы.Добавить("Дом"); - ПохожиеВарианты = Новый Массив; Для каждого ИнформацияОДомах Из Дома.Выгрузить() Цикл Если ПустаяСтрока(ИнформацияОДомах.Строения) Тогда @@ -4211,7 +4221,7 @@ И СтрСравнить(НомерСтроенияАдрес, Строение) = 0 И СтрСравнить(ТипСтроенияАдрес, НазваниеСтроения) = 0 Тогда ДомаКорректный = Истина; - ИдентификаторДополнительныхСведений = ИнформацияОДомах.ДополнительныеАдресныеСведения; + ПочтовыйИндекс = ИнформацияОДомах.ПочтовыйИндекс; Прервать; Иначе // дома совал полностью, но владения и корпус нет @@ -4226,16 +4236,18 @@ ТекстПроСтроения = ТекстПроСтроения + Разделитель + НазваниеСтроения + " " + Строение; КонецЕсли; - ПохожиеВарианты.Добавить(НРег(НазваниеВладения) + " №" + Дом + ?(ПустаяСтрока(ТекстПроСтроения), "", ", " + ТекстПроСтроения)); + НовыйВариант = ПохожиеВарианты.Добавить(); + НовыйВариант.Дом = НРег(НазваниеВладения) + " " + Дом + ?(ПустаяСтрока(ТекстПроСтроения), "", ", " + ТекстПроСтроения); КонецЕсли; Иначе // номер дома совал, но тип нет - ТекстПроДом = НРег(НазваниеВладения) + " №" + Дом; - Если ПохожиеВарианты.Найти(ТекстПроДом) = Неопределено Тогда - ПохожиеВарианты.Добавить(ТекстПроДом ); + ТекстПроДом = НРег(НазваниеВладения) + " " + Дом; + Если ПохожиеВарианты.Найти(ТекстПроДом, "Дом") = Неопределено Тогда + НовыйВариант = ПохожиеВарианты.Добавить(); + НовыйВариант.Дом = ТекстПроДом; КонецЕсли; КонецЕсли; @@ -4259,7 +4271,7 @@ ПолеСОшибкой = ?(ЗначениеЗаполнено(НомерДомаАдрес), "Дом", "Строение"); НаборПредставлениеДома = Новый Массив; Если ЗначениеЗаполнено(НомерДомаАдрес) Тогда - НаборПредставлениеДома.Добавить(Строка(ТипДомаАдрес) + " № "+ НомерДомаАдрес); + НаборПредставлениеДома.Добавить(Строка(ТипДомаАдрес) + " "+ НомерДомаАдрес); КонецЕсли; Если ЗначениеЗаполнено(НомерКорпусаАдрес) Тогда НаборПредставлениеДома.Добавить(НСтр("ru='Корпус'") + " " + НомерКорпусаАдрес); @@ -4271,15 +4283,15 @@ Подсказка = ""; Если ПохожиеВарианты.Количество() = 1 Тогда - Подсказка = ", " + НСтр("ru = 'но есть'") + " " + """" + ПохожиеВарианты[0]+ """."; + Подсказка = ", " + НСтр("ru = 'но есть'") + " " + """" + ПохожиеВарианты[0].Дом + """."; ИначеЕсли ПохожиеВарианты.Количество() > 1 Тогда - ПервоеЗначение = ПохожиеВарианты[0]; + ПервоеЗначение = ПохожиеВарианты[0].Дом; Если ПохожиеВарианты.Количество() = 2 Тогда Подсказка = НСтр("ru = 'но есть ""%1"" или ""%2"".'"); - ВтороеЗначение = ПохожиеВарианты[1]; + ВтороеЗначение = ПохожиеВарианты[1].Дом; Иначе Подсказка = НСтр("ru = 'но есть ""%1"" и другие варианты(%2).'"); - ВтороеЗначение = Строка(ПохожиеВарианты.Количество()); + ВтороеЗначение = Строка(ПохожиеВарианты.Количество() - 1); КонецЕсли; Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(", " + Подсказка, ПервоеЗначение, ВтороеЗначение); Иначе @@ -4293,34 +4305,12 @@ КонецЕсли; // Проверка индекса - Если ЗначениеЗаполнено(ИдентификаторДополнительныхСведений) Тогда - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ДополнительныеАдресныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс - |ИЗ - | РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения - |ГДЕ - | ДополнительныеАдресныеСведения.Идентификатор = &Идентификатор"; - - Запрос.УстановитьПараметр("Идентификатор", ИдентификаторДополнительныхСведений); - - РезультатЗапроса = Запрос.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - ДополнительныеАдресныеСведения = РезультатЗапроса.Выгрузить()[0]; - - КонецЕсли; - Иначе - - Если НЕ ДополнительныеСведения.Пустой() Тогда - ДополнительныеАдресныеСведения = ДополнительныеСведения.Выгрузить()[0]; - КонецЕсли; - + Если Не ЗначениеЗаполнено(ПочтовыйИндекс) Тогда + ДополнительныеАдресныеСведения = ДополнительныеСведения.Выгрузить()[0]; // Нет индекса на уровне домов. + ПочтовыйИндекс = ДополнительныеАдресныеСведения.ПочтовыйИндекс; КонецЕсли; - ПочтовыйИндекс = Формат(ДополнительныеАдресныеСведения.ПочтовыйИндекс, "ЧГ=0"); + ПочтовыйИндекс = Формат(ПочтовыйИндекс, "ЧГ=0"); Если СтрСравнить(ПочтовыйИндекс, Адрес.ZipCode) <> 0 Тогда ДополнительныйТекст = ?(ЗначениеЗаполнено(ПочтовыйИндекс), " " + НСтр("ru='Возможно, правильный индекс'") + " " + ПочтовыйИндекс, ""); ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Индекс", @@ -4346,14 +4336,14 @@ Функция СтруктураКодовАдреса() Коды = Новый Структура(); - Коды.Вставить("КодКЛАДР", ""); - Коды.Вставить("Идентификатор", ""); - Коды.Вставить("ОКАТО", ""); - Коды.Вставить("ОКТМО", ""); - Коды.Вставить("КодИФНСФЛ", ""); - Коды.Вставить("КодИФНСЮЛ", ""); - Коды.Вставить("КодУчасткаИФНСФЛ", ""); - Коды.Вставить("КодУчасткаИФНСЮЛ", ""); + Коды.Вставить("КодКЛАДР"); + Коды.Вставить("Идентификатор"); + Коды.Вставить("ОКАТО"); + Коды.Вставить("ОКТМО"); + Коды.Вставить("КодИФНСФЛ"); + Коды.Вставить("КодИФНСЮЛ"); + Коды.Вставить("КодУчасткаИФНСФЛ"); + Коды.Вставить("КодУчасткаИФНСЮЛ"); Возврат Коды; КонецФункции @@ -4605,7 +4595,7 @@ // Процедура ФоновоеЗаданиеЗагрузкиКлассификатораАдресов(Параметры, АдресРезультата) Экспорт - ЗагрузитьКлассификаторАдресов(Параметры[0], Параметры[1],, Параметры[3]); + ЗагрузитьКлассификаторАдресов(Параметры[0], Параметры[1], Параметры[2]); КонецПроцедуры @@ -4613,7 +4603,7 @@ // Процедура ФоновоеЗаданиеЗагрузкиКлассификатораАдресовССайта(Параметры, АдресРезультата) Экспорт - ЗагрузитьКлассификаторАдресовССайта(Параметры[0],, Параметры[1]); + ЗагрузитьКлассификаторАдресовССайта(Параметры[1], Параметры[0]); КонецПроцедуры @@ -4682,6 +4672,22 @@ #Область ПереносУстаревшегоКлассификатора +Функция ЗаполненныеРегионыУстаревшегоКлассификатора() + + Если ПравоДоступа("Изменение", Метаданные.РегистрыСведений.АдресныеОбъекты) Тогда + + УстановитьПривилегированныйРежим(Истина); + + Если ПустаяСтрока(Константы.ИсточникДанныхАдресногоКлассификатора.Получить()) Тогда + Возврат Истина; + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + // Проверяет есть ли хоть одна запись КЛАДР (исключая записи о регионах) требующая переноса. // Функция УстаревшийКлассификаторСодержитСведения() @@ -4704,6 +4710,113 @@ #Область ПрочиеСлужебныеПроцедурыИФункции +// Имя событие для записи в журнал регистрации. +// +Функция СобытиеЖурналаРегистрации() Экспорт + + Возврат НСтр("ru = 'Адресный классификатор'", ОбщегоНазначения.КодОсновногоЯзыка()); + +КонецФункции + +// Разделяет исходный текст на наименование и сокращение. +// Сокращением считается последнее слово, отделенное пробельным символом. +// +// Параметры: +// Название - Строка - Полное название, например "Москва г". +// +// Возвращаемое значение: +// Структура - содержит поля. +// * Наименование - Строка - Наименование, например "Москва". Если сокращение выделить не удалось, то исходное +// название. +// * Сокращение - Строка - Сокращение, например "г". Если сокращение выделить не удалось, то пустая строка. +// +Функция НаименованиеИСокращение(Название) Экспорт + ТекстПоиска = СокрП(Название); + + Позиция = СтрДлина(ТекстПоиска); + Пока Позиция > 0 Цикл + Если ПустаяСтрока(Сред(ТекстПоиска, Позиция, 1)) Тогда + Прервать; + КонецЕсли; + Позиция = Позиция - 1; + КонецЦикла; + + Результат = Новый Структура("Наименование, Сокращение"); + Если Позиция = 0 Тогда + Результат.Наименование = ТекстПоиска; + Результат.Сокращение = ""; + Иначе + Результат.Наименование = СокрП(Лев(ТекстПоиска, Позиция)); + Результат.Сокращение = Сред(ТекстПоиска, Позиция + 1); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Набор уровней для запросов ФИАС. +// +// Возвращаемое значение: +// ФиксированныйМассив - набор числовых уровней. +// +Функция УровниКлассификатораФИАС() + + Уровни = Новый Массив; + Уровни.Добавить(1); + Уровни.Добавить(2); + Уровни.Добавить(3); + Уровни.Добавить(5); + Уровни.Добавить(4); + Уровни.Добавить(6); + Уровни.Добавить(7); + Уровни.Добавить(90); + Уровни.Добавить(91); + + Возврат Новый ФиксированныйМассив(Уровни); +КонецФункции + +Функция ЭтоМуниципальныйАдрес(ТипАдреса) + Возврат СтрСравнить(ТипАдреса, "Муниципальный") = 0; +КонецФункции + +Функция ИменаУровнейАдреса(ТипАдреса, ВключатьУлицу) + Уровни = Новый Массив; + + Уровни.Добавить("Area"); + Если ТипАдреса = "ЕАЭС" Тогда + + Уровни.Добавить("District"); + Уровни.Добавить("City"); + Уровни.Добавить("Locality"); + + Иначе + + Если ЭтоМуниципальныйАдрес(ТипАдреса) Тогда + Уровни.Добавить("MunDistrict"); + Уровни.Добавить("Settlement"); + Иначе + Уровни.Добавить("District"); + Уровни.Добавить("City"); + КонецЕсли; + + Уровни.Добавить("CityDistrict"); + Уровни.Добавить("Locality"); + Уровни.Добавить("Territory"); + + Если ВключатьУлицу Тогда + Уровни.Добавить("Street"); + КонецЕсли; + КонецЕсли; + Возврат Уровни; +КонецФункции + +Функция ОсновнаяСтрана() + Возврат "Россия"; +КонецФункции + +Функция ПрефиксВерсииЗапроса() Экспорт + Возврат "rest/v2/"; +КонецФункции + // Возвращает является ли источником данных веб сервис. // // Возвращаемое значение: @@ -4758,59 +4871,58 @@ НаименованиеЗданийИСтроений = НаименованиеВладенийИСтроений(); Для каждого Дом Из МассивДомов Цикл - ИдентификаторДома = Лев(Дом, 24); НомерДома = СтрРазделить(Сред(Дом, 25), "~", Истина); - ОписаниеДома = ОписаниеДома(); - ОписаниеДома.Идентификатор = УникальныйИдентификаторИзСтроки64(Лев(Дом, 24)); - Если ЗначениеЗаполнено(НомерДома[0]) Тогда - ОписаниеДома.ВидВладения = ТипЧисло.ПривестиЗначение(Лев(НомерДома[0], 1)); - ОписаниеДома.Дом = Сред(НомерДома[0], 2); - ДомЧислом = Формат(НомерДомаЧислом(ОписаниеДома.Дом), "ЧЦ=4; ЧН=; ЧВН=; ЧГ=0; ЧФ=1Ч"); - Если ЗначениеЗаполнено(ОписаниеДома.ВидВладения) Тогда - ОписаниеДома.НазваниеВладения = НаименованиеЗданийИСтроений.Владения.Получить(ОписаниеДома.ВидВладения); + ОписаниеДома = ОписаниеДома(); + ОписаниеДома.Идентификатор = УникальныйИдентификаторИзСтроки64(Лев(Дом, 24)); + Если ЗначениеЗаполнено(НомерДома[0]) Тогда + ОписаниеДома.ВидВладения = ТипЧисло.ПривестиЗначение(Лев(НомерДома[0], 1)); + ОписаниеДома.Дом = Сред(НомерДома[0], 2); + ДомЧислом = Формат(НомерДомаЧислом(ОписаниеДома.Дом), "ЧЦ=4; ЧН=; ЧВН=; ЧГ=0; ЧФ=1Ч"); + Если ЗначениеЗаполнено(ОписаниеДома.ВидВладения) Тогда + ОписаниеДома.НазваниеВладения = НаименованиеЗданийИСтроений.Владения.Получить(ОписаниеДома.ВидВладения); + КонецЕсли; + Иначе + ДомЧислом = "10000"; + КонецЕсли; + + ОписаниеДома.Индекс = Формат(Запись.ПочтовыйИндекс, "ЧГ=0"); + ОписаниеДома.ОКТМО = Формат(Запись.ОКТМО, "ЧГ=0"); + ОписаниеДома.ОКАТО = Формат(Запись.ОКАТО, "ЧГ=0"); + ОписаниеДома.КодИФНСФЛ = Формат(Запись.КодИФНСФЛ, "ЧГ=0"); + ОписаниеДома.КодИФНСЮЛ = Формат(Запись.КодИФНСЮЛ, "ЧГ=0"); + ОписаниеДома.КодУчасткаИФНСФЛ = Формат(Запись.КодУчасткаИФНСФЛ, "ЧГ=0"); + ОписаниеДома.КодУчасткаИФНСЮЛ = Формат(Запись.КодУчасткаИФНСЮЛ, "ЧГ=0"); + ОписаниеДома.КодКЛАДР = Формат(Запись.КодКЛАДР, "ЧГ=0"); + + Если НомерДома.Количество() > 1 Тогда + ОписаниеДома.Корпус = НомерДома[1]; + КорпусЧислом = Формат(НомерДомаЧислом(ОписаниеДома.Корпус), "ЧЦ=4; ЧН=; ЧВН=; ЧГ=0; ЧФ=1Ч"); + Если НомерДома.Количество() > 2 Тогда + ОписаниеДома.ВидСтроения = ТипЧисло.ПривестиЗначение(НомерДома[2]); + Если НомерДома.Количество() > 3 Тогда + ОписаниеДома.Строение = НомерДома[3]; + КонецЕсли; + КонецЕсли; + Иначе + КорпусЧислом = "10000"; + КонецЕсли; + ОписаниеДома.ДомЧислом = ТипЧисло.ПривестиЗначение(ДомЧислом + КорпусЧислом); + + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + Если ТочноеСовпадение Тогда + Если СтрСравнить(ОписаниеДома.Дом, СтрокаПоиска) = 0 Тогда + ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска); КонецЕсли; Иначе - ДомЧислом = "10000"; - КонецЕсли; - - ОписаниеДома.Индекс = Формат(Запись.ПочтовыйИндекс, "ЧГ=0"); - ОписаниеДома.ОКТМО = Формат(Запись.ОКТМО, "ЧГ=0"); - ОписаниеДома.ОКАТО = Формат(Запись.ОКАТО, "ЧГ=0"); - ОписаниеДома.КодИФНСФЛ = Формат(Запись.КодИФНСФЛ, "ЧГ=0"); - ОписаниеДома.КодИФНСЮЛ = Формат(Запись.КодИФНСЮЛ, "ЧГ=0"); - ОписаниеДома.КодУчасткаИФНСФЛ = Формат(Запись.КодУчасткаИФНСФЛ, "ЧГ=0"); - ОписаниеДома.КодУчасткаИФНСЮЛ = Формат(Запись.КодУчасткаИФНСЮЛ, "ЧГ=0"); - ОписаниеДома.КодКЛАДР = Формат(Запись.КодКЛАДР, "ЧГ=0"); - - Если НомерДома.Количество() > 1 Тогда - ОписаниеДома.Корпус = НомерДома[1]; - КорпусЧислом = Формат(НомерДомаЧислом(ОписаниеДома.Корпус), "ЧЦ=4; ЧН=; ЧВН=; ЧГ=0; ЧФ=1Ч"); - Если НомерДома.Количество() > 2 Тогда - ОписаниеДома.ВидСтроения = ТипЧисло.ПривестиЗначение(НомерДома[2]); - Если НомерДома.Количество() > 3 Тогда - ОписаниеДома.Строение = НомерДома[3]; - КонецЕсли; + Если СтрНачинаетсяС(ОписаниеДома.Дом, СтрокаПоиска) Или (ПустаяСтрока(ОписаниеДома.Дом) И СтрНачинаетсяС(ОписаниеДома.Корпус, СтрокаПоиска)) Тогда + ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска); КонецЕсли; - Иначе - КорпусЧислом = "10000"; КонецЕсли; - ОписаниеДома.ДомЧислом = ТипЧисло.ПривестиЗначение(ДомЧислом + КорпусЧислом); - - Если ЗначениеЗаполнено(СтрокаПоиска) Тогда - Если ТочноеСовпадение Тогда - Если СтрСравнить(ОписаниеДома.Дом, СтрокаПоиска) = 0 Тогда - ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска); - КонецЕсли; - Иначе - Если СтрНачинаетсяС(ОписаниеДома.Дом, СтрокаПоиска) Или (ПустаяСтрока(ОписаниеДома.Дом) И СтрНачинаетсяС(ОписаниеДома.Корпус, СтрокаПоиска)) Тогда - ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска); - КонецЕсли; - КонецЕсли; - Иначе - ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений); - КонецЕсли; - + Иначе + ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений); + КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -5021,11 +5133,9 @@ // Параметры: // КодыСубъектовРФ - Массив - Содержит числовые коды регионов-субъектов для загрузки. Если не указано, то будут // загружены все регионы, по которым когда-либо загружались данные. -// Авторизация - Структура - описание авторизации на сайте поддержки 1С. Если не указано, то будет прочитано из базы. -// * Логин - Строка - Данные авторизации. -// * Пароль - Строка - Данные авторизации. +// ПараметрыЗагрузки - Структура - см. ПараметрыЗагрузкиКлассификатораАдресов(). // -Процедура ЗагрузитьКлассификаторАдресовССайта(КодыСубъектовРФ = Неопределено, ИсходнаяАвторизация = Неопределено, ЗагружатьИсториюАдресов = Ложь) +Процедура ЗагрузитьКлассификаторАдресовССайта(ПараметрыЗагрузки, КодыСубъектовРФ = Неопределено) Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда Возврат; @@ -5058,7 +5168,7 @@ ВсеВерсии = ДоступныеВерсииАдресныхСведений(); Для Каждого КодСубъекта Из КодыСубъектовРФ Цикл - ОписаниеРегиона = ВсеВерсии.Найти(КодСубъекта, "КодСубъектаРФ"); + ОписаниеРегиона = ВсеВерсии.Найти(КодСубъекта.Значение, "КодСубъектаРФ"); Если ОписаниеРегиона = Неопределено Тогда // Возможно устаревший регион, не ошибка. Продолжить; @@ -5070,19 +5180,38 @@ ПараметрыПолучения.Вставить("ПутьДляСохранения", ПутьДляСохранения); ЗагруженныйФайл = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ОписаниеРегиона.Адрес, ПараметрыПолучения); Если Не ЗагруженныйФайл.Статус Тогда - УдалитьВременныйФайл(ВременныйКаталог); + ФайловаяСистема.УдалитьВременныйФайл(ВременныйКаталог); ВызватьИсключение ЗагруженныйФайл.СообщениеОбОшибке; КонецЕсли; - КодыСубъектовДляЗагрузки.Добавить(КодСубъекта); + КодыСубъектовДляЗагрузки.Добавить(КодСубъекта.Значение); ОписаниеФайлов.Добавить( Новый Структура("Имя, Хранение", ПутьДляСохранения, ПутьДляСохранения) ); КонецЦикла; - ЗагрузитьКлассификаторАдресов(КодыСубъектовДляЗагрузки, ОписаниеФайлов,, ЗагружатьИсториюАдресов); - УдалитьВременныйФайл(ВременныйКаталог); + ЗагрузитьКлассификаторАдресов(КодыСубъектовДляЗагрузки, ОписаниеФайлов, ПараметрыЗагрузки); + ФайловаяСистема.УдалитьВременныйФайл(ВременныйКаталог); КонецПроцедуры +// Возвращает описание параметров загрузки классификатора адресов +// +// Возвращаемое значение: +// Структура - с полями: +// * ЗагружатьИсториюАдресов - Булево - Если Истина, то будет загружена история адресных сведений. По умолчанию, Ложь. +// * ЗагружатьПорциями - Булево - Если Истина, то загрузка будет осуществляться порциями. По умолчанию, Ложь. +// * ОповещатьОПрогрессе - Булево - Если Истина, то передаваться сообщение о статусе загрузки. По умолчанию, Истина. +// +Функция ПараметрыЗагрузкиКлассификатораАдресов() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("ЗагружатьИсториюАдресов", Ложь); + Результат.Вставить("ЗагружатьПорциями", Ложь); + Результат.Вставить("ОповещатьОПрогрессе", Истина); + + Возврат Результат; + +КонецФункции + // Очистка данных классификатора адресов. // // Параметры: @@ -5135,6 +5264,18 @@ КонецФункции +// Путь к веб сервису контактной информации +// +// Возвращаемое значение: +// Строка - путь к файлу описания данных. +// +Функция АдресВебСервисаКонтактнойИнформации() Экспорт + + Возврат "https://api.orgaddress.1c.ru"; + +КонецФункции + + // Пространство имен для операций XDTO. // // Возвращаемое значение: @@ -5212,8 +5353,8 @@ ДоступныеДанные = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип( ПространствоИмен(), "Publications") ); ЧтениеXML.Закрыть(); - УдалитьВременныйФайл(КаталогДляРаспаковки); - УдалитьВременныйФайл(РезультатПолученияФайла.Путь); + ФайловаяСистема.УдалитьВременныйФайл(КаталогДляРаспаковки); + ФайловаяСистема.УдалитьВременныйФайл(РезультатПолученияФайла.Путь); ДатаПоследнейВерсии = '00000000'; ПоследняяПубликация = Неопределено; @@ -5270,50 +5411,61 @@ // Вычитываем справочную информацию и информацию о версии. // -Функция СлужебныеАдресныеСведения(КодСубъектаРФ, КаталогФайлов) +Функция СлужебныеАдресныеСведения(КаталогФайлов) Набор = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей(); Сведения = Набор.ВыгрузитьКолонки("Тип, Идентификатор, Ключ, Значение"); Сведения.Индексы.Добавить("Тип, Идентификатор, Ключ"); - ТекущаяЗапись = Неопределено; - ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "ADDRSTATUS", "AddressStatuses"); - - ТекущаяЗапись = ФайлЗагрузки.ФайлЧтения; - Пока ТекущаяЗапись.Прочитать() Цикл - - Если ТекущаяЗапись.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда - Продолжить; - КонецЕсли; - - ТипЗаписи = ТекущаяЗапись.ЗначениеАтрибута("TYPE"); - Значение = ТекущаяЗапись.ЗначениеАтрибута("VALUE"); - - Если СтрСравнить(ТипЗаписи, "STRSTAT") = 0 - И ТекущаяЗапись.ЗначениеАтрибута("ID") = "3" - И СтрСравнить(Значение, "Литер") <> 0 Тогда - Продолжить; - КонецЕсли; - - Запись = Сведения.Добавить(); - - Запись.Тип = ТипЗаписи; - Запись.Идентификатор = ТекущаяЗапись.ЗначениеАтрибута("ID"); - Запись.Ключ = ТекущаяЗапись.ЗначениеАтрибута("KEY"); - Запись.Значение = Значение; - - КонецЦикла; - - НенужныеСимволы = СтрСоединить(СтрРазделить(ФайлЗагрузки.ДатаВерсии, "0123456789")); - ДатаВерсии = Дата(СтрСоединить(СтрРазделить(ФайлЗагрузки.ДатаВерсии, НенужныеСимволы))); - Результат = Новый Структура("Сведения", Сведения); - Результат.Вставить("Версия", ФайлЗагрузки.Версия); - Результат.Вставить("ДатаВерсии", ДатаВерсии); + ТекущаяЗапись = Неопределено; - ЗакрытьФайлЗагрузкиСубъектаРФ(ФайлЗагрузки); + ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(Неопределено, КаталогФайлов, "ADDRSTATUS", "AddressStatuses"); + + Попытка + + ТекущаяЗапись = ФайлЗагрузки.ФайлЧтения; + Пока ТекущаяЗапись.Прочитать() Цикл + + Если ТекущаяЗапись.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + Продолжить; + КонецЕсли; + + ТипЗаписи = ТекущаяЗапись.ЗначениеАтрибута("TYPE"); + Значение = ТекущаяЗапись.ЗначениеАтрибута("VALUE"); + + Если СтрСравнить(ТипЗаписи, "STRSTAT") = 0 + И ТекущаяЗапись.ЗначениеАтрибута("ID") = "3" + И СтрСравнить(Значение, "Литер") <> 0 Тогда + Продолжить; + КонецЕсли; + + Запись = Сведения.Добавить(); + + Запись.Тип = ТипЗаписи; + Запись.Идентификатор = ТекущаяЗапись.ЗначениеАтрибута("ID"); + Запись.Ключ = ТекущаяЗапись.ЗначениеАтрибута("KEY"); + Запись.Значение = Значение; + + КонецЦикла; + + НенужныеСимволы = СтрСоединить(СтрРазделить(ФайлЗагрузки.ДатаВерсии, "0123456789")); + ДатаВерсии = Дата(СтрСоединить(СтрРазделить(ФайлЗагрузки.ДатаВерсии, НенужныеСимволы))); + + Результат.Вставить("Версия", ФайлЗагрузки.Версия); + Результат.Вставить("ДатаВерсии", ДатаВерсии); + + ЗакрытьФайлЗагрузкиСубъектаРФ(ФайлЗагрузки); + + Исключение + + ЗакрытьФайлЗагрузкиСубъектаРФ(ФайлЗагрузки); + ВызватьИсключение; + + КонецПопытки; Возврат Результат; + КонецФункции // Возвращает признак того, является ли строка данных контактной информации XML данными. @@ -5368,7 +5520,7 @@ Возврат Результат; КонецФункции -Процедура ЗагрузитьАдресныеОбъекты(КодСубъектаРФ, КаталогФайлов, ЗагружатьПорциями) +Процедура ЗагрузитьАдресныеОбъекты(КодСубъектаРФ, КаталогФайлов, ЗагружатьОднимНабором) ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "ADDROBJ", "AddressObjects"); @@ -5408,21 +5560,22 @@ Запись.ДополнительныеАдресныеСведения = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("EXTRAGUID")); Запись.КодКЛАДР = ТекущаяЗапись.ЗначениеАтрибута("CODE"); - Если ЗагружатьПорциями Тогда - Если КоличествоЗаписейВНаборе > РазмерПорции Тогда - - ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор, Замещать); - Замещать = Ложь; - КоличествоЗаписейВНаборе = 0; - - Набор = РегистрыСведений.АдресныеОбъекты.СоздатьНаборЗаписей(); - Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - - Иначе - КоличествоЗаписейВНаборе = КоличествоЗаписейВНаборе + 1; - КонецЕсли; + Если ЗагружатьОднимНабором Тогда + Продолжить; КонецЕсли; + Если КоличествоЗаписейВНаборе < РазмерПорции Тогда + КоличествоЗаписейВНаборе = КоличествоЗаписейВНаборе + 1; + Продолжить; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор, Замещать); + Замещать = Ложь; + КоличествоЗаписейВНаборе = 0; + + Набор = РегистрыСведений.АдресныеОбъекты.СоздатьНаборЗаписей(); + Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); + КонецЦикла; ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор, Замещать); @@ -5435,7 +5588,7 @@ КонецПроцедуры -Процедура ЗагрузитьДомаЗданияСтроения(КодСубъектаРФ, КаталогФайлов, ЗагружатьПорциями) +Процедура ЗагрузитьДомаЗданияСтроения(КодСубъектаРФ, КаталогФайлов, ЗагружатьОднимНабором) Сжатие = Новый СжатиеДанных(9); ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "HOUSE", "Houses"); @@ -5464,23 +5617,22 @@ Запись.ДополнительныеАдресныеСведения = УникальныйИдентификаторИзСтроки64(ТекущаяЗапись.ЗначениеАтрибута("EXTRAGUID")); Запись.Строения = Новый ХранилищеЗначения(ТекущаяЗапись.ЗначениеАтрибута("BUILDINGS"), Сжатие); - Если ЗагружатьПорциями Тогда - Если КоличествоЗаписейВНаборе > РазмерПорции Тогда - - ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор, Замещать); - Замещать = Ложь; - КоличествоЗаписейВНаборе = 0; - - Набор = РегистрыСведений.ДомаЗданияСтроения.СоздатьНаборЗаписей(); - Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - - Иначе - - КоличествоЗаписейВНаборе = КоличествоЗаписейВНаборе + 1; - - КонецЕсли; + Если ЗагружатьОднимНабором Тогда + Продолжить; КонецЕсли; + Если КоличествоЗаписейВНаборе < РазмерПорции Тогда + КоличествоЗаписейВНаборе = КоличествоЗаписейВНаборе + 1; + Продолжить; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор, Замещать); + Замещать = Ложь; + КоличествоЗаписейВНаборе = 0; + + Набор = РегистрыСведений.ДомаЗданияСтроения.СоздатьНаборЗаписей(); + Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); + КонецЦикла; ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор, Замещать); @@ -5494,7 +5646,7 @@ КонецПроцедуры -Процедура ЗагрузитьДополнительныеСведения(КодСубъектаРФ, КаталогФайлов, ВидыСведений, ЗагружатьИсториюИзменений) +Процедура ЗагрузитьДополнительныеСведения(КодСубъектаРФ, КаталогФайлов, ЗагружатьИсториюИзменений) Набор = РегистрыСведений.ДополнительныеАдресныеСведения.СоздатьНаборЗаписей(); Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); @@ -5538,7 +5690,7 @@ КонецПроцедуры -Процедура ЗагрузитьИсториюАдресныхОбъектов(КодСубъектаРФ, КаталогФайлов, ЗагружатьПорциями) +Процедура ЗагрузитьИсториюАдресныхОбъектов(КодСубъектаРФ, КаталогФайлов, ЗагружатьОднимНабором) ФайлЗагрузки = ФайлЗагрузкиСубъектаРФ(КодСубъектаРФ, КаталогФайлов, "ARCHOBJ", "ArchiveObjects"); @@ -5557,7 +5709,7 @@ Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); Попытка - + Пока ТекущаяЗапись.Прочитать() Цикл Если ТекущаяЗапись.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда @@ -5589,25 +5741,24 @@ Запись.ТекущийКодСубъектаРФ = КодСубъектаРФ; - Если ЗагружатьПорциями Тогда - Если КоличествоЗаписейВНаборе > РазмерПорции Тогда - - ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор, Замещать); - Замещать = Ложь; - КоличествоЗаписейВНаборе = 0; - - Набор = РегистрыСведений.ИсторияАдресныхОбъектов.СоздатьНаборЗаписей(); - Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); - - Иначе - - КоличествоЗаписейВНаборе = КоличествоЗаписейВНаборе + 1; - - КонецЕсли; + Если ЗагружатьОднимНабором Тогда + Продолжить; КонецЕсли; + Если КоличествоЗаписейВНаборе < РазмерПорции Тогда + КоличествоЗаписейВНаборе = КоличествоЗаписейВНаборе + 1; + Продолжить; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор, Замещать); + Замещать = Ложь; + КоличествоЗаписейВНаборе = 0; + + Набор = РегистрыСведений.ИсторияАдресныхОбъектов.СоздатьНаборЗаписей(); + Набор.Отбор.КодСубъектаРФ.Установить(КодСубъектаРФ); + КонецЦикла; - + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(Набор, Замещать); ЗакрытьФайлЗагрузкиСубъектаРФ(ФайлЗагрузки); @@ -5619,7 +5770,7 @@ КонецПроцедуры -Процедура ЗагрузитьПричиныИзмененияАдреса(КодСубъектаРФ, КаталогФайлов, ВидыСведений) +Процедура ЗагрузитьПричиныИзмененияАдреса(КодСубъектаРФ, КаталогФайлов) Сжатие = Новый СжатиеДанных(9); @@ -5664,34 +5815,6 @@ КонецПроцедуры -Функция ИнформацияОЗагрузкеВерсии(КодСубъектаРФ) - - ПустаяДата = Дата(1, 1, 1, 0, 0, 0); - ИнформацияОЗагрузке = Новый Структура("Версия, ДатаВерсии, ДатаЗагрузки", 0, ПустаяДата, ПустаяДата); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЗагруженныеВерсииАдресныхСведений.Версия, - | ЗагруженныеВерсииАдресныхСведений.ДатаВерсии, - | ЗагруженныеВерсииАдресныхСведений.ДатаЗагрузки - |ИЗ - | РегистрСведений.ЗагруженныеВерсииАдресныхСведений КАК ЗагруженныеВерсииАдресныхСведений - |ГДЕ - | ЗагруженныеВерсииАдресныхСведений.КодСубъектаРФ = &КодСубъектаРФ"; - - Запрос.УстановитьПараметр("КодСубъектаРФ", КодСубъектаРФ); - Результат = Запрос.Выполнить().Выгрузить(); - Если Результат.Количество() > 0 Тогда - ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); - ИнформацияОЗагрузке.Версия = ОписаниеТипаЧисло.ПривестиЗначение(Результат[0].Версия); - ИнформацияОЗагрузке.ДатаВерсии = Результат[0].ДатаВерсии; - ИнформацияОЗагрузке.ДатаЗагрузки = Результат[0].ДатаЗагрузки; - КонецЕсли; - Возврат ИнформацияОЗагрузке; - -КонецФункции - Процедура СброситьИнформациюОЗагрузкеВерсии(КодСубъектаРФ) Набор = РегистрыСведений.ЗагруженныеВерсииАдресныхСведений.СоздатьНаборЗаписей(); @@ -5923,10 +6046,7 @@ // Функция НайтиФайл(Каталог, МаскаИмениФайла) - СистемнаяИнформация = Новый СистемнаяИнформация; - Платформа = СистемнаяИнформация.ТипПлатформы; - - НеУчитыватьРегистр = Платформа = ТипПлатформы.Windows_x86 Или Платформа = ТипПлатформы.Windows_x86_64; + НеУчитыватьРегистр = ОбщегоНазначения.ЭтоWindowsСервер(); Если НеУчитыватьРегистр Тогда Маска = ВРег(МаскаИмениФайла); @@ -5962,7 +6082,7 @@ ОписаниеФайла.ФайлЧтения = Неопределено; Если ОписаниеФайла.УдалитьПутьПриЗакрытии Тогда - УдалитьВременныйФайл(ОписаниеФайла.Путь); + ФайловаяСистема.УдалитьВременныйФайл(ОписаниеФайла.Путь); КонецЕсли; КонецПроцедуры @@ -6026,22 +6146,14 @@ Возврат Результат; КонецФункции -// Имя событие для записи в журнал регистрации. -// -Функция СобытиеЖурналаРегистрации() - - Возврат АдресныйКлассификаторКлиентСервер.СобытиеЖурналаРегистрации(); - -КонецФункции - // Заполняет коды по структуре адреса. // Функция ЗаполнитьКодыАдреса(Результат, ИдентификаторАдресногоОбъекта, СведенияОДоме) Коды = КодыПоИдентификаторуАдресногоОбъекта(ИдентификаторАдресногоОбъекта, СведенияОДоме); Если Коды <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Результат, Коды); + Для каждого КлючЗначение Из Результат Цикл Если СтрСравнить(КлючЗначение.Ключ, "Идентификатор") <> 0 Тогда Результат[КлючЗначение.Ключ] = Формат(КлючЗначение.Значение, "ЧГ=0"); @@ -6062,7 +6174,7 @@ Результат = Новый Структура("Отказ, ПодробноеПредставлениеОшибки, КодСостояния, Данные"); - ТекстURL = АдресныйКлассификаторКлиентСервер.ПрефиксВерсииЗапроса() + СтрокаЗапроса; + ТекстURL = ПрефиксВерсииЗапроса() + СтрокаЗапроса; HTTPЗапрос = Новый HTTPЗапрос(ТекстURL); Попытка @@ -6070,7 +6182,6 @@ Исключение ОбработатьОшибкуОбращенияКВебСервису(Результат, Ответ, ИнформацияОбОшибке(), ТекстURL); - Возврат Результат; КонецПопытки; @@ -6100,12 +6211,7 @@ Возврат; КонецЕсли; - Если ТипЗнч(ИнформацияОбОшибке) = Тип("Строка") Тогда - ПредставлениеОшибки = ИнформацияОбОшибке; - Иначе - ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - КонецЕсли; - + ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); Если ПустаяСтрока(ПредставлениеОшибки) Тогда ПредставлениеОшибки = НСтр("ru = 'Веб-сервис для работы с адресами не доступен по причине: |- не подключена интернет-поддержка пользователей; @@ -6120,7 +6226,7 @@ ШаблонТекстОтветаСервера = НСтр("ru='%1 |Техническая информация. При запросе: %2 - |сервер вернул HTTP status code: %3 + |сервер вернул HTTP Код: %3 |с текстом: %4'"); ОтветОтСервера = Ответ.ПолучитьТелоКакСтроку("UTF-8"); @@ -6129,17 +6235,9 @@ Результат.ПодробноеПредставлениеОшибки, ТекстURL, Ответ.КодСостояния, ОтветОтСервера, ); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); - + КонецПроцедуры -Функция АдминистративноТерриториальныйАдрес() - Возврат "Административно-территориальный"; -КонецФункции - -Функция МуниципальныйАдрес() - Возврат "Муниципальный"; -КонецФункции - // Конвертация Функция СтруктураВСтрокуJSON(Значение) @@ -6219,8 +6317,8 @@ // * HouseType - Строка - тип дома, владения. // * HouseNumber - Строка - номер дома, владения. // * HouseID - Строка - идентификатор дома. -// * Buildings - Массив - содержит структуры(поля структуры: Type, Number) с перечнем корпусов (строений) адреса. -// * Apartments - Массив - содержит структуры(поля структуры: Type, Number) с перечнем помещений адреса. +// * Buildings - Массив - содержит структуры(поля структуры: type, number) с перечнем корпусов (строений) адреса. +// * Apartments - Массив - содержит структуры(поля структуры: type, number) с перечнем помещений адреса. // * CodeKLADR - Строка - Код КЛАДР. // * OKTMO - Строка - Код ОКТМО. // * OKATO - Строка - Код ОКАТО. @@ -6381,7 +6479,7 @@ ЗаполнитьЗначенияСвойств(Адрес, АдресныеСведенияДанные, "addressType,codeKLADR,id,ifnsFLAreaCode,ifnsFLCode,ifnsULAreaCode,ifnsULCode,okato,oktmo,ZIPCode,value"); Если ПустаяСтрока(Адрес.Country) Тогда - Адрес.Вставить("Country", Строка(АдресныйКлассификаторКлиентСервер.ОсновнаяСтрана())); + Адрес.Вставить("Country", Строка(ОсновнаяСтрана())); КонецЕсли; Для каждого ИмяУровня Из СопоставлениеУровнейАдреса() Цикл @@ -6427,11 +6525,8 @@ Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Представление = "") Экспорт Результат = ОписаниеНовойКонтактнойИнформации(); - ОсновнаяСтрана = АдресныйКлассификаторКлиентСервер.ОсновнаяСтрана(); НаименованиеСтраны = ""; - Формат9Запятых = Ложь; - ЭлементыАдреса = Новый Соответствие; Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда Если ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда @@ -6468,7 +6563,7 @@ Если Состав.Свойства().Получить("Страна") <> Неопределено И ЗначениеЗаполнено(Состав.Страна) Тогда НаименованиеСтраны = Состав.Страна; Иначе - НаименованиеСтраны = АдресныйКлассификаторКлиентСервер.ОсновнаяСтрана(); + НаименованиеСтраны = ОсновнаяСтрана(); КонецЕсли; АдресРФ = Состав.Состав; @@ -6490,39 +6585,38 @@ ЧастиАдреса = СтрРазделить(АдресРФ, ","); Результат.ZIPCode = ЧастиАдреса[1]; - НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[2]); + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[2]); Результат.Area = НаименованиеИСокращение.Наименование; Результат.AreaType = НаименованиеИСокращение.Сокращение; - НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[3]); + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[3]); Результат.District = НаименованиеИСокращение.Наименование; Результат.DistrictType = НаименованиеИСокращение.Сокращение; - НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[4]); + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[4]); Результат.City = НаименованиеИСокращение.Наименование; Результат.CityType = НаименованиеИСокращение.Сокращение; - НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[5]); + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[5]); Результат.Locality = НаименованиеИСокращение.Наименование; Результат.LocalityType = НаименованиеИСокращение.Сокращение; - НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[6]); + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[6]); Результат.Street = НаименованиеИСокращение.Наименование; Результат.StreetType = НаименованиеИСокращение.Сокращение; - НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[7]); + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[7]); Результат.HouseNumber = НаименованиеИСокращение.Сокращение; Результат.HouseType = НаименованиеИСокращение.Наименование; Если ЗначениеЗаполнено(ЧастиАдреса[8]) Тогда - НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[8]); - Результат.Buildings.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения( - НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование)); + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[8]); + Результат.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование)); КонецЕсли; Если ЗначениеЗаполнено(ЧастиАдреса[9]) Тогда - НаименованиеИСокращение = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЧастиАдреса[9]); - Результат.Apartments.Добавить(АдресныйКлассификаторКлиентСервер.ЗначениеСтроенияИлиПомещения( + НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[9]); + Результат.Apartments.Добавить(ЗначениеСтроенияИлиПомещения( НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование)); КонецЕсли; КонецЕсли; @@ -6539,38 +6633,38 @@ Результат.OKTMO = Формат(АдресРФ.ОКТМО, "ЧГ=0"); Результат.OKATO = Формат(АдресРФ.ОКАТО, "ЧГ=0"); - СубъектРФ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.СубъектРФ); + СубъектРФ = НаименованиеИСокращение(АдресРФ.СубъектРФ); Результат.Area = Строка(СубъектРФ.Наименование); Результат.AreaType = Строка(СубъектРФ.Сокращение); - РайонАдреса = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(РайонАдреса(АдресРФ)); + РайонАдреса = НаименованиеИСокращение(РайонАдреса(АдресРФ)); Результат.District = Строка(РайонАдреса.Наименование); Результат.DistrictType = Строка(РайонАдреса.Сокращение); - Город = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.Город); + Город = НаименованиеИСокращение(АдресРФ.Город); Результат.City = Строка(Город.Наименование); Результат.CityType = Строка(Город.Сокращение); - НаселПункт = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.НаселПункт); + НаселПункт = НаименованиеИСокращение(АдресРФ.НаселПункт); Результат.Locality = Строка(НаселПункт.Наименование); Результат.LocalityType = Строка(НаселПункт.Сокращение); - Улица = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.Улица); + Улица = НаименованиеИСокращение(АдресРФ.Улица); Результат.Street = Строка(Улица.Наименование); Результат.StreetType = Строка(Улица.Сокращение); - ВнутригРайон = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.ВнутригРайон); + ВнутригРайон = НаименованиеИСокращение(АдресРФ.ВнутригРайон); Результат.CityDistrict = Строка(ВнутригРайон.Наименование); Результат.CityDistrictType = Строка(ВнутригРайон.Сокращение); ЗначениеДополнительныхЭлементов = ЗначениеДополнительныхЭлементов(АдресРФ); Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент) Тогда - ДополнительныйЭлемент = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент); + ДополнительныйЭлемент = НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент); Результат.Territory = Строка(ДополнительныйЭлемент.Наименование); Результат.TerritoryType = Строка(ДополнительныйЭлемент.Сокращение); КонецЕсли; Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент) Тогда - ПодчиненныйЭлемент = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент); + ПодчиненныйЭлемент = НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент); Результат.Street = Строка(ПодчиненныйЭлемент.Наименование); Результат.StreetType = Строка(ПодчиненныйЭлемент.Сокращение); КонецЕсли; @@ -6913,8 +7007,6 @@ Если НовоеЗначение = Неопределено Тогда // Чтение - Результат = Неопределено; - XDTOТип = XDTOАдрес.Тип(); Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ") Или XDTOТип = ФабрикаXDTO.Тип("http://www.v8.1c.ru/ssl/contactinfo_ru", "АдресРФ") Тогда @@ -6934,6 +7026,7 @@ Запись = СвРайМО(XDTOАдрес); Запись.Район = НовоеЗначение; Возврат НовоеЗначение; + КонецФункции Функция СвРайМО(АдресРФ) @@ -7178,10 +7271,6 @@ КонецФункции -Функция ОсновнаяСтрана() - Возврат "Россия"; -КонецФункции - Функция КонтактнаяИнформацияВФорматеКлючЗначениеВJSON(Адрес) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда diff --git a/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl index f8ea5087e..ef5bedfc2 100644 --- a/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl b/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl index 7740ebb56..3c35a314e 100644 --- a/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index 1d06130b4..c4a5e14ae 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -304,7 +311,7 @@ ЭлементыДерева = ДеревоАнкеты.ПолучитьЭлементы(); НоваяСтрока = ЭлементыДерева.Добавить(); - НоваяСтрока.Формулировка = "Анкета"; + НоваяСтрока.Формулировка = НСтр("ru = 'Анкета'"); НоваяСтрока.ТипСтроки = "Корень"; НоваяСтрока.КодКартинки = АнкетированиеКлиентСервер.ПолучитьКодКартинкиШаблонаАнкеты(Ложь); diff --git a/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl b/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl index d7adc1759..b3f1299bb 100644 --- a/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl +++ b/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Создает структуру отбора, для дальнейшей передачи на сервер, diff --git a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl index d5e287f96..c723b972a 100644 --- a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Удаляет из строки последние символы, если они равны подстроке удаления, diff --git a/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl index bb5d07fc1..631fda490 100644 --- a/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl index 11ab367d8..d046ee1a8 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Получить структуру с описанием формы выполнения задачи. @@ -354,7 +362,7 @@ ЗадачаОбъект.ПринятаКИсполнению = Истина; ЗадачаОбъект.ДатаПринятияКИсполнению = ТекущаяДатаСеанса(); Если НЕ ЗначениеЗаполнено(ЗадачаОбъект.Исполнитель) Тогда - ЗадачаОбъект.Исполнитель = ПользователиКлиентСервер.АвторизованныйПользователь(); + ЗадачаОбъект.Исполнитель = Пользователи.АвторизованныйПользователь(); КонецЕсли; ЗадачаОбъект.Записать(); diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl index 39b1718bd..e4d6e132f 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -453,12 +461,12 @@ // Возвращаемое значение: // УправляемаяФорма - форма дополнительно задачи исполнителя. // -Функция ОткрытьДопИнформациюОЗадаче(Знач ЗадачаСсылка) Экспорт +Процедура ОткрытьДопИнформациюОЗадаче(Знач ЗадачаСсылка) Экспорт ОткрытьФорму("Задача.ЗадачаИсполнителя.Форма.Дополнительно", Новый Структура("Ключ", ЗадачаСсылка)); -КонецФункции +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl index d80a0ff51..a39f57802 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается при открытии формы выбора исполнителя. diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl index 662061ed3..3fe09d684 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -19,6 +27,10 @@ КонецПроцедуры +// АПК:547-выкл Вызывается в подписке на событие ПолучитьПредставлениеБизнесПроцесса + +// Для клиентских вызовов следует использовать БизнесПроцессыИЗадачиКлиент.ОбработкаПолученияПредставленияБизнесПроцесса +// Для серверных вызовов следует использовать БизнесПроцессыИЗадачиСервер.ОбработкаПолученияПредставленияБизнесПроцесса // Обработка получения представления бизнес процесса на основание полей данных. // // Параметры: @@ -30,7 +42,6 @@ // Процедура ОбработкаПолученияПредставленияБизнесПроцесса(МенеджерОбъекта, Данные, Представление, СтандартнаяОбработка) Экспорт - Наименование = ?(ПустаяСтрока(Данные.Наименование), НСтр("ru = 'Без описания'"), Данные.Наименование); #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Или ВнешнееСоединение Тогда Дата = Формат(Данные.Дата, ?(ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"), "ДЛФ=DT", "ДЛФ=D")); Представление = Метаданные.НайтиПоТипу(ТипЗнч(МенеджерОбъекта)).Представление(); @@ -38,10 +49,37 @@ Дата = Формат(Данные.Дата, "ДЛФ=D"); Представление = НСтр("ru = 'Бизнес-процесс'"); #КонецЕсли - ШаблонПредставления = НСтр("ru = '%1 от %2 (%3)'"); - Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления, Наименование, Дата, Представление); - СтандартнаяОбработка = Ложь; + + ПолученияПредставленияБизнесПроцесса(МенеджерОбъекта, Данные, Дата, Представление, СтандартнаяОбработка); КонецПроцедуры +// АПК:547-вкл Вызывается в подписке на событие ПолучитьПредставлениеБизнесПроцесса + #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Обработка получения представления бизнес процесса на основание полей данных. +// +// Параметры: +// МенеджерОбъекта - БизнесПроцессМенеджер - Менеджер бизнес процесса. +// Данные - Структура - Поля, из которых формируется представление бизнес процесса. +// Дата - Дата - Дата создания бизнес процесса. +// Представление - Строка - Представление бизнес процесса. +// СтандартнаяОбработка - Булево - Если установить Ложь, то стандартная обработка заполнения не будет +// выполнена. +// +Процедура ПолученияПредставленияБизнесПроцесса(МенеджерОбъекта, Данные, Дата, Представление, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ШаблонПредставления = НСтр("ru = '%1 от %2 (%3)'"); + Наименование = ?(ПустаяСтрока(Данные.Наименование), НСтр("ru = 'Без описания'"), Данные.Наименование); + + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления, Наименование, Дата, Представление); + +КонецПроцедуры + + +#КонецОбласти + diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl index 81a211c82..0ce63679f 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается для обновления данных бизнес-процесса в регистре сведений ДанныеБизнесПроцессов. diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index 60f690d97..a61ff6dab 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Инициализирует общие параметры формы выполнения задачи. @@ -168,7 +176,7 @@ ЭлементЦветаОформления.Использование = Истина; // Установка оформления для внешних пользователей, поле Автор пустое. - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда ЭлементУсловногоОформления = УсловноеОформлениеСпискаЗадач.Элементы.Добавить(); ЭлементУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; @@ -179,7 +187,7 @@ ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Автор"); ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; - ЭлементОтбораДанных.ПравоеЗначение = ПользователиКлиентСервер.АвторизованныйПользователь(); + ЭлементОтбораДанных.ПравоеЗначение = Пользователи.АвторизованныйПользователь(); ЭлементОтбораДанных.Использование = Истина; ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Текст"); @@ -816,7 +824,7 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УведомлениеИсполнителейОНовыхЗадачах); ОписаниеОшибки = ""; - ВидСообщения = НСтр("ru = 'Бизнес-процессы и задачи. Уведомление о новых задачах.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ВидСообщения = НСтр("ru = 'Бизнес-процессы и задачи. Уведомление о новых задачах.'", ОбщегоНазначения.КодОсновногоЯзыка()); Если НЕ СистемнаяУчетнаяЗаписьНастроена(ОписаниеОшибки) Тогда ЗаписьЖурналаРегистрации(ВидСообщения, УровеньЖурналаРегистрации.Ошибка, @@ -866,7 +874,7 @@ ОписаниеОшибки = ""; Если НЕ СистемнаяУчетнаяЗаписьНастроена(ОписаниеОшибки) Тогда - ВидСообщения = НСтр("ru = 'Бизнес-процессы и задачи. Мониторинг задач.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ВидСообщения = НСтр("ru = 'Бизнес-процессы и задачи. Мониторинг задач.'", ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации(ВидСообщения, УровеньЖурналаРегистрации.Ошибка, Метаданные.РегламентныеЗадания.МониторингЗадач,, ОписаниеОшибки); Возврат; @@ -1053,6 +1061,11 @@ Обработчик.Идентификатор = Новый УникальныйИдентификатор("86ec32f9-d28f-4282-1e6f-222a8653d2e0"); Обработчик.Комментарий = НСтр("ru = 'Определяет использование регламентного задания выполняющего старт отложенных бизнес-процессов.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ЗаполнитьНаименованиеПредопределенногоЭлементаВсеОбъектыАдресации"; КонецПроцедуры @@ -1249,7 +1262,7 @@ // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Задачи.ЗадачаИсполнителя.ПолноеИмя()); - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() + Если Пользователи.ЭтоСеансВнешнегоПользователя() И Разделы.Количество() = 0 Тогда Разделы.Добавить(Метаданные.Задачи.ЗадачаИсполнителя); КонецЕсли; @@ -1547,7 +1560,7 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление не было отправлено, так как у пользователя %1 не задан адрес электронной почты.'"), ПисьмоИзНабора.Получатель); ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о просроченных задачах'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,,, ТекстСообщения); Возврат; КонецЕсли; @@ -1608,7 +1621,7 @@ КонецЕсли; ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о просроченных задачах'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньВажностиСобытия,,, ТекстСообщения); КонецПроцедуры @@ -1681,7 +1694,7 @@ ПочтовыйАдресПолучателя = АдресЭлектроннойПочты(Исполнитель); Если ПустаяСтрока(ПочтовыйАдресПолучателя) Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление не отправлено, так как не указан почтовый адрес у пользователя %1.'"), Строка(Исполнитель))); Возврат Ложь; @@ -1704,7 +1717,7 @@ МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при отправке уведомления о новых задачах: %1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); @@ -1712,7 +1725,7 @@ КонецПопытки; ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомления успешно отправлены на адрес %1.'"), ПочтовыйАдресПолучателя)); Возврат Истина; @@ -1922,7 +1935,7 @@ // Вид события журнала регистрации для событий данной подсистемы. // Функция СобытиеЖурналаРегистрации() Экспорт - Возврат НСтр("ru = 'Бизнес-процессы и задачи'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Бизнес-процессы и задачи'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции // Вызывается при изменении состояния бизнес-процесса для того, чтобы @@ -2287,10 +2300,11 @@ РольОбъект = Справочники.РолиИсполнителей.ОтветственныйЗаКонтрольИсполнения.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(РольОбъект.Ссылка); + РольОбъект.Наименование = НСтр("ru='Координатор выполнения задач'"); РольОбъект.ИспользуетсяБезОбъектовАдресации = Истина; РольОбъект.ИспользуетсяСОбъектамиАдресации = Истина; РольОбъект.ТипыОсновногоОбъектаАдресации = ВсеОбъектыАдресации; - РольОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(РольОбъект); КонецПроцедуры @@ -2432,7 +2446,7 @@ МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); Если ТипЗнч(Получатель) = Тип("СправочникСсылка.Пользователи") Тогда Адрес = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта( - Получатель, Справочники.ВидыКонтактнойИнформации.EmailПользователя); + Получатель, МодульУправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени("EmailПользователя")); ИначеЕсли ТипЗнч(Получатель) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда Адрес = ЭлектроннаяПочтаВнешнегоПользователя(Получатель); КонецЕсли; @@ -2488,4 +2502,14 @@ КонецПроцедуры +// Вызывается при переходе на версию конфигурации 3.0.2.131 и при начальном заполнении. +// +Процедура ЗаполнитьНаименованиеПредопределенногоЭлементаВсеОбъектыАдресации() Экспорт + + ВсеОбъектыАдресации = ПланыВидовХарактеристик.ОбъектыАдресацииЗадач.ВсеОбъектыАдресации.ПолучитьОбъект(); + ВсеОбъектыАдресации.Наименование = НСтр("ru='Все объекты адресации'"); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВсеОбъектыАдресации); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl index d4026fa97..313544e84 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 54bdcb785..10b3acf71 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -1,13 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает ссылку на вариант отчета. // // Параметры: -// Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений, -// СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ДополнительныеОтчетыИОбработки, -// Строка - ссылка на отчет или полное имя внешнего отчета. -// КлючВарианта - Строка - имя варианта отчета. +// Отчет - СправочникСсылка.ИдентификаторыОбъектовРасширений, +// СправочникСсылка.ИдентификаторыОбъектовМетаданных, +// СправочникСсылка.ДополнительныеОтчетыИОбработки, +// Строка - ссылка на отчет или полное имя внешнего отчета. +// КлючВарианта - Строка - имя варианта отчета. // // Возвращаемое значение: // СправочникСсылка.ВариантыОтчетов, Неопределено - вариант отчета, @@ -58,10 +66,10 @@ // кроме случаев выборки вариантов из внешних отчетов. // // Возвращаемое значение: -// Массив - отчеты, доступные текущему пользователю (СправочникСсылка.ИдентификаторыОбъектовРасширений, -// Строка, СправочникСсылка.ДополнительныеОтчетыИОбработки, -// СправочникСсылка.ИдентификаторыОбъектовМетаданных). -// Тип элементов совпадает с типом реквизита Справочники.ВариантыОтчетов.Реквизиты.Отчет. +// Массив - отчеты, доступные текущему пользователю (СправочникСсылка.ИдентификаторыОбъектовРасширений, +// Строка, СправочникСсылка.ДополнительныеОтчетыИОбработки, +// СправочникСсылка.ИдентификаторыОбъектовМетаданных). +// Тип элементов совпадает с типом реквизита Справочники.ВариантыОтчетов.Реквизиты.Отчет. // Функция ОтчетыТекущегоПользователя() Экспорт @@ -82,22 +90,22 @@ // В отличие от метода платформы, вместо права "АдминистрированиеДанных" проверяются права доступа к отчету. // // Параметры: -// КлючОтчета - Строка - полное имя отчета с точкой. -// Пользователь - Строка, УникальныйИдентификатор, -// ПользовательИнформационнойБазы, Неопределено, -// СправочникСсылка.Пользователи - имя, идентификатор или ссылка на пользователя, -// настройки которого требуется получить. -// Если Неопределено, то текущий пользователь. +// КлючОтчета - Строка - полное имя отчета с точкой. +// Пользователь - Строка, УникальныйИдентификатор, +// ПользовательИнформационнойБазы, Неопределено, +// СправочникСсылка.Пользователи - имя, идентификатор или ссылка на пользователя, +// настройки которого требуется получить. +// Если Неопределено, то текущий пользователь. // // Возвращаемое значение: // СписокЗначений - список вариантов отчета, где -// * Значение - Строка - ключ варианта отчета. +// * Значение - Строка - ключ варианта отчета. // * Представление - Строка - представление варианта отчета. // // Функция КлючиВариантовОтчета(КлючОтчета, Знач Пользователь = Неопределено) Экспорт - Возврат ХранилищаНастроек.ХранилищеВариантовОтчетов.ПолучитьСписок(КлючОтчета, Пользователь); + Возврат ХранилищаНастроек.ХранилищеВариантовОтчетов.КлючиВариантовОтчета(КлючОтчета, Пользователь); КонецФункции @@ -105,15 +113,15 @@ // См. также СтандартноеХранилищеНастроекМенеджер.Удалить в синтакс-помощнике. // // Параметры: -// КлючОтчета - Строка, Неопределено - полное имя отчета с точкой. -// Если Неопределено, то удаляются настройки всех отчетов. -// КлючВарианта - Строка, Неопределено - ключ удаляемого варианта отчета. -// Если Неопределено, то удаляются все варианты отчета. -// Пользователь - Строка, УникальныйИдентификатор, -// ПользовательИнформационнойБазы, Неопределено, -// СправочникСсылка.Пользователи - имя, идентификатор или ссылка на пользователя, -// настройки которого удаляются. -// Если Неопределено, то удаляются настройки всех пользователей. +// КлючОтчета - Строка, Неопределено - полное имя отчета с точкой. +// Если Неопределено, то удаляются настройки всех отчетов. +// КлючВарианта - Строка, Неопределено - ключ удаляемого варианта отчета. +// Если Неопределено, то удаляются все варианты отчета. +// Пользователь - Строка, УникальныйИдентификатор, +// ПользовательИнформационнойБазы, Неопределено, +// СправочникСсылка.Пользователи - имя, идентификатор или ссылка на пользователя, +// настройки которого удаляются. +// Если Неопределено, то удаляются настройки всех пользователей. // Процедура УдалитьВариантОтчета(КлючОтчета, КлючВарианта, Знач Пользователь) Экспорт @@ -128,9 +136,9 @@ // Для вызова из процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. // // Параметры: -// Настройки - Коллекция - передается "как есть" из процедуры НастроитьВариантыОтчетов. -// ОтчетМетаданные - ОбъектМетаданных - метаданные отчета, в модуле менеджера которого расположена -// экспортная процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета). +// Настройки - Коллекция - передается "как есть" из процедуры НастроитьВариантыОтчетов. +// ОтчетМетаданные - ОбъектМетаданных - метаданные отчета, в модуле менеджера которого расположена +// экспортная процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета). // Процедура НастроитьОтчетВМодулеМенеджера(Настройки, ОтчетМетаданные) Экспорт НастройкиОтчета = ОписаниеОтчета(Настройки, ОтчетМетаданные); @@ -150,10 +158,10 @@ // в ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. // // Параметры: -// Настройки - Коллекция - используется для описания настроек отчетов и вариантов. -// Передается "как есть" из процедур ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов -// и НастроитьВариантыОтчета. -// Отчет - ОбъектМетаданных, СправочникСсылка.ИдентификаторыОбъектовМетаданных - метаданные или ссылка отчета. +// Настройки - Коллекция - используется для описания настроек отчетов и вариантов. +// Передается "как есть" из процедур ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов +// и НастроитьВариантыОтчета. +// Отчет - ОбъектМетаданных, СправочникСсылка.ИдентификаторыОбъектовМетаданных - метаданные или ссылка отчета. // // Возвращаемое значение: // СтрокаДереваЗначений - настройки отчета и настройки "по умолчанию" для вариантов этого отчета. @@ -202,7 +210,7 @@ // // или уникальный идентификатор пользовательского варианта отчета. // // Неопределено когда вызов без контекста. // // Настройки - Структура - см. возвращаемое значение -// // ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// // ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию(). // // // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт // // Код процедуры. @@ -217,32 +225,31 @@ // * СистемнаяИнформация - Структура - Другая служебная информация. // Функция ОписаниеОтчета(Настройки, Отчет) Экспорт - ЭтоМетаданные = (ТипЗнч(Отчет) = Тип("ОбъектМетаданных")); - Если ЭтоМетаданные Тогда - СтрокаОтчет = Настройки.Строки.Найти(Отчет, "Метаданные", Ложь); + + Если ТипЗнч(Отчет) = Тип("ОбъектМетаданных") Тогда + Результат = Настройки.НайтиСтроки(Новый Структура("Метаданные, ЭтоВариант", Отчет, Ложь)); Иначе - СтрокаОтчет = Настройки.Строки.Найти(Отчет, "Отчет", Ложь); + Результат = Настройки.НайтиСтроки(Новый Структура("Отчет, ЭтоВариант", Отчет, Ложь)); КонецЕсли; - Если СтрокаОтчет = Неопределено Тогда + Если Результат.Количество() <> 1 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недопустимое значение параметра Отчет в процедуре ВариантыОтчетов.ОписаниеОтчета. + НСтр("ru = 'Недопустимое значение параметра Отчет в функции ВариантыОтчетов.ОписаниеОтчета. |Отчет ""%1"" не подключен к подсистеме ""%2"". Проверьте свойство ""Хранилище вариантов"" в свойствах отчета.'"), - Строка(Отчет), - ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы("")); + Строка(Отчет), НаименованиеПодсистемы("")); КонецЕсли; - Возврат СтрокаОтчет; + Возврат Результат[0]; КонецФункции // Находит настройки варианта отчета. Используется для настройки размещения. // Для использования в ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов. -// Передается "как есть" из процедур НастроитьВариантыОтчетов и НастроитьВариантыОтчета. -// Отчет - СтрокаДерева, ОбъектМетаданных - Описание настроек, метаданные или ссылка отчета. -// КлючВарианта - Строка - Имя варианта отчета как оно задано в схеме компоновки данных. +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов. +// Передается "как есть" из процедур НастроитьВариантыОтчетов и НастроитьВариантыОтчета. +// Отчет - СтрокаДерева, ОбъектМетаданных - Описание настроек, метаданные или ссылка отчета. +// КлючВарианта - Строка - Имя варианта отчета как оно задано в схеме компоновки данных. // // Возвращаемое значение: // СтрокаДереваЗначений - Настройки варианта отчета. @@ -292,7 +299,7 @@ // // или уникальный идентификатор пользовательского варианта отчета. // // Неопределено когда вызов без контекста. // // Настройки - Структура - см. возвращаемое значение -// // ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// // ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию(). // // // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт // // Код процедуры. @@ -307,29 +314,24 @@ // * СистемнаяИнформация - Структура - Другая служебная информация. // Функция ОписаниеВарианта(Настройки, Отчет, КлючВарианта) Экспорт - Если ТипЗнч(Отчет) = Тип("СтрокаДереваЗначений") Тогда - СтрокаОтчет = Отчет; + Если ТипЗнч(Отчет) = Тип("СтрокаТаблицыЗначений") Тогда + ОписаниеОтчета = Отчет; Иначе - СтрокаОтчет = ОписаниеОтчета(Настройки, Отчет); + ОписаниеОтчета = ОписаниеОтчета(Настройки, Отчет); КонецЕсли; - Если КлючВарианта = "" Тогда - СтрокаВариант = СтрокаОтчет.ОсновнойВариант; - Иначе - СтрокаВариант = СтрокаОтчет.Строки.Найти(КлючВарианта, "КлючВарианта", Ложь); - КонецЕсли; - - Если СтрокаВариант = Неопределено Тогда + КлючВариантаОтчета = ?(ПустаяСтрока(КлючВарианта), ОписаниеОтчета.ОсновнойВариант, КлючВарианта); + Результат = Настройки.НайтиСтроки(Новый Структура("Отчет,КлючВарианта,ЭтоВариант", ОписаниеОтчета.Отчет, КлючВариантаОтчета, Истина)); + Если Результат.Количество() <> 1 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недопустимое значение параметра КлючВарианта в процедуре ВариантыОтчетов.ОписаниеВарианта: + НСтр("ru = 'Недопустимое значение параметра КлючВарианта в функции ВариантыОтчетов.ОписаниеВарианта: |вариант ""%1"" отсутствует в отчете ""%2"".'"), - КлючВарианта, - СтрокаОтчет.Метаданные.Имя); + КлючВарианта, ОписаниеОтчета.Метаданные.Имя); КонецЕсли; - ЗаполнитьОписаниеСтрокиВарианта(СтрокаВариант, СтрокаОтчет); + ЗаполнитьОписаниеСтрокиВарианта(Результат[0], ОписаниеОтчета); + Возврат Результат[0]; - Возврат СтрокаВариант; КонецФункции // Устанавливает режим вывода Отчетов и Вариантов в панелях отчетов. @@ -337,63 +339,67 @@ // и из процедуры НастроитьВариантыОтчета модуля объекта отчета. // // Параметры: -// Настройки - Коллекция - Передается "как есть" из соответствующего параметра -// процедур НастроитьВариантыОтчетов и НастроитьВариантыОтчета. -// ОтчетИлиПодсистема - СтрокаДереваЗначений, ОбъектМетаданных: Отчет, ОбъектМетаданных: Подсистема - -// Описание отчета или подсистемы, для которой устанавливается режим вывода. -// Когда передана подсистема режим устанавливается рекурсивно для всех отчетов из ее состава. -// ГруппироватьПоОтчетам - Булево, Строка - Режим вывода гиперссылок этого отчета в панели отчетов: -// - Истина, "ПоОтчетам" - Варианты группируются по отчету. -// По умолчанию в панелях отчетов выводится только основной вариант отчета, -// а все прочие варианты этого отчета выводятся "под" основным и по умолчанию скрыты -// (но могут быть найдены поиском или включены при помощи флажков в режиме настройки). -// Основным вариантом считается первый предопределенный вариант в схеме отчета. -// Этот режим появился в версии 2.2.2 и позволяет уменьшить количество гиперссылок, выводимых в панелях отчетов. -// - Ложь, "ПоВариантам" - Все варианты отчета считаются самостоятельными, -// по умолчанию видны и выводятся независимо в панелях отчетов. -// Этот режим использовался в версии 2.2.1 и ранее. +// Настройки - Коллекция - Передается "как есть" из соответствующего параметра +// процедур НастроитьВариантыОтчетов и НастроитьВариантыОтчета. +// ОтчетИлиПодсистема - СтрокаДереваЗначений, ОбъектМетаданных: Отчет, ОбъектМетаданных: Подсистема - +// Описание отчета или подсистемы, для которой устанавливается режим вывода. +// Когда передана подсистема режим устанавливается рекурсивно для всех отчетов из ее состава. +// ГруппироватьПоОтчетам - Булево, Строка - Режим вывода гиперссылок этого отчета в панели отчетов: +// - Истина, "ПоОтчетам" - Варианты группируются по отчету. +// По умолчанию в панелях отчетов выводится только основной вариант отчета, +// а все прочие варианты этого отчета выводятся "под" основным и по умолчанию скрыты +// (но могут быть найдены поиском или включены при помощи флажков в режиме настройки). +// Основным вариантом считается первый предопределенный вариант в схеме отчета. +// Этот режим появился в версии 2.2.2 и позволяет уменьшить количество гиперссылок, выводимых в панелях отчетов. +// - Ложь, "ПоВариантам" - Все варианты отчета считаются самостоятельными, +// по умолчанию видны и выводятся независимо в панелях отчетов. +// Этот режим использовался в версии 2.2.1 и ранее. // Процедура УстановитьРежимВыводаВПанеляхОтчетов(Настройки, ОтчетИлиПодсистема, ГруппироватьПоОтчетам) Экспорт + Если ТипЗнч(ГруппироватьПоОтчетам) <> Тип("Булево") Тогда ГруппироватьПоОтчетам = (ГруппироватьПоОтчетам = ВРег("ПоОтчетам")); КонецЕсли; - Если ТипЗнч(ОтчетИлиПодсистема) = Тип("СтрокаДереваЗначений") - Или Метаданные.Отчеты.Содержит(ОтчетИлиПодсистема) Тогда + Если ТипЗнч(ОтчетИлиПодсистема) = Тип("СтрокаТаблицыЗначений") Или Метаданные.Отчеты.Содержит(ОтчетИлиПодсистема) Тогда УстановитьРежимВыводаОтчетаВПанеляхОтчетов(Настройки, ОтчетИлиПодсистема, ГруппироватьПоОтчетам); - Иначе - Подсистемы = Новый Массив; - Подсистемы.Добавить(ОтчетИлиПодсистема); - Количество = 1; - ОбработанныеОбъекты = Новый Массив; - Пока Количество > 0 Цикл - Количество = Количество - 1; - Подсистема = Подсистемы[0]; - Подсистемы.Удалить(0); - Для Каждого ВложеннаяПодсистема Из Подсистема.Подсистемы Цикл - Количество = Количество + 1; - Подсистемы.Добавить(ВложеннаяПодсистема); - КонецЦикла; - Для Каждого ОбъектМетаданных Из ОтчетИлиПодсистема.Состав Цикл - Если ОбработанныеОбъекты.Найти(ОбъектМетаданных) = Неопределено Тогда - ОбработанныеОбъекты.Добавить(ОбъектМетаданных); - Если Метаданные.Отчеты.Содержит(ОбъектМетаданных) Тогда - УстановитьРежимВыводаОтчетаВПанеляхОтчетов(Настройки, ОбъектМетаданных, ГруппироватьПоОтчетам); - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЦикла; + Возврат; КонецЕсли; + + Подсистемы = Новый Массив; + Подсистемы.Добавить(ОтчетИлиПодсистема); + Количество = 1; + ОбработанныеОбъекты = Новый Соответствие; + Пока Количество > 0 Цикл + Количество = Количество - 1; + Подсистема = Подсистемы[0]; + Подсистемы.Удалить(0); + Для Каждого ВложеннаяПодсистема Из Подсистема.Подсистемы Цикл + Количество = Количество + 1; + Подсистемы.Добавить(ВложеннаяПодсистема); + КонецЦикла; + Для Каждого ОбъектМетаданных Из ОтчетИлиПодсистема.Состав Цикл + Если ОбработанныеОбъекты[ОбъектМетаданных] <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ОбработанныеОбъекты[ОбъектМетаданных] = Истина; + Если Метаданные.Отчеты.Содержит(ОбъектМетаданных) Тогда + УстановитьРежимВыводаОтчетаВПанеляхОтчетов(Настройки, ОбъектМетаданных, ГруппироватьПоОтчетам); + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Для вызова из отчетов. // Обновляет состав справочника ПользовательскиеНастройкиОтчетов после сохранения новой настройки. -// Вызывается в одноименном обработчике формы отчета после выполнения кода формы. +// Вызывается в одноименном обработчике формы отчета после выполнения кода формы. // // Параметры: -// Форма - УправляемаяФорма - Форма отчета. -// Настройки - ОбъектМетаданных - Передается "как есть" из процедуры ПриСохраненииПользовательскихНастроекНаСервере. +// Форма - УправляемаяФорма - Форма отчета. +// Настройки - ОбъектМетаданных - Передается "как есть" из процедуры ПриСохраненииПользовательскихНастроекНаСервере. // Процедура ПриСохраненииПользовательскихНастроекНаСервере(Форма, Настройки) Экспорт @@ -483,24 +489,24 @@ КонецПроцедуры // Извлекает информация о таблицах, используемых в схеме или запросе. -// Обработка исключений (например, в случае передачи некорректного текста запроса) выполняется вызывающим кодом. +// Обработка исключений (например, в случае передачи некорректного текста запроса) выполняется вызывающим кодом. // // Параметры: -// Объект - СхемаКомпоновкиДанных, Строка - Схема отчета или текст запроса. +// Объект - СхемаКомпоновкиДанных, Строка - Схема отчета или текст запроса. // // Возвращаемое значение: // Массив - Имена таблиц, используемые в схеме или запросе. // // Пример: -// // Вызов из собственной формы отчета, использующего СКД. -// ИспользуемыеТаблицы = ВариантыОтчетов.ИспользуемыеТаблицы(РеквизитФормыВЗначение("Отчет").СхемаКомпоновкиДанных); -// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ИспользуемыеТаблицы); -// // Вызов из обработчика ПриКомпоновкеРезультата отчета, использующего СКД. -// ИспользуемыеТаблицы = ВариантыОтчетов.ИспользуемыеТаблицы(ЭтотОбъект.СхемаКомпоновкиДанных); -// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ИспользуемыеТаблицы); -// // Вызов из обработчика ПриКомпоновкеРезультата отчета, использующего запрос. -// ИспользуемыеТаблицы = ВариантыОтчетов.ИспользуемыеТаблицы(ТекстЗапроса); -// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ИспользуемыеТаблицы); +// // Вызов из собственной формы отчета, использующего СКД. +// ИспользуемыеТаблицы = ВариантыОтчетов.ИспользуемыеТаблицы(РеквизитФормыВЗначение("Отчет").СхемаКомпоновкиДанных); +// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ИспользуемыеТаблицы); +// // Вызов из обработчика ПриКомпоновкеРезультата отчета, использующего СКД. +// ИспользуемыеТаблицы = ВариантыОтчетов.ИспользуемыеТаблицы(ЭтотОбъект.СхемаКомпоновкиДанных); +// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ИспользуемыеТаблицы); +// // Вызов из обработчика ПриКомпоновкеРезультата отчета, использующего запрос. +// ИспользуемыеТаблицы = ВариантыОтчетов.ИспользуемыеТаблицы(ТекстЗапроса); +// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ИспользуемыеТаблицы); // Функция ИспользуемыеТаблицы(Объект) Экспорт Таблицы = Новый Массив; @@ -513,28 +519,28 @@ КонецФункции // Проверяет что таблицы, используемые в схеме или запросе, еще обновляются, и сообщает об этом пользователю. -// Проверка выполняется методом ОбновлениеИнформационнойБазы.ОбъектОбработан(). -// Обработка исключений (например, в случае передачи некорректного текста запроса) выполняется вызывающим кодом. +// Проверка выполняется методом ОбновлениеИнформационнойБазы.ОбъектОбработан(). +// Обработка исключений (например, в случае передачи некорректного текста запроса) выполняется вызывающим кодом. // // Параметры: -// Объект - СхемаКомпоновкиДанных - Схема отчета. -// - Строка - Текст запроса. -// - Массив - Имена таблиц, используемые отчетом. +// Объект - СхемаКомпоновкиДанных - Схема отчета. +// - Строка - Текст запроса. +// - Массив - Имена таблиц, используемые отчетом. // * Строка - Имя таблицы. -// Сообщать - Булево - Когда Истина и таблицы, используемые отчетом, еще не обновлены, -// то будет выведено сообщение вида "Отчет может содержать некорректные данные". -// Необязательный. По умолчанию Истина. +// Сообщать - Булево - Когда Истина и таблицы, используемые отчетом, еще не обновлены, +// то будет выведено сообщение вида "Отчет может содержать некорректные данные". +// Необязательный. По умолчанию Истина. // // Возвращаемое значение: // Булево - Истина когда в списке таблиц есть таблицы, которые еще не обновлены. // // Пример: -// //Вызов из собственной формы отчета. -// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(РеквизитФормыВЗначение("Отчет").СхемаКомпоновкиДанных); -// //Вызов из обработчика ПриКомпоновкеРезультата отчета. -// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ЭтотОбъект.СхемаКомпоновкиДанных); -// //Вызов при выполнении запроса. -// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ТекстЗапроса); +// // Вызов из собственной формы отчета. +// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(РеквизитФормыВЗначение("Отчет").СхемаКомпоновкиДанных); +// // Вызов из обработчика ПриКомпоновкеРезультата отчета. +// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ЭтотОбъект.СхемаКомпоновкиДанных); +// // Вызов при выполнении запроса. +// ВариантыОтчетов.ПроверитьИспользуемыеТаблицы(ТекстЗапроса); // Функция ПроверитьИспользуемыеТаблицы(Объект, Сообщать = Истина) Экспорт Если ТипЗнч(Объект) = Тип("Массив") Тогда @@ -545,7 +551,7 @@ Для Каждого ПолноеИмя Из ИспользуемыеТаблицы Цикл Если Не ОбновлениеИнформационнойБазы.ОбъектОбработан(ПолноеИмя).Обработан Тогда Если Сообщать Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеДанныеЕщеОбновляются()); + ОбщегоНазначения.СообщитьПользователю(СообщениеДанныеЕщеОбновляются()); КонецЕсли; Возврат Истина; КонецЕсли; @@ -559,19 +565,19 @@ // Сбрасывает пользовательские настройки указанных отчетов. // // Параметры: -// Ключ - ОбъектМетаданных: Отчет - Метаданные отчета, для которого требуется сбросить настройки. +// Ключ - ОбъектМетаданных: Отчет - Метаданные отчета, для которого требуется сбросить настройки. // - СправочникСсылка.ВариантыОтчетов - Вариант отчета, для которого требуется сбросить настройки. // - Строка - Полное имя варианта отчета, для которого требуется сбросить настройки. // Заполняется в формате "<ИмяОтчета>/<ИмяВарианта>". // Если передать "*", то будут сброшены настройки всех отчетов конфигурации. -// ТипыНастроек - Структура - Необязательный. Типы пользовательских настроек, которые требуется сбросить. -// Ключи структуры тоже являются необязательными. Значение по умолчанию указано в скобках. -// * ЭлементОтбора - Булево - (Ложь) Сбрасывать настройку "ЭлементОтбораКомпоновкиДанных". -// * ЗначениеПараметраНастроек - Булево - (Ложь) Сбрасывать настройку "ЗначениеПараметраНастроекКомпоновкиДанных". -// * ВыбранныеПоля - Булево - (берется из ключа Прочие) Сбрасывать настройку "ВыбранныеПоляКомпоновкиДанных". -// * Порядок - Булево - (берется из ключа Прочие) Сбрасывать настройку "ПорядокКомпоновкиДанных". -// * ЭлементУсловногоОформления - Булево - (берется из ключа Прочие) Сбрасывать настройку "ЭлементУсловногоОформленияКомпоновкиДанных". -// * Прочие - Булево - (Истина) Сбрасывать прочие настройки, не описанные в структуре явно. +// ТипыНастроек - Структура - Необязательный. Типы пользовательских настроек, которые требуется сбросить. +// Ключи структуры тоже являются необязательными. Значение по умолчанию указано в скобках. +// * ЭлементОтбора - Булево - (Ложь) Сбрасывать настройку "ЭлементОтбораКомпоновкиДанных". +// * ЗначениеПараметраНастроек - Булево - (Ложь) Сбрасывать настройку "ЗначениеПараметраНастроекКомпоновкиДанных". +// * ВыбранныеПоля - Булево - (берется из ключа Прочие) Сбрасывать настройку "ВыбранныеПоляКомпоновкиДанных". +// * Порядок - Булево - (берется из ключа Прочие) Сбрасывать настройку "ПорядокКомпоновкиДанных". +// * ЭлементУсловногоОформления - Булево - (берется из ключа Прочие) Сбрасывать настройку "ЭлементУсловногоОформленияКомпоновкиДанных". +// * Прочие - Булево - (Истина) Сбрасывать прочие настройки, не описанные в структуре явно. // Процедура СброситьПользовательскиеНастройки(Ключ, ТипыНастроек = Неопределено) Экспорт ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( @@ -679,18 +685,20 @@ КонецПроцедуры // Переносит пользовательские варианты из стандартного хранилища вариантов в хранилище подсистемы. -// Используется при частичном внедрении - когда ХранилищеВариантовОтчетов установлено не для всей конфигурации, -// а в свойствах конкретных отчетов, подключенных к подсистеме. -// Рекомендуется использовать в обработчиках обновления на конкретную версию. +// Используется при частичном внедрении - когда ХранилищеВариантовОтчетов установлено не для всей конфигурации, +// а в свойствах конкретных отчетов, подключенных к подсистеме. +// Рекомендуется использовать в обработчиках обновления на конкретную версию. // // Параметры: -// ИменаОтчетов - Строка - Необязательный. Имена отчетов, разделенные запятыми. +// ИменаОтчетов - Строка - Имена отчетов, разделенные запятыми. +// Если параметр не указан, то переносятся все отчеты +// стандартного хранилища, после чего оно полностью очищается. // // Пример: -// // Перенос всех пользовательских вариантов отчетов при обновлении. -// ВариантыОтчетов.ПеренестиВариантыОтчетовИзСтандартногоХранилища(); -// // Либо перенос пользовательских вариантов отчетов, переведенных на хранилище подсистемы "Варианты отчетов". -// ВариантыОтчетов.ПеренестиВариантыОтчетовИзСтандартногоХранилища("АнализЖурналаРегистрации, ЗадачиИстекающиеНаДату"); +// // Перенос всех пользовательских вариантов отчетов при обновлении. +// ВариантыОтчетов.ПеренестиВариантыОтчетовИзСтандартногоХранилища(); +// // Перенос пользовательских вариантов отчетов, переведенных в хранилище подсистемы "Варианты отчетов". +// ВариантыОтчетов.ПеренестиВариантыОтчетовИзСтандартногоХранилища("АнализЖурналаРегистрации, ЗадачиИстекающиеНаДату"); // Процедура ПеренестиПользовательскиеИзСтандартногоХранилища(ИменаОтчетов = "") Экспорт ПредставлениеПроцедуры = НСтр("ru = 'Прямая конвертация вариантов отчетов'"); @@ -798,28 +806,29 @@ КонецПроцедуры // Загружает в хранилище подсистемы варианты отчетов, предварительно сохраненные -// из системного хранилища вариантов в хранилище общих настроек. -// Используется для загрузки вариантов отчетов при полном или частичном внедрении. -// При полном внедрении может вызваться из обработки "ПереносВариантовОтчетов". -// Рекомендуется использовать в обработчиках обновления на конкретную версию. +// из системного хранилища вариантов в хранилище общих настроек. +// Используется для загрузки вариантов отчетов при полном или частичном внедрении. +// При полном внедрении может вызваться из обработки "ПереносВариантовОтчетов". +// Рекомендуется использовать в обработчиках обновления на конкретную версию. // // Параметры: -// ТаблицаВариантов - ТаблицаЗначений - Необязательный. Используется в служебных сценариях. -// * Отчет - Строка - Полное имя отчета в формате "Отчет.<ИмяОтчета>". +// ПользовательскиеВарианты - ТаблицаЗначений - Необязательный. Используется в служебных сценариях. +// * Отчет - Строка - Полное имя отчета в формате "Отчет.<ИмяОтчета>". // * Вариант - Строка - Имя варианта отчета. -// * Автор - Строка - Имя пользователя. +// * Автор - Строка - Имя пользователя. // * Настройка - ХранилищеЗначения - ПользовательскиеНастройкиКомпоновкиДанных. -// * ПредставлениеОтчета - Строка - Представление отчета. +// * ПредставлениеОтчета - Строка - Представление отчета. // * ПредставлениеВарианта - Строка - Представление варианта. // * ИдентификаторАвтора - УникальныйИдентификатор - Идентификатор пользователя. // -Процедура ЗагрузитьПользовательские(ТаблицаВариантов = Неопределено) Экспорт - - Если ТаблицаВариантов = Неопределено Тогда - ТаблицаВариантов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПереносВариантовОтчетов", "ТаблицаВариантов", , , ""); +Процедура ЗагрузитьПользовательские(ПользовательскиеВарианты = Неопределено) Экспорт + Если ПользовательскиеВарианты = Неопределено Тогда + ПользовательскиеВарианты = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "ПереносВариантовОтчетов", "ПользовательскиеВарианты", , , ""); КонецЕсли; - Если ТипЗнч(ТаблицаВариантов) <> Тип("ТаблицаЗначений") Или ТаблицаВариантов.Количество() = 0 Тогда + Если ТипЗнч(ПользовательскиеВарианты) <> Тип("ТаблицаЗначений") + Или ПользовательскиеВарианты.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -827,149 +836,114 @@ ЗаписатьВЖурналЗапускПроцедуры(ПредставлениеПроцедуры); // Замена имен колонок под структуру справочника. - ТаблицаВариантов.Колонки.Отчет.Имя = "ОтчетПолноеИмя"; - ТаблицаВариантов.Колонки.Вариант.Имя = "КлючВарианта"; - ТаблицаВариантов.Колонки.ПредставлениеВарианта.Имя = "Наименование"; + ПользовательскиеВарианты.Колонки.Отчет.Имя = "ОтчетПолноеИмя"; + ПользовательскиеВарианты.Колонки.Вариант.Имя = "КлючВарианта"; + ПользовательскиеВарианты.Колонки.ПредставлениеВарианта.Имя = "Наименование"; // Преобразование имен отчетов в ссылки справочника ИОМ. - ТаблицаВариантов.Колонки.Добавить("Отчет", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.Отчет.Тип); - ТаблицаВариантов.Колонки.Добавить("Определен", Новый ОписаниеТипов("Булево")); - ТаблицаВариантов.Колонки.Добавить("ТипОтчета", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.ТипОтчета.Тип); - Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл - ОтчетИнформация = СформироватьИнформациюОбОтчетеПоПолномуИмени(СтрокаТаблицы.ОтчетПолноеИмя); - - // Проверить результат - Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда - ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ОтчетИнформация.ТекстОшибки); + ПользовательскиеВарианты.Колонки.Добавить("Отчет", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.Отчет.Тип); + ПользовательскиеВарианты.Колонки.Добавить("Определен", Новый ОписаниеТипов("Булево")); + ПользовательскиеВарианты.Колонки.Добавить("ТипОтчета", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.ТипОтчета.Тип); + Для Каждого ОписаниеВарианта Из ПользовательскиеВарианты Цикл + ИнформацияОбОтчете = СформироватьИнформациюОбОтчетеПоПолномуИмени(ОписаниеВарианта.ОтчетПолноеИмя); + Если ТипЗнч(ИнформацияОбОтчете.ТекстОшибки) = Тип("Строка") Тогда + ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ИнформацияОбОтчете.ТекстОшибки); Продолжить; КонецЕсли; - СтрокаТаблицы.Определен = Истина; - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ОтчетИнформация, "Отчет, ТипОтчета"); + ОписаниеВарианта.Определен = Истина; + ЗаполнитьЗначенияСвойств(ОписаниеВарианта, ИнформацияОбОтчете, "Отчет, ТипОтчета"); КонецЦикла; - - ТаблицаВариантов.Сортировать("ОтчетПолноеИмя Возр, КлючВарианта Возр"); - - // Существующие варианты отчетов. - ТекстЗапроса = - "ВЫБРАТЬ - | ТаблицаВариантов.Отчет, - | ТаблицаВариантов.ОтчетПолноеИмя, - | ТаблицаВариантов.ТипОтчета, - | ТаблицаВариантов.КлючВарианта, - | ТаблицаВариантов.Автор - |ПОМЕСТИТЬ втВарианты - |ИЗ - | &ТаблицаВариантов КАК ТаблицаВариантов - |ГДЕ - | ТаблицаВариантов.Определен = ИСТИНА - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | втВарианты.Отчет, - | втВарианты.ОтчетПолноеИмя, - | втВарианты.ТипОтчета, - | втВарианты.КлючВарианта, - | ВариантыОтчетов.Ссылка, - | ПользователиПоИмени.Ссылка КАК ПользовательПоИмени - |ИЗ - | втВарианты КАК втВарианты - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК ПользователиПоИмени - | ПО втВарианты.Автор = ПользователиПоИмени.Наименование - | И (ПользователиПоИмени.ПометкаУдаления = ЛОЖЬ) - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ПО втВарианты.Отчет = ВариантыОтчетов.Отчет - | И втВарианты.КлючВарианта = ВариантыОтчетов.КлючВарианта - | И втВарианты.ТипОтчета = ВариантыОтчетов.ТипОтчета"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ТаблицаВариантов", ТаблицаВариантов); - Запрос.Текст = ТекстЗапроса; - - ВариантыБД = Запрос.Выполнить().Выгрузить(); - ВариантыБД.Индексы.Добавить("Отчет, КлючВарианта"); - - // Авторы вариантов - ТекстЗапроса = - "ВЫБРАТЬ - | Пользователи.Ссылка КАК Пользователь, - | Пользователи.ИдентификаторПользователяИБ КАК Идентификатор - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.ИдентификаторПользователяИБ В(&Идентификаторы) - | И Пользователи.ПометкаУдаления = ЛОЖЬ"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Идентификаторы", ТаблицаВариантов.ВыгрузитьКолонку("ИдентификаторАвтора")); - Запрос.Текст = ТекстЗапроса; - - ПользователиПоИдентификатору = Запрос.Выполнить().Выгрузить(); + ПользовательскиеВарианты.Сортировать("ОтчетПолноеИмя Возр, КлючВарианта Возр"); ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах(); - // Загрузка вариантов в хранилище подсистемы. - ОпределенныеВарианты = ТаблицаВариантов.НайтиСтроки(Новый Структура("Определен", Истина)); - Для Каждого СтрокаТаблицы Из ОпределенныеВарианты Цикл - Найденные = ВариантыБД.НайтиСтроки(Новый Структура("Отчет, КлючВарианта", СтрокаТаблицы.Отчет, СтрокаТаблицы.КлючВарианта)); - ВариантБД = Найденные[0]; - - // Если вариант уже загружен в справочник "Варианты отчетов" - не загружаем его. - Если ЗначениеЗаполнено(ВариантБД.Ссылка) Тогда + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | ПользовательскиеВарианты.Наименование, + | ПользовательскиеВарианты.ПредставлениеОтчета, + | ПользовательскиеВарианты.Отчет, + | ПользовательскиеВарианты.ОтчетПолноеИмя, + | ПользовательскиеВарианты.ТипОтчета, + | ПользовательскиеВарианты.КлючВарианта, + | ПользовательскиеВарианты.Автор КАК ПредставлениеАвтора, + | ПользовательскиеВарианты.ИдентификаторАвтора, + | ПользовательскиеВарианты.Настройка КАК Настройки + |ПОМЕСТИТЬ ПользовательскиеВарианты + |ИЗ + | &ПользовательскиеВарианты КАК ПользовательскиеВарианты + |ГДЕ + | ПользовательскиеВарианты.Определен + |; + | + |ВЫБРАТЬ + | ПользовательскиеВарианты.Наименование, + | ПользовательскиеВарианты.ПредставлениеОтчета, + | ПользовательскиеВарианты.Отчет, + | ПользовательскиеВарианты.ОтчетПолноеИмя, + | ПользовательскиеВарианты.ТипОтчета, + | ПользовательскиеВарианты.КлючВарианта, + | ПользовательскиеВарианты.Настройки, + | Варианты.Ссылка, + | ПользовательскиеВарианты.ПредставлениеАвтора, + | Пользователи.Ссылка КАК Автор + |ИЗ + | ПользовательскиеВарианты КАК ПользовательскиеВарианты + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК Варианты + | ПО Варианты.Отчет = ПользовательскиеВарианты.Отчет + | И Варианты.КлючВарианта = ПользовательскиеВарианты.КлючВарианта + | И Варианты.ТипОтчета = ПользовательскиеВарианты.ТипОтчета + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи + | ПО Пользователи.ИдентификаторПользователяИБ = ПользовательскиеВарианты.ИдентификаторАвтора + | И НЕ Пользователи.ПометкаУдаления + |"); + Запрос.УстановитьПараметр("ПользовательскиеВарианты", ПользовательскиеВарианты); + + ОписаниеВарианта = Запрос.Выполнить().Выбрать(); + Пока ОписаниеВарианта.Следующий() Цикл + Если ЗначениеЗаполнено(ОписаниеВарианта.Ссылка) Тогда Продолжить; КонецЕсли; - // СправочникОбъект - ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); + ХранилищеВарианта = Справочники.ВариантыОтчетов.СоздатьЭлемент(); + ЗаполнитьЗначенияСвойств(ХранилищеВарианта, ОписаниеВарианта, "Наименование, Отчет, ТипОтчета, КлючВарианта, Автор"); - // Уже подготовленные параметры. - ЗаполнитьЗначенияСвойств(ВариантОбъект, СтрокаТаблицы, "Наименование, Отчет, ТипОтчета, КлючВарианта"); + ХранилищеВарианта.Пользовательский = Истина; + ХранилищеВарианта.ТолькоДляАвтора = Истина; - // Настройки - Настройки = СтрокаТаблицы.Настройка; - Если ТипЗнч(Настройки) = Тип("ХранилищеЗначения") Тогда - Настройки = Настройки.Получить(); - КонецЕсли; - ВариантОбъект.Настройки = Новый ХранилищеЗначения(Настройки); - - // В стандартном хранилище хранятся только пользовательские ВО. - ВариантОбъект.Пользовательский = Истина; - ВариантОбъект.ТолькоДляАвтора = Истина; - - // Автор варианта - ПользовательПоИД = ПользователиПоИдентификатору.Найти(СтрокаТаблицы.ИдентификаторАвтора, "Идентификатор"); - Если ПользовательПоИД <> Неопределено И ЗначениеЗаполнено(ПользовательПоИД.Пользователь) Тогда - ВариантОбъект.Автор = ПользовательПоИД.Пользователь; - ИначеЕсли ВариантБД <> Неопределено И ЗначениеЗаполнено(ВариантБД.ПользовательПоИмени) Тогда - ВариантОбъект.Автор = ВариантБД.ПользовательПоИмени; + Если ТипЗнч(ОписаниеВарианта.Настройки) = Тип("ХранилищеЗначения") Тогда + ХранилищеВарианта.Настройки = ОписаниеВарианта.Настройки; Иначе - ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вариант ""%1"" отчета ""%2"": не найден автор ""%3""'"), - ВариантОбъект.Наименование, - СтрокаТаблицы.ПредставлениеОтчета, - СтрокаТаблицы.Автор), - ВариантОбъект.Ссылка); + ХранилищеВарианта.Настройки = Новый ХранилищеЗначения(ОписаниеВарианта.Настройки); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ОписаниеВарианта.Автор) Тогда + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вариант ""%1"" отчета ""%2"": не найден автор ""%3""'"), + ОписаниеВарианта.Наименование, + ОписаниеВарианта.ПредставлениеОтчета, + ОписаниеВарианта.ПредставлениеАвтора); + + ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, Сообщение, ХранилищеВарианта.Ссылка); КонецЕсли; // Поскольку переносятся пользовательские варианты отчетов, // то настройки размещения можно взять только из метаданных отчета. - Найденные = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетПолноеИмя", СтрокаТаблицы.ОтчетПолноеИмя)); - Для Каждого СтрокаПодсистема Из Найденные Цикл - СсылкаПодсистемы = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(СтрокаПодсистема.ПодсистемаМетаданные); - Если ТипЗнч(СсылкаПодсистемы) = Тип("Строка") Тогда + НайденныеПодсистемы = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетПолноеИмя", ОписаниеВарианта.ОтчетПолноеИмя)); + Для Каждого ОписаниеПодсистемы Из НайденныеПодсистемы Цикл + Подсистема = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОписаниеПодсистемы.ПодсистемаМетаданные); + Если ТипЗнч(Подсистема) = Тип("Строка") Тогда Продолжить; КонецЕсли; - СтрокаРаздел = ВариантОбъект.Размещение.Добавить(); - СтрокаРаздел.Использование = Истина; - СтрокаРаздел.Подсистема = СсылкаПодсистемы; + Раздел = ХранилищеВарианта.Размещение.Добавить(); + Раздел.Использование = Истина; + Раздел.Подсистема = Подсистема; КонецЦикла; // Варианты отчетов создаются, поэтому конкурентная работа с ними исключена. - ВариантОбъект.Записать(); + ХранилищеВарианта.Записать(); КонецЦикла; - // Очистка ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("ПереносВариантовОтчетов", "ТаблицаВариантов", ""); ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); @@ -1075,7 +1049,7 @@ #Область СлужебныйПрограммныйИнтерфейс -// Получает объект отчета по ссылке варианта отчета. +// Получает объект отчета по ссылке на вариант отчета. // // Параметры: // Параметры - Структура - Параметры подключения и формирования отчета. @@ -1093,8 +1067,8 @@ // ** КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - Настройки отчета. // ** СхемаКомпоновкиДанных - СхемаКомпоновкиДанных - Схема отчета. // * КлючВарианта - Строка - Имя предопределенного или идентификатор пользовательского варианта отчета. -// * АдресСхемы - Строка - Адрес временного хранилища по которому размещена схема отчета. -// * Успех - Булево - Истина если удалось подключить отчет. +// * АдресСхемы - Строка - Адрес временного хранилища, по которому размещена схема отчета. +// * Успех - Булево - Истина, если удалось подключить отчет. // * ТекстОшибки - Строка - Текст ошибки. // // Места использования: @@ -1113,7 +1087,7 @@ Если ТипЗнч(Результат.НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") И Результат.КлючВарианта = Неопределено И Результат.Объект = Неопределено - И ТипЗнч(Результат.СсылкаВарианта) = ВариантыОтчетовКлиентСервер.ТипСсылкиДополнительногоОтчета() Тогда + И ТипЗнч(Результат.СсылкаВарианта) = ТипСсылкиДополнительногоОтчета() Тогда // Автоопределение ключа и ссылки варианта если передана только ссылка доп. отчета. Результат.СсылкаОтчета = Результат.СсылкаВарианта; Результат.СсылкаВарианта = Неопределено; @@ -1261,7 +1235,7 @@ НСтр("ru = 'Недостаточно прав доступа для записи вариантов дополнительного отчета ""%1"".'"), ТекущийОбъект.Наименование); ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки, ТекущийОбъект.Ссылка); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); Возврат; КонецЕсли; @@ -1272,17 +1246,17 @@ ПометкаУдаления = Истина; КонецЕсли; - ПредопределенныеВарианты = Новый СписокЗначений; + ПредопределенныеВарианты = Новый Соответствие; Если ПометкаУдаления = Ложь И ВнешнийОбъект <> Неопределено Тогда ОтчетМетаданные = ВнешнийОбъект.Метаданные(); СхемаКДМетаданные = ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных; Если СхемаКДМетаданные <> Неопределено Тогда СхемаКД = ВнешнийОбъект.ПолучитьМакет(СхемаКДМетаданные.Имя); Для Каждого ВариантНастроекКД Из СхемаКД.ВариантыНастроек Цикл - ПредопределенныеВарианты.Добавить(ВариантНастроекКД.Имя, ВариантНастроекКД.Представление); + ПредопределенныеВарианты[ВариантНастроекКД.Имя] = ВариантНастроекКД.Представление; КонецЦикла; Иначе - ПредопределенныеВарианты.Добавить("", ОтчетМетаданные.Представление()); + ПредопределенныеВарианты[""] = ОтчетМетаданные.Представление(); КонецЕсли; КонецЕсли; @@ -1290,43 +1264,42 @@ // помеченных на удаление интерактивно. ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка, - | ВариантыОтчетов.КлючВарианта, - | ВариантыОтчетов.Пользовательский, - | ВариантыОтчетов.ПометкаУдаления, - | ВариантыОтчетов.Наименование + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.Пользовательский КАК Пользовательский, + | ВариантыОтчетов.ПометкаУдаления КАК ПометкаУдаления |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ВариантыОтчетов.Отчет = &Отчет - | И НЕ(ВариантыОтчетов.Пользовательский - | И ВариантыОтчетов.ИнтерактивнаяПометкаУдаления)"; + | И (&ПометкаУдаления + | ИЛИ НЕ ВариантыОтчетов.Пользовательский + | ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления)"; - Запрос = Новый Запрос; + Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Отчет", ТекущийОбъект.Ссылка); - Если ПометкаУдаления = Истина Тогда - // При установке пометки удаления доп. отчета пометка удаления устанавливается для всех вариантов отчетов. - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "И НЕ(ВариантыОтчетов.Пользовательский - | И ВариантыОтчетов.ИнтерактивнаяПометкаУдаления)", - ""); - КонецЕсли; - Запрос.Текст = ТекстЗапроса; + // При установке пометки удаления доп. отчета пометка удаления устанавливается для всех вариантов отчетов. + Запрос.УстановитьПараметр("ПометкаУдаления", ПометкаУдаления = Истина); // Установка пометки удаления. - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл + ВариантыДополнительногоОтчета = Запрос.Выполнить().Выгрузить(); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВариантыОтчетов"); + ЭлементБлокировки.ИсточникДанных = ВариантыДополнительногоОтчета; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка"); + + Для каждого ВариантОтчета Из ВариантыДополнительногоОтчета Цикл ПометкаУдаленияВарианта = ПометкаУдаления; - ЭлементСписка = ПредопределенныеВарианты.НайтиПоЗначению(Выборка.КлючВарианта); - Если Не ПометкаУдаленияВарианта И Не Выборка.Пользовательский И ЭлементСписка = Неопределено Тогда + Представление = ПредопределенныеВарианты[ВариантОтчета.КлючВарианта]; + Если Не ПометкаУдаленияВарианта И Не ВариантОтчета.Пользовательский И Представление = Неопределено Тогда // Предопределенный вариант, который не найден в списке предопределенных для данного отчета. ПометкаУдаленияВарианта = Истина; КонецЕсли; - Если Выборка.ПометкаУдаления <> ПометкаУдаленияВарианта Тогда - ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Если ВариантОтчета.ПометкаУдаления <> ПометкаУдаленияВарианта Тогда + ВариантОбъект = ВариантОтчета.Ссылка.ПолучитьОбъект(); ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); Если ПометкаУдаленияВарианта Тогда ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Ложь); @@ -1336,30 +1309,30 @@ ВариантОбъект.УстановитьПометкуУдаления(ПометкаУдаленияВарианта); КонецЕсли; - Если ЭлементСписка <> Неопределено Тогда - ПредопределенныеВарианты.Удалить(ЭлементСписка); - Если Выборка.Наименование <> ЭлементСписка.Представление Тогда - ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ВариантОбъект.Наименование = ЭлементСписка.Представление; - ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ВнешнийОбъект); - // Обновляются существующие предопределенные варианты отчетов, поэтому конкурентная работа маловероятна. - ВариантОбъект.Записать(); - КонецЕсли; + Если Представление <> Неопределено Тогда + ПредопределенныеВарианты.Удалить(ВариантОтчета.КлючВарианта); + + ВариантОбъект = ВариантОтчета.Ссылка.ПолучитьОбъект(); + ЛокализацияСервер.ПриЧтенииПредставленийНаСервере(ВариантОбъект); + ВариантОбъект.Наименование = Представление; + ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ВнешнийОбъект); + ЛокализацияСервер.ПередЗаписьюНаСервере(ВариантОбъект); + ВариантОбъект.Записать(); КонецЕсли; КонецЦикла; Если Не ПометкаУдаления Тогда // Зарегистрировать новые - Для Каждого ЭлементСписка Из ПредопределенныеВарианты Цикл + Для Каждого Представление Из ПредопределенныеВарианты Цикл ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); ВариантОбъект.Отчет = ТекущийОбъект.Ссылка; ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный; - ВариантОбъект.КлючВарианта = ЭлементСписка.Значение; - ВариантОбъект.Наименование = ЭлементСписка.Представление; + ВариантОбъект.КлючВарианта = Представление.Ключ; + ВариантОбъект.Наименование = Представление.Значение; ВариантОбъект.Пользовательский = Ложь; ВариантОбъект.ВидимостьПоУмолчанию = Истина; ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ВнешнийОбъект); - // Создаются предопределенные варианты отчетов, поэтому конкурентная работа исключена. + ЛокализацияСервер.ПередЗаписьюНаСервере(ВариантОбъект); ВариантОбъект.Записать(); КонецЦикла; КонецЕсли; @@ -1371,9 +1344,9 @@ // Места использования: // ПользователиСлужебный.ПриПолученииПользовательскихВариантовОтчетов(). // -Процедура ПользовательскиеВариантыОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, ТаблицаВариантовОтчетов, СтандартнаяОбработка) Экспорт +Процедура ПользовательскиеВариантыОтчетов(ПолноеИмяОтчета, ПользовательИнформационнойБазы, ТаблицаВариантовОтчетов, СтандартнаяОбработка) Экспорт - КлючОтчета = "Отчет" + "." + ОтчетМетаданные.Имя; + КлючОтчета = ПолноеИмяОтчета; ВсеВариантыОтчета = КлючиВариантовОтчета(КлючОтчета, ПользовательИнформационнойБазы); Для Каждого ВариантОтчета Из ВсеВариантыОтчета Цикл @@ -1384,7 +1357,7 @@ И ЭлементСправочника.ТолькоДляАвтора Тогда СтрокаВариантовОтчетов = ТаблицаВариантовОтчетов.Добавить(); - СтрокаВариантовОтчетов.КлючОбъекта = "Отчет." + ОтчетМетаданные.Имя; + СтрокаВариантовОтчетов.КлючОбъекта = ПолноеИмяОтчета; СтрокаВариантовОтчетов.КлючВарианта = ВариантОтчета.Значение; СтрокаВариантовОтчетов.Представление = ВариантОтчета.Представление; СтрокаВариантовОтчетов.СтандартнаяОбработка = Ложь; @@ -1422,7 +1395,7 @@ // Функция ПараметрыОткрытия(ВариантСсылка) Экспорт ПараметрыОткрытия = Новый Структура("Ссылка, Отчет, ТипОтчета, ИмяОтчета, КлючВарианта, КлючЗамеров"); - Если ТипЗнч(ВариантСсылка) = ВариантыОтчетовКлиентСервер.ТипСсылкиДополнительногоОтчета() Тогда + Если ТипЗнч(ВариантСсылка) = ТипСсылкиДополнительногоОтчета() Тогда // Поддержка возможности прямого выбора ссылок дополнительных отчетов в рассылках отчетов. ПараметрыОткрытия.Отчет = ВариантСсылка; ПараметрыОткрытия.ТипОтчета = "Дополнительный"; @@ -1465,8 +1438,8 @@ Если ПараметрыОткрытия.ТипОтчета = "Внутренний" Или ПараметрыОткрытия.ТипОтчета = "Расширение" Тогда - МетаданныеОтчета = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектМетаданныхПоИдентификатору( - ПараметрыОткрытия.Отчет, Истина); + МетаданныеОтчета = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору( + ПараметрыОткрытия.Отчет, Ложь); Если ТипЗнч(МетаданныеОтчета) <> Тип("ОбъектМетаданных") Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -1497,50 +1470,50 @@ //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры служебного программного интерфейса. -// Актуализирует данные подсистемы с учетом режима работы программы. -// Пример использования: после очистки хранилищ настроек. +Функция ПараметрыОбновленияНастроек() Экспорт + + Настройки = Новый Структура; + Настройки.Вставить("Конфигурация", Истина); + Настройки.Вставить("Расширения", Ложь); + Настройки.Вставить("ОбщиеДанные", Истина); + Настройки.Вставить("РазделенныеДанные", Истина); + Настройки.Вставить("Оперативное", Истина); + Настройки.Вставить("Отложенное", Ложь); + Настройки.Вставить("ИндексироватьСхему",Ложь); // + Если ОбщегоНазначения.РазделениеВключено() Тогда + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Настройки.ОбщиеДанные = Ложь; + Иначе // Неразделенный сеанс. + Настройки.РазделенныеДанные = Ложь; + КонецЕсли; + ИначеЕсли ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда // АРМ. + Настройки.ОбщиеДанные = Ложь; + КонецЕсли; + + Настройки.Расширения = Настройки.РазделенныеДанные; + Возврат Настройки; + +КонецФункции + +// Актуализирует кэши метаданных подсистемы с учетом режима работы программы. +// Пример использования: после очистки хранилищ настроек. // // Параметры: -// Настройки - Структура - Необязательный. Настройки обновления. -// * Конфигурация - Булево - Необязательный. Обновлять кэши метаданных конфигурации. -// * Расширения - Булево - Необязательный. Обновлять кэши метаданных расширений. -// * ОбщиеДанные - Булево - Необязательный. Обновлять неразделенные данные. -// * РазделенныеДанные - Булево - Необязательный. Обновлять разделенные данные. -// * Оперативное - Булево - Необязательный. Оперативное обновление данных. -// * Отложенное - Булево - Необязательный. Отложенное обновление данных. -// * Полное - Булево - Необязательный. Не учитывать хеш-суммы при отложенном обновление данных. +// Настройки - Структура - со свойствами: +// * Конфигурация - Булево - Обновить неразделенный справочник ПредопределенныеВариантыОтчетов. +// * Расширения - Булево - Обновить разделенный справочник ПредопределенныеВариантыОтчетовРасширений. +// * ОбщиеДанные - Булево - Обновить неразделенный справочник ПредопределенныеВариантыОтчетов. +// * РазделенныеДанные - Булево - Обновить разделенный справочник ВариантыОтчетов. +// * Оперативное - Булево - Актуализировать список вариантов отчетов, их наименования и описания. +// * Отложенное - Булево - Заполнить наименований полей, параметров, отборов и ключевых слов для поиска. +// * ИндексироватьСхему - Булево - Всегда индексировать схемы (не учитывать хеш-суммы). // -Функция Обновить(Настройки = Неопределено) Экспорт +Функция Обновить(Знач Настройки = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); Если Настройки = Неопределено Тогда - Настройки = Новый Структура; - КонецЕсли; - - ПоУмолчанию = Новый Структура("Конфигурация, Расширения, ОбщиеДанные, РазделенныеДанные, Оперативное, Отложенное, Полное"); - Если Настройки.Количество() < ПоУмолчанию.Количество() Тогда - Если ОбщегоНазначения.РазделениеВключено() Тогда - Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - ПоУмолчанию.ОбщиеДанные = Ложь; - ПоУмолчанию.РазделенныеДанные = Истина; - Иначе // Неразделенный сеанс. - ПоУмолчанию.ОбщиеДанные = Истина; - ПоУмолчанию.РазделенныеДанные = Ложь; - КонецЕсли; - Иначе - Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда // АРМ. - ПоУмолчанию.ОбщиеДанные = Ложь; - ПоУмолчанию.РазделенныеДанные = Истина; - Иначе // Коробка. - ПоУмолчанию.ОбщиеДанные = Истина; - ПоУмолчанию.РазделенныеДанные = Истина; - КонецЕсли; - КонецЕсли; - ПоУмолчанию.Конфигурация = Истина; - ПоУмолчанию.Расширения = ПоУмолчанию.РазделенныеДанные; - ПоУмолчанию.Оперативное = Истина; - ПоУмолчанию.Отложенное = Ложь; - ПоУмолчанию.Полное = Ложь; - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Настройки, ПоУмолчанию, Ложь); + Настройки = ПараметрыОбновленияНастроек(); КонецЕсли; Результат = Новый Структура; @@ -1571,7 +1544,7 @@ Если Настройки.РазделенныеДанные Тогда Если Настройки.Конфигурация Тогда - ПромежуточныйРезультат = ОперативноеОбновлениеРазделенныхДанных("РазделенныеДанныеКонфигурации"); + ПромежуточныйРезультат = АктуализироватьВариантыОтчетов("РазделенныеДанныеКонфигурации"); Результат.Вставить("Оперативное_РазделенныеДанные_Конфигурация", ПромежуточныйРезультат); Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда Результат.ЕстьИзменения = Истина; @@ -1579,7 +1552,7 @@ КонецЕсли; Если Настройки.Расширения Тогда - ПромежуточныйРезультат = ОперативноеОбновлениеРазделенныхДанных("РазделенныеДанныеРасширений"); + ПромежуточныйРезультат = АктуализироватьВариантыОтчетов("РазделенныеДанныеРасширений"); Результат.Вставить("Оперативное_РазделенныеДанные_Расширения", ПромежуточныйРезультат); Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда Результат.ЕстьИзменения = Истина; @@ -1595,7 +1568,7 @@ Если Настройки.ОбщиеДанные Тогда Если Настройки.Конфигурация Тогда - ПромежуточныйРезультат = ОтложенноеОбновлениеДанных("ОбщиеДанныеКонфигурации", Настройки.Полное); + ПромежуточныйРезультат = ОбновитьИндексПоиска("ОбщиеДанныеКонфигурации", Настройки.ИндексироватьСхему); Результат.Вставить("Отложенное_ОбщиеДанные_Конфигурация", ПромежуточныйРезультат); Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда Результат.ЕстьИзменения = Истина; @@ -1603,7 +1576,7 @@ КонецЕсли; Если Настройки.Расширения Тогда - ПромежуточныйРезультат = ОтложенноеОбновлениеДанных("ОбщиеДанныеРасширений", Настройки.Полное); + ПромежуточныйРезультат = ОбновитьИндексПоиска("ОбщиеДанныеРасширений", Настройки.ИндексироватьСхему); Результат.Вставить("Отложенное_ОбщиеДанные_Расширения", ПромежуточныйРезультат); Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда Результат.ЕстьИзменения = Истина; @@ -1615,7 +1588,7 @@ Если Настройки.РазделенныеДанные Тогда Если Настройки.Конфигурация Тогда - ПромежуточныйРезультат = ОтложенноеОбновлениеДанных("РазделенныеДанныеКонфигурации", Настройки.Полное); + ПромежуточныйРезультат = ОбновитьИндексПоиска("РазделенныеДанныеКонфигурации", Настройки.ИндексироватьСхему); Результат.Вставить("Отложенное_РазделенныеДанные_Конфигурация", ПромежуточныйРезультат); Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда Результат.ЕстьИзменения = Истина; @@ -1623,7 +1596,7 @@ КонецЕсли; Если Настройки.Расширения Тогда - ПромежуточныйРезультат = ОтложенноеОбновлениеДанных("РазделенныеДанныеРасширений", Настройки.Полное); + ПромежуточныйРезультат = ОбновитьИндексПоиска("РазделенныеДанныеРасширений", Настройки.ИндексироватьСхему); Результат.Вставить("Отложенное_РазделенныеДанные_Расширения", ПромежуточныйРезультат); Если ПромежуточныйРезультат <> Неопределено И ПромежуточныйРезультат.ЕстьИзменения Тогда Результат.ЕстьИзменения = Истина; @@ -1633,6 +1606,7 @@ КонецЕсли; КонецЕсли; + ЗапланироватьЗаполнениеПредставлений(); Возврат Результат; КонецФункции @@ -1776,6 +1750,21 @@ НастройкиПечати.Вставить("КлючПараметровПечати", ОтчетыКлиентСервер.КлючУникальности(Результат.ПолноеИмя, Результат.КлючВарианта)); ЗаполнитьЗначенияСвойств(Результат.ТабличныйДокумент, НастройкиПечати); + // Установка колонтитулов. + + НастройкиКолонтитулов = Неопределено; + Результат.НастройкиКД.ДополнительныеСвойства.Свойство("НастройкиКолонтитулов", НастройкиКолонтитулов); + + НазваниеОтчета = ""; + Если ЗначениеЗаполнено(Результат.СсылкаВарианта) Тогда + НазваниеОтчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Результат.СсылкаВарианта, "Наименование"); + ИначеЕсли Результат.Метаданные <> Неопределено Тогда + НазваниеОтчета = Результат.Метаданные.Синоним; + КонецЕсли; + + УправлениеКолонтитулами.УстановитьКолонтитулы( + Результат.ТабличныйДокумент, НазваниеОтчета,, НастройкиКолонтитулов); + Результат.Успех = Истина; // Чистка мусора. @@ -1803,26 +1792,30 @@ СсылкиОтчетовРасширений = Новый Массив; СсылкиДопОтчетов = Новый Массив; + Дубли = Новый Соответствие; + УстановитьПривилегированныйРежим(Истина); Для Каждого Ссылка Из СсылкиОтчетов Цикл - Если Результат.Найти(Ссылка, "Ссылка") <> Неопределено Тогда + Если Дубли[Ссылка] <> Неопределено Тогда Продолжить; КонецЕсли; + Дубли[Ссылка] = Истина; + СтрокаТаблицы = Результат.Добавить(); СтрокаТаблицы.Ссылка = Ссылка; СтрокаТаблицы.Представление = Строка(Ссылка); Тип = ТипЗнч(Ссылка); Если Тип = Тип("СправочникСсылка.ВариантыОтчетов") Тогда - ДобавитьВМассив(СсылкиВариантов, Ссылка); + СсылкиВариантов.Добавить(Ссылка); Иначе СтрокаТаблицы.Отчет = Ссылка; СтрокаТаблицы.ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Тип, СтрокаТаблицы.Отчет); Если СтрокаТаблицы.ТипОтчетаСтрокой = "Внутренний" Тогда - ДобавитьВМассив(СсылкиОтчетовКонфигурации, СтрокаТаблицы.Отчет); + СсылкиОтчетовКонфигурации.Добавить(СтрокаТаблицы.Отчет); ИначеЕсли СтрокаТаблицы.ТипОтчетаСтрокой = "Расширение" Тогда - ДобавитьВМассив(СсылкиОтчетовРасширений, СтрокаТаблицы.Отчет); + СсылкиОтчетовРасширений.Добавить(СтрокаТаблицы.Отчет); ИначеЕсли СтрокаТаблицы.ТипОтчетаСтрокой = "Дополнительный" Тогда - ДобавитьВМассив(СсылкиДопОтчетов, СтрокаТаблицы.Отчет); + СсылкиДопОтчетов.Добавить(СтрокаТаблицы.Отчет); КонецЕсли; КонецЕсли; КонецЦикла; @@ -1839,16 +1832,20 @@ СтрокаТаблицы.Отчет = ОтчетЗначение; СтрокаТаблицы.ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Неопределено, СтрокаТаблицы.Отчет); Если СтрокаТаблицы.ТипОтчетаСтрокой = "Внутренний" Тогда - ДобавитьВМассив(СсылкиОтчетовКонфигурации, СтрокаТаблицы.Отчет); + СсылкиОтчетовКонфигурации.Добавить(СтрокаТаблицы.Отчет); ИначеЕсли СтрокаТаблицы.ТипОтчетаСтрокой = "Расширение" Тогда - ДобавитьВМассив(СсылкиОтчетовРасширений, СтрокаТаблицы.Отчет); + СсылкиОтчетовРасширений.Добавить(СтрокаТаблицы.Отчет); ИначеЕсли СтрокаТаблицы.ТипОтчетаСтрокой = "Дополнительный" Тогда - ДобавитьВМассив(СсылкиДопОтчетов, СтрокаТаблицы.Отчет); + СсылкиДопОтчетов.Добавить(СтрокаТаблицы.Отчет); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; + ОбщегоНазначенияКлиентСервер.СвернутьМассив(СсылкиОтчетовКонфигурации); + ОбщегоНазначенияКлиентСервер.СвернутьМассив(СсылкиОтчетовРасширений); + ОбщегоНазначенияКлиентСервер.СвернутьМассив(СсылкиДопОтчетов); + Если СсылкиОтчетовКонфигурации.Количество() > 0 Тогда ПриОпределенииДоступностиОтчетов(СсылкиОтчетовКонфигурации, Результат); КонецЕсли; @@ -1940,7 +1937,7 @@ Иначе Результат.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Результат.ОтчетМетаданные); - Результат.ТипОтчета = ВариантыОтчетовКлиентСервер.ТипОтчета(Результат.Отчет); + Результат.ТипОтчета = ТипОтчета(Результат.Отчет); КонецЕсли; @@ -1948,101 +1945,81 @@ КонецФункции +// Проверяет значение свойства отчета Хранилище вариантов. +// +// Параметры: +// МетаданныеОтчета - ОбъектМетаданных - Метаданные отчета, свойство которого проверяется. +// ТекстПредупреждения - Строка - Описание результата проверки. +// +// Возвращаемое значение: +// Булево - +// * Истина - Значение свойства отчета Хранилище вариантов равно ХранилищеВариантовОтчетов; +// * Ложь - Значение свойства не установлено или установлено, но ссылается +// на Хранилище вариантов, не предусмотренное подсистемой. +// +Функция ХранилищеВариантовДополнительногоОтчетаКорректное(МетаданныеОтчета, ТекстПредупреждения = "") Экспорт + Если МетаданныеОтчета.ХранилищеВариантов = Метаданные.ХранилищаНастроек.ХранилищеВариантовОтчетов Тогда + Возврат Истина; + КонецЕсли; + + ШаблонПредупреждения = НСтр("ru = 'Свойство отчета ""Хранилище вариантов"" %1. + |Сохранение (выбор) вариантов отчета будет работать в ограниченном режиме. + |Обратитесь к разработчику дополнительного (внешнего) отчета.'"); + + ПараметрПредупреждения = НСтр("ru = 'заполнено не корректно'"); + Если МетаданныеОтчета.ХранилищеВариантов = Неопределено Тогда + ПараметрПредупреждения = НСтр("ru = 'не заполнено'"); + КонецЕсли; + + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонПредупреждения, ПараметрПредупреждения); + + ОбщегоНазначения.СообщитьПользователю(ТекстПредупреждения); + + Возврат Ложь; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Для отчета по внедрению. -// Формирует дерево настроек и размещения предопределенных вариантов отчетов. -// Только для отчетов, подключенных к подсистеме. -// После завершения работы с настройками следует вызвать ОтчетыСервер.ОчиститьДеревоЗначений -// для очистки от циклических ссылок для корректного освобождение памяти. -// -// Возвращаемое значение: -// ДеревоЗначений - Настройки предопределенных вариантов отчетов, подключенных к подсистеме. -// -// Реквизиты для изменения: -// * Включен - Булево - Если Ложь, то вариант отчета не регистрируется в подсистеме. -// * ВидимостьПоУмолчанию - Булево - Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. -// * Наименование - Строка - Наименование варианта отчета. -// * Описание - Строка - Информация о варианте отчета. -// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. -// ** Ключ - ОбъектМетаданных - Подсистема, в которой размещается отчет или вариант отчета. -// ** Значение - Строка - Настройки размещения в подсистеме (группе). -// "" - Вывод отчета в подсистеме без специального выделение. -// "Важный" - Вывод отчета в подсистеме с выделением жирным шрифтом. -// "СмТакже" - Вывод отчета в группе "См. также". -// * ФункциональныеОпции - Массив из Строка - Имена функциональных опций варианта отчета. -// * НастройкиДляПоиска - Структура - Дополнительные настройки для поиска этого варианта отчета. -// Эти настройки необходимо задавать только если СКД не используется или используется не в полном объеме. -// Например, СКД может использоваться только для параметризации и получения данных, -// а вывод выполняться в фиксированный макет табличного документа. -// ** НаименованияПолей - Строка - Имена полей варианта отчета. -// ** НаименованияПараметровИОтборов - Строка - Имена настроек варианта отчета. -// ** КлючевыеСлова - Строка - Дополнительная терминология (в т.ч. специализированная или устаревшая). -// Разделитель терминов: Символы.ПС. -// ** ИменаМакетов - Строка - Используется вместо НаименованияПолей. -// Имена макетов табличных или текстовых документов, -// из которых требуется извлечь информацию о наименованиях полей. -// Имена перечисляются через запятую. -// К сожалению, в макетах отсутствует информация о связях полей и их представлений (которая есть в СКД), -// поэтому для более точной работы механизма поиска рекомендуется заполнять НаименованияПолей, а не -// ИменаМакетов. -// * ФорматНастроекСКД - Булево - Отчет использует типовой формат хранения настроек на механике СКД, -// а его основные формы поддерживают стандартную схему взаимодействия между формами (параметры и тип -// возвращаемого значения). -// Если Ложь, тогда для отчета отключаются проверки консистентности и некоторые механизмы, которые -// рассчитывают на типовой формат. -// * ОпределитьНастройкиФормы - Булево - Отчет имеет программный интерфейс для тесной интеграции с формой отчета, -// в том числе может переопределять некоторые настройки формы и подписываться на ее события. -// Если Истина и отчет подключен к общей форме ФормаОтчета, -// тогда в модуле объекта отчета следует определить процедуру по шаблону: -// -// // Настройки общей формы отчета подсистемы "Варианты отчетов". -// // -// // Параметры: -// // Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. -// // Неопределено когда вызов без контекста. -// // КлючВарианта - Строка, Неопределено - Имя предопределенного -// // или уникальный идентификатор пользовательского варианта отчета. -// // Неопределено когда вызов без контекста. -// // Настройки - Структура - см. возвращаемое значение -// // ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). -// // -// Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт -// // Код процедуры. -// КонецПроцедуры -// -// Служебные реквизиты (только для чтения): -// * Отчет - <см. Справочники.ВариантыОтчетов.Реквизиты.Отчет> - Полное имя или ссылка на отчет. -// * Метаданные - ОбъектМетаданных: Отчет - Метаданные отчета. -// * КлючВарианта - Строка - Имя варианта отчета. -// * ОписаниеПолучено - Булево - Флажок что описание строки уже получено. -// Описание получается методом ОписаниеВарианта(). -// * СистемнаяИнформация - Структура - Другая служебная информация. -// -Функция ДеревоПредопределенных(ФильтрПоТипуОтчетов = "Внутренний") Экспорт +Функция ПредопределенныеВариантыОтчетов(ТипОтчетов = "Внутренний") Экспорт РеквизитыСправочника = Метаданные.Справочники.ВариантыОтчетов.Реквизиты; - ДеревоВариантов = Новый ДеревоЗначений; - ДеревоВариантов.Колонки.Добавить("Отчет", РеквизитыСправочника.Отчет.Тип); - ДеревоВариантов.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); - ДеревоВариантов.Колонки.Добавить("ИспользуетСКД", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("КлючВарианта", РеквизитыСправочника.КлючВарианта.Тип); - ДеревоВариантов.Колонки.Добавить("ОписаниеПолучено", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("Включен", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("ВидимостьПоУмолчанию", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("Наименование", ОписаниеТиповСтрока()); - ДеревоВариантов.Колонки.Добавить("Описание", ОписаниеТиповСтрока()); - ДеревоВариантов.Колонки.Добавить("Размещение", Новый ОписаниеТипов("Соответствие")); - ДеревоВариантов.Колонки.Добавить("НастройкиДляПоиска", Новый ОписаниеТипов("Структура")); - ДеревоВариантов.Колонки.Добавить("СистемнаяИнформация", Новый ОписаниеТипов("Структура")); - ДеревоВариантов.Колонки.Добавить("Тип", ОписаниеТиповСтрока()); - ДеревоВариантов.Колонки.Добавить("ЭтоВариант", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("ФункциональныеОпции", Новый ОписаниеТипов("Массив")); - ДеревоВариантов.Колонки.Добавить("ГруппироватьПоОтчету", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("КлючЗамеров", Новый ОписаниеТипов("Строка")); - ДеревоВариантов.Колонки.Добавить("ОсновнойВариант"); - ДеревоВариантов.Колонки.Добавить("ФорматНастроекСКД", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("ОпределитьНастройкиФормы", Новый ОписаниеТипов("Булево")); + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Отчет", РеквизитыСправочника.Отчет.Тип); + Результат.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); + Результат.Колонки.Добавить("ИспользуетСКД", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("КлючВарианта", РеквизитыСправочника.КлючВарианта.Тип); + Результат.Колонки.Добавить("ОписаниеПолучено", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("Включен", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ВидимостьПоУмолчанию", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("Наименование", ОписаниеТиповСтрока()); + Результат.Колонки.Добавить("Описание", ОписаниеТиповСтрока()); + Результат.Колонки.Добавить("Размещение", Новый ОписаниеТипов("Соответствие")); + Результат.Колонки.Добавить("НастройкиДляПоиска", Новый ОписаниеТипов("Структура")); + Результат.Колонки.Добавить("СистемнаяИнформация", Новый ОписаниеТипов("Структура")); + Результат.Колонки.Добавить("Тип", ОписаниеТиповСтрока()); + Результат.Колонки.Добавить("ЭтоВариант", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ФункциональныеОпции", Новый ОписаниеТипов("Массив")); + Результат.Колонки.Добавить("ГруппироватьПоОтчету", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("КлючЗамеров", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ОсновнойВариант", РеквизитыСправочника.КлючВарианта.Тип); + Результат.Колонки.Добавить("ФорматНастроекСКД", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ОпределитьНастройкиФормы", Новый ОписаниеТипов("Булево")); + + // Вспомогательные сведения для процедуры ОбновитьНастройкиПредопределенных. + Результат.Колонки.Добавить("НайденВБазеДанных", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ВариантИзБазы"); // строка выборки из таблицы + Результат.Колонки.Добавить("ВариантРодитель", Новый ОписаниеТипов(Новый ОписаниеТипов("СправочникСсылка.ПредопределенныеВариантыОтчетов"), + "СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений")); + + Результат.Индексы.Добавить("Отчет"); + Результат.Индексы.Добавить("Отчет,ЭтоВариант"); + Результат.Индексы.Добавить("Отчет,КлючВарианта"); + Результат.Индексы.Добавить("Отчет,КлючВарианта,ЭтоВариант"); + Результат.Индексы.Добавить("КлючВарианта"); + Результат.Индексы.Добавить("Метаданные,КлючВарианта"); + Результат.Индексы.Добавить("Метаданные,ЭтоВариант"); ГруппироватьПоОтчетам = ГлобальныеНастройки().ВыводитьОтчетыВместоВариантов; РазрешеноИндексирование = РазрешеноИндексированиеНеразделенныхДанных(); @@ -2052,10 +2029,13 @@ МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); КонецЕсли; + ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах(); КэшФлажкаХранилища = Неопределено; - Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл - Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() И ОтчетМетаданные.РасширениеКонфигурации() <> Неопределено Тогда + НастройкиДляПоиска = Новый Структура("НаименованияПолей, НаименованияПараметровИОтборов, КлючевыеСлова, ИменаМакетов"); + + Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл + Если Не ДоступноИспользованиеРазделенныхДанных И ОтчетМетаданные.РасширениеКонфигурации() <> Неопределено Тогда Продолжить; КонецЕсли; @@ -2064,47 +2044,45 @@ КонецЕсли; ОтчетСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные); - ОтчетТип = ВариантыОтчетовКлиентСервер.ТипОтчета(ОтчетСсылка, Истина); - Если ФильтрПоТипуОтчетов <> Неопределено И ФильтрПоТипуОтчетов <> ОтчетТип Тогда + ОтчетТип = ТипОтчета(ОтчетСсылка, Истина); + Если ТипОтчетов <> Неопределено И ТипОтчетов <> ОтчетТип Тогда Продолжить; КонецЕсли; ЕстьРеквизиты = (ОтчетМетаданные.Реквизиты.Количество() > 0); // Настройки. - СтрокаОтчет = ДеревоВариантов.Строки.Добавить(); - СтрокаОтчет.Отчет = ОтчетСсылка; - СтрокаОтчет.Метаданные = ОтчетМетаданные; - СтрокаОтчет.Включен = Истина; - СтрокаОтчет.ВидимостьПоУмолчанию = Истина; - СтрокаОтчет.Описание = ОтчетМетаданные.Пояснение; - СтрокаОтчет.Наименование = ОтчетМетаданные.Представление(); - СтрокаОтчет.ОписаниеПолучено = Истина; - СтрокаОтчет.Тип = ОтчетТип; - СтрокаОтчет.ЭтоВариант = Ложь; - СтрокаОтчет.ГруппироватьПоОтчету = ГруппироватьПоОтчетам; - СтрокаОтчет.ИспользуетСКД = (ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных <> Неопределено); - СтрокаОтчет.ФорматНастроекСКД = СтрокаОтчет.ИспользуетСКД И Не ЕстьРеквизиты; + ОписаниеОтчета = Результат.Добавить(); + ОписаниеОтчета.Отчет = ОтчетСсылка; + ОписаниеОтчета.Метаданные = ОтчетМетаданные; + ОписаниеОтчета.Включен = Истина; + ОписаниеОтчета.ВидимостьПоУмолчанию = Истина; + ОписаниеОтчета.Описание = ОтчетМетаданные.Пояснение; + ОписаниеОтчета.Наименование = ОтчетМетаданные.Представление(); + ОписаниеОтчета.ОписаниеПолучено = Истина; + ОписаниеОтчета.Тип = ОтчетТип; + ОписаниеОтчета.ГруппироватьПоОтчету = ГруппироватьПоОтчетам; + ОписаниеОтчета.ИспользуетСКД = (ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных <> Неопределено); + ОписаниеОтчета.ФорматНастроекСКД = ОписаниеОтчета.ИспользуетСКД И Не ЕстьРеквизиты; + ОписаниеОтчета.НастройкиДляПоиска = НастройкиДляПоиска; - // Подсистемы. - Найденные = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетМетаданные", ОтчетМетаданные)); + // Размещение. + Найденные = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетМетаданные", ОтчетМетаданные)); Для Каждого СтрокаПодсистема Из Найденные Цикл - СтрокаОтчет.Размещение.Вставить(СтрокаПодсистема.ПодсистемаМетаданные, ""); + ОписаниеОтчета.Размещение.Вставить(СтрокаПодсистема.ПодсистемаМетаданные, ""); КонецЦикла; - // Поиск. - СтрокаОтчет.НастройкиДляПоиска = Новый Структура("НаименованияПолей, НаименованияПараметровИОтборов, КлючевыеСлова, ИменаМакетов"); - // Предопределенные варианты. - Если СтрокаОтчет.ИспользуетСКД Тогда + Если ОписаниеОтчета.ИспользуетСКД Тогда ОтчетМенеджер = Отчеты[ОтчетМетаданные.Имя]; СхемаКД = Неопределено; ВариантыНастроек = Неопределено; Попытка СхемаКД = ОтчетМенеджер.ПолучитьМакет(ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных.Имя); Исключение - ТекстОшибки = НСтр("ru = 'Не удалось прочитать схему отчета:'"); - ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось прочитать схему отчета: + |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Предупреждение, ТекстОшибки, ОтчетМетаданные); КонецПопытки; // Чтение настроек вариантов отчета из схемы. @@ -2112,8 +2090,9 @@ Попытка ВариантыНастроек = СхемаКД.ВариантыНастроек; Исключение - ТекстОшибки = НСтр("ru = 'Не удалось прочитать список вариантов отчета:'"); - ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось прочитать список вариантов отчета: + |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Предупреждение, ТекстОшибки, ОтчетМетаданные); КонецПопытки; КонецЕсли; @@ -2122,32 +2101,35 @@ Попытка ВариантыНастроек = ОтчетМенеджер.ВариантыНастроек(); Исключение - ТекстОшибки = НСтр("ru = 'Не удалось прочитать список вариантов отчета из модуля менеджера:'"); - ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось прочитать список вариантов отчета из модуля менеджера: + |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки, ОтчетМетаданные); КонецПопытки; КонецЕсли; // Регистрация найденных вариантов. Если ВариантыНастроек <> Неопределено Тогда Для Каждого ВариантНастроекКД Из ВариантыНастроек Цикл - Вариант = СтрокаОтчет.Строки.Добавить(); - Вариант.Отчет = СтрокаОтчет.Отчет; - Вариант.КлючВарианта = ВариантНастроекКД.Имя; - Вариант.Наименование = ВариантНастроекКД.Представление; - Вариант.Тип = ОтчетТип; - Вариант.ЭтоВариант = Истина; - Если СтрокаОтчет.ОсновнойВариант = Неопределено Тогда - СтрокаОтчет.ОсновнойВариант = Вариант; + ОписаниеВарианта = Результат.Добавить(); + ОписаниеВарианта.Отчет = ОписаниеОтчета.Отчет; + ОписаниеВарианта.КлючВарианта = ВариантНастроекКД.Имя; + ОписаниеВарианта.Наименование = ВариантНастроекКД.Представление; + Если ПустаяСтрока(ОписаниеВарианта.Наименование) Тогда // если конфигурация частично локализована + ОписаниеВарианта.Наименование = ?(ОписаниеВарианта.КлючВарианта <> "Основной", ОписаниеВарианта.КлючВарианта, // не локализуется + ОписаниеОтчета.Наименование + "." + ОписаниеВарианта.КлючВарианта); + КонецЕсли; + ОписаниеВарианта.Тип = ОтчетТип; + ОписаниеВарианта.ЭтоВариант = Истина; + Если ОписаниеОтчета.ОсновнойВариант = Неопределено Тогда + ОписаниеОтчета.ОсновнойВариант = ОписаниеВарианта.КлючВарианта; КонецЕсли; Если РазрешеноИндексирование И ТипЗнч(ВариантНастроекКД) = Тип("ВариантНастроекКомпоновкиДанных") Тогда Попытка - Вариант.СистемнаяИнформация.Вставить("НастройкиКД", ВариантНастроекКД.Настройки); + ОписаниеВарианта.СистемнаяИнформация.Вставить("НастройкиКД", ВариантНастроекКД.Настройки); Исключение ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось прочитать настройки варианта ""%1"":'"), - Вариант.КлючВарианта) - + Символы.ПС - + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + НСтр("ru = 'Не удалось прочитать настройки варианта ""%1"": + |%2'"), ОписаниеВарианта.КлючВарианта, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Предупреждение, ТекстОшибки, ОтчетМетаданные); КонецПопытки; КонецЕсли; @@ -2155,56 +2137,66 @@ КонецЕсли; КонецЕсли; - // Сам отчет. - Если СтрокаОтчет.ОсновнойВариант = Неопределено Тогда - Вариант = СтрокаОтчет.Строки.Добавить(); - ЗаполнитьЗначенияСвойств(Вариант, СтрокаОтчет, "Отчет, Наименование"); - Вариант.КлючВарианта = ""; - Вариант.ЭтоВариант = Истина; - СтрокаОтчет.ОсновнойВариант = Вариант; + Если ПустаяСтрока(ОписаниеОтчета.ОсновнойВариант) Тогда + ОписаниеВарианта = Результат.Добавить(); + ЗаполнитьЗначенияСвойств(ОписаниеВарианта, ОписаниеОтчета, "Отчет, Наименование"); + ОписаниеВарианта.КлючВарианта = ""; + ОписаниеВарианта.ЭтоВариант = Истина; + ОписаниеОтчета.ОсновнойВариант = ОписаниеВарианта.КлючВарианта; КонецЕсли; // Обработка отчетов, включенных в состав подсистемы ПодключаемыеОтчетыИОбработки. Если ЕстьПодключаемыеКоманды И СоставПодключаемыхОтчетовИОбработок.Содержит(ОтчетМетаданные) Тогда НастройкиПоставщика = МодульПодключаемыеКоманды.НастройкиПодключаемогоОбъекта(ОтчетМетаданные.ПолноеИмя()); Если НастройкиПоставщика.ОпределитьНастройкиФормы Тогда - СтрокаОтчет.ОпределитьНастройкиФормы = Истина; + ОписаниеОтчета.ОпределитьНастройкиФормы = Истина; КонецЕсли; Если НастройкиПоставщика.НастроитьВариантыОтчета Тогда - НастроитьОтчетВМодулеМенеджера(ДеревоВариантов, ОтчетМетаданные); + НастроитьОтчетВМодулеМенеджера(Результат, ОтчетМетаданные); КонецЕсли; КонецЕсли; КонецЦикла; // Механизмы расширения. - Если ФильтрПоТипуОтчетов = Неопределено Или ФильтрПоТипуОтчетов = "Внутренний" Тогда - НастроитьОтчетВМодулеМенеджера(ДеревоВариантов, Метаданные.Отчеты.УниверсальныйОтчет); - // Подключаемые обработчики подсистем БСП. - ИнтеграцияПодсистемБСП.ПриНастройкеВариантовОтчетов(ДеревоВариантов); - // Переопределяемый модуль конфигурации. - ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(ДеревоВариантов); + Если ТипОтчетов = Неопределено Или ТипОтчетов = "Внутренний" Тогда + НастроитьОтчетВМодулеМенеджера(Результат, Метаданные.Отчеты.УниверсальныйОтчет); + ИнтеграцияПодсистемБСП.ПриНастройкеВариантовОтчетов(Результат); + ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(Результат); КонецЕсли; - // Определение основных вариантов. - Для Каждого СтрокаОтчет Из ДеревоВариантов.Строки Цикл - Если СтрокаОтчет.ГруппироватьПоОтчету = Истина Тогда - Если СтрокаОтчет.ОсновнойВариант = Неопределено - Или Не СтрокаОтчет.ОсновнойВариант.Включен Тогда - Для Каждого Вариант Из СтрокаОтчет.Строки Цикл - ЗаполнитьОписаниеСтрокиВарианта(Вариант, СтрокаОтчет); - Если Вариант.Включен Тогда - СтрокаОтчет.ОсновнойВариант = Вариант; - Вариант.ВидимостьПоУмолчанию = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Иначе - СтрокаОтчет.ОсновнойВариант = Неопределено; + // Определение основных вариантов отчетов. + Для Каждого ОписаниеОтчета Из Результат.НайтиСтроки(Новый Структура("ЭтоВариант", Ложь)) Цикл + + Если Не ОписаниеОтчета.ГруппироватьПоОтчету Тогда + ОписаниеОтчета.ОсновнойВариант = ""; + Продолжить; КонецЕсли; + + ЕстьОсновойВариант = Не ПустаяСтрока(ОписаниеОтчета.ОсновнойВариант); + ОсновойВариантВключен = Ложь; + Если ЕстьОсновойВариант Тогда + Описание = Результат.НайтиСтроки(Новый Структура("Отчет,КлючВарианта,ЭтоВариант", + ОписаниеОтчета.Отчет, ОписаниеОтчета.ОсновнойВариант, Истина))[0]; + ОсновойВариантВключен = Описание.Включен; + КонецЕсли; + + Если Не ЕстьОсновойВариант Или Не ОсновойВариантВключен Тогда + Для каждого ОписаниеВарианта Из Результат.НайтиСтроки(Новый Структура("Отчет", ОписаниеОтчета.Отчет)) Цикл + Если ПустаяСтрока(ОписаниеВарианта.КлючВарианта) Тогда + Продолжить; + КонецЕсли; + ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта, ОписаниеОтчета); + Если ОписаниеВарианта.Включен Тогда + ОписаниеОтчета.ОсновнойВариант = ОписаниеВарианта.КлючВарианта; + ОписаниеВарианта.ВидимостьПоУмолчанию = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; - Возврат ДеревоВариантов; + Возврат Результат; КонецФункции // Определяет подключен-ли отчет к хранилищу вариантов отчетов. @@ -2330,11 +2322,11 @@ Обработчик.ОбщиеДанные = Истина; Иначе Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.ОбщиеДанные = Ложь; // Для коробки без разницы, но при значении Истина механика обновления кидает исключение. + Обработчик.ОбщиеДанные = Ложь; КонецЕсли; Обработчик.Идентификатор = Новый УникальныйИдентификатор("38d2a135-53e0-4c68-9bd6-3d6df9b9dcfb"); Обработчик.Версия = "*"; - Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеОбщихДанныхКонфигурацииПолное"; + Обработчик.Процедура = "ВариантыОтчетов.ОбновитьИндексПоискаПредопределенныхВариантовОтчетов"; Обработчик.Комментарий = НСтр("ru = 'Обновление индекса поиска отчетов, предусмотренных в программе.'"); КонецЕсли; @@ -2344,7 +2336,7 @@ Обработчик.ОбщиеДанные = Ложь; Обработчик.Идентификатор = Новый УникальныйИдентификатор("5ba93197-230b-4ac8-9abb-ab3662e5ff76"); Обработчик.Версия = "*"; - Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеРазделенныхДанныхКонфигурацииПолное"; + Обработчик.Процедура = "ВариантыОтчетов.ОбновитьИндексПоискаПользовательскихВариантовОтчетов"; Обработчик.Комментарий = НСтр("ru = 'Обновление индекса поиска отчетов, сохраненных пользователями.'"); // 3.4. Установить соответствующие ссылки на идентификаторы объектов метаданных в настройках вариантов универсального отчета. @@ -2434,15 +2426,13 @@ // См. РегистрыСведений.ПараметрыРаботыВерсийРасширений.ЗаполнитьВсеПараметрыРаботыРасширений. Процедура ПриЗаполненииВсехПараметровРаботыРасширений() Экспорт - Настройки = Новый Структура; - Настройки.Вставить("Конфигурация", Ложь); - Настройки.Вставить("Расширения", Истина); - - Настройки.Вставить("ОбщиеДанные", Истина); - Настройки.Вставить("РазделенныеДанные", Истина); - Настройки.Вставить("Оперативное", Истина); - Настройки.Вставить("Отложенное", Истина); - Настройки.Вставить("Полное", Истина); + Настройки = ПараметрыОбновленияНастроек(); + Настройки.Конфигурация = Ложь; + Настройки.Расширения = Истина; + Настройки.ОбщиеДанные = Истина; + Настройки.РазделенныеДанные = Истина; + Настройки.Оперативное = Истина; + Настройки.Отложенное = Истина; Обновить(Настройки); @@ -2603,6 +2593,11 @@ #Область СлужебныеПроцедурыИФункции +// Представление подсистемы. Используется при записи в журнал регистрации и в других местах. +Функция НаименованиеПодсистемы(КодЯзыка) + Возврат НСтр("ru = 'Варианты отчетов'", ?(КодЯзыка = Неопределено, ОбщегоНазначения.КодОсновногоЯзыка(), КодЯзыка)); +КонецФункции + // Инициализация отчетов. // Получает объект отчета по ссылке варианта отчета. @@ -2650,8 +2645,8 @@ Если ТипЗнч(Результат.Ссылка) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Или ТипЗнч(Результат.Ссылка) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда - Результат.Метаданные = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектМетаданныхПоИдентификатору( - Результат.Ссылка, Истина); + Результат.Метаданные = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору( + Результат.Ссылка, Ложь); Если ТипЗнч(Результат.Метаданные) <> Тип("ОбъектМетаданных") Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -2708,43 +2703,35 @@ ПоместитьВоВременноеХранилище(Результат, АдресХранилища); КонецПроцедуры -// Заполняет описание настроек для строки варианта отчета если оно еще не заполнено. +// Заполняет описание настроек для строки варианта отчета, если оно еще не заполнено. // -// Параметры: -// СтрокаВариант - СтрокаДерева - Описание настроек варианта отчета. -// СтрокаОтчет - СтрокаДерева - Необязательный. Описание настроек отчета. -// -Процедура ЗаполнитьОписаниеСтрокиВарианта(СтрокаВариант, СтрокаОтчет = Неопределено) Экспорт - Если СтрокаВариант.ОписаниеПолучено Тогда +Процедура ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта, ОписаниеОтчета) + Если ОписаниеВарианта.ОписаниеПолучено Тогда Возврат; КонецЕсли; - Если СтрокаОтчет = Неопределено Тогда - СтрокаОтчет = СтрокаВариант.Родитель; - КонецЕсли; - // Флажок изменения настроек - СтрокаВариант.ОписаниеПолучено = Истина; + ОписаниеВарианта.ОписаниеПолучено = Истина; // Копирование настроек отчета. - ЗаполнитьЗначенияСвойств(СтрокаВариант, СтрокаОтчет, "Включен, ВидимостьПоУмолчанию, ГруппироватьПоОтчету"); + ЗаполнитьЗначенияСвойств(ОписаниеВарианта, ОписаниеОтчета, "Включен, ВидимостьПоУмолчанию, ГруппироватьПоОтчету"); - Если СтрокаВариант = СтрокаОтчет.ОсновнойВариант Тогда + Если ОписаниеВарианта.КлючВарианта = ОписаниеОтчета.ОсновнойВариант Тогда // Вариант "по умолчанию". - СтрокаВариант.Описание = СтрокаОтчет.Описание; - СтрокаВариант.ВидимостьПоУмолчанию = Истина; + ОписаниеВарианта.Описание = ОписаниеОтчета.Описание; + ОписаниеВарианта.ВидимостьПоУмолчанию = Истина; Иначе // Предопределенный вариант. - Если СтрокаВариант.ГруппироватьПоОтчету Тогда - СтрокаВариант.ВидимостьПоУмолчанию = Ложь; + Если ОписаниеВарианта.ГруппироватьПоОтчету Тогда + ОписаниеВарианта.ВидимостьПоУмолчанию = Ложь; КонецЕсли; КонецЕсли; - СтрокаВариант.Размещение = ОбщегоНазначенияКлиентСервер.СкопироватьСоответствие(СтрокаОтчет.Размещение); - СтрокаВариант.ФункциональныеОпции = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(СтрокаОтчет.ФункциональныеОпции); - СтрокаВариант.НастройкиДляПоиска = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СтрокаОтчет.НастройкиДляПоиска); - СтрокаВариант.КлючЗамеров = ОбщегоНазначения.СократитьСтрокуКонтрольнойСуммой("Отчет." + СтрокаОтчет.Метаданные.Имя - + "." + СтрокаВариант.КлючВарианта, 135); + ОписаниеВарианта.Размещение = ОбщегоНазначения.СкопироватьРекурсивно(ОписаниеОтчета.Размещение); + ОписаниеВарианта.ФункциональныеОпции = ОбщегоНазначения.СкопироватьРекурсивно(ОписаниеОтчета.ФункциональныеОпции); + ОписаниеВарианта.НастройкиДляПоиска = ОбщегоНазначения.СкопироватьРекурсивно(ОписаниеОтчета.НастройкиДляПоиска); + ОписаниеВарианта.КлючЗамеров = ОбщегоНазначения.СократитьСтрокуКонтрольнойСуммой("Отчет." + ОписаниеОтчета.Метаданные.Имя + + "." + ОписаниеВарианта.КлючВарианта, 135); КонецПроцедуры @@ -2771,25 +2758,26 @@ // Устанавливает режим вывода вариантов отчета в панелях отчетов. // // Параметры: -// ДеревоВариантов - ДеревоЗначений - Передается "как есть" из процедуры НастроитьВариантыОтчетов. -// Отчет - СтрокаДереваЗначений, ОбъектМетаданных: Отчет - Описание настроек или метаданные отчета. +// Настройки - ТаблицаЗначений - Передается "как есть" из процедуры НастроитьВариантыОтчетов. +// Отчет - СтрокаТаблицыЗначений, ОбъектМетаданных: Отчет - Описание настроек или метаданные отчета. // ГруппироватьПоОтчетам - Булево - Режим вывода в панели отчетов: // - Истина - По отчетам (варианты скрыты, а отчет включен и видим). // - Ложь - По вариантам (варианты видимы, а отчет отключен). // -Процедура УстановитьРежимВыводаОтчетаВПанеляхОтчетов(ДеревоВариантов, Отчет, ГруппироватьПоОтчетам) - Если ТипЗнч(Отчет) = Тип("СтрокаДереваЗначений") Тогда - СтрокаОтчет = Отчет; +Процедура УстановитьРежимВыводаОтчетаВПанеляхОтчетов(Настройки, Отчет, ГруппироватьПоОтчетам) + Если ТипЗнч(Отчет) = Тип("СтрокаТаблицыЗначений") Тогда + ОписаниеОтчета = Отчет; Иначе - СтрокаОтчет = ДеревоВариантов.Строки.Найти(Отчет, "Метаданные", Ложь); - Если СтрокаОтчет = Неопределено Тогда + ОписаниеОтчета = Настройки.НайтиСтроки(Новый Структура("Метаданные,ЭтоВариант", Отчет, Ложь)); + Если ОписаниеОтчета.Количество() <> 1 Тогда ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Предупреждение, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Отчет ""%1"" не подключен к подсистеме.'"), Отчет.Имя)); Возврат; КонецЕсли; + ОписаниеОтчета = ОписаниеОтчета[0]; КонецЕсли; - СтрокаОтчет.ГруппироватьПоОтчету = ГруппироватьПоОтчетам; + ОписаниеОтчета.ГруппироватьПоОтчету = ГруппироватьПоОтчетам; КонецПроцедуры // Формирует таблицу замен старых ключей вариантов на актуальные. @@ -2819,6 +2807,7 @@ Изменения.Колонки.Отчет.Имя = "ОтчетМетаданные"; Изменения.Колонки.Добавить("Отчет", РеквизитыВариантов.Отчет.Тип); + Изменения.Индексы.Добавить("ОтчетМетаданные, СтароеИмяВарианта"); // Проверить корректность замен. Для Каждого Изменение Из Изменения Цикл @@ -2868,7 +2857,7 @@ // * ПодсистемаМетаданные - ОбъектМетаданных: Подсистема. // * ПодсистемаПолноеИмя - Строка. // -Функция РазмещениеОтчетовВПодсистемах(Результат = Неопределено, ПодсистемаРодитель = Неопределено) +Функция РазмещениеОтчетовВПодсистемах(Результат = Неопределено, РодительскаяПодсистема = Неопределено) Если Результат = Неопределено Тогда ПолноеИмяОписаниеТипов = Метаданные.Справочники.ИдентификаторыОбъектовМетаданных.Реквизиты.ПолноеИмя.Тип; @@ -2879,15 +2868,16 @@ Результат.Колонки.Добавить("ПодсистемаПолноеИмя", ПолноеИмяОписаниеТипов); Результат.Индексы.Добавить("ОтчетПолноеИмя"); + Результат.Индексы.Добавить("ОтчетМетаданные"); - ПодсистемаРодитель = Метаданные; + РодительскаяПодсистема = Метаданные; КонецЕсли; // Перебор вложенных подсистем родителя. - Для Каждого ПодсистемаМетаданные Из ПодсистемаРодитель.Подсистемы Цикл + Для Каждого ДочерняяПодсистема Из РодительскаяПодсистема.Подсистемы Цикл - Если ПодсистемаМетаданные.ВключатьВКомандныйИнтерфейс Тогда - Для Каждого ОтчетМетаданные Из ПодсистемаМетаданные.Состав Цикл + Если ДочерняяПодсистема.ВключатьВКомандныйИнтерфейс Тогда + Для Каждого ОтчетМетаданные Из ДочерняяПодсистема.Состав Цикл Если Не Метаданные.Отчеты.Содержит(ОтчетМетаданные) Тогда Продолжить; КонецЕсли; @@ -2895,13 +2885,13 @@ СтрокаТаблицы = Результат.Добавить(); СтрокаТаблицы.ОтчетМетаданные = ОтчетМетаданные; СтрокаТаблицы.ОтчетПолноеИмя = ОтчетМетаданные.ПолноеИмя(); - СтрокаТаблицы.ПодсистемаМетаданные = ПодсистемаМетаданные; - СтрокаТаблицы.ПодсистемаПолноеИмя = ПодсистемаМетаданные.ПолноеИмя(); + СтрокаТаблицы.ПодсистемаМетаданные = ДочерняяПодсистема; + СтрокаТаблицы.ПодсистемаПолноеИмя = ДочерняяПодсистема.ПолноеИмя(); КонецЦикла; КонецЕсли; - РазмещениеОтчетовВПодсистемах(Результат, ПодсистемаМетаданные); + РазмещениеОтчетовВПодсистемах(Результат, ДочерняяПодсистема); КонецЦикла; Возврат Результат; @@ -3028,8 +3018,10 @@ Функция ГлобальныеНастройки() Экспорт Результат = Новый Структура; Результат.Вставить("ВыводитьОтчетыВместоВариантов", Ложь); - Результат.Вставить("ВыводитьОписания", Истина); - Результат.Вставить("РазрешеноИзменятьВарианты", Истина); + Результат.Вставить("ВыводитьОписания", Истина); + Результат.Вставить("РазрешеноИзменятьВарианты", Истина); + Результат.Вставить("ВыводитьОбщиеНастройкиКолонтитулов", Ложь); + Результат.Вставить("ВыводитьИндивидуальныеНастройкиКолонтитулов", Ложь); Результат.Вставить("Поиск", Новый Структура); Результат.Поиск.Вставить("ПодсказкаВвода", НСтр("ru = 'Наименование, поле или автор отчета'")); @@ -3118,14 +3110,14 @@ ОбъектМетаданных = Метаданные.Справочники.ВариантыОтчетов; Данные = ВариантОтчета; КонецЕсли; - ЗаписьЖурналаРегистрации(ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), + ЗаписьЖурналаРегистрации(НаименованиеПодсистемы(Неопределено), Уровень, ОбъектМетаданных, Данные, Сообщение); КонецПроцедуры // Записывает в журнал регистрации событие запуска процедуры. Процедура ЗаписатьВЖурналЗапускПроцедуры(ИмяПроцедуры) - ЗаписьЖурналаРегистрации(ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), + ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(НаименованиеПодсистемы(Неопределено), УровеньЖурналаРегистрации.Информация,,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск процедуры ""%1"".'"), ИмяПроцедуры)); @@ -3139,7 +3131,7 @@ Текст = Текст + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменено %1 объектов.'"), ИзмененоОбъектов); КонецЕсли; - ЗаписьЖурналаРегистрации(ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), + ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(НаименованиеПодсистемы(Неопределено), УровеньЖурналаРегистрации.Информация, , , Текст); КонецПроцедуры @@ -3235,28 +3227,30 @@ // и параметры вариантов отчетов в регистре. Процедура ОперативноеОбновлениеОбщихДанныхКонфигурации(ПараметрыОбновления) Экспорт - ОперативноеОбновлениеОбщихДанных("ОбщиеДанныеКонфигурации", ПараметрыОбновления.РазделенныеОбработчики); + Режим = "ОбщиеДанныеКонфигурации"; + НачатьЗаполнениеПредставлений(Режим, Истина); + ОперативноеОбновлениеОбщихДанных(Режим, ПараметрыОбновления.РазделенныеОбработчики); + + ЗапланироватьЗаполнениеПредставлений(); КонецПроцедуры // [*] Актуализирует данные справочника ВариантыОтчетов в части отчетов конфигурации. Процедура ОперативноеОбновлениеРазделенныхДанныхКонфигурации() Экспорт - ОперативноеОбновлениеРазделенныхДанных("РазделенныеДанныеКонфигурации"); + АктуализироватьВариантыОтчетов("РазделенныеДанныеКонфигурации"); КонецПроцедуры -// Полное обновление индекса поиска предопределенных вариантов отчетов. -Процедура ОтложенноеОбновлениеОбщихДанныхКонфигурацииПолное(Параметры = Неопределено) Экспорт +Процедура ОбновитьИндексПоискаПредопределенныхВариантовОтчетов(Параметры = Неопределено) Экспорт - ОтложенноеОбновлениеДанных("ОбщиеДанныеКонфигурации", Истина); + ОбновитьИндексПоиска("ОбщиеДанныеКонфигурации", Истина); КонецПроцедуры -// Полное обновление индекса поиска вариантов отчетов. -Процедура ОтложенноеОбновлениеРазделенныхДанныхКонфигурацииПолное(Параметры = Неопределено) Экспорт +Процедура ОбновитьИндексПоискаПользовательскихВариантовОтчетов(Параметры = Неопределено) Экспорт - ОтложенноеОбновлениеДанных("РазделенныеДанныеКонфигурации", Истина); + ОбновитьИндексПоиска("РазделенныеДанныеКонфигурации", Истина); КонецПроцедуры @@ -3447,18 +3441,18 @@ Записано = 0; Ошибок = 0; - КэшОтчетов = Новый Соответствие; - КэшФлажка = Неопределено; + ПодключенныеОтчеты = Новый Соответствие; + ПоУмолчаниюВсеПодключены = Неопределено; ВариантыСОшибками = Новый Массив; Для Каждого СтрокаТаблицы Из ТаблицаОтчетов Цикл - ОтчетОбъект = КэшОтчетов.Получить(СтрокаТаблицы.Отчет); // Чтение кэша. - Если ОтчетОбъект = Неопределено Тогда // Запись в кэш. + ОтчетОбъект = ПодключенныеОтчеты.Получить(СтрокаТаблицы.Отчет); + Если ОтчетОбъект = Неопределено Тогда Подключение = ПодключитьОтчетОбъект(СтрокаТаблицы.Отчет, Истина); Если Подключение.Успех Тогда ОтчетОбъект = Подключение.Объект; ОтчетМетаданные = Подключение.Метаданные; - Если Не ОтчетПодключенКОсновнойФорме(ОтчетМетаданные, КэшФлажка) Тогда + Если Не ОтчетПодключенКОсновнойФорме(ОтчетМетаданные, ПоУмолчаниюВсеПодключены) Тогда // Отчет не подключен к общей форме отчета. // Уменьшение количества быстрых настроек должно выполняться прикладным кодом. ОтчетОбъект = ""; @@ -3467,7 +3461,7 @@ ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, Подключение.ТекстОшибки, СтрокаТаблицы.Ссылка); ОтчетОбъект = ""; КонецЕсли; - КэшОтчетов.Вставить(СтрокаТаблицы.Отчет, ОтчетОбъект); + ПодключенныеОтчеты.Вставить(СтрокаТаблицы.Отчет, ОтчетОбъект); КонецЕсли; Если ОтчетОбъект = "" Тогда Продолжить; @@ -3523,7 +3517,7 @@ Если Ошибок > 0 Тогда ТекстОшибки = ПредставлениеПроцедуры + ":" + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось уменьшить количество быстрых настроек %1 отчетов.'"), Ошибок); - ЗаписьЖурналаРегистрации(ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), + ЗаписьЖурналаРегистрации(НаименованиеПодсистемы(Неопределено), УровеньЖурналаРегистрации.Предупреждение, , , ТекстОшибки); КонецЕсли; @@ -3537,51 +3531,31 @@ //////////////////////////////////////////////////////////////////////////////// // Выполняется только для предопределенных вариантов отчетов. - // План обновления: - Кэш = Новый Структура; - Кэш.Вставить("Режим", Режим); - Кэш.Вставить("ОбновлятьКонфигурацию", Режим = "ОбщиеДанныеКонфигурации"); - Кэш.Вставить("ОбновлятьРасширения", Режим = "ОбщиеДанныеРасширений"); - Кэш.Вставить("РазделенныеОбработчики", РазделенныеОбработчики); - Кэш.Вставить("ЕстьИзменения", Ложь); - Кэш.Вставить("ЕстьВажныеИзменения", Ложь); - Кэш.Вставить("ДеревоВариантов", ДеревоПредопределенных(?(Кэш.ОбновлятьКонфигурацию, "Внутренний", "Расширение"))); - Кэш.Вставить("ОбновлятьЗамеры", Кэш.ОбновлятьКонфигурацию И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности")); - Кэш.Вставить("ТаблицаЗамеров", ТаблицаЗамеров()); - Кэш.Вставить("МодельСервиса", ОбщегоНазначения.РазделениеВключено()); - Кэш.Вставить("Уточнение", ?(Кэш.Режим = "ОбщиеДанныеКонфигурации", НСтр("ru = 'метаданные конфигурации'"), НСтр("ru = 'метаданные расширений'"))); + Результат = Новый Структура; + Результат.Вставить("ОбновлятьКонфигурацию", Режим = "ОбщиеДанныеКонфигурации"); + Результат.Вставить("ОбновлятьРасширения", Режим = "ОбщиеДанныеРасширений"); + Результат.Вставить("РазделенныеОбработчики", РазделенныеОбработчики); + Результат.Вставить("ЕстьИзменения", Ложь); + Результат.Вставить("ЕстьВажныеИзменения", Ложь); + Результат.Вставить("ВариантыОтчетов", ПредопределенныеВариантыОтчетов(?(Результат.ОбновлятьКонфигурацию, "Внутренний", "Расширение"))); + Результат.Вставить("ОбновлятьЗамеры", Результат.ОбновлятьКонфигурацию И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности")); + Результат.Вставить("ТаблицаЗамеров", ТаблицаЗамеров()); + Результат.Вставить("МодельСервиса", ОбщегоНазначения.РазделениеВключено()); - // План обновления: + АктуализироватьКлючиПредопределенных(Режим, Результат); + ПометитьУдаленныеПредопределенные(Режим, Результат); + СформироватьТаблицуФункциональныхОпций(Режим, Результат); + ПометитьНаУдалениеВариантыУдаленныхОтчетов(Режим, Результат); + ЗаписатьТаблицуФункциональныхОпций(Режим, Результат); + ЗафиксироватьТекущуюВерсиюРасширений(); - //////////////////////////////////////////////////////////////////////////////// - // 1. Заменить устаревшие ключи вариантов отчетов на актуальные. - АктуализироватьКлючиПредопределенных(Кэш); - - //////////////////////////////////////////////////////////////////////////////// - // 2. Актуализировать предопределенные варианты отчетов и перезаписать - // константу, в которой хранятся привязки к функциональным опциям. - ОбновитьНастройкиПредопределенных(Кэш); - - //////////////////////////////////////////////////////////////////////////////// - // 3. Установить пометку удаления вариантов удаленных отчетов. - ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш); - - //////////////////////////////////////////////////////////////////////////////// - // 4. Записать параметры в регистр. - ЗаписатьПараметрыВариантовОтчетов(Кэш); - - //////////////////////////////////////////////////////////////////////////////// - // 5. Записать срез ключей вариантов отчетов расширений в регистр. - ЗафиксироватьТекущуюВерсиюРасширений(Кэш); - - //////////////////////////////////////////////////////////////////////////////// - // 6. Обновить разделенные данные в модели сервиса. - Если Кэш.МодельСервиса И Кэш.ЕстьВажныеИзменения Тогда - Обработчики = Кэш.РазделенныеОбработчики; + // Обновить разделенные данные в модели сервиса. + Если Результат.МодельСервиса И Результат.ЕстьВажныеИзменения Тогда + Обработчики = Результат.РазделенныеОбработчики; Если Обработчики = Неопределено Тогда Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); - Кэш.РазделенныеОбработчики = Обработчики; + Результат.РазделенныеОбработчики = Обработчики; КонецЕсли; Обработчик = Обработчики.Добавить(); @@ -3591,74 +3565,46 @@ Обработчик.Приоритет = 70; КонецЕсли; - ОтчетыСервер.ОчиститьДеревоЗначений(Кэш.ДеревоВариантов); - - Возврат Кэш; + Возврат Результат; КонецФункции // Актуализирует данные справочника ВариантыОтчетов. -Функция ОперативноеОбновлениеРазделенныхДанных(Режим) +Функция АктуализироватьВариантыОтчетов(Режим) - Кэш = Новый Структура; - Кэш.Вставить("Режим", Режим); - Кэш.Вставить("ЕстьИзменения", Ложь); - Кэш.Вставить("ЕстьВажныеИзменения", Ложь); - Кэш.Вставить("Уточнение", НРег(ОтчетыКлиентСервер.ИмяВПредставление(Режим))); + Результат = Новый Структура; + Результат.Вставить("ЕстьИзменения", Ложь); + Результат.Вставить("ЕстьВажныеИзменения", Ложь); - //////////////////////////////////////////////////////////////////////////////// - // План обновления: - - //////////////////////////////////////////////////////////////////////////////// // 1. Актуализировать разделенные варианты отчетов. - АктуализироватьСоставОбласти(Кэш); - - //////////////////////////////////////////////////////////////////////////////// + АктуализироватьВариантыОтчетовПоПредопределенным(Режим, Результат); + // 2. Установить пометку удаления вариантов удаленных отчетов. - ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш); + ПометитьНаУдалениеВариантыУдаленныхОтчетов(Режим, Результат); - Возврат Кэш; + Возврат Результат; КонецФункции -// Обновление индекса поиска предопределенных вариантов отчетов. -Функция ОтложенноеОбновлениеДанных(Режим, Полное) +// Обновление индекса поиска вариантов отчетов. +Функция ОбновитьИндексПоиска(Режим, ИндексироватьСхему) Если Режим = "ОбщиеДанныеКонфигурации" И Не РазрешеноИндексированиеНеразделенныхДанных() Тогда Возврат Неопределено; КонецЕсли; - Кэш = Новый Структура; - Кэш.Вставить("Режим", Режим); - Кэш.Вставить("ЕстьИзменения", Ложь); - Кэш.Вставить("ЕстьВажныеИзменения", Ложь); - Кэш.Вставить("ОбщиеДанные", Режим = "ОбщиеДанныеКонфигурации" Или Режим = "ОбщиеДанныеРасширений"); - Кэш.Вставить("Полное", Полное); - Кэш.Вставить("Уточнение", НРег(ОтчетыКлиентСервер.ИмяВПредставление(Режим))); - Кэш.Уточнение = Кэш.Уточнение + ", " + ?(Полное, НСтр("ru = 'полное'"), НСтр("ru = 'по изменениям'")); + НачатьЗаполнениеПредставлений(Режим, Ложь); - // План обновления: + ОбщиеДанные = (Режим = "ОбщиеДанныеКонфигурации" Или Режим = "ОбщиеДанныеРасширений"); + Уточнение = НРег(ОтчетыКлиентСервер.ИмяВПредставление(Режим)) + ", " + ?(ИндексироватьСхему, НСтр("ru = 'полное'"), НСтр("ru = 'по изменениям'")); - //////////////////////////////////////////////////////////////////////////////// - // 1. Обновить индекс поиска отчетов. - ОбновитьИндексПоиска(Кэш); - - Возврат Кэш; -КонецФункции - -// Обновление индекса поиска отчетов. -Процедура ОбновитьИндексПоиска(Кэш) - Если Кэш.Режим = "ОбщиеДанныеКонфигурации" И Не РазрешеноИндексированиеНеразделенныхДанных() Тогда - Возврат; - КонецЕсли; - - ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление индекса поиска (%1)'"), Кэш.Уточнение); + ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление индекса поиска (%1)'"), Уточнение); ЗаписатьВЖурналЗапускПроцедуры(ПредставлениеПроцедуры); Запрос = Новый Запрос; - Если Кэш.ОбщиеДанные Тогда + Если ОбщиеДанные Тогда Поиск = Новый Структура("Отчет, КлючВарианта, ЭтоВариант", , , Истина); - Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда - ДеревоВариантов = ДеревоПредопределенных("Внутренний"); + Если Режим = "ОбщиеДанныеКонфигурации" Тогда + ПредопределенныеВарианты = ПредопределенныеВариантыОтчетов("Внутренний"); Запрос.Текст = "ВЫБРАТЬ | ПредопределенныеВариантыОтчетов.Ссылка, @@ -3667,8 +3613,8 @@ | Справочник.ПредопределенныеВариантыОтчетов КАК ПредопределенныеВариантыОтчетов |ГДЕ | ПредопределенныеВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; - ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда - ДеревоВариантов = ДеревоПредопределенных("Расширение"); + ИначеЕсли Режим = "ОбщиеДанныеРасширений" Тогда + ПредопределенныеВарианты = ПредопределенныеВариантыОтчетов("Расширение"); Запрос.Текст = "ВЫБРАТЬ | ПредопределенныеВариантыОтчетовВерсийРасширений.Вариант КАК Ссылка, @@ -3693,110 +3639,126 @@ | И ВариантыОтчетов.ТипОтчета = &ТипОтчета | И ВариантыОтчетов.Отчет В(&ДоступныеОтчеты)"; Запрос.УстановитьПараметр("ДоступныеОтчеты", Новый Массив(ВариантыОтчетовПовтИсп.ДоступныеОтчеты(Ложь))); - Если Кэш.Режим = "РазделенныеДанныеКонфигурации" Тогда + Если Режим = "РазделенныеДанныеКонфигурации" Тогда Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); - ИначеЕсли Кэш.Режим = "РазделенныеДанныеРасширений" Тогда + ИначеЕсли Режим = "РазделенныеДанныеРасширений" Тогда Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Расширение); КонецЕсли; КонецЕсли; - КэшОтчетов = Новый Соответствие; + ПроблемныеОтчеты = Новый Соответствие; + НовыеСведения = Новый Соответствие; СтарыеСведения = Новый Структура("ХешНастроек, НаименованияПолей, НаименованияПараметровИОтборов, КлючевыеСлова"); СписокОшибок = Новый Массив; + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - ОтчетОбъект = КэшОтчетов.Получить(Выборка.Отчет); // Чтение кэша. - Если ОтчетОбъект = "" Тогда + Если ПроблемныеОтчеты[Выборка.Отчет] = Истина Тогда Продолжить; // Отчет не подключен, ошибка зарегистрирована ранее. КонецЕсли; - ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); - - Если Кэш.ОбщиеДанные Тогда - ЗаполнитьЗначенияСвойств(Поиск, ВариантОбъект, "Отчет, КлючВарианта"); - Найденные = ДеревоВариантов.Строки.НайтиСтроки(Поиск, Истина); - Если Найденные.Количество() = 0 Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вариант ""%1"" не найден для отчета ""%2""'"), - ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); - ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки, ВариантОбъект.Ссылка); - Продолжить; // Возникла проблема. - КонецЕсли; - - ОписаниеВарианта = Найденные[0]; - СтрокаОтчет = ОписаниеВарианта.Родитель; - ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта, СтрокаОтчет); - - // Если вариант отключен, то и в поиске он не участвует. - Если Не ОписаниеВарианта.Включен Тогда - Продолжить; // Заполнение не требуется. - КонецЕсли; - - НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ОписаниеВарианта.СистемнаяИнформация, "НастройкиКД"); - ВариантОбъект.ДополнительныеСвойства.Вставить("НастройкиКД", НастройкиКД); - ВариантОбъект.ДополнительныеСвойства.Вставить("НастройкиДляПоиска", ОписаниеВарианта.НастройкиДляПоиска); - КонецЕсли; - - ВариантОбъект.ДополнительныеСвойства.Вставить("ОтчетОбъект", ОтчетОбъект); - - ЗаполнитьЗначенияСвойств(СтарыеСведения, ВариантОбъект); - ВариантОбъект.НаименованияПолей = ""; - ВариантОбъект.НаименованияПараметровИОтборов = ""; - ВариантОбъект.КлючевыеСлова = ""; - Если Кэш.Полное Тогда // Переиндексировать принудительно, без проверки хеш-суммы. - ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Истина); - КонецЕсли; - + НачатьТранзакцию(); Попытка - СхемаПроиндексирована = ПроиндексироватьСодержимоеСхемы(ВариантОбъект); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВариантыОтчетов"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Если ВариантОбъект = Неопределено Тогда + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + + СведенияОбОтчете = НовыеСведения[Выборка.Отчет]; + Если СведенияОбОтчете = Неопределено Тогда + СведенияОбОтчете = Новый Структура("НастройкиКД,НастройкиДляПоиска,ОтчетОбъект,ИндексироватьСхему"); + НовыеСведения[Выборка.Отчет] = СведенияОбОтчете; + КонецЕсли; + + Если ОбщиеДанные Тогда + ЗаполнитьЗначенияСвойств(Поиск, ВариантОбъект, "Отчет, КлючВарианта"); + Найденные = ПредопределенныеВарианты.НайтиСтроки(Поиск); + Если Найденные.Количество() = 0 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вариант ""%1"" не найден для отчета ""%2""'"), + ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); + ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки, ВариантОбъект.Ссылка); + ОтменитьТранзакцию(); + Продолжить; // Возникла проблема. + КонецЕсли; + + ОписаниеВарианта = Найденные[0]; + ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта, ПредопределенныеВарианты.НайтиСтроки( + Новый Структура("Отчет,ЭтоВариант", ВариантОбъект.Отчет, Ложь))[0]); + + // Если вариант отключен, то и в поиске он не участвует. + Если Не ОписаниеВарианта.Включен Тогда + ОтменитьТранзакцию(); + Продолжить; // Заполнение не требуется. + КонецЕсли; + + СведенияОбОтчете.НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ОписаниеВарианта.СистемнаяИнформация, "НастройкиКД"); + СведенияОбОтчете.НастройкиДляПоиска = ОписаниеВарианта.НастройкиДляПоиска; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(СтарыеСведения, ПоляДляПоиска(ВариантОбъект)); + СтарыеСведения.ХешНастроек = ВариантОбъект.ХешНастроек; + СведенияОбОтчете.ИндексироватьСхему = ИндексироватьСхему; // Переиндексировать принудительно, без проверки хеш-суммы. + + Попытка + СхемаПроиндексирована = ЗаполнитьПоляДляПоиска(ВариантОбъект, СведенияОбОтчете); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось перестроить индекс поиска для варианта ""%1"" отчета ""%2"". Возможно, отчет неисправен.'"), + ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); + ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки + Символы.ПС + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ВариантОбъект.Ссылка); + СписокОшибок.Добавить(ТекстОшибки); + ОтменитьТранзакцию(); + Продолжить; + КонецПопытки; + + Если СхемаПроиндексирована И ИзменилисьНастройкиПоиска(ВариантОбъект, СтарыеСведения) Тогда + Если ОбщиеДанные Тогда + ЗаписатьПредопределенный(ВариантОбъект); + Иначе + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); + КонецЕсли; + КонецЕсли; + + Если СведенияОбОтчете.ОтчетОбъект = Неопределено Тогда + ПроблемныеОтчеты[Выборка.Отчет] = Истина; // Отчет не был подключен + КонецЕсли; + + ЗафиксироватьТранзакцию(); Исключение - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось перестроить индекс поиска для варианта ""%1"" отчета ""%2"". Возможно, отчет неисправен.'"), - ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); - ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ВариантОбъект.Ссылка); - СписокОшибок.Добавить(ТекстОшибки); - Продолжить; - КонецПопытки; - - Если СхемаПроиндексирована И ИзменилисьНастройкиПоиска(ВариантОбъект, СтарыеСведения) Тогда - Если Кэш.ОбщиеДанные Тогда - ЗаписатьПредопределенный(ВариантОбъект); - Иначе - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); - КонецЕсли; - Кэш.ЕстьИзменения = Истина; - КонецЕсли; - - // Сохранение инициализированного объекта в кэш. - Если ОтчетОбъект = Неопределено Тогда - ОтчетОбъект = ВариантОбъект.ДополнительныеСвойства.ОтчетОбъект; - Если ОтчетОбъект = Неопределено Тогда - ОтчетОбъект = ""; // Отчет не был подключен, регистрация пустой строки для пропуска других вариантов. - КонецЕсли; - КэшОтчетов.Вставить(Выборка.Отчет, ОтчетОбъект); - КонецЕсли; + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; - - Если Кэш.ОбщиеДанные Тогда - ОтчетыСервер.ОчиститьДеревоЗначений(ДеревоВариантов); - КонецЕсли; + УстановитьПризнакЗаполненияПредставлений(Истина, Ложь, Режим); ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); -КонецПроцедуры + Возврат Неопределено; +КонецФункции // Замена старых ключей вариантов отчетов на актуальные. -Процедура АктуализироватьКлючиПредопределенных(Кэш) - ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление ключей вариантов отчетов (%1)'"), Кэш.Уточнение); +Процедура АктуализироватьКлючиПредопределенных(Режим, Результат) + + ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обновление ключей вариантов отчетов (%1)'"), + ?(Режим = "ОбщиеДанныеКонфигурации", НСтр("ru = 'метаданные конфигурации'"), НСтр("ru = 'метаданные расширений'"))); ЗаписатьВЖурналЗапускПроцедуры(ПредставлениеПроцедуры); // Составить таблицу замен старых ключей вариантов на актуальные. Изменения = ИзмененияКлючей(); // Получить ссылки вариантов отчетов для замены ключей, - // исключив из списка замен те варианты отчетов, - // актуальные ключи которых уже зарегистрированы, - // или старые ключи которых уже не заняты. + // исключив из списка замен те варианты отчетов, + // актуальные ключи которых уже зарегистрированы, + // или старые ключи которых уже не заняты. ТекстЗапроса = "ВЫБРАТЬ | Изменения.Отчет, @@ -3824,8 +3786,11 @@ | ВариантыОтчетовАктуальные.Ссылка ЕСТЬ NULL | И НЕ ВариантыОтчетовСтарые.Ссылка ЕСТЬ NULL "; - Если Кэш.Режим = "ОбщиеДанныеРасширений" Тогда + Если Режим = "ОбщиеДанныеРасширений" Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПредопределенныеВариантыОтчетов", ".ПредопределенныеВариантыОтчетовРасширений"); + ИмяСправочника = "Справочник.ПредопределенныеВариантыОтчетовРасширений"; + Иначе + ИмяСправочника = "Справочник.ПредопределенныеВариантыОтчетов"; КонецЕсли; Запрос = Новый Запрос; @@ -3835,173 +3800,261 @@ // Заменить старые имена вариантов на актуальные. Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - Кэш.ЕстьИзменения = Истина; - Кэш.ЕстьВажныеИзменения = Истина; - ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ВариантОбъект.КлючВарианта = Выборка.АктуальноеИмяВарианта; - ЗаписатьПредопределенный(ВариантОбъект); + Результат.ЕстьИзменения = Истина; + Результат.ЕстьВажныеИзменения = Истина; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ИмяСправочника); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + Блокировка.Заблокировать(); + + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.КлючВарианта = Выборка.АктуальноеИмяВарианта; + ЗаписатьПредопределенный(ВариантОбъект); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); КонецПроцедуры -// Актуализация предопределенных вариантов отчетов. -Процедура ОбновитьНастройкиПредопределенных(Кэш) - ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление настроек предопределенных (%1)'"), Кэш.Уточнение); +Процедура ПометитьУдаленныеПредопределенные(Режим, Результат) + + ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обновление настроек предопределенных (%1)'"), + ?(Режим = "ОбщиеДанныеКонфигурации", НСтр("ru = 'метаданные конфигурации'"), НСтр("ru = 'метаданные расширений'"))); ЗаписатьВЖурналЗапускПроцедуры(ПредставлениеПроцедуры); РеквизитыВариантов = Метаданные.Справочники.ВариантыОтчетов.Реквизиты; + Если Режим = "ОбщиеДанныеКонфигурации" Тогда + ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.ПредопределенныеВариантыОтчетов УПОРЯДОЧИТЬ ПО ПометкаУдаления"; + ПустаяСсылка = Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка(); + ИмяТаблицы = "Справочник.ПредопределенныеВариантыОтчетов"; + ИначеЕсли Режим = "ОбщиеДанныеРасширений" Тогда + ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.ПредопределенныеВариантыОтчетовРасширений УПОРЯДОЧИТЬ ПО ПометкаУдаления"; + ПустаяСсылка = Справочники.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка(); + ИмяТаблицы = "Справочник.ПредопределенныеВариантыОтчетовРасширений"; + КонецЕсли; + + // Сопоставление информации из базы и из метаданных и пометка на удаление устаревших объектов из базы. + Результат.ВариантыОтчетов.Индексы.Добавить("Отчет, КлючВарианта, НайденВБазеДанных, ЭтоВариант"); + ПоискВарианта = Новый Структура("Отчет, КлючВарианта, НайденВБазеДанных, ЭтоВариант"); + ПоискВарианта.НайденВБазеДанных = Ложь; + ПоискВарианта.ЭтоВариант = Истина; + + Запрос = Новый Запрос(ТекстЗапроса); + ПредопределенныеВариантыОтчетов = Запрос.Выполнить().Выгрузить(); + + Для Каждого ВариантИзБазы Из ПредопределенныеВариантыОтчетов Цикл + + ЗаполнитьЗначенияСвойств(ПоискВарианта, ВариантИзБазы, "Отчет, КлючВарианта"); + Найденные = Результат.ВариантыОтчетов.НайтиСтроки(ПоискВарианта); + Если Найденные.Количество() > 0 Тогда + ОписаниеВарианта = Найденные[0]; + ОписаниеОтчета = Результат.ВариантыОтчетов.НайтиСтроки(Новый Структура("Отчет, ЭтоВариант", ВариантИзБазы.Отчет, Ложь))[0]; + ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта, ОписаниеОтчета); + ОписаниеВарианта.НайденВБазеДанных = Истина; + ОписаниеВарианта.ВариантИзБазы = ВариантИзБазы; + Продолжить; + КонецЕсли; + + Если ВариантИзБазы.ПометкаУдаления И ВариантИзБазы.Родитель = ПустаяСсылка Тогда + Продолжить; // Действие не требуется. + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ИмяТаблицы); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ВариантИзБазы.Ссылка); + Блокировка.Заблокировать(); + + ВариантОбъект = ВариантИзБазы.Ссылка.ПолучитьОбъект(); + Если ВариантОбъект = Неопределено Тогда + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + + ВариантОбъект.ПометкаУдаления = Истина; + ВариантОбъект.Родитель = ПустаяСсылка; + ЗаписатьПредопределенный(ВариантОбъект); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Результат.ЕстьИзменения = Истина; + Результат.ЕстьВажныеИзменения = Истина; + + КонецЦикла; + + ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); +КонецПроцедуры + +Процедура СформироватьТаблицуФункциональныхОпций(Режим, Результат) + + РеквизитыВариантов = Метаданные.Справочники.ВариантыОтчетов.Реквизиты; + + Если Режим = "ОбщиеДанныеКонфигурации" Тогда + ПустаяСсылка = Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка(); + ИначеЕсли Режим = "ОбщиеДанныеРасширений" Тогда + ПустаяСсылка = Справочники.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка(); + КонецЕсли; + ТаблицаФункциональныхОпций = Новый ТаблицаЗначений; ТаблицаФункциональныхОпций.Колонки.Добавить("Отчет", РеквизитыВариантов.Отчет.Тип); ТаблицаФункциональныхОпций.Колонки.Добавить("ПредопределенныйВариант", РеквизитыВариантов.ПредопределенныйВариант.Тип); ТаблицаФункциональныхОпций.Колонки.Добавить("ИмяФункциональнойОпции", Новый ОписаниеТипов("Строка")); - Кэш.Вставить("ТаблицаФункциональныхОпций", ТаблицаФункциональныхОпций); + Результат.Вставить("ТаблицаФункциональныхОпций", ТаблицаФункциональныхОпций); ОтчетыСНастройкамиСписок = Новый СписокЗначений; - Кэш.Вставить("ОтчетыСНастройкамиСписок", ОтчетыСНастройкамиСписок); + Результат.Вставить("ОтчетыСНастройкамиСписок", ОтчетыСНастройкамиСписок); - Кэш.ДеревоВариантов.Колонки.Добавить("НайденВБазеДанных", Новый ОписаниеТипов("Булево")); - Кэш.ДеревоВариантов.Колонки.Добавить("ВариантИзБазы", Новый ОписаниеТипов("СтрокаТаблицыЗначений")); - - Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда - Кэш.ДеревоВариантов.Колонки.Добавить("ВариантРодитель", Новый ОписаниеТипов("СправочникСсылка.ПредопределенныеВариантыОтчетов")); - ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.ПредопределенныеВариантыОтчетов УПОРЯДОЧИТЬ ПО ПометкаУдаления"; - ПустаяСсылка = Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка(); - ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда - Кэш.ДеревоВариантов.Колонки.Добавить("ВариантРодитель", Новый ОписаниеТипов("СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений")); - ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.ПредопределенныеВариантыОтчетовРасширений УПОРЯДОЧИТЬ ПО ПометкаУдаления"; - ПустаяСсылка = Справочники.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка(); - КонецЕсли; - - // Сопоставление информации из базы и из метаданных и пометка на удаление устаревших объектов из базы. - ПоискВарианта = Новый Структура("Отчет, КлючВарианта, НайденВБазеДанных, ЭтоВариант"); - ПоискВарианта.НайденВБазеДанных = Ложь; - ПоискВарианта.ЭтоВариант = Истина; - Запрос = Новый Запрос(ТекстЗапроса); - ТаблицаПредопределенные = Запрос.Выполнить().Выгрузить(); - Для Каждого ВариантИзБазы Из ТаблицаПредопределенные Цикл - ЗаполнитьЗначенияСвойств(ПоискВарианта, ВариантИзБазы, "Отчет, КлючВарианта"); - Найденные = Кэш.ДеревоВариантов.Строки.НайтиСтроки(ПоискВарианта, Истина); - Если Найденные.Количество() = 0 Тогда - Если ВариантИзБазы.ПометкаУдаления И ВариантИзБазы.Родитель = ПустаяСсылка Тогда - Продолжить; // Действие не требуется. + ОсновныеВарианты = Новый Соответствие; + Для Каждого ОписаниеВарианта Из Результат.ВариантыОтчетов Цикл + + Если ОписаниеВарианта.КлючВарианта = "" Тогда // это отчет + Если ОписаниеВарианта.ОпределитьНастройкиФормы Тогда + ОтчетыСНастройкамиСписок.Добавить(ОписаниеВарианта.Отчет); КонецЕсли; - ВариантОбъект = ВариантИзБазы.Ссылка.ПолучитьОбъект(); - ВариантОбъект.ПометкаУдаления = Истина; - ВариантОбъект.Родитель = ПустаяСсылка; - ЗаписатьПредопределенный(ВариантОбъект); - Кэш.ЕстьИзменения = Истина; - Кэш.ЕстьВажныеИзменения = Истина; + Продолжить; + КонецЕсли; + + // Установка реквизита ВариантРодитель для связи вариантов отчетов с основными вариантами отчетов. + ОписаниеОтчета = Результат.ВариантыОтчетов.НайтиСтроки(Новый Структура("Отчет, ЭтоВариант", ОписаниеВарианта.Отчет, Ложь))[0]; + ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта, ОписаниеОтчета); + Если ПустаяСтрока(ОписаниеОтчета.ОсновнойВариант) Или ОписаниеВарианта.КлючВарианта = ОписаниеОтчета.ОсновнойВариант Тогда + КлючОсновногоВарианта = ОписаниеВарианта.Отчет.ПолноеИмя + "." + ОписаниеВарианта.КлючВарианта; + ВариантСсылка = ОсновныеВарианты[КлючОсновногоВарианта]; + Если ВариантСсылка = Неопределено Тогда + ОписаниеВарианта.ВариантРодитель = ПустаяСсылка; + ВариантСсылка = ОбновитьПредопределенныйВариантОтчета(Режим, ОписаниеВарианта, Результат); + ОсновныеВарианты[КлючОсновногоВарианта] = ВариантСсылка; + КонецЕсли Иначе - ОписаниеВарианта = Найденные[0]; - ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта); - ОписаниеВарианта.НайденВБазеДанных = Истина; - ОписаниеВарианта.ВариантИзБазы = ВариантИзБазы; + ОсновнойВариант = Результат.ВариантыОтчетов.НайтиСтроки( + Новый Структура("Отчет, КлючВарианта", ОписаниеВарианта.Отчет, ОписаниеОтчета.ОсновнойВариант))[0]; + КлючОсновногоВарианта = ОсновнойВариант.Отчет.ПолноеИмя + "." + ОсновнойВариант.КлючВарианта; + ОсновнойВариантСсылка = ОсновныеВарианты[КлючОсновногоВарианта]; + Если ОсновнойВариантСсылка = Неопределено Тогда + ОсновнойВариант.ВариантРодитель = ПустаяСсылка; + ОсновнойВариантСсылка = ОбновитьПредопределенныйВариантОтчета(Режим, ОсновнойВариант, Результат); + ОсновныеВарианты[КлючОсновногоВарианта] = ОсновнойВариантСсылка; + КонецЕсли; + ОписаниеВарианта.ВариантРодитель = ОсновнойВариантСсылка; + ВариантСсылка = ОбновитьПредопределенныйВариантОтчета(Режим, ОписаниеВарианта, Результат); КонецЕсли; - КонецЦикла; - - // Добавление/обновление информации в базе данных. - Для Каждого ОписаниеОтчета Из Кэш.ДеревоВариантов.Строки Цикл - ОсновнойВариантСсылка = ПустаяСсылка; - ОсновнойВариант = ОписаниеОтчета.ОсновнойВариант; - Если ТипЗнч(ОсновнойВариант) = Тип("СтрокаДереваЗначений") Тогда - ЗаполнитьОписаниеСтрокиВарианта(ОсновнойВариант); - ОсновнойВариант.ВариантРодитель = ПустаяСсылка; - ОсновнойВариантСсылка = ОбновитьПредопределенный(Кэш, ОсновнойВариант); // Вариант без родителя. - КонецЕсли; - Если ОписаниеОтчета.ОпределитьНастройкиФормы Тогда - ОтчетыСНастройкамиСписок.Добавить(ОписаниеОтчета.Отчет); - КонецЕсли; - Для Каждого ОписаниеВарианта Из ОписаниеОтчета.Строки Цикл - ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта); - Если ОписаниеВарианта = ОсновнойВариант Тогда - ВариантСсылка = ОсновнойВариантСсылка; - Иначе - ОписаниеВарианта.ВариантРодитель = ОсновнойВариантСсылка; - ВариантСсылка = ОбновитьПредопределенный(Кэш, ОписаниеВарианта); - КонецЕсли; - Для Каждого ИмяФункциональнойОпции Из ОписаниеВарианта.ФункциональныеОпции Цикл - СвязьСФункциональнойОпцией = ТаблицаФункциональныхОпций.Добавить(); - СвязьСФункциональнойОпцией.Отчет = ОписаниеВарианта.Отчет; - СвязьСФункциональнойОпцией.ПредопределенныйВариант = ВариантСсылка; - СвязьСФункциональнойОпцией.ИмяФункциональнойОпции = ИмяФункциональнойОпции; - КонецЦикла; + + Для Каждого ИмяФункциональнойОпции Из ОписаниеВарианта.ФункциональныеОпции Цикл + СвязьСФункциональнойОпцией = ТаблицаФункциональныхОпций.Добавить(); + СвязьСФункциональнойОпцией.Отчет = ОписаниеВарианта.Отчет; + СвязьСФункциональнойОпцией.ПредопределенныйВариант = ВариантСсылка; + СвязьСФункциональнойОпцией.ИмяФункциональнойОпции = ИмяФункциональнойОпции; КонецЦикла; + КонецЦикла; - - ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); + КонецПроцедуры // Записывает настройки варианта в данные справочника. -Функция ОбновитьПредопределенный(Кэш, ОписаниеВарианта) - ВариантИзБазы = ОписаниеВарианта.ВариантИзБазы; - Если Кэш.ОбновлятьЗамеры Тогда - Ключ = ?(ОписаниеВарианта.НайденВБазеДанных, ВариантИзБазы.КлючЗамеров, ""); - ЗарегистрироватьЗамерыВариантаКОбновлению(Кэш, Ключ, ОписаниеВарианта.КлючЗамеров, ОписаниеВарианта.Наименование); - КонецЕсли; - Если ОписаниеВарианта.НайденВБазеДанных Тогда - Если ИзменилисьКлючевыеНастройкиПредопределенного(ОписаниеВарианта, ВариантИзБазы) Тогда - Кэш.ЕстьВажныеИзменения = Истина; // Перезапись ключевых настроек (потребуется обновление разделенных данных). - ИначеЕсли ИзменилисьВторостепенныеНастройкиПредопределенного(ОписаниеВарианта, ВариантИзБазы) Тогда - // Перезапись без обновления разделенных данных. +Функция ОбновитьПредопределенныйВариантОтчета(Режим, ОписаниеВарианта, Результат) + + НачатьТранзакцию(); + Попытка + ВариантИзБазы = ОписаниеВарианта.ВариантИзБазы; + Если Результат.ОбновлятьЗамеры Тогда + Ключ = ?(ОписаниеВарианта.НайденВБазеДанных, ВариантИзБазы.КлючЗамеров, ""); + ЗарегистрироватьЗамерыВариантаКОбновлению(Ключ, ОписаниеВарианта.КлючЗамеров, ОписаниеВарианта.Наименование, Результат); + КонецЕсли; + Если ОписаниеВарианта.НайденВБазеДанных Тогда + Если ВариантИзБазы.ПометкаУдаления = Истина // Описание получено => требуется снять пометку удаления + Или ИзменилисьКлючевыеНастройкиПредопределенного(ОписаниеВарианта, ВариантИзБазы) Тогда + Результат.ЕстьВажныеИзменения = Истина; // Перезапись ключевых настроек (потребуется обновление разделенных данных). + ИначеЕсли Не ИзменилисьВторостепенныеНастройкиПредопределенного(ОписаниеВарианта, ВариантИзБазы) Тогда + ОтменитьТранзакцию(); + Возврат ВариантИзБазы.Ссылка; + КонецЕсли; + + Если Режим = "ОбщиеДанныеКонфигурации" Тогда + ИмяТаблицы = "Справочник.ПредопределенныеВариантыОтчетов"; + ИначеЕсли Режим = "ОбщиеДанныеРасширений" Тогда + ИмяТаблицы = "Справочник.ПредопределенныеВариантыОтчетовРасширений"; + КонецЕсли; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ИмяТаблицы); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ОписаниеВарианта.ВариантИзБазы.Ссылка); + Блокировка.Заблокировать(); + + ВариантОбъект = ОписаниеВарианта.ВариантИзБазы.Ссылка.ПолучитьОбъект(); + ВариантОбъект.Размещение.Очистить(); + Если ВариантОбъект.ПометкаУдаления Тогда + ВариантОбъект.ПометкаУдаления = Ложь; + КонецЕсли; Иначе - Возврат ВариантИзБазы.Ссылка; + Результат.ЕстьВажныеИзменения = Истина; // Регистрация нового (потребуется обновление разделенных данных). + Если Режим = "ОбщиеДанныеКонфигурации" Тогда + ВариантОбъект = Справочники.ПредопределенныеВариантыОтчетов.СоздатьЭлемент(); + ИначеЕсли Режим = "ОбщиеДанныеРасширений" Тогда + ВариантОбъект = Справочники.ПредопределенныеВариантыОтчетовРасширений.СоздатьЭлемент(); + КонецЕсли; КонецЕсли; - ВариантОбъект = ОписаниеВарианта.ВариантИзБазы.Ссылка.ПолучитьОбъект(); - ВариантОбъект.Размещение.Очистить(); - Если ВариантОбъект.ПометкаУдаления Тогда - ВариантОбъект.ПометкаУдаления = Ложь; + ЗаполнитьЗначенияСвойств(ВариантОбъект, ОписаниеВарианта, + "Отчет, КлючВарианта, Включен, ВидимостьПоУмолчанию, ГруппироватьПоОтчету"); + ПоляДляПоиска = ПоляДляПоиска(ВариантОбъект); + ПоляДляПоиска.Наименование = ОписаниеВарианта.Наименование; + ПоляДляПоиска.Описание = ОписаниеВарианта.Описание; + УстановитьПоляДляПоиска(ВариантОбъект, ПоляДляПоиска); + + ВариантОбъект.Родитель = ОписаниеВарианта.ВариантРодитель; + + РазмещениеВарианта = Новый Массив; + Для каждого Раздел Из ОписаниеВарианта.Размещение Цикл + РазмещениеВарианта.Добавить(Раздел.Ключ); + КонецЦикла; + ИдентификаторыПодсистем = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(РазмещениеВарианта); + Для Каждого РазмещениеОтчета Из ОписаниеВарианта.Размещение Цикл + СтрокаРазмещения = ВариантОбъект.Размещение.Добавить(); + ПолноеИмя = ?(ТипЗнч(РазмещениеОтчета.Ключ) = Тип("Строка"), РазмещениеОтчета.Ключ, РазмещениеОтчета.Ключ.ПолноеИмя()); + СтрокаРазмещения.Подсистема = ИдентификаторыПодсистем[ПолноеИмя]; + СтрокаРазмещения.Важный = (НРег(РазмещениеОтчета.Значение) = НРег("Важный")); + СтрокаРазмещения.СмТакже = (НРег(РазмещениеОтчета.Значение) = НРег("СмТакже")); + КонецЦикла; + + Если Результат.ОбновлятьЗамеры Тогда + ВариантОбъект.КлючЗамеров = ОписаниеВарианта.КлючЗамеров; КонецЕсли; - Иначе - Кэш.ЕстьВажныеИзменения = Истина; // Регистрация нового (потребуется обновление разделенных данных). - Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда - ВариантОбъект = Справочники.ПредопределенныеВариантыОтчетов.СоздатьЭлемент(); - ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда - ВариантОбъект = Справочники.ПредопределенныеВариантыОтчетовРасширений.СоздатьЭлемент(); - КонецЕсли; - КонецЕсли; - - ЗаполнитьЗначенияСвойств(ВариантОбъект, ОписаниеВарианта, "Отчет, КлючВарианта, Наименование, Включен, ВидимостьПоУмолчанию, Описание, ГруппироватьПоОтчету"); - - ВариантОбъект.Родитель = ОписаниеВарианта.ВариантРодитель; - - Для Каждого КлючИЗначение Из ОписаниеВарианта.Размещение Цикл - СсылкаПодсистемы = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(КлючИЗначение.Ключ); - Если ТипЗнч(СсылкаПодсистемы) = Тип("Строка") Тогда - Продолжить; - КонецЕсли; - СтрокаРазмещения = ВариантОбъект.Размещение.Добавить(); - СтрокаРазмещения.Подсистема = СсылкаПодсистемы; - СтрокаРазмещения.Важный = (НРег(КлючИЗначение.Значение) = НРег("Важный")); - СтрокаРазмещения.СмТакже = (НРег(КлючИЗначение.Значение) = НРег("СмТакже")); - КонецЦикла; - - Если Кэш.ОбновлятьЗамеры Тогда - ВариантОбъект.КлючЗамеров = ОписаниеВарианта.КлючЗамеров; - КонецЕсли; - - Кэш.ЕстьИзменения = Истина; - ЗаписатьПредопределенный(ВариантОбъект); + + Результат.ЕстьИзменения = Истина; + ЗаписатьПредопределенный(ВариантОбъект); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Возврат ВариантОбъект.Ссылка; КонецФункции -// Определяет изменились ли ключевые настройки предопределенного варианта отчета. +// Определяет, изменились ли ключевые настройки предопределенного варианта отчета. Функция ИзменилисьКлючевыеНастройкиПредопределенного(ОписаниеВарианта, ВариантИзБазы) - Если ВариантИзБазы.ПометкаУдаления = Истина // Описание получено => требуется снять пометку удаления. - Или ВариантИзБазы.Наименование <> ОписаниеВарианта.Наименование + Возврат (ВариантИзБазы.Наименование <> ОписаниеВарианта.Наименование Или ВариантИзБазы.Родитель <> ОписаниеВарианта.ВариантРодитель - Или ВариантИзБазы.ВидимостьПоУмолчанию <> ОписаниеВарианта.ВидимостьПоУмолчанию Тогда - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; + Или ВариантИзБазы.ВидимостьПоУмолчанию <> ОписаниеВарианта.ВидимостьПоУмолчанию); КонецФункции -// Определяет изменились ли второстепенные настройки предопределенного варианта отчета. +// Определяет, изменились ли второстепенные настройки предопределенного варианта отчета. Функция ИзменилисьВторостепенныеНастройкиПредопределенного(ОписаниеВарианта, ВариантИзБазы) // Шапка Если ВариантИзБазы.Включен <> ОписаниеВарианта.Включен @@ -4033,21 +4086,19 @@ Возврат Ложь; КонецФункции -// Определяет изменились ли настройки поиска предопределенного варианта отчета. +// Определяет, изменились ли настройки поиска предопределенного варианта отчета. Функция ИзменилисьНастройкиПоиска(ВариантИзБазы, СтарыеСведения) - Если ВариантИзБазы.ХешНастроек <> СтарыеСведения.ХешНастроек + Возврат ВариантИзБазы.ХешНастроек <> СтарыеСведения.ХешНастроек Или ВариантИзБазы.НаименованияПолей <> СтарыеСведения.НаименованияПолей Или ВариантИзБазы.НаименованияПараметровИОтборов <> СтарыеСведения.НаименованияПараметровИОтборов - Или ВариантИзБазы.КлючевыеСлова <> СтарыеСведения.КлючевыеСлова Тогда - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; + Или ВариантИзБазы.КлючевыеСлова <> СтарыеСведения.КлючевыеСлова; КонецФункции // Приводит разделенные данные в соответствие с неразделенными данными. -Процедура АктуализироватьСоставОбласти(Кэш) - ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление вариантов отчетов (%1)'"), Кэш.Уточнение); +Процедура АктуализироватьВариантыОтчетовПоПредопределенным(Режим, Результат) + + ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление вариантов отчетов (%1)'"), + НРег(ОтчетыКлиентСервер.ИмяВПредставление(Режим))); ЗаписатьВЖурналЗапускПроцедуры(ПредставлениеПроцедуры); // Обновление сведений предопределенных вариантов. @@ -4129,11 +4180,11 @@ | ПО втВариантыОтчетов.ПредопределенныйВариант = втПредопределенные.ПредопределенныйВариант"; Запрос = Новый Запрос; - Если Кэш.Режим = "РазделенныеДанныеКонфигурации" Тогда + Если Режим = "РазделенныеДанныеКонфигурации" Тогда Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); Запрос.УстановитьПараметр("ТипРеквизитаОтчет", Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); Запрос.УстановитьПараметр("ПустаяСсылкаВарианта", Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка()); - ИначеЕсли Кэш.Режим = "РазделенныеДанныеРасширений" Тогда + ИначеЕсли Режим = "РазделенныеДанныеРасширений" Тогда Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Расширение); Запрос.УстановитьПараметр("ТипРеквизитаОтчет", Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений")); Запрос.УстановитьПараметр("ПустаяСсылкаВарианта", Справочники.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка()); @@ -4141,21 +4192,15 @@ КонецЕсли; Запрос.Текст = ТекстЗапроса; - Кэш.Вставить("ПустаяСсылка", Справочники.ВариантыОтчетов.ПустаяСсылка()); - Кэш.Вставить("ПоискРодителей", Новый Соответствие); - Кэш.Вставить("ОбработанныеПредопределенные", Новый Массив); - Кэш.Вставить("ОсновныеВарианты", Новый ТаблицаЗначений); - Кэш.ОсновныеВарианты.Колонки.Добавить("Отчет", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.Отчет.Тип); - Кэш.ОсновныеВарианты.Колонки.Добавить("Вариант", Новый ОписаниеТипов("СправочникСсылка.ВариантыОтчетов")); + Результат.Вставить("ПустаяСсылка", Справочники.ВариантыОтчетов.ПустаяСсылка()); + Результат.Вставить("ПоискРодителей", Новый Соответствие); + Результат.Вставить("ОбработанныеПредопределенные", Новый Соответствие); + Результат.Вставить("ОсновныеВарианты", Новый ТаблицаЗначений); + Результат.ОсновныеВарианты.Колонки.Добавить("Отчет", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.Отчет.Тип); + Результат.ОсновныеВарианты.Колонки.Добавить("Вариант", Новый ОписаниеТипов("СправочникСсылка.ВариантыОтчетов")); - Шаблоны = Новый Структура; - - Шаблоны.Вставить("УстановкаПометкиУдаления", Новый Структура); - Шаблоны.УстановкаПометкиУдаления.Вставить("Родитель", Кэш.ПустаяСсылка); - Шаблоны.УстановкаПометкиУдаления.Вставить("ПометкаУдаления", Истина); - - Шаблоны.Вставить("НовыеДанные", Новый Структура("ПометкаУдаления, Родитель, - |Наименование, Отчет, КлючВарианта, ПредопределенныйВариант, ВидимостьПоУмолчанию")); + ИзменяемыеРеквизиты = Новый Структура("ПометкаУдаления, Родитель, + |Наименование, Отчет, КлючВарианта, ПредопределенныйВариант, ВидимостьПоУмолчанию"); СводнаяТаблицаПредопределенных = Запрос.Выполнить().Выгрузить(); СводнаяТаблицаПредопределенных.Колонки.Добавить("Обработана", Новый ОписаниеТипов("Булево")); @@ -4168,18 +4213,18 @@ Если СтрокаТаблицы.Обработана Тогда Продолжить; КонецЕсли; - Если Кэш.ОбработанныеПредопределенные.Найти(СтрокаТаблицы.ПредопределенныйВариант) <> Неопределено Тогда + Если Результат.ОбработанныеПредопределенные[СтрокаТаблицы.ПредопределенныйВариант] <> Неопределено Тогда СтрокаТаблицы.УстановитьПометкуУдаления = Истина; КонецЕсли; - СтрокаТаблицы.Родитель = Кэш.ПустаяСсылка; - ОбновитьРазделенныйПредопределенный(Кэш, Шаблоны, СтрокаТаблицы); + СтрокаТаблицы.Родитель = Результат.ПустаяСсылка; + ОбновитьРазделенныйПредопределенный(Результат, ИзменяемыеРеквизиты, СтрокаТаблицы); Если Не СтрокаТаблицы.УстановитьПометкуУдаления И СтрокаТаблицы.ГруппироватьПоОтчету - И Кэш.ПоискРодителей.Получить(СтрокаТаблицы.Отчет) = Неопределено Тогда - Кэш.ПоискРодителей.Вставить(СтрокаТаблицы.Отчет, СтрокаТаблицы.РеквизитСсылка); - ОсновнойВариант = Кэш.ОсновныеВарианты.Добавить(); + И Результат.ПоискРодителей[СтрокаТаблицы.Отчет] = Неопределено Тогда + Результат.ПоискРодителей[СтрокаТаблицы.Отчет] = СтрокаТаблицы.РеквизитСсылка; + ОсновнойВариант = Результат.ОсновныеВарианты.Добавить(); ОсновнойВариант.Отчет = СтрокаТаблицы.Отчет; ОсновнойВариант.Вариант = СтрокаТаблицы.РеквизитСсылка; КонецЕсли; @@ -4191,17 +4236,17 @@ Если СтрокаТаблицы.Обработана Тогда Продолжить; КонецЕсли; - Если Кэш.ОбработанныеПредопределенные.Найти(СтрокаТаблицы.ПредопределенныйВариант) <> Неопределено Тогда + Если Результат.ОбработанныеПредопределенные[СтрокаТаблицы.ПредопределенныйВариант] <> Неопределено Тогда СтрокаТаблицы.УстановитьПометкуУдаления = Истина; КонецЕсли; Если СтрокаТаблицы.УстановитьПометкуУдаления Тогда - РодительСсылка = Кэш.ПустаяСсылка; + РодительСсылка = Результат.ПустаяСсылка; Иначе - РодительСсылка = Кэш.ПоискРодителей.Получить(СтрокаТаблицы.Отчет); + РодительСсылка = Результат.ПоискРодителей[СтрокаТаблицы.Отчет]; КонецЕсли; СтрокаТаблицы.Родитель = РодительСсылка; - ОбновитьРазделенныйПредопределенный(Кэш, Шаблоны, СтрокаТаблицы); + ОбновитьРазделенныйПредопределенный(Результат, ИзменяемыеРеквизиты, СтрокаТаблицы); КонецЦикла; // Обновление родителей пользовательских вариантов. @@ -4230,71 +4275,120 @@ | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления"; Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ОсновныеВариантыОтчетов", Кэш.ОсновныеВарианты); + Запрос.УстановитьПараметр("ОсновныеВариантыОтчетов", Результат.ОсновныеВарианты); Запрос.Текст = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - Кэш.ЕстьИзменения = Истина; - ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ВариантОбъект.Родитель = Выборка.Родитель; - ВариантОбъект.Заблокировать(); - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); + Результат.ЕстьИзменения = Истина; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВариантыОтчетов"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.Родитель = Выборка.Родитель; + ВариантОбъект.Заблокировать(); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); КонецПроцедуры // Обновляет предопределенные данные в разделенном режиме. -Процедура ОбновитьРазделенныйПредопределенный(Кэш, Шаблоны, СтрокаТаблицы) +Процедура ОбновитьРазделенныйПредопределенный(Результат, ИзменяемыеРеквизиты, СтрокаТаблицы) Если СтрокаТаблицы.Обработана Тогда Возврат; КонецЕсли; СтрокаТаблицы.Обработана = Истина; - Если СтрокаТаблицы.УстановитьПометкуУдаления Тогда // Пометить к удалению. - Если СовпадаютЗначенияСвойств(Шаблоны.УстановкаПометкиУдаления, СтрокаТаблицы, "Реквизит") Тогда + Если СтрокаТаблицы.УстановитьПометкуУдаления Тогда + + Если СтрокаТаблицы.РеквизитРодитель = Результат.ПустаяСсылка + И СтрокаТаблицы.РеквизитПометкаУдаления = Истина Тогда Возврат; // Уже помечен. КонецЕсли; - ВариантОбъект = СтрокаТаблицы.РеквизитСсылка.ПолучитьОбъект(); - ЗаполнитьЗначенияСвойств(ВариантОбъект, Шаблоны.УстановкаПометкиУдаления); - Иначе - Если СтрокаТаблицы.ГруппироватьПоОтчету И Не ЗначениеЗаполнено(СтрокаТаблицы.ПредопределенныйВариантРодитель) Тогда - СтрокаТаблицы.Родитель = Кэш.ПустаяСсылка; - КонецЕсли; - Кэш.ОбработанныеПредопределенные.Добавить(СтрокаТаблицы.ПредопределенныйВариант); - ЗаполнитьЗначенияСвойств(Шаблоны.НовыеДанные, СтрокаТаблицы); - Шаблоны.НовыеДанные.ПометкаУдаления = Ложь; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВариантыОтчетов"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СтрокаТаблицы.РеквизитСсылка); + + ВариантОбъект = СтрокаТаблицы.РеквизитСсылка.ПолучитьОбъект(); + ВариантОбъект.Заблокировать(); + + ВариантОбъект.Родитель = Результат.ПустаяСсылка; + ВариантОбъект.ПометкаУдаления = Истина; + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Результат.ЕстьИзменения = Истина; + Возврат; + КонецЕсли; + + Если СтрокаТаблицы.ГруппироватьПоОтчету И Не ЗначениеЗаполнено(СтрокаТаблицы.ПредопределенныйВариантРодитель) Тогда + СтрокаТаблицы.Родитель = Результат.ПустаяСсылка; + КонецЕсли; + Результат.ОбработанныеПредопределенные[СтрокаТаблицы.ПредопределенныйВариант] = Истина; + ЗаполнитьЗначенияСвойств(ИзменяемыеРеквизиты, СтрокаТаблицы); + ИзменяемыеРеквизиты.ПометкаУдаления = Ложь; + + Если Не СтрокаТаблицы.СоздатьНовый И СовпадаютЗначенияСвойств(ИзменяемыеРеквизиты, СтрокаТаблицы, "Реквизит") Тогда + Возврат; // Изменений нет. + КонецЕсли; + + НачатьТранзакцию(); + Попытка Если СтрокаТаблицы.СоздатьНовый Тогда // Добавить. ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); ВариантОбъект.ПредопределенныйВариант = СтрокаТаблицы.ПредопределенныйВариант; ВариантОбъект.Пользовательский = Ложь; Иначе // Обновить (если есть изменения). - Если СовпадаютЗначенияСвойств(Шаблоны.НовыеДанные, СтрокаТаблицы, "Реквизит") Тогда - Возврат; // Изменений нет. - КонецЕсли; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВариантыОтчетов"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", СтрокаТаблицы.РеквизитСсылка); + // Перенос пользовательских настроек. - ЗаменитьКлючиПользовательскихНастроек(Шаблоны.НовыеДанные, СтрокаТаблицы); + ЗаменитьКлючиПользовательскихНастроек(ИзменяемыеРеквизиты, СтрокаТаблицы); + ВариантОбъект = СтрокаТаблицы.РеквизитСсылка.ПолучитьОбъект(); + ВариантОбъект.Заблокировать(); КонецЕсли; - Если ВариантОбъект.ВидимостьПоУмолчаниюПереопределена Тогда - ИсключаяСвойства = "ВидимостьПоУмолчанию"; - Иначе - ИсключаяСвойства = Неопределено; - КонецЕсли; - ЗаполнитьЗначенияСвойств(ВариантОбъект, Шаблоны.НовыеДанные, , ИсключаяСвойства); + ИсключаяСвойства = ?(ВариантОбъект.ВидимостьПоУмолчаниюПереопределена, "ВидимостьПоУмолчанию", Неопределено); + ЗаполнитьЗначенияСвойств(ВариантОбъект, ИзменяемыеРеквизиты, , ИсключаяСвойства); ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Неопределено, ВариантОбъект.Отчет); ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов[ТипОтчетаСтрокой]; + + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Результат.ЕстьИзменения = Истина; + Если СтрокаТаблицы.СоздатьНовый Тогда + СтрокаТаблицы.РеквизитСсылка = ВариантОбъект.Ссылка; КонецЕсли; - Кэш.ЕстьИзменения = Истина; - ВариантОбъект.Заблокировать(); - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ВариантОбъект); - - СтрокаТаблицы.РеквизитСсылка = ВариантОбъект.Ссылка; КонецПроцедуры -// Возвращает Истина если совпадают значения свойств Структуры и Коллекции с Префиксом. +// Возвращает Истина, если совпадают значения свойств Структура и Коллекция с префиксом ПрефиксВКоллекции. Функция СовпадаютЗначенияСвойств(Структура, Коллекция, ПрефиксВКоллекции = "") Для Каждого КлючИЗначение Из Структура Цикл Если Коллекция[ПрефиксВКоллекции + КлючИЗначение.Ключ] <> КлючИЗначение.Значение Тогда @@ -4305,8 +4399,11 @@ КонецФункции // Установка пометки удаления вариантов удаленных отчетов. -Процедура ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш) - ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Удаление вариантов удаленных отчетов (%1)'"), Кэш.Уточнение); +Процедура ПометитьНаУдалениеВариантыУдаленныхОтчетов(Режим, Результат) + + ПредставлениеПроцедуры = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удаление вариантов удаленных отчетов (%1)'"), + НРег(ОтчетыКлиентСервер.ИмяВПредставление(Режим))); ЗаписатьВЖурналЗапускПроцедуры(ПредставлениеПроцедуры); Запрос = Новый Запрос; @@ -4320,27 +4417,48 @@ | И ВариантыОтчетов.ТипОтчета = &ТипОтчета | И ЕСТЬNULL(ВариантыОтчетов.Отчет.ПометкаУдаления, ИСТИНА)"; - Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда + ИмяТаблицы = "Справочник.ВариантыОтчетов"; + Если Режим = "ОбщиеДанныеКонфигурации" Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ВариантыОтчетов", ".ПредопределенныеВариантыОтчетов"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И ВариантыОтчетов.ТипОтчета = &ТипОтчета", ""); - ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда + ИмяТаблицы = "Справочник.ПредопределенныеВариантыОтчетов"; + ИначеЕсли Режим = "ОбщиеДанныеРасширений" Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ВариантыОтчетов", ".ПредопределенныеВариантыОтчетовРасширений"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И ВариантыОтчетов.ТипОтчета = &ТипОтчета", ""); - ИначеЕсли Кэш.Режим = "РазделенныеДанныеКонфигурации" Тогда + ИмяТаблицы = "Справочник.ПредопределенныеВариантыОтчетовРасширений"; + ИначеЕсли Режим = "РазделенныеДанныеКонфигурации" Тогда Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); - ИначеЕсли Кэш.Режим = "РазделенныеДанныеРасширений" Тогда + ИначеЕсли Режим = "РазделенныеДанныеРасширений" Тогда Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Расширение); КонецЕсли; Запрос.Текст = ТекстЗапроса; - МассивСсылокВариантов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - Для Каждого ВариантСсылка Из МассивСсылокВариантов Цикл - Кэш.ЕстьИзменения = Истина; - Кэш.ЕстьВажныеИзменения = Истина; - ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); - ВариантОбъект.Заблокировать(); - ВариантОбъект.ПометкаУдаления = Истина; - ЗаписатьПредопределенный(ВариантОбъект); + СсылкиУдаляемыхВариантов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Для Каждого ВариантСсылка Из СсылкиУдаляемыхВариантов Цикл + Результат.ЕстьИзменения = Истина; + Результат.ЕстьВажныеИзменения = Истина; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(ИмяТаблицы); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ВариантСсылка); + Блокировка.Заблокировать(); + + ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); + Если ВариантОбъект = Неопределено Тогда + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + ВариантОбъект.Заблокировать(); + ВариантОбъект.ПометкаУдаления = Истина; + ЗаписатьПредопределенный(ВариантОбъект); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); @@ -4356,8 +4474,8 @@ КонецЕсли; ОтчетПолноеИмя = АктуальныйВариант.Отчет.ПолноеИмя; - СтарыйКлючОбъекта = ОтчетПолноеИмя +"/"+ СтарыйВариант.КлючВарианта; - НовыйКлючОбъекта = ОтчетПолноеИмя +"/"+ АктуальныйВариант.КлючВарианта; + СтарыйКлючОбъекта = ОтчетПолноеИмя + "/" + СтарыйВариант.КлючВарианта; + НовыйКлючОбъекта = ОтчетПолноеИмя + "/" + АктуальныйВариант.КлючВарианта; Отбор = Новый Структура("КлючОбъекта", СтарыйКлючОбъекта); ВыборкаХранилища = ХранилищеПользовательскихНастроекОтчетов.Выбрать(Отбор); @@ -4412,28 +4530,30 @@ КонецПроцедуры // Регистрирует изменения в таблице замеров. -Процедура ЗарегистрироватьЗамерыВариантаКОбновлению(Кэш, Знач СтарыйКлюч, Знач АктуальныйКлюч, Знач АктуальноеНаименование) +Процедура ЗарегистрироватьЗамерыВариантаКОбновлению(Знач СтарыйКлюч, Знач АктуальныйКлюч, Знач АктуальноеНаименование, Результат) Если ПустаяСтрока(СтарыйКлюч) Тогда СтарыйКлюч = АктуальныйКлюч; КонецЕсли; - ОбновлениеЗамера = Кэш.ТаблицаЗамеров.Добавить(); + ОбновлениеЗамера = Результат.ТаблицаЗамеров.Добавить(); ОбновлениеЗамера.СтароеИмя = СтарыйКлюч + ".Открытие"; ОбновлениеЗамера.АктуальноеИмя = АктуальныйКлюч + ".Открытие"; - ОбновлениеЗамера.АктуальноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ""%1"" (открытие)'"), АктуальноеНаименование); + ОбновлениеЗамера.АктуальноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет ""%1"" (открытие)'"), АктуальноеНаименование); - ОбновлениеЗамера = Кэш.ТаблицаЗамеров.Добавить(); + ОбновлениеЗамера = Результат.ТаблицаЗамеров.Добавить(); ОбновлениеЗамера.СтароеИмя = СтарыйКлюч + ".Формирование"; ОбновлениеЗамера.АктуальноеИмя = АктуальныйКлюч + ".Формирование"; - ОбновлениеЗамера.АктуальноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ""%1"" (формирование)'"), АктуальноеНаименование); + ОбновлениеЗамера.АктуальноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет ""%1"" (формирование)'"), АктуальноеНаименование); - ОбновлениеЗамера = Кэш.ТаблицаЗамеров.Добавить(); + ОбновлениеЗамера = Результат.ТаблицаЗамеров.Добавить(); ОбновлениеЗамера.СтароеИмя = СтарыйКлюч + ".Настройки"; ОбновлениеЗамера.АктуальноеИмя = АктуальныйКлюч + ".Настройки"; - ОбновлениеЗамера.АктуальноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ""%1"" (настройки)'"), АктуальноеНаименование); + ОбновлениеЗамера.АктуальноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет ""%1"" (настройки)'"), АктуальноеНаименование); КонецПроцедуры -// Шаблон таблицы для обновления замеров. Функция ТаблицаЗамеров() Результат = Новый ТаблицаЗначений; Результат.Колонки.Добавить("СтароеИмя", ОписаниеТиповСтрока(150)); @@ -4442,39 +4562,33 @@ Возврат Результат; КонецФункции -// Запись параметров вариантов отчетов в регистр. +// Запись параметров вариантов отчетов (кеш метаданных для ускорения работы): +// ТаблицаФункциональныхОпций - ТаблицаЗначений - связь функциональных опций и предопределенных вариантов отчетов: +// * Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// * ПредопределенныйВариант - СправочникСсылка.ПредопределенныеВариантыОтчетов +// * ИмяФункциональнойОпции - Строка +// ОтчетыСНастройками - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - отчеты, +// в модуле объекта которых размещены процедуры интеграции с общей формой отчета. // -// Значение параметра: -// ХранилищеЗначения (Структура) - Кэшируемые параметры: -// * ТаблицаФункциональныхОпций - ТаблицаЗначений - Имена опций и предопределенных вариантов отчетов. -// ** Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка отчета. -// ** ПредопределенныйВариант - СправочникСсылка.ПредопределенныеВариантыОтчетов - Ссылка варианта. -// ** ИмяФункциональнойОпции - Строка - Имя ФО. -// * ОтчетыСНастройками - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Отчеты, -// в модуле объекта которых размещены процедуры тесной интеграции с общей формой отчета. -// -Процедура ЗаписатьПараметрыВариантовОтчетов(Кэш) - Если Кэш.Режим = "ОбщиеДанныеРасширений" И Не ЗначениеЗаполнено(ПараметрыСеанса.ВерсияРасширений) Тогда +Процедура ЗаписатьТаблицуФункциональныхОпций(Режим, Результат) + Если Режим = "ОбщиеДанныеРасширений" И Не ЗначениеЗаполнено(ПараметрыСеанса.ВерсияРасширений) Тогда Возврат; // Обновление не требуется. КонецЕсли; ПредставлениеПроцедуры = НСтр("ru = 'Запись неразделенного кэша в регистр'"); ЗаписатьВЖурналЗапускПроцедуры(ПредставлениеПроцедуры); - Кэш.ТаблицаФункциональныхОпций.Сортировать("Отчет, ПредопределенныйВариант, ИмяФункциональнойОпции"); - Кэш.ОтчетыСНастройкамиСписок.СортироватьПоЗначению(); + Результат.ТаблицаФункциональныхОпций.Сортировать("Отчет, ПредопределенныйВариант, ИмяФункциональнойОпции"); + Результат.ОтчетыСНастройкамиСписок.СортироватьПоЗначению(); НовоеЗначение = Новый Структура; - НовоеЗначение.Вставить("ТаблицаФункциональныхОпций", Кэш.ТаблицаФункциональныхОпций); - НовоеЗначение.Вставить("ОтчетыСНастройками", Кэш.ОтчетыСНастройкамиСписок.ВыгрузитьЗначения()); + НовоеЗначение.Вставить("ТаблицаФункциональныхОпций", Результат.ТаблицаФункциональныхОпций); + НовоеЗначение.Вставить("ОтчетыСНастройками", Результат.ОтчетыСНастройкамиСписок.ВыгрузитьЗначения()); ПолноеИмяПодсистемы = ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(); - Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда - СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ПолноеИмяПодсистемы); - Если ОбщегоНазначения.ЗначениеВСтрокуXML(НовоеЗначение) <> ОбщегоНазначения.ЗначениеВСтрокуXML(СтароеЗначение) Тогда - СтандартныеПодсистемыСервер.УстановитьПараметрРаботыПрограммы(ПолноеИмяПодсистемы, НовоеЗначение); - КонецЕсли; - ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда + Если Режим = "ОбщиеДанныеКонфигурации" Тогда + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыПрограммы(ПолноеИмяПодсистемы, НовоеЗначение); + ИначеЕсли Режим = "ОбщиеДанныеРасширений" Тогда СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ПолноеИмяПодсистемы, НовоеЗначение); КонецЕсли; @@ -4492,7 +4606,7 @@ // * ОтчетыСНастройками - Массив из СправочникСсылка.ИдентификаторыОбъектовРасширений - Отчеты, // в модуле объекта которых размещены процедуры тесной интеграции с общей формой отчета. // -Процедура ЗафиксироватьТекущуюВерсиюРасширений(Кэш) +Процедура ЗафиксироватьТекущуюВерсиюРасширений() Если Не ЗначениеЗаполнено(ПараметрыСеанса.ВерсияРасширений) Тогда Возврат; // Обновление не требуется. КонецЕсли; @@ -4520,6 +4634,81 @@ ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обновление представлений на других языках. + +// Обработчик регламентного задания ЗаполнениеПредставленийПредопределенныхВариантовОтчетов. +Процедура ЗаполнитьПредставленияПредопределенныхВариантовОтчетов(Языки, ИндексТекущегоЯзыка) Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОбновлениеПредопределенныхВариантовОтчетов); + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + ПараметрыОбновления = ПараметрыОбновленияНастроек(); + ПараметрыОбновления.Отложенное = Истина; + Обновить(ПараметрыОбновления); + + Если ИндексТекущегоЯзыка < Языки.Количество() - 1 Тогда + ЗапланироватьЗаполнениеПредставлений(Языки, ИндексТекущегоЯзыка + 1); + Возврат; + КонецЕсли; + + Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания( + Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбновлениеПредопределенныхВариантовОтчетов)); + Для каждого ЗаполнениеПредставлений Из Задания Цикл + ЗаполнениеПредставлений.Удалить(); + КонецЦикла; + +КонецПроцедуры + +Процедура ЗапланироватьЗаполнениеПредставлений(Знач КодыЯзыков = Неопределено, Знач ИндексЯзыка = 0) + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат; + КонецЕсли; + + Если КодыЯзыков = Неопределено Тогда + КодыЯзыков = Новый Массив; + Для каждого Язык Из Метаданные.Языки Цикл + Если Язык <> ТекущийЯзык() Тогда + КодыЯзыков.Добавить(Язык.КодЯзыка); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ИндексЯзыка >= КодыЯзыков.Количество() Тогда + Возврат; + КонецЕсли; + + КодЯзыка = КодыЯзыков[ИндексЯзыка]; + ЗаполнениеПредставлений = РегламентныеЗадания.СоздатьРегламентноеЗадание( + Метаданные.РегламентныеЗадания.ОбновлениеПредопределенныхВариантовОтчетов); + ЗаполнениеПредставлений.ИмяПользователя = СлужебныйПользователь(КодЯзыка); + ЗаполнениеПредставлений.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Заполнение представлений предопределенных вариантов отчетов для языка %1'"), Строка(КодЯзыка)); + ЗаполнениеПредставлений.Параметры.Добавить(КодыЯзыков); + ЗаполнениеПредставлений.Параметры.Добавить(ИндексЯзыка); + + ЗаполнениеПредставлений.Использование = Истина; + ЗаполнениеПредставлений.Расписание.ВремяНачала = ТекущаяДатаСеанса() + 60; + ЗаполнениеПредставлений.Записать(); + +КонецПроцедуры + +Функция СлужебныйПользователь(Знач КодЯзыка) + Результат = ПользователиИнформационнойБазы.НайтиПоИмени("СлужебныйПользовательДляОбновленияПредставлений"); + Если Результат = Неопределено Тогда + Результат = ПользователиИнформационнойБазы.СоздатьПользователя(); + Результат.Имя = "СлужебныйПользовательДляОбновленияПредставлений"; + Результат.ЗапрещеноИзменятьПароль = Истина; + Результат.ПоказыватьВСпискеВыбора = Ложь; + КонецЕсли; + Результат.Язык = ЛокализацияСервер.ЯзыкПоКоду(КодЯзыка); + Результат.Записать(); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы / Переход к редакции 2.1. @@ -4600,8 +4789,8 @@ // Добавляет элементы условного оформления дерева подсистем. Процедура УстановитьУсловноеОформлениеДереваПодсистем(Форма) Экспорт - Форма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ВариантыОтчетовКлиентСервер.ПредставлениеВажный()); - Форма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже()); + Форма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ПредставлениеВажный()); + Форма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ПредставлениеСмТакже()); Элемент = Форма.УсловноеОформление.Элементы.Добавить(); @@ -4693,9 +4882,9 @@ СтрокаДерева = Найденные[0]; Если СтрокаРазмещения.Важный Тогда - СтрокаДерева.Важность = ВариантыОтчетовКлиентСервер.ПредставлениеВажный(); + СтрокаДерева.Важность = ПредставлениеВажный(); ИначеЕсли СтрокаРазмещения.СмТакже Тогда - СтрокаДерева.Важность = ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже(); + СтрокаДерева.Важность = ПредставлениеСмТакже(); Иначе СтрокаДерева.Важность = ""; КонецЕсли; @@ -4727,10 +4916,10 @@ // Оставить как есть КонецЕсли; - Если Подсистема.Важность = ВариантыОтчетовКлиентСервер.ПредставлениеВажный() Тогда + Если Подсистема.Важность = ПредставлениеВажный() Тогда СтрокаТабличнойЧасти.Важный = Истина; СтрокаТабличнойЧасти.СмТакже = Ложь; - ИначеЕсли Подсистема.Важность = ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже() Тогда + ИначеЕсли Подсистема.Важность = ПредставлениеСмТакже() Тогда СтрокаТабличнойЧасти.Важный = Ложь; СтрокаТабличнойЧасти.СмТакже = Истина; Иначе @@ -4740,29 +4929,70 @@ КонецЦикла; КонецПроцедуры +// Представление группы важности. +Функция ПредставлениеСмТакже() Экспорт + Возврат НСтр("ru = 'См. также'"); +КонецФункции + +// Представление группы важности. +Функция ПредставлениеВажный() Экспорт + Возврат НСтр("ru = 'Важный'"); +КонецФункции + +// Разделитель, который используется для отображения нескольких наименований в интерфейсе. +Функция РазделительПредставления() + Возврат ", "; +КонецФункции + +// Превращает тип отчета в строковый идентификатор. +Функция ТипОтчета(ОтчетСсылка, РезультатСтрокой = Ложь) Экспорт + ТипСсылки = ТипЗнч(ОтчетСсылка); + Если ТипСсылки = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Ключ = "Внутренний"; + ИначеЕсли ТипСсылки = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + Ключ = "Расширение"; + ИначеЕсли ТипСсылки = Тип("Строка") Тогда + Ключ = "Внешний"; + ИначеЕсли ТипСсылки = ТипСсылкиДополнительногоОтчета() Тогда + Ключ = "Дополнительный"; + Иначе + Ключ = ?(РезультатСтрокой, Неопределено, "ПустаяСсылка"); + КонецЕсли; + Возврат ?(РезультатСтрокой, Ключ, ПредопределенноеЗначение("Перечисление.ТипыОтчетов." + Ключ)); +КонецФункции + +// Возвращает тип ссылки дополнительного отчета. +Функция ТипСсылкиДополнительногоОтчета() + Существует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"); + Если Существует Тогда + Возврат Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки"); + КонецЕсли; + + Возврат Неопределено; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Формирование представлений полей, параметров и отборов для поиска. -// Вызывается из события ПриЗаписи вариантов. Часть проверок выполняется до вызова. -Функция ПроиндексироватьСодержимоеСхемы(ВариантОбъект) Экспорт - ДополнительныеСвойства = ВариантОбъект.ДополнительныеСвойства; - ТребуетсяЗапись = Ложь; +// Вызывается из события ПриЗаписи вариантов. +// Возвращаемое значение: +// Булево - Истина, если поля для поиска заполнены и требуется записать ВариантОбъект. +// +Функция ЗаполнитьПоляДляПоиска(ВариантОбъект, СведенияОбОтчете = Неопределено) Экспорт - // В некоторых случаях заранее известно что настройки уже проиндексированы. - ИндексироватьСхему = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ИндексироватьСхему"); - Если ИндексироватьСхему = Ложь Тогда - Возврат ТребуетсяЗапись; // Заполнение не требуется. - КонецЕсли; - ПроверятьХеш = Истина; - Если ИндексироватьСхему = Истина Тогда - ПроверятьХеш = Ложь; - КонецЕсли; + ПоляДляПоиска = ПоляДляПоиска(ВариантОбъект); - // Механика ручного индексирования из данных варианта. - ЗаполнитьПоля = Лев(ВариантОбъект.НаименованияПолей, 1) <> "#"; - ЗаполнитьФильтры = Лев(ВариантОбъект.НаименованияПараметровИОтборов, 1) <> "#"; - Если Не ЗаполнитьПоля И Не ЗаполнитьФильтры Тогда - Возврат ТребуетсяЗапись; // Заполнение не требуется. + ПроверятьХеш = СведенияОбОтчете = Неопределено Или Не СведенияОбОтчете.ИндексироватьСхему; + Если ПроверятьХеш Тогда + // Проверка, заполнены ли поля для поиска ранее. + ЗаполнитьПоля = Лев(ПоляДляПоиска.НаименованияПолей, 1) <> "#"; + ЗаполнитьПараметрыИОтборы = Лев(ПоляДляПоиска.НаименованияПараметровИОтборов, 1) <> "#"; + Если Не ЗаполнитьПоля И Не ЗаполнитьПараметрыИОтборы Тогда + Возврат Ложь; // Заполнение не требуется. + КонецЕсли; + Иначе + ЗаполнитьПоля = Истина; + ЗаполнитьПараметрыИОтборы = Истина; КонецЕсли; // Получение объекта отчета, настроек СКД и варианта. @@ -4771,52 +5001,53 @@ Или Не ВариантОбъект.Пользовательский; // Предустановленные настройки поиска. - НастройкиДляПоиска = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "НастройкиДляПоиска"); + НастройкиДляПоиска = ?(СведенияОбОтчете <> Неопределено, СведенияОбОтчете.НастройкиДляПоиска, Неопределено); Если НастройкиДляПоиска <> Неопределено Тогда - Если ЗаполнитьПоля И ЗначениеЗаполнено(НастройкиДляПоиска.НаименованияПолей) Тогда - ВариантОбъект.НаименованияПолей = "#" + СокрЛП(НастройкиДляПоиска.НаименованияПолей); + ТребуетсяЗапись = Ложь; + Если ЗначениеЗаполнено(НастройкиДляПоиска.НаименованияПолей) Тогда + ПоляДляПоиска.НаименованияПолей = "#" + СокрЛП(НастройкиДляПоиска.НаименованияПолей); ЗаполнитьПоля = Ложь; ТребуетсяЗапись = Истина; КонецЕсли; - Если ЗаполнитьФильтры И ЗначениеЗаполнено(НастройкиДляПоиска.НаименованияПараметровИОтборов) Тогда - ВариантОбъект.НаименованияПараметровИОтборов = "#" + СокрЛП(НастройкиДляПоиска.НаименованияПараметровИОтборов); - ЗаполнитьФильтры = Ложь; + Если ЗначениеЗаполнено(НастройкиДляПоиска.НаименованияПараметровИОтборов) Тогда + ПоляДляПоиска.НаименованияПараметровИОтборов = "#" + СокрЛП(НастройкиДляПоиска.НаименованияПараметровИОтборов); + ЗаполнитьПараметрыИОтборы = Ложь; ТребуетсяЗапись = Истина; КонецЕсли; Если ЗначениеЗаполнено(НастройкиДляПоиска.КлючевыеСлова) Тогда - ВариантОбъект.КлючевыеСлова = "#" + СокрЛП(НастройкиДляПоиска.КлючевыеСлова); + ПоляДляПоиска.КлючевыеСлова = "#" + СокрЛП(НастройкиДляПоиска.КлючевыеСлова); ТребуетсяЗапись = Истина; КонецЕсли; - Если Не ЗаполнитьПоля И Не ЗаполнитьФильтры Тогда + Если Не ЗаполнитьПоля И Не ЗаполнитьПараметрыИОтборы Тогда + УстановитьПоляДляПоиска(ВариантОбъект, ПоляДляПоиска); Возврат ТребуетсяЗапись; // Заполнение выполнено - объект надо записать. КонецЕсли; КонецЕсли; // В некоторых сценариях объект может быть уже закэширован в дополнительных свойствах. - ОтчетОбъект = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ОтчетОбъект"); + ОтчетОбъект = ?(СведенияОбОтчете <> Неопределено, СведенияОбОтчете.ОтчетОбъект, Неопределено); // Когда объект отчета не закэширован - подключение отчета штатным способом. Если ОтчетОбъект = Неопределено Тогда Подключение = ПодключитьОтчетОбъект(ВариантОбъект.Отчет, Ложь); Если Подключение.Успех Тогда ОтчетОбъект = Подключение.Объект; - Иначе - ОтчетОбъект = ""; + КонецЕсли; + Если СведенияОбОтчете <> Неопределено Тогда + СведенияОбОтчете.ОтчетОбъект = ОтчетОбъект; + КонецЕсли; + Если ОтчетОбъект = Неопределено Тогда ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, Подключение.ТекстОшибки, ВариантОбъект.Ссылка); + Возврат Ложь; // Возникла проблема при подключении отчета. КонецЕсли; - ДополнительныеСвойства.Вставить("ОтчетОбъект", ОтчетОбъект); - КонецЕсли; - Если ОтчетОбъект = "" Тогда - Возврат ТребуетсяЗапись; // Возникла проблема при подключении отчета. КонецЕсли; // Извлечение текстов макетов возможно только после получения объекта отчета. - Если ЗаполнитьПоля И НастройкиДляПоиска <> Неопределено И ЗначениеЗаполнено(НастройкиДляПоиска.ИменаМакетов) Тогда - ВариантОбъект.НаименованияПолей = "#" + ИзвлечьТекстМакета(ОтчетОбъект, НастройкиДляПоиска.ИменаМакетов); - ТребуетсяЗапись = истина; - ЗаполнитьПоля = Ложь; - Если Не ЗаполнитьПоля И Не ЗаполнитьФильтры Тогда - Возврат ТребуетсяЗапись; // Заполнение выполнено - объект надо записать. + Если НастройкиДляПоиска <> Неопределено И ЗначениеЗаполнено(НастройкиДляПоиска.ИменаМакетов) Тогда + ПоляДляПоиска.НаименованияПолей = "#" + ИзвлечьТекстМакета(ОтчетОбъект, НастройкиДляПоиска.ИменаМакетов); + Если Не ЗаполнитьПараметрыИОтборы Тогда + УстановитьПоляДляПоиска(ВариантОбъект, ПоляДляПоиска); + Возврат Истина; // Заполнение выполнено - объект надо записать. КонецЕсли; КонецЕсли; @@ -4827,22 +5058,18 @@ Если СхемаКД = Неопределено Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для варианта ""%1"" отчета ""%2"" не заполнены настройки поиска: - |Наименования полей или Наименования параметров и отборов.'"), - ВариантОбъект.КлючВарианта, - ВариантОбъект.Отчет); + |Наименования полей, параметров и отборов.'"), + ВариантОбъект.КлючВарианта, ВариантОбъект.Отчет); Если ЭтоПредопределенный Тогда ТекстОшибки = ТекстОшибки + Символы.ПС + НСтр("ru = 'Подробнее - см. процедуру ""НастроитьВариантыОтчетов"" модуля ""ВариантыОтчетовПереопределяемый"".'"); КонецЕсли; ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Информация, ТекстОшибки, ВариантОбъект.Ссылка); - Возврат ТребуетсяЗапись; // Возникла проблема. + Возврат Ложь; КонецЕсли; - // Чтение настроек из переданных параметров. - НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "НастройкиКД"); - - // Чтение настроек из схемы. + НастройкиКД = ?(СведенияОбОтчете <> Неопределено, СведенияОбОтчете.НастройкиКД, Неопределено); Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Тогда ВариантНастроекКД = СхемаКД.ВариантыНастроек.Найти(ВариантОбъект.КлючВарианта); Если ВариантНастроекКД <> Неопределено Тогда @@ -4861,7 +5088,7 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстСообщения, ВариантОбъект.Ссылка); - Возврат ТребуетсяЗапись; // Возникла проблема. + Возврат Ложь; КонецПопытки; КонецЕсли; @@ -4874,23 +5101,17 @@ НСтр("ru = 'Не удалось прочитать настройки предопределенного варианта отчета ""%1"".'"), ВариантОбъект.КлючЗамеров), ВариантОбъект.Ссылка); КонецЕсли; - Возврат ТребуетсяЗапись; // Возникла проблема. + Возврат Ложь; КонецЕсли; - ХешЭтихНастроек = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(ОбщегоНазначения.ЗначениеВСтрокуXML(НастройкиКД)); - Если ПроверятьХеш И ВариантОбъект.ХешНастроек = ХешЭтихНастроек Тогда - Возврат ТребуетсяЗапись; // Настройки не изменились. + ХешНовыхНастроек = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(ОбщегоНазначения.ЗначениеВСтрокуXML(НастройкиКД)); + Если ПроверятьХеш И ВариантОбъект.ХешНастроек = ХешНовыхНастроек Тогда + Возврат Ложь; // Настройки не изменились. КонецЕсли; - ТребуетсяЗапись = истина; - ВариантОбъект.ХешНастроек = ХешЭтихНастроек; + ВариантОбъект.ХешНастроек = ХешНовыхНастроек; - // Описывает связь настроек компоновки данных и схемы компоновки данных. КомпоновщикНастроекКД = ОтчетОбъект.КомпоновщикНастроек; - - // Выполняет инициализацию компоновщика и его настроек (Настройки) источником доступных настроек. КомпоновщикНастроекКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКД)); - - // Загружает настройки в компоновщик и сбрасывает пользовательские настройки. ОтчетыКлиентСервер.ЗагрузитьНастройки(КомпоновщикНастроекКД, НастройкиКД); Если ЗаполнитьПоля Тогда @@ -4898,28 +5119,130 @@ // См. "АвтоВыбранноеПолеКомпоновкиДанных", "АвтоПолеГруппировкиКомпоновкиДанных", // "АвтоЭлементПорядкаКомпоновкиДанных" в синтакс-помощнике. КомпоновщикНастроекКД.РазвернутьАвтоПоля(); - - ВариантОбъект.НаименованияПолей = СформироватьПредставленияПолей(КомпоновщикНастроекКД); + ПоляДляПоиска.НаименованияПолей = СформироватьПредставленияПолей(КомпоновщикНастроекКД); КонецЕсли; - Если ЗаполнитьФильтры Тогда - ВариантОбъект.НаименованияПараметровИОтборов = СформироватьПредставленияПараметровИОтборов(КомпоновщикНастроекКД); + Если ЗаполнитьПараметрыИОтборы Тогда + ПоляДляПоиска.НаименованияПараметровИОтборов = СформироватьПредставленияПараметровИОтборов(КомпоновщикНастроекКД); КонецЕсли; - Возврат ТребуетсяЗапись; + УстановитьПоляДляПоиска(ВариантОбъект, ПоляДляПоиска); + Возврат Истина; + КонецФункции +Функция ПоляДляПоиска(ВариантОтчета) + + Результат = Новый Структура; + Результат.Вставить("НаименованияПолей", ""); + Результат.Вставить("НаименованияПараметровИОтборов", ""); + ЭтоПользовательскийВариантОтчета = (ТипЗнч(ВариантОтчета) = Тип("СправочникОбъект.ВариантыОтчетов")); + Если Не ЭтоПользовательскийВариантОтчета Тогда + Результат.Вставить("КлючевыеСлова", ""); + Результат.Вставить("Описание", ""); + Результат.Вставить("Наименование", ""); + КонецЕсли; + + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Или ЭтоПользовательскийВариантОтчета Тогда + ЗаполнитьЗначенияСвойств(Результат, ВариантОтчета); + Возврат Результат; + КонецЕсли; + + ПредставленияДляЯзыка = ВариантОтчета.Представления.Найти(ТекущийЯзык().КодЯзыка, "КодЯзыка"); + Если ПредставленияДляЯзыка = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Результат, ПредставленияДляЯзыка); + Возврат Результат; + +КонецФункции + +Процедура УстановитьПоляДляПоиска(ВариантОтчета, ПоляДляПоиска) + + ЭтоПользовательскийВариантОтчета = (ТипЗнч(ВариантОтчета) = Тип("СправочникОбъект.ВариантыОтчетов")); + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Или ЭтоПользовательскийВариантОтчета Тогда + ЗаполнитьЗначенияСвойств(ВариантОтчета, ПоляДляПоиска); + Возврат; + КонецЕсли; + + ПредставленияДляЯзыка = ВариантОтчета.Представления.Найти(ТекущийЯзык().КодЯзыка, "КодЯзыка"); + Если ПредставленияДляЯзыка = Неопределено Тогда + ПредставленияДляЯзыка = ВариантОтчета.Представления.Добавить(); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ПредставленияДляЯзыка, ПоляДляПоиска); + ПредставленияДляЯзыка.КодЯзыка = ТекущийЯзык().КодЯзыка; + +КонецПроцедуры + +Процедура НачатьЗаполнениеПредставлений(Знач Режим, Знач СброситьКеш) + УстановитьПризнакЗаполненияПредставлений(ТекущаяДатаСеанса(), СброситьКеш, Режим); +КонецПроцедуры + +Процедура УстановитьПризнакЗаполненияПредставлений(Знач Значение, Знач СброситьКеш, Знач Режим) + + ИмяПараметра = ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы() + ".ПредставленияЗаполнены"; + Если Режим = "ОбщиеДанныеКонфигурации" Тогда + Параметры = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); + Иначе + Параметры = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра); + КонецЕсли; + Если Параметры = Неопределено Тогда + Параметры = Новый Соответствие; + ИначеЕсли СброситьКеш Тогда + Параметры.Очистить(); + КонецЕсли; + Параметры[ТекущийЯзык().КодЯзыка] = Значение; + + Если Режим = "ОбщиеДанныеКонфигурации" Тогда + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыПрограммы(ИмяПараметра, Параметры); + Иначе + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, Параметры); + КонецЕсли; + +КонецПроцедуры + +Функция ПредставленияЗаполнены(Знач Режим = "") + + ИмяПараметра = ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы() + ".ПредставленияЗаполнены"; + Если Режим = "ОбщиеДанныеКонфигурации" Тогда + Параметры = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); + ИначеЕсли Режим = "РазделенныеДанныеКонфигурации" Тогда + Параметры = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра); + Иначе + РезультатОбщий = ПредставленияЗаполнены("ОбщиеДанныеКонфигурации"); + РезультатРазделенный = ПредставленияЗаполнены("РазделенныеДанныеКонфигурации"); + Если РезультатОбщий = "НеЗаполнены" Или РезультатРазделенный = "НеЗаполнены" Тогда + Возврат "НеЗаполнены"; + ИначеЕсли РезультатОбщий = "Заполняются" Или РезультатРазделенный = "Заполняются" Тогда + Возврат "Заполняются"; + КонецЕсли; + Возврат "Заполнены"; + КонецЕсли; + Если Параметры = Неопределено Тогда + Параметры = Новый Соответствие; + КонецЕсли; + + Результат = Параметры[ТекущийЯзык().КодЯзыка]; + Если ТипЗнч(Результат) = Тип("Дата") Тогда + Возврат ?(ТекущаяДатаСеанса() - Результат < 15 * 60, "Заполняются", "НеЗаполнены"); // таймаут - 15 минут + КонецЕсли; + Возврат ?(Результат = Истина, "Заполнены", "НеЗаполнены"); + +КонецФункции + // Представления группировок и полей из СКД. Функция СформироватьПредставленияПолей(КомпоновщикНастроекКД) - Результат = Новый Массив; - - ДополнитьМассивИзСтрокиСРазделителями(Результат, Строка(КомпоновщикНастроекКД.Настройки.Выбор)); - - МассивКоллекций = Новый Массив; - МассивКоллекций.Добавить(КомпоновщикНастроекКД.Настройки.Структура); - Пока МассивКоллекций.Количество() > 0 Цикл - Коллекция = МассивКоллекций[0]; - МассивКоллекций.Удалить(0); + + Результат = СтрРазделить(Строка(КомпоновщикНастроекКД.Настройки.Выбор), ",", Ложь); + + Коллекции = Новый Массив; + Коллекции.Добавить(КомпоновщикНастроекКД.Настройки.Структура); + Индекс = 0; + Пока Индекс < Коллекции.Количество() Цикл + Коллекция = Коллекции[Индекс]; + Индекс = Индекс + 1; Для Каждого Настройка Из Коллекция Цикл @@ -4930,52 +5253,49 @@ Настройка = Настройка.Настройки; КонецЕсли; - ДополнитьМассивИзСтрокиСРазделителями(Результат, Строка(Настройка.Выбор)); - + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, СтрРазделить(Строка(Настройка.Выбор), ",", Ложь)); + Если ТипЗнч(Настройка) = Тип("НастройкиКомпоновкиДанных") Тогда - МассивКоллекций.Добавить(Настройка.Структура); + Коллекции.Добавить(Настройка.Структура); ИначеЕсли ТипЗнч(Настройка) = Тип("ГруппировкаКомпоновкиДанных") Тогда Если Не Настройка.Использование Тогда Продолжить; КонецЕсли; - МассивКоллекций.Добавить(Настройка.Структура); + Коллекции.Добавить(Настройка.Структура); ИначеЕсли ТипЗнч(Настройка) = Тип("ТаблицаКомпоновкиДанных") Тогда Если Не Настройка.Использование Тогда Продолжить; КонецЕсли; - МассивКоллекций.Добавить(Настройка.Строки); + Коллекции.Добавить(Настройка.Строки); ИначеЕсли ТипЗнч(Настройка) = Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда Если Не Настройка.Использование Тогда Продолжить; КонецЕсли; - МассивКоллекций.Добавить(Настройка.Структура); + Коллекции.Добавить(Настройка.Структура); ИначеЕсли ТипЗнч(Настройка) = Тип("ДиаграммаКомпоновкиДанных") Тогда Если Не Настройка.Использование Тогда Продолжить; КонецЕсли; - МассивКоллекций.Добавить(Настройка.Серии); - МассивКоллекций.Добавить(Настройка.Точки); + Коллекции.Добавить(Настройка.Серии); + Коллекции.Добавить(Настройка.Точки); ИначеЕсли ТипЗнч(Настройка) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда Если Не Настройка.Использование Тогда Продолжить; КонецЕсли; - МассивКоллекций.Добавить(Настройка.Структура); + Коллекции.Добавить(Настройка.Структура); КонецЕсли; КонецЦикла; КонецЦикла; - РазделительХранения = ВариантыОтчетовКлиентСервер.РазделительХранения(); - Возврат СтрСоединить(Результат, РазделительХранения); + Возврат СтрСоединить(ОбщегоНазначенияКлиентСервер.СвернутьМассив(Результат), Символы.ПС); КонецФункции // Представления параметров и отборов из СКД. Функция СформироватьПредставленияПараметровИОтборов(КомпоновщикНастроекКД) Результат = Новый Массив; - НастройкиКД = КомпоновщикНастроекКД.Настройки; - Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; Для Каждого ПользовательскаяНастройка Из КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы Цикл @@ -4997,7 +5317,8 @@ ОбщаяНастройка = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору(НастройкиКД, Идентификатор); Если ОбщаяНастройка = Неопределено Тогда Продолжить; - ИначеЕсли ПользовательскаяНастройка.РежимОтображения = Режимы.Авто + КонецЕсли; + Если ПользовательскаяНастройка.РежимОтображения = Режимы.Авто И ОбщаяНастройка.РежимОтображения <> Режимы.БыстрыйДоступ Тогда Продолжить; КонецЕсли; @@ -5018,14 +5339,13 @@ КонецЕсли; ЭлементЗаголовок = СокрЛП(ЭлементЗаголовок); - Если ЭлементЗаголовок <> "" И Результат.Найти(ЭлементЗаголовок) = Неопределено Тогда + Если ЭлементЗаголовок <> "" Тогда Результат.Добавить(ЭлементЗаголовок); КонецЕсли; КонецЦикла; - РазделительХранения = ВариантыОтчетовКлиентСервер.РазделительХранения(); - Возврат СтрСоединить(Результат, РазделительХранения); + Возврат СтрСоединить(ОбщегоНазначенияКлиентСервер.СвернутьМассив(Результат), Символы.ПС); КонецФункции // Извлекает текстовую информацию из макета. @@ -5034,6 +5354,7 @@ Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда ИменаМакетов = СтрРазделить(ИменаМакетов, ",", Ложь); КонецЕсли; + ТекстыОбластей = Новый Массив; Для Каждого ИмяМакета Из ИменаМакетов Цикл Макет = ОтчетОбъект.ПолучитьМакет(СокрЛП(ИмяМакета)); Если ТипЗнч(Макет) = Тип("ТабличныйДокумент") Тогда @@ -5043,45 +5364,29 @@ Для НомерКолонки = 1 По Право Цикл Для НомерСтроки = 1 По Низ Цикл Ячейка = Макет.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); - Если ПроверенныеЯчейки.Получить(Ячейка.Имя) = Неопределено Тогда - ПроверенныеЯчейки.Вставить(Ячейка.Имя, Истина); - Если ТипЗнч(Ячейка) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда - ТекстОбласти = СокрЛП(Ячейка.Текст); - Если ТекстОбласти <> "" Тогда - ИзвлеченныйТекст = ИзвлеченныйТекст + Символы.ПС + ТекстОбласти; - КонецЕсли; - КонецЕсли; + Если ПроверенныеЯчейки[Ячейка.Имя] <> Неопределено Тогда + Продолжить; КонецЕсли; + ПроверенныеЯчейки[Ячейка.Имя] = Истина; + Если ТипЗнч(Ячейка) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда + Продолжить; + КонецЕсли; + ТекстОбласти = СокрЛП(Ячейка.Текст); + Если ПустаяСтрока(ТекстОбласти) Тогда + Продолжить; + КонецЕсли; + + ТекстыОбластей.Добавить(ТекстОбласти); + КонецЦикла; КонецЦикла; ИначеЕсли ТипЗнч(Макет) = Тип("ТекстовыйДокумент") Тогда - ИзвлеченныйТекст = ИзвлеченныйТекст + Символы.ПС + СокрЛП(Макет.ПолучитьТекст()); + ТекстыОбластей.Добавить(СокрЛП(Макет.ПолучитьТекст())); КонецЕсли; КонецЦикла; - ИзвлеченныйТекст = СокрЛ(ИзвлеченныйТекст); - Возврат ИзвлеченныйТекст; + Возврат СтрСоединить(ТекстыОбластей, Символы.ПС); КонецФункции -// Добавляет в Массив элементы из СтрокаСРазделителями, если их там нет. -Процедура ДополнитьМассивИзСтрокиСРазделителями(Массив, СтрокаСРазделителями) - СтрокаСРазделителями = СокрЛП(СтрокаСРазделителями); - Если СтрокаСРазделителями = "" Тогда - Возврат; - КонецЕсли; - Позиция = СтрНайти(СтрокаСРазделителями, ","); - Пока Позиция > 0 Цикл - Подстрока = СокрП(Лев(СтрокаСРазделителями, Позиция - 1)); - Если Подстрока <> "" И Массив.Найти(Подстрока) = Неопределено Тогда - Массив.Добавить(Подстрока); - КонецЕсли; - СтрокаСРазделителями = СокрЛ(Сред(СтрокаСРазделителями, Позиция + 1)); - Позиция = СтрНайти(СтрокаСРазделителями, ","); - КонецЦикла; - Если СтрокаСРазделителями <> "" И Массив.Найти(СтрокаСРазделителями) = Неопределено Тогда - Массив.Добавить(СтрокаСРазделителями); - КонецЕсли; -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Уменьшение количества пользовательских настроек. @@ -5152,7 +5457,7 @@ КонецФункции Функция НастройкиФормыОтчета(ОтчетСсылка, КлючВарианта, ОтчетОбъект) Экспорт - НастройкиОтчета = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); + НастройкиОтчета = ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию(); ОтчетыСНастройками = ВариантыОтчетовПовтИсп.Параметры().ОтчетыСНастройками; Если ОтчетыСНастройками.Найти(ОтчетСсылка) = Неопределено @@ -5176,7 +5481,7 @@ Попытка ОтчетОбъект.ОпределитьНастройкиФормы(Неопределено, КлючВарианта, НастройкиОтчета); Исключение - НастройкиОтчета = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); + НастройкиОтчета = ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию(); КонецПопытки; Если Не ГлобальныеНастройки().РазрешеноИзменятьВарианты Тогда @@ -5194,29 +5499,50 @@ Возврат Не ОбщегоНазначения.РазделениеВключено(); КонецФункции -// Находит ссылки по параметрам поиска. -// Подсвечивает найденные места. +Функция ТаблицаВариантовОтчетов(Знач ПараметрыПоиска) Экспорт + + Возврат НайтиВариантыОтчетов(ПараметрыПоиска, Истина).ТаблицаЗначений; + +КонецФункции + +// Возвращает список вариантов отчетов согласно заданным параметрам. +// При поиске по подстроке СтрокаПоиска также подсвечивает найденные места в названиях и описаниях отчетов. // // Параметры: -// ПараметрыПоиска - Структура - Условия поиска. -// * СтрокаПоиска - Строка - Необязательный. -// * Автор - СправочникСсылка.Пользователи - Необязательный. -// * Подсистемы - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Необязательный. +// ПараметрыПоиска - Структура - со свойствами: +// * СтрокаПоиска - Строка - Необязательный. Одно или несколько слов, которые содержатся в названиях и описаниях +// искомых вариантов отчетов. +// * Подсистемы - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Необязательный. +// Искать только среди вариантов отчетов, относящихся к указанным подсистемам. +// * ЖесткийОтборПоПодсистемам - Булево - Необязательный. Если Истина, выдавать результаты только из указанных подсистем. +// Иначе предлагать также релевантные результаты поиска из других подсистем. +// * Отчеты - Массив из СправочникСсылка.ВариантыОтчетов - Необязательный. Искать только среди указанных отчетов. +// * ТипыОтчетов - Массив из ПеречислениеСсылка.ТипыОтчетов - Необязательный. Искать только среди указанных +// типов отчетов. +// * ПометкаУдаления - Булево - Необязательный. Если Ложь, то возвращаются все варианты отчетов. +// Если Истина или не задано, то возвращаются только варианты отчетов, не помеченные на удаление. +// * ТолькоЛичные - Булево - Необязательный. Если Ложь или не задано, то администратору возвращаются все варианты отчетов, +// а пользователю только доступные ему варианты отчетов. +// Если Истина, то администратору также возвращаются только личные варианты отчетов как и для +// неполноправного пользователя. +// ПолучатьИтоговуюТаблицу - Булево - Необязательный. Если Истина, то в возвращаемом значении заполняется свойство ТаблицаЗначений. +// ПолучатьПодсветку - Булево - Необязательный. Если Истина, то в возвращаемом значении заполняются свойства +// ПодсветкаВариантов, Подсистемы, ПодсветкаПодсистем, ВариантыСвязанныеСПодсистемами, РодителиСвязанныеСВариантами. // // Возвращаемое значение: -// Структура - Когда выполняется поиск по строке. +// Структура - со свойствами: // * Ссылки - Массив из СправочникСсылка.ВариантыОтчетов - -// Заполняется вариантами отчетов, в данных которых найдены все искомые слова. +// Вариантами отчетов, в названиях и описаниях которых, найдены все искомые слова. // * ПодсветкаВариантов - Соответствие - Подсветка найденных слов (если задана СтрокаПоиска). // ** Ключ - СправочникСсылка.ВариантыОтчетов. -// ** Значение - Структура. +// ** Значение - Структура - со свойствами: // *** Ссылка - СправочникСсылка.ВариантыОтчетов. // *** НаименованияПолей - Строка. // *** НаименованияПараметровИОтборов - Строка. // *** КлючевыеСлова - Строка. // *** Описание - Строка. // *** НаименованияПользовательскихНастроек - Строка. -// *** ГдеНайдены - Структура. +// *** ГдеНайдены - Структура: // **** НаименованияПолей - Число. // **** НаименованияПараметровИОтборов - Число. // **** КлючевыеСлова - Число. @@ -5227,75 +5553,71 @@ // Для таких подсистем должны выводиться все вложенные варианты отчетов. // * ПодсветкаПодсистем - Соответствие - Подсветка найденных слов (если задана СтрокаПоиска). // ** Ключ - СправочникСсылка.ВариантыОтчетов. -// ** Значение - Структура. +// ** Значение - Структура - со свойствами: // *** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных. // *** НаименованиеПодсистемы - Строка. -// *** ВсеСловаНайдены - Булево. -// *** НайденныеСлова - Массив. // * ВариантыСвязанныеСПодсистемами - Соответствие - Варианты отчетов и их подсистемы. // Заполняется когда часть слов найдена в данных варианта, а другая часть - в наименованиях его подсистем. // В этом случае вариант должен выводиться только в найденных подсистемах (а в других - не должен выводиться). // Применяется в панели отчетов. // ** Ключ - СправочникСсылка.ВариантыОтчетов - Вариант. // ** Значение - Массив Из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Подсистемы. +// * ТаблицаЗначений - ТаблицаЗначений - заполняется, если задан ПараметрыПоиска.ПолучатьИтоговуюТаблицу: +// ** Ссылка - СправочникСсылка.ВариантыОтчетов +// ** Родитель - СправочникСсылка.ВариантыОтчетов +// ** Наименование - Строка +// ** ТолькоДляАвтора - Булево +// ** Автор - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи +// ** АвторПредставление - Строка +// ** Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений, +// Строка, СправочникСсылка.ДополнительныеОтчетыИОбработки +// ** ИмяОтчета - Строка +// ** КлючВарианта - Строка +// ** ТипОтчета - ПеречислениеСсылка.ТипыОтчетов +// ** Пользовательский - Булево +// ** ПредопределенныйВариант - СправочникСсылка.ПредопределенныеВариантыОтчетов, СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений +// ** НаименованияПараметровИОтборов - Строка +// ** НаименованияПолей - Строка +// ** КлючевыеСлова - Строка +// ** Описание - Строка +// ** Подсистема +// ** НаименованиеПодсистемы - Строка +// ** КлючПользовательскойНастройки - Строка +// ** ПредставлениеПользовательскойНастройки - Строка +// ** ПометкаУдаления - Булево // -Функция НайтиСсылки(ПараметрыПоиска) Экспорт +Функция НайтиВариантыОтчетов(Знач ПараметрыПоиска, Знач ПолучатьИтоговуюТаблицу = Ложь, Знач ПолучатьПодсветку = Ложь) Экспорт - Если ПараметрыПоиска.Свойство("СтрокаПоиска") И ЗначениеЗаполнено(ПараметрыПоиска.СтрокаПоиска) Тогда - ЕстьСтрокаПоиска = Истина; - Иначе - ЕстьСтрокаПоиска = Ложь; - КонецЕсли; - - Если ПараметрыПоиска.Свойство("Отчеты") И ЗначениеЗаполнено(ПараметрыПоиска.Отчеты) Тогда - ЕстьОтборПоОтчетам = Истина; - Иначе - ЕстьОтборПоОтчетам = Ложь; - КонецЕсли; - - Если ПараметрыПоиска.Свойство("Подсистемы") И ЗначениеЗаполнено(ПараметрыПоиска.Подсистемы) Тогда - ЕстьОтборПоПодсистемам = Истина; - Иначе - ЕстьОтборПоПодсистемам = Ложь; - КонецЕсли; + Если ПредставленияЗаполнены() = "НеЗаполнены" Тогда + Настройки = ПараметрыОбновленияНастроек(); + Настройки.Отложенное = Истина; + Обновить(Настройки); + КонецЕсли; + ЕстьСтрокаПоиска = ПараметрыПоиска.Свойство("СтрокаПоиска") И ЗначениеЗаполнено(ПараметрыПоиска.СтрокаПоиска); + ЕстьОтборПоОтчетам = ПараметрыПоиска.Свойство("Отчеты") И ЗначениеЗаполнено(ПараметрыПоиска.Отчеты); + ЕстьОтборПоПодсистемам = ПараметрыПоиска.Свойство("Подсистемы") И ЗначениеЗаполнено(ПараметрыПоиска.Подсистемы); ЖесткийОтборПоПодсистемам = ЕстьОтборПоПодсистемам И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "ЖесткийОтборПоПодсистемам", Истина); + ЕстьОтборПоТипамОтчетов = ПараметрыПоиска.Свойство("ТипыОтчетов") И ЗначениеЗаполнено(ПараметрыПоиска.ТипыОтчетов); - Если ПараметрыПоиска.Свойство("ТипыОтчетов") И ЗначениеЗаполнено(ПараметрыПоиска.ТипыОтчетов) Тогда - ЕстьОтборПоТипамОтчетов = Истина; - Иначе - ЕстьОтборПоТипамОтчетов = Ложь; + Результат = Новый Структура; + Результат.Вставить("Ссылки", Новый Массив); + Результат.Вставить("ПодсветкаВариантов", Новый Соответствие); + Результат.Вставить("Подсистемы", Новый Массив); + Результат.Вставить("ПодсветкаПодсистем", Новый Соответствие); + Результат.Вставить("ВариантыСвязанныеСПодсистемами", Новый Соответствие); + Результат.Вставить("РодителиСвязанныеСВариантами", Новый Массив); + Если ПолучатьИтоговуюТаблицу Тогда + Результат.Вставить("ТаблицаЗначений", Новый ТаблицаЗначений); КонецЕсли; - - Если ПараметрыПоиска.Свойство("ТолькоВидимыеВПанелиОтчетов") И ПараметрыПоиска.ТолькоВидимыеВПанелиОтчетов = Истина Тогда - ЕстьОтборПоВидимости = ЕстьОтборПоПодсистемам; // Поддерживается только когда задан отбор по подсистемам. - Иначе - ЕстьОтборПоВидимости = Ложь; - КонецЕсли; - - Если ПараметрыПоиска.Свойство("ПолучатьИтоговуюТаблицу") И ПараметрыПоиска.ПолучатьИтоговуюТаблицу = Истина Тогда - ПолучатьИтоговуюТаблицу = Истина; - Иначе - ПолучатьИтоговуюТаблицу = Ложь; - КонецЕсли; - - Если ПараметрыПоиска.Свойство("ПометкаУдаления") Тогда - ЕстьОтборПоПометкеУдаления = ПараметрыПоиска.ПометкаУдаления; - Иначе - ЕстьОтборПоПометкеУдаления = Истина; - КонецЕсли; - Если Не ЕстьОтборПоПодсистемам И Не ЕстьСтрокаПоиска И Не ЕстьОтборПоТипамОтчетов И Не ЕстьОтборПоОтчетам Тогда - Возврат Неопределено; + Возврат Результат; КонецЕсли; - Запрос = Новый Запрос; - - ПравоЧтенияАвторов = ПравоДоступа("Чтение", Метаданные.Справочники.Пользователи); - - ТекущийПользователь = Пользователи.АвторизованныйПользователь(); - + ЕстьОтборПоВидимости = ЕстьОтборПоПодсистемам И ПараметрыПоиска.Свойство("ТолькоВидимыеВПанелиОтчетов") + И ПараметрыПоиска.ТолькоВидимыеВПанелиОтчетов = Истина; + ТолькоНепомеченныеДляУдаления = ?(ПараметрыПоиска.Свойство("ПометкаУдаления"), ПараметрыПоиска.ПометкаУдаления, Истина); Если ЕстьОтборПоОтчетам Тогда ОтборПоОтчетам = ПараметрыПоиска.Отчеты; ПараметрыПоиска.Вставить("ОтключенныеВариантыПрограммы", ОтключенныеВариантыОтчетов(ОтборПоОтчетам)); @@ -5305,70 +5627,214 @@ ОтборПоОтчетам = ПараметрыПоиска.ОтчетыПользователя; КонецЕсли; + ЕстьПравоЧтенияАвторов = ПравоДоступа("Чтение", Метаданные.Справочники.Пользователи); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + ПоказыватьЛичныеВариантыОтчетовДругихАвторов = Пользователи.ЭтоПолноправныйПользователь(); + Если ПараметрыПоиска.Свойство("ТолькоЛичные") Тогда + ПоказыватьЛичныеВариантыОтчетовДругихАвторов = ПоказыватьЛичныеВариантыОтчетовДругихАвторов И ПараметрыПоиска.ТолькоЛичные; + КонецЕсли; + + Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь); Запрос.УстановитьПараметр("ОтчетыПользователя", ОтборПоОтчетам); Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ПараметрыПоиска.ОтключенныеВариантыПрограммы); Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); - Запрос.УстановитьПараметр("ТипОтчетаРасширение", Перечисления.ТипыОтчетов.Расширение); - Запрос.УстановитьПараметр("НетОтбораПоПометкеУдаления", НЕ ЕстьОтборПоПометкеУдаления); + Запрос.УстановитьПараметр("НетОтбораПоПометкеУдаления", НЕ ТолькоНепомеченныеДляУдаления); + Запрос.УстановитьПараметр("ЕстьПравоЧтенияАвторов", ЕстьПравоЧтенияАвторов); + Запрос.УстановитьПараметр("ЕстьОтборПоТипамОтчетов", ЕстьОтборПоТипамОтчетов); + Запрос.УстановитьПараметр("ЕстьОтборПоПодсистемам", ЕстьОтборПоПодсистемам); + Запрос.УстановитьПараметр("ТипыОтчетов", ?(ЕстьОтборПоТипамОтчетов, ПараметрыПоиска.ТипыОтчетов, Новый Массив)); + Запрос.УстановитьПараметр("НеПолучатьОписания", Не ЕстьСтрокаПоиска И Не ПолучатьИтоговуюТаблицу); + Запрос.УстановитьПараметр("ПолучатьИтоговуюТаблицу", ПолучатьИтоговуюТаблицу); + Запрос.УстановитьПараметр("НаименованиеРабочегоСтола", НСтр("ru = 'Начальная страница'")); + Запрос.УстановитьПараметр("ПоказыватьЛичныеВариантыОтчетовДругихАвторов", ПоказыватьЛичныеВариантыОтчетовДругихАвторов); + Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); + Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); Если ЕстьОтборПоПодсистемам Или ЕстьСтрокаПоиска Тогда ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.Ссылка КАК Ссылка, | ВариантыОтчетов.Родитель КАК Родитель, - | ВариантыОтчетов.Наименование КАК НаименованиеВарианта, - | ВариантыОтчетов.Автор КАК Автор, + | ВЫБОР + | КОГДА &ЕстьПравоЧтенияАвторов + | И &ПолучатьИтоговуюТаблицу + | ТОГДА ВариантыОтчетов.Автор + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК Автор, | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, - | ВЫРАЗИТЬ(ВариантыОтчетов.Автор.Наименование КАК СТРОКА(1000)) КАК АвторПредставление, | ВариантыОтчетов.Отчет КАК Отчет, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, | ВариантыОтчетов.Пользовательский КАК Пользовательский, | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант, | ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПолей, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПолей, ВариантыРасширений.НаименованияПолей) КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПолей КАК СТРОКА(1000)) - | КОНЕЦ КАК НаименованияПолей, - | ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПараметровИОтборов, ВариантыРасширений.НаименованияПараметровИОтборов) КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000)) - | КОНЕЦ КАК НаименованияПараметровИОтборов, - | ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.КлючевыеСлова, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.КлючевыеСлова, ВариантыРасширений.КлючевыеСлова) КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.КлючевыеСлова КАК СТРОКА(1000)) - | КОНЕЦ КАК КлючевыеСлова, - | ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) - | КОНЕЦ КАК Описание, - | ВЫБОР | КОГДА ВариантыОтчетов.Пользовательский | ТОГДА ВариантыОтчетов.ИнтерактивнаяПометкаУдаления - | КОГДА ВариантыОтчетов.ТипОтчета = &ТипОтчетаРасширение + | КОГДА ВариантыОтчетов.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение) | ТОГДА ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL | ИНАЧЕ ЕСТЬNULL(ВариантыКонфигурации.ПометкаУдаления, ВариантыОтчетов.ПометкаУдаления) | КОНЕЦ КАК ПометкаУдаления, - | ВариантыОтчетов.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию + | ВариантыОтчетов.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА ВариантыОтчетов.Пользовательский + | ИЛИ ВариантыОтчетов.ПредопределенныйВариант В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Наименование, ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ВариантыКонфигурации.Наименование, ВариантыРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияИзКонфигурации.Наименование, ПредставленияИзРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + | КОНЕЦ КАК НаименованиеВарианта, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.НаименованияПолей, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПолей, ВариантыРасширений.НаименованияПолей) КАК СТРОКА(1000)) + | КОГДА НЕ &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.НаименованияПолей, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.НаименованияПолей, ПредставленияИзРасширений.НаименованияПолей) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПолей КАК СТРОКА(1000)) + | КОНЕЦ КАК НаименованияПолей, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПараметровИОтборов, ВариантыРасширений.НаименованияПараметровИОтборов) КАК СТРОКА(1000)) + | КОГДА НЕ &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.НаименованияПараметровИОтборов, ПредставленияИзРасширений.НаименованияПараметровИОтборов) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000)) + | КОНЕЦ КАК НаименованияПараметровИОтборов, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.КлючевыеСлова, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.КлючевыеСлова, ВариантыРасширений.КлючевыеСлова) КАК СТРОКА(1000)) + | КОГДА НЕ &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.КлючевыеСлова, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.КлючевыеСлова, ПредставленияИзРасширений.КлючевыеСлова) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.КлючевыеСлова КАК СТРОКА(1000)) + | КОНЕЦ КАК КлючевыеСлова, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА ВариантыОтчетов.Пользовательский + | ИЛИ ВариантыОтчетов.ПредопределенныйВариант В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Описание, ВариантыОтчетов.Описание) КАК СТРОКА(1000)) + | КОГДА &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Описание, ВариантыОтчетов.Описание) КАК СТРОКА(1000)) + | КОНЕЦ КАК Описание |ПОМЕСТИТЬ Варианты |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВариантыРасширений + | ПО ВариантыОтчетов.ПредопределенныйВариант = ДоступныеВариантыРасширений.Вариант + | И (ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВариантыРасширений - | ПО ВариантыОтчетов.ПредопределенныйВариант = ДоступныеВариантыРасширений.Вариант - | И (ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов + | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка + | И (ПредставленияВариантов.КодЯзыка = &КодЯзыка) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка + | И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка + | И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка) |ГДЕ - | ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) + | (НЕ &ЕстьОтборПоТипамОтчетов + | ИЛИ ВариантыОтчетов.ТипОтчета В (&ТипыОтчетов)) | И ВариантыОтчетов.Отчет В(&ОтчетыПользователя) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - | И &ПоказыватьЛичныеВариантыОтчетовДругихАвторов + | И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов + | ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | РазмещениеКонфигурации.Подсистема КАК Подсистема, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА РазмещениеКонфигурации.Подсистема.ПолноеИмя = ""Подсистемы"" + | ТОГДА &НаименованиеРабочегоСтола + | ИНАЧЕ РазмещениеКонфигурации.Подсистема.Синоним + | КОНЕЦ КАК НаименованиеПодсистемы + |ПОМЕСТИТЬ РазмещениеПредопределенных + |ИЗ + | Варианты КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеКонфигурации + | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) + | И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов + | ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | ИЛИ &НетОтбораПоПометкеУдаления) + | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеКонфигурации.Ссылка + | И (НЕ &ЕстьОтборПоПодсистемам + | ИЛИ РазмещениеКонфигурации.Подсистема В (&ПодсистемыОтчетов)) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВариантыОтчетов.Ссылка, + | РазмещениеРасширений.Подсистема, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА РазмещениеРасширений.Подсистема.ПолноеИмя = ""Подсистемы"" + | ТОГДА &НаименованиеРабочегоСтола + | ИНАЧЕ РазмещениеРасширений.Подсистема.Синоним + | КОНЕЦ + |ИЗ + | Варианты КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеРасширений + | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) + | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеРасширений.Ссылка + | И (НЕ &ЕстьОтборПоПодсистемам + | ИЛИ РазмещениеРасширений.Подсистема В (&ПодсистемыОтчетов)) + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ВариантыРазмещение.Использование КАК Использование, + | ВариантыРазмещение.Подсистема КАК Подсистема, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА ВариантыРазмещение.Подсистема.ПолноеИмя = ""Подсистемы"" + | ТОГДА &НаименованиеРабочегоСтола + | ИНАЧЕ ВариантыРазмещение.Подсистема.Синоним + | КОНЕЦ КАК НаименованиеПодсистемы + |ПОМЕСТИТЬ РазмещениеВариантов + |ИЗ + | Варианты КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение + | ПО (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | ИЛИ &НетОтбораПоПометкеУдаления) + | И ВариантыОтчетов.Ссылка = ВариантыРазмещение.Ссылка + | И (НЕ &ЕстьОтборПоПодсистемам + | ИЛИ ВариантыРазмещение.Подсистема В (&ПодсистемыОтчетов)) + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// @@ -5384,58 +5850,15 @@ | КОНЕЦ КАК ЭтоНастройкаРазработчика |ПОМЕСТИТЬ РазмещениеВсех |ИЗ - | (ВЫБРАТЬ - | ВариантыОтчетов.Ссылка КАК Ссылка, - | ВариантыРазмещение.Использование КАК Использование, - | ВариантыРазмещение.Подсистема КАК Подсистема, - | ВЫБОР - | КОГДА ВариантыРазмещение.Подсистема.ПолноеИмя = ""Подсистемы"" - | ТОГДА &НаименованиеРабочегоСтола - | ИНАЧЕ ВариантыРазмещение.Подсистема.Синоним - | КОНЕЦ КАК НаименованиеПодсистемы - | ИЗ - | Варианты КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение - | ПО (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления) - | И ВариантыОтчетов.Ссылка = ВариантыРазмещение.Ссылка - | И (ВариантыРазмещение.Подсистема В (&МассивПодсистем))) КАК РазмещениеВариантов - | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ВариантыОтчетов.Ссылка КАК Ссылка, - | РазмещениеКонфигурации.Подсистема КАК Подсистема, - | ВЫБОР - | КОГДА РазмещениеКонфигурации.Подсистема.ПолноеИмя = ""Подсистемы"" - | ТОГДА &НаименованиеРабочегоСтола - | ИНАЧЕ РазмещениеКонфигурации.Подсистема.Синоним - | КОНЕЦ КАК НаименованиеПодсистемы - | ИЗ - | Варианты КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеКонфигурации - | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) - | И &ПоказыватьЛичныеВариантыОтчетовДругихАвторов - | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления) - | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеКонфигурации.Ссылка - | И (РазмещениеКонфигурации.Подсистема В (&МассивПодсистем)) - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ВариантыОтчетов.Ссылка, - | РазмещениеРасширений.Подсистема, - | ВЫБОР - | КОГДА РазмещениеРасширений.Подсистема.ПолноеИмя = ""Подсистемы"" - | ТОГДА &НаименованиеРабочегоСтола - | ИНАЧЕ РазмещениеРасширений.Подсистема.Синоним - | КОНЕЦ - | ИЗ - | Варианты КАК ВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеРасширений - | ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ) - | И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеРасширений.Ссылка - | И (РазмещениеРасширений.Подсистема В (&МассивПодсистем))) КАК РазмещениеПредопределенных - | ПО РазмещениеВариантов.Ссылка = РазмещениеПредопределенных.Ссылка - | И РазмещениеВариантов.Подсистема = РазмещениеПредопределенных.Подсистема + | РазмещениеПредопределенных КАК РазмещениеПредопределенных + | ПОЛНОЕ СОЕДИНЕНИЕ РазмещениеВариантов КАК РазмещениеВариантов + | ПО (РазмещениеВариантов.Ссылка = РазмещениеПредопределенных.Ссылка) + | И (РазмещениеВариантов.Подсистема = РазмещениеПредопределенных.Подсистема) |ГДЕ | ЕСТЬNULL(РазмещениеВариантов.Использование, ИСТИНА) + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// @@ -5454,19 +5877,37 @@ | ПО РазмещениеВсех.Ссылка = Варианты.Ссылка |ГДЕ | ЕСТЬNULL(ЛичныеНастройки.Видимость, Варианты.ВидимостьПоУмолчанию) - | И (Варианты.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления) + | И (Варианты.ПометкаУдаления = ЛОЖЬ + | ИЛИ &НетОтбораПоПометкеУдаления) + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВариантыОтчетов.Ссылка КАК Ссылка, | ВариантыОтчетов.Родитель КАК Родитель, | ВариантыОтчетов.НаименованиеВарианта КАК НаименованиеВарианта, | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, - | ВариантыОтчетов.Автор КАК Автор, - | ВариантыОтчетов.АвторПредставление КАК АвторПредставление, + | ВЫБОР + | КОГДА &ЕстьПравоЧтенияАвторов + | И &ПолучатьИтоговуюТаблицу + | ТОГДА ВариантыОтчетов.Автор + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК Автор, + | ВЫБОР + | КОГДА &ЕстьПравоЧтенияАвторов + | И &ПолучатьИтоговуюТаблицу + | ТОГДА ЕСТЬNULL(ВариантыОтчетов.Автор.Наименование, """") + | ИНАЧЕ """" + | КОНЕЦ КАК АвторПредставление, | ВариантыОтчетов.Отчет КАК Отчет, - | ВариантыОтчетов.Отчет.Имя КАК ИмяОтчета, + | ВЫБОР + | КОГДА &ПолучатьИтоговуюТаблицу + | ТОГДА ВариантыОтчетов.Отчет.Имя + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК ИмяОтчета, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, | ВариантыОтчетов.Пользовательский КАК Пользовательский, @@ -5478,14 +5919,16 @@ | Размещение.Подсистема КАК Подсистема, | Размещение.НаименованиеПодсистемы КАК НаименованиеПодсистемы, | НЕОПРЕДЕЛЕНО КАК КлючПользовательскойНастройки, - | НЕОПРЕДЕЛЕНО КАК ПредставлениеПользовательскойНастройки + | НЕОПРЕДЕЛЕНО КАК ПредставлениеПользовательскойНастройки, + | ВариантыОтчетов.ПометкаУдаления КАК ПометкаУдаления |ИЗ | Варианты КАК ВариантыОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение | ПО ВариантыОтчетов.Ссылка = Размещение.Ссылка |ГДЕ - | (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления) - | И &ПоискВариантовИПодсистем + | (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | ИЛИ &НетОтбораПоПометкеУдаления) + | И &ВариантыИПодсистемыПоСтрокеПоиска | |ОБЪЕДИНИТЬ ВСЕ | @@ -5509,303 +5952,222 @@ | НЕОПРЕДЕЛЕНО, | НЕОПРЕДЕЛЕНО, | Пользовательские.КлючПользовательскойНастройки, - | Пользовательские.Наименование + | Пользовательские.Наименование, + | НЕОПРЕДЕЛЕНО |ИЗ | Варианты КАК Варианты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПользовательскиеНастройкиОтчетов КАК Пользовательские | ПО Варианты.Ссылка = Пользовательские.Вариант |ГДЕ | Пользовательские.Пользователь = &ТекущийПользователь - | И &ПоискПользовательскихНастроек - | И (Пользовательские.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления) - | И (Варианты.ПометкаУдаления = ЛОЖЬ ИЛИ &НетОтбораПоПометкеУдаления)"; + | И &ПользовательскиеНастройкиПоСтрокеПоиска + | И (Пользовательские.ПометкаУдаления = ЛОЖЬ + | ИЛИ &НетОтбораПоПометкеУдаления) + | И (Варианты.ПометкаУдаления = ЛОЖЬ + | ИЛИ &НетОтбораПоПометкеУдаления)"; - Если Не ПравоЧтенияАвторов Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Автор КАК Автор", "НЕОПРЕДЕЛЕНО КАК Автор"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫРАЗИТЬ(ВариантыОтчетов.Автор.Наименование КАК СТРОКА(1000)) КАК АвторПредставление", "НЕОПРЕДЕЛЕНО КАК АвторПредставление"); - КонецЕсли; - - Если ЕстьОтборПоВидимости Тогда - // Действие не требуется. - Иначе + Если Не ЕстьОтборПоВидимости Тогда // Удаление временной таблицы для фильтра по видимости. УдалитьВременнуюТаблицу(ТекстЗапроса, "РазмещениеВидимых"); // Подмена имени временной таблицы, из которой нужно делать выборку. ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РазмещениеВидимых", "РазмещениеВсех"); КонецЕсли; - Если ЕстьОтборПоТипамОтчетов Тогда - Запрос.УстановитьПараметр("ТипыОтчетов", ПараметрыПоиска.ТипыОтчетов); - Иначе - // Удаление отбора по типу отчета. - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) - | И ", - ""); - КонецЕсли; - Если ЕстьОтборПоПодсистемам Тогда Если ТипЗнч(ПараметрыПоиска.Подсистемы) = Тип("Массив") Тогда - Запрос.УстановитьПараметр("МассивПодсистем", ПараметрыПоиска.Подсистемы); + ПодсистемыОтчетов = ПараметрыПоиска.Подсистемы; Иначе - МассивПодсистем = Новый Массив; - МассивПодсистем.Добавить(ПараметрыПоиска.Подсистемы); - Запрос.УстановитьПараметр("МассивПодсистем", МассивПодсистем); + ПодсистемыОтчетов = Новый Массив; + ПодсистемыОтчетов.Добавить(ПараметрыПоиска.Подсистемы); КонецЕсли; Иначе - // Удаление отбора по подсистемам. - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ВариантыРазмещение.Подсистема В (&МассивПодсистем))", ""); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (РазмещениеКонфигурации.Подсистема В (&МассивПодсистем))", ""); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (РазмещениеРасширений.Подсистема В (&МассивПодсистем))", ""); + ПодсистемыОтчетов = Новый Массив; КонецЕсли; + Запрос.УстановитьПараметр("ПодсистемыОтчетов", ПодсистемыОтчетов); Если ЕстьСтрокаПоиска И Не ЖесткийОтборПоПодсистемам Тогда // Для поиска информация о размещении является дополнительной, а не ключевой. Если ЕстьОтборПоВидимости Тогда - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение", "ЛЕВОЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение"); Иначе - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВсех КАК Размещение", "ЛЕВОЕ СОЕДИНЕНИЕ РазмещениеВсех КАК Размещение"); - КонецЕсли; + КонецЕсли; КонецЕсли; - Если ЕстьСтрокаПоиска Тогда - СтрокаПоиска = ВРег(СокрЛП(ПараметрыПоиска.СтрокаПоиска)); - ШаблонПоиска = ""; - МассивСлов = ВариантыОтчетовКлиентСервер.РазложитьСтрокуПоискаВМассивСлов(СтрокаПоиска); - Для НомерСлова = 1 По МассивСлов.Количество() Цикл - Слово = МассивСлов[НомерСлова-1]; - ИмяСлова = "Слово" + Формат(НомерСлова, "ЧГ="); - Запрос.УстановитьПараметр(ИмяСлова, "%" + Слово + "%"); - Шаблон = "<ИмяТаблицы.ИмяПоля> ПОДОБНО &" + ИмяСлова; - Если НомерСлова = 1 Тогда - ШаблонПоиска = Шаблон; - Иначе - ШаблонПоиска = ШаблонПоиска + Символы.ПС + " Или " + Шаблон; - КонецЕсли; - КонецЦикла; - - // Условие для поиска вариантов. - ПоискВариантовИПодсистем = "(" - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.НаименованиеВарианта") - + Символы.ПС - + " Или " - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "Размещение.НаименованиеПодсистемы") - + Символы.ПС - + " Или " - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.НаименованияПолей") - + Символы.ПС - + " Или " - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.НаименованияПараметровИОтборов") - + Символы.ПС - + " Или " - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.Описание") - + Символы.ПС - + " Или " - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.КлючевыеСлова"); - Если ПравоЧтенияАвторов Тогда - ПоискВариантовИПодсистем = ПоискВариантовИПодсистем - + Символы.ПС - + " Или " - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.АвторПредставление"); - КонецЕсли; - ПоискВариантовИПодсистем = ПоискВариантовИПодсистем + ")"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоискВариантовИПодсистем", ПоискВариантовИПодсистем); - - ПоискПользовательскихНастроек = ( - "(" - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "Пользовательские.Наименование") - + ")"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоискПользовательскихНастроек", ПоискПользовательскихНастроек); - - Иначе - // Удаление отбора для поиска в данных вариантов и подсистем. - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ПоискВариантовИПодсистем", ""); - // Удаление таблицы для поиска среди пользовательских настроек. - НачалоВыборкиИзТаблицы = ( - "ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | Пользовательские.Вариант,"); - ТекстЗапроса = СокрП(Лев(ТекстЗапроса, СтрНайти(ТекстЗапроса, НачалоВыборкиИзТаблицы) - 1)); + СловаПоиска = ПодготовитьУсловиеПоискаПоСтроке(Запрос, ТекстЗапроса, ЕстьСтрокаПоиска, ПараметрыПоиска, + ЕстьПравоЧтенияАвторов); + Иначе + ПодготовитьЗапросОтчетовСПростымиОтборами(Запрос, ТекстЗапроса, ЕстьОтборПоТипамОтчетов, ПараметрыПоиска); + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; + ИсходнаяТаблица = Запрос.Выполнить().Выгрузить(); + + Если ПолучатьИтоговуюТаблицу Тогда + Результат.ТаблицаЗначений = ИсходнаяТаблица; + КонецЕсли; + Если ИсходнаяТаблица.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + Если ЕстьСтрокаПоиска И ПолучатьПодсветку Тогда + СформироватьРезультатыПоиска(СловаПоиска, ИсходнаяТаблица, Результат); + Иначе + СформироватьСписокСсылок(ИсходнаяТаблица, Результат.Ссылки); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПодготовитьУсловиеПоискаПоСтроке(Знач Запрос, ТекстЗапроса, Знач ЕстьСтрокаПоиска, Знач ПараметрыПоиска, Знач ПравоЧтенияАвторов) + + Если ЕстьСтрокаПоиска Тогда + СтрокаПоиска = ВРег(СокрЛП(ПараметрыПоиска.СтрокаПоиска)); + СловаПоиска = ВариантыОтчетовКлиентСервер.РазложитьСтрокуПоискаВМассивСлов(СтрокаПоиска); + ШаблоныПоиска = Новый Массив; + Для НомерСлова = 1 По СловаПоиска.Количество() Цикл + Слово = СловаПоиска[НомерСлова - 1]; + ИмяСлова = "Слово" + Формат(НомерСлова, "ЧГ="); + Запрос.УстановитьПараметр(ИмяСлова, "%" + Слово + "%"); + ШаблоныПоиска.Добавить("<ИмяТаблицы.ИмяПоля> ПОДОБНО &" + ИмяСлова); + КонецЦикла; + ШаблонПоиска = СтрСоединить(ШаблоныПоиска, " ИЛИ "); // не локализуется (фрагмент текста запроса) + + ТекстыПоиска = Новый Массив; + ТекстыПоиска.Добавить("ВариантыОтчетов.НаименованиеВарианта"); + ТекстыПоиска.Добавить("Размещение.НаименованиеПодсистемы"); + ТекстыПоиска.Добавить("ВариантыОтчетов.НаименованияПолей"); + ТекстыПоиска.Добавить("ВариантыОтчетов.НаименованияПараметровИОтборов"); + ТекстыПоиска.Добавить("ВариантыОтчетов.Описание"); + ТекстыПоиска.Добавить("ВариантыОтчетов.КлючевыеСлова"); + Если ПравоЧтенияАвторов Тогда + ТекстыПоиска.Добавить("ВариантыОтчетов.Автор.Наименование"); КонецЕсли; - // Удаление лишних полей когда они не нужны ни для поиска ни для итоговой таблицы. - Если Не ЕстьСтрокаПоиска И Не ПолучатьИтоговуюТаблицу Тогда - // НаименованиеВарианта - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Наименование КАК", "НЕОПРЕДЕЛЕНО КАК"); - // НаименованияПолей - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПолей, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПолей, ВариантыРасширений.НаименованияПолей) КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПолей КАК СТРОКА(1000)) - | КОНЕЦ КАК", - "НЕОПРЕДЕЛЕНО КАК"); - // НаименованияПараметровИОтборов - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПараметровИОтборов, ВариантыРасширений.НаименованияПараметровИОтборов) КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000)) - | КОНЕЦ КАК", - "НЕОПРЕДЕЛЕНО КАК"); - // КлючевыеСлова - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.КлючевыеСлова, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.КлючевыеСлова, ВариантыРасширений.КлючевыеСлова) КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.КлючевыеСлова КАК СТРОКА(1000)) - | КОНЕЦ КАК", - "НЕОПРЕДЕЛЕНО КАК"); - // Описание - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "ВЫБОР - | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" - | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) - | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) - | КОНЕЦ КАК", - "НЕОПРЕДЕЛЕНО КАК"); - // НаименованиеПодсистемы - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "ВЫБОР - | КОГДА ВариантыРазмещение.Подсистема.ПолноеИмя = ""Подсистемы"" - | ТОГДА &НаименованиеРабочегоСтола - | ИНАЧЕ ВариантыРазмещение.Подсистема.Синоним - | КОНЕЦ КАК", - "НЕОПРЕДЕЛЕНО"); - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "ВЫБОР - | КОГДА РазмещениеКонфигурации.Подсистема.ПолноеИмя = ""Подсистемы"" - | ТОГДА &НаименованиеРабочегоСтола - | ИНАЧЕ РазмещениеКонфигурации.Подсистема.Синоним - | КОНЕЦ", - "НЕОПРЕДЕЛЕНО"); - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "ВЫБОР - | КОГДА РазмещениеРасширений.Подсистема.ПолноеИмя = ""Подсистемы"" - | ТОГДА &НаименованиеРабочегоСтола - | ИНАЧЕ РазмещениеРасширений.Подсистема.Синоним - | КОНЕЦ", - "НЕОПРЕДЕЛЕНО"); - Иначе - Запрос.УстановитьПараметр("НаименованиеРабочегоСтола", НСтр("ru = 'Начальная страница'")); - КонецЕсли; + Для Индекс = 0 По ТекстыПоиска.Количество() - 1 Цикл + ТекстыПоиска[Индекс] = СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", ТекстыПоиска[Индекс]); + КонецЦикла; + ВариантыИПодсистемыПоСтрокеПоиска = "(" + СтрСоединить(ТекстыПоиска, " ИЛИ ") + ")"; // не локализуется (фрагмент текста запроса) + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВариантыИПодсистемыПоСтрокеПоиска", ВариантыИПодсистемыПоСтрокеПоиска); - // Удаление лишних полей когда они не нужны для итоговой таблицы. - Если Не ПолучатьИтоговуюТаблицу Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Автор КАК", "НЕОПРЕДЕЛЕНО КАК"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Отчет КАК", "НЕОПРЕДЕЛЕНО КАК"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Отчет.Имя КАК", "НЕОПРЕДЕЛЕНО КАК"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.КлючВарианта КАК", "НЕОПРЕДЕЛЕНО КАК"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.ТипОтчета КАК", "НЕОПРЕДЕЛЕНО КАК"); - КонецЕсли; + ПользовательскиеНастройкиПоСтрокеПоиска = "(" + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "Пользовательские.Наименование") + ")"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПользовательскиеНастройкиПоСтрокеПоиска", ПользовательскиеНастройкиПоСтрокеПоиска); Иначе - - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Ссылка КАК Ссылка, - | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, - | ВариантыОтчетов.Родитель КАК Родитель, - | ВариантыОтчетов.Наименование КАК Наименование, - | ВариантыОтчетов.Описание КАК Описание, - | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, - | ВариантыОтчетов.Автор КАК Автор - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) - | И ВариантыОтчетов.Отчет В(&ОтчетыПользователя) - | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) - | И (НЕ ВариантыОтчетов.Пользовательский - | ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) - | И (ВариантыОтчетов.Пользовательский - | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) - | И &ПоказыватьЛичныеВариантыОтчетовДругихАвторов"; - - Если ЕстьОтборПоТипамОтчетов Тогда - Запрос.УстановитьПараметр("ТипыОтчетов", ПараметрыПоиска.ТипыОтчетов); - Иначе - ТекстЗапроса = СтрЗаменить( - ТекстЗапроса, - "ВариантыОтчетов.ТипОтчета В(&ТипыОтчетов) - | И ", - ""); - КонецЕсли; - + // Удаление отбора для поиска в данных вариантов отчетов и подсистем. + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ВариантыИПодсистемыПоСтрокеПоиска", ""); + // Удаление таблицы для поиска среди пользовательских настроек. + НачалоВыборкиИзТаблицы = ( + "ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Пользовательские.Вариант,"); + ТекстЗапроса = СокрП(Лев(ТекстЗапроса, СтрНайти(ТекстЗапроса, НачалоВыборкиИзТаблицы) - 1)); КонецЕсли; + Возврат СловаПоиска; + +КонецФункции + +Процедура ПодготовитьЗапросОтчетовСПростымиОтборами(Знач Запрос, ТекстЗапроса, Знач ЕстьОтборПоТипамОтчетов, Знач ПараметрыПоиска) - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоказыватьЛичныеВариантыОтчетовДругихАвторов", - ?(Пользователи.ЭтоПолноправныйПользователь(), "Истина", "(ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь)")); - Запрос.Текст = ТекстЗапроса; + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ВариантыОтчетов.Родитель КАК Родитель, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ВариантыКонфигурации.Наименование, ВариантыРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияИзКонфигурации.Наименование, ПредставленияИзРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + | КОНЕЦ КАК Наименование, + | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, + | ВЫБОР + | КОГДА &ЕстьПравоЧтенияАвторов + | И &ПолучатьИтоговуюТаблицу + | ТОГДА ВариантыОтчетов.Автор + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК Автор, + | ВариантыОтчетов.ВидимостьПоУмолчанию, + | ВЫБОР + | КОГДА &ЕстьПравоЧтенияАвторов + | И &ПолучатьИтоговуюТаблицу + | ТОГДА ПРЕДСТАВЛЕНИЕ(ВариантыОтчетов.Автор) + | ИНАЧЕ """" + | КОНЕЦ КАК АвторПредставление, + | ВариантыОтчетов.Отчет КАК Отчет, + | ВЫБОР + | КОГДА &ПолучатьИтоговуюТаблицу + | ТОГДА ВариантыОтчетов.Отчет.Имя + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК ИмяОтчета, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, + | ВариантыОтчетов.Пользовательский КАК Пользовательский, + | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант, + | ВариантыОтчетов.НаименованияПараметровИОтборов КАК НаименованияПараметровИОтборов, + | ВариантыОтчетов.НаименованияПолей КАК НаименованияПолей, + | ВариантыОтчетов.КлючевыеСлова КАК КлючевыеСлова, + | ВЫБОР + | КОГДА &НеПолучатьОписания + | ТОГДА НЕОПРЕДЕЛЕНО + | КОГДА &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) + | КОГДА НЕ &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.Описание, ПредставленияИзРасширений.Описание) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) + | КОНЕЦ КАК Описание, + | НЕОПРЕДЕЛЕНО КАК Подсистема, + | """" КАК НаименованиеПодсистемы, + | НЕОПРЕДЕЛЕНО КАК КлючПользовательскойНастройки, + | НЕОПРЕДЕЛЕНО КАК ПредставлениеПользовательскойНастройки, + | ВариантыОтчетов.ПометкаУдаления КАК ПометкаУдаления + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка + | И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка + | И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка) + |ГДЕ + | ВариантыОтчетов.Отчет В (&ОтчетыПользователя) + | И (НЕ &ЕстьОтборПоТипамОтчетов + | ИЛИ ВариантыОтчетов.ТипОтчета В (&ТипыОтчетов)) + | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) + | И (НЕ ВариантыОтчетов.Пользовательский + | ИЛИ &НетОтбораПоПометкеУдаления ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) + | И (ВариантыОтчетов.Пользовательский + | ИЛИ &НетОтбораПоПометкеУдаления ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) + | И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов + | ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь)"; - Результат = Новый Структура; - Результат.Вставить("Ссылки", Новый Массив); - Результат.Вставить("ПодсветкаВариантов", Новый Соответствие); - Результат.Вставить("Подсистемы", Новый Массив); - Результат.Вставить("ПодсветкаПодсистем", Новый Соответствие); - Результат.Вставить("ВариантыСвязанныеСПодсистемами", Новый Соответствие); - Результат.Вставить("РодителиСвязанныеСВариантами", Новый Массив); +КонецПроцедуры + +Процедура СформироватьРезультатыПоиска(Знач МассивСлов, Знач ИсходнаяТаблица, Результат) - ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); - Если ПолучатьИтоговуюТаблицу Тогда - Результат.Вставить("ТаблицаЗначений", ТаблицаЗначений); - КонецЕсли; - - Если ТаблицаЗначений.Количество() = 0 Тогда - Возврат Результат; - КонецЕсли; - - Если Не ЕстьСтрокаПоиска Тогда - ТаблицаВариантов = ТаблицаЗначений.Скопировать(, "Ссылка, Родитель"); - ТаблицаВариантов.Свернуть("Ссылка, Родитель"); - Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл - Если ЗначениеЗаполнено(СтрокаТаблицы.Ссылка) И Результат.Ссылки.Найти(СтрокаТаблицы.Ссылка) = Неопределено Тогда - Результат.Ссылки.Добавить(СтрокаТаблицы.Ссылка); - Если ЗначениеЗаполнено(СтрокаТаблицы.Родитель) И Результат.Ссылки.Найти(СтрокаТаблицы.Родитель) = Неопределено Тогда - Результат.Ссылки.Добавить(СтрокаТаблицы.Родитель); - КонецЕсли; - КонецЕсли; - КонецЦикла; - Возврат Результат; - КонецЕсли; - - ТаблицаЗначений.Сортировать("Ссылка"); + ИсходнаяТаблица.Сортировать("Ссылка"); + СтрокаТаблицы = ИсходнаяТаблица[0]; ШаблонОбластиПоиска = Новый ФиксированнаяСтруктура("Значение, КоличествоНайденныхСлов, ПодсветкаСлов", "", 0, Новый СписокЗначений); + Вариант = СведенияОВариантеОтчета(СтрокаТаблицы.Ссылка, СтрокаТаблицы.Родитель, ШаблонОбластиПоиска); - СтрокаТаблицы = ТаблицаЗначений[0]; - Вариант = Новый Структура; - Вариант.Вставить("Ссылка", СтрокаТаблицы.Ссылка); - Вариант.Вставить("Родитель", СтрокаТаблицы.Родитель); - Вариант.Вставить("НаименованиеВарианта", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("Описание", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("НаименованияПолей", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("НаименованияПараметровИОтборов", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("КлючевыеСлова", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("НаименованияПользовательскихНастроек", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("НаименованияПодсистем", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("Подсистемы", Новый Массив); - Вариант.Вставить("ПредставлениеАвтора", Новый Структура(ШаблонОбластиПоиска)); + РазделительПредставления = РазделительПредставления(); + НайденныеСлова = Новый Соответствие; - РазделительПредставления = ВариантыОтчетовКлиентСервер.РазделительПредставления(); - - Количество = ТаблицаЗначений.Количество(); + Количество = ИсходнаяТаблица.Количество(); Для Индекс = 1 По Количество Цикл // Заполнение переменных. Если Не ЗначениеЗаполнено(Вариант.НаименованиеВарианта.Значение) И ЗначениеЗаполнено(СтрокаТаблицы.НаименованиеВарианта) Тогда @@ -5831,12 +6193,14 @@ Вариант.НаименованияПользовательскихНастроек.Значение = СтрокаТаблицы.ПредставлениеПользовательскойНастройки; Иначе Вариант.НаименованияПользовательскихНастроек.Значение = Вариант.НаименованияПользовательскихНастроек.Значение - + РазделительПредставления - + СтрокаТаблицы.ПредставлениеПользовательскойНастройки; + + РазделительПредставления + + СтрокаТаблицы.ПредставлениеПользовательскойНастройки; КонецЕсли; КонецЕсли; + Если ЗначениеЗаполнено(СтрокаТаблицы.НаименованиеПодсистемы) И Вариант.Подсистемы.Найти(СтрокаТаблицы.Подсистема) = Неопределено Тогда + Вариант.Подсистемы.Добавить(СтрокаТаблицы.Подсистема); Подсистема = Результат.ПодсветкаПодсистем.Получить(СтрокаТаблицы.Подсистема); Если Подсистема = Неопределено Тогда @@ -5844,31 +6208,30 @@ Подсистема.Вставить("Ссылка", СтрокаТаблицы.Подсистема); Подсистема.Вставить("НаименованиеПодсистемы", Новый Структура(ШаблонОбластиПоиска)); Подсистема.НаименованиеПодсистемы.Значение = СтрокаТаблицы.НаименованиеПодсистемы; - Подсистема.Вставить("ВсеСловаНайдены", Истина); - Подсистема.Вставить("НайденныеСлова", Новый Массив); + + ВсеСловаНайдены = Истина; + НайденныеСлова.Вставить(СтрокаТаблицы.Подсистема, Новый Соответствие); + Для Каждого Слово Из МассивСлов Цикл Если ОтметитьСлово(Подсистема.НаименованиеПодсистемы, Слово) Тогда - Подсистема.НайденныеСлова.Добавить(Слово); + НайденныеСлова[СтрокаТаблицы.Подсистема].Вставить(Слово, Истина); Иначе - Подсистема.ВсеСловаНайдены = Ложь; + ВсеСловаНайдены = Ложь; КонецЕсли; КонецЦикла; - Если Подсистема.ВсеСловаНайдены Тогда + Если ВсеСловаНайдены Тогда Результат.Подсистемы.Добавить(Подсистема.Ссылка); КонецЕсли; Результат.ПодсветкаПодсистем.Вставить(Подсистема.Ссылка, Подсистема); КонецЕсли; - Если Вариант.НаименованияПодсистем.Значение = "" Тогда - Вариант.НаименованияПодсистем.Значение = СтрокаТаблицы.НаименованиеПодсистемы; - Иначе - Вариант.НаименованияПодсистем.Значение = Вариант.НаименованияПодсистем.Значение - + РазделительПредставления - + СтрокаТаблицы.НаименованиеПодсистемы; - КонецЕсли; + НаименованияПодсистем = Вариант.НаименованияПодсистем.Значение; + Вариант.НаименованияПодсистем.Значение = ?(ПустаяСтрока(НаименованияПодсистем), + СтрокаТаблицы.НаименованиеПодсистемы, + НаименованияПодсистем + РазделительПредставления + СтрокаТаблицы.НаименованиеПодсистемы); КонецЕсли; Если Индекс < Количество Тогда - СтрокаТаблицы = ТаблицаЗначений[Индекс]; + СтрокаТаблицы = ИсходнаяТаблица[Индекс]; КонецЕсли; Если Индекс = Количество Или СтрокаТаблицы.Ссылка <> Вариант.Ссылка Тогда @@ -5876,40 +6239,17 @@ ВсеСловаНайдены = Истина; СвязанныеПодсистемы = Новый Массив; Для Каждого Слово Из МассивСлов Цикл - СловоНайдено = Ложь; - - Если ОтметитьСлово(Вариант.НаименованиеВарианта, Слово) Тогда - СловоНайдено = Истина; - КонецЕсли; - - Если ОтметитьСлово(Вариант.Описание, Слово) Тогда - СловоНайдено = Истина; - КонецЕсли; - - Если ОтметитьСлово(Вариант.НаименованияПолей, Слово, Истина) Тогда - СловоНайдено = Истина; - КонецЕсли; - - Если ОтметитьСлово(Вариант.ПредставлениеАвтора, Слово, Истина) Тогда - СловоНайдено = Истина; - КонецЕсли; - - Если ОтметитьСлово(Вариант.НаименованияПараметровИОтборов, Слово, Истина) Тогда - СловоНайдено = Истина; - КонецЕсли; - - Если ОтметитьСлово(Вариант.КлючевыеСлова, Слово, Истина) Тогда - СловоНайдено = Истина; - КонецЕсли; - - Если ОтметитьСлово(Вариант.НаименованияПользовательскихНастроек, Слово, Истина) Тогда - СловоНайдено = Истина; - КонецЕсли; + СловоНайдено = ОтметитьСлово(Вариант.НаименованиеВарианта, Слово) + Или ОтметитьСлово(Вариант.Описание, Слово) + Или ОтметитьСлово(Вариант.НаименованияПолей, Слово, Истина) + Или ОтметитьСлово(Вариант.ПредставлениеАвтора, Слово, Истина) + Или ОтметитьСлово(Вариант.НаименованияПараметровИОтборов, Слово, Истина) + Или ОтметитьСлово(Вариант.КлючевыеСлова, Слово, Истина) + Или ОтметитьСлово(Вариант.НаименованияПользовательскихНастроек, Слово, Истина); Если Не СловоНайдено Тогда Для Каждого ПодсистемаСсылка Из Вариант.Подсистемы Цикл - Подсистема = Результат.ПодсветкаПодсистем.Получить(ПодсистемаСсылка); - Если Подсистема.НайденныеСлова.Найти(Слово) <> Неопределено Тогда + Если НайденныеСлова[ПодсистемаСсылка] <> Неопределено Тогда СловоНайдено = Истина; СвязанныеПодсистемы.Добавить(ПодсистемаСсылка); КонецЕсли; @@ -5943,26 +6283,50 @@ Прервать; КонецЕсли; - // Обнуление переменных. - Вариант = Новый Структура; - Вариант.Вставить("Ссылка", СтрокаТаблицы.Ссылка); - Вариант.Вставить("Родитель", СтрокаТаблицы.Родитель); - Вариант.Вставить("НаименованиеВарианта", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("Описание", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("НаименованияПолей", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("НаименованияПараметровИОтборов", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("КлючевыеСлова", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("НаименованияПользовательскихНастроек", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("НаименованияПодсистем", Новый Структура(ШаблонОбластиПоиска)); - Вариант.Вставить("Подсистемы", Новый Массив); - Вариант.Вставить("ПредставлениеАвтора", Новый Структура(ШаблонОбластиПоиска)); + Вариант = СведенияОВариантеОтчета(СтрокаТаблицы.Ссылка, СтрокаТаблицы.Родитель, ШаблонОбластиПоиска); КонецЕсли; КонецЦикла; + +КонецПроцедуры + +Функция СведенияОВариантеОтчета(ВариантОтчетаСсылка, РодительСсылка, ШаблонОбластиПоиска) + + Вариант = Новый Структура; + Вариант.Вставить("Ссылка", ВариантОтчетаСсылка); + Вариант.Вставить("Родитель", РодительСсылка); + Вариант.Вставить("НаименованиеВарианта", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("Описание", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПолей", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПараметровИОтборов", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("КлючевыеСлова", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПользовательскихНастроек", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("НаименованияПодсистем", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("Подсистемы", Новый Массив); + Вариант.Вставить("ПредставлениеАвтора", Новый Структура(ШаблонОбластиПоиска)); + Возврат Вариант; - Возврат Результат; КонецФункции +Процедура СформироватьСписокСсылок(Знач ТаблицаЗначений, СписокСсылок) + + Дубли = Новый Соответствие; + ТаблицаВариантов = ТаблицаЗначений.Скопировать(, "Ссылка, Родитель"); + ТаблицаВариантов.Свернуть("Ссылка, Родитель"); + Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл + ВариантОтчетаСсылка = СтрокаТаблицы.Ссылка; + Если ЗначениеЗаполнено(ВариантОтчетаСсылка) И Дубли[ВариантОтчетаСсылка] = Неопределено Тогда + СписокСсылок.Добавить(ВариантОтчетаСсылка); + Дубли.Вставить(ВариантОтчетаСсылка); + ВариантОтчетаСсылка = СтрокаТаблицы.Родитель; + Если ЗначениеЗаполнено(ВариантОтчетаСсылка) И Дубли[ВариантОтчетаСсылка] = Неопределено Тогда + СписокСсылок.Добавить(ВариантОтчетаСсылка); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + Функция ОтключенныеВариантыОтчетов(Знач ОтчетыПользователя = Неопределено) Экспорт Если ОтчетыПользователя = Неопределено Тогда @@ -5990,13 +6354,12 @@ ТаблицаВариантов.Свернуть("ПредопределенныйВариант", "ЗначениеОпции"); ТаблицаОтключенных = ТаблицаВариантов.Скопировать(Новый Структура("ЗначениеОпции", 0)); ТаблицаОтключенных.Свернуть("ПредопределенныйВариант"); - ОтключенныеВарианты = ТаблицаОтключенных.ВыгрузитьКолонку("ПредопределенныйВариант"); + ОтключенныеПоФункциональнымОпциям = ТаблицаОтключенных.ВыгрузитьКолонку("ПредопределенныйВариант"); // Добавить варианты, отключенные разработчиком. Запрос = Новый Запрос; Запрос.УстановитьПараметр("ОтчетыПользователя", ОтчетыПользователя); Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); - Запрос.УстановитьПараметр("МассивОтключенных", ОтключенныеВарианты); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -6006,8 +6369,7 @@ |ГДЕ | (ВариантыКонфигурации.Включен = ЛОЖЬ | ИЛИ ВариантыКонфигурации.ПометкаУдаления = ИСТИНА) - | И ВариантыКонфигурации.Отчет В(&ОтчетыПользователя) - | И НЕ ВариантыКонфигурации.Ссылка В (&МассивОтключенных) + | И ВариантыКонфигурации.Отчет В (&ОтчетыПользователя) | |ОБЪЕДИНИТЬ ВСЕ | @@ -6022,13 +6384,12 @@ |ГДЕ | (ВариантыРасширений.Включен = ЛОЖЬ | ИЛИ Версии.Вариант ЕСТЬ NULL) - | И ВариантыРасширений.Отчет В(&ОтчетыПользователя) - | И НЕ ВариантыРасширений.Ссылка В (&МассивОтключенных)"; + | И ВариантыРасширений.Отчет В (&ОтчетыПользователя)"; - ОтключенныеРазработчиком = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОтключенныеВарианты, ОтключенныеРазработчиком); + ОтключенныеПринудительно = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОтключенныеПоФункциональнымОпциям, ОтключенныеПринудительно); - Возврат ОтключенныеВарианты; + Возврат ОтключенныеПоФункциональнымОпциям; КонецФункции @@ -6047,8 +6408,8 @@ СтруктураГде.ПодсветкаСлов = Новый СписокЗначений; // Прокрутка фокуса до значащего слова (обнаруженной информации). Если ИспользоватьРазделитель Тогда - РазделительХранения = ВариантыОтчетовКлиентСервер.РазделительХранения(); - РазделительПредставления = ВариантыОтчетовКлиентСервер.РазделительПредставления(); + РазделительХранения = Символы.ПС; + РазделительПредставления = РазделительПредставления(); ДлинаРазделителя = СтрДлина(РазделительХранения); Пока Позиция > 10 Цикл ПозицияРазделителя = СтрНайти(ОстатокВРег, РазделительХранения); @@ -6093,7 +6454,7 @@ // Удаляет временную таблицу из текста запроса. Процедура УдалитьВременнуюТаблицу(ТекстЗапроса, ИмяВременнойТаблицы) - ПозицияВременнойТаблицы = СтрНайти(ТекстЗапроса, "ПОМЕСТИТЬ " + ИмяВременнойТаблицы); + ПозицияВременнойТаблицы = СтрНайти(ТекстЗапроса, "ПОМЕСТИТЬ " + ИмяВременнойТаблицы); // не локализуется (фрагмент запроса) ЛеваяЧасть = ""; ПраваяЧасть = ТекстЗапроса; Пока Истина Цикл @@ -6112,6 +6473,395 @@ ТекстЗапроса = ЛеваяЧасть + ПраваяЧасть; КонецПроцедуры +Процедура НайтиВариантыОтчетовДляВывода(ПараметрыЗаполнения, АдресРезультата) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Подсистемы.Ссылка КАК Подсистема, + | Подсистемы.РазделСсылка КАК РазделСсылка, + | Подсистемы.Представление КАК Представление, + | Подсистемы.Приоритет КАК Приоритет + |ПОМЕСТИТЬ втПодсистемы + |ИЗ + | &ТаблицаПодсистем КАК Подсистемы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ПредопределенныеРазмещение.Подсистема КАК Подсистема, + | ПредопределенныеРазмещение.Важный КАК Важный, + | ПредопределенныеРазмещение.СмТакже КАК СмТакже, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Наименование, ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.Наименование, ПредставленияВариантов.Наименование) КАК СТРОКА(1000)) + | КОНЕЦ КАК Наименование, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ВариантыКонфигурации.Описание КАК СТРОКА(1000)) + | КОГДА НЕ &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ПредставленияИзКонфигурации.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) + | КОНЕЦ КАК Описание, + | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.Автор КАК Автор, + | ВЫБОР + | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена + | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию + | ИНАЧЕ ВариантыКонфигурации.ВидимостьПоУмолчанию + | КОНЕЦ КАК ВидимостьПоУмолчанию, + | ВариантыОтчетов.Родитель КАК Родитель, + | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров + |ПОМЕСТИТЬ втПредопределенные + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК ПредопределенныеРазмещение + | ПО (ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) + | ИЛИ (&НетОтбораПоПодсистемамИОтчетам + | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))) + | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка + | И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем)) + | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) + | И (&НетОтбораПоПодсистемамИОтчетам + | ИЛИ ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) + | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка + | И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов + | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка + | И (ПредставленияВариантов.КодЯзыка = &КодЯзыка) + |ГДЕ + | НЕ ВариантыОтчетов.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВариантыОтчетов.Ссылка, + | ПредопределенныеРазмещение.Подсистема, + | ПредопределенныеРазмещение.Важный, + | ПредопределенныеРазмещение.СмТакже, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.ПредопределенныйВариант.Наименование КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзРасширений.Наименование, ПредставленияВариантов.Наименование) КАК СТРОКА(1000)) + | КОНЕЦ, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.ПредопределенныйВариант.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзРасширений.Описание, ПредставленияВариантов.Описание) КАК СТРОКА(1000)) + | КОНЕЦ, + | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.ТипОтчета, + | ВариантыОтчетов.КлючВарианта, + | ВариантыОтчетов.Автор, + | ВЫБОР + | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена + | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию + | ИНАЧЕ ВариантыРасширений.ВидимостьПоУмолчанию + | КОНЕЦ, + | ВариантыОтчетов.Родитель, + | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК ПредопределенныеРазмещение + | ПО (ВариантыОтчетов.Ссылка В (&ВариантыНайденныеПоиском) + | ИЛИ (&НетОтбораПоПодсистемамИОтчетам + | ИЛИ ПредопределенныеРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))) + | И ВариантыОтчетов.ПредопределенныйВариант = ПредопределенныеРазмещение.Ссылка + | И (ПредопределенныеРазмещение.Подсистема В (&МассивПодсистем)) + | И (&НетОтбораПоПодсистемамИОтчетам + | ИЛИ ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) + | И (НЕ ПредопределенныеРазмещение.Ссылка В (&ОтключенныеВариантыПрограммы)) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений + | ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений + | ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка + | И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов + | ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка + | И (ПредставленияВариантов.КодЯзыка = &КодЯзыка) + |ГДЕ + | НЕ ВариантыОтчетов.ПометкаУдаления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыРазмещение.Ссылка КАК Ссылка, + | ВариантыРазмещение.Подсистема КАК Подсистема, + | ВариантыРазмещение.Использование КАК Использование, + | ВариантыРазмещение.Важный КАК Важный, + | ВариантыРазмещение.СмТакже КАК СмТакже, + | ВЫБОР + | КОГДА ВариантыОтчетов.Пользовательский + | ИЛИ ВариантыОтчетов.ПредопределенныйВариант В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыПредставления.Наименование, ВариантыОтчетов.Наименование) КАК СТРОКА(1000)) + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.ПредопределенныйВариант.Наименование КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.Наименование, ПредставленияИзРасширений.Наименование) КАК СТРОКА(1000)) + | КОНЕЦ КАК Наименование, + | ВЫБОР + | КОГДА ВариантыОтчетов.Пользовательский + | ИЛИ ВариантыОтчетов.ПредопределенныйВариант В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка)) + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыПредставления.Описание, ВариантыОтчетов.Описание) КАК СТРОКА(1000)) + | КОГДА &ЭтоОсновнойЯзык + | И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ВариантыОтчетов.ПредопределенныйВариант.Описание КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.Описание, ПредставленияИзРасширений.Описание) КАК СТРОКА(1000)) + | КОНЕЦ КАК Описание, + | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.Автор КАК Автор, + | ВЫБОР + | КОГДА ВариантыОтчетов.Родитель = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) + | ТОГДА ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) + | КОГДА ВариантыОтчетов.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) + | ТОГДА ВариантыОтчетов.Родитель + | ИНАЧЕ ВариантыОтчетов.Родитель.Родитель + | КОНЕЦ КАК Родитель, + | ВариантыОтчетов.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, + | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров + |ПОМЕСТИТЬ втВарианты + |ИЗ + | Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ПО (ВариантыОтчетов.Ссылка = ВариантыРазмещение.Ссылка) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации + | ПО (ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка) + | И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений + | ПО (ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка) + | И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ВариантыПредставления + | ПО (ВариантыОтчетов.Ссылка = ВариантыПредставления.Ссылка) + | И (ВариантыПредставления.КодЯзыка = &КодЯзыка) + |ГДЕ + | (ВариантыРазмещение.Ссылка В (&ВариантыНайденныеПоиском) + | ИЛИ (&НетОтбораПоПодсистемамИОтчетам + | ИЛИ ВариантыРазмещение.Подсистема В (&ПодсистемыНайденныеПоиском))) + | И (НЕ ВариантыОтчетов.ТолькоДляАвтора + | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + | И ВариантыРазмещение.Подсистема В(&МассивПодсистем) + | И (&НетОтбораПоПодсистемамИОтчетам + | ИЛИ ВариантыОтчетов.Отчет В (&ОтчетыПользователя)) + | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) + | И (НЕ ВариантыОтчетов.Пользовательский + | ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) + | И (ВариантыОтчетов.Пользовательский + | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ЕСТЬNULL(втВарианты.Ссылка, втПредопределенные.Ссылка) КАК Ссылка, + | ЕСТЬNULL(втВарианты.Подсистема, втПредопределенные.Подсистема) КАК Подсистема, + | ЕСТЬNULL(втВарианты.Важный, втПредопределенные.Важный) КАК Важный, + | ЕСТЬNULL(втВарианты.СмТакже, втПредопределенные.СмТакже) КАК СмТакже, + | ЕСТЬNULL(втВарианты.Наименование, втПредопределенные.Наименование) КАК Наименование, + | ЕСТЬNULL(втВарианты.Описание, втПредопределенные.Описание) КАК Описание, + | ЕСТЬNULL(втВарианты.Автор, втПредопределенные.Автор) КАК Автор, + | ЕСТЬNULL(втВарианты.Отчет, втПредопределенные.Отчет) КАК Отчет, + | ЕСТЬNULL(втВарианты.ТипОтчета, втПредопределенные.ТипОтчета) КАК ТипОтчета, + | ЕСТЬNULL(втВарианты.КлючВарианта, втПредопределенные.КлючВарианта) КАК КлючВарианта, + | ЕСТЬNULL(втВарианты.ВидимостьПоУмолчанию, втПредопределенные.ВидимостьПоУмолчанию) КАК ВидимостьПоУмолчанию, + | ЕСТЬNULL(втВарианты.Родитель, втПредопределенные.Родитель) КАК Родитель, + | ВЫБОР + | КОГДА ЕСТЬNULL(втВарианты.Родитель, втПредопределенные.Родитель) = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ВерхнийУровень, + | ЕСТЬNULL(втВарианты.КлючЗамеров, втПредопределенные.КлючЗамеров) КАК КлючЗамеров + |ПОМЕСТИТЬ втВсеВарианты + |ИЗ + | втПредопределенные КАК втПредопределенные + | ПОЛНОЕ СОЕДИНЕНИЕ втВарианты КАК втВарианты + | ПО втПредопределенные.Ссылка = втВарианты.Ссылка + | И втПредопределенные.Подсистема = втВарианты.Подсистема + |ГДЕ + | ЕСТЬNULL(втВарианты.Использование, ИСТИНА) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | втВсеВарианты.Ссылка КАК Ссылка, + | втВсеВарианты.Подсистема КАК Подсистема, + | втПодсистемы.Представление КАК ПодсистемаПредставление, + | ЕСТЬNULL(втПодсистемы.Приоритет, """") КАК ПодсистемаПриоритет, + | втПодсистемы.РазделСсылка КАК РазделСсылка, + | ВЫБОР + | КОГДА втВсеВарианты.Подсистема = втПодсистемы.РазделСсылка + | И втВсеВарианты.СмТакже = ЛОЖЬ + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК БезГруппы, + | втВсеВарианты.Важный КАК Важный, + | втВсеВарианты.СмТакже КАК СмТакже, + | ВЫБОР + | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК Дополнительный, + | ЕСТЬNULL(ЛичныеНастройки.Видимость, втВсеВарианты.ВидимостьПоУмолчанию) КАК Видимость, + | ЕСТЬNULL(ЛичныеНастройки.БыстрыйДоступ, ЛОЖЬ) КАК БыстрыйДоступ, + | ВЫБОР + | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний) + | ИЛИ втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение) + | ТОГДА втВсеВарианты.Отчет.Имя + | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный) + | ТОГДА """" + | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(втВсеВарианты.Отчет КАК СТРОКА(150)), 14, 137) + | КОНЕЦ КАК ИмяОтчета, + | втВсеВарианты.Наименование КАК Наименование, + | втВсеВарианты.Описание КАК Описание, + | втВсеВарианты.Автор КАК Автор, + | втВсеВарианты.Отчет КАК Отчет, + | втВсеВарианты.ТипОтчета КАК ТипОтчета, + | втВсеВарианты.КлючВарианта КАК КлючВарианта, + | втВсеВарианты.Родитель КАК Родитель, + | втВсеВарианты.ВерхнийУровень КАК ВерхнийУровень, + | втВсеВарианты.КлючЗамеров КАК КлючЗамеров + |ИЗ + | втВсеВарианты КАК втВсеВарианты + | ЛЕВОЕ СОЕДИНЕНИЕ втПодсистемы КАК втПодсистемы + | ПО втВсеВарианты.Подсистема = втПодсистемы.Подсистема + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ЛичныеНастройки + | ПО втВсеВарианты.Подсистема = ЛичныеНастройки.Подсистема + | И втВсеВарианты.Ссылка = ЛичныеНастройки.Вариант + | И (ЛичныеНастройки.Пользователь = &ТекущийПользователь) + |ГДЕ + | (&НетОтбораПоВидимости + | ИЛИ ЕСТЬNULL(ЛичныеНастройки.Видимость, втВсеВарианты.ВидимостьПоУмолчанию)) + | + |УПОРЯДОЧИТЬ ПО + | ПодсистемаПриоритет, + | Наименование"; + + ПоискПоСтроке = ЗначениеЗаполнено(ПараметрыЗаполнения.СтрокаПоиска); + ТолькоТекущийРаздел = ПараметрыЗаполнения.РежимНастройки Или Не ПоискПоСтроке Или ПараметрыЗаполнения.ИскатьВоВсехРазделах = 0; + ТаблицаПодсистем = ПараметрыЗаполнения.ПодсистемыПрограммы; + ТаблицаПодсистем.Индексы.Добавить("Ссылка"); + МассивПодсистем = ТаблицаПодсистем.ВыгрузитьКолонку("Ссылка"); + + ПараметрыПоиска = Новый Структура; + Если ПоискПоСтроке Тогда + ПараметрыПоиска.Вставить("СтрокаПоиска", ПараметрыЗаполнения.СтрокаПоиска); + КонецЕсли; + Если ТолькоТекущийРаздел Тогда + ПараметрыПоиска.Вставить("Подсистемы", МассивПодсистем); + КонецЕсли; + РезультатПоиска = НайтиВариантыОтчетов(ПараметрыПоиска, Ложь, Истина); + + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); + Запрос.УстановитьПараметр("МассивПодсистем", МассивПодсистем); + Запрос.УстановитьПараметр("ТаблицаПодсистем", ТаблицаПодсистем); + Запрос.УстановитьПараметр("РазделСсылка", ПараметрыЗаполнения.ТекущийРазделСсылка); + Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); + Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); + Запрос.УстановитьПараметр("ВариантыНайденныеПоиском", РезультатПоиска.Ссылки); + Запрос.УстановитьПараметр("ПодсистемыНайденныеПоиском", РезультатПоиска.Подсистемы); + Запрос.УстановитьПараметр("ОтчетыПользователя", ПараметрыПоиска.ОтчетыПользователя); + Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ПараметрыПоиска.ОтключенныеВариантыПрограммы); + Запрос.УстановитьПараметр("НетОтбораПоПодсистемамИОтчетам", Не ПоискПоСтроке И ПараметрыПоиска.Подсистемы.Количество() = 0); + Запрос.УстановитьПараметр("НетОтбораПоВидимости", ПараметрыЗаполнения.РежимНастройки Или ПоискПоСтроке); + + ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); + ЗаполнитьИменаОтчетов(ТаблицаРезультат); + + ТаблицаРезультат.Колонки.Добавить("ВыводитсяВместеСОсновным", Новый ОписаниеТипов("Булево")); + ТаблицаРезультат.Колонки.Добавить("КоличествоПодчиненных", Новый ОписаниеТипов("Число")); + ТаблицаРезультат.Индексы.Добавить("Ссылка"); + + Если ПоискПоСтроке Тогда + // Удаление записей о вариантах, связанных с подсистемами, если запись не фигурирует в связи. + Для Каждого КлючИЗначение Из РезультатПоиска.ВариантыСвязанныеСПодсистемами Цикл + ВариантСсылка = КлючИЗначение.Ключ; + СвязанныеПодсистемы = КлючИЗначение.Значение; + Найденные = ТаблицаРезультат.НайтиСтроки(Новый Структура("Ссылка", ВариантСсылка)); + Для Каждого СтрокаТаблицы Из Найденные Цикл + Если СвязанныеПодсистемы.Найти(СтрокаТаблицы.Подсистема) = Неопределено Тогда + ТаблицаРезультат.Удалить(СтрокаТаблицы); + КонецЕсли; + КонецЦикла; + КонецЦикла; + // Удаление записей о родителях, связанных с вариантами, если родитель пытается вывестись один (без вариантов). + Для Каждого РодительСсылка Из РезультатПоиска.РодителиСвязанныеСВариантами Цикл + МестаВывода = ТаблицаРезультат.НайтиСтроки(Новый Структура("Ссылка", РодительСсылка)); + Для Каждого СтрокаТаблицы Из МестаВывода Цикл + Найденные = ТаблицаРезультат.НайтиСтроки(Новый Структура("Подсистема, Родитель", СтрокаТаблицы.Подсистема, РодительСсылка)); + Если Найденные.Количество() = 0 Тогда + ТаблицаРезультат.Удалить(СтрокаТаблицы); + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + + Если ТолькоТекущийРаздел Тогда + ДругиеРазделы = Новый Массив; + Иначе + КопияТаблицы = ТаблицаРезультат.Скопировать(); + КопияТаблицы.Свернуть("РазделСсылка"); + ДругиеРазделы = КопияТаблицы.ВыгрузитьКолонку("РазделСсылка"); + Индекс = ДругиеРазделы.Найти(ПараметрыЗаполнения.ТекущийРазделСсылка); + Если Индекс <> Неопределено Тогда + ДругиеРазделы.Удалить(Индекс); + КонецЕсли; + КонецЕсли; + + МассивСлов = ?(ПоискПоСтроке, + ВариантыОтчетовКлиентСервер.РазложитьСтрокуПоискаВМассивСлов(ВРег(СокрЛП(ПараметрыЗаполнения.СтрокаПоиска))), + Неопределено); + + Результат = Новый Структура; + Результат.Вставить("ТолькоТекущийРаздел", ТолькоТекущийРаздел); + Результат.Вставить("ТаблицаПодсистем", ТаблицаПодсистем); + Результат.Вставить("ДругиеРазделы", ДругиеРазделы); + Результат.Вставить("Варианты", ТаблицаРезультат); + Результат.Вставить("ИспользоватьПодсветку", ПоискПоСтроке); + Результат.Вставить("РезультатПоиска", РезультатПоиска); + Результат.Вставить("МассивСлов", МассивСлов); + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); +КонецПроцедуры + +Процедура ЗаполнитьИменаОтчетов(ТаблицаРезультат) + + ИдентификаторыОтчетов = Новый Массив; + Для Каждого СтрокаОтчета Из ТаблицаРезультат Цикл + Если Не СтрокаОтчета.Дополнительный Тогда + ИдентификаторыОтчетов.Добавить(СтрокаОтчета.Отчет); + КонецЕсли; + КонецЦикла; + ОбъектыОтчетов = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыОтчетов, Ложь); + НесуществующиеИНедоступные = Новый Массив; + + Для Каждого ОтчетДляВывода Из ТаблицаРезультат Цикл + Если ОтчетДляВывода.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний + Или ОтчетДляВывода.ТипОтчета = Перечисления.ТипыОтчетов.Расширение Тогда + МетаданныеОтчета = ОбъектыОтчетов[ОтчетДляВывода.Отчет]; + Если МетаданныеОтчета = Неопределено Или МетаданныеОтчета = Null Тогда + НесуществующиеИНедоступные.Добавить(ОтчетДляВывода); + ИначеЕсли ОтчетДляВывода.ИмяОтчета <> МетаданныеОтчета.Имя Тогда + ОтчетДляВывода.ИмяОтчета = МетаданныеОтчета.Имя; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Для каждого НедоступныйОтчет Из НесуществующиеИНедоступные Цикл + ТаблицаРезультат.Удалить(НедоступныйОтчет); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Определение используемых таблиц. @@ -6189,16 +6939,6 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочее. - -// Добавляет элемент в массив с контролем уникальности. -Процедура ДобавитьВМассив(Массив, Значение) - Если Массив.Найти(Значение) = Неопределено Тогда - Массив.Добавить(Значение); - КонецЕсли; -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные для служебного программного интерфейса diff --git a/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl index f259d8bf9..62cddbf20 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовВызовСервера/Module.bsl @@ -1,10 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Открывает форму дополнительного отчета с заданным вариантом. // // Параметры: -// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка дополнительного отчета. -// КлючВарианта - Строка - Имя варианта дополнительного отчета. +// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка дополнительного отчета. +// КлючВарианта - Строка - Имя варианта дополнительного отчета. // Процедура ПриПодключенииОтчета(ПараметрыОткрытия) Экспорт ВариантыОтчетов.ПриПодключенииОтчета(ПараметрыОткрытия); @@ -13,8 +21,8 @@ // Получает тип субконто счета по его номеру. // // Параметры: -// Счет - ПланСчетовСсылка - Ссылка счета. -// НомерСубконто - Число - Номер субконто. +// Счет - ПланСчетовСсылка - Ссылка счета. +// НомерСубконто - Число - Номер субконто. // // Возвращаемое значение: // ОписаниеТипов - Тип субконто. @@ -28,8 +36,8 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", Счет); Запрос.УстановитьПараметр("НомерСтроки", НомерСубконто); - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ + Запрос.Текст = " + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПланСчетовВидыСубконто.ВидСубконто.ТипЗначения КАК Тип |ИЗ | &ПолноеИмяТаблицы КАК ПланСчетовВидыСубконто @@ -44,9 +52,4 @@ Возврат Выборка.Тип; КонецФункции -// См. ОтчетыСервер.ПараметрыВыбораТипа. -Функция ПараметрыВыбораТипа(Знач Тип, Знач ПараметрыНастройки) Экспорт - Возврат ОтчетыСервер.ПараметрыВыбораТипа(Тип, ПараметрыНастройки); -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index 3bf936983..0f6c4efc2 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -1,20 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму указанного отчета. // // Параметры: -// ФормаВладелец - УправляемаяФорма, Неопределено - форма, из которой открывается отчет. -// Вариант - СправочникСсылка.ВариантыОтчетов, СправочникСсылка.ДополнительныеОтчетыИОбработки - вариант -// отчета, форму которого требуется открыть. Если передан тип СправочникСсылка.ДополнительныеОтчетыИОбработки, -// то открывается дополнительный отчет, подключенный к программе. -// ДополнительныеПараметры - Структура - служебный параметр, не предназначен для использования. +// ФормаВладелец - УправляемаяФорма, Неопределено - форма, из которой открывается отчет. +// Вариант - СправочникСсылка.ВариантыОтчетов, СправочникСсылка.ДополнительныеОтчетыИОбработки - вариант +// отчета, форму которого требуется открыть. Если передан тип СправочникСсылка.ДополнительныеОтчетыИОбработки, +// то открывается дополнительный отчет, подключенный к программе. +// ДополнительныеПараметры - Структура - служебный параметр, не предназначен для использования. // Процедура ОткрытьФормуОтчета(Знач ФормаВладелец, Знач Вариант, Знач ДополнительныеПараметры = Неопределено) Экспорт Тип = ТипЗнч(Вариант); Если Тип = Тип("Структура") Тогда ПараметрыОткрытия = Вариант; ИначеЕсли Тип = Тип("СправочникСсылка.ВариантыОтчетов") - Или Тип = ВариантыОтчетовКлиентСервер.ТипСсылкиДополнительногоОтчета() Тогда + Или Тип = ТипСсылкиДополнительногоОтчета() Тогда ПараметрыОткрытия = Новый Структура("Ключ", Вариант); Если ДополнительныеПараметры <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыОткрытия, ДополнительныеПараметры, Истина); @@ -77,9 +85,9 @@ Если ПараметрыОткрытия.ВыполнятьЗамеры Тогда ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОткрытия, "КомментарийОперации"); МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); - ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.НачатьЗамерВремени( - Ложь, - ПараметрыОткрытия.ИмяОперации); + ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.ЗамерВремени( + ПараметрыОткрытия.ИмяОперации,, + Ложь); МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(ИдентификаторЗамера, ПараметрыОткрытия.КомментарийОперации); КонецЕсли; @@ -93,10 +101,10 @@ // Открывает панель отчетов. Для использования из модулей общих команд. // // Параметры: -// ПутьКПодсистеме - Строка - Имя раздела или путь к подсистеме, для которой открывается панель отчетов. -// Задается в формате: "ИмяРаздела[.ИмяВложеннойПодсистемы1][.ИмяВложеннойПодсистемы2][...]". -// Раздел должен быть описан в ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов. -// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды - параметры обработчика общей команды. +// ПутьКПодсистеме - Строка - Имя раздела или путь к подсистеме, для которой открывается панель отчетов. +// Задается в формате: "ИмяРаздела[.ИмяВложеннойПодсистемы1][.ИмяВложеннойПодсистемы2][...]". +// Раздел должен быть описан в ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов. +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды - параметры обработчика общей команды. // Процедура ПоказатьПанельОтчетов(ПутьКПодсистеме, ПараметрыВыполненияКоманды) Экспорт ФормаПараметры = Новый Структура("ПутьКПодсистеме", ПутьКПодсистеме); @@ -107,9 +115,9 @@ ПараметрыКлиента = ПараметрыКлиента(); Если ПараметрыКлиента.ВыполнятьЗамеры Тогда МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); - ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.НачатьЗамерВремени( - Ложь, - "ПанельОтчетов.Открытие"); + ИдентификаторЗамера = МодульОценкаПроизводительностиКлиент.ЗамерВремени( + "ПанельОтчетов.Открытие",, + Ложь); МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(ИдентификаторЗамера, ПараметрыКлиента.ПрефиксЗамеров + "; " + ПутьКПодсистеме); КонецЕсли; @@ -120,71 +128,15 @@ КонецЕсли; КонецПроцедуры -// Открывает диалог настройки размещения нескольких вариантов в разделах. -// -// Параметры: -// Варианты - Массив - перемещаемые варианты отчетов (СправочникСсылка.ВариантыОтчетов). -// Владелец - УправляемаяФорма - для блокирования окна владельца. -// -Процедура ОткрытьДиалогРазмещенияВариантовВРазделах(Варианты, Владелец = Неопределено) Экспорт - - Если ТипЗнч(Варианты) <> Тип("Массив") Или Варианты.Количество() < 1 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выберите варианты отчетов, которые необходимо разместить в разделах.'")); - Возврат; - КонецЕсли; - - ПараметрыОткрытия = Новый Структура("Варианты", Варианты); - ОткрытьФорму("Справочник.ВариантыОтчетов.Форма.РазмещениеВРазделах", ПараметрыОткрытия, Владелец); - -КонецПроцедуры - -// Открывает диалог диалог сброса пользовательских настроек выбранных вариантов отчетов. -// -// Параметры: -// Варианты - Массив - обрабатываемые варианты отчетов (СправочникСсылка.ВариантыОтчетов). -// Владелец - УправляемаяФорма - для блокирования окна владельца. -// -Процедура ОткрытьДиалогСбросаНастроекПользователей(Варианты, Владелец = Неопределено) Экспорт - - Если ТипЗнч(Варианты) <> Тип("Массив") Или Варианты.Количество() < 1 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выберите варианты отчетов, для которых необходимо сбросить пользовательские настройки.'")); - Возврат; - КонецЕсли; - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("Варианты", Варианты); - ОткрытьФорму("Справочник.ВариантыОтчетов.Форма.СбросПользовательскихНастроек", ПараметрыОткрытия, Владелец); - -КонецПроцедуры - -// Открывает диалог диалог сброса настроек размещения выбранных вариантов отчетов программы. -// -// Параметры: -// Варианты - Массив - обрабатываемые варианты отчетов (СправочникСсылка.ВариантыОтчетов). -// Владелец - УправляемаяФорма - для блокирования окна владельца. -// -Процедура ОткрытьДиалогСбросаНастроекРазмещения(Варианты, Владелец = Неопределено) Экспорт - - Если ТипЗнч(Варианты) <> Тип("Массив") ИЛИ Варианты.Количество() < 1 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Выберите варианты отчетов программы, для которых необходимо сбросить настройки размещения.'")); - Возврат; - КонецЕсли; - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("Варианты", Варианты); - ОткрытьФорму("Справочник.ВариантыОтчетов.Форма.СбросНастроекРазмещения", ПараметрыОткрытия, Владелец); - -КонецПроцедуры - // Оповещает открытые панели отчетов, формы списков и элементов о изменениях. // // Параметры: -// Параметр - Произвольный - могут быть переданы любые необходимые данные. -// Источник - Произвольный - источник события. Например, можно передать другую форму. +// Параметр - Произвольный - могут быть переданы любые необходимые данные. +// Источник - Произвольный - источник события. Например, можно передать другую форму. // Процедура ОбновитьОткрытыеФормы(Параметр = Неопределено, Источник = Неопределено) Экспорт - Оповестить(ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта(), Параметр, Источник); + Оповестить(ИмяСобытияИзменениеВарианта(), Параметр, Источник); КонецПроцедуры @@ -195,7 +147,7 @@ // Открывает карточку варианта отчета с настройками размещения в программе. // // Параметры: -// Вариант - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// Вариант - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. // Процедура ПоказатьНастройкиОтчета(Вариант) Экспорт ПараметрыФормы = Новый Структура; @@ -248,6 +200,24 @@ СтрокаДерева.Модифицированность = Истина; КонецПроцедуры +// Открывает диалог настройки размещения нескольких вариантов в разделах. +// +// Параметры: +// Варианты - Массив - перемещаемые варианты отчетов (СправочникСсылка.ВариантыОтчетов). +// Владелец - УправляемаяФорма - для блокирования окна владельца. +// +Процедура ОткрытьДиалогРазмещенияВариантовВРазделах(Варианты, Владелец = Неопределено) Экспорт + + Если ТипЗнч(Варианты) <> Тип("Массив") Или Варианты.Количество() < 1 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите варианты отчетов, которые необходимо разместить в разделах.'")); + Возврат; + КонецЕсли; + + ПараметрыОткрытия = Новый Структура("Варианты", Варианты); + ОткрытьФорму("Справочник.ВариантыОтчетов.Форма.РазмещениеВРазделах", ПараметрыОткрытия, Владелец); + +КонецПроцедуры + // Аналог ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияМногострочногоТекста, работающий за 1 вызов. // В отличие от ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария позволяет устанавливать свой заголовок // и работает с реквизитами таблиц. @@ -308,4 +278,24 @@ "ВариантыОтчетов"); КонецФункции +// Имя события оповещения для изменения варианта отчета. +Функция ИмяСобытияИзменениеВарианта() Экспорт + Возврат "Запись_ВариантыОтчетов"; +КонецФункции + +// Имя события оповещения для изменения общих настроек. +Функция ИмяСобытияИзменениеОбщихНастроек() Экспорт + Возврат ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы() + ".ИзменениеОбщихНастроек"; +КонецФункции + +// Возвращает тип ссылки дополнительного отчета. +Функция ТипСсылкиДополнительногоОтчета() + Существует = ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"); + Если Существует Тогда + Возврат Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки"); + КонецЕсли; + + Возврат Неопределено; +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl index 14caba123..2146d87e7 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Идентификатор, который используется для начальной страницы в модуле ВариантыОтчетовПереопределяемый. @@ -32,49 +40,9 @@ #Область СлужебныеПроцедурыИФункции -// Представление подсистемы. Используется при записи в журнал регистрации и в других местах. -Функция НаименованиеПодсистемы(КодЯзыка) Экспорт - Возврат НСтр("ru = 'Варианты отчетов'", ?(КодЯзыка = Неопределено, ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(), КодЯзыка)); -КонецФункции - -// Представление группы важности. -Функция ПредставлениеСмТакже() Экспорт - Возврат НСтр("ru = 'См. также'"); -КонецФункции - -// Представление группы важности. -Функция ПредставлениеВажный() Экспорт - Возврат НСтр("ru = 'Важный'"); -КонецФункции - -// Имя события оповещения для изменения варианта отчета. -Функция ИмяСобытияИзменениеВарианта() Экспорт - Возврат ПолноеИмяПодсистемы() + ".ИзменениеВарианта"; -КонецФункции - -// Имя события оповещения для изменения общих настроек. -Функция ИмяСобытияИзменениеОбщихНастроек() Экспорт - Возврат ПолноеИмяПодсистемы() + ".ИзменениеОбщихНастроек"; -КонецФункции - -// Краткое имя подсистемы. -Функция ИмяПодсистемы() - Возврат "ВариантыОтчетов"; -КонецФункции - // Полное имя подсистемы. Функция ПолноеИмяПодсистемы() Экспорт - Возврат "СтандартныеПодсистемы." + ИмяПодсистемы(); -КонецФункции - -// Разделитель, который используется при хранении нескольких наименований в одном строковом реквизите. -Функция РазделительХранения() Экспорт - Возврат Символы.ПС; -КонецФункции - -// Разделитель, который используется для отображения нескольких наименований в интерфейсе. -Функция РазделительПредставления() Экспорт - Возврат ", "; + Возврат "СтандартныеПодсистемы.ВариантыОтчетов"; КонецФункции // Превращает строку поиска в массив слов с уникальными значениями, отсортированный по убыванию длины. @@ -148,35 +116,4 @@ КонецЕсли; КонецФункции -// Превращает тип отчета в строковый идентификатор. -Функция ТипОтчета(ОтчетСсылка, РезультатСтрокой = Ложь) Экспорт - ТипСсылки = ТипЗнч(ОтчетСсылка); - Если ТипСсылки = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - Ключ = "Внутренний"; - ИначеЕсли ТипСсылки = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда - Ключ = "Расширение"; - ИначеЕсли ТипСсылки = Тип("Строка") Тогда - Ключ = "Внешний"; - ИначеЕсли ТипСсылки = ТипСсылкиДополнительногоОтчета() Тогда - Ключ = "Дополнительный"; - Иначе - Ключ = ?(РезультатСтрокой, Неопределено, "ПустаяСсылка"); - КонецЕсли; - Возврат ?(РезультатСтрокой, Ключ, ПредопределенноеЗначение("Перечисление.ТипыОтчетов." + Ключ)); -КонецФункции - -// Возвращает тип ссылки дополнительного отчета. -Функция ТипСсылкиДополнительногоОтчета() Экспорт - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Существует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"); - #Иначе - Существует = ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"); - #КонецЕсли - Если Существует Тогда - Имя = "ДополнительныеОтчетыИОбработки"; - Возврат Тип("СправочникСсылка." + Имя); - КонецЕсли; - Возврат Неопределено; -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl index 9b352bbfb..19aad2ba2 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl @@ -1,6 +1,14 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс -// Задает настройки, применяемые как умолчания для объектов подсистемы. +// Задает настройки, применяемые как стандартные для объектов подсистемы. // // Параметры: // Настройки - Структура - Коллекция настроек подсистемы. Реквизиты: @@ -47,10 +55,10 @@ // в которых размещены команды вызова панелей отчетов. // // Параметры: -// Разделы - СписокЗначений - разделы, в которые выведены команды открытия панели отчетов. -// * Значение - ОбъектМетаданных: Подсистема, Строка - подсистема раздела глобального командного интерфейса, -// либо ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы для начальной страницы. -// * Представление - Строка - заголовок панели отчетов в этом разделе. +// Разделы - СписокЗначений - разделы, в которые выведены команды открытия панели отчетов. +// * Значение - ОбъектМетаданных: Подсистема, Строка - подсистема раздела глобального командного интерфейса, +// либо ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы для начальной страницы. +// * Представление - Строка - заголовок панели отчетов в этом разделе. // // Пример: // Разделы.Добавить(Метаданные.Подсистемы.Анкетирование, НСтр("ru = 'Отчеты по анкетированию'")); @@ -63,22 +71,17 @@ КонецПроцедуры // Задает настройки размещения вариантов отчетов в панели отчетов. -// Отчет выступает в качестве контейнера вариантов. -// Изменяя настройки отчета можно сразу изменять настройки всех его вариантов. -// Однако, если явно получить настройки варианта отчета, то они станут самостоятельными, -// т.е. более не будут наследовать изменения настроек от отчета. +// Изменяя настройки отчета, можно изменить настройки всех его вариантов. +// Однако, если явно получить настройки варианта отчета, то они станут самостоятельными, +// т.е. более не будут наследовать изменения настроек от отчета. // -// Начальная настройка размещения отчетов по подсистемам зачитывается из метаданных, -// ее дублирование в коде не требуется. +// Начальная настройка размещения отчетов по подсистемам зачитывается из метаданных, +// ее дублирование в коде не требуется. // -// Функциональные опции варианта объединяются с функциональными опциями этого отчета по следующим правилам: -// (ФО1_Отчета ИЛИ ФО2_Отчета) И (ФО3_Варианта ИЛИ ФО4_Варианта). -// Функциональные опции отчетов не зачитываются из метаданных, -// они применяются на этапе использования подсистемы пользователем. -// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, -// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов отчетов. -// Для пользовательских вариантов отчета действуют только функциональные опции отчета -// - они отключаются только с отключением всего отчета. +// Функциональные опции предопределенного варианта отчета объединяются с функциональными опциями этого отчета по правилам: +// (ФО1_Отчета ИЛИ ФО2_Отчета) И (ФО3_Варианта ИЛИ ФО4_Варианта). +// Для пользовательских вариантов отчета действуют только функциональные опции отчета +// - они отключаются только с отключением всего отчета. // // Параметры: // Настройки - Коллекция - настройки отчетов и вариантов отчетов конфигурации. @@ -90,21 +93,21 @@ // // Пример: // -// //Добавление варианта отчета в подсистему. +// // Добавление варианта отчета в подсистему. // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "<ИмяВарианта>"); // НастройкиВарианта.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); // -// //Отключение варианта отчета. +// // Отключение варианта отчета. // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "<ИмяВарианта>"); // НастройкиВарианта.Включен = Ложь; // -// //Отключение всех вариантов отчета, кроме одного. +// // Отключение всех вариантов отчета, кроме одного. // НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); // НастройкиОтчета.Включен = Ложь; // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); // НастройкиВарианта.Включен = Истина; // -// //Заполнение настроек для поиска - наименования полей, параметров и отборов: +// // Заполнение настроек для поиска - наименования полей, параметров и отборов: // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчетаБезСхемы, ""); // НастройкиВарианта.НастройкиДляПоиска.НаименованияПолей = // НСтр("ru = 'Контрагент @@ -118,10 +121,10 @@ // |Контрагент // |Договор'"); // -// //Переключение режима вывода в панелях отчетов: -// //Группировка вариантов отчета по этому отчету: +// // Переключение режима вывода в панелях отчетов: +// // Группировка вариантов отчета по этому отчету: // ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.ИмяОтчета, Истина); -// //Без группировки по отчету: +// // Без группировки по отчету: // Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); // ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Отчет, Ложь); // @@ -132,15 +135,15 @@ КонецПроцедуры // Регистрирует изменения в именах вариантов отчетов. -// Используется при обновлении в целях сохранения ссылочной целостности, -// в частности для сохранения пользовательских настроек и настроек рассылок отчетов. -// Старое имя варианта резервируется и не может быть использовано в дальнейшем. -// Если изменений было несколько, то каждое изменение необходимо зарегистрировать, -// указывая в актуальном имени варианта последнее (текущее) имя варианта отчета. -// Поскольку имена вариантов отчетов не выводятся в пользовательском интерфейсе, -// то рекомендуется задавать их таким образом, что бы затем не менять. -// В Изменения необходимо добавить описания изменений имен вариантов -// отчетов, подключенных к подсистеме. +// Используется при обновлении в целях сохранения ссылочной целостности, +// в частности для сохранения пользовательских настроек и настроек рассылок отчетов. +// Старое имя варианта резервируется и не может быть использовано в дальнейшем. +// Если изменений было несколько, то каждое изменение необходимо зарегистрировать, +// указывая в актуальном имени варианта последнее (текущее) имя варианта отчета. +// Поскольку имена вариантов отчетов не выводятся в пользовательском интерфейсе, +// то рекомендуется задавать их таким образом, что бы затем не менять. +// В Изменения необходимо добавить описания изменений имен вариантов +// отчетов, подключенных к подсистеме. // // Параметры: // Изменения - ТаблицаЗначений - Таблица изменений имен вариантов. Колонки: @@ -166,17 +169,17 @@ // Синтаксис процедуры ДобавитьКомандыОтчетов см. в документации. // // Параметры: -// Объекты - Массив - объекты метаданных (ОбъектМетаданных) с командами отчетов. +// Объекты - Массив - объекты метаданных (ОбъектМетаданных) с командами отчетов. // Процедура ОпределитьОбъектыСКомандамиОтчетов(Объекты) Экспорт КонецПроцедуры // Определение списка глобальных команд отчетов. -// Событие возникает в процессе вызова модуля повторного использования. +// Событие возникает в процессе вызова модуля повторного использования. // // Параметры: -// КомандыОтчетов - ТаблицаЗначений - Таблица команд для вывода в подменю. Для изменения. +// КомандыОтчетов - ТаблицаЗначений - Таблица команд для вывода в подменю. Для изменения. // * Идентификатор - Строка - Идентификатор команды. // // Настройки внешнего вида: @@ -234,11 +237,11 @@ // - Если ИмяФормы не заполнено то в модуле менеджера этого объекта ожидается серверная процедура. // * ДополнительныеПараметры - Структура - Параметры обработчика, указанного в Обработчик. // -// Параметры - Структура - Сведения о контексте исполнения. +// Параметры - Структура - Сведения о контексте исполнения. // * ИмяФормы - Строка - Полное имя формы. // -// СтандартнаяОбработка - Булево - Если установить в Ложь, то событие "ДобавитьКомандыОтчетов" менеджера объекта не -// будет вызвано. +// СтандартнаяОбработка - Булево - Если установить в Ложь, то событие "ДобавитьКомандыОтчетов" менеджера объекта не +// будет вызвано. // Процедура ПередДобавлениемКомандОтчетов(КомандыОтчетов, Параметры, СтандартнаяОбработка) Экспорт diff --git a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl index fa5fe1de4..e0ae15797 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Формирует список отчетов конфигурации, доступных текущему пользователю. @@ -81,7 +89,7 @@ КорневаяСтрока.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); КорневаяСтрока.Представление = НСтр("ru = 'Все разделы'"); - МассивПолныхИмен = Новый Массив; + ПолныеИменаПодсистем = Новый Массив; ПолныеИменаСтрокДерева = Новый Соответствие; ИдентификаторНачальнойСтраницы = ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(); @@ -121,7 +129,7 @@ СтрокаДерева.ПолноеИмя = РазделМетаданные.ПолноеИмя(); СтрокаДерева.Представление = РазделМетаданные.Представление(); КонецЕсли; - МассивПолныхИмен.Добавить(СтрокаДерева.ПолноеИмя); + ПолныеИменаПодсистем.Добавить(СтрокаДерева.ПолноеИмя); Если ПолныеИменаСтрокДерева[СтрокаДерева.ПолноеИмя] = Неопределено Тогда ПолныеИменаСтрокДерева.Вставить(СтрокаДерева.ПолноеИмя, СтрокаДерева); Иначе @@ -135,11 +143,11 @@ Приоритет = Приоритет + 1; СтрокаДерева.Приоритет = Формат(Приоритет, "ЧЦ=4; ЧДЦ=0; ЧВН=; ЧГ=0"); Если Не ЭтоНачальнаяСтраница Тогда - ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, РазделМетаданные, МассивПолныхИмен, ПолныеИменаСтрокДерева); + ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, РазделМетаданные, ПолныеИменаПодсистем, ПолныеИменаСтрокДерева); КонецЕсли; КонецЦикла; - СсылкиПодсистем = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(МассивПолныхИмен); + СсылкиПодсистем = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ПолныеИменаПодсистем); Для Каждого КлючИЗначение Из СсылкиПодсистем Цикл СтрокаДерева = ПолныеИменаСтрокДерева[КлючИЗначение.Ключ]; Если СтрокаДерева = Истина Тогда // Требуется поиск по дереву. @@ -159,7 +167,7 @@ КонецФункции // Добавляет подсистемы родителя с фильтром по правам доступа и функциональным опциям. -Процедура ДобавитьПодсистемыТекущегоПользователя(СтрокаРодителя, МетаданныеРодителя, МассивПолныхИмен, ПолныеИменаСтрокДерева) +Процедура ДобавитьПодсистемыТекущегоПользователя(СтрокаРодителя, МетаданныеРодителя, ПолныеИменаПодсистем, ПолныеИменаСтрокДерева) ПриоритетРодителя = СтрокаРодителя.Приоритет; Приоритет = 0; @@ -176,7 +184,7 @@ СтрокаДерева.Имя = ПодсистемаМетаданные.Имя; СтрокаДерева.ПолноеИмя = ПодсистемаМетаданные.ПолноеИмя(); СтрокаДерева.Представление = ПодсистемаМетаданные.Представление(); - МассивПолныхИмен.Добавить(СтрокаДерева.ПолноеИмя); + ПолныеИменаПодсистем.Добавить(СтрокаДерева.ПолноеИмя); Если ПолныеИменаСтрокДерева[СтрокаДерева.ПолноеИмя] = Неопределено Тогда ПолныеИменаСтрокДерева.Вставить(СтрокаДерева.ПолноеИмя, СтрокаДерева); Иначе @@ -191,7 +199,7 @@ КонецЕсли; СтрокаДерева.Приоритет = ПриоритетРодителя + Формат(Приоритет, "ЧЦ=4; ЧДЦ=0; ЧВН=; ЧГ=0"); - ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, ПодсистемаМетаданные, МассивПолныхИмен, ПолныеИменаСтрокДерева); + ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, ПодсистемаМетаданные, ПолныеИменаПодсистем, ПолныеИменаСтрокДерева); КонецЦикла; КонецПроцедуры @@ -205,10 +213,20 @@ Возврат ПравоДоступа("СохранениеДанныхПользователя", Метаданные) И ПравоДоступа("Добавление", Метаданные.Справочники.ВариантыОтчетов); КонецФункции -// Параметры подсистемы, закэшированные при обновлении. +// Параметры подсистемы, закэшированные при обновлении (см. ВариантыОтчетов.ЗаписатьПараметрыВариантовОтчетов). +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ТаблицаФункциональныхОпций - ТаблицаЗначений - связь функциональных опций и предопределенных вариантов отчетов: +// ** Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// ** ПредопределенныйВариант - СправочникСсылка.ПредопределенныеВариантыОтчетов +// ** ИмяФункциональнойОпции - Строка +// * ОтчетыСНастройками - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - отчеты, +// в модуле объекта которых размещены процедуры интеграции с общей формой отчета. +// Функция Параметры() Экспорт - ПолноеИмяПодсистемы = ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(); + ПолноеИмяПодсистемы = ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(); Параметры = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ПолноеИмяПодсистемы); Если Параметры = Неопределено Тогда ВариантыОтчетов.ОперативноеОбновлениеОбщихДанныхКонфигурации(Новый Структура("РазделенныеОбработчики")); @@ -218,21 +236,11 @@ Если ЗначениеЗаполнено(ПараметрыСеанса.ВерсияРасширений) Тогда ПараметрыРасширений = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ПолноеИмяПодсистемы); Если ПараметрыРасширений = Неопределено Тогда - Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда - УстановитьПривилегированныйРежим(Истина); - Если Не ПривилегированныйРежим() Тогда - ВызватьИсключение НСтр("ru = 'Не удалось обновить вспомогательные данные расширений. Обратитесь к администратору.'"); - КонецЕсли; - КонецЕсли; - Настройки = Новый Структура; - Настройки.Вставить("Конфигурация", Ложь); - Настройки.Вставить("Расширения", Истина); - Настройки.Вставить("ОбщиеДанные", Истина); - Настройки.Вставить("РазделенныеДанные", Истина); - Настройки.Вставить("Оперативное", Истина); - Настройки.Вставить("Отложенное", Истина); - Настройки.Вставить("Полное", Истина); - ВариантыОтчетов.Обновить(Настройки); + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + ВариантыОтчетов.ПриЗаполненииВсехПараметровРаботыРасширений(); + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); ПараметрыРасширений = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ПолноеИмяПодсистемы); КонецЕсли; Если ПараметрыРасширений <> Неопределено Тогда diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index 2f963382e..50a70ae94 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выполняется при обновлении конфигурации. @@ -19,9 +27,8 @@ ВерсионируемыеОбъектыТЗ = Новый ТаблицаЗначений; ВерсионируемыеОбъектыТЗ.Колонки.Добавить("ТипОбъекта", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); Для Каждого ТипОбъекта Из ВерсионируемыеОбъекты Цикл - ВерсионируемыеОбъектыТЗ.Добавить(); + ВерсионируемыеОбъектыТЗ.Добавить().ТипОбъекта = ТипОбъекта; КонецЦикла; - ВерсионируемыеОбъектыТЗ.ЗагрузитьКолонку(ВерсионируемыеОбъекты, "ТипОбъекта"); Запрос = Новый Запрос; Запрос.Текст = @@ -165,7 +172,7 @@ КонецФункции -// Включает версионирования для указанного объекта метаданных. +// Включает запись истории изменения для указанного объекта метаданных. // // Параметры: // ИмяОбъекта - Строка - полный путь к объекту метаданных. Например, "Справочник.Номенклатура". @@ -194,7 +201,7 @@ КонецПроцедуры -// Включает версионирования для указанных объектов метаданных. +// Включает запись истории изменения для указанных объектов метаданных. // // Параметры: // Объекты - Соответствие - объекты, для которых надо включить версионирование: @@ -209,6 +216,25 @@ КонецПроцедуры +// Состояние флажка для формы настроек версионирования объекта. +// +// Возвращаемое значение: +// Булево - значение. +// +// Пример: +// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда +// МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); +// ИспользоватьПолнотекстовыйПоиск = МодульВерсионированиеОбъектов.ЗначениеФлажкаХранитьИсторию(); +// Иначе +// Элементы.ГруппаУправлениеВерсионированиемОбъектов.Видимость = Ложь; +// КонецЕсли; +// +Функция ЗначениеФлажкаХранитьИсторию() Экспорт + + Возврат ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов"); + +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -239,11 +265,11 @@ ОбработаноЗаписей = ОбработаноЗаписей + 1; Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'Версионирование'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Версионирование'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, НаборЗаписей.Метаданные(), , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось обновить сведения о версии №%1 объекта ""%2"" по причине: - |%3'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%3'", ОбщегоНазначения.КодОсновногоЯзыка()), Выборка.НомерВерсии, ОбщегоНазначения.ПредметСтрокой(Выборка.Объект), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); @@ -1456,7 +1482,7 @@ Попытка Объект = ПрочитатьXML(ЧтениеFastInfoSet); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Версионирование'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Версионирование'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ТекстСообщенияОбОшибке = НСтр("ru = 'Не удалось перейти на выбранную версию. |Возможная причина: версия объекта была записана в другой версии программы. diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl index a9bbaace4..1102064c3 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает отчет по версиям объекта в режиме сравнения версий. @@ -17,7 +25,7 @@ КонецПроцедуры -// Функция открывает отчет по версии объекта переданной в параметре АдресСериализованногоОбъекта. +// Показывает сохраненную версию объекта. // // Параметры: // Ссылка - ЛюбаяСсылка - ссылка на версионируемый объект; @@ -34,6 +42,65 @@ КонецПроцедуры +// Обработчик события ОбработкаОповещения для формы, на которой требуется отобразить флажок хранения истории изменения. +// +// Параметры: +// ИмяСобытия - Строка - имя события, которое было получено обработчиком события на форме. +// ХранитьИсториюИзменений - Число - реквизит, в который будет помещено значение. +// +// Пример: +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда +// МодульВерсионированиеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВерсионированиеОбъектовКлиент"); +// МодульВерсионированиеОбъектовКлиент.ОбработкаОповещенияИзмененияФлажкаХранитьИсторию( +// ИмяСобытия, +// ХранитьИсториюИзменений); +// КонецЕсли; +// +Процедура ОбработкаОповещенияИзмененияФлажкаХранитьИсторию(Знач ИмяСобытия, ХранитьИсториюИзменений) Экспорт + + Если ИмяСобытия = "ИзменилсяРежимХраненияИсторииИзменений" Тогда + ХранитьИсториюИзменений = ВерсионированиеОбъектовСлужебныйВызовСервера.ЗначениеФлажкаХранитьИсторию(); + КонецЕсли; + +КонецПроцедуры + +// Обработчик события ПриИзменении для флажка, выполняющего переключение режима хранения истории изменений. +// Флажок должен быть связан с реквизитом типа Булево. +// +// Параметры: +// ЗначениеФлажкаХранитьИсториюИзменений - Булево - новое значение флажка, которое требуется обработать. +// +// Пример: +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда +// МодульВерсионированиеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВерсионированиеОбъектовКлиент"); +// МодульВерсионированиеОбъектовКлиент.ПриИзмененииФлажкаХранитьИсторию(ХранитьИсториюИзменений); +// КонецЕсли; +// +Процедура ПриИзмененииФлажкаХранитьИсторию(ЗначениеФлажкаХранитьИсториюИзменений) Экспорт + + ВерсионированиеОбъектовСлужебныйВызовСервера.УстановитьРежимХраненияИсторииИзменений( + ЗначениеФлажкаХранитьИсториюИзменений); + + Оповестить("ИзменилсяРежимХраненияИсторииИзменений"); + +КонецПроцедуры + +// Открывает форму управления версионированием объектов. +// Не забудьте команду, выполняющую вызов процедуры, +// установить зависимой от функциональной опции ИспользоватьВерсионированиеОбъектов. +// +// Пример: +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда +// МодульВерсионированиеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВерсионированиеОбъектовКлиент"); +// МодульВерсионированиеОбъектовКлиент.ПоказатьНастройку(); +// КонецЕсли; +// +Процедура ПоказатьНастройку() Экспорт + + ОткрытьФорму("РегистрСведений.НастройкиВерсионированияОбъектов.ФормаСписка"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -41,9 +108,8 @@ // Открывает отчет о версии или о сравнении версий. // // Параметры: -// Ссылка - Ссылка на объект -// СравниваемыеВерсии - Массив - Содержит массив сравниваемых версий, -// если версия одна, то открывается отчет о версии. +// Ссылка - ЛюбаяСсылка - ссылка на объект; +// СравниваемыеВерсии - Массив - коллекция сравниваемых версий. Если версия одна, то открывается отчет о версии. // Процедура ОткрытьОтчетСравненияВерсий(Ссылка, СравниваемыеВерсии) Экспорт diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl index 30065ac09..ee5b1fe7f 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается для получения версионируемых табличных документов во время записи версии объекта. @@ -49,7 +57,7 @@ КонецПроцедуры -// Дополняет объект реквизитами, хранящимися отдельно от объекта, либо в служебной части самого объекта, +// Дополняет объект реквизитами, хранящимися отдельно от объекта либо в служебной части самого объекта, // не предназначенной для вывода в отчетах. // // Параметры: diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовСлужебныйВызовСервера/Module.bsl new file mode 100644 index 000000000..a8c89dfb1 --- /dev/null +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСлужебныйВызовСервера/Module.bsl @@ -0,0 +1,41 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Устанавливает режим хранения истории изменений +// Выполняет: +// - установку значение в константу ИспользоватьВерсионированиеОбъектов +// - изменяет значение функциональной опции ИспользоватьВерсионированиеОбъектов +// +Функция УстановитьРежимХраненияИсторииИзменений(ХранитьИсториюИзменений) Экспорт + + Если Не Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для совершения операции.'"); + КонецЕсли; + + Попытка + Константы.ИспользоватьВерсионированиеОбъектов.Установить(ХранитьИсториюИзменений); + Исключение + Возврат Ложь; + КонецПопытки; + + Возврат Истина; + +КонецФункции + +// (См. ВерсионированиеОбъектов.ЗначениеФлажкаХранитьИсторию) +// +Функция ЗначениеФлажкаХранитьИсторию() Экспорт + + Возврат ВерсионированиеОбъектов.ЗначениеФлажкаХранитьИсторию(); + +КонецФункции + +#КонецОбласти + diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСлужебныйВызовСервера/ВерсионированиеОбъектовСлужебныйВызовСервера.mdo b/SSL/src/CommonModules/ВерсионированиеОбъектовСлужебныйВызовСервера/ВерсионированиеОбъектовСлужебныйВызовСервера.mdo new file mode 100644 index 000000000..8cfc17952 --- /dev/null +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСлужебныйВызовСервера/ВерсионированиеОбъектовСлужебныйВызовСервера.mdo @@ -0,0 +1,10 @@ + + + ВерсионированиеОбъектовСлужебныйВызовСервера + + ru + Версионирование объектов служебный вызов сервера + + true + true + diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl index 2dfd3de20..ad196e2d0 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Записывает версию объекта (кроме документов) в информационную базу. diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index 7af5cfe8c..9202cce71 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается из обработчиков заполнения документов - взаимодействий и предметов заполнения. @@ -23,8 +31,7 @@ Контакты = Неопределено; - Если ВзаимодействияКлиентСервер.ЯвляетсяКонтактом(ДанныеЗаполнения) - И Не ДанныеЗаполнения.ЭтоГруппа Тогда + Если ЯвляетсяКонтактом(ДанныеЗаполнения) И Не ДанныеЗаполнения.ЭтоГруппа Тогда // На основании контакта Контакты = Новый Массив; Контакты.Добавить(ДанныеЗаполнения); @@ -60,9 +67,26 @@ Если ТипЗнч(Объект) = Тип("ДокументОбъект.ТелефонныйЗвонок") Или ТипЗнч(Объект) = Тип("ДокументОбъект.СообщениеSMS") Тогда - Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") - Или ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда + ТребуетсяОчисткаАдреса = Ложь; + + Если (ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + Или ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) Тогда + ТребуетсяОчисткаАдреса = Истина; + + КонецЕсли; + + Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") + И ДанныеЗаполнения.Свойство("Предмет") + И (ТипЗнч(ДанныеЗаполнения.Предмет) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + Или ТипЗнч(ДанныеЗаполнения.Предмет) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) Тогда + + ТребуетсяОчисткаАдреса = Истина; + + КонецЕсли; + + Если ТребуетсяОчисткаАдреса Тогда + Для Каждого СтрокаКонтакт Из Контакты Цикл Если ТипЗнч(СтрокаКонтакт) = Тип("Структура") Тогда @@ -74,7 +98,7 @@ КонецЕсли; КонецЦикла; - + КонецЕсли; КонецЕсли; @@ -107,7 +131,7 @@ // Получим список взаимодействий у которых нужно изменить предмет. Если ЗначениеЗаполнено(СтарыйПредмет) И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтарыйПредмет) Тогда - МассивЗаменить = ПолучитьВзаимодействияИзЦепочки(СтарыйПредмет, Взаимодействие); + МассивЗаменить = ВзаимодействияИзЦепочки(СтарыйПредмет, Взаимодействие); Иначе МассивЗаменить = Новый Массив; КонецЕсли; @@ -120,7 +144,7 @@ УстановитьПредмет(Элемент, Предмет); Исключение ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при замене предмета у %1: %2'"), Элемент, ПредставлениеОшибки), , , , Отказ); Отказ = Истина; Возврат; @@ -339,13 +363,13 @@ КонецФункции -Функция ПриПолученииЧитаемыхОбъектовОбработчикаОбновленияУчетныхЗаписейЭлектроннойПочты(ЧитаемыеОбъекты) Экспорт +Процедура ПриПолученииЧитаемыхОбъектовОбработчикаОбновленияУчетныхЗаписейЭлектроннойПочты(ЧитаемыеОбъекты) Экспорт ЧитаемыеОбъекты.Добавить("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты"); -КонецФункции +КонецПроцедуры -Функция ПередУстановкойБлокировкиВОбработчикеОбновленияУчетныхЗаписейЭлектроннойПочты(Блокировка) Экспорт +Процедура ПередУстановкойБлокировкиВОбработчикеОбновленияУчетныхЗаписейЭлектроннойПочты(Блокировка) Экспорт Блокировка.Добавить("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты"); -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Шаблоны сообщений. @@ -467,7 +491,7 @@ КонецЕсли; Реквизиты = СтруктураРеквизитовВзаимодействияДляЗаписи(Предмет, Истина); - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Письмо.Ссылка, Реквизиты); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Письмо.Ссылка, Реквизиты); ЗафиксироватьТранзакцию(); @@ -554,7 +578,7 @@ СообщениеSMS.ВзаимодействиеОснование = Неопределено; СообщениеSMS.ТекстСообщения = Сообщение.Текст; - СообщениеSMS.Тема = ВзаимодействияКлиентСервер.ТемаПоТекстуСообщения(Сообщение.Текст); + СообщениеSMS.Тема = ТемаПоТекстуСообщения(Сообщение.Текст); СообщениеSMS.ОтправлятьВТранслите = Сообщение.ДополнительныеПараметры.ПеревестиВТранслит; СообщениеSMS.Комментарий = КомментарийПоНаименованиюШаблона(Сообщение.ДополнительныеПараметры.Наименование); @@ -592,7 +616,7 @@ Предмет = СообщениеSMS.Ссылка; КонецЕсли; Реквизиты = СтруктураРеквизитовВзаимодействияДляЗаписи(Предмет, Истина); - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(СообщениеSMS.Ссылка, Реквизиты); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(СообщениеSMS.Ссылка, Реквизиты); КонецПроцедуры @@ -978,56 +1002,68 @@ КонецПроцедуры +// См. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств. +Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Документ_Встреча"; + Набор.Идентификатор = Новый УникальныйИдентификатор("26c5b310-f6a7-47b0-b85a-6052216965e2"); + + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Документ_ЗапланированноеВзаимодействие"; + Набор.Идентификатор = Новый УникальныйИдентификатор("70425541-23e3-4e5a-8bd3-9587cc949dfa"); + + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Документ_СообщениеSMS"; + Набор.Идентификатор = Новый УникальныйИдентификатор("e9c48775-2727-46e1-bdb8-e9a0a68358a1"); + + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Документ_ТелефонныйЗвонок"; + Набор.Идентификатор = Новый УникальныйИдентификатор("da617a73-992a-42b9-8d20-e65e043c46bc"); + + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Документ_ЭлектронноеПисьмоВходящее"; + Набор.Идентификатор = Новый УникальныйИдентификатор("0467d0fe-1bf6-480d-ae0d-f2e36449d1df"); + + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Документ_ЭлектронноеПисьмоИсходящее"; + Набор.Идентификатор = Новый УникальныйИдентификатор("123329af-4b94-4f47-9d39-e503190487bd"); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции -// Возвращает поля для получения наименования владельца, если такой имеется. +//////////////////////////////////////////////////////////////////////////////// +// Определение типа ссылки + +// Определяет, является ли переданная в функцию ссылка контактом. // // Параметры: -// ИмяТаблицы - Строка - Имя основной таблицы, для которой формируется запрос. +// ОбъектСсылка - Ссылка - для которой выполняется проверка. // // Возвращаемое значение: -// Строка - строка, которая будет вставлена в запрос. +// Булево - истина, если является контактом, ложь в обратном случае. // -Функция ИмяПоляДляНаименованияВладельца(ИмяТаблицы) Экспорт +Функция ЯвляетсяКонтактом(ОбъектСсылка) - МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); - - Для каждого ЭлементОписанияМассива Из МассивОписанияКонтактов Цикл - Если ЭлементОписанияМассива.Имя = ИмяТаблицы И ЭлементОписанияМассива.ЕстьВладелец Тогда - Возврат "СправочникКонтакт.Владелец.Наименование"; - КонецЕсли; - КонецЦикла; - - Возврат """"""; + ОписаниеТиповВозможныхКонтактов = Новый ОписаниеТипов(ТипыКонтактов()); + Возврат ОписаниеТиповВозможныхКонтактов.СодержитТип(ТипЗнч(ОбъектСсылка)); КонецФункции -// Получает взаимодействия из цепочки по предмету взаимодействия. -// -// Параметры: -// Цепочка - Ссылка - предмет взаимодействия для которого получаются взаимодействия. -// Исключать - Ссылка - взаимодействие, которое не должно попасть в результирующий массив. +// Получает описания возможных контактов и формирует из него массив типов. // // Возвращаемое значение: -// Массив - найденные взаимодействия. +// Массив - возможные типы контактов. // -Функция ПолучитьВзаимодействияИзЦепочки(Цепочка, Исключать) Экспорт +Функция ТипыКонтактов() - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ПредметыВзаимодействий.Взаимодействие КАК Ссылка - |ИЗ - | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий - |ГДЕ - | ПредметыВзаимодействий.Предмет = &Предмет - | " + ?(Исключать = Неопределено,""," И ПредметыВзаимодействий.Взаимодействие <> &Исключать "); - - Запрос.УстановитьПараметр("Предмет", Цепочка); - Запрос.УстановитьПараметр("Исключать", Исключать); - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + ОписанияКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); + Результат = Новый Массив; + Для каждого ЭлементМассиваОписания Из ОписанияКонтактов Цикл + Результат.Добавить(ЭлементМассиваОписания.Тип); + КонецЦикла; + Возврат Результат; КонецФункции @@ -1063,7 +1099,10 @@ ДобавитьВариантПоиска(ВсеСпискиПоиска, ЭлементыФормы, "ПоEmail", НСтр("ru = 'По email'"), Адрес); ДобавитьВариантПоиска(ВсеСпискиПоиска, ЭлементыФормы, "ПоДомену", НСтр("ru = 'По доменному имени'"), ДоменныйАдрес); - Если Не ДляАдреснойКниги Тогда + + Если Не ДляАдреснойКниги + И (Параметры.Свойство("ТолькоEmail") + И Не Параметры.ТолькоEmail) Тогда ДобавитьВариантПоиска(ВсеСпискиПоиска, ЭлементыФормы, "ПоТелефону", НСтр("ru = 'По телефону'"), Адрес); КонецЕсли; @@ -1171,13 +1210,15 @@ Возврат Адрес; ИначеЕсли ПустаяСтрока(Адрес) Тогда Возврат Представление; + ИначеЕсли СокрЛП(Представление) = СокрЛП(Адрес) Тогда + Возврат Адрес; КонецЕсли; ВариантыПоиска = Новый СписокЗначений; Представление = ДобавитьКавычкиКСтроке(Представление); Адрес = ДобавитьКавычкиКСтроке(Адрес); - ВариантыПоиска.Добавить(Представление + " ИЛИ " + Адрес); ВариантыПоиска.Добавить(Представление + " И " + Адрес); + ВариантыПоиска.Добавить(Представление + " ИЛИ " + Адрес); Возврат ВариантыПоиска; @@ -2185,7 +2226,7 @@ // Функция СтруктураРеквизитовВзаимодействия(Ссылка) Экспорт - СтруктураВозврата = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); + СтруктураВозврата = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); Запрос = Новый Запрос; Запрос.Текст = " @@ -2253,6 +2294,7 @@ ЗаполнитьЗначенияСвойств(Форма, СтруктураРеквизитов, "Предмет, Рассмотрено, РассмотретьПосле"); КонецПроцедуры + /////////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с взаимодействиями. @@ -2420,23 +2462,19 @@ Возврат Адрес; КонецЕсли; - Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - - МассивСтрокСТелефонами = Новый Массив; - Для Каждого ЭлементМассива Из СтрРазделить(Адрес, ";", Ложь) Цикл - Если ВзаимодействияКлиентСервер.КорректноВведенНомерТелефона(ЭлементМассива) Тогда - МассивСтрокСТелефонами.Добавить(ЭлементМассива); - КонецЕсли; - КонецЦикла; - - Если МассивСтрокСТелефонами.Количество() > 0 Тогда - Возврат СтрСоединить(МассивСтрокСТелефонами, ";"); - КонецЕсли; - - Иначе - + Если ТипКонтактнойИнформации <> Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Возврат Адрес + КонецЕсли; + МассивСтрокСТелефонами = Новый Массив; + Для Каждого ЭлементМассива Из СтрРазделить(Адрес, ";", Ложь) Цикл + Если КорректноВведенНомерТелефона(ЭлементМассива) Тогда + МассивСтрокСТелефонами.Добавить(ЭлементМассива); + КонецЕсли; + КонецЦикла; + + Если МассивСтрокСТелефонами.Количество() > 0 Тогда + Возврат СтрСоединить(МассивСтрокСТелефонами, ";"); КонецЕсли; КонецФункции @@ -2875,7 +2913,8 @@ КонецЕсли; Если Соединение = Неопределено Тогда - Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(Объект.УчетнаяЗапись); + + Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(Объект.УчетнаяЗапись); Попытка @@ -2883,30 +2922,38 @@ ПротоколПодключения = ?(ПустаяСтрока(Профиль.АдресСервераIMAP),ПротоколИнтернетПочты.POP3, ПротоколИнтернетПочты.IMAP); Соединение.Подключиться(Профиль, ПротоколПодключения); + ПротоколПочты = ""; + Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда - ПочтовыеЯщики = Соединение.ПолучитьПочтовыеЯщики(); - Для Каждого ПочтовыйЯщик Из ПочтовыеЯщики Цикл - Если НРег(ПочтовыйЯщик) = "отправленные" - Или НРег(ПочтовыйЯщик) = "sent" Тогда - - Соединение.ТекущийПочтовыйЯщик = ПочтовыйЯщик; - Прервать; - - КонецЕсли; - КонецЦикла; - Иначе - ПротоколПочты = ""; + + Если Не (Объект.УдалятьПослеОтправки + Или УправлениеЭлектроннойПочтой.СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(Профиль.АдресСервераSMTP)) Тогда + + ПочтовыеЯщики = Соединение.ПолучитьПочтовыеЯщики(); + Для Каждого ПочтовыйЯщик Из ПочтовыеЯщики Цикл + Если НРег(ПочтовыйЯщик) = "отправленные" + Или НРег(ПочтовыйЯщик) = "sent" Тогда + + Соединение.ТекущийПочтовыйЯщик = ПочтовыйЯщик; + ПротоколПочты = "Все"; + Прервать; + + КонецЕсли; + КонецЦикла; + + КонецЕсли; + КонецЕсли; Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), Объект.УчетнаяЗапись, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке, Объект.УчетнаяЗапись); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, Объект.УчетнаяЗапись); КонецПопытки; @@ -2914,15 +2961,17 @@ ПараметрыПисьма.Вставить("Соединение", Соединение); - Если ПротоколПочты = "" Или ПротоколПочты = "IMAP" Тогда - Если ПротоколПочты = "IMAP" Тогда - ПараметрыПисьма.Вставить("ПротоколПочты","IMAP"); - КонецЕсли; - ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма); + ПараметрыПисьма.Вставить("ПротоколПочты", ПротоколПочты); + + ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма); + + Если ПротоколПочты = "" Тогда + Объект.ИдентификаторСообщения = ПараметрыПисьма.ИдентификаторСообщения; + ИначеЕсли ПротоколПочты = "IMAP" Тогда + Объект.ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщенияОтправкаIMAP; ИначеЕсли ПротоколПочты = "Все" Тогда - ИдентификаторПисьма = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма); - ПараметрыПисьма.Вставить("ПротоколПочты","IMAP"); - Объект.ИдентификаторСообщенияОтправкаIMAP = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма); + Объект.ИдентификаторСообщения = ПараметрыПисьма.ИдентификаторСообщения; + Объект.ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщенияОтправкаIMAP; КонецЕсли; Возврат ИдентификаторПисьма; @@ -2970,11 +3019,8 @@ Функция ПараметрыПисьмаДляОтправки(Объект) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьКлиентСервер = - ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); - - РасширениеДляФайловПодписи = - МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляФайловПодписи; + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + РасширениеДляФайловПодписи = МодульЭлектроннаяПодпись.ПерсональныеНастройки().РасширениеДляФайловПодписи; Иначе РасширениеДляФайловПодписи = "p7s"; КонецЕсли; @@ -3107,8 +3153,8 @@ Возврат; КонецЕсли; - Представление = ВзаимодействияКлиентСервер.ПредставлениеПисьма(ДанныеИнтернетПочтовогоСообщения.ИнтернетПочтовоеСообщение.Тема, - ДанныеИнтернетПочтовогоСообщения.ДатаПисьма); + Представление = ПредставлениеПисьма(ДанныеИнтернетПочтовогоСообщения.ИнтернетПочтовоеСообщение.Тема, + ДанныеИнтернетПочтовогоСообщения.ДатаПисьма); ИмяФайла = Представление + ".eml"; СтруктураВложение.Вставить("Кодировка", Письмо.Кодировка); @@ -4109,7 +4155,11 @@ // Параметры: // ТекущийОбъект - ДокументОбъект - документ, в котором возникло событие. // -Процедура ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект,Форма) Экспорт +Процедура ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, Форма) Экспорт + + Если Форма.Рассмотрено Тогда + Форма.РассмотретьПосле = Дата(1,1,1); + КонецЕсли; Ссылка = ТекущийОбъект.Ссылка; @@ -4124,7 +4174,7 @@ РассчитыватьРассмотрено = (СтарыеЗначенияРеквизитов.Рассмотрено <> Форма.Рассмотрено) ИЛИ (СтарыеЗначенияРеквизитов.Предмет <> Форма.Предмет И ЗначениеЗаполнено(Форма.Предмет)); - СтруктураДляЗаписи = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); + СтруктураДляЗаписи = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); СтруктураДляЗаписи.Предмет = Форма.Предмет; СтруктураДляЗаписи.Рассмотрено = Форма.Рассмотрено; СтруктураДляЗаписи.РассмотретьПосле = Форма.РассмотретьПосле; @@ -4132,7 +4182,7 @@ // Если в качестве предмета устанавливается само взаимодействие то делать ничего не нужно. Если Форма.Предмет = Ссылка Тогда - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Ссылка, СтруктураДляЗаписи); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); РассчитатьРассмотреноПоКонтактамПриЗаписиИзФормы(ТекущийОбъект, Форма, СтарыеЗначенияРеквизитов); Возврат; КонецЕсли; @@ -4147,17 +4197,17 @@ // У предмета установим в качестве предмета ссылку на самого себя. СтруктураДляЗаписи.Предмет = Форма.Предмет; СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Ссылка, СтруктураДляЗаписи); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); Иначе СтруктураДляЗаписи.Предмет = ПредметПредмета; СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; Форма.Предмет = ПредметПредмета; - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Ссылка, СтруктураДляЗаписи); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); КонецЕсли; Иначе - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Ссылка, СтруктураДляЗаписи); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); КонецЕсли; @@ -4166,7 +4216,7 @@ СтруктураДляЗаписи.Предмет = Ссылка; СтруктураДляЗаписи.РассчитыватьРассмотрено = Истина; Форма.Предмет = Ссылка; - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Ссылка, СтруктураДляЗаписи); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); КонецЕсли; @@ -4177,7 +4227,7 @@ И (Не ЗначениеЗаполнено(Форма.Предмет) ИЛИ ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Форма.Предмет))) Тогда - ВзаимодействияВызовСервера.ЗаменитьПредметВЦепочкеВзаимодействий(СтарыеЗначенияРеквизитов.Предмет, Форма.Предмет, Ссылка); + ЗаменитьПредметВЦепочкеВзаимодействий(СтарыеЗначенияРеквизитов.Предмет, Форма.Предмет, Ссылка); КонецЕсли; @@ -4187,6 +4237,21 @@ КонецПроцедуры +// Заменяет предмет в цепочке взаимодействий. +// +// Параметры: +// Цепочка - Ссылка - предмет взаимодействий, который будет заменен. +// Предмет - Ссылка - предмет, на который будет выполнена замена. +// Исключать - Ссылка - взаимодействие, в котором операция замены выполнена не будет. +// +Процедура ЗаменитьПредметВЦепочкеВзаимодействий(Цепочка, Предмет, Исключать = Неопределено) + + УстановитьПривилегированныйРежим(Истина); + МассивВзаимодействий = ВзаимодействияИзЦепочки(Цепочка, Исключать); + ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(МассивВзаимодействий, Предмет); + +КонецПроцедуры + Процедура РассчитатьРассмотреноПоКонтактамПриЗаписиИзФормы(ТекущийОбъект, Форма, СтарыеЗначенияРеквизитов) Если (НеЗаписыватьКонтакты(ТекущийОбъект.ДополнительныеСвойства) @@ -4207,7 +4272,7 @@ // Форма - УправляемаяФорма - форма в которой произошло событие. // ТекущийОбъект - ДокументОбъект - документ, в котором возникло событие. // -Процедура ПередЗаписьюВзаимодействияИзФормы(Форма,ТекущийОбъект, ИзменилисьКонтакты = Ложь) Экспорт +Процедура ПередЗаписьюВзаимодействияИзФормы(Форма, ТекущийОбъект, ИзменилисьКонтакты = Ложь) Экспорт Если НЕ ИзменилисьКонтакты Тогда @@ -4247,7 +4312,7 @@ // Форма - УправляемаяФорма - форма для которой выполняется процедура. // Настройки - Соответствие - загружаемые настройки. // -Процедура ПриЗагрузкеТипаВзаимодействийИзНастроек(Форма,Настройки) Экспорт +Процедура ПриЗагрузкеТипаВзаимодействийИзНастроек(Форма, Настройки) Экспорт ТипВзаимодействия = Настройки.Получить("ТипВзаимодействия"); Если ТипВзаимодействия <> Неопределено Тогда @@ -4382,7 +4447,6 @@ КонецПроцедуры - // Инициализирует переданную форму списка взаимодействий Форма согласно значениям // функциональных опций. // Параметры: @@ -4410,6 +4474,12 @@ Если Форма.Элементы.Найти("ДеревоВзаимодействийСкопировать") <> Неопределено Тогда Форма.Элементы.ДеревоВзаимодействийСкопировать.Видимость = Ложь; КонецЕсли; + Если Форма.Элементы.Найти("ДеревоВзаимодействийКонтекстноеМенюСкопировать") <> Неопределено Тогда + Форма.Элементы.ДеревоВзаимодействийКонтекстноеМенюСкопировать.Видимость = Ложь; + КонецЕсли; + Если Форма.Элементы.Найти("СписокКонтекстноеМенюСкопировать") <> Неопределено Тогда + Форма.Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Ложь; + КонецЕсли; Если Форма.Команды.Найти("ПредметСписок") <> Неопределено Тогда Форма.Команды.ПредметСписок.Заголовок = НСтр("ru = 'Установить предмет переписки'"); Форма.Команды.ПредметСписок.Подсказка = НСтр("ru = 'Установить предмет переписки'"); @@ -4435,8 +4505,49 @@ КонецПроцедуры +Функция СписокОтборовПоТипуВзаимодействий(ТолькоПочта) Экспорт + + СписокОтборов = Новый СписокЗначений; + + СписокОтборов.Добавить("Все", НСтр("ru = 'Все'")); + СписокОтборов.Добавить("ВсеПисьма", НСтр("ru = 'Все письма'")); + Если Не ТолькоПочта Тогда + СписокОтборов.Добавить("Встречи", НСтр("ru = 'Встречи'")); + СписокОтборов.Добавить("ТелефонныеЗвонки", НСтр("ru = 'Телефонные звонки'")); + СписокОтборов.Добавить("ЗапланированныеВзаимодействия", НСтр("ru = 'Запланированные взаимодействия'")); + СписокОтборов.Добавить("СообщенияSMS", НСтр("ru = 'Сообщения SMS'")); + КонецЕсли; + СписокОтборов.Добавить("ВходящиеПисьма", НСтр("ru = 'Входящие'")); + СписокОтборов.Добавить("ПисьмаЧерновики", НСтр("ru = 'Черновики'")); + СписокОтборов.Добавить("ИсходящиеПисьма", НСтр("ru = 'Исходящие'")); + СписокОтборов.Добавить("Отправленные", НСтр("ru = 'Отправленные'")); + СписокОтборов.Добавить("УдаленныеПисьма", НСтр("ru = 'Удаленные'")); + Если Не ТолькоПочта Тогда + СписокОтборов.Добавить("ИсходящиеЗвонки", НСтр("ru = 'Исходящие звонки'")); + СписокОтборов.Добавить("ВходящиеЗвонки", НСтр("ru = 'Входящие звонки'")); + КонецЕсли; + + Возврат СписокОтборов; + +КонецФункции + +Функция ТипВзаимодействияПоИмениКоманды(ИмяКоманды, ТолькоПочта) Экспорт + + НайденнаяПозиция = СтрНайти(ИмяКоманды, "_"); + Если НайденнаяПозиция = 0 Тогда + Возврат "Все"; + КонецЕсли; + + СтрокаТипВзаимодействия = Прав(ИмяКоманды, СтрДлина(ИмяКоманды) - НайденнаяПозиция); + Если СписокОтборовПоТипуВзаимодействий(ТолькоПочта).НайтиПоЗначению(СтрокаТипВзаимодействия) = Неопределено Тогда + Возврат "Все"; + КонецЕсли; + + Возврат СтрокаТипВзаимодействия; + +КонецФункции ////////////////////////////////////////////////////////////////////////////////// -// Работа с предметами взаимодействий. +// Работа с предметами взаимодействий. // Устанавливает предмет для документа взаимодействия. // @@ -4450,16 +4561,15 @@ // Процедура УстановитьПредмет(Ссылка, Предмет, РассчитыватьРассмотрено = Истина) Экспорт - СтруктураДляЗаписи = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); + СтруктураДляЗаписи = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); СтруктураДляЗаписи.Предмет = Предмет; СтруктураДляЗаписи.РассчитыватьРассмотрено = РассчитыватьРассмотрено; - - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Ссылка, СтруктураДляЗаписи); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////// -// Формирование письма +// Формирование письма // Формирует текст HTML для входящего электронного письма. // @@ -4589,6 +4699,11 @@ ВыборкаОснование = ПолучитьДанныеПисьмаОснования(Выборка.ВзаимодействиеОснование); + ТекстHTML = ВыборкаОснование.ТекстHTML; + Если СтрНайти(ВыборкаОснование.ТекстHTML, "body") = 0 Тогда + ТекстHTML = "" +ВыборкаОснование.ТекстHTML + ""; + КонецЕсли; + ДокументОснованиеHTML = СформироватьДокументHTMLНаОснованииПисьма( Выборка.ВзаимодействиеОснование, ВыборкаОснование.ТипТекста, @@ -4797,7 +4912,7 @@ // Возвращаемое значение: // Строка - строка, из которой удалены символы перевода строки и возврата каретки. // -Функция СодержимоеТегаHTML(Текст, ИмяТега, ВключатьОткрывающийЗакрывающийТег = Ложь, НомерПоПорядку = 1) +Функция СодержимоеТегаHTML(Текст, ИмяТега, ВключатьОткрывающийЗакрывающийТег = Ложь, НомерПоПорядку = 1) Экспорт Результат = Неопределено; @@ -5239,7 +5354,7 @@ Для Каждого ПисьмоВложение Из ТаблицаПисемВложений Цикл НоваяСтрока = ТаблицаВложения.Добавить(); - НоваяСтрока.ИмяФайла = ВзаимодействияКлиентСервер.ПредставлениеПисьма(ПисьмоВложение.Тема, ПисьмоВложение.Дата) + ".eml"; + НоваяСтрока.ИмяФайла = ПредставлениеПисьма(ПисьмоВложение.Тема, ПисьмоВложение.Дата) + ".eml"; НоваяСтрока.ИндексКартинки = 0; НоваяСтрока.ПодписанЭП = Ложь; НоваяСтрока.ИДФайлаЭлектронногоПисьма = ""; @@ -5313,7 +5428,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////////// -// Работа с объектом Документ HTML. +// Работа с объектом Документ HTML. // Получает массив дочерних узлов элемента HTML, содержащих HTML. // @@ -5869,7 +5984,7 @@ УстановитьПривилегированныйРежим(Истина); Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не выполнены настройки отправки SMS.'"),,"Объект"); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не выполнены настройки отправки SMS.'"),,"Объект"); ВзаимодействияКлиентСервер.УстановитьСостояниеИсходящееДокументСообщениеSMS(Документ); Возврат 0; КонецЕсли; @@ -5880,7 +5995,7 @@ ОтразитьРезультатыОтправкиSMSВДокументе(Документ, РезультатОтправки); Если Не ПустаяСтрока(РезультатОтправки.ОписаниеОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатОтправки.ОписаниеОшибки,,"Документ"); + ОбщегоНазначения.СообщитьПользователю(РезультатОтправки.ОписаниеОшибки,,"Документ"); КонецЕсли; Возврат РезультатОтправки.ОтправленныеСообщения.Количество(); @@ -5943,7 +6058,7 @@ Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , - НСтр("ru = 'Не выполнены настройки отправки SMS.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + НСтр("ru = 'Не выполнены настройки отправки SMS.'", ОбщегоНазначения.КодОсновногоЯзыка())); Возврат; КонецЕсли; @@ -6048,7 +6163,7 @@ Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , - НСтр("ru = 'Не выполнены настройки отправки SMS.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + НСтр("ru = 'Не выполнены настройки отправки SMS.'", ОбщегоНазначения.КодОсновногоЯзыка())); Возврат; КонецЕсли; @@ -6132,6 +6247,67 @@ КонецПроцедуры +// Определяет, корректно ли введен номер телефона для сообщения SMS. +// +// Параметры: +// НомерТелефона - Строка - строка с номером телефона. +// +// Возвращаемое значение: +// Булево - Истина, если номер введен правильно, Ложь в обратном случае. +// +Функция КорректноВведенНомерТелефона(НомерТелефона) Экспорт + + СимволыНомера = "+1234567890"; + СимволыРазделители = "()- "; + + ФорматированныйНомер = ""; + Для Позиция = 1 По СтрДлина(НомерТелефона) Цикл + Символ = Сред(НомерТелефона, Позиция, 1); + Если Символ = "+" И Не ПустаяСтрока(ФорматированныйНомер) Тогда + Возврат Ложь; + КонецЕсли; + Если СтрНайти(СимволыНомера, Символ) > 0 Тогда + ФорматированныйНомер = ФорматированныйНомер + Символ; + ИначеЕсли СтрНайти(СимволыРазделители, Символ) = 0 Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Если ПустаяСтрока(ФорматированныйНомер) Тогда + Возврат Ложь; + КонецЕсли; + + Если СтрДлина(ФорматированныйНомер) < 3 Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Формирует тему по тексту сообщения на основании первых трех слов. +// +// Параметры: +// ТекстСообщения - Строка - текст сообщения, на основании которого формируется тема. +// +// Возвращаемое значение: +// Строка - сформированная тема сообщения. +// +Функция ТемаПоТекстуСообщения(ТекстСообщения) Экспорт + + МассивСтрок = СтрРазделить(ТекстСообщения," ", Ложь); + Тема = ""; + Для Инд = 0 По МассивСтрок.Количество() - 1 Цикл + Если Инд > 2 Тогда + Прервать; + КонецЕсли; + Тема = Тема + МассивСтрок[Инд] + " "; + КонецЦикла; + + Возврат Лев(Тема, СтрДлина(Тема) - 1); + +КонецФункции + //////////////////////////////////////////////////////////////////// // Работа с папками электронных писем. @@ -7585,46 +7761,46 @@ // Процедура УстановитьПризнакРассмотрено(МассивВзаимодействий, ЗначениеПризнака, ЕстьИзменения) Экспорт - Если МассивВзаимодействий.Количество() > 0 Тогда - - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | ПредметыПапкиВзаимодействий.Взаимодействие, - | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма КАК Папка, - | ПредметыПапкиВзаимодействий.Предмет - |ИЗ - | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - |ГДЕ - | ПредметыПапкиВзаимодействий.Рассмотрено <> &ЗначениеПризнака - | И ПредметыПапкиВзаимодействий.Взаимодействие В(&МассивВзаимодействий)"; - - Запрос.УстановитьПараметр("МассивВзаимодействий", МассивВзаимодействий); - Запрос.УстановитьПараметр("ЗначениеПризнака", ЗначениеПризнака); - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - СтруктураДляЗаписи = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); - СтруктураДляЗаписи.Рассмотрено = ЗначениеПризнака; - СтруктураДляЗаписи.РассчитыватьРассмотрено = Ложь; - - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Выборка.Взаимодействие, СтруктураДляЗаписи); - ЕстьИзменения = Истина; - - КонецЦикла; - - Выборка.Сбросить(); - РассчитатьРассмотреноПоПапкам(ТаблицаДанныхДляРасчетаРассмотрено(Выборка, "Папка")); - - Выборка.Сбросить(); - РассчитатьРассмотреноПоПредметам(ТаблицаДанныхДляРасчетаРассмотрено(Выборка, "Предмет")); - - Выборка.Сбросить(); - РассчитатьРассмотреноПоКонтактам(Выборка); - + Если МассивВзаимодействий.Количество() = 0 Тогда + Возврат; КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ПредметыПапкиВзаимодействий.Взаимодействие, + | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма КАК Папка, + | ПредметыПапкиВзаимодействий.Предмет + |ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + |ГДЕ + | ПредметыПапкиВзаимодействий.Рассмотрено <> &ЗначениеПризнака + | И ПредметыПапкиВзаимодействий.Взаимодействие В(&МассивВзаимодействий)"; + + Запрос.УстановитьПараметр("МассивВзаимодействий", МассивВзаимодействий); + Запрос.УстановитьПараметр("ЗначениеПризнака", ЗначениеПризнака); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + СтруктураДляЗаписи = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); + СтруктураДляЗаписи.Рассмотрено = ЗначениеПризнака; + СтруктураДляЗаписи.РассчитыватьРассмотрено = Ложь; + + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Выборка.Взаимодействие, СтруктураДляЗаписи); + ЕстьИзменения = Истина; + + КонецЦикла; + + Выборка.Сбросить(); + РассчитатьРассмотреноПоПапкам(ТаблицаДанныхДляРасчетаРассмотрено(Выборка, "Папка")); + + Выборка.Сбросить(); + РассчитатьРассмотреноПоПредметам(ТаблицаДанныхДляРасчетаРассмотрено(Выборка, "Предмет")); + + Выборка.Сбросить(); + РассчитатьРассмотреноПоКонтактам(Выборка); КонецПроцедуры @@ -7847,7 +8023,7 @@ НаборЗаписей.Отбор.Взаимодействие.Установить(ДокументОбъект.Ссылка); Таблица = Новый ТаблицаЗначений; - ОписаниеТиповКонтактов = Новый ОписаниеТипов(ВзаимодействияКлиентСервер.ТипыКонтактов()); + ОписаниеТиповКонтактов = Новый ОписаниеТипов(ТипыКонтактов()); Таблица.Колонки.Добавить("Контакт", ОписаниеТиповКонтактов); Таблица.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100, ДопустимаяДлина.Переменная))); @@ -8238,41 +8414,48 @@ КонецФункции -Процедура ЗаполнитьПодменюСтатус(ГруппаПодменю , Форма) Экспорт +Процедура ЗаполнитьПодменюСтатус(ГруппаПодменю, Форма) Экспорт Если Не ПолучитьФункциональнуюОпцию("ИспользоватьПризнакРассмотрено") Тогда - Возврат; - КонецЕсли; - СписокСтатусов = ВзаимодействияКлиентСервер.СписокСтатусов(); - - Для Инд = 0 По СписокСтатусов.Количество() - 1 Цикл + Для каждого Статус Из СписокСтатусов() Цикл - Представление = СписокСтатусов.Получить(Инд).Представление; - Значение = СписокСтатусов.Получить(Инд).Значение; + Значение = Статус.Значение; НоваяКоманда = Форма.Команды.Добавить("УстановитьОтборСтатус_" + Значение); НоваяКоманда.Действие = "Подключаемый_ИзменитьОтборСтатус"; - ЭлементКнопкаПодменю = Форма.Элементы.Добавить("УстановитьОтборСтатус_" + Значение, Тип("КнопкаФормы"), ГруппаПодменю); + + ЭлементКнопкаПодменю = Форма.Элементы.Добавить("УстановитьОтборСтатус_" + Значение, Тип("КнопкаФормы"), + ГруппаПодменю); ЭлементКнопкаПодменю.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; ЭлементКнопкаПодменю.ИмяКоманды = НоваяКоманда.Имя; - ЭлементКнопкаПодменю.Заголовок = Представление; + ЭлементКнопкаПодменю.Заголовок = Статус.Представление; ЭлементКнопкаПодменю.ТолькоВоВсехДействиях = Истина; КонецЦикла; КонецПроцедуры -Процедура ЗаполнитьПодменюПоТипуВзаимодействия(ГруппаПодменю , Форма) Экспорт +Функция СписокСтатусов() Экспорт - СписокОтборов = ВзаимодействияКлиентСервер.СписокОтборовПоТипуВзаимодействий(Форма.ТолькоПочта); + СписокСтатусов = Новый СписокЗначений; + СписокСтатусов.Добавить("Все", НСтр("ru = 'Все'")); + СписокСтатусов.Добавить("КРассмотрению", НСтр("ru = 'К рассмотрению'")); + СписокСтатусов.Добавить("Отложенные", НСтр("ru = 'Отложенные'")); + СписокСтатусов.Добавить("Рассмотренные", НСтр("ru = 'Рассмотренные'")); - Для Инд = 0 По СписокОтборов.Количество() - 1 Цикл + Возврат СписокСтатусов; + +КонецФункции + +Процедура ЗаполнитьПодменюПоТипуВзаимодействия(ГруппаПодменю, Форма) Экспорт + + СписокОтборов = СписокОтборовПоТипуВзаимодействий(Форма.ТолькоПочта); + Для каждого Отбор Из СписокОтборов Цикл - Представление = СписокОтборов.Получить(Инд).Представление; - Значение = СписокОтборов.Получить(Инд).Значение; + Значение = Отбор.Значение; ИмяКоманды = "УстановитьОтборТипВзаимодействия_" + Значение; НайденнаяКоманда = Форма.Команды.Найти(ИмяКоманды); @@ -8287,7 +8470,7 @@ ЭлементКнопкаПодменю = Форма.Элементы.Добавить("УстановитьОтборТипВзаимодействия_" + ГруппаПодменю.Имя + "_"+ Значение, Тип("КнопкаФормы"), ГруппаПодменю); ЭлементКнопкаПодменю.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; ЭлементКнопкаПодменю.ИмяКоманды = НоваяКоманда.Имя; - ЭлементКнопкаПодменю.Заголовок = Представление; + ЭлементКнопкаПодменю.Заголовок = Отбор.Представление; ЭлементКнопкаПодменю.ТолькоВоВсехДействиях = Истина; КонецЦикла; @@ -8297,7 +8480,7 @@ Процедура ОбработатьПодменюОтборПоТипуВзаимодействий(Форма) Экспорт ШаблонЗаголовка = НСтр("ru = 'Тип взаимодействий: %1'"); - ПредставлениеТипа = ВзаимодействияКлиентСервер.СписокОтборовПоТипуВзаимодействий(Форма.ТолькоПочта).НайтиПоЗначению(Форма.ТипВзаимодействия).Представление; + ПредставлениеТипа = СписокОтборовПоТипуВзаимодействий(Форма.ТолькоПочта).НайтиПоЗначению(Форма.ТипВзаимодействия).Представление; Форма.Элементы.СписокТипВзаимодействия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеТипа); Для Каждого ЭлементПодменю Из Форма.Элементы.СписокТипВзаимодействия.ПодчиненныеЭлементы Цикл Если ЭлементПодменю.Имя = ("УстановитьОтборТипВзаимодействия_СписокТипВзаимодействия_" + Форма.ТипВзаимодействия) Тогда @@ -8364,10 +8547,8 @@ Функция РасширениеДляФайловПодписи() Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьКлиентСервер = - ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); - - Возврат МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляФайловПодписи; + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + Возврат МодульЭлектроннаяПодпись.ПерсональныеНастройки().РасширениеДляФайловПодписи; Иначе Возврат "p7s"; КонецЕсли; @@ -8421,6 +8602,68 @@ КонецФункции +// Возвращает поля для получения наименования владельца, если такой имеется. +// +// Параметры: +// ИмяТаблицы - Строка - Имя основной таблицы, для которой формируется запрос. +// +// Возвращаемое значение: +// Строка - строка, которая будет вставлена в запрос. +// +Функция ИмяПоляДляНаименованияВладельца(ИмяТаблицы) Экспорт + + МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов(); + + Для каждого ЭлементОписанияМассива Из МассивОписанияКонтактов Цикл + Если ЭлементОписанияМассива.Имя = ИмяТаблицы И ЭлементОписанияМассива.ЕстьВладелец Тогда + Возврат "СправочникКонтакт.Владелец.Наименование"; + КонецЕсли; + КонецЦикла; + + Возврат """"""; + +КонецФункции + +// Получает взаимодействия из цепочки по предмету взаимодействия. +// +// Параметры: +// Цепочка - Ссылка - предмет взаимодействия для которого получаются взаимодействия. +// Исключать - Ссылка - взаимодействие, которое не должно попасть в результирующий массив. +// +// Возвращаемое значение: +// Массив - найденные взаимодействия. +// +Функция ВзаимодействияИзЦепочки(Цепочка, Исключать) + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ПредметыВзаимодействий.Взаимодействие КАК Ссылка + |ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий + |ГДЕ + | ПредметыВзаимодействий.Предмет = &Предмет + | " + ?(Исключать = Неопределено,""," И ПредметыВзаимодействий.Взаимодействие <> &Исключать "); + + Запрос.УстановитьПараметр("Предмет", Цепочка); + Запрос.УстановитьПараметр("Исключать", Исключать); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + +Функция КартинкаСтраницыПодписи(ПоказыватьКартинку) Экспорт + + Возврат ?(ПоказыватьКартинку, БиблиотекаКартинок.КоличествоРассмотрено, Новый Картинка); + +КонецФункции + +Функция ПредставлениеПисьма(ТемаПисьма, ДатаПисьма) Экспорт + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 от %2'"), + ВзаимодействияКлиентСервер.ТемаВзаимодействия(ТемаПисьма), Формат(ДатаПисьма, "ДЛФ=D")); + +КонецФункции + /////////////////////////////////////////////////////////////////////////////////// // Шаблоны сообщений @@ -8439,18 +8682,14 @@ // Функция СтруктураРеквизитовВзаимодействияДляЗаписи(Предмет, Рассмотрено) - СтруктураВозврата = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); - + СтруктураВозврата = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); Если Предмет <> Неопределено Тогда СтруктураВозврата.Предмет = Предмет; КонецЕсли; - Если Рассмотрено <> Неопределено Тогда СтруктураВозврата.Рассмотрено = Рассмотрено; КонецЕсли; - СтруктураВозврата.РассчитыватьРассмотрено = Истина; - Возврат СтруктураВозврата; КонецФункции diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index f724388da..1f54a2911 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -162,7 +170,7 @@ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации, | Справочник." + ИмяМетаданныхКонтакта + " КАК Контакты |ГДЕ - | ВидыКонтактнойИнформации.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.Справочник" + ИмяМетаданныхКонтакта + ") + | ВидыКонтактнойИнформации.Родитель = &ГруппаВидаКонтактнойИнформации | И Контакты.Ссылка = &Контакт | И ВидыКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) |; @@ -177,8 +185,10 @@ | КонтактВидыКИ КАК КонтактВидыКИ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ИмяМетаданныхКонтакта + ".КонтактнаяИнформация КАК КонтактнаяИнформация | ПО (КонтактнаяИнформация.Ссылка = КонтактВидыКИ.Контакт) - | И (КонтактнаяИнформация.Вид = КонтактВидыКИ.Вид)" + | И (КонтактнаяИнформация.Вид = КонтактВидыКИ.Вид)"; + ГруппаВидаКонтактнойИнформации = УправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени("Справочник" + ИмяМетаданныхКонтакта); + Запрос.УстановитьПараметр("ГруппаВидаКонтактнойИнформации", ГруппаВидаКонтактнойИнформации); Иначе Запрос.Текст = @@ -196,6 +206,7 @@ КонецЕсли; Запрос.УстановитьПараметр("Контакт", Контакт); + Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Количество() = 0 Тогда Возврат Новый Массив; @@ -222,87 +233,15 @@ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение и отправка электронной почты пользователя'"); - ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне( - "ВзаимодействияВызовСервера.ОтправитьЗагрузитьПочтуПользователя", - ПараметрыПроцедуры, - ПараметрыВыполнения); - + ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне("УправлениеЭлектроннойПочтой.ОтправитьЗагрузитьПочтуПользователя", + ПараметрыПроцедуры, ПараметрыВыполнения); Возврат ДлительнаяОперация; КонецФункции -// Выполняет отправку писем пользователя и -// получение электронной почты по доступным для пользователя учетным записям. -// -// Возвращаемое значение: -// Структура -// Получено - Число - в данный параметр будет возвращено количество полученных писем. -// ДоступноУчетныхЗаписей - Число - в данный параметр будет возвращено количество доступных пользователю учетных -// записей. -// ЕстьОшибки - Булево - признак наличия ошибок при получении писем. -// -Функция ОтправитьЗагрузитьПочтуПользователя(ПараметрыВыгрузки, АдресХранилища) Экспорт - - ПолученоПисем = 0; - ДоступноУчетныхЗаписей = 0; - ЕстьОшибки = Ложь; - - УправлениеЭлектроннойПочтой.ОтправитьПочтуПользователя(); - УправлениеЭлектроннойПочтой.ЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки); - - СтруктураВозврата = Новый Структура; - СтруктураВозврата.Вставить("ПолученоПисем", ПолученоПисем); - СтруктураВозврата.Вставить("ДоступноУчетныхЗаписей", ДоступноУчетныхЗаписей); - СтруктураВозврата.Вставить("ЕстьОшибки", ЕстьОшибки); - - ПоместитьВоВременноеХранилище(СтруктураВозврата, АдресХранилища); - -КонецФункции - -/////////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с взаимодействиями. - -// Получает данные выбора для документов взаимодействия. -Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка, ИмяДокумента) Экспорт - - СтандартнаяОбработка = Ложь; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 50 РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | ДокументВзаимодействий.Ссылка КАК Ссылка - |ИЗ - | Документ." + ИмяДокумента + " КАК ДокументВзаимодействий - |ГДЕ - | ДокументВзаимодействий.Тема ПОДОБНО &СтрокаПоиска - | ИЛИ ДокументВзаимодействий.Номер ПОДОБНО &СтрокаПоиска"; - - Запрос.УстановитьПараметр("СтрокаПоиска", Параметры.СтрокаПоиска + "%"); - - ДанныеВыбора = Новый СписокЗначений; - ДанныеВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Прочее -// Заменяет предмет в цепочке взаимодействий. -// -// Параметры: -// Цепочка - Ссылка - предмет взаимодействий который будет заменен. -// Предмет - Ссылка - предмет, на который будет выполнена замена. -// Исключать - Ссылка - взаимодействие, в котором операция замены выполнена не будет. -// -Процедура ЗаменитьПредметВЦепочкеВзаимодействий(Цепочка, Предмет, Исключать = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МассивВзаимодействий = Взаимодействия.ПолучитьВзаимодействияИзЦепочки(Цепочка, Исключать); - - УстановитьПредметДляМассиваВзаимодействий(МассивВзаимодействий, Предмет); - -КонецПроцедуры - // Устанавливает предмет для массива взаимодействий. // // Параметры: @@ -367,98 +306,10 @@ // Процедура УстановитьПапкуЭлектронногоПисьма(Ссылка, Папка, РассчитыватьРассмотрено = Истина) Экспорт - СтруктураДляЗаписи = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); + СтруктураДляЗаписи = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); СтруктураДляЗаписи.Папка = Папка; СтруктураДляЗаписи.РассчитыватьРассмотрено = РассчитыватьРассмотрено; - - ЗаписьРегистрРеквизитыВзаимодействия(Ссылка, СтруктураДляЗаписи); - -КонецПроцедуры - -// Устанавливает папку, предмет и реквизиты рассмотрения для взаимодействий. -// -// Параметры: -// Ссылка - ДокументСсылка.ЭлектронноеПисьмоВходящее, -// ДокументСсылка.ЭлектронноеПисьмоИсходящее, -// ДокументСсылка.Встреча, -// ДокументСсылка.ЗапланированноеВзаимодействие, -// ДокументСсылка.ТелефонныйЗвонок - взаимодействие для которого будут установлены папка и предмет. -// Реквизиты - Структура - содержит данные реквизитов взаимодействия, которые хранятся в регистре. -// НаборЗаписей - РегистрСведений.ПредметыПапкиВзаимодействий.НаборЗаписей - набор записей регистра, если он уже создан -// на момент вызова процедуры. -// -Процедура ЗаписьРегистрРеквизитыВзаимодействия(Взаимодействие, Реквизиты, НаборЗаписей = Неопределено) Экспорт - - Папка = Реквизиты.Папка; - Предмет = Реквизиты.Предмет; - Рассмотрено = Реквизиты.Рассмотрено; - РассмотретьПосле = Реквизиты.РассмотретьПосле; - РассчитыватьРассмотрено = Реквизиты.РассчитыватьРассмотрено; - - СоздаватьИЗаписывать = (НаборЗаписей = Неопределено); - - Если Папка = Неопределено И Предмет = Неопределено И Рассмотрено = Неопределено - И РассмотретьПосле = Неопределено Тогда - - Возврат; - - ИначеЕсли Папка = Неопределено ИЛИ Предмет = Неопределено ИЛИ Рассмотрено = Неопределено - ИЛИ РассмотретьПосле = Неопределено Тогда - - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | ПредметыПапкиВзаимодействий.Предмет, - | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма, - | ПредметыПапкиВзаимодействий.Рассмотрено, - | ПредметыПапкиВзаимодействий.РассмотретьПосле - |ИЗ - | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - |ГДЕ - | ПредметыПапкиВзаимодействий.Взаимодействие = &Взаимодействие"; - - Запрос.УстановитьПараметр("Взаимодействие",Взаимодействие); - - Результат = Запрос.Выполнить(); - Если НЕ Результат.Пустой() Тогда - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - - Если Папка = Неопределено Тогда - Папка = Выборка.ПапкаЭлектронногоПисьма; - КонецЕсли; - - Если Предмет = Неопределено Тогда - Предмет = Выборка.Предмет; - КонецЕсли; - - Если Рассмотрено = Неопределено Тогда - Рассмотрено = Выборка.Рассмотрено; - КонецЕсли; - - Если РассмотретьПосле = Неопределено Тогда - РассмотретьПосле = Выборка.РассмотретьПосле; - КонецЕсли; - - КонецЕсли; - КонецЕсли; - - Если СоздаватьИЗаписывать Тогда - НаборЗаписей = РегистрыСведений.ПредметыПапкиВзаимодействий.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Взаимодействие.Установить(Взаимодействие); - КонецЕсли; - Запись = НаборЗаписей.Добавить(); - Запись.Взаимодействие = Взаимодействие; - Запись.Предмет = Предмет; - Запись.ПапкаЭлектронногоПисьма = Папка; - Запись.Рассмотрено = Рассмотрено; - Запись.РассмотретьПосле = РассмотретьПосле; - НаборЗаписей.ДополнительныеСвойства.Вставить("РассчитыватьРассмотрено", РассчитыватьРассмотрено); - - Если СоздаватьИЗаписывать Тогда - НаборЗаписей.Записать(); - КонецЕсли; + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Ссылка, СтруктураДляЗаписи); КонецПроцедуры @@ -482,14 +333,15 @@ ДвоичныеДанные = ДанныеПисьма.ИнтернетПочтовоеСообщение.ПолучитьИсходныеДанные(); ДанныеФайла.СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); - ДанныеФайла.Наименование = ВзаимодействияКлиентСервер.ПредставлениеПисьма(ДанныеПисьма.ИнтернетПочтовоеСообщение.Тема, - ДанныеПисьма.ДатаПисьма); + ДанныеФайла.Наименование = Взаимодействия.ПредставлениеПисьма(ДанныеПисьма.ИнтернетПочтовоеСообщение.Тема, + ДанныеПисьма.ДатаПисьма); - ДанныеФайла.Расширение = "eml"; + ДанныеФайла.Расширение = "eml"; ДанныеФайла.ИмяФайла = ДанныеФайла.Наименование + "." + ДанныеФайла.Расширение; ДанныеФайла.Размер = ДвоичныеДанные.Размер(); ПапкаДляСохранитьКак = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПапкаДляСохранитьКак"); ДанныеФайла.Вставить("ПапкаДляСохранитьКак", ПапкаДляСохранитьКак); + ДанныеФайла.ДатаМодификацииУниверсальная = ТекущаяДатаСеанса(); КонецЕсли; @@ -504,7 +356,6 @@ КонецФункции - Функция СтруктураДанныхФайла() СтруктураДанныхФайла = Новый Структура; @@ -525,5 +376,4 @@ КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index 3e4c301ed..e60280584 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму нового документа "Сообщение SMS" @@ -500,7 +508,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБЩИЕ ОБРАБОТЧИКИ СОБЫТИЙ ДОКУМЕНТОВ ВЗАИМОДЕЙСТВИЙ +// Общие обработчики событий документов взаимодействий // Вызывает форму выбора контакта и обрабатывает результат выбора. // @@ -515,10 +523,7 @@ // ЗаменятьПустыеАдресИПредставление, // ДляФормыУточненияКонтактов. // -// Возвращаемое значение: -// Булево - истина, если выбор был сделан, ложь в обратном случае. -// -Функция ВыбратьКонтакт(Предмет, Адрес, Представление, Контакт, Параметры) Экспорт +Процедура ВыбратьКонтакт(Предмет, Адрес, Представление, Контакт, Параметры) Экспорт ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("Предмет", Предмет); @@ -533,7 +538,7 @@ ОткрытьФорму("ОбщаяФорма.ВыборКонтакта", ПараметрыОткрытия); -КонецФункции +КонецПроцедуры // Обработка выбора поля "рассмотреть после" в документах взаимодействиях. // @@ -631,7 +636,7 @@ Если ДанныеСобытия.Href <> Неопределено Тогда СтандартнаяОбработка = ЛОЖЬ; - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(ДанныеСобытия.Href); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(ДанныеСобытия.Href); КонецЕсли; @@ -650,7 +655,7 @@ Отказ = Истина; ТекстСообщения= НСтр("ru = 'Дата актуальности отправки меньше чем дата отправки.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.ДатаАктуальностиОтправки"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.ДатаАктуальностиОтправки"); КонецЕсли; @@ -659,7 +664,7 @@ Отказ = Истина; ТекстСообщения= НСтр("ru = 'Указанная дата актуальности меньше текущей даты, такое сообщение никогда не будет отправлено'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.ДатаАктуальностиОтправки"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.ДатаАктуальностиОтправки"); КонецЕсли; @@ -747,5 +752,22 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Определение типа ссылки + +// Определяет, является ли переданная в функцию ссылка взаимодействием. +// +// Параметры: +// ОбъектСсылка - Ссылка - для которой, необходимо выполнить проверку. +// +// Возвращаемое значение: +// Булево - Истина, если переданная ссылка является взаимодействием. +// +Функция ЯвляетсяЭлектроннымПисьмом(ОбъектСсылка) Экспорт + + Возврат ТипЗнч(ОбъектСсылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + ИЛИ ТипЗнч(ОбъектСсылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"); + +КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl index 6f2b71fda..17c8c492d 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index 34e5b1e77..2f6f72f07 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает новое описание контакта взаимодействий. @@ -103,21 +111,6 @@ //////////////////////////////////////////////////////////////////////////////// // Определение типа ссылки -// Определяет, является ли переданная в функцию ссылка контактом. -// -// Параметры: -// ОбъектСсылка - Ссылка - для которой выполняется проверка. -// -// Возвращаемое значение: -// Булево - истина, если является контактом, ложь в обратном случае. -// -Функция ЯвляетсяКонтактом(ОбъектСсылка) Экспорт - - ОписаниеТиповВозможныхКонтактов = Новый ОписаниеТипов(ТипыКонтактов()); - Возврат ОписаниеТиповВозможныхКонтактов.СодержитТип(ТипЗнч(ОбъектСсылка)); - -КонецФункции - // Определяет, является ли переданная в функцию ссылка взаимодействием. // // Параметры: @@ -162,21 +155,6 @@ КонецФункции -// Определяет, является ли переданная в функцию ссылка взаимодействием. -// -// Параметры: -// ОбъектСсылка - Ссылка - для которой необходимо выполняется проверка. -// -// Возвращаемое значение: -// Булево - истина, если переданная ссылка является взаимодействием. -// -Функция ЯвляетсяЭлектроннымПисьмом(ОбъектСсылка) Экспорт - - Возврат ТипЗнч(ОбъектСсылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") - ИЛИ ТипЗнч(ОбъектСсылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"); - -КонецФункции - // Проверяет, является ли переданная ссылка предметом взаимодействий. // // Параметры: @@ -212,8 +190,7 @@ Функция ЭтоФайлПисьмо(ИмяФайла) Экспорт МассивРасширенийФайла = МассивРасширенийФайлаПисьма(); - РасширениеФайла = РасширениеФайла(ИмяФайла); - + РасширениеФайла = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла); Возврат (МассивРасширенийФайла.Найти(РасширениеФайла) <> Неопределено); КонецФункции @@ -235,67 +212,6 @@ КонецПроцедуры -// Определяет, корректно ли введен номер телефона для сообщения SMS. -// -// Параметры: -// НомерТелефона - Строка - строка с номером телефона. -// -// Возвращаемое значение: -// Булево - Истина, если номер введен правильно, Ложь в обратном случае. -// -Функция КорректноВведенНомерТелефона(НомерТелефона) Экспорт - - СимволыНомера = "+1234567890"; - СимволыРазделители = "()- "; - - ФорматированныйНомер = ""; - Для Позиция = 1 По СтрДлина(НомерТелефона) Цикл - Символ = Сред(НомерТелефона, Позиция, 1); - Если Символ = "+" И Не ПустаяСтрока(ФорматированныйНомер) Тогда - Возврат Ложь; - КонецЕсли; - Если СтрНайти(СимволыНомера, Символ) > 0 Тогда - ФорматированныйНомер = ФорматированныйНомер + Символ; - ИначеЕсли СтрНайти(СимволыРазделители, Символ) = 0 Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Если ПустаяСтрока(ФорматированныйНомер) Тогда - Возврат Ложь; - КонецЕсли; - - Если СтрДлина(ФорматированныйНомер) < 3 Тогда - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Формирует тему по тексту сообщения на основании первых трех слов. -// -// Параметры: -// ТекстСообщения - Строка - текст сообщения, на основании которого формируется тема. -// -// Возвращаемое значение: -// Строка - сформированная тема сообщения. -// -Функция ТемаПоТекстуСообщения(ТекстСообщения) Экспорт - - МассивСтрок = СтрРазделить(ТекстСообщения," ", Ложь); - Тема = ""; - Для Инд = 0 По МассивСтрок.Количество() - 1 Цикл - Если Инд > 2 Тогда - Прервать; - КонецЕсли; - Тема = Тема + МассивСтрок[Инд] + " "; - КонецЦикла; - - Возврат Лев(Тема, СтрДлина(Тема) - 1); - -КонецФункции - // Формирует информационную строку о количестве сообщений и оставшихся символах. // // Параметры: @@ -317,85 +233,6 @@ КонецФункции -// Функция возвращает таблицу имен кодировок. -// -// Параметры: -// НЕТ -// -// Возвращаемое значение: -// Таблица значений -// -Функция СписокКодировок() Экспорт - - СписокКодировок = Новый СписокЗначений; - - СписокКодировок.Добавить("ibm852", НСтр("ru = 'ibm852 (Центральноевропейская DOS)'")); - СписокКодировок.Добавить("ibm866", НСтр("ru = 'ibm866 (Кириллица DOS)'")); - СписокКодировок.Добавить("iso-8859-1", НСтр("ru = 'iso-8859-1 (Западноевропейская ISO)'")); - СписокКодировок.Добавить("iso-8859-2", НСтр("ru = 'iso-8859-2 (Центральноевропейская ISO)'")); - СписокКодировок.Добавить("iso-8859-3", НСтр("ru = 'iso-8859-3 (Латиница 3 ISO)'")); - СписокКодировок.Добавить("iso-8859-4", НСтр("ru = 'iso-8859-4 (Балтийская ISO)'")); - СписокКодировок.Добавить("iso-8859-5", НСтр("ru = 'iso-8859-5 (Кириллица ISO)'")); - СписокКодировок.Добавить("iso-8859-7", НСтр("ru = 'iso-8859-7 (Греческая ISO)'")); - СписокКодировок.Добавить("iso-8859-9", НСтр("ru = 'iso-8859-9 (Турецкая ISO)'")); - СписокКодировок.Добавить("iso-8859-15", НСтр("ru = 'iso-8859-15 (Латиница 9 ISO)'")); - СписокКодировок.Добавить("koi8-r", НСтр("ru = 'koi8-r (Кириллица KOI8-R)'")); - СписокКодировок.Добавить("koi8-u", НСтр("ru = 'koi8-u (Кириллица KOI8-U)'")); - СписокКодировок.Добавить("us-ascii", НСтр("ru = 'us-ascii США'")); - СписокКодировок.Добавить("utf-8", НСтр("ru = 'utf-8 (Юникод UTF-8)'")); - СписокКодировок.Добавить("windows-1250", НСтр("ru = 'windows-1250 (Центральноевропейская Windows)'")); - СписокКодировок.Добавить("windows-1251", НСтр("ru = 'windows-1251 (Кириллица Windows)'")); - СписокКодировок.Добавить("windows-1252", НСтр("ru = 'windows-1252 (Западноевропейская Windows)'")); - СписокКодировок.Добавить("windows-1253", НСтр("ru = 'windows-1253 (Греческая Windows)'")); - СписокКодировок.Добавить("windows-1254", НСтр("ru = 'windows-1254 (Турецкая Windows)'")); - СписокКодировок.Добавить("windows-1257", НСтр("ru = 'windows-1257 (Балтийская Windows)'")); - - Возврат СписокКодировок; - -КонецФункции - -// Получает каталог и имя файла для переданного полного имени файла. -// -// Параметры: -// ПолноеИмяФайла - Строка - полное имя файла, из которого будут получены имя каталога и имя файла. -// ИмяКаталога - Строка - в данную переменную будет помещено полученное имя каталога. -// ИмяФайла - Строка - в данную переменную будет помещено полученное имя файла. -// -Процедура ПолучитьКаталогИИмяФайла(Знач ПолноеИмяФайла, ИмяКаталога, ИмяФайла) Экспорт - - ИмяФайла = ПолноеИмяФайла; - ИмяКаталога = ""; - - Пока Истина Цикл - - Позиция = Макс(СтрНайти(ИмяФайла, "\"), СтрНайти(ИмяФайла, "/")); - Если Позиция = 0 Тогда - Возврат; - КонецЕсли; - - ИмяКаталога = ИмяКаталога + Лев(ИмяФайла, Позиция); - ИмяФайла = Сред(ИмяФайла, Позиция+1); - - КонецЦикла; - -КонецПроцедуры - -// Получает массив описания возможных контактов и формирует из него массив типов. -// -// Возвращаемое значение: -// Массив - содержит возможные типы контактов. -// -Функция ТипыКонтактов() Экспорт - - ОписанияКонтактов = ОписанияКонтактов(); - Результат = Новый Массив; - Для каждого ЭлементМассиваОписания Из ОписанияКонтактов Цикл - Результат.Добавить(ЭлементМассиваОписания.Тип); - КонецЦикла; - Возврат Результат; - -КонецФункции - Функция ОписанияКонтактов() Экспорт Возврат ВзаимодействияКлиентСерверСлужебныйПовтИсп.КонтактыВзаимодействий(); @@ -740,111 +577,6 @@ КонецФункции -// Формирует пустую структуру для записи в регистр сведений ПредметыПапкиВзаимодействий. -// -Функция ПустаяСтруктураРеквизитыВзаимодействия() Экспорт - - СтруктураВозврата = Новый Структура; - СтруктураВозврата.Вставить("Предмет" ,Неопределено); - СтруктураВозврата.Вставить("Папка" ,Неопределено); - СтруктураВозврата.Вставить("Рассмотрено" ,Неопределено); - СтруктураВозврата.Вставить("РассмотретьПосле" ,Неопределено); - СтруктураВозврата.Вставить("РассчитыватьРассмотрено",Истина); - - Возврат СтруктураВозврата; - -КонецФункции - -// Получает расширение для переданного имени файла. -// -// Параметры: -// ИмяФайла - Строка - имя файла, для которого необходимо получить расширение. -// -// Возвращаемое значение: -// Строка - расширение, полученное из переданного имени файла. -// -Функция РасширениеФайла(Знач ИмяФайла) Экспорт - - РасширениеФайла = ""; - МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь); - Если МассивСтрок.Количество() > 1 Тогда - РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1]; - КонецЕсли; - - Возврат РасширениеФайла; - -КонецФункции - -Функция СписокСтатусов() Экспорт - - СписокСтатусов = Новый СписокЗначений; - СписокСтатусов.Добавить("Все", НСтр("ru = 'Все'")); - СписокСтатусов.Добавить("КРассмотрению", НСтр("ru = 'К рассмотрению'")); - СписокСтатусов.Добавить("Отложенные", НСтр("ru = 'Отложенные'")); - СписокСтатусов.Добавить("Рассмотренные", НСтр("ru = 'Рассмотренные'")); - - Возврат СписокСтатусов; - -КонецФункции - -Функция СтатусПоИмениКоманды(ИмяКоманды) Экспорт - - НайденнаяПозиция = СтрНайти(ИмяКоманды, "_"); - Если НайденнаяПозиция = 0 Тогда - Возврат "Все"; - КонецЕсли; - - СтрокаСтатус = Прав(ИмяКоманды, СтрДлина(ИмяКоманды) - НайденнаяПозиция); - Если СписокСтатусов().НайтиПоЗначению(СтрокаСтатус) = Неопределено Тогда - Возврат "Все"; - КонецЕсли; - - Возврат СтрокаСтатус; - -КонецФункции - -Функция ТипВзаимодействияПоИмениКоманды(ИмяКоманды, ТолькоПочта) Экспорт - - НайденнаяПозиция = СтрНайти(ИмяКоманды, "_"); - Если НайденнаяПозиция = 0 Тогда - Возврат "Все"; - КонецЕсли; - - СтрокаТипВзаимодействия = Прав(ИмяКоманды, СтрДлина(ИмяКоманды) - НайденнаяПозиция); - Если СписокОтборовПоТипуВзаимодействий(ТолькоПочта).НайтиПоЗначению(СтрокаТипВзаимодействия) = Неопределено Тогда - Возврат "Все"; - КонецЕсли; - - Возврат СтрокаТипВзаимодействия; - -КонецФункции - -Функция СписокОтборовПоТипуВзаимодействий(ТолькоПочта) Экспорт - - СписокОтборов = Новый СписокЗначений; - - СписокОтборов.Добавить("Все", НСтр("ru = 'Все'")); - СписокОтборов.Добавить("ВсеПисьма", НСтр("ru = 'Все письма'")); - Если Не ТолькоПочта Тогда - СписокОтборов.Добавить("Встречи", НСтр("ru = 'Встречи'")); - СписокОтборов.Добавить("ТелефонныеЗвонки", НСтр("ru = 'Телефонные звонки'")); - СписокОтборов.Добавить("ЗапланированныеВзаимодействия", НСтр("ru = 'Запланированные взаимодействия'")); - СписокОтборов.Добавить("СообщенияSMS", НСтр("ru = 'Сообщения SMS'")); - КонецЕсли; - СписокОтборов.Добавить("ВходящиеПисьма", НСтр("ru = 'Входящие'")); - СписокОтборов.Добавить("ПисьмаЧерновики", НСтр("ru = 'Черновики'")); - СписокОтборов.Добавить("ИсходящиеПисьма", НСтр("ru = 'Исходящие'")); - СписокОтборов.Добавить("Отправленные", НСтр("ru = 'Отправленные'")); - СписокОтборов.Добавить("УдаленныеПисьма", НСтр("ru = 'Удаленные'")); - Если Не ТолькоПочта Тогда - СписокОтборов.Добавить("ИсходящиеЗвонки", НСтр("ru = 'Исходящие звонки'")); - СписокОтборов.Добавить("ВходящиеЗвонки", НСтр("ru = 'Входящие звонки'")); - КонецЕсли; - - Возврат СписокОтборов; - -КонецФункции - Процедура ОбработкаПолученияПредставления(МенеджерОбъекта, Данные, Представление, СтандартнаяОбработка) Экспорт Тема = ТемаВзаимодействия(Данные.Тема); @@ -852,6 +584,7 @@ ТипДокумента = ""; Если ТипЗнч(МенеджерОбъекта) = Тип("ДокументМенеджер.Встреча") Тогда ТипДокумента = НСтр("ru = 'Встреча'"); + Дата = Формат(Данные.ДатаНачала, "ДЛФ=D"); ИначеЕсли ТипЗнч(МенеджерОбъекта) = Тип("ДокументМенеджер.ЗапланированноеВзаимодействие") Тогда ТипДокумента = НСтр("ru = 'Запланированное взаимодействие'"); ИначеЕсли ТипЗнч(МенеджерОбъекта) = Тип("ДокументМенеджер.СообщениеSMS") Тогда @@ -875,16 +608,13 @@ Поля.Добавить("Тема"); Поля.Добавить("Дата"); + Если ТипЗнч(МенеджерОбъекта) = Тип("ДокументМенеджер.Встреча") Тогда + Поля.Добавить("ДатаНачала"); + КонецЕсли; СтандартнаяОбработка = Ложь; КонецПроцедуры -Функция ПолучитьКартинкуСтраницыПодписи(ПоказыватьКартинку) Экспорт - - Возврат ?( ПоказыватьКартинку, БиблиотекаКартинок.КоличествоРассмотрено, Новый Картинка); - -КонецФункции - Функция МассивРасширенийФайлаПисьма() МассивРасширенийФайла = Новый Массив; @@ -895,36 +625,7 @@ КонецФункции -Функция НаименованиеИРасширениеФайлаПоИмениФайла(Знач ИмяФайла) Экспорт - - СтруктураВозврата = Новый Структура; - СтруктураВозврата.Вставить("Расширение", ""); - СтруктураВозврата.Вставить("Наименование", ""); - - МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь); - Если МассивСтрок.Количество() > 1 Тогда - - СтруктураВозврата.Расширение = МассивСтрок[МассивСтрок.Количество() - 1]; - СтруктураВозврата.Наименование = Лев(ИмяФайла, СтрДлина(ИмяФайла) - СтрДлина(СтруктураВозврата.Расширение) - 1); - Иначе - СтруктураВозврата.Наименование = ИмяФайла; - КонецЕсли; - - Возврат СтруктураВозврата; - -КонецФункции - -Функция ПредставлениеПисьма(ТемаПисьма, ДатаПисьма) Экспорт - - ШаблонПредставления = НСтр("ru = '%1 от %2'"); - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления, - ТемаВзаимодействия(ТемаПисьма), - Формат(ДатаПисьма, "ДЛФ=D")); - -КонецФункции - -Функция ТемаВзаимодействия(Тема) +Функция ТемаВзаимодействия(Тема) Экспорт Возврат ?(ПустаяСтрока(Тема), НСтр("ru = '<Без темы>'"), Тема); diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСерверПереопределяемый/Module.bsl index 4d334e20b..8486b87b2 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСерверПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Задает типы предметов взаимодействий, например: заказы, вакансии и т.п. diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl index d44db8ba4..a35056245 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСерверСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Функция КонтактыВзаимодействий() Экспорт diff --git a/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl index 3eff853e1..b9e3e3f31 100644 --- a/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается для получения контактов (участников) по указанному предмету взаимодействия. diff --git a/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl b/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl index df290d286..289887a80 100644 --- a/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Обработчик события при записи учетной записи электронной почты. @@ -64,4 +72,26 @@ КонецПроцедуры +// Получает данные выбора для документов взаимодействия. +Процедура ОбработкаПолученияДанныхВыбора(ИмяДокумента, ДанныеВыбора, Параметры, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + + ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 50 РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ДокументВзаимодействий.Ссылка КАК Ссылка + |ИЗ + | #ИмяДокумента КАК ДокументВзаимодействий + |ГДЕ + | ДокументВзаимодействий.Тема ПОДОБНО &СтрокаПоиска + | ИЛИ ДокументВзаимодействий.Номер ПОДОБНО &СтрокаПоиска"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Документ.#ИмяДокумента", ИмяДокумента); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("СтрокаПоиска", Параметры.СтрокаПоиска + "%"); + + ДанныеВыбора = Новый СписокЗначений; + ДанныеВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl index aac16bddd..e2fec8dbd 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl @@ -1,4 +1,10 @@ - +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -13,7 +19,7 @@ УстановитьПривилегированныйРежим(Истина); ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые внешние компоненты.Загрузка поставляемой компоненты'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Инициирована загрузка поставляемой обработки @@ -40,7 +46,7 @@ Если Не Информация.Разобрано Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые внешние компоненты.Загрузка поставляемой компоненты'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Информация.ОписаниеОшибки); Возврат; КонецЕсли; @@ -54,7 +60,7 @@ ОбщаяКомпонента.Записать(); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые внешние компоненты.Загрузка поставляемой компоненты'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент/Module.bsl index 04caaa466..1cacfc724 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебныйКлиент/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl index 45db1aba7..59e7aa37e 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Информация о внешней компоненте по идентификатору и версии. diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl index 9346fd961..877c07046 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Структура параметров для см. процедуру ПодключитьКомпоненту. diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl index 2a249bd47..be513b6fe 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс @@ -13,29 +20,36 @@ // Функция АвтоматическиОбновляемыеКомпоненты() Экспорт - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, - | ВнешниеКомпоненты.Версия КАК Версия - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.ОбновлятьСПортала1СИТС"; - - РезультатЗапроса = Запрос.Выполнить(); - Выборка = РезультатЗапроса.Выбрать(); - - МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); - ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); - - Пока Выборка.Следующий() Цикл - ОписаниеКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); - ОписаниеКомпоненты.Идентификатор = Выборка.Идентификатор; - ОписаниеКомпоненты.Версия = Выборка.Версия; - КонецЦикла; - - Возврат ОписаниеВнешнихКомпонент; + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, + | ВнешниеКомпоненты.Версия КАК Версия + |ИЗ + | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.ОбновлятьСПортала1СИТС"; + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + + МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); + ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); + + Пока Выборка.Следующий() Цикл + ОписаниеКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); + ОписаниеКомпоненты.Идентификатор = Выборка.Идентификатор; + ОписаниеКомпоненты.Версия = Выборка.Версия; + КонецЦикла; + + Возврат ОписаниеВнешнихКомпонент; + + Иначе + ВызватьИсключение + НСтр("ru = 'Ожидается существование подсистемы ""ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент""'"); + КонецЕсли; КонецФункции @@ -55,113 +69,120 @@ // Процедура ОбновитьВнешниеКомпоненты(ДанныеВнешнихКомпонент, АдресРезультата = Неопределено) Экспорт - Результат = ""; + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВнешниеКомпоненты.Ссылка КАК Ссылка, - | ВнешниеКомпоненты.Идентификатор КАК Идентификатор - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Идентификатор В(&Идентификаторы)"; - - Запрос.УстановитьПараметр("Идентификаторы", ДанныеВнешнихКомпонент.ВыгрузитьКолонку("Идентификатор")); - - РезультатЗапроса = Запрос.Выполнить(); - Выборка = РезультатЗапроса.Выбрать(); - - // Обход результата запроса. - Для каждого СтрокаРезультата Из ДанныеВнешнихКомпонент Цикл + Результат = ""; - ПредставлениеКомпоненты = ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты( - СтрокаРезультата.Идентификатор, - СтрокаРезультата.Версия); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВнешниеКомпоненты.Ссылка КАК Ссылка, + | ВнешниеКомпоненты.Идентификатор КАК Идентификатор + |ИЗ + | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.Идентификатор В(&Идентификаторы)"; - КодОшибки = СтрокаРезультата.КодОшибки; + Запрос.УстановитьПараметр("Идентификаторы", ДанныеВнешнихКомпонент.ВыгрузитьКолонку("Идентификатор")); - Если ЗначениеЗаполнено(КодОшибки) Тогда - - Если КодОшибки = "АктуальнаяВерсия" Тогда - Результат = Результат + ПредставлениеКомпоненты + " - " + НСтр("ru = 'Актуальная версия.'") + Символы.ПС; - Продолжить; - КонецЕсли; - - ИнформацияОбОшибке = ""; - Если КодОшибки = "ОтсутствуетКомпонента" Тогда - ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена внешняя компонента'"); - ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда - ИнформацияОбОшибке = НСтр("ru = 'При попытке загрузить файл внешней компоненты из сервиса, возникла ошибка'"); - КонецЕсли; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При загрузке внешней компоненты %1 возникала ошибка: - |%2'"), - ПредставлениеКомпоненты, - ИнформацияОбОшибке); - - Результат = Результат + ПредставлениеКомпоненты + " - " + ИнформацияОбОшибке + Символы.ПС; - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, - ТекстОшибки); - - Продолжить; - КонецЕсли; + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); - Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(СтрокаРезультата.АдресФайла, Ложь); - - Если Не Информация.Разобрано Тогда + // Обход результата запроса. + Для каждого СтрокаРезультата Из ДанныеВнешнихКомпонент Цикл - Результат = Результат + ПредставлениеКомпоненты + " - " + Информация.ОписаниеОшибки + Символы.ПС; + ПредставлениеКомпоненты = ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты( + СтрокаРезультата.Идентификатор, + СтрокаРезультата.Версия); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, Информация.ОписаниеОшибки); + КодОшибки = СтрокаРезультата.КодОшибки; + + Если ЗначениеЗаполнено(КодОшибки) Тогда + + Если КодОшибки = "АктуальнаяВерсия" Тогда + Результат = Результат + ПредставлениеКомпоненты + " - " + НСтр("ru = 'Актуальная версия.'") + Символы.ПС; + Продолжить; + КонецЕсли; + + ИнформацияОбОшибке = ""; + Если КодОшибки = "ОтсутствуетКомпонента" Тогда + ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена внешняя компонента'"); + ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда + ИнформацияОбОшибке = НСтр("ru = 'При попытке загрузить файл внешней компоненты из сервиса, возникла ошибка'"); + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При загрузке внешней компоненты %1 возникала ошибка: + |%2'"), + ПредставлениеКомпоненты, + ИнформацияОбОшибке); + + Результат = Результат + ПредставлениеКомпоненты + " - " + ИнформацияОбОшибке + Символы.ПС; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстОшибки); - Продолжить; - КонецЕсли; - - // Поиск ссылки. - Отбор = Новый Структура("Идентификатор", СтрокаРезультата.Идентификатор); - Если Выборка.НайтиСледующий(Отбор) Тогда - - Объект = Выборка.Ссылка.ПолучитьОбъект(); - - // Когда уже загружена компонента по дате более свежая, чем на Портале 1С:ИТС, обновление не следует выполнять. - Если Объект.ДатаВерсии > СтрокаРезультата.ДатаВерсии Тогда Продолжить; КонецЕсли; - ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. - ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. + Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(СтрокаРезультата.АдресФайла, Ложь); - Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); - - Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), - ТекущаяДатаСеанса()); - - Попытка - Объект.Записать(); - Результат = Результат - + ПредставлениеКомпоненты + " - " + НСтр("ru = 'Успешно обновлена.'") + Символы.ПС; - Исключение - Результат = Результат - + ПредставлениеКомпоненты + " - " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС; + Если Не Информация.Разобрано Тогда + + Результат = Результат + ПредставлениеКомпоненты + " - " + Информация.ОписаниеОшибки + Символы.ПС; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, Информация.ОписаниеОшибки); + + Продолжить; + КонецЕсли; + // Поиск ссылки. + Отбор = Новый Структура("Идентификатор", СтрокаРезультата.Идентификатор); + Если Выборка.НайтиСледующий(Отбор) Тогда + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + // Когда уже загружена компонента по дате более свежая, чем на Портале 1С:ИТС, обновление не следует выполнять. + Если Объект.ДатаВерсии > СтрокаРезультата.ДатаВерсии Тогда + Продолжить; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. + ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. + + Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); + + Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), + ТекущаяДатаСеанса()); + + Попытка + Объект.Записать(); + Результат = Результат + + ПредставлениеКомпоненты + " - " + НСтр("ru = 'Успешно обновлена.'") + Символы.ПС; + Исключение + Результат = Результат + + ПредставлениеКомпоненты + " - " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КонецЕсли; + + КонецЦикла; + + Если ЗначениеЗаполнено(АдресРезультата) Тогда + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); КонецЕсли; - КонецЦикла; - - Если ЗначениеЗаполнено(АдресРезультата) Тогда - ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + Иначе + ВызватьИсключение + НСтр("ru = 'Ожидается существование подсистемы ""ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент""'"); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl index d736568bc..9adbd4022 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -107,14 +114,14 @@ Возврат Результат; КонецПопытки; - ВременныйКаталог = ОбщегоНазначения.СоздатьВременныйКаталог("ExtComp"); + ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог("ExtComp"); Для Каждого ЭлементАрхива Из ЧтениеАрхива.Элементы Цикл Если ЭлементАрхива.Зашифрован Тогда // Очищаем временные файлы и освобождаем память. - ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); + ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); ЧтениеАрхива.Закрыть(); Поток.Закрыть(); @@ -184,7 +191,7 @@ КонецЦикла; // Очищаем временные файлы и освобождаем память. - ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); + ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); ЧтениеАрхива.Закрыть(); Поток.Закрыть(); @@ -637,142 +644,156 @@ Процедура НоваяКомпонентаСПортала(ПараметрыПроцедуры, АдресРезультата) Экспорт - Идентификатор = ПараметрыПроцедуры.Идентификатор; - Версия = ПараметрыПроцедуры.Версия; - - ПроверитьДоступностьЗагрузкиСПортала(); - - МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); - - ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); - ОписаниеВнешнейКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); - ОписаниеВнешнейКомпоненты.Идентификатор = Идентификатор; - ОписаниеВнешнейКомпоненты.Версия = Версия; - - Если Не ЗначениеЗаполнено(Версия) Тогда - РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда + + Идентификатор = ПараметрыПроцедуры.Идентификатор; + Версия = ПараметрыПроцедуры.Версия; + + ПроверитьДоступностьЗагрузкиСПортала(); + + МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); + + ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); + ОписаниеВнешнейКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); + ОписаниеВнешнейКомпоненты.Идентификатор = Идентификатор; + ОписаниеВнешнейКомпоненты.Версия = Версия; + + Если Не ЗначениеЗаполнено(Версия) Тогда + РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); + Иначе + РезультатОперации = МодульПолучениеВнешнихКомпонент.ВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); + КонецЕсли; + + Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда + ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), + РезультатОперации.ИнформацияОбОшибке, + РезультатОперации.СообщениеОбОшибке); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + Если РезультатОперации.ДанныеВнешнихКомпонент.Количество() = 0 Тогда + ТекстИсключения = НСтр("ru = 'На Портале 1С:ИТС внешняя компонента не обнаружена.'"); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстИсключения); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + СтрокаРезультата = РезультатОперации.ДанныеВнешнихКомпонент[0]; // Фокусировка на первой строке результата. + + КодОшибки = СтрокаРезультата.КодОшибки; + + Если ЗначениеЗаполнено(КодОшибки) Тогда + + ИнформацияОбОшибке = ""; + Если КодОшибки = "ОтсутствуетКомпонента" Тогда + ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена внешняя компонента'"); + ИначеЕсли КодОшибки = "ОтсутствуетВерсия" Тогда + ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена требуемая версия внешней компоненты'"); + ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда + ИнформацияОбОшибке = НСтр("ru = 'При попытке загрузить файл внешней компоненты из сервиса, возникла ошибка'"); + ИначеЕсли КодОшибки = "АктуальнаяВерсия" Тогда + ИнформацияОбОшибке = + НСтр("ru = 'Скорее всего произошла ошибка сервера при загрузке компоненты. + |Получен код ошибки: АктуальнаяВерсия, однако в ИБ компоненты не обнаружено.'"); + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При загрузке внешней компоненты %1 возникала ошибка: + |%2'"), + ПредставлениеКомпоненты(Идентификатор, Версия), + ИнформацияОбОшибке); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстОшибки); + + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Информация = ИнформацияОКомпонентеИзФайла(СтрокаРезультата.АдресФайла, Ложь); + + Если Не Информация.Разобрано Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , Информация.ОписаниеОшибки); + ВызватьИсключение Информация.ОписаниеОшибки; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + // Создание экземпляра компоненты. + Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент(); + Объект.Заполнить(Неопределено); // Конструктор по умолчанию. + + ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. + ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. + + Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), + ТекущаяДатаСеанса()); + + Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); + + Если Не ЗначениеЗаполнено(Версия) Тогда // Если запрос конкретной версии - пропускаем. + Объект.ОбновлятьСПортала1СИТС = Объект.ЭтоКомпонентаПоследнейВерсии(); + КонецЕсли; + + Объект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + Иначе - РезультатОперации = МодульПолучениеВнешнихКомпонент.ВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); + ВызватьИсключение + НСтр("ru = 'Ожидается существование подсистемы ""ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент""'"); КонецЕсли; - Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда - ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), - РезультатОперации.ИнформацияОбОшибке, - РезультатОперации.СообщениеОбОшибке); - ВызватьИсключение ТекстИсключения; - КонецЕсли; - - Если РезультатОперации.ДанныеВнешнихКомпонент.Количество() = 0 Тогда - ТекстИсключения = НСтр("ru = 'На Портале 1С:ИТС внешняя компонента не обнаружена.'"); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ТекстИсключения); - ВызватьИсключение ТекстИсключения; - КонецЕсли; - - СтрокаРезультата = РезультатОперации.ДанныеВнешнихКомпонент[0]; // Фокусировка на первой строке результата. - - КодОшибки = СтрокаРезультата.КодОшибки; - - Если ЗначениеЗаполнено(КодОшибки) Тогда - - ИнформацияОбОшибке = ""; - Если КодОшибки = "ОтсутствуетКомпонента" Тогда - ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена внешняя компонента'"); - ИначеЕсли КодОшибки = "ОтсутствуетВерсия" Тогда - ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена требуемая версия внешней компоненты'"); - ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда - ИнформацияОбОшибке = НСтр("ru = 'При попытке загрузить файл внешней компоненты из сервиса, возникла ошибка'"); - ИначеЕсли КодОшибки = "АктуальнаяВерсия" Тогда - ИнформацияОбОшибке = - НСтр("ru = 'Скорее всего произошла ошибка сервера при загрузке компоненты. - |Получен код ошибки: АктуальнаяВерсия, однако в ИБ компоненты не обнаружено.'"); - КонецЕсли; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При загрузке внешней компоненты %1 возникала ошибка: - |%2'"), - ПредставлениеКомпоненты(Идентификатор, Версия), - ИнформацияОбОшибке); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, - ТекстОшибки); - - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - Информация = ИнформацияОКомпонентеИзФайла(СтрокаРезультата.АдресФайла, Ложь); - - Если Не Информация.Разобрано Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , Информация.ОписаниеОшибки); - ВызватьИсключение Информация.ОписаниеОшибки; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - // Создание экземпляра компоненты. - Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент(); - Объект.Заполнить(Неопределено); // Конструктор по умолчанию. - - ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. - ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. - - Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), - ТекущаяДатаСеанса()); - - Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); - - Если Не ЗначениеЗаполнено(Версия) Тогда // Если запрос конкретной версии - пропускаем. - Объект.ОбновлятьСПортала1СИТС = Объект.ЭтоКомпонентаПоследнейВерсии(); - КонецЕсли; - - Объект.Записать(); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - КонецПроцедуры Процедура ОбновитьКомпонентыСПортала(ПараметрыПроцедуры, АдресРезультата) Экспорт - МассивСсылок = ПараметрыПроцедуры.МассивСсылок; - - ПроверитьДоступностьЗагрузкиСПортала(); - - МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); - ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); - - Для Каждого Ссылка Из МассивСсылок Цикл - Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Идентификатор, Версия"); - ОписаниеКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); - ОписаниеКомпоненты.Идентификатор = Реквизиты.Идентификатор; - ОписаниеКомпоненты.Версия = Реквизиты.Версия; - КонецЦикла; - - РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); - - Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда - ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), - РезультатОперации.ИнформацияОбОшибке, - РезультатОперации.СообщениеОбОшибке); - ВызватьИсключение ТекстИсключения; + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда + + МассивСсылок = ПараметрыПроцедуры.МассивСсылок; + + ПроверитьДоступностьЗагрузкиСПортала(); + + МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); + ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); + + Для Каждого Ссылка Из МассивСсылок Цикл + Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Идентификатор, Версия"); + ОписаниеКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); + ОписаниеКомпоненты.Идентификатор = Реквизиты.Идентификатор; + ОписаниеКомпоненты.Версия = Реквизиты.Версия; + КонецЦикла; + + РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); + + Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда + ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), + РезультатОперации.ИнформацияОбОшибке, + РезультатОперации.СообщениеОбОшибке); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + ВнешниеКомпонентыСервер.ОбновитьВнешниеКомпоненты(РезультатОперации.ДанныеВнешнихКомпонент, АдресРезультата); + + Иначе + ВызватьИсключение + НСтр("ru = 'Ожидается существование подсистемы ""ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент""'"); КонецЕсли; - ВнешниеКомпонентыСервер.ОбновитьВнешниеКомпоненты(РезультатОперации.ДанныеВнешнихКомпонент, АдресРезультата); - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl index a541b40c6..3c33529fc 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // См. ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl index fce1b970f..eb797f030 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -250,8 +257,7 @@ // Процедура ПодключитьКомпонентуИзРеестраWindows(Контекст) Экспорт - Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() - И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если ПодключитьКомпонентуИзРеестраWindowsДоступноПодключение() Тогда Оповещение = Новый ОписаниеОповещения( "ПодключитьКомпонентуИзРеестраWindowsПослеПопыткиПодключения", ЭтотОбъект, Контекст, @@ -343,6 +349,17 @@ КонецПроцедуры +// Продолжение процедуры ПодключитьКомпонентуИзРеестраWindows. +Функция ПодключитьКомпонентуИзРеестраWindowsДоступноПодключение() + +#Если ВебКлиент Тогда + Возврат Ложь; +#Иначе + Возврат ОбщегоНазначенияКлиент.ЭтоWindowsКлиент(); +#КонецЕсли + +КонецФункции + #КонецОбласти #Область УстановитьКомпоненту @@ -526,37 +543,19 @@ // Процедура СохранитьКомпонентуВФайл(Ссылка) Экспорт - Контекст = Новый Структура; + Местоположение = ПолучитьНавигационнуюСсылку(Ссылка, "ХранилищеКомпоненты"); + ИмяФайла = ВнешниеКомпонентыСлужебныйВызовСервера.ИмяФайлаКомпоненты(Ссылка); + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения внешней компоненты'"); + ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы внешних компонент (*.zip)|*.zip|Все файлы (*.*)|*.*'"); + + Контекст = Новый Структура; Контекст.Вставить("Ссылка", Ссылка); - Оповещение = Новый ОписаниеОповещения("СохранитьКомпонентуВФайлПослеПроверкиРасширенияРаботыСФайлами", - ЭтотОбъект, Контекст); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение); + Оповещение = Новый ОписаниеОповещения("СохранитьКомпонентуВФайлПослеПолученияФайлов", ЭтотОбъект, Контекст); -КонецПроцедуры - -// Продолжение процедуры СохранитьКомпонентуВФайл. -Процедура СохранитьКомпонентуВФайлПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт - - Местоположение = ПолучитьНавигационнуюСсылку(Контекст.Ссылка, "ХранилищеКомпоненты"); - ИмяФайла = ВнешниеКомпонентыСлужебныйВызовСервера.ИмяФайлаКомпоненты(Контекст.Ссылка); - - Если РасширениеПодключено Тогда - - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения внешней компоненты'"); - Диалог.Фильтр = НСтр("ru = 'Файлы внешних компонент (*.zip)|*.zip|Все файлы (*.*)|*.*'"); - Диалог.МножественныйВыбор = Ложь; - - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, Местоположение)); - - Оповещение = Новый ОписаниеОповещения("СохранитьКомпонентуВФайлПослеПолученияФайлов", ЭтотОбъект, Контекст); - НачатьПолучениеФайлов(Оповещение, ПолучаемыеФайлы, Диалог); - - Иначе - ПолучитьФайл(Местоположение, ИмяФайла); - КонецЕсли; + ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, Местоположение, ИмяФайла, ПараметрыСохранения); КонецПроцедуры diff --git a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl index 0b5dde39c..75df5fb3f 100644 --- a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает признак использования внешних пользователей в программе @@ -12,10 +20,18 @@ КонецФункции -// См. ПользователиКлиентСервер.ТекущийВнешнийПользователь. +// Возвращает текущего внешнего пользователя. +// Рекомендуется использовать в коде, который поддерживает только внешних пользователей. +// +// Если вход в сеанс выполнил не внешний пользователь, тогда будет вызвано исключение. +// +// Возвращаемое значение: +// СправочникСсылка.ВнешниеПользователи - внешний пользователь. +// Функция ТекущийВнешнийПользователь() Экспорт - Возврат ПользователиКлиентСервер.ТекущийВнешнийПользователь(); + Возврат ПользователиСлужебныйКлиентСервер.ТекущийВнешнийПользователь( + Пользователи.АвторизованныйПользователь()); КонецФункции @@ -34,7 +50,7 @@ Функция ПолучитьОбъектАвторизацииВнешнегоПользователя(ВнешнийПользователь = Неопределено) Экспорт Если ВнешнийПользователь = Неопределено Тогда - ВнешнийПользователь = ПользователиКлиентСервер.ТекущийВнешнийПользователь(); + ВнешнийПользователь = ТекущийВнешнийПользователь(); КонецЕсли; ОбъектАвторизации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВнешнийПользователь, "ОбъектАвторизации").ОбъектАвторизации; diff --git a/SSL/src/CommonModules/ВнешниеПользователиКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеПользователиКлиент/Module.bsl new file mode 100644 index 000000000..0c6c6556f --- /dev/null +++ b/SSL/src/CommonModules/ВнешниеПользователиКлиент/Module.bsl @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// См. ВнешниеПользователи.ТекущийВнешнийПользователь. +Функция ТекущийВнешнийПользователь() Экспорт + + Возврат ПользователиСлужебныйКлиентСервер.ТекущийВнешнийПользователь( + ПользователиКлиент.АвторизованныйПользователь()); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВнешниеПользователиКлиент/ВнешниеПользователиКлиент.mdo b/SSL/src/CommonModules/ВнешниеПользователиКлиент/ВнешниеПользователиКлиент.mdo new file mode 100644 index 000000000..a6ed129ea --- /dev/null +++ b/SSL/src/CommonModules/ВнешниеПользователиКлиент/ВнешниеПользователиКлиент.mdo @@ -0,0 +1,10 @@ + + + ВнешниеПользователиКлиент + + ru + Внешние пользователи клиент + + true + true + diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержки/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержки/Module.bsl index 7549ef214..fb0c27373 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержки/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выполняет действия, необходимые для подключения подсистемы в форме. diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержкиВызовСервера/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержкиВызовСервера/Module.bsl index 7fa9321c0..91a0dedc2 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержкиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержкиВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Получает из регистра сведений путь к исполняемому файлу. diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl index 369bf2309..7e0b4f3c4 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержкиКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Управляет видимостью команды вызова онлайн поддержки на форме @@ -32,10 +40,6 @@ // Функция ПутьКИсполняемомуФайлуИзРеестраWindows() Экспорт - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - Возврат ""; - КонецЕсли; - #Если ВебКлиент Тогда Возврат ""; #Иначе @@ -62,44 +66,32 @@ // Возвращаемое значение: // Строка - Путь к исполняемому файлу. Процедура ВыбратьФайлВызовОнлайнПоддержки(ОповещениеОЗакрытии, ПутьКФайлу = "") Экспорт - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ОповещениеОЗакрытии", ОповещениеОЗакрытии); - ДополнительныеПараметры.Вставить("ПутьКФайлу", ПутьКФайлу); - ТекстПредложения = НСтр("ru = 'Для выбора приложения необходимо установить расширение работы с файлами.'"); - Оповещение = Новый ОписаниеОповещения("ВыбратьФайлВызовОнлайнПоддержкиПослеУстановкиРасширения", ЭтотОбъект, ДополнительныеПараметры); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); -КонецПроцедуры - -// Продолжение процедуры (см. выше). -Процедура ВыбратьФайлВызовОнлайнПоддержкиПослеУстановкиРасширения(Подключено, ДополнительныеПараметры) Экспорт - - Если Не Подключено Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОЗакрытии, ""); - Возврат; - КонецЕсли; + Каталог = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПутьКФайлу); Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = НСтр("ru = 'Выберите исполняемый файл приложения'"); - Диалог.ПолноеИмяФайла = ДополнительныеПараметры.ПутьКФайлу; - Каталог = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ДополнительныеПараметры.ПутьКФайлу); + Диалог.ПолноеИмяФайла = ПутьКФайлу; Диалог.Каталог = Каталог.Путь; Фильтр = НСтр("ru = 'Файл приложения (*.exe)|*.exe'"); Диалог.Фильтр = Фильтр; Диалог.МножественныйВыбор = Ложь; - Оповещение = Новый ОписаниеОповещения("ВыбратьФайлВызовОнлайнПоддержкиЗавершение", ЭтотОбъект, ДополнительныеПараметры); - Диалог.Показать(Оповещение); + Оповещение = Новый ОписаниеОповещения("ВыбратьФайлВызовОнлайнПоддержкиЗавершение", ЭтотОбъект, ОповещениеОЗакрытии); + + ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(Оповещение, Диалог); КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура ВыбратьФайлВызовОнлайнПоддержкиЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт +Процедура ВыбратьФайлВызовОнлайнПоддержкиЗавершение(ВыбранныеФайлы, ОповещениеОЗакрытии) Экспорт + Если ВыбранныеФайлы <> Неопределено И ВыбранныеФайлы.Количество() > 0 Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОЗакрытии, ВыбранныеФайлы[0]); + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, ВыбранныеФайлы[0]); Иначе - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОЗакрытии, ""); + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, ""); КонецЕсли; + КонецПроцедуры // Проверяет наличие исполняемого файла по указанному пути. @@ -133,14 +125,14 @@ // Процедура ВызватьОнлайнПоддержку() Экспорт - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда ПоказатьПредупреждение(,НСтр("ru = 'Для работы с приложением необходима операционная система Microsoft Windows.'")); Возврат КонецЕсли; Оповещение = Новый ОписаниеОповещения("ВызватьОнлайнПоддержкуПослеУстановкиРасширения", ЭтотОбъект); ТекстСообщения = НСтр("ru = 'Для запуска приложения необходимо установить расширение работы с файлами.'"); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстСообщения, Ложь); КонецПроцедуры @@ -196,7 +188,7 @@ КомандаЗапуска = Новый Массив; КомандаЗапуска.Добавить(Контекст.ПутьИзХранилища); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(КомандаЗапуска, ПараметрыЗапускаВызовОнлайнПоддержки); - ОбщегоНазначенияКлиент.ЗапуститьПрограмму(КомандаЗапуска); + ФайловаяСистемаКлиент.ЗапуститьПрограмму(КомандаЗапуска); Возврат; КонецЕсли; @@ -204,7 +196,7 @@ КомандаЗапуска = Новый Массив; КомандаЗапуска.Добавить(Контекст.ПутьИзРеестра); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(КомандаЗапуска, ПараметрыЗапускаВызовОнлайнПоддержки); - ОбщегоНазначенияКлиент.ЗапуститьПрограмму(КомандаЗапуска); + ФайловаяСистемаКлиент.ЗапуститьПрограмму(КомандаЗапуска); Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl index 2bc2d4cb2..e6f44177a 100644 --- a/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВызовОнлайнПоддержкиПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается при изменении настроек кнопки запуска онлайн-поддержки. diff --git a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl index 8b93347a2..9c0a11a22 100644 --- a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает даты, которые отличаются указанной даты ДатаОт на количество дней, diff --git a/SSL/src/CommonModules/ГрафикиРаботыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ГрафикиРаботыКлиент/Module.bsl similarity index 89% rename from SSL/src/CommonModules/ГрафикиРаботыКлиентСервер/Module.bsl rename to SSL/src/CommonModules/ГрафикиРаботыКлиент/Module.bsl index 4022b60a2..4cc01fe98 100644 --- a/SSL/src/CommonModules/ГрафикиРаботыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботыКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Процедура сдвигает только что отредактированную строку в коллекции diff --git a/SSL/src/CommonModules/ГрафикиРаботыКлиент/ГрафикиРаботыКлиент.mdo b/SSL/src/CommonModules/ГрафикиРаботыКлиент/ГрафикиРаботыКлиент.mdo new file mode 100644 index 000000000..9a598bb94 --- /dev/null +++ b/SSL/src/CommonModules/ГрафикиРаботыКлиент/ГрафикиРаботыКлиент.mdo @@ -0,0 +1,10 @@ + + + ГрафикиРаботыКлиент + + ru + Графики работы клиент + + true + true + diff --git a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl index 4265bba0e..e020b6f02 100644 --- a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает диалог группового изменения реквизитов для выбранных в списке объектов. diff --git a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовПереопределяемый/Module.bsl index dc310b49e..1f154d5c7 100644 --- a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность @@ -10,7 +18,7 @@ // "РеквизитыНеРедактируемыеВГрупповойОбработке", // "РеквизитыРедактируемыеВГрупповойОбработке". // Каждое имя должно начинаться с новой строки. -// Если указано "*", значит в модуле менеджера определены обе функции. +// Если указано "*", значит, в модуле менеджера определены обе функции. // // Пример: // Объекты.Вставить(Метаданные.Документы.ЗаказПокупателя.ПолноеИмя(), "*"); // определены обе функции. diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index a7eaec845..484d3bb68 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Проверяет, запрещено ли изменение данных при интерактивном редактировании пользователем diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl index 59109ab09..3dac14bc8 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Позволяет изменить работу интерфейса при встраивании. diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index 6db90b0fa..66144e79a 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает возможность проверки запрета изменения данных. @@ -208,6 +216,9 @@ // Процедура ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанныхПриЗаписи(Источник, Отказ) Экспорт + // В режиме ОбменДанными.Загрузка необходимо обновлять УИД в константе ВерсияДатЗапретаИзменения, + // который позволять сеансам определить, что нужно обновить кэш дат запрета изменения в памяти. + УстановитьПривилегированныйРежим(Истина); Если ПараметрыСеанса.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных Тогда @@ -405,7 +416,7 @@ Если ВерсияОбъекта <> "СтараяВерсия" И ИзменениеЗапрещено( Источник, - , + Неопределено, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда @@ -428,14 +439,14 @@ Возврат; КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки); + ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки); ЗаписьЖурналаРегистрации( ?(УзелПроверкиЗапретаЗагрузки <> Неопределено, НСтр("ru = 'Даты запрета изменения.Найдены запреты загрузки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), НСтр("ru = 'Даты запрета изменения.Найдены запреты изменения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())), + ОбщегоНазначения.КодОсновногоЯзыка())), УровеньЖурналаРегистрации.Ошибка, , , @@ -753,7 +764,6 @@ Запись.Раздел = ПустойРаздел; Запись.Объект = ПустойРаздел; Запись.ДатаЗапрета = '19791231'; - Запись.Комментарий = "(" + НСтр("ru = 'По умолчанию'") + ")"; ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); @@ -1170,7 +1180,7 @@ ИначеЕсли Не ЗначениеЗаполнено(ИсточникДанных.ПолеДаты.ТабличнаяЧасть) Тогда Если БезОбъекта Тогда - ДобавитьСтрокуДанных(Данные, , ИсточникДанных, ДанныеДляПроверки, БезОбъекта); + ДобавитьСтрокуДанных(Данные, Неопределено, ИсточникДанных, ДанныеДляПроверки, БезОбъекта); Иначе СтрокаДаты = Новый Структура("Значение", ЗначениеПоля(Данные, ИсточникДанных.ПолеДаты)); Поле = ИсточникДанных.ПолеОбъекта.Имя; @@ -1219,7 +1229,7 @@ Для Каждого СтрокаДаты Из ЗначенияДаты Цикл СтрокаДаты = Новый Структура("Значение", ЗначениеПоля(СтрокаДаты, ИсточникДанных.ПолеДаты)); Если БезОбъекта Тогда - ДобавитьСтрокуДанных(СтрокаДаты, , ИсточникДанных, ДанныеДляПроверки, БезОбъекта); + ДобавитьСтрокуДанных(СтрокаДаты, Неопределено, ИсточникДанных, ДанныеДляПроверки, БезОбъекта); Иначе Для Каждого СтрокаОбъекта Из ЗначенияОбъекта Цикл ДобавитьСтрокуДанных(СтрокаДаты, СтрокаОбъекта, ИсточникДанных, ДанныеДляПроверки); @@ -1242,10 +1252,13 @@ Если ИсточникиДанных = Неопределено Или ИсточникиДанных.Количество() = 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для проверки запрета изменения не найдены - |источники данных для таблицы ""%1"".'"), + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для таблицы ""%1"" + |в процедуре ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения + |общего модуля ДатыЗапретаИзмененияПереопределяемый + |не указаны источники данных, необходимые для проверки дат запрета.'"), Таблица); + ВызватьИсключение ТекстОшибки; КонецЕсли; Возврат ИсточникиДанных; @@ -1363,7 +1376,7 @@ ДействующиеДаты.Вставить("ДляПользователей", УстановленныеДаты(РезультатыЗапроса[2], НачалоДня)); ДействующиеДаты.Вставить("ДляИнформационныхБаз", УстановленныеДаты(РезультатыЗапроса[3], НачалоДня)); Иначе - ДействующиеДаты.Вставить("Версия", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ДействующиеДаты.Вставить("Версия", ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); ДействующиеДаты.Вставить("ЗапретИзмененияИспользуется", Ложь); ДействующиеДаты.Вставить("ЗапретЗагрузкиИспользуется", Ложь); ДействующиеДаты.Вставить("ГруппыПользователей", Новый ФиксированноеСоответствие(Новый Соответствие)); diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..cc32ce012 --- /dev/null +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиент/Module.bsl @@ -0,0 +1,27 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Для вызова из панелей администрирования. + +Процедура ОткрытьДатыЗапретаИзмененияДанных(ФормаВладелец) Экспорт + + ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения",, ФормаВладелец); + +КонецПроцедуры + +Процедура ОткрытьДатыЗапретаЗагрузкиДанных(ФормаВладелец) Экспорт + + ПараметрыФормы = Новый Структура("ДатыЗапретаЗагрузкиДанных", Истина); + ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения", ПараметрыФормы, ФормаВладелец); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиент/ДатыЗапретаИзмененияСлужебныйКлиент.mdo b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиент/ДатыЗапретаИзмененияСлужебныйКлиент.mdo new file mode 100644 index 000000000..84ef4efb3 --- /dev/null +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиент/ДатыЗапретаИзмененияСлужебныйКлиент.mdo @@ -0,0 +1,10 @@ + + + ДатыЗапретаИзмененияСлужебныйКлиент + + ru + Даты запрета изменения служебный клиент + + true + true + diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиентСервер/Module.bsl index 044279671..cbe1e5dbc 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -81,7 +89,7 @@ Формат(РасчетныеДатыЗапрета.Предыдущая + Сутки, "ДЛФ=Д"), Формат(РасчетныеДатыЗапрета.Текущая, "ДЛФ=Д"), Формат(СрокРазрешения + Сутки, "ДЛФ=Д")); КонецЕсли; - Иначе + Иначе Контекст.КоличествоДнейРазрешения = 0; ТекстНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Запрещен ввод и редактирование данных за все прошлые периоды diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl index 08c11fcd9..2e9a69815 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Возвращает сведения о последней проверке версии действующих дат запрета изменения. diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index 3601c6131..1a9c56a16 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Запустить выполнение процедуры в фоновом задании, если это возможно. @@ -15,17 +23,17 @@ // или модуля обработки, которую необходимо выполнить в фоне. // Например, "МойОбщийМодуль.МояПроцедура", "Отчеты.ЗагруженныеДанные.Сформировать" // или "Обработки.ЗагрузкаДанных.МодульОбъекта.Загрузить". -// У процедуры может быть два или три формальных параметра: +// У процедуры должно быть два или три формальных параметра: // * Параметры - Структура - произвольные параметры ПараметрыПроцедуры; // * АдресРезультата - Строка - адрес временного хранилища, в которое нужно // поместить результат работы процедуры. Обязательно; // * АдресДополнительногоРезультата - Строка - если в ПараметрыВыполнения установлен // параметр ДополнительныйРезультат, то содержит адрес дополнительного временного // хранилища, в которое нужно поместить результат работы процедуры. Опционально. -// При необходимости выполнить в фоне функцию, ее следует обернуть в процедуру, +// При необходимости выполнить в фоне функцию ее следует обернуть в процедуру, // а ее результат возвращать через второй параметр АдресРезультата. // ПараметрыПроцедуры - Структура - произвольные параметры вызова процедуры ИмяПроцедуры. -// ПараметрыВыполнения - Структура - см. функцию ПараметрыВыполненияВФоне. +// ПараметрыВыполнения - Структура - см. функцию ДлительныеОперации.ПараметрыВыполненияВФоне. // // Возвращаемое значение: // Структура - параметры выполнения задания: @@ -46,13 +54,13 @@ // Пример: // В общем виде процесс запуска и обработки результата длительной операции выглядит следующим образом: // -// 1) процедура, которая будет исполняться в фоне, располагается в модуле менеджера объекта или в серверном общем модуле: +// 1) Процедура, которая будет исполняться в фоне, располагается в модуле менеджера объекта или в серверном общем модуле: // Процедура ВыполнитьДействие(Параметры, АдресРезультата) Экспорт // ... // ПоместитьВоВременноеХранилище(Результат, АдресРезультата); // КонецПроцедуры // -// 2) запуск операции на сервере и подключение обработчика ожидания: +// 2) Запуск операции на сервере и подключение обработчика ожидания: // &НаКлиенте // Процедура ВыполнитьДействие() // ДлительнаяОперация = НачатьВыполнениеНаСервере(); @@ -72,7 +80,7 @@ // ПараметрыПроцедуры, ПараметрыВыполнения); // КонецФункции // -// 3) обработка результата выполнения операции: +// 3) Обработка результата выполнения операции: // &НаКлиенте // Процедура ВыполнитьДействиеЗавершение(Результат, ДополнительныеПараметры) Экспорт // Если Результат = Неопределено Тогда @@ -125,12 +133,12 @@ #Если ВнешнееСоединение Тогда ВыполнитьБезФоновогоЗадания = ИнформационнаяБазаФайловая - Или ОбщегоНазначенияКлиентСервер.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне + Или ОбщегоНазначения.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне) - Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры); -#Иначе + Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры); +#Иначе ВыполнитьБезФоновогоЗадания = Не ПараметрыВыполнения.БезРасширений - И (ОбщегоНазначенияКлиентСервер.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне + И (ОбщегоНазначения.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне) Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры)); #КонецЕсли @@ -144,7 +152,7 @@ Результат.Статус = "Ошибка"; Результат.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка выполнения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка выполнения'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); КонецПопытки; Возврат Результат; @@ -212,12 +220,12 @@ // По умолчанию - 2 секунды; а для низкой скорости соединения - 4. // * НаименованиеФоновогоЗадания - Строка - описание фонового задания. По умолчанию - имя процедуры. // * КлючФоновогоЗадания - Строка - уникальный ключ для активных фоновых заданий, имеющих такое же имя процедуры. -// По умолчанию, не задан. +// По умолчанию не задан. // * АдресРезультата - Строка - адрес временного хранилища, в которое должен быть помещен результат // работы процедуры. Если не задан, адрес формируется автоматически. // * ЗапуститьВФоне - Булево - если Истина, то задание будет всегда выполняться в фоне, // за исключением режима отладки. -// В файловом варианте, при наличии ранее запущенных заданий, +// В файловом варианте при наличии ранее запущенных заданий, // новое задание становится в очередь и начинает выполняться после завершения предыдущих. // * ЗапуститьНеВФоне - Булево - если Истина, задание всегда будет запускаться непосредственно, // без использования фонового задания. @@ -246,10 +254,10 @@ // не следует сообщать прогресс более 100 раз. // // Параметры: -// Процент - Число - Процент выполнения. -// Текст - Строка - Информация о текущей операции. -// ДополнительныеПараметры - Произвольный - Любая дополнительная информация, которую необходимо передать на клиент. -// Значение должно быть простым (сериализуемым в XML строку). +// Процент - Число - процент выполнения. +// Текст - Строка - информация о текущей операции. +// ДополнительныеПараметры - Произвольный - любая дополнительная информация, которую необходимо передать на клиент. +// Значение должно быть простым (сериализуемым в XML-строку). // Процедура СообщитьПрогресс(Знач Процент = Неопределено, Знач Текст = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт @@ -271,7 +279,7 @@ ПередаваемыйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПередаваемоеЗначение); Текст = "{" + СообщениеПрогресса() + "}" + ПередаваемыйТекст; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст); + ОбщегоНазначения.СообщитьПользователю(Текст); КонецПроцедуры @@ -283,9 +291,9 @@ // // Возвращаемое значение: // Неопределено, Структура - информация о ходе выполнения фонового задания, записанная процедурой СообщитьПрогресс: -// * Процент - Число - Необязательный. Процент выполнения. -// * Текст - Строка - Необязательный. Информация о текущей операции. -// * ДополнительныеПараметры - Произвольный - Необязательный. Любая дополнительная информация. +// * Процент - Число - необязательный. Процент выполнения. +// * Текст - Строка - необязательный. Информация о текущей операции. +// * ДополнительныеПараметры - Произвольный - необязательный. Любая дополнительная информация. // Функция ПрочитатьПрогресс(Знач ИдентификаторЗадания) Экспорт @@ -294,9 +302,16 @@ КонецФункции // Отменяет выполнение фонового задания по переданному идентификатору. +// При этом если в длительной операции открывались транзакции, то будет произведен откат последней открытой транзакции. +// +// Таким образом, если длительная операция выполняет обработку (запись) данных, то для полной отмены всей операции +// следует выполнять запись в одной транзакции (в таком случае, будет отменена вся транзакция целиком). +// Если же достаточно, чтобы длительная операция была не отменена целиком, а прервана на достигнутом этапе, +// то, напротив, открывать одну длинную транзакцию не требуется. // // Параметры: -// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. +// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания, полученный при запуске +// длительной операции. См. ДлительныеОперации.ВыполнитьВФоне. // Процедура ОтменитьВыполнениеЗадания(Знач ИдентификаторЗадания) Экспорт @@ -313,9 +328,7 @@ УстановитьПривилегированныйРежим(Ложь); Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания); - Если Задание = Неопределено - ИЛИ Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда - + Если Задание = Неопределено Или Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда Возврат; КонецЕсли; @@ -323,8 +336,8 @@ Задание.Отменить(); Исключение // Возможно задание как раз в этот момент закончилось и ошибки нет. - ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Отмена выполнения фонового задания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Предупреждение, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Отмена выполнения фонового задания'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, , , КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -351,7 +364,7 @@ ОперацияНеВыполнена = Истина; ПоказатьПолныйТекстОшибки = Ложь; Если Задание = Неопределено Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Фоновое задание не найдено'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Фоновое задание не найдено'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Строка(ИдентификаторЗадания)); Иначе Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда @@ -361,7 +374,7 @@ КонецЕсли; ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда ЗаписьЖурналаРегистрации( - НСтр("ru = 'Длительные операции.Фоновое задание отменено администратором'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Длительные операции.Фоновое задание отменено администратором'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -384,8 +397,8 @@ // Получает сообщения пользователю, отфильтровывает служебные сообщения о состоянии длительной операции. // // Параметры: -// УдалятьПолученные - Булево - Признак необходимости удаления полученных сообщений. -// ИдентификаторЗадания - УникальныйИдентификатор - Идентификатор фонового задания, соответствующего длительной +// УдалятьПолученные - Булево - признак необходимости удаления полученных сообщений. +// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания, соответствующего длительной // операции, у которой требуется получить сообщения пользователю. // Если не задан, то сообщения пользователю возвращаются // из сеанса текущего пользователя. @@ -486,7 +499,7 @@ ЗапущеноЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество(); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() + Если ОбщегоНазначения.РежимОтладки() Или ЗапущеноЗаданий > 0 Тогда ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры); Результат.ЗаданиеВыполнено = Истина; @@ -535,7 +548,7 @@ Если Задание = Неопределено Тогда Пояснение = НСтр("ru = 'Операция не выполнена из-за аварийного завершения фонового задания. |Фоновое задание не найдено'") + ": " + Строка(ИдентификаторЗадания); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Пояснение); Если ИсключениеПриОшибке Тогда ВызватьИсключение(НСтр("ru = 'Не удалось выполнить данную операцию.'")); diff --git a/SSL/src/CommonModules/ДлительныеОперацииВызовСервера/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииВызовСервера/Module.bsl index 49f36f390..0e9b4cee3 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Функция ОперацииВыполнены(Знач ЗаданияДляПроверки, ЗаданияДляОтмены) Экспорт diff --git a/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl index 6ddccf152..a9c02bfdc 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Процедура КонтрольДлительныхОпераций() Экспорт diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl index b15003057..bf33eb7bf 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Ожидать завершения выполнения процедуры в фоновом задании и открыть форму ожидания длительной операции. @@ -141,10 +149,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с формой длительной операции. -// +#Область УстаревшиеПроцедурыИФункции +// Устарела. Следует использовать ОжидатьЗавершение с параметром ПараметрыОжидания.ВыводитьОкноОжидания = Истина. // Заполняет структуру параметров значениями по умолчанию. // // Параметры: @@ -161,6 +168,7 @@ КонецПроцедуры +// Устарела. Следует использовать ОжидатьЗавершение с параметром ПараметрыОжидания.ВыводитьОкноОжидания = Истина. // Заполняет структуру параметров новыми расчетными значениями. // // Параметры: @@ -176,6 +184,7 @@ КонецПроцедуры +// Устарела. Следует использовать ОжидатьЗавершение с параметром ПараметрыОжидания.ВыводитьОкноОжидания = Истина. // Открывает форму-индикатор длительной операции. // // Параметры: @@ -193,6 +202,7 @@ КонецФункции +// Устарела. Следует использовать ОжидатьЗавершение с параметром ПараметрыОжидания.ВыводитьОкноОжидания = Истина. // Закрывает форму-индикатор длительной операции. // // Параметры: @@ -211,6 +221,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция АктивныеДлительныеОперации() Экспорт diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index 5fb65276d..53324ce67 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Подключает и возвращает имя, под которым подключен внешний отчет или обработка. @@ -31,13 +39,13 @@ КонецЕсли; // Подключение - #Если ТолстыйКлиентОбычноеПриложение Тогда - ИмяОбработки = ПолучитьИмяВременногоФайла(); - ХранилищеОбработки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ХранилищеОбработки"); - ДвоичныеДанные = ХранилищеОбработки.Получить(); - ДвоичныеДанные.Записать(ИмяОбработки); - Возврат ИмяОбработки; - #КонецЕсли +#Если ТолстыйКлиентОбычноеПриложение Тогда + ИмяОбработки = ПолучитьИмяВременногоФайла(); + ХранилищеОбработки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ХранилищеОбработки"); + ДвоичныеДанные = ХранилищеОбработки.Получить(); + ДвоичныеДанные.Записать(ИмяОбработки); + Возврат ИмяОбработки; +#КонецЕсли Вид = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Вид"); Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет @@ -91,15 +99,10 @@ КонецЕсли; - ЗаписатьПримечание(Ссылка, НСтр("ru = 'Подключение, БезопасныйРежим = ""%1"".'"), БезопасныйРежим); - - Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда - ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); - Иначе - ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим); - КонецЕсли; - + ЗаписатьПримечание(Ссылка, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подключение, БезопасныйРежим = ""%1"".'"), БезопасныйРежим)); + ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим, + ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); Возврат ИмяОбработки; КонецФункции @@ -543,8 +546,8 @@ СтрокаТаблицы = Результат.Добавить(); СтрокаТаблицы.Метаданные = ОбъектМетаданных; - Если ОбъектМетаданных = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Тогда - СтрокаТаблицы.ПолноеИмя = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(); + Если ОбъектМетаданных = ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы() Тогда + СтрокаТаблицы.ПолноеИмя = ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы(); СтрокаТаблицы.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); СтрокаТаблицы.Вид = "Подсистема"; СтрокаТаблицы.Представление = НСтр("ru = 'Начальная страница'"); @@ -745,11 +748,32 @@ Иначе Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется); КонецЕсли; - Запрос.УстановитьПараметр("ТекущийПользователь", ПользователиКлиентСервер.АвторизованныйПользователь()); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); Запрос.Текст = ТекстЗапроса; - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса() Тогда - АдаптироватьЗапросПоДоступнымКомандамКМоделиСервиса(Запрос); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") + И ОбщегоНазначения.РазделениеВключено() Тогда + ИмяРегистра = "ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных"; + Запрос.Текст = Запрос.Текст + "; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ИтоговаяТаблица.Ссылка, + | ИтоговаяТаблица.Идентификатор, + | ИтоговаяТаблица.ЗаменяемыеКоманды, + | ИтоговаяТаблица.ВариантЗапуска, + | ИтоговаяТаблица.Представление КАК Представление, + | ИтоговаяТаблица.ПоказыватьОповещение, + | ИтоговаяТаблица.Модификатор, + | ИтоговаяТаблица.Использование + |ИЗ + | ИтоговаяТаблица КАК ИтоговаяТаблица + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ &ПолноИмяРегистра КАК Инсталляции + | ПО ИтоговаяТаблица.Ссылка = Инсталляции.ИспользуемаяОбработка + | + |УПОРЯДОЧИТЬ ПО + | Представление"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПолноИмяРегистра", "РегистрСведений." + ИмяРегистра); Иначе Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПОМЕСТИТЬ ИтоговаяТаблица", ""); Запрос.Текст = Запрос.Текст + " @@ -1325,16 +1349,14 @@ // ВариантыОтчетовПовтИсп.Параметры(). // Процедура ПриОпределенииОтчетовСНастройками(ОтчетыСНастройками) Экспорт + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда Возврат; КонецЕсли; - ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса = ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса(); - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса Тогда - МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - КонецЕсли; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -1350,15 +1372,16 @@ ВидыОтчетов.Добавить(Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет); ВидыОтчетов.Добавить(Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет); Запрос.УстановитьПараметр("ВидыОтчетов", ВидыОтчетов); + УстановитьПривилегированныйРежим(Истина); ДопОтчетыСНастройками = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Для Каждого Ссылка Из ДопОтчетыСНастройками Цикл - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса - И Не МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(Ссылка) Тогда + Если Не ЭтоПоставляемаяОбработка(Ссылка) Тогда Продолжить; КонецЕсли; ОтчетыСНастройками.Добавить(Ссылка); КонецЦикла; + КонецПроцедуры // Получает ссылку дополнительного отчета, если он подключен к хранилищу подсистемы Варианты отчетов. @@ -1396,13 +1419,8 @@ // Необходим для целостности формируемых данных. Права доступа будут применяться на этапе их использования. МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса = ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса(); - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса Тогда - МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - КонецЕсли; Для Каждого Ссылка Из МассивСсылок Цикл - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса - И Не МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(Ссылка) Тогда + Если Не ЭтоПоставляемаяОбработка(Ссылка) Тогда Продолжить; КонецЕсли; ОтчетИнформация.Отчет = Ссылка; @@ -1420,16 +1438,13 @@ // ВариантыОтчетов.ОтчетыТекущегоПользователя(). // Процедура ПриДобавленииДополнительныхОтчетовДоступныхТекущемуПользователю(ДоступныеОтчеты) Экспорт + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда Возврат; КонецЕсли; - ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса = ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса(); - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса Тогда - МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = @@ -1448,8 +1463,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса - И Не МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(Выборка.Ссылка) Тогда + Если Не ЭтоПоставляемаяОбработка(Выборка.Ссылка) Тогда Продолжить; КонецЕсли; ДоступныеОтчеты.Добавить(Выборка.Ссылка); @@ -1457,8 +1471,53 @@ КонецПроцедуры +// Дополняет массив ссылкам дополнительных отчетов, доступных текущему пользователю. +// +// Параметры: +// Результат - Массив - полные имена отчетов, доступные указанному пользователю. +// +// Места использования: +// Обработка.НастройкиПользователей.ОтчетыДоступныеПользователю(). +// +Процедура ПриДобавленииДополнительныхОтчетовДоступныхУказанномуПользователю(ДоступныеОтчеты, ПользовательИБ, ПользовательСсылка) Экспорт + + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Возврат; + КонецЕсли; + Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки, ПользовательИБ) Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка, + | ДополнительныеОтчетыИОбработки.ИмяОбъекта КАК ИмяОбъекта + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК НастройкиДоступа + | ПО (НастройкиДоступа.ДополнительныйОтчетИлиОбработка = ДополнительныеОтчетыИОбработки.Ссылка) + | И (НастройкиДоступа.Доступно = ИСТИНА) + | И (НастройкиДоступа.Пользователь = &Пользователь) + | И (ДополнительныеОтчетыИОбработки.Вид В (&ВидДополнительныйОтчет, &ВидОтчет))"; + + Запрос.УстановитьПараметр("Пользователь", ПользовательСсылка); + Запрос.УстановитьПараметр("ВидОтчет", Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет); + Запрос.УстановитьПараметр("ВидДополнительныйОтчет", Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Если Не ЭтоПоставляемаяОбработка(Выборка.Ссылка) Тогда + Продолжить; + КонецЕсли; + ПолноеИмяОтчета = "ВнешнийОтчет." + Выборка.ИмяОбъекта; + ДоступныеОтчеты.Добавить(ПолноеИмяОтчета); + КонецЦикла; + +КонецПроцедуры + // Подключает отчет подсистемы "Дополнительные отчеты и обработки". -// Обработка исключений производится управляющим кодом. +// Обработка исключений производится управляющим кодом. // // Параметры: // Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Отчет, который необходимо инициализировать. @@ -1475,10 +1534,8 @@ Процедура ПриПодключенииДопОтчета(Ссылка, ПараметрыОтчета, Результат, ПолучатьМетаданные) Экспорт Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда ПараметрыОтчета.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Элемент ""%1"" не подключен, потому что подсистема ""%2"" отключена в настройках программы. - |Для включения подсистемы обратитесь к администратору программы.'"), - "'"+ Строка(Ссылка) +"'", - ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Истина)); + НСтр("ru = 'Элемент ""%1"" не подключен, потому что ""Дополнительные отчеты и обработки"" отключены в настройках программы.'"), + "'" + Строка(Ссылка) + "'"); Возврат; КонецЕсли; @@ -1531,10 +1588,7 @@ КонецЕсли; Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Функциональная опция ""%2"" отключена в настройках программы. - |Обратитесь к администратору программы.'"), - ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Истина)); + ВызватьИсключение НСтр("ru = '""Дополнительные отчеты и обработки"" отключена в настройках программы.'"); КонецЕсли; Вид = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Вид"); @@ -1554,21 +1608,13 @@ Процедура ПриОпределенииДоступностиОтчетов(СсылкиДопОтчетов, Результат) Экспорт ПодсистемаВключена = Истина; ЕстьПравоЧтения = Истина; - МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = Неопределено; Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда ПодсистемаВключена = Ложь; ИначеЕсли Не ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда ЕстьПравоЧтения = Ложь; - ИначеЕсли ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса() Тогда - МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); КонецЕсли; Для Каждого Отчет Из СсылкиДопОтчетов Цикл - ОтчетДоступенВМоделиСервиса = Истина; - Если МодульДополнительныеОтчетыИОбработкиВМоделиСервиса <> Неопределено - И Не МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(Отчет) Тогда - ОтчетДоступенВМоделиСервиса = Ложь; - КонецЕсли; Найденные = Результат.НайтиСтроки(Новый Структура("Отчет", Отчет)); Для Каждого СтрокаТаблицы Из Найденные Цикл Если Не ПодсистемаВключена Тогда @@ -1579,7 +1625,7 @@ СтрокаТаблицы.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '<Отчет ""%1"" недоступен, т.к. отсутствует право чтения дополнительных отчетов и обработок.'"), СтрокаТаблицы.Представление); - ИначеЕсли Не ОтчетДоступенВМоделиСервиса Тогда + ИначеЕсли Не ЭтоПоставляемаяОбработка(Отчет) Тогда СтрокаТаблицы.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '<Отчет ""%1"" недоступен в модели сервиса.'"), СтрокаТаблицы.Представление); @@ -1601,17 +1647,14 @@ // УправлениеПечатью.КомандыПечатиФормы(). // Процедура ПриПолученииКомандПечати(КомандыПечати, ИмяОбъекта) Экспорт + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда Возврат; КонецЕсли; - ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса = ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса(); - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса Тогда - МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - КонецЕсли; - + Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ИмяОбъекта); ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); @@ -1620,8 +1663,7 @@ КонецЕсли; Для Каждого СтрокаТаблицы Из ТаблицаКоманд Цикл - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса - И Не МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(СтрокаТаблицы.Ссылка) Тогда + Если Не ЭтоПоставляемаяОбработка(СтрокаТаблицы.Ссылка) Тогда Продолжить; КонецЕсли; КомандаПечати = КомандыПечати.Добавить(); @@ -1651,24 +1693,19 @@ // УправлениеПечатью.ПриПолученииСпискаВнешнихПечатныхФорм(). // Процедура ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных) Экспорт + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда Возврат; КонецЕсли; - ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса = ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса(); - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса Тогда - МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - КонецЕсли; Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ПолноеИмяОбъектаМетаданных); - ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); Для Каждого Команда Из ТаблицаКоманд Цикл - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса - И Не МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(Команда.Ссылка) Тогда + Если Не ЭтоПоставляемаяОбработка(Команда.Ссылка) Тогда Продолжить; КонецЕсли; Если СтрНайти(Команда.Идентификатор, ",") = 0 Тогда // кроме "комплектов" @@ -1716,11 +1753,11 @@ // в котором размещается данное рабочее место (команда). // Процедура ЗаменитьИменаРазделовНаИдентификаторы(ИменаРазделовИИдентификаторы) Экспорт - ИдентификаторРабочегоСтола = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(); + ИмяНачальнойСтраницы = ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы(); МассивИменРазделов = Новый Массив; Для Каждого КлючИЗначение Из ИменаРазделовИИдентификаторы Цикл - Если КлючИЗначение.Значение = ИдентификаторРабочегоСтола Тогда + Если КлючИЗначение.Значение = ИмяНачальнойСтраницы Тогда ИменаРазделовИИдентификаторы.Вставить(КлючИЗначение.Ключ, Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка()); Иначе ИменаРазделовИИдентификаторы.Вставить(КлючИЗначение.Ключ, ОбщегоНазначения.ИдентификаторОбъектаМетаданных(КлючИЗначение.Значение)); @@ -1905,12 +1942,8 @@ Объект = СтрокаТаблицы.Ссылка.ПолучитьОбъект(); // Установка имени объекта - Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда - Объект.ИмяОбъекта = СокрЛП(Менеджер.Подключить(АдресВоВременномХранилище, , Истина, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений())); - Иначе - Объект.ИмяОбъекта = СокрЛП(Менеджер.Подключить(АдресВоВременномХранилище, , Истина)); - КонецЕсли; + Объект.ИмяОбъекта = СокрЛП(Менеджер.Подключить(АдресВоВременномХранилище, , Истина, + ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений())); // Если имя отчета (обработки) уже используется другим опубликованным отчетом (обработкой), // то данный объект является дублем - необходимо сменить его вариант публикации на режим отладки (или отключить). @@ -2072,7 +2105,8 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ЗапускДополнительныхОбработок); // Запись журнала регистрации - ЗаписатьИнформацию(ВнешняяОбработка, НСтр("ru = 'Команда %1: Запуск.'"), ИдентификаторКоманды); + ЗаписатьИнформацию(ВнешняяОбработка, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Команда %1: Запуск.'"), ИдентификаторКоманды)); // Выполнение команды Попытка @@ -2080,13 +2114,14 @@ Исключение ЗаписатьОшибку( ВнешняяОбработка, - НСтр("ru = 'Команда %1: Ошибка выполнения:%2'"), - ИдентификаторКоманды, - Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Команда %1: Ошибка выполнения: + |%2'"), + ИдентификаторКоманды, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); КонецПопытки; // Запись журнала регистрации - ЗаписатьИнформацию(ВнешняяОбработка, НСтр("ru = 'Команда %1: Завершение.'"), ИдентификаторКоманды); + ЗаписатьИнформацию(ВнешняяОбработка, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Команда %1: Завершение.'"), ИдентификаторКоманды)); КонецПроцедуры @@ -2169,7 +2204,7 @@ // Возвращает имя рабочего места команды. Функция ПредставлениеРаздела(Раздел) Экспорт - Если Раздел = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() + Если Раздел = ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы() Или Раздел = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда Возврат НСтр("ru = 'Начальная страница'"); Иначе @@ -2180,7 +2215,7 @@ // Возвращает имя рабочего места команды. Функция ПредставлениеОбъектаМетаданных(Объект) Экспорт Если ТипЗнч(Объект) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - ОбъектМетаданных = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектМетаданныхПоИдентификатору(Объект, Истина); + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Объект, Ложь); Если ТипЗнч(ОбъектМетаданных) <> Тип("ОбъектМетаданных") Тогда Возврат Неопределено; КонецЕсли; @@ -2283,104 +2318,52 @@ КонецФункции -// Процедура должна вызываться из события ПередЗаписью справочника. -// ДополнительныеОтчетыИОбработки, выполняет проверку правомерности изменения реквизитов -// элементов данного справочника для дополнительных обработок, полученных из -// каталога дополнительных обработок менеджера сервиса. -// -// Параметры: -// Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки -// Отказ - булево, флаг отказа от выполнения записи элемента справочника. -// -Процедура ПередЗаписьюДополнительнойОбработки(Источник, Отказ) Экспорт +Функция ЭтоПоставляемаяОбработка(Ссылка) - ИнтеграцияСТехнологиейСервиса.ПередЗаписьюДополнительнойОбработки(Источник, Отказ); + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); + Возврат МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(Ссылка); + + КонецЕсли; + Возврат Истина; // в том числе, в локальном режиме работы -КонецПроцедуры - -// Процедура должна вызываться из события ПередУдалением справочника. -// ДополнительныеОтчетыИОбработки. -// -// Параметры: -// Источник - СправочникОбъект.ДополнительныеОтчетыИОбработки, -// Отказ - булево, флаг отказа от выполнения удаления элемента справочника из информационной базы. -// -Процедура ПередУдалениемДополнительнойОбработки(Источник, Отказ) Экспорт +КонецФункции - ИнтеграцияСТехнологиейСервиса.ПередУдалениемДополнительнойОбработки(Источник, Отказ); - -КонецПроцедуры - -// Определяет, используется ли в текущем сеансе фильтр подключенных дополнительных отчетов и обработок -// для модели сервиса. -Функция ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса() Экспорт - Возврат ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса"); -КонецФункции - // Вызывается при создании запроса для получения таблицы команд дополнительных отчетов или обработок. -Функция АдаптироватьЗапросПоДоступнымКомандамКМоделиСервиса(Запрос) - ИмяРегистра = "ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных"; - Запрос.Текст = Запрос.Текст + "; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ИтоговаяТаблица.Ссылка, - | ИтоговаяТаблица.Идентификатор, - | ИтоговаяТаблица.ЗаменяемыеКоманды, - | ИтоговаяТаблица.ВариантЗапуска, - | ИтоговаяТаблица.Представление КАК Представление, - | ИтоговаяТаблица.ПоказыватьОповещение, - | ИтоговаяТаблица.Модификатор, - | ИтоговаяТаблица.Использование - |ИЗ - | ИтоговаяТаблица КАК ИтоговаяТаблица - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ &ПолноИмяРегистра КАК Инсталляции - | ПО ИтоговаяТаблица.Ссылка = Инсталляции.ИспользуемаяОбработка - | - |УПОРЯДОЧИТЬ ПО - | Представление"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПолноИмяРегистра", "РегистрСведений." + ИмяРегистра); - Возврат Истина; -КонецФункции - // Запись ошибки в журнал регистрации по дополнительному отчету или обработке. -Процедура ЗаписатьОшибку(Ссылка, ТекстСообщения, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт - Уровень = УровеньЖурналаРегистрации.Ошибка; - ЗаписатьВЖурнал(Уровень, Ссылка, ТекстСообщения, Реквизит1, Реквизит2, Реквизит3); +Процедура ЗаписатьОшибку(Ссылка, ТекстСообщения) Экспорт + ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, Ссылка, ТекстСообщения); КонецПроцедуры // Запись предупреждения в журнал регистрации по дополнительному отчету или обработке. -Процедура ЗаписатьПредупреждение(Ссылка, ТекстСообщения, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) - Уровень = УровеньЖурналаРегистрации.Предупреждение; - ЗаписатьВЖурнал(Уровень, Ссылка, ТекстСообщения, Реквизит1, Реквизит2, Реквизит3); +Процедура ЗаписатьПредупреждение(Ссылка, ТекстСообщения) + ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Предупреждение, Ссылка, ТекстСообщения); КонецПроцедуры // Запись информации в журнал регистрации по дополнительному отчету или обработке. -Процедура ЗаписатьИнформацию(Ссылка, ТекстСообщения, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) - Уровень = УровеньЖурналаРегистрации.Информация; - ЗаписатьВЖурнал(Уровень, Ссылка, ТекстСообщения, Реквизит1, Реквизит2, Реквизит3); +Процедура ЗаписатьИнформацию(Ссылка, ТекстСообщения) + ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Информация, Ссылка, ТекстСообщения); КонецПроцедуры // Запись примечания в журнал регистрации по дополнительному отчету или обработке. -Процедура ЗаписатьПримечание(Ссылка, ТекстСообщения, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) - Уровень = УровеньЖурналаРегистрации.Примечание; - ЗаписатьВЖурнал(Уровень, Ссылка, ТекстСообщения, Реквизит1, Реквизит2, Реквизит3); +Процедура ЗаписатьПримечание(Ссылка, ТекстСообщения) + ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Примечание, Ссылка, ТекстСообщения); КонецПроцедуры // Запись события в журнал регистрации по дополнительному отчету или обработке. -Процедура ЗаписатьВЖурнал(Уровень, Ссылка, Текст, Параметр1, Параметр2, Параметр3) - Текст = СтрЗаменить(Текст, "%1", Параметр1); // Переход на СтрШаблон невозможен. - Текст = СтрЗаменить(Текст, "%2", Параметр2); - Текст = СтрЗаменить(Текст, "%3", Параметр3); - ЗаписьЖурналаРегистрации( - ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Ложь), - Уровень, - Метаданные.Справочники.ДополнительныеОтчетыИОбработки, - Ссылка, - Текст); +Процедура ЗаписатьВЖурнал(Уровень, Ссылка, Текст) + ЗаписьЖурналаРегистрации(НаименованиеПодсистемы(), Уровень, Метаданные.Справочники.ДополнительныеОтчетыИОбработки, + Ссылка, Текст); КонецПроцедуры +// Формирует наименование подсистемы для записи события в журнал регистрации. +// +Функция НаименованиеПодсистемы() + Возврат НСтр("ru = 'Дополнительные отчеты и обработки'", ОбщегоНазначения.КодОсновногоЯзыка()); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции. @@ -2643,7 +2626,7 @@ Для Каждого СтрокаКоманда Из ЭлементДанных.Команды Цикл Найденные = ИдентификаторыРегламентныхЗаданий.НайтиСтроки(Новый Структура("Идентификатор", СтрокаКоманда.Идентификатор)); Если Найденные.Количество() = 0 Тогда - СтрокаКоманда.РегламентноеЗаданиеGUID = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + СтрокаКоманда.РегламентноеЗаданиеGUID = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); Иначе СтрокаКоманда.РегламентноеЗаданиеGUID = Найденные[0].РегламентноеЗаданиеGUID; КонецЕсли; @@ -2752,7 +2735,7 @@ ОтчетыИОбработки.Колонки.Добавить("ДвоичныеДанные"); Параметры = Новый Структура; - Параметры.Вставить("РабочийКаталог", ОбщегоНазначения.СоздатьВременныйКаталог("ARADP")); + Параметры.Вставить("РабочийКаталог", ФайловаяСистема.СоздатьВременныйКаталог("ARADP")); КомандаЗапуска = Новый Массив; КомандаЗапуска.Добавить("/DumpConfigToFiles"); КомандаЗапуска.Добавить(Параметры.РабочийКаталог); @@ -2776,7 +2759,9 @@ ИначеЕсли СтрокаТаблицы.Вид = "ОБРАБОТКА" Тогда КаталогВида = Параметры.РабочийКаталог + "DataProcessors" + ПолучитьРазделительПути(); Иначе - ЗаписатьОшибку(СтрокаТаблицы.Ссылка, НСтр("ru = 'Неподдерживаемый вид объектов метаданных: ""1""'"), СтрокаТаблицы.Вид); + ЗаписатьОшибку(СтрокаТаблицы.Ссылка, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неподдерживаемый вид объектов метаданных: ""1""'"), СтрокаТаблицы.Вид)); ОтчетыИОбработки.Удалить(ОбратныйИндекс); Продолжить; КонецЕсли; @@ -2784,7 +2769,9 @@ ПолноеИмяСхемыОбъекта = КаталогВида + СтрокаТаблицы.Имя + ".xml"; ТекстСхемы = ПрочитатьТекстовыйФайл(ПолноеИмяСхемыОбъекта); Если ТекстСхемы = Неопределено Тогда - ЗаписатьОшибку(СтрокаТаблицы.Ссылка, НСтр("ru = 'Не обнаружен файл ""%1"".'"), ПолноеИмяСхемыОбъекта); + ЗаписатьОшибку(СтрокаТаблицы.Ссылка, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не обнаружен файл ""%1"".'"), + ПолноеИмяСхемыОбъекта)); ОтчетыИОбработки.Удалить(ОбратныйИндекс); Продолжить; КонецЕсли; @@ -2831,8 +2818,13 @@ КомандаЗапуска.Добавить(ПолноеИмяФайла); СозданиеОбработки = ПакетныйЗапускКонфигуратора(Параметры, КомандаЗапуска); Если Не СозданиеОбработки.Успех Тогда - ТекстОшибки = НСтр("ru = 'Не удалось создать ""%1"" из внешнего файла ""%2"":%3'"); - ЗаписатьПредупреждение(Неопределено, ТекстОшибки, СтрокаТаблицы.ПолноеИмя, ПолноеИмяСхемыОбъекта, Символы.ПС + СокрЛП(СозданиеОбработки.Кратко + Символы.ПС + СозданиеОбработки.Подробно)); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось создать ""%1"" из внешнего файла ""%2"": + |%3 + |%4'"), + СтрокаТаблицы.ПолноеИмя, ПолноеИмяСхемыОбъекта, + СозданиеОбработки.Кратко, СозданиеОбработки.Подробно); + ЗаписатьПредупреждение(Неопределено, ТекстОшибки); ОтчетыИОбработки.Удалить(ОбратныйИндекс); Продолжить; КонецЕсли; @@ -2840,9 +2832,9 @@ КонецЦикла; Если Параметры.КаталогКопии1CD <> Неопределено Тогда - ОбщегоНазначения.УдалитьВременныйКаталог(Параметры.КаталогКопии1CD); + ФайловаяСистема.УдалитьВременныйКаталог(Параметры.КаталогКопии1CD); КонецЕсли; - ОбщегоНазначения.УдалитьВременныйКаталог(Параметры.РабочийКаталог); + ФайловаяСистема.УдалитьВременныйКаталог(Параметры.РабочийКаталог); КонецПроцедуры @@ -2893,10 +2885,10 @@ КомандаЗапуска.Добавить("/DisableStartupMessages"); КомандаЗапуска.Добавить("/DisableStartupDialogs"); - ПараметрыЗапускаКоманды = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаКоманды = ФайловаяСистема.ПараметрыЗапускаПрограммы(); ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина; - РезультатЗапуска = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(КомандаЗапуска, ПараметрыЗапускаКоманды); + РезультатЗапуска = ФайловаяСистема.ЗапуститьПрограмму(КомандаЗапуска, ПараметрыЗапускаКоманды); КодВозврата = РезультатЗапуска.КодВозврата; Если КодВозврата = 0 Тогда @@ -2990,12 +2982,8 @@ ЭтоОтчет = (СтрокаТаблицы.Вид = "ОТЧЕТ"); АдресДанных = ПоместитьВоВременноеХранилище(СтрокаТаблицы.ДвоичныеДанные); Менеджер = ?(ЭтоОтчет, ВнешниеОтчеты, ВнешниеОбработки); - Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда - ИмяОбъекта = Менеджер.Подключить(АдресДанных, , Истина, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); - Иначе - ИмяОбъекта = Менеджер.Подключить(АдресДанных, , Истина); - КонецЕсли; + ИмяОбъекта = Менеджер.Подключить(АдресДанных, , Истина, + ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); ВнешнийОбъект = Менеджер.Создать(ИмяОбъекта); ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные(); @@ -3045,7 +3033,7 @@ Строка(Результат.Конфликтующие)); КонецЕсли; ЗаписьЖурналаРегистрации( - ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Ложь), + НаименованиеПодсистемы(), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМакеты.Найти(СтрокаТаблицы.ИмяМакета), , @@ -3172,35 +3160,33 @@ КонецЕсли; // Если отчет публикуется, то необходим контроль уникальности имени объекта, - // под которым дополнительный отчет регистрируется в системе. + // под которым дополнительный отчет регистрируется в системе. Если Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется Тогда // Проверка имени ТекстЗапроса = "ВЫБРАТЬ - | ТаблицаСправочника.Ссылка, - | ТаблицаСправочника.Представление + | ТаблицаСправочника.Ссылка КАК Ссылка, + | ТаблицаСправочника.Представление КАК Представление |ИЗ | Справочник.ДополнительныеОтчетыИОбработки КАК ТаблицаСправочника |ГДЕ | ТаблицаСправочника.ИмяОбъекта = &ИмяОбъекта - | И &УсловиеДопОтчет + | И ТаблицаСправочника.Вид В(&ВидыДополнительныхОтчетовИОбработок) | И ТаблицаСправочника.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется) | И ТаблицаСправочника.ПометкаУдаления = ЛОЖЬ | И ТаблицаСправочника.Ссылка <> &Ссылка"; - ВидыДопОтчетов = Новый Массив; - ВидыДопОтчетов.Добавить(ВидДополнительныйОтчет); - ВидыДопОтчетов.Добавить(ВидОтчет); + ВидыДополнительныхОтчетовИОбработок = Новый Массив; + ВидыДополнительныхОтчетовИОбработок.Добавить(ВидДополнительныйОтчет); + ВидыДополнительныхОтчетовИОбработок.Добавить(ВидОтчет); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ИмяОбъекта", Результат.ИмяОбъекта); - Запрос.УстановитьПараметр("ВидыДопОтчетов", ВидыДопОтчетов); + Запрос.УстановитьПараметр("ВидыДополнительныхОтчетовИОбработок", ВидыДополнительныхОтчетовИОбработок); Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); - Если ПараметрыРегистрации.ЭтоОтчет Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеДопОтчет", "ТаблицаСправочника.Вид В (&ВидыДопОтчетов)"); - Иначе - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеДопОтчет", "НЕ ТаблицаСправочника.Вид В (&ВидыДопОтчетов)"); + Если Не ПараметрыРегистрации.ЭтоОтчет Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТаблицаСправочника.Вид", "НЕ ТаблицаСправочника.Вид"); // не локализуется КонецЕсли; Запрос.Текст = ТекстЗапроса; @@ -3219,38 +3205,30 @@ КонецЕсли; КонецЕсли; - Если РегистрационныеДанные.БезопасныйРежим - ИЛИ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - // ничего не делаем - Иначе + Если Не РегистрационныеДанные.БезопасныйРежим И Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда Результат.ТекстОшибки = НСтр("ru = 'Для подключения обработки, запускаемой в небезопасном режиме, требуются административные права.'"); Возврат Результат; КонецЕсли; + ЭтоВнешнийОтчет = РегистрационныеДанные.Вид = ВидДополнительныйОтчет ИЛИ РегистрационныеДанные.Вид = ВидОтчет; Если НЕ Объект.ЭтоНовый() И РегистрационныеДанные.Вид <> Объект.Вид Тогда - Результат.ТекстОшибки = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вид загружаемого объекта (%1) не соответствует текущему (%2). - |Для загрузки нового объекта нажмите ""Создать"".'"), - Строка(РегистрационныеДанные.Вид), - Строка(Объект.Вид)); + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вид загружаемого объекта (%1) не соответствует текущему (%2). + |Для загрузки нового объекта нажмите ""Создать"".'"), + Строка(РегистрационныеДанные.Вид), + Строка(Объект.Вид)); Возврат Результат; - ИначеЕсли ПараметрыРегистрации.ЭтоОтчет <> (РегистрационныеДанные.Вид = ВидДополнительныйОтчет ИЛИ РегистрационныеДанные.Вид = ВидОтчет) Тогда + ИначеЕсли ПараметрыРегистрации.ЭтоОтчет <> ЭтоВнешнийОтчет Тогда Результат.ТекстОшибки = НСтр("ru = 'Вид обработки, указанный в сведениях о внешней обработке, не соответствует ее расширению.'"); Возврат Результат; КонецЕсли; Объект.Наименование = РегистрационныеДанные.Наименование; Объект.Версия = РегистрационныеДанные.Версия; - - Если РегистрационныеДанные.Свойство("ВерсияБСП") Тогда - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(РегистрационныеДанные.ВерсияБСП, "2.2.2.0") > 0 Тогда - Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2; - Иначе - Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3; - КонецЕсли; - Иначе - Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3; + Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3; + Если РегистрационныеДанные.Свойство("ВерсияБСП") + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(РегистрационныеДанные.ВерсияБСП, "2.2.2.0") > 0 Тогда + Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2; КонецЕсли; Если РегистрационныеДанные.Свойство("БезопасныйРежим") Тогда @@ -3262,12 +3240,10 @@ Объект.ИмяОбъекта = Результат.ИмяОбъекта; Объект.ИспользуетХранилищеВариантов = Ложь; - Если (РегистрационныеДанные.Вид = ВидДополнительныйОтчет) ИЛИ (РегистрационныеДанные.Вид = ВидОтчет) Тогда - Если РегистрационныеДанные.ХранилищеВариантов = "ХранилищеВариантовОтчетов" + Если ЭтоВнешнийОтчет Тогда + Объект.ИспользуетХранилищеВариантов = (РегистрационныеДанные.ХранилищеВариантов = "ХранилищеВариантовОтчетов" ИЛИ (Метаданные.ХранилищеВариантовОтчетов <> Неопределено - И Метаданные.ХранилищеВариантовОтчетов.Имя = "ХранилищеВариантовОтчетов") Тогда - Объект.ИспользуетХранилищеВариантов = Истина; - КонецЕсли; + И Метаданные.ХранилищеВариантовОтчетов.Имя = "ХранилищеВариантовОтчетов")); РегистрационныеДанные.Свойство("ОпределитьНастройкиФормы", Объект.ТеснаяИнтеграцияСФормойОтчета); КонецЕсли; @@ -3279,9 +3255,7 @@ КонецЕсли; // Если не заполнено назначение - устанавливаем назначение из обработки. - Если Объект.Назначение.Количество() = 0 - И Объект.Вид <> ВидДополнительныйОтчет - И Объект.Вид <> ВидДополнительнаяОбработка Тогда + Если Объект.Назначение.Количество() = 0 И НЕ ЭтоВнешнийОтчет Тогда Если РегистрационныеДанные.Свойство("Назначение") Тогда ТаблицаОбъектовМетаданных = ПодключенныеОбъектыМетаданных(Объект.Вид); @@ -3309,14 +3283,12 @@ Объект.Команды.Очистить(); // Инициализация команд - Для Каждого КомандаОписание Из РегистрационныеДанные.Команды Цикл Если НЕ ЗначениеЗаполнено(КомандаОписание.ВариантЗапуска) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Для команды ""%1"" не определен способ запуска.'"), КомандаОписание.Представление)); + ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для команды ""%1"" не определен способ запуска.'"), КомандаОписание.Представление)); КонецЕсли; - Команда = Объект.Команды.Добавить(); ЗаполнитьЗначенияСвойств(Команда, КомандаОписание); @@ -3355,9 +3327,7 @@ КонецЕсли; Объект.Ответственный = Пользователи.ТекущийПользователь(); - Результат.Успех = Истина; - Возврат Результат; КонецФункции @@ -3384,20 +3354,15 @@ ИнформацияОбОшибке = Неопределено; Попытка - #Если ТолстыйКлиентОбычноеПриложение Тогда - РезультатРегистрации.ИмяОбъекта = ПолучитьИмяВременногоФайла(); - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПараметрыРегистрации.АдресДанныхОбработки); - ДвоичныеДанные.Записать(РезультатРегистрации.ИмяОбъекта); - #Иначе - Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда - РезультатРегистрации.ИмяОбъекта = - СокрЛП(Менеджер.Подключить(ПараметрыРегистрации.АдресДанныхОбработки, , Истина, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений())); - Иначе - РезультатРегистрации.ИмяОбъекта = - СокрЛП(Менеджер.Подключить(ПараметрыРегистрации.АдресДанныхОбработки, , Истина)); - КонецЕсли; - #КонецЕсли +#Если ТолстыйКлиентОбычноеПриложение Тогда + РезультатРегистрации.ИмяОбъекта = ПолучитьИмяВременногоФайла(); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПараметрыРегистрации.АдресДанныхОбработки); + ДвоичныеДанные.Записать(РезультатРегистрации.ИмяОбъекта); +#Иначе + РезультатРегистрации.ИмяОбъекта = + СокрЛП(Менеджер.Подключить(ПараметрыРегистрации.АдресДанныхОбработки, , Истина, + ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений())); +#КонецЕсли // Получение сведений о внешней обработке. ВнешнийОбъект = Менеджер.Создать(РезультатРегистрации.ИмяОбъекта); @@ -3434,6 +3399,17 @@ РезультатРегистрации.ТекстОшибки = ТекстОшибки + РезультатРегистрации.КраткоеПредставлениеОшибки; ЗаписатьОшибку(Объект.Ссылка, ТекстОшибки + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат; + ИначеЕсли ПараметрыРегистрации.ЭтоОтчет + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + ТекстПредупреждения = ""; + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + ХранилищеВариантовКорректное = МодульВариантыОтчетов.ХранилищеВариантовДополнительногоОтчетаКорректное( + ВнешнийОбъектМетаданные, ТекстПредупреждения); + + Если Не ХранилищеВариантовКорректное Тогда + ЗаписатьПредупреждение(Объект.Ссылка, ТекстПредупреждения); + КонецЕсли; КонецЕсли; Если РегистрационныеДанные.Наименование = Неопределено ИЛИ РегистрационныеДанные.Информация = Неопределено Тогда @@ -3504,15 +3480,9 @@ КлючиПараметровОбработчика = "Ссылка, Идентификатор, ВариантЗапуска, Представление, ПоказыватьОповещение, ЭтоОтчет"; ЗаполнениеФормы = Перечисления.СпособыВызоваДополнительныхОбработок.ЗаполнениеФормы; - ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса = ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса(); - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса Тогда - МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - КонецЕсли; - Таблица = Запрос.Выполнить().Выгрузить(); Для Каждого ОтчетИлиОбработка Из Таблица Цикл - Если ИспользуетсяТеснаяИнтеграцияСПодсистемойВМоделиСервиса - И Не МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ЭтоПоставляемаяОбработка(ОтчетИлиОбработка.Ссылка) Тогда + Если Не ЭтоПоставляемаяОбработка(ОтчетИлиОбработка.Ссылка) Тогда Продолжить; КонецЕсли; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl index ada9a0a87..9bbb989bc 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl index 85dfacaab..df82b3806 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl index 4549ce34f..a4ae7025c 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает шаблон имени профиля безопасности для внешнего модуля. diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl index ebff082cb..e20ccafa6 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Подключает внешнюю обработку (отчет). diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index 45c635ca3..a8c3531b1 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму с доступными командами. @@ -521,16 +529,6 @@ // Показывает диалог установки расширения, затем выгружает данные дополнительного отчета или обработки. Процедура ВыгрузитьВФайл(ПараметрыВыгрузки) Экспорт - ТекстСообщения = НСтр("ru = 'Для выгрузки внешней обработки (отчета) в файл рекомендуется установить расширение для веб-клиента 1С:Предприятие.'"); - Обработчик = Новый ОписаниеОповещения("ВыгрузитьВФайлЗавершение", ЭтотОбъект, ПараметрыВыгрузки); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик, ТекстСообщения); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Служебные обработчики асинхронных диалогов. - -// Обработчик результата работы процедуры ВыгрузитьВФайл. -Процедура ВыгрузитьВФайлЗавершение(Подключено, ПараметрыВыгрузки) Экспорт Перем Адрес; ПараметрыВыгрузки.Свойство("АдресДанныхОбработки", Адрес); @@ -538,44 +536,15 @@ Адрес = ДополнительныеОтчетыИОбработкиВызовСервера.ПоместитьВХранилище(ПараметрыВыгрузки.Ссылка, Неопределено); КонецЕсли; - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ПараметрыВыгрузки", ПараметрыВыгрузки); - ДополнительныеПараметры.Вставить("Адрес", Адрес); + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.ТекстПредложения = НСтр("ru = 'Для выгрузки внешней обработки (отчета) в файл рекомендуется установить расширение для веб-клиента 1С:Предприятие.'"); + ПараметрыСохранения.Диалог.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Укажите файл'"); + ПараметрыСохранения.Диалог.ИндексФильтра = ?(ПараметрыВыгрузки.ЭтоОтчет, 1, 2); + ПараметрыСохранения.Диалог.ПолноеИмяФайла = ПараметрыВыгрузки.ИмяФайла; - Если Не Подключено Тогда - ПолучитьФайл(Адрес, ПараметрыВыгрузки.ИмяФайла, Истина); - Возврат; - КонецЕсли; + ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, Адрес, ПараметрыВыгрузки.ИмяФайла, ПараметрыСохранения); - ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - ДиалогСохраненияФайла.ПолноеИмяФайла = ПараметрыВыгрузки.ИмяФайла; - ДиалогСохраненияФайла.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); - ДиалогСохраненияФайла.ИндексФильтра = ?(ПараметрыВыгрузки.ЭтоОтчет, 1, 2); - ДиалогСохраненияФайла.МножественныйВыбор = Ложь; - ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Укажите файл'"); - - Обработчик = Новый ОписаниеОповещения("ВыгрузитьФайлВыборФайла", ЭтотОбъект, ДополнительныеПараметры); - ДиалогСохраненияФайла.Показать(Обработчик); - -КонецПроцедуры - -// Обработчик результата работы процедуры ВыгрузитьВФайл. -Процедура ВыгрузитьФайлВыборФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт - - Если ВыбранныеФайлы <> Неопределено Тогда - ПолноеИмяФайла = ВыбранныеФайлы[0]; - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, ДополнительныеПараметры.Адрес)); - - Обработчик = Новый ОписаниеОповещения("ОбработкаРезультатаНеТребуется", ЭтотОбъект); - НачатьПолучениеФайлов(Обработчик, ПолучаемыеФайлы, ПолноеИмяФайла, Ложь); - КонецЕсли; - -КонецПроцедуры - -// Обработчик результата работы процедуры ВыгрузитьВФайл. -Процедура ОбработкаРезультатаНеТребуется(ПолученныеФайлы, ДополнительныеПараметры) Экспорт - Возврат; КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентПереопределяемый/Module.bsl index 2aab0dc90..b855f13dc 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выполняет дополнительные действия перед формированием печатной формы. diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index ceb0a7b2f..d9d6b8a12 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -451,34 +459,35 @@ КонецФункции -// Идентификатор, который используется для рабочего стола. +// Имя раздела, соответствующего начальной странице. // // Возвращаемое значение: -// Строка - Идентификатор, который используется для рабочего стола. +// Строка - имя раздела, соответствующего начальной странице. // -Функция ИдентификаторРабочегоСтола() Экспорт +Функция ИмяНачальнойСтраницы() Экспорт - Возврат "РабочийСтол"; // Внутренний идентификатор. + Возврат "РабочийСтол"; КонецФункции -// Формирует наименование подсистемы в требуемом формате локализации. -// -// Параметры: -// ДляПользователя - Булево - Код локализации. -// Истина - Использовать основной язык текущего сеанса. Используется для вывода сообщений пользователю. -// Ложь - Использовать основной язык конфигурации. Используется для записи сообщений в журнал регистрации. +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы. +// Имя раздела, соответствующего начальной странице. // // Возвращаемое значение: -// Строка - Представление подсистемы. +// Строка // -Функция НаименованиеПодсистемы(ДляПользователя) Экспорт - КодЯзыка = ?(ДляПользователя, "", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - Возврат НСтр("ru = 'Дополнительные отчеты и обработки'", КодЯзыка); +Функция ИдентификаторРабочегоСтола() Экспорт + + Возврат "РабочийСтол"; + КонецФункции #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Определяет, задано ли расписание регламентного задания. diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl index b8a76d272..694817580 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl @@ -1,16 +1,22 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определяет разделы, в которых доступна команда вызова дополнительных обработок. // В Разделы необходимо добавить метаданные тех разделов, // в которых размещены команды вызова. -// -// Для рабочего стола вместо Метаданных необходимо добавлять -// ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(). +// Для начальной страницы указать ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы. // // Параметры: // Разделы - Массив - Разделы, в которых размещены команды вызова дополнительных обработок. // * ОбъектМетаданных: Подсистема - Метаданные раздела (подсистемы). -// * Строка - Для рабочего стола. +// * Строка - Для начальной страницы. // Процедура ОпределитьРазделыСДополнительнымиОбработками(Разделы) Экспорт @@ -21,14 +27,12 @@ // Определяет разделы, в которых доступна команда вызова дополнительных отчетов. // В Разделы необходимо добавить метаданные тех разделов, // в которых размещены команды вызова. -// -// Для рабочего стола вместо Метаданных необходимо добавлять -// ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(). +// Для начальной страницы указать ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы. // // Параметры: // Разделы - Массив - Разделы, в которых размещены команды вызова дополнительных отчетов. // * ОбъектМетаданных: Подсистема - Метаданные раздела (подсистемы). -// * Строка - Для рабочего стола. +// * Строка - Для начальной страницы. // Процедура ОпределитьРазделыСДополнительнымиОтчетами(Разделы) Экспорт diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl index de20fce31..c4d55cfb0 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Виды публикации дополнительных обработок, доступные в программе. diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl index ac94cee8f..2de835afb 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index c747d3cad..a9ecbe191 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -1,15 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Процедура пакетной записи сообщений в журнал регистрации. // После записи переменная СобытияДляЖурналаРегистрации очищается. // // Параметры: -// СобытияДляЖурналаРегистрации - СписокЗначений - где Значение - Структура со свойствами: -// * ИмяСобытия - Строка - Имя записываемого события. -// * ПредставлениеУровня - Строка - Представление значений коллекции УровеньЖурналаРегистрации. +// СобытияДляЖурналаРегистрации - СписокЗначений - где Значение - структура со свойствами: +// * ИмяСобытия - Строка - имя записываемого события. +// * ПредставлениеУровня - Строка - представление значений коллекции УровеньЖурналаРегистрации. // Доступные значения: "Информация", "Ошибка", "Предупреждение", "Примечание". -// * Комментарий - Строка - Комментарий события. -// * ДатаСобытия - Дата - Дата события, подставляется в комментарий при записи. +// * Комментарий - Строка - комментарий события. +// * ДатаСобытия - Дата - дата события, подставляется в комментарий при записи. // Процедура ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации) Экспорт @@ -40,6 +48,27 @@ #Область СлужебныйПрограммныйИнтерфейс +// Записывает сообщение в журнал регистрации. +// +// Параметры: +// ИмяСобытия - Строка - имя события для журнала регистрации. +// Уровень - УровеньЖурналаРегистрации - уровни важности событий журнала регистрации. +// ОбъектМетаданных - ОбъектМетаданных - объект метаданных, к которому относится событие. +// Данные - ЛюбаяСсылка, Число, Строка, Дата, Булево, Неопределено, Тип - Данные, с которыми связано событие. +// Рекомендуется указывать ссылки на объекты данных (элементы справочников, документы, к которым относится событие). +// Комментарий - Строка - комментарий для события журнала. +// +Процедура ДобавитьСообщениеДляЖурналаРегистрации(Знач ИмяСобытия, Знач Уровень, + Знач ОбъектМетаданных = Неопределено, Знач Данные = Неопределено, Знач Комментарий = "") Экспорт + + Если ПустаяСтрока(ИмяСобытия) Тогда + ИмяСобытия = "Событие"; // не локализуется, чтобы не допускать остановки запуска в частично переведенной конфигурации + КонецЕсли; + + ЗаписьЖурналаРегистрации(ИмяСобытия, Уровень, ОбъектМетаданных, Данные, Комментарий, РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); + +КонецПроцедуры + // Выполняет чтение событий журнала регистрации в соответствии с установленным отбором. // // Параметры: @@ -457,66 +486,66 @@ Процедура ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, ИмяОграничения, ОтборЖурналаРегистрацииПоУмолчанию = Неопределено) - СписокОграничений = ""; - Ограничение = ""; + Если Не ОтборЖурналаРегистрации.Свойство(ИмяОграничения) Тогда + Возврат; + КонецЕсли; - Если ОтборЖурналаРегистрации.Свойство(ИмяОграничения, СписокОграничений) Тогда + СписокОграничений = ОтборЖурналаРегистрации[ИмяОграничения]; + Ограничение = ""; + + // Не формируем представление отбора, если его значение соответствует значению отбора по умолчанию. + Если ОтборЖурналаРегистрацииПоУмолчанию <> Неопределено Тогда + СписокОграниченийПоУмолчанию = ""; + Если ОтборЖурналаРегистрацииПоУмолчанию.Свойство(ИмяОграничения, СписокОграниченийПоУмолчанию) + И ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СписокОграниченийПоУмолчанию, СписокОграничений) Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Если ИмяОграничения = "Событие" И СписокОграничений.Количество() > 5 Тогда - // Не формируем представление отбора, если его значение соответствует значению отбора по умолчанию. - Если ОтборЖурналаРегистрацииПоУмолчанию <> Неопределено Тогда - СписокОграниченийПоУмолчанию = ""; - Если ОтборЖурналаРегистрацииПоУмолчанию.Свойство(ИмяОграничения, СписокОграниченийПоУмолчанию) - И ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СписокОграниченийПоУмолчанию, СписокОграничений) Тогда - Возврат; + Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'События (%1)'"), СписокОграничений.Количество()); + + ИначеЕсли ИмяОграничения = "Сеанс" И СписокОграничений.Количество() > 3 Тогда + + Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сеансы (%1)'"), СписокОграничений.Количество()); + + Иначе + + Для Каждого ЭлементСписка Из СписокОграничений Цикл + + Если Не ПустаяСтрока(Ограничение) Тогда + Ограничение = Ограничение + ", "; КонецЕсли; - КонецЕсли; - - Если ИмяОграничения = "Событие" И СписокОграничений.Количество() > 5 Тогда - Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'События (%1)'"), СписокОграничений.Количество()); + Если (ВРег(ИмяОграничения) = ВРег("Сеанс") + ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень")) + И ПустаяСтрока(Ограничение) Тогда - ИначеЕсли ИмяОграничения = "Сеанс" И СписокОграничений.Количество() > 3 Тогда - - Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сеансы (%1)'"), СписокОграничений.Количество()); - - Иначе - - Для Каждого ЭлементСписка Из СписокОграничений Цикл + Ограничение = НСтр("ru = '[ИмяОграничения]: [Значение]'"); + Ограничение = СтрЗаменить(Ограничение, "[Значение]", ЭлементСписка.Значение); + Ограничение = СтрЗаменить(Ограничение, "[ИмяОграничения]", ИмяОграничения); - Если Не ПустаяСтрока(Ограничение) Тогда - Ограничение = Ограничение + ", "; - КонецЕсли; - - Если (ВРег(ИмяОграничения) = ВРег("Сеанс") - ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень")) - И ПустаяСтрока(Ограничение) Тогда - - Ограничение = НСтр("ru = '[ИмяОграничения]: [Значение]'"); - Ограничение = СтрЗаменить(Ограничение, "[Значение]", ЭлементСписка.Значение); - Ограничение = СтрЗаменить(Ограничение, "[ИмяОграничения]", ИмяОграничения); - - ИначеЕсли ВРег(ИмяОграничения) = ВРег("Сеанс") - ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень")Тогда - Ограничение = Ограничение + ЭлементСписка.Значение; - Иначе - Ограничение = Ограничение + ЭлементСписка.Представление; - КонецЕсли; - - КонецЦикла; + ИначеЕсли ВРег(ИмяОграничения) = ВРег("Сеанс") + ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень")Тогда + Ограничение = Ограничение + ЭлементСписка.Значение; + Иначе + Ограничение = Ограничение + ЭлементСписка.Представление; + КонецЕсли; - КонецЕсли; - - Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда - ПредставлениеОтбора = ПредставлениеОтбора + "; "; - КонецЕсли; - - ПредставлениеОтбора = ПредставлениеОтбора + Ограничение; + КонецЦикла; КонецЕсли; + Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда + ПредставлениеОтбора = ПредставлениеОтбора + "; "; + КонецЕсли; + + ПредставлениеОтбора = ПредставлениеОтбора + Ограничение; + КонецПроцедуры -Функция ЖурналДляТехподдержки(ОтборЖурналаРегистрации, КоличествоСобытий) Экспорт +Функция ЖурналДляТехподдержки(ОтборЖурналаРегистрации, КоличествоСобытий, УникальныйИдентификатор = Неопределено) Экспорт Отбор = Новый Структура; Для Каждого ЭлементОтбора Из ОтборЖурналаРегистрации Цикл @@ -531,7 +560,7 @@ ДвоичныеДанные = Новый ДвоичныеДанные(ВременныйФайл); УдалитьФайлы(ВременныйФайл); - Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные); + Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); КонецФункции diff --git a/SSL/src/CommonModules/ЖурналРегистрацииВызовСервера/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииВызовСервера/Module.bsl index b5431a22a..f6bd673a0 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииВызовСервера/Module.bsl @@ -1,15 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Процедура пакетной записи сообщений в журнал регистрации. // После записи переменная СобытияДляЖурналаРегистрации очищается. // // Параметры: -// СобытияДляЖурналаРегистрации - СписокЗначений - где Значение - Структура со свойствами: -// * ИмяСобытия - Строка - Имя записываемого события. -// * ПредставлениеУровня - Строка - Представление значений коллекции УровеньЖурналаРегистрации. +// СобытияДляЖурналаРегистрации - СписокЗначений - где Значение - структура со свойствами: +// * ИмяСобытия - Строка - имя записываемого события. +// * ПредставлениеУровня - Строка - представление значений коллекции УровеньЖурналаРегистрации. // Доступные значения: "Информация", "Ошибка", "Предупреждение", "Примечание". -// * Комментарий - Строка - Комментарий события. -// * ДатаСобытия - Дата - Дата события, подставляется в комментарий при записи. +// * Комментарий - Строка - комментарий события. +// * ДатаСобытия - Дата - дата события, подставляется в комментарий при записи. // Процедура ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации) Экспорт diff --git a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl index 22c4ae3d3..4f7c625fd 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Записывает сообщение в журнал регистрации. diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl index bf0fa4dd2..fb0a0f759 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает описание колонок табличной части или таблицы значений. @@ -65,32 +73,4 @@ КонецПроцедуры -// Удаляет временный файл. -// Если при попытке удаления возникает ошибка, она игнорируется - файл будет удален позднее. -// -Процедура УдалитьВременныйФайл(ПолноеИмяФайла) Экспорт - - Если ПустаяСтрока(ПолноеИмяФайла) Тогда - Возврат; - КонецЕсли; - - Попытка - УдалитьФайлы(ПолноеИмяФайла) - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, - ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось удалить временный файл - |%1 по причине: %2'"), ПолноеИмяФайла, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()))); - КонецПопытки - -КонецПроцедуры - -// Имя событие для записи в журнал регистрации. -// -Функция СобытиеЖурналаРегистрации() - - Возврат НСтр("ru = 'Загрузка данных из файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - - #КонецОбласти diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl index 7a4eacccb..eb05c6a9e 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Создает новую структуру параметров для загрузки данных из файла в табличную часть. @@ -67,12 +75,14 @@ // ИмяФайла - Строка - имя файла в диалоге. // Процедура ДиалогЗагрузкиФайла(ОповещениеЗавершения , ИмяФайла = "") Экспорт - ДиалогВыборФайла = Новый Структура(); - ДиалогВыборФайла.Вставить("Режим", РежимДиалогаВыбораФайла.Открытие); - ДиалогВыборФайла.Вставить("Фильтр", НСтр("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'")); - Идентификатор = Новый УникальныйИдентификатор(ОповещениеЗавершения .Модуль.КлючУникальности); - СтандартныеПодсистемыКлиент.ПоказатьПомещениеФайла(ОповещениеЗавершения , Идентификатор, ИмяФайла, ДиалогВыборФайла); + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("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 index ac79d715b..17296e50c 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Создает структуру описания колонок для макета загрузки данных из файла. diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаПереопределяемый/Module.bsl index 317bf6268..89432eeb1 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определяет список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". diff --git a/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl index ac8fc8ee6..721800578 100644 --- a/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl +++ b/SSL/src/CommonModules/ЗаметкиПользователя/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Добавляет признак изменения пометки удаления документа. @@ -5,9 +13,9 @@ // Описание см. в синтакс-помощнике. // // Параметры: -// Источник - ДокументОбъект - источник события подписки. -// Отказ - Булево - признак отказа от записи. Если установить Истина, то запись выполнена не -// будет, и будет вызвано исключение. +// Источник - ДокументОбъект - источник события подписки. +// Отказ - Булево - признак отказа от записи. Если установить Истина, то запись выполнена не будет +// и будет вызвано исключение. // РежимЗаписи - РежимЗаписиДокумента - текущий режим записи документа-источника. // РежимПроведения - РежимПроведенияДокумента - текущий режим проведения документа-источника. // @@ -16,13 +24,13 @@ КонецПроцедуры // Добавляет признак изменения пометки удаления объекта. -// Состав параметров процедуры соответствует подписке на событие ПередЗаписью объектов кроме Документ. +// Состав параметров процедуры соответствует подписке на событие ПередЗаписью любых объектов, кроме документов. // Описание см. в синтакс-помощнике. // // Параметры: // Источник - Объект - источник события подписки. -// Отказ - Булево - признак отказа от записи. Если установить Истина, то запись выполнена не -// будет, и будет вызвано исключение. +// Отказ - Булево - признак отказа от записи. Если установить Истина, то запись выполнена не будет +// и будет вызвано исключение. // Процедура УстановитьСтатусИзмененияПометкиУдаленияОбъекта(Источник, Отказ) Экспорт ЗаметкиПользователяСлужебный.УстановитьСтатусИзмененияПометкиУдаления(Источник); diff --git a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl index 1fec4fc2c..aded75ca7 100644 --- a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -111,7 +119,7 @@ ЗаметкаОбъект.Записать(); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки пользователя.Изменение пометки удаления'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки пользователя.Изменение пометки удаления'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, ЗаметкаОбъект.Метаданные(), ЗаметкаОбъект.Ссылка, ТекстОшибки); КонецПопытки; КонецЦикла; diff --git a/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl b/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl index 5d9fcd597..437381d9a 100644 --- a/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Список объектов, в которых используются команды заполнения. diff --git a/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl index 207b150d1..e3fd7e1b7 100644 --- a/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗаполнениеОбъектовПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определяет список объектов конфигурации, в модулях менеджеров которых предусмотрена процедура @@ -5,80 +13,77 @@ // Синтаксис процедуры ДобавитьКомандыЗаполнения см. в документации. // // Параметры: -// Объекты - Массив - объекты метаданных (ОбъектМетаданных) с командами заполнения. +// Объекты - Массив - объекты метаданных (тип ОбъектМетаданных) с командами заполнения. // // Пример: -// Объекты.Добавить(Метаданные.Справочники.Организации); -// +// Объекты.Добавить(Метаданные.Справочники.Организации); +// Процедура ПриОпределенииОбъектовСКомандамиЗаполнения(Объекты) Экспорт КонецПроцедуры -// Вызывается для формирования списка команд заполнения КомандыЗаполнения, однократно для при первой необходимости, -// а затем результат кэшируется с помощью модуля с повторным использованием возвращаемых значений. -// Здесь можно определить команды заполнения, общие для большинства объектов конфигурации. +// Определяет общие команды заполнения. // // Параметры: // КомандыЗаполнения - ТаблицаЗначений - сформированные команды для вывода в подменю. // // Общие настройки: -// * Идентификатор - Строка - Идентификатор команды. +// * Идентификатор - Строка - идентификатор команды. // // Настройки внешнего вида: -// * Представление - Строка - Представление команды в форме. -// * Важность - Строка - Группа в подменю, в которой следует вывести эту команду. +// * Представление - Строка - представление команды в форме. +// * Важность - Строка - группа в подменю, в которой следует вывести эту команду. // Допустимо использовать: "Важное", "Обычное" и "СмТакже". -// * Порядок - Число - Порядок размещения команды в подменю. Используется для настройки под конкретное +// * Порядок - Число - порядок размещения команды в подменю. Используется для настройки под конкретное // рабочее место. -// * Картинка - Картинка - Картинка команды. +// * Картинка - Картинка - картинка команды. // // Настройки видимости и доступности: -// * ТипПараметра - ОписаниеТипов - Типы объектов, для которых предназначена эта команда. -// * ВидимостьВФормах - Строка - Имена форм через запятую, в которых должна отображаться команда. -// Используется когда состав команд отличается для различных форм. -// * ФункциональныеОпции - Строка - Имена функциональных опций через запятую, определяющих видимость команды. -// * УсловияВидимости - Массив - Определяет видимость команды в зависимости от контекста. +// * ТипПараметра - ОписаниеТипов - типы объектов, для которых предназначена эта команда. +// * ВидимостьВФормах - Строка - имена форм через запятую, в которых должна отображаться команда. +// Используется, когда состав команд отличается для различных форм. +// * ФункциональныеОпции - Строка - имена функциональных опций через запятую, определяющих видимость команды. +// * УсловияВидимости - Массив - определяет видимость команды в зависимости от контекста. // Для регистрации условий следует использовать процедуру // ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(). // Условия объединяются по "И". -// * ИзменяетВыбранныеОбъекты - Булево - Определяет доступность команды в ситуации, -// когда у пользователя нет прав на изменение объекта. +// * ИзменяетВыбранныеОбъекты - Булево - определяет доступность команды, когда у пользователя нет прав на изменение объекта. // Если Истина, то в описанной выше ситуации кнопка будет недоступна. -// Необязательный. Значение по умолчанию: Истина. +// Необязательный. Значение по умолчанию - Истина. // // Настройки процесса выполнения: -// * МножественныйВыбор - Булево, Неопределено - Если Истина, то команда поддерживает множественный выбор. +// * МножественныйВыбор - Булево, Неопределено - если Истина, то команда поддерживает множественный выбор. // В этом случае в параметре выполнения будет передан список ссылок. -// Необязательный. Значение по умолчанию: Истина. -// * РежимЗаписи - Строка - Действия, связанные с записью объекта, которые выполняются перед обработчиком команды. -// ** "НеЗаписывать" - Объект не записывается, а в параметрах обработчика вместо ссылок передается +// Необязательный. Значение по умолчанию - Истина. +// * РежимЗаписи - Строка - действия, связанные с записью объекта, которые выполняются перед обработчиком команды. +// ** "НеЗаписывать" - объект не записывается, а в параметрах обработчика вместо ссылок передается // вся форма. В этом режиме рекомендуется работать напрямую с формой, -// которая передается в структуре 2 параметра обработчика команды. -// ** "ЗаписыватьТолькоНовые" - Записывать новые объекты. -// ** "Записывать" - Записывать новые и модифицированные объекты. -// ** "Проводить" - Проводить документы. +// которая передается в структуре 2-го параметра обработчика команды. +// ** "ЗаписыватьТолькоНовые" - записывать новые объекты. +// ** "Записывать" - записывать новые и модифицированные объекты. +// ** "Проводить" - проводить документы. // Перед записью и проведением у пользователя запрашивается подтверждение. -// Необязательный. Значение по умолчанию: "Записывать". -// * ТребуетсяРаботаСФайлами - Булево - Если Истина, то в веб-клиенте предлагается +// Необязательный. Значение по умолчанию - "Записывать". +// * ТребуетсяРаботаСФайлами - Булево - если Истина, то в веб-клиенте предлагается // установить расширение работы с файлами. -// Необязательный. Значение по умолчанию: Ложь. +// Необязательный. Значение по умолчанию - Ложь. // // Настройки обработчика: -// * Менеджер - Строка - Объект, отвечающий за выполнение команды. -// * ИмяФормы - Строка - Имя формы, которую требуется получить для выполнения команды. +// * Менеджер - Строка - объект, отвечающий за выполнение команды. +// * ИмяФормы - Строка - имя формы, которую требуется получить для выполнения команды. // Если Обработчик не указан, то у формы вызывается метод "Открыть". -// * ПараметрыФормы - Неопределено, ФиксированнаяСтруктура - Необязательный. Параметры формы, указанной в ИмяФормы. -// * Обработчик - Строка - Описание процедуры, обрабатывающей основное действие команды. -// Формат "<ИмяОбщегоМодуля>.<ИмяПроцедуры>" используется когда процедура размещена в общем модуле. +// * ПараметрыФормы - Неопределено, ФиксированнаяСтруктура - необязательный. Параметры формы, указанной в ИмяФормы. +// * Обработчик - Строка - описание процедуры, обрабатывающей основное действие команды. +// Формат "<ИмяОбщегоМодуля>.<ИмяПроцедуры>" используется, когда процедура размещена в общем модуле. // Формат "<ИмяПроцедуры>" используется в следующих случаях: -// - Если ИмяФормы заполнено то в модуле указанной формы ожидается клиентская процедура. -// - Если ИмяФормы не заполнено то в модуле менеджера этого объекта ожидается серверная процедура. -// * ДополнительныеПараметры - ФиксированнаяСтруктура - Необязательный. Параметры обработчика, указанного в Обработчик. +// - если ИмяФормы заполнено, то в модуле указанной формы ожидается клиентская процедура; +// - если ИмяФормы не заполнено, то в модуле менеджера этого объекта ожидается серверная процедура. +// * ДополнительныеПараметры - ФиксированнаяСтруктура - необязательный. Параметры обработчика, указанного в Обработчик. // -// Параметры - Структура - Сведения о контексте исполнения. -// * ИмяФормы - Строка - Полное имя формы. +// Параметры - Структура - сведения о контексте исполнения. +// * ИмяФормы - Строка - полное имя формы. // -// СтандартнаяОбработка - Булево - Если установить в Ложь, то событие "ДобавитьКомандыЗаполнения" менеджера объекта не +// СтандартнаяОбработка - Булево - если установить в Ложь, то событие "ДобавитьКомандыЗаполнения" менеджера объекта не // будет вызвано. // Процедура ПередДобавлениемКомандЗаполнения(КомандыЗаполнения, Параметры, СтандартнаяОбработка) Экспорт diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl index f863b1a3d..beac98ca2 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Принимает в качестве параметра форму объекта, к которому подключена подсистема, diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl index 51283cecb..3580cbb8e 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Разрешает редактирование заблокированных элементов формы, связанных с заданными реквизитами. diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовПереопределяемый/Module.bsl index 35264b24c..b7fc4b6d6 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl index d887f4545..19c6e5ab3 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Запрет редактирования реквизитов объектов". // @@ -34,11 +42,6 @@ ОписаниеТиповБулево = Новый ОписаниеТипов("Булево"); ОписаниеТиповМассив = Новый ОписаниеТипов("СписокЗначений"); - РеквизитыФормы = Новый Соответствие; - Для каждого РеквизитФормы Из Форма.ПолучитьРеквизиты() Цикл - РеквизитыФормы.Вставить(РеквизитФормы.Имя, РеквизитФормы.Заголовок); - КонецЦикла; - // Добавление реквизитов на форму. ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПараметрыЗапретаРедактированияРеквизитов", Новый ОписаниеТипов("ТаблицаЗначений"))); @@ -47,11 +50,13 @@ ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("РедактированиеРазрешено", ОписаниеТиповБулево, "ПараметрыЗапретаРедактированияРеквизитов")); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("БлокируемыеЭлементы", ОписаниеТиповМассив, "ПараметрыЗапретаРедактированияРеквизитов")); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПравоРедактирования", ОписаниеТиповБулево, "ПараметрыЗапретаРедактированияРеквизитов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ЭтоРеквизитФормы", ОписаниеТиповБулево, "ПараметрыЗапретаРедактированияРеквизитов")); Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); БлокируемыеРеквизиты = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Ссылка).ПолучитьБлокируемыеРеквизитыОбъекта(); ВсеРеквизитыБезПраваРедактирования = Истина; + РеквизитыФормы = Неопределено; Для Каждого БлокируемыйРеквизит Из БлокируемыеРеквизиты Цикл @@ -95,7 +100,15 @@ КонецЕсли; Если МетаданныеРеквизитаИлиТабличнойЧасти = Неопределено Тогда + Если РеквизитыФормы = Неопределено Тогда + РеквизитыФормы = Новый Соответствие; + Для Каждого РеквизитФормы Из Форма.ПолучитьРеквизиты() Цикл + РеквизитыФормы.Вставить(РеквизитФормы.Имя, РеквизитФормы.Заголовок); + КонецЦикла; + КонецЕсли; + ОписаниеРеквизита.Представление = РеквизитыФормы[ОписаниеРеквизита.ИмяРеквизита]; + ОписаниеРеквизита.ЭтоРеквизитФормы = Истина; ОписаниеРеквизита.ПравоРедактирования = Истина; ВсеРеквизитыБезПраваРедактирования = Ложь; @@ -142,9 +155,10 @@ // Для процедуры ПодготовитьФорму. // Дополняет массив блокируемых элементов формы связанными элементами. +// Процедура ЗаполнитьСвязанныеЭлементы(Форма) - Отбор = Новый Структура("ИмяРеквизита", Неопределено); + Отбор = Новый Структура("ИмяРеквизита, ЭтоРеквизитФормы", "", Ложь); Для Каждого ЭлементФормы Из Форма.Элементы Цикл @@ -154,12 +168,18 @@ РазложенныйПутьКДанным = СтрРазделить(ЭлементФормы.ПутьКДанным, ".", Ложь); - Если РазложенныйПутьКДанным.Количество() = 2 Тогда + Если РазложенныйПутьКДанным.Количество() > 2 Тогда + Продолжить; + ИначеЕсли РазложенныйПутьКДанным.Количество() = 2 Тогда Отбор.ИмяРеквизита = РазложенныйПутьКДанным[1]; - Строки = Форма.ПараметрыЗапретаРедактированияРеквизитов.НайтиСтроки(Отбор); - Если Строки.Количество() > 0 Тогда - Строки[0].БлокируемыеЭлементы.Добавить(ЭлементФормы.Имя); - КонецЕсли; + Отбор.ЭтоРеквизитФормы = Ложь; + Иначе + Отбор.ИмяРеквизита = РазложенныйПутьКДанным[0]; + Отбор.ЭтоРеквизитФормы = Истина; + КонецЕсли; + Строки = Форма.ПараметрыЗапретаРедактированияРеквизитов.НайтиСтроки(Отбор); + Если Строки.Количество() > 0 Тогда + Строки[0].БлокируемыеЭлементы.Добавить(ЭлементФормы.Имя); КонецЕсли; КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl index 79f249918..1c8e9b214 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Процедура РазрешитьРедактированиеРеквизитовОбъектаПослеПредупреждения(ОбработкаПродолжения) Экспорт diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl index 97a444854..4f8c89709 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выполняет подготовку формы настройки системы для управления областями персональных данных, @@ -396,7 +404,7 @@ ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Защита персональных данных.Скрытие данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Защита персональных данных.Скрытие данных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -780,9 +788,9 @@ КонецПроцедуры -Функция ПриПодготовкеСпискаМакетовВФорматеОфисныхДокументовФормируемыхНаСервере(СписокМакетов) Экспорт +Процедура ПриПодготовкеСпискаМакетовВФорматеОфисныхДокументовФормируемыхНаСервере(СписокМакетов) Экспорт СписокМакетов.Добавить("Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru"); -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -1134,7 +1142,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Защита персональных данных.Изменение скрытых персональных данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1421,8 +1429,6 @@ Возврат Новый Массив; КонецЕсли; - НомерСтроки = 1; - КолВоСтрок = ТаблицаИсключений.Количество(); ТаблицаИсключений.Сортировать("ПричинаОтменыСкрытия"); ТекущиеСубъекты = Новый Массив; @@ -1473,7 +1479,7 @@ |%2'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ТекущийСубъект, ТекстПричины); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); КонецЦикла; @@ -1680,7 +1686,7 @@ Для Каждого Субъект Из Субъекты Цикл - НастройкиСкрытияСубъекта = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(НастройкиСкрытия); + НастройкиСкрытияСубъекта = ОбщегоНазначения.СкопироватьРекурсивно(НастройкиСкрытия); Выборка.Сбросить(); Если Выборка.НайтиСледующий(Новый Структура("Субъект", Субъект)) Тогда @@ -2120,7 +2126,7 @@ Функция СобытиеЖурналаРегистрацииИзменениеНастроекСкрытияПДн() - Возврат НСтр("ru = 'Защита персональных данных.Изменение настроек скрытия персональных данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Защита персональных данных.Изменение настроек скрытия персональных данных'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхВызовСервера/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхВызовСервера/Module.bsl index a367c30d5..e95cc4d2e 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Запускает изменение настроек скрытия персональных данных субъектов в соответствии с измененными @@ -74,7 +82,7 @@ ТекстСообщения = НСтр("ru = 'Персональные данные субъекта «%1» не могут быть скрыты. |%2'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Субъект, ТекстПричины); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); Продолжить; diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl index 861647093..c97781fac 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Осуществляет переход к форме подготовки согласия на обработку персональных данных, @@ -166,7 +174,7 @@ Если ФоновоеЗадание <> Неопределено Тогда ТекстОшибки = НСтр("ru='Не удалось изменить настройки скрытия персональных данных. |См. подробности в журнале регистрации.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl index b52d7e67c..a07f2bc87 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl @@ -1,14 +1,43 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс -// Обеспечивает сбор сведений о хранении данных, относящихся к персональным. +// Позволяет задать настройки для регистрации событий доступа к персональным данным. +// +// При расширении состава субъектов персональных данных следует иметь в виду, что регистрация событий для них +// не начнется автоматически (это отдельно настраивает администратор программы). Однако если необходимо управлять этим +// при переходе на новую версию программы, то следует реализовать обработчик обновления, вызывающий +// процедуру ЗащитаПерсональныхДанных.УстановитьИспользованиеСобытияДоступ. // // Параметры: -// ТаблицаСведений - ТаблицаЗначений - таблица с полями: -// * Объект - Строка - полное имя объекта метаданных; -// * ПоляРегистрации - Строка - имена полей регистрации, отдельные поля регистрации отделяются запятой, -// альтернативные - символом "|"; -// * ПоляДоступа - Строка - имена полей доступа через запятую. -// * ОбластьДанных - Строка - идентификатор области данных, необязательно для заполнения. +// ТаблицаСведений - ТаблицаЗначений - таблица с полями: +// * Объект - Строка - полное имя объекта метаданных с персональными данными; +// * ПоляРегистрации - Строка - имена полей, значения которых выводятся в журнал событий доступа к персональным +// данным для идентификации субъекта персональных данных. Для ссылочных типов, +// как правило, это поле "Ссылка". Отдельные поля регистрации отделяются запятой, +// альтернативные - символом "|"; +// * ПоляДоступа - Строка - имена полей доступа через запятую. Обращение (попытка доступа) к этим полям +// приводит к записи журнала; +// * ОбластьДанных - Строка - идентификатор области данных, если их несколько. Необязательно для заполнения. +// +// Пример: +// Сведения = ТаблицаСведений.Добавить(); +// Сведения.Объект = "Справочник.ФизическиеЛица"; +// Сведения.ПоляРегистрации = "Ссылка"; +// Сведения.ПоляДоступа = "Наименование,ДатаРождения"; +// Сведения.ОбластьДанных = "ЛичныеДанные"; +// +// Сведения = ТаблицаСведений.Добавить(); +// Сведения.Объект = "Справочник.ФизическиеЛица"; +// Сведения.ПоляРегистрации = "Ссылка"; +// Сведения.ПоляДоступа = "СерияДокумента,НомерДокумента,КемВыданДокумент,ДатаВыдачиДокумента"; +// Сведения.ОбластьДанных = "ПаспортныеДанные"; // Процедура ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений) Экспорт diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl index c16bcecfe..757e8966e 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Функция формирует структуру, необходимую для установки индекса картинки @@ -131,9 +139,7 @@ Для Каждого ТЧИРеквизиты Из ИменаРеквизитовТЧИсточника Цикл - ИмяТЧ = ТЧИРеквизиты.Ключ; ИменаРеквизитовТЧ = ТЧИРеквизиты.Значение; - Для Каждого ИмяРеквизита Из ИменаРеквизитовТЧ Цикл Если ПоляРегистрации.Найти(ИмяРеквизита) <> Неопределено Тогда diff --git a/SSL/src/CommonModules/ЗаявлениеНаСертификатПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗаявлениеНаСертификатПереопределяемый/Module.bsl new file mode 100644 index 000000000..34f6acaa4 --- /dev/null +++ b/SSL/src/CommonModules/ЗаявлениеНаСертификатПереопределяемый/Module.bsl @@ -0,0 +1,223 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Вызывается в форме добавления заявления на новый сертификат для заполнения реквизитов организации и при ее выборе. +// +// Параметры: +// Параметры - Структура - со свойствами: +// +// * Организация - СправочникСсылка.Организации - организация, которую нужно заполнить. +// Если организация уже заполнена, требуется перезаполнить ее свойства, например, +// при повтором вызове, когда пользователь выбрал другую организацию. +// - Неопределено, если ОпределяемыйТип.Организации не настроен. +// Пользователю недоступен выбор организации. +// +// * ЭтоИндивидуальныйПредприниматель - Булево - (возвращаемое значение): +// Ложь - начальное значение - указанная организация является юридическим лицом, +// Истина - указанная организация является индивидуальным предпринимателем. +// +// * НаименованиеСокращенное - Строка - (возвращаемое значение) краткое наименование организации. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * НаименованиеПолное - Строка - (возвращаемое значение) краткое наименование организации. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * ИНН - Строка - (возвращаемое значение) ИНН организации. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * КПП - Строка - (возвращаемое значение) КПП организации. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * ОГРН - Строка - (возвращаемое значение) ОГРН организации. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * РасчетныйСчет - Строка - (возвращаемое значение) основной расчетный счет организации для договора. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * БИК - Строка - (возвращаемое значение) БИК банка расчетного счета. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * КорреспондентскийСчет - Строка - (возвращаемое значение) корреспондентский счет банка расчетного счета. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * Телефон - Строка - (возвращаемое значение) телефон организации в формате JSON, как его +// возвращает функция КонтактнаяИнформацияОбъекта общего модуля УправлениеКонтактнойИнформацией. +// +// * ЮридическийАдрес - Строка - (возвращаемое значение) юридический адрес организации в формате JSON, как его +// возвращает функция КонтактнаяИнформацияОбъекта общего модуля УправлениеКонтактнойИнформацией. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * ФактическийАдрес - Строка - (возвращаемое значение) фактический адрес организации в формате JSON, как его +// возвращает функция КонтактнаяИнформацияОбъекта общего модуля УправлениеКонтактнойИнформацией. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +Процедура ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Параметры) Экспорт + + + +КонецПроцедуры + +// Вызывается в форме добавления заявления на новый сертификат для заполнении реквизитов владельца и при его выборе. +// +// Параметры: +// Параметры - Структура - со свойствами: +// * Организация - СправочникСсылка.Организации - выбранная организация, на которую оформляется сертификат. +// - Неопределено, если ОпределяемыйТип.Организации не настроен. +// +// * ТипВладельца - ОписаниеТипов - (возвращаемое значение) содержит ссылочные типы из которых можно сделать выбор. +// - Неопределено - (возвращаемое значение) выбор владельца не поддерживается. +// +// * Сотрудник - ТипВладельца - (возвращаемое значение) - это владелец сертификата, которого нужно заполнить. +// Если уже заполнен (выбран пользователем), его не следует изменять. +// - Неопределено - если ТипВладельца не определен, тогда реквизит не доступен пользователю. +// +// * Директор - ТипВладельца - (возвращаемое значение) - это директор, который может быть выбран, +// как владелец сертификата. +// - Неопределено - начальное значение - скрыть директора из списка выбора. +// +// * ГлавныйБухгалтер - ТипВладельца - (возвращаемое значение) это главный бухгалтер, который может быть выбран, +// как владелец сертификата. +// - Неопределено - начальное значение - скрыть главного бухгалтера из списка выбора. +// +// * Пользователь - СправочникСсылка.Пользователи - (возвращаемое значение) пользователь-владелец сертификата. +// В общем случае, может быть не заполнено. Рекомендуется заполнить, если есть возможность. +// Записывается в сертификат в поле Пользователь, может быть изменено в дальнейшем. +// +// * Фамилия - Строка - (возвращаемое значение) фамилия сотрудника. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * Имя - Строка - (возвращаемое значение) имя сотрудника. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * Отчество - Строка - (возвращаемое значение) отчество сотрудника. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * ДатаРождения - Дата - (возвращаемое значение) дата рождения сотрудника. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * Пол - Строка - (возвращаемое значение) пол сотрудника "Мужской" или "Женский". +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * МестоРождения - Строка - (возвращаемое значение) описание места рождения сотрудника. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * Гражданство - СправочникСсылка.СтраныМира - (возвращаемое значение) гражданство сотрудника. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * СтраховойНомерПФР - Строка - (возвращаемое значение) СНИЛС сотрудника. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * Должность - Строка - (возвращаемое значение) должность сотрудника в организации. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * Подразделение - Строка - (возвращаемое значение) обособленное подразделение организации, +// в котором работает сотрудник. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// +// * ДокументВид - Строка - (возвращаемое значение) строки "21" или "91". 21 - паспорт гражданина РФ, +// 91 - иной документ предусмотренный законодательством РФ (по СПДУЛ). +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// +// * ДокументНомер - Строка - (возвращаемое значение) номер документа сотрудника (серия и +// номер для паспорта гражданина РФ). +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// +// * ДокументКемВыдан - Строка - (возвращаемое значение) кем выдан документ сотрудника. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// +// * ДокументКодПодразделения - Строка - (возвращаемое значение) - код подразделения, если вид документа 21. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// +// * ДокументДатаВыдачи - Дата - (возвращаемое значение) дата выдачи документа сотрудника. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// +// * ЭлектроннаяПочта - Строка - (возвращаемое значение) адрес электронной почты сотрудника в формате XML, как его +// возвращает функция КонтактнаяИнформацияВXML общего модуля УправлениеКонтактнойИнформацией. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// +Процедура ПриЗаполненииРеквизитовВладельцаВЗаявленииНаСертификат(Параметры) Экспорт + + + +КонецПроцедуры + +// Вызывается в форме добавления заявления на новый сертификат для заполнения реквизитов руководителя и при его выборе. +// Только для юридического лица. Для индивидуального предпринимателя не требуется. +// +// Параметры: +// Параметры - Структура - со свойствами: +// * Организация - СправочникСсылка.Организации - выбранная организация, на которую оформляется сертификат. +// - Неопределено, если ОпределяемыйТип.Организации не настроен. +// +// * ТипРуководителя - ОписаниеТипов - (возвращаемое значение) содержит ссылочные типы из которых можно сделать выбор. +// - Неопределено - (возвращаемое значение) выбор партнера не поддерживается. +// +// * Руководитель - ТипРуководителя - это значение, выбранное пользователем по которому нужно заполнить должность. +// - Неопределено - ТипРуководителя не определен. +// - ЛюбаяСсылка - (возвращаемое значение) - руководитель, который будет подписывать документы. +// +// * Представление - Строка - (возвращаемое значение) представление руководителя. +// - Неопределено - получить представление от значения Руководитель. +// +// * Должность - Строка - (возвращаемое значение) - должность руководителя, который будет подписывать документы. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * Основание - Строка - (возвращаемое значение) - основание на котором действует +// должностное лицо (устав, доверенность, ...). +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +Процедура ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Параметры) Экспорт + + + +КонецПроцедуры + +// Вызывается в форме добавления заявления на новый сертификат для заполнения реквизитов партнера и при его выборе. +// +// Параметры: +// Параметры - Структура - со свойствами: +// * Организация - СправочникСсылка.Организации - выбранная организация, на которую оформляется сертификат. +// - Неопределено, если ОпределяемыйТип.Организации не настроен. +// +// * ТипПартнера - ОписаниеТипов - содержит ссылочные типы из которых можно сделать выбор. +// - Неопределено - выбор партнера не поддерживается. +// +// * Партнер - ТипПартнера - это контрагент (обслуживающая организация), выбранный пользователем, +// по которому нужно заполнить реквизиты, описанные ниже. +// - Неопределено - ТипПартнера не определен. +// - ЛюбаяСсылка - (возвращаемое значение) - значение сохраняемое в заявке для истории. +// +// * Представление - Строка - (возвращаемое значение) представление партнера. +// - Неопределено - получить представление от значения Партнер. +// +// * ЭтоИндивидуальныйПредприниматель - Булево - (возвращаемое значение): +// Ложь - начальное значение - указанный партнер является юридическим лицом, +// Истина - указанный партнер является индивидуальным предпринимателем. +// +// * ИНН - Строка - (возвращаемое значение) ИНН партнера. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +// * КПП - Строка - (возвращаемое значение) КПП партнера. +// - Неопределено - значение не указано, не изменять имеющееся значение. +// +Процедура ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Параметры) Экспорт + + + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗаявлениеНаСертификатПереопределяемый/ЗаявлениеНаСертификатПереопределяемый.mdo b/SSL/src/CommonModules/ЗаявлениеНаСертификатПереопределяемый/ЗаявлениеНаСертификатПереопределяемый.mdo new file mode 100644 index 000000000..36d52411e --- /dev/null +++ b/SSL/src/CommonModules/ЗаявлениеНаСертификатПереопределяемый/ЗаявлениеНаСертификатПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + ЗаявлениеНаСертификатПереопределяемый + + ru + Заявление на сертификат переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl index 37bd087d5..b2cec5e8b 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Интеграция подсистем библиотеки друг с другом. // Здесь размещена обработка программных событий, возникающих в подсистемах-источниках, @@ -1265,14 +1273,14 @@ #Область Печать -Функция ПриПодготовкеСпискаМакетовВФорматеОфисныхДокументовФормируемыхНаСервере(СписокМакетов) Экспорт +Процедура ПриПодготовкеСпискаМакетовВФорматеОфисныхДокументовФормируемыхНаСервере(СписокМакетов) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных"); МодульЗащитаПерсональныхДанных.ПриПодготовкеСпискаМакетовВФорматеОфисныхДокументовФормируемыхНаСервере(СписокМакетов); КонецЕсли; -КонецФункции +КонецПроцедуры #КонецОбласти @@ -1427,6 +1435,11 @@ МодульУправлениеПечатью.ПриОпределенииНазначенияРолей(НазначениеРолей); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); МодульТекущиеДелаСлужебный.ПриОпределенииНазначенияРолей(НазначениеРолей); @@ -1582,7 +1595,7 @@ // Получает варианты переданного отчета и их представления. // // Параметры: -// ОтчетМетаданные - Объект метаданных - отчет, для которого получаются варианты отчета. +// ПолноеИмяОтчета - Строка - отчет, для которого получаются варианты отчета. // ПользовательИнформационнойБазы - Строка - имя пользователя информационной базы. // СведенияОВариантахОтчетов - ТаблицаЗначений - таблица, в которую сохраняется информация о варианте отчета. // * КлючОбъекта - Строка - ключ отчета вида "Отчет.НазваниеОтчета". @@ -1591,11 +1604,11 @@ // * СтандартнаяОбработка - Булево - если Истина - вариант отчета сохранен в стандартном хранилище. // СтандартнаяОбработка - Булево - если Истина - вариант отчета сохранен в стандартном хранилище. // -Процедура ПриПолученииПользовательскихВариантовОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, СведенияОВариантахОтчетов, СтандартнаяОбработка) Экспорт +Процедура ПриПолученииПользовательскихВариантовОтчетов(ПолноеИмяОтчета, ПользовательИнформационнойБазы, СведенияОВариантахОтчетов, СтандартнаяОбработка) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - МодульВариантыОтчетов.ПользовательскиеВариантыОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, + МодульВариантыОтчетов.ПользовательскиеВариантыОтчетов(ПолноеИмяОтчета, ПользовательИнформационнойБазы, СведенияОВариантахОтчетов, СтандартнаяОбработка); КонецЕсли; @@ -1932,6 +1945,11 @@ МодульВерсионированиеОбъектов.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса") Тогда МодульКурсыВалютСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса"); МодульКурсыВалютСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам); @@ -2136,6 +2154,25 @@ #КонецОбласти +#Область Свойства + +// См. УправлениеСвойствамиПереопределяемый.ПриСозданииПредопределенныхНаборовСвойств. +Процедура ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов) Экспорт + ПользователиСлужебный.ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + #Область ТекущиеДела // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl index a0f6e3bd9..3aa614015 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Интеграция подсистем библиотеки друг с другом. // Здесь размещена обработка программных событий, возникающих в подсистемах-источниках, diff --git a/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl b/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl index 8915c8310..657bbf6b9 100644 --- a/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервиса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Интеграция с Библиотекой технологий сервиса (БТС) // Здесь размещена обработка программных событий, возникающих в подсистемах БСП, @@ -209,7 +217,7 @@ КонецПроцедуры -// См. ПриОтправкеДанныхГлавному в синтаксис-помощнике. +// См. ПриОтправкеДанныхГлавному в синтакс-помощнике. Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда @@ -219,7 +227,7 @@ КонецПроцедуры -// См. ПриОтправкеДанныхПодчиненному в синтаксис-помощнике. +// См. ПриОтправкеДанныхПодчиненному в синтакс-помощнике. Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда @@ -229,7 +237,7 @@ КонецПроцедуры -// См. ПриПолученииДанныхОтГлавного в синтаксис-помощнике. +// См. ПриПолученииДанныхОтГлавного в синтакс-помощнике. Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда @@ -239,7 +247,7 @@ КонецПроцедуры -// См. ПриПолученииДанныхОтПодчиненного в синтаксис-помощнике. +// См. ПриПолученииДанныхОтПодчиненного в синтакс-помощнике. Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда @@ -445,24 +453,6 @@ КонецПроцедуры -// Вызывается при получении разрешений сессии безопасного режима. -// -// Параметры: -// КлючСессии - УникальныйИдентификатор, -// ОписанияРазрешений - ТаблицаЗначений: -// * ВидРазрешения - Строка, -// * Параметры - ХранилищеЗначения, -// СтандартнаяОбработка - Булево, флаг необходимости выполнения стандартной обработки. -// -Процедура ПриПолученииРазрешенийСессииБезопасногоРежима(Знач КлючСессии, ОписанияРазрешений, СтандартнаяОбработка) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда - МодульТехнологияСервисаИнтеграцияСБСП = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервисаИнтеграцияСБСП"); - МодульТехнологияСервисаИнтеграцияСБСП.ПриПолученииРазрешенийСессииБезопасногоРежима(КлючСессии, ОписанияРазрешений, СтандартнаяОбработка); - КонецЕсли; - -КонецПроцедуры - // Вызывается перед записью изменений регламентного задания дополнительных отчетов и обработок в модели сервиса. // // Параметры: diff --git a/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервисаКлиент/Module.bsl b/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервисаКлиент/Module.bsl index 48ee45272..9d85f430d 100644 --- a/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияСТехнологиейСервисаКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Интеграция с Библиотекой технологий сервиса (БТС) // Здесь размещена обработка программных событий, возникающих в подсистемах БСП, diff --git a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl index d38af7528..87436e628 100644 --- a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает поддерживаемые версии интерфейса сообщений, поддерживаемые текущей diff --git a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый/Module.bsl index 146c2a5e4..7516b7bbe 100644 --- a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Заполняет переданный массив общими модулями, которые являются обработчиками интерфейсов diff --git a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl index db4226de9..254ab9bf1 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Актуализирует данные подсистемы с учетом режима работы программы. @@ -102,7 +110,7 @@ // Актуализирует данные первого показа. Процедура ОперативноеОбновлениеОбщихДанных() Экспорт - ОбновитьКэшПервогоПоказа(Обработки.ИнформацияПриЗапуске); + ОбновитьКэшПервогоПоказа(Обработки.ИнформацияПриЗапуске.Создать()); КонецПроцедуры @@ -322,16 +330,29 @@ // Извлекает пакет файлов из макета обработки ИнформацияПриЗапуске. Функция ИзвлечьФайлыПакета(НосительМакетов, ИмяМакета) Экспорт - КаталогВременныхФайлов = ОбщегоНазначения.СоздатьВременныйКаталог("extras"); + КаталогВременныхФайлов = ФайловаяСистема.СоздатьВременныйКаталог("extras"); // Извлечение страницы АрхивПолноеИмя = КаталогВременныхФайлов + "tmp.zip"; Попытка - ДвоичныеДанные = НосительМакетов.ПолучитьМакет(ИмяМакета); + КоллекцияМакетов = НосительМакетов.Метаданные().Макеты; + + ЛокализованноеИмяМакета = ИмяМакета + "_" + ТекущийЯзык().КодЯзыка; + Макет = КоллекцияМакетов.Найти(ЛокализованноеИмяМакета); + Если Макет = Неопределено Тогда + ЛокализованноеИмяМакета = ИмяМакета + "_" + Метаданные.ОсновнойЯзык.КодЯзыка; + Макет = КоллекцияМакетов.Найти(ЛокализованноеИмяМакета); + КонецЕсли; + + Если Макет = Неопределено Тогда + ЛокализованноеИмяМакета = ИмяМакета; + КонецЕсли; + + ДвоичныеДанные = НосительМакетов.ПолучитьМакет(ЛокализованноеИмяМакета); ДвоичныеДанные.Записать(АрхивПолноеИмя); Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'Информация при запуске'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Информация при запуске'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -396,7 +417,7 @@ КонецЦикла; // Удаление временных файлов (все файлы были помещены во временные хранилища). - ОбщегоНазначения.УдалитьВременныйКаталог(КаталогВременныхФайлов); + ФайловаяСистема.УдалитьВременныйКаталог(КаталогВременныхФайлов); Результат = Новый Структура; Результат.Вставить("Картинки", Картинки); diff --git a/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl index 5fc1e39bd..5754264ec 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Вызывается из обработчика ожидания, открывает окно информации. @@ -5,7 +13,7 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); - МодульОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина, "ВремяОткрытияИнформацииПриЗапуске"); + МодульОценкаПроизводительностиКлиент.ЗамерВремени("ВремяОткрытияИнформацииПриЗапуске"); КонецЕсли; ОткрытьФорму("Обработка.ИнформацияПриЗапуске.Форма"); diff --git a/SSL/src/CommonModules/ИнформацияПриЗапускеПереопределяемый/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапускеПереопределяемый/Module.bsl index 9a7937156..85146ba17 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапускеПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапускеПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определение настроек отображения информации при запуске. diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index 70c07f900..adda67645 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает даты, которые отличаются от указанной даты ДатаОт на количество дней, @@ -570,21 +578,14 @@ #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать ОсновнойПроизводственныйКалендарь. -// Возвращает производственный календарь, составленный в соответствии с ст. 112 ТК РФ. +// Возвращает основной производственный календарь. // // Возвращаемое значение: -// СправочникСсылка.ПроизводственныеКалендари, Неопределено - производственный календарь РФ или -// Неопределено, в случае если он не обнаружен. +// СправочникСсылка.ПроизводственныеКалендари, Неопределено - основной производственный календарь. // Функция ПроизводственныйКалендарьРоссийскойФедерации() Экспорт - ПроизводственныйКалендарь = Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ"); - - Если ПроизводственныйКалендарь.Пустая() Тогда - Возврат Неопределено; - КонецЕсли; - - Возврат ПроизводственныйКалендарь; + Возврат ОсновнойПроизводственныйКалендарь(); КонецФункции @@ -838,7 +839,7 @@ КонецЕсли; Если Не ПустаяСтрока(ДанныеФайлов.КодОшибки) Тогда - ИмяСобытия = НСтр("ru = 'Календарные графики.Получение файла классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ИмяСобытия = НСтр("ru = 'Календарные графики.Получение файла классификатора'", ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации( ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, @@ -1067,7 +1068,7 @@ Процедура ПроверитьНачалоЭлемента(Знач ЧтениеXML, Знач Имя) Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.Имя <> Имя Тогда - ИмяСобытия = НСтр("ru = 'Календарные графики.Обработка файла классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ИмяСобытия = НСтр("ru = 'Календарные графики.Обработка файла классификатора'", ОбщегоНазначения.КодОсновногоЯзыка()); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверный формат файла данных. Ожидается начало элемента %1'"), Имя); @@ -1080,7 +1081,7 @@ Процедура ПроверитьКонецЭлемента(Знач ЧтениеXML, Знач Имя) Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Или ЧтениеXML.Имя <> Имя Тогда - ИмяСобытия = НСтр("ru = 'Календарные графики.Обработка файла классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ИмяСобытия = НСтр("ru = 'Календарные графики.Обработка файла классификатора'", ОбщегоНазначения.КодОсновногоЯзыка()); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неверный формат файла данных. Ожидается конец элемента %1'"), Имя); diff --git a/SSL/src/CommonModules/КалендарныеГрафикиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиВМоделиСервиса/Module.bsl index dbb5a3886..b05a51e28 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиВМоделиСервиса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем diff --git a/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl index d4782ca11..10630d67f 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается при изменении данных производственных календарей. diff --git a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl index b64e29d70..21c8a0fad 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -76,7 +83,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Календарные графики.Распространение производственных календарей'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Календарные графики.Распространение производственных календарей'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; diff --git a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl index 5ef85a730..2e3a29aa3 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -416,14 +424,19 @@ // Форма - УправляемаяФорма - форма списка. // ИменаСписков - Строка - Имена динамических списков через запятую. // ДополнительныеСвойства - Структура, Неопределено - дополнительные свойства. +// * ИмяПоляИндикатораПроблем - Строка - имя поля динамического списка, которое +// будет использовано для вывода индикатора +// наличия проблем у объекта. // Процедура ПриСозданииНаСервереФормыСписка(Форма, ИменаСписков, ДополнительныеСвойства = Неопределено) Экспорт ИмяПроцедуры = "КонтрольВеденияУчета.ПриСозданииНаСервереФормыСписка"; ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Форма", Форма, Тип("УправляемаяФорма")); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ИменаСписков", ИменаСписков, Тип("Строка")); + ИмяПоляИндикатораПроблем = Неопределено; Если ДополнительныеСвойства <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ДополнительныеСвойства", ДополнительныеСвойства, Тип("Структура")); + ДополнительныеСвойства.Свойство("ИмяПоляИндикатораПроблем", ИмяПоляИндикатораПроблем); КонецЕсли; Если Не ПодсистемаДоступна() Тогда @@ -466,8 +479,13 @@ Если НачалоЗапроса <> "ВЫБРАТЬ" Тогда Продолжить; КонецЕсли; - - ИмяКолонки = "ИндикаторОшибки_" + ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Форма.ИмяФормы + ПолучитьРазделительПути() + ИмяСписка); + + Если ИмяПоляИндикатораПроблем = Неопределено Тогда + ИмяКолонки = "ИндикаторОшибки_" + ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Форма.ИмяФормы + ПолучитьРазделительПути() + ИмяСписка); + Иначе + ИмяКолонки = ИмяПоляИндикатораПроблем; + КонецЕсли; + РазделенноеИмя = СтрРазделить(ОсновнаяТаблица, "."); ДополнительныеСвойстваКомпоновщика = ТекущийСписок.КомпоновщикНастроек.Настройки.ДополнительныеСвойства; @@ -476,11 +494,15 @@ ДополнительныеСвойстваКомпоновщика.Вставить("ИмяОбъектаМетаданных", РазделенноеИмя.Получить(1)); ДополнительныеСвойстваКомпоновщика.Вставить("ИмяСписка", ИмяСписка); - СтруктураСвойствДинамическогоСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); - СтруктураСвойствДинамическогоСписка.ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ 0 КАК %1, %2", - ИмяКолонки, Прав(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 7)); - ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(ТаблицаФормы, СтруктураСвойствДинамическогоСписка); - + Если ИмяПоляИндикатораПроблем = Неопределено Тогда + СтруктураСвойствДинамическогоСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + ДобавляемоеПоле = " 0 КАК " + ИмяКолонки + ","; + ЗапросМассивом = СтрРазделить(ТекстЗапроса, Символы.ПС); + ЗапросМассивом.Вставить(1, ДобавляемоеПоле); + СтруктураСвойствДинамическогоСписка.ТекстЗапроса = СтрСоединить(ЗапросМассивом, Символы.ПС); + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(ТаблицаФормы, СтруктураСвойствДинамическогоСписка); + КонецЕсли; + ПараметрыКолонкиИндикации = Новый Структура; КонтрольВеденияУчетаСлужебный.ПриОпределенииПараметровКолонкиИндикации(ПараметрыКолонкиИндикации, ОсновнаяТаблица); diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl index 605606ec6..794c0d2ec 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаКлиент/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс @@ -82,9 +89,8 @@ Иначе ТаблицаФормы = Форма.Элементы.Найти(ДополнительныеСвойства.ИмяСписка); - КолонкаИндикатора = ДополнительныеСвойства.КолонкаИндикатора; - Если Поле.Имя <> КолонкаИндикатора Тогда + Если Поле.Имя <> ДополнительныеСвойства.КолонкаИндикатора Тогда СтандартнаяОбработка = Истина; Иначе СтандартнаяОбработка = Ложь; diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl index 973c60084..4adab5ccc 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаПереопределяемый/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl index d0089c287..a090723d8 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -148,40 +155,16 @@ СводнаяИнформация.Вставить("Количество", 0); СводнаяИнформация.Вставить("ЕстьОшибки", Ложь); - МассивВидовПроверок = Новый Массив; + ВидыПроверок = Новый Массив; Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда - МассивВидовПроверок.Добавить(ВидПроверок); + ВидыПроверок.Добавить(ВидПроверок); ИначеЕсли ТипЗнч(ВидПроверок) = Тип("Строка") Тогда ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок); - МассивВидовПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); + ВидыПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); Иначе - - КоличествоПараметров = ВидПроверок.Количество(); - Если КоличествоПараметров = 1 Тогда - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0)); - ИначеЕсли КоличествоПараметров = 2 Тогда - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), ВидПроверок.Получить(1)); - ИначеЕсли КоличествоПараметров = 3 Тогда - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), - ВидПроверок.Получить(1), ВидПроверок.Получить(2)); - ИначеЕсли КоличествоПараметров = 4 Тогда - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), - ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3)); - ИначеЕсли КоличествоПараметров = 5 Тогда - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), - ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3), ВидПроверок.Получить(4)); - Иначе - МассивОстатков = Новый Массив; - Для Индекс = 5 По КоличествоПараметров Цикл - МассивОстатков.Добавить(ВидПроверок.Получить(Индекс)); - КонецЦикла; - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), - ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3), ВидПроверок.Получить(4), МассивОстатков); - КонецЕсли; - - МассивВидовПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); - + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверкиИзМассива(ВидПроверок); + ВидыПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); КонецЕсли; Запрос = Новый Запрос( @@ -195,10 +178,11 @@ |ИЗ | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета |ГДЕ - | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему - | И РезультатыПроверкиУчета.ВидПроверки В (&МассивВидовПроверок)"); + | РезультатыПроверкиУчета.ПравилоПроверки.ПометкаУдаления = ЛОЖЬ + | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ВидПроверки В (&ВидыПроверок)"); - Запрос.УстановитьПараметр("МассивВидовПроверок", МассивВидовПроверок); + Запрос.УстановитьПараметр("ВидыПроверок", ВидыПроверок); Результат = Запрос.Выполнить().Выбрать(); Результат.Следующий(); @@ -221,43 +205,19 @@ КолонкиПодробнойИнформации.Добавить("Выявлено", Новый ОписаниеТипов("Дата")); КолонкиПодробнойИнформации.Добавить("ДополнительнаяИнформация", Новый ОписаниеТипов("ХранилищеЗначения")); - МассивВидовПроверок = Новый Массив; + ВидыПроверок = Новый Массив; Если ТипЗнч(ВидПроверок) = Тип("СправочникСсылка.ВидыПроверок") Тогда - МассивВидовПроверок.Добавить(ВидПроверок); + ВидыПроверок.Добавить(ВидПроверок); ИначеЕсли ТипЗнч(ВидПроверок) = Тип("Строка") Тогда ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок); - МассивВидовПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); + ВидыПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); Иначе - - КоличествоПараметров = ВидПроверок.Количество(); - Если КоличествоПараметров = 1 Тогда - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0)); - ИначеЕсли КоличествоПараметров = 2 Тогда - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), ВидПроверок.Получить(1)); - ИначеЕсли КоличествоПараметров = 3 Тогда - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), - ВидПроверок.Получить(1), ВидПроверок.Получить(2)); - ИначеЕсли КоличествоПараметров = 4 Тогда - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), - ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3)); - ИначеЕсли КоличествоПараметров = 5 Тогда - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), - ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3), ВидПроверок.Получить(4)); - Иначе - МассивОстатков = Новый Массив; - Для Индекс = 5 По КоличествоПараметров Цикл - МассивОстатков.Добавить(ВидПроверок.Получить(Индекс)); - КонецЦикла; - ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверки(ВидПроверок.Получить(0), - ВидПроверок.Получить(1), ВидПроверок.Получить(2), ВидПроверок.Получить(3), ВидПроверок.Получить(4), МассивОстатков); - КонецЕсли; - - МассивВидовПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); - + ПараметрыВыполненияПроверки = ПараметрыВыполненияПроверкиИзМассива(ВидПроверок); + ВидыПроверок = ВидыПроверок(ПараметрыВыполненияПроверки, ПоискПоТочномуСоответствию); КонецЕсли; - Если МассивВидовПроверок.Количество() = 0 Тогда + Если ВидыПроверок.Количество() = 0 Тогда Возврат ПодробнаяИнформация; КонецЕсли; @@ -274,10 +234,11 @@ |ИЗ | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета |ГДЕ - | НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему - | И РезультатыПроверкиУчета.ВидПроверки В(&МассивВидовПроверок)"); + | РезультатыПроверкиУчета.ПравилоПроверки.ПометкаУдаления = ЛОЖЬ + | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ВидПроверки В(&ВидыПроверок)"); - Запрос.УстановитьПараметр("МассивВидовПроверок", МассивВидовПроверок); + Запрос.УстановитьПараметр("ВидыПроверок", ВидыПроверок); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда @@ -916,7 +877,7 @@ Если Не ЗначениеЗаполнено(ПроверкаПоИдентификатору) Тогда ПроверкаОбъект = Справочники.ПравилаПроверкиУчета.СоздатьЭлемент(); - ПроверкаОбъект.СпособВыполнения = Перечисления.СпособВыполненияПроверки.ПоОбщемуРасписанию; + ПроверкаОбъект.СпособВыполнения = Перечисления.СпособыВыполненияПроверки.ПоОбщемуРасписанию; ПроверкаОбъект.ВажностьПроблемы = Перечисления.ВажностьПроблемыУчета.Ошибка; Иначе @@ -1152,21 +1113,30 @@ Возврат; КонецЕсли; - КэшБитыхСсылок = Новый Соответствие; - ПараметрыПроверки.Вставить("КэшСсылок", Новый Соответствие); + ПроверенныеСсылки = Новый Соответствие; + + ПараметрыВыполненияПроверки = ПрочитанныеПараметры(ПараметрыПроверки.ПараметрыВыполненияПроверки); + Если ПараметрыВыполненияПроверки <> Неопределено Тогда + Если ПараметрыВыполненияПроверки.ОбластьПроверки = "Регистры" Тогда + НайтиБитыеСсылкиВРегистрах(ПараметрыВыполненияПроверки.ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); + Иначе + НайтиБитыеСсылки(ПараметрыВыполненияПроверки.ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); + КонецЕсли; + + Возврат; + КонецЕсли; Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); КонецЦикла; КонецЦикла; Для Каждого ВидМетаданных Из РегистрыКакОбъектыМетаданных() Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл - НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); КонецЦикла; КонецЦикла; - ПараметрыПроверки.Удалить("КэшСсылок"); КонецПроцедуры @@ -1174,6 +1144,17 @@ // Процедура ПроверитьНезаполненныеОбязательныеРеквизиты(Проверка, ПараметрыПроверки) Экспорт + ПараметрыВыполненияПроверки = ПрочитанныеПараметры(ПараметрыПроверки.ПараметрыВыполненияПроверки); + Если ПараметрыВыполненияПроверки <> Неопределено Тогда + Если ПараметрыВыполненияПроверки.ОбластьПроверки = "Регистры" Тогда + НайтиНезаполненныеОбязательныеРеквизитыВРегистрах(ПараметрыВыполненияПроверки.ОбъектМетаданных, ПараметрыПроверки); + Иначе + НайтиНезаполненныеОбязательныеРеквизиты(ПараметрыВыполненияПроверки.ОбъектМетаданных, ПараметрыПроверки); + КонецЕсли; + + Возврат; + КонецЕсли; + Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл @@ -1528,7 +1509,7 @@ |ИЗ | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета |ГДЕ - | ПравилаПроверкиУчета.СпособВыполнения = ЗНАЧЕНИЕ(Перечисление.СпособВыполненияПроверки.ПоОбщемуРасписанию) + | ПравилаПроверкиУчета.СпособВыполнения = ЗНАЧЕНИЕ(Перечисление.СпособыВыполненияПроверки.ПоОбщемуРасписанию) | И ПравилаПроверкиУчета.Использование"); Результат = Запрос.Выполнить().Выбрать(); @@ -1621,22 +1602,23 @@ | И ПравилаПроверкиУчета.Родитель <> ЗНАЧЕНИЕ(Справочник.ПравилаПроверкиУчета.ПустаяСсылка)"); Запрос.УстановитьПараметр("КонтекстПроверокВеденияУчета", КонтекстПроверокВеденияУчета); - Результат = Запрос.Выполнить().Выгрузить(); + ВсеПроверки = Запрос.Выполнить().Выгрузить(); - МассивПроверок = Новый Массив; - ЦелевыеРодители = Результат.Скопировать(Результат.НайтиСтроки(Новый Структура("НазначениеЗапроса", "ВыборкаГруппСУчетомКонтекста")), "Родитель, Проверка"); + Результат = Новый Массив; + РодительскиеПроверки = ВсеПроверки.Скопировать(ВсеПроверки.НайтиСтроки( + Новый Структура("НазначениеЗапроса", "ВыборкаГруппСУчетомКонтекста")), "Родитель, Проверка"); - Для Каждого СтрокаРезультата Из Результат Цикл + Для Каждого СтрокаРезультата Из ВсеПроверки Цикл Если СтрокаРезультата.НазначениеЗапроса = "ВыборкаЭлементовБезРодителейСУчетомКонтекста" Или (СтрокаРезультата.НазначениеЗапроса = "ВыборкаЭлементовСРодителямиБезУчетаКонтекста" - И ЦелевыеРодители.Найти(СтрокаРезультата.Родитель) <> Неопределено) Тогда - МассивПроверок.Добавить(СтрокаРезультата.Проверка); + И РодительскиеПроверки.Найти(СтрокаРезультата.Родитель) <> Неопределено) Тогда + Результат.Добавить(СтрокаРезультата.Проверка); КонецЕсли; КонецЦикла; - Возврат ОбщегоНазначенияКлиентСервер.СвернутьМассив(МассивПроверок); + Возврат ОбщегоНазначенияКлиентСервер.СвернутьМассив(Результат); КонецФункции @@ -1648,7 +1630,15 @@ НайденКрайнийЗначащийПараметр = Ложь; Для Индекс = 2 По КоличествоСвойств Цикл - ЗначениеПараметра = Вычислить("Свойство" + Формат(Индекс, "ЧГ=0")); + Если Индекс = 2 Тогда + ЗначениеПараметра = Свойство2; + ИначеЕсли Индекс = 3 Тогда + ЗначениеПараметра = Свойство3; + ИначеЕсли Индекс = 4 Тогда + ЗначениеПараметра = Свойство4; + ИначеЕсли Индекс = 5 Тогда + ЗначениеПараметра = Свойство5; + КонецЕсли; Если ЗначениеПараметра = Неопределено Тогда Если Не НайденКрайнийЗначащийПараметр Тогда НайденКрайнийЗначащийПараметр = Истина; @@ -1668,8 +1658,15 @@ ВсеПараметры.Добавить(Свойство1); Для Индекс = 2 По КоличествоСвойств Цикл - ИмяСвойства = "Свойство" + Формат(Индекс, "ЧГ=0"); - ЗначениеСвойства = Вычислить(ИмяСвойства); + Если Индекс = 2 Тогда + ЗначениеСвойства = Свойство2; + ИначеЕсли Индекс = 3 Тогда + ЗначениеСвойства = Свойство3; + ИначеЕсли Индекс = 4 Тогда + ЗначениеСвойства = Свойство4; + ИначеЕсли Индекс = 5 Тогда + ЗначениеСвойства = Свойство5; + КонецЕсли; Если ЗначениеСвойства = Неопределено Тогда Прервать; КонецЕсли; @@ -1713,126 +1710,130 @@ #Область КонтрольСсылочнойЦелостности -Процедура НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки) - РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок(); + СсылочныеРеквизиты = СсылочныеРеквизитыОбъекта(ОбъектМетаданных); + Если СсылочныеРеквизиты.Количество() = 0 Тогда + Возврат; + КонецЕсли; - Реквизиты = ОбъектМетаданных.Реквизиты; - РеквизитыОбъекта = СсылочныеРеквизитыОбъекта(ОбъектМетаданных); - РеквизитыТабличныхЧастейОбъекта = СсылочныеРеквизитыТабличныхЧастейОбъекта(ОбъектМетаданных); - - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1000 - | ОбъектМетаданных.Ссылка КАК ПроблемныйОбъект - |ИЗ - | &ОбъектМетаданных КАК ОбъектМетаданных - |ГДЕ - | ОбъектМетаданных.Ссылка > &Ссылка - | - |УПОРЯДОЧИТЬ ПО - | ОбъектМетаданных.Ссылка"; + Запрос = Новый Запрос; + ЕстьОграничениеПоДате = ЗначениеЗаполнено(ПараметрыПроверки.ДатаНачалаПроверки) + И (ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных) Или ОбщегоНазначения.ЭтоЗадача(ОбъектМетаданных) + Или ОбщегоНазначения.ЭтоБизнесПроцесс(ОбъектМетаданных)); + + Если ЕстьОграничениеПоДате Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка КАК ПроблемныйОбъект, + | &СсылочныеРеквизиты + | ,&РеквизитыТабличныхЧастей + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Ссылка > &Ссылка + | И ОбъектМетаданных.Дата > &ДатаНачалаПроверки + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Ссылка"; + Запрос.УстановитьПараметр("ДатаНачалаПроверки", ПараметрыПроверки.ДатаНачалаПроверки); + Иначе + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка КАК ПроблемныйОбъект, + | &СсылочныеРеквизиты + | ,&РеквизитыТабличныхЧастей + |ИЗ + | &ОбъектМетаданных КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Ссылка > &Ссылка + | + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Ссылка"; + КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&СсылочныеРеквизиты", СтрСоединить(СсылочныеРеквизиты, ",")); - Запрос = Новый Запрос(ТекстЗапроса); + РеквизитыТабличныхЧастейОбъекта = СсылочныеРеквизитыТабличныхЧастейОбъекта(ОбъектМетаданных); + Если РеквизитыТабличныхЧастейОбъекта.Количество() > 0 Тогда + Шаблон = "ОбъектМетаданных.%1.(%2) КАК %1"; + ЗапросТабличныеЧасти = ""; + Для Каждого РеквизитыТабличнойЧасти Из РеквизитыТабличныхЧастейОбъекта Цикл + ИмяТабличнойЧасти = РеквизитыТабличнойЧасти.Ключ; + СтрокаРеквизиты = СтрСоединить(РеквизитыТабличнойЧасти.Значение, ","); + ЗаполненныйШаблон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + ИмяТабличнойЧасти, + СтрокаРеквизиты); + + Если ЗначениеЗаполнено(ЗапросТабличныеЧасти) Тогда + ЗапросТабличныеЧасти = ЗапросТабличныеЧасти + "," + Символы.ПС + ЗаполненныйШаблон; + Иначе + ЗапросТабличныеЧасти = ЗаполненныйШаблон; + КонецЕсли; + КонецЦикла; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&РеквизитыТабличныхЧастей", ЗапросТабличныеЧасти); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&РеквизитыТабличныхЧастей", ""); + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Ссылка", ""); + Результат = Запрос.Выполнить().Выгрузить(); - Результат = Запрос.Выполнить().Выгрузить(); - ОграничениеПоДате = ПараметрыПроверки.ДатаНачалаПроверки; + МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); + ЕстьОтветственный = ОбъектМетаданных.Реквизиты.Найти("Ответственный") <> Неопределено; Пока Результат.Количество() > 0 Цикл Для Каждого СтрокаРезультата Из Результат Цикл - СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; - - Если ЗначениеЗаполнено(ОграничениеПоДате) - И ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных) - И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Дата") < ОграничениеПоДате Тогда - Продолжить; - КонецЕсли; - УточнениеПроблемы = ""; - Ссылки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаОбъект, РеквизитыОбъекта); - Для Каждого СсылочныйРеквизит Из Ссылки Цикл - - ТекущаяСсылка = СсылочныйРеквизит.Значение; - - Если Не ЗначениеЗаполнено(ТекущаяСсылка) Или Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда - Продолжить; - КонецЕсли; - - ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; - Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - ОбнаруженаБитаяСсылка = Истина; - КонецЕсли; - - Если ОбнаруженаБитаяСсылка Тогда + СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; + Для Индекс = 1 По Результат.Колонки.Количество() - 1 Цикл + ПроверяемаяСсылка = СтрокаРезультата[Индекс]; + Если ЭтоБитаяСсылка(ПроверяемаяСсылка, ПроверенныеСсылки) Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='У объекта ""%1"" в реквизите ""%2"" указана ссылка на несуществующий элемент: ""%3"".'"), - СсылкаНаОбъект, СсылочныйРеквизит.Ключ, ТекущаяСсылка); - Иначе - Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда - ПараметрыПроверки.КэшСсылок.Очистить(); - КонецЕсли; - ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, ""); + СсылкаНаОбъект, + Результат.Колонки[Индекс].Имя, + ПроверяемаяСсылка); КонецЕсли; - КонецЦикла; - Если РеквизитыТабличныхЧастейОбъекта.Количество() <> 0 Тогда - - РезультатыЗапросовПоРеквизитамТЧ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаОбъект, РеквизитыТабличныхЧастейОбъекта); - Для Каждого РезультатЗапросаПоРеквизитамТЧ Из РезультатыЗапросовПоРеквизитамТЧ Цикл + Если ПроверенныеСсылки.Количество() >= МаксимальноеКоличество Тогда + ПроверенныеСсылки.Очистить(); + КонецЕсли; + + Если РеквизитыТабличныхЧастейОбъекта.Количество() > 0 Тогда + Для Каждого РеквизитыТабличнойЧасти Из РеквизитыТабличныхЧастейОбъекта Цикл - ТекущийРезультатЗапросаПоРеквизитамТЧ = РезультатЗапросаПоРеквизитамТЧ.Значение.Выгрузить(); - КолонкиТекущегоРезультата = ТекущийРезультатЗапросаПоРеквизитамТЧ.Колонки; - ТекущийНомерСтроки = 1; + ТабличнаяЧастьОбъекта = СтрокаРезультата[РеквизитыТабличнойЧасти.Ключ]; + ТекущийНомерСтроки = 1; - Для Каждого СтрокаТЧ Из ТекущийРезультатЗапросаПоРеквизитамТЧ Цикл - - Для Каждого ТекущаяКолонка Из КолонкиТекущегоРезультата Цикл - + Для Каждого СтрокаТЧ Из ТабличнаяЧастьОбъекта Цикл + Для Каждого ТекущаяКолонка Из ТабличнаяЧастьОбъекта.Колонки Цикл ИмяРеквизитаТЧ = ТекущаяКолонка.Имя; - ТекущаяСсылка = СтрокаТЧ[ИмяРеквизитаТЧ]; - Если Не ЗначениеЗаполнено(ТекущаяСсылка) Или Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; - Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - ОбнаруженаБитаяСсылка = Истина; - КонецЕсли; - - Если ОбнаруженаБитаяСсылка Тогда + ПроверяемыеДанные = СтрокаТЧ[ИмяРеквизитаТЧ]; + Если ЭтоБитаяСсылка(ПроверяемыеДанные, ПроверенныеСсылки) Тогда УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У объекта ""%1"" в реквизите ""%2"" табличной части ""%3"" (строка № %4) указана ссылка на несуществующий элемент: ""%5"".'"), - СсылкаНаОбъект, ИмяРеквизитаТЧ, СтрЗаменить(РезультатЗапросаПоРеквизитамТЧ.Ключ, ИмяРеквизитаТЧ, ""), - ТекущийНомерСтроки, ТекущаяСсылка); - Иначе - Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда - ПараметрыПроверки.КэшСсылок.Очистить(); - КонецЕсли; - ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, ""); + СсылкаНаОбъект, ИмяРеквизитаТЧ, СтрЗаменить(РеквизитыТабличнойЧасти.Ключ, ИмяРеквизитаТЧ, ""), + ТекущийНомерСтроки, ПроверяемыеДанные); КонецЕсли; - КонецЦикла; - ТекущийНомерСтроки = ТекущийНомерСтроки + 1; - КонецЦикла; + Если ПроверенныеСсылки.Количество() >= МаксимальноеКоличество Тогда + ПроверенныеСсылки.Очистить(); + КонецЕсли; + КонецЦикла; - КонецЕсли; Если ПустаяСтрока(УточнениеПроблемы) Тогда @@ -1841,11 +1842,9 @@ Проблема = ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); Проблема.УточнениеПроблемы = НСтр("ru = 'Нарушена ссылочная целостность:'") + Символы.ПС + УточнениеПроблемы; - - Если Реквизиты.Найти("Ответственный") <> Неопределено Тогда + Если ЕстьОтветственный Тогда Проблема.Ответственный = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбъект, "Ответственный"); КонецЕсли; - ЗаписатьПроблему(Проблема, ПараметрыПроверки); КонецЦикла; @@ -1859,21 +1858,19 @@ Функция СсылочныеРеквизитыОбъекта(ОбъектМетаданных) - Реквизиты = ОбъектМетаданных.Реквизиты; - ТабличныеЧасти = ОбъектМетаданных.ТабличныеЧасти; - Результат = Новый Массив; Для Каждого СтандартныйРеквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл - Если СодержитСсылочныйТип(СтандартныйРеквизит) Тогда - Если СтандартныйРеквизит.Имя = "ТочкаМаршрута" Тогда - Продолжить; - КонецЕсли; - Результат.Добавить(СтандартныйРеквизит.Имя); + Если СтандартныйРеквизит.Имя = "Ссылка" Или СтандартныйРеквизит.Имя = "ТочкаМаршрута" Тогда + Продолжить; КонецЕсли; + Если Не СодержитСсылочныйТип(СтандартныйРеквизит) Тогда + Продолжить; + КонецЕсли; + Результат.Добавить(СтандартныйРеквизит.Имя); КонецЦикла; - Для Каждого Реквизит Из Реквизиты Цикл + Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл Если СодержитСсылочныйТип(Реквизит) Тогда Результат.Добавить(Реквизит.Имя); КонецЕсли; @@ -1896,45 +1893,101 @@ Функция СсылочныеРеквизитыТабличныхЧастейОбъекта(ОбъектМетаданных) - Результат = Новый Массив; + Результат = Новый Соответствие; Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл + Реквизиты = Новый Массив; Для Каждого РеквизитТабличнойЧасти Из ТабличнаяЧасть.Реквизиты Цикл Если СодержитСсылочныйТип(РеквизитТабличнойЧасти) Тогда Если РеквизитТабличнойЧасти.Имя = "ТочкаМаршрута" Тогда Продолжить; КонецЕсли; - Результат.Добавить(ТабличнаяЧасть.Имя + "." + РеквизитТабличнойЧасти.Имя); + Реквизиты.Добавить(РеквизитТабличнойЧасти.Имя); КонецЕсли; КонецЦикла; + Результат.Вставить(ТабличнаяЧасть.Имя, Реквизиты); КонецЦикла; Возврат Результат; КонецФункции +Функция ЭтоБитаяСсылка(ПроверяемыеДанные, ПроверенныеСсылки) + + Если Не ЗначениеЗаполнено(ПроверяемыеДанные) Тогда + Возврат Ложь; + КонецЕсли; + + ЭтоБитаяСсылка = ПроверенныеСсылки[ПроверяемыеДанные]; + Если ЭтоБитаяСсылка = Ложь Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(ПроверяемыеДанные) = Тип("Число") Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(ПроверяемыеДанные) = Тип("Булево") Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(ПроверяемыеДанные) = Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(ПроверяемыеДанные) = Тип("Дата") Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(ПроверяемыеДанные) = Тип("УникальныйИдентификатор") Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(ПроверяемыеДанные) = Тип("ХранилищеЗначения") Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ПроверяемыеДанные) Тогда + Возврат Ложь; + КонецЕсли; + + Если ЭтоБитаяСсылка = Неопределено Тогда + ЭтоБитаяСсылка = Не ОбщегоНазначения.СсылкаСуществует(ПроверяемыеДанные); + ПроверенныеСсылки[ПроверяемыеДанные] = ЭтоБитаяСсылка; + КонецЕсли; + + Возврат ЭтоБитаяСсылка; + +КонецФункции + +Функция МаксимальноеКоличествоПроверенныхСсылок() + + Возврат 100000; + +КонецФункции + #Область КонтрольСсылочнойЦелостностиВРегистрах -Процедура НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки) Если ОбъектМетаданных.Измерения.Количество() = 0 Тогда Возврат; КонецЕсли; Если ОбщегоНазначения.ЭтоРегистрНакопления(ОбъектМетаданных) Тогда - НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) Тогда - НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); ИначеЕсли ОбщегоНазначения.ЭтоРегистрБухгалтерии(ОбъектМетаданных) Тогда - НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, ВидыСубконто(ОбъектМетаданных), КэшБитыхСсылок); + НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, ВидыСубконто(ОбъектМетаданных), ПроверенныеСсылки); ИначеЕсли ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) Тогда - НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); КонецЕсли; КонецПроцедуры -Процедура НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки) - РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок(); + МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); РеквизитыРегистра = СсылочныеРеквизитыРегистра(ОбъектМетаданных); @@ -1974,45 +2027,23 @@ НомераПроблемныхЗаписей = ""; Для Каждого ТекущаяЗапись Из ТекущийНаборЗаписей Цикл - Для Каждого ИмяРеквизита Из РеквизитыРегистра Цикл - - ТекущаяСсылка = ТекущаяЗапись[ИмяРеквизита]; - - Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда - Продолжить; - КонецЕсли; - - ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; - Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - ОбнаруженаБитаяСсылка = Истина; - КонецЕсли; - - Если ОбнаруженаБитаяСсылка Тогда + Если ЭтоБитаяСсылка(ТекущаяЗапись[ИмяРеквизита], ПроверенныеСсылки) Тогда НомераПроблемныхЗаписей = НомераПроблемныхЗаписей + ?(ЗначениеЗаполнено(НомераПроблемныхЗаписей), ", ", "") + Формат(ТекущийНаборЗаписей.Индекс(ТекущаяЗапись) + 1, "ЧГ=0"); - Иначе - Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда - ПараметрыПроверки.КэшСсылок.Очистить(); - КонецЕсли; - ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, ""); КонецЕсли; - КонецЦикла; - КонецЦикла; + Если ПроверенныеСсылки.Количество() >= МаксимальноеКоличество Тогда + ПроверенныеСсылки.Очистить(); + КонецЕсли; + Если ПустаяСтрока(НомераПроблемныхЗаписей) Тогда Продолжить; КонецЕсли; Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У регистра накопления ""%1"" в записях с номерами %2 по регистратору ""%3"" указаны ссылки на несуществующие данные.'"), ОбъектМетаданных.Представление(), НомераПроблемныхЗаписей, СтрокаРезультата.РегистраторПредставление); @@ -2032,22 +2063,21 @@ КонецПроцедуры -Процедура НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки) Если ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда - НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); + НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); + ИначеЕсли ОбъектМетаданных.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда + НайтиБитыеСсылкиВНезависимыхПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); Иначе - Если ОбъектМетаданных.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда - НайтиБитыеСсылкиВНезависимыхПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); - Иначе - НайтиБитыеСсылкиВНезависимыхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок); - КонецЕсли; + НайтиБитыеСсылкиВНезависимыхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки); КонецЕсли; КонецПроцедуры -Процедура НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВПодчиненныхРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки) + МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); РеквизитыРегистра = СсылочныеРеквизитыРегистра(ОбъектМетаданных); @@ -2109,35 +2139,23 @@ НомераПроблемныхЗаписей = ""; Для Каждого ТекущаяЗапись Из ТекущийНаборЗаписей Цикл - Для Каждого ИмяРеквизита Из РеквизитыРегистра Цикл - - ТекущаяСсылка = ТекущаяЗапись[ИмяРеквизита]; - Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; - Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - ОбнаруженаБитаяСсылка = Истина; - КонецЕсли; - - Если ОбнаруженаБитаяСсылка Тогда + Если ЭтоБитаяСсылка(ТекущаяЗапись[ИмяРеквизита], ПроверенныеСсылки) Тогда НомераПроблемныхЗаписей = НомераПроблемныхЗаписей + ?(ЗначениеЗаполнено(НомераПроблемныхЗаписей), ", ", "") + Формат(ТекущийНаборЗаписей.Индекс(ТекущаяЗапись) + 1, "ЧГ=0"); КонецЕсли; - КонецЦикла; - КонецЦикла; + Если ПроверенныеСсылки.Количество() >= МаксимальноеКоличество Тогда + ПроверенныеСсылки.Очистить(); + КонецЕсли; + Если ПустаяСтрока(НомераПроблемныхЗаписей) Тогда Продолжить; КонецЕсли; Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У регистра сведений ""%1"" в записях с номерами %2 по регистратору ""%3"" указаны ссылки на несуществующие данные.'"), ОбъектМетаданных.Представление(), НомераПроблемныхЗаписей, СтрокаРезультата.РегистраторПредставление); @@ -2162,8 +2180,9 @@ КонецПроцедуры -Процедура НайтиБитыеСсылкиВНезависимыхПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВНезависимыхПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки) + МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); ИнформацияОНезависимомРегистре = ИнформацияОНезависимомРегистре(ОбъектМетаданных); ПоляВыборки = ИнформацияОНезависимомРегистре.ПоляВыборки; ИнформацияОРегистре = ИнформацияОНезависимомРегистре.ИнформацияОРегистре; @@ -2216,17 +2235,7 @@ Для Каждого ИнформацияОРеквизите Из ИнформацияОРегистре Цикл ТекущаяСсылка = СтрокаРезультата[ИнформацияОРеквизите.ИмяМетаданных + ИнформацияОРеквизите.ТипМетаданныхВИменительномПадеже + "Ссылка"]; - Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; - Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - ОбнаруженаБитаяСсылка = Истина; - КонецЕсли; - - Если Не ОбнаруженаБитаяСсылка Тогда + Если Не ЭтоБитаяСсылка(ТекущаяСсылка, ПроверенныеСсылки) Тогда Продолжить; КонецЕсли; @@ -2234,9 +2243,6 @@ ДополнительнаяИнформация.Вставить("Период", СтрокаРезультата.Период); Для Каждого Измерение Из Измерения Цикл ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; - Если КэшБитыхСсылок.Получить(ИзмерениеСсылка) <> Неопределено Тогда - Продолжить; - КонецЕсли; ДополнительнаяИнформация.Вставить(Измерение.Имя, ИзмерениеСсылка); КонецЦикла; @@ -2251,6 +2257,10 @@ КонецЦикла; + Если ПроверенныеСсылки.Количество() >= МаксимальноеКоличество Тогда + ПроверенныеСсылки.Очистить(); + КонецЕсли; + КонецЦикла; Если ЭтоПервыйПроход Тогда @@ -2268,17 +2278,17 @@ КонецПроцедуры -Процедура НайтиБитыеСсылкиВНезависимыхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВНезависимыхНеПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки) + МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); ИнформацияОНезависимомРегистре = ИнформацияОНезависимомРегистре(ОбъектМетаданных); ПоляВыборки = ИнформацияОНезависимомРегистре.ПоляВыборки; ИнформацияОРегистре = ИнформацияОНезависимомРегистре.ИнформацияОРегистре; УсловиеПоИзмерениям = ""; ПоляУпорядочивания = ""; - Измерения = ОбъектМетаданных.Измерения; - Для Каждого Измерение Из Измерения Цикл + Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл УсловиеПоИзмерениям = УсловиеПоИзмерениям + ?(ЗначениеЗаполнено(УсловиеПоИзмерениям), " И ", "") + Измерение.Имя + " >= &" + Измерение.Имя; ПоляУпорядочивания = ПоляУпорядочивания + ?(ЗначениеЗаполнено(ПоляУпорядочивания), ", ", "") + Измерение.Имя; КонецЦикла; @@ -2321,27 +2331,14 @@ Для Каждого ИнформацияОРеквизите Из ИнформацияОРегистре Цикл - ТекущаяСсылка = СтрокаРезультата[ИнформацияОРеквизите.ИмяМетаданных + ИнформацияОРеквизите.ТипМетаданныхВИменительномПадеже + "Ссылка"]; - Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; - Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - ОбнаруженаБитаяСсылка = Истина; - КонецЕсли; - - Если Не ОбнаруженаБитаяСсылка Тогда + ТекущаяСсылка = СтрокаРезультата[ИнформацияОРеквизите.ИмяМетаданных + ИнформацияОРеквизите.ТипМетаданныхВИменительномПадеже + "Ссылка"]; + Если Не ЭтоБитаяСсылка(ТекущаяСсылка, ПроверенныеСсылки) Тогда Продолжить; КонецЕсли; ДополнительнаяИнформация = Новый Структура; - Для Каждого Измерение Из Измерения Цикл + Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл ИзмерениеСсылка = СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]; - Если КэшБитыхСсылок.Получить(ИзмерениеСсылка) <> Неопределено Тогда - Продолжить; - КонецЕсли; ДополнительнаяИнформация.Вставить(Измерение.Имя, ИзмерениеСсылка); КонецЦикла; @@ -2358,12 +2355,16 @@ КонецЦикла; + Если ПроверенныеСсылки.Количество() >= МаксимальноеКоличество Тогда + ПроверенныеСсылки.Очистить(); + КонецЕсли; + Если ЭтоПервыйПроход Тогда ЭтоПервыйПроход = Ложь; Запрос.Текст = ТекстЗапросаСУсловием; КонецЕсли; - Для Каждого Измерение Из Измерения Цикл + Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]); КонецЦикла; @@ -2373,33 +2374,27 @@ КонецПроцедуры -Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, ВидыСубконто, КэшБитыхСсылок) - - РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок(); +Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, ВидыСубконто, ПроверенныеСсылки) + МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - КорреспонденцияОбъекта = ОбъектМетаданных.Корреспонденция; - - Измерения = ОбъектМетаданных.Измерения; - Реквизиты = ОбъектМетаданных.Реквизиты; - СтандартныеРеквизиты = ОбъектМетаданных.СтандартныеРеквизиты; СсылочныеРеквизиты = Новый Массив; - Если Не КорреспонденцияОбъекта Тогда + Если Не ОбъектМетаданных.Корреспонденция Тогда СсылочныеРеквизиты.Добавить("Счет"); Иначе СсылочныеРеквизиты.Добавить("СчетДт"); СсылочныеРеквизиты.Добавить("СчетКт"); КонецЕсли; - Для Каждого Измерение Из Измерения Цикл + Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл Если Не СодержитСсылочныйТип(Измерение) Тогда Продолжить; КонецЕсли; - Если Измерение.Балансовый Или Не КорреспонденцияОбъекта Тогда + Если Измерение.Балансовый Или Не ОбъектМетаданных.Корреспонденция Тогда СсылочныеРеквизиты.Добавить(Измерение.Имя); Иначе СсылочныеРеквизиты.Добавить(Измерение.Имя + "Дт"); @@ -2408,7 +2403,7 @@ КонецЦикла; - Для Каждого Реквизит Из Реквизиты Цикл + Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл Если Не СодержитСсылочныйТип(Реквизит) Тогда Продолжить; КонецЕсли; @@ -2450,7 +2445,7 @@ ПроверяемыеОбъекты = Новый Массив; Для Каждого ВидСубконто Из ВидыСубконто Цикл - Если Не КорреспонденцияОбъекта Тогда + Если Не ОбъектМетаданных.Корреспонденция Тогда ПроверяемыеОбъекты.Добавить(ТекущаяЗапись.Субконто[ВидСубконто]); Иначе ПроверяемыеОбъекты.Добавить(ТекущаяЗапись.СубконтоДт[ВидСубконто]); @@ -2463,42 +2458,23 @@ КонецЦикла; Для Каждого ПроверяемыйОбъект Из ПроверяемыеОбъекты Цикл - - Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ПроверяемыйОбъект) Или Не ЗначениеЗаполнено(ПроверяемыйОбъект) Тогда - Продолжить; - КонецЕсли; - - Если ПараметрыПроверки.КэшСсылок[ПроверяемыйОбъект] <> Неопределено Тогда - Продолжить; - КонецЕсли; - - ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ПроверяемыйОбъект) <> Неопределено; - Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ПроверяемыйОбъект) Тогда - КэшБитыхСсылок.Вставить(ПроверяемыйОбъект, ""); - ОбнаруженаБитаяСсылка = Истина; - КонецЕсли; - - Если Не ОбнаруженаБитаяСсылка Тогда - Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда - ПараметрыПроверки.КэшСсылок.Очистить(); - КонецЕсли; - ПараметрыПроверки.КэшСсылок.Вставить(ПроверяемыйОбъект, ""); - Продолжить; - КонецЕсли; - - НомераПроблемныхЗаписей = НомераПроблемныхЗаписей + ?(ЗначениеЗаполнено(НомераПроблемныхЗаписей), ", ", "") - + Формат(ТекущийНаборЗаписей.Индекс(ТекущаяЗапись) + 1, "ЧГ=0"); - + Если ЭтоБитаяСсылка(ПроверяемыйОбъект, ПроверенныеСсылки) Тогда + НомераПроблемныхЗаписей = НомераПроблемныхЗаписей + ?(ЗначениеЗаполнено(НомераПроблемныхЗаписей), ", ", "") + + Формат(ТекущийНаборЗаписей.Индекс(ТекущаяЗапись) + 1, "ЧГ=0"); + КонецЕсли; КонецЦикла; КонецЦикла; + Если ПроверенныеСсылки.Количество() >= МаксимальноеКоличество Тогда + ПроверенныеСсылки.Очистить(); + КонецЕсли; + Если ПустаяСтрока(НомераПроблемныхЗаписей) Тогда Продолжить; КонецЕсли; Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных), ПараметрыПроверки); - Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У регистра бухгалтерии ""%1"" в записях с номерами %2 по регистратору ""%3"" указаны ссылки на несуществующие данные.'"), ОбъектМетаданных.Представление(), НомераПроблемныхЗаписей, СтрокаРезультата.РегистраторПредставление); @@ -2518,9 +2494,9 @@ КонецПроцедуры -Процедура НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) +Процедура НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, ПроверенныеСсылки) - РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок(); + МаксимальноеКоличество = МаксимальноеКоличествоПроверенныхСсылок(); ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); РеквизитыРегистра = СсылочныеРеквизитыРегистра(ОбъектМетаданных); @@ -2557,39 +2533,19 @@ НомераПроблемныхЗаписей = ""; Для Каждого ТекущаяЗапись Из ТекущийНаборЗаписей Цикл - Для Каждого ИмяРеквизита Из РеквизитыРегистра Цикл - ТекущаяСсылка = ТекущаяЗапись[ИмяРеквизита]; - Если Не ОбщегоНазначения.ЗначениеСсылочногоТипа(ТекущаяСсылка) Или Не ЗначениеЗаполнено(ТекущаяСсылка) Тогда - Продолжить; - КонецЕсли; - - Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда - Продолжить; - КонецЕсли; - - ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено; - Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда - КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); - ОбнаруженаБитаяСсылка = Истина; - КонецЕсли; - - Если Не ОбнаруженаБитаяСсылка Тогда - Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда - ПараметрыПроверки.КэшСсылок.Очистить(); - КонецЕсли; - ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, ""); - Продолжить; - КонецЕсли; - - НомераПроблемныхЗаписей = НомераПроблемныхЗаписей + ?(ЗначениеЗаполнено(НомераПроблемныхЗаписей), ", ", "") - + Формат(ТекущийНаборЗаписей.Индекс(ТекущаяЗапись) + 1, "ЧГ=0"); - + Если ЭтоБитаяСсылка(ТекущаяСсылка, ПроверенныеСсылки) Тогда + НомераПроблемныхЗаписей = НомераПроблемныхЗаписей + ?(ЗначениеЗаполнено(НомераПроблемныхЗаписей), ", ", "") + + Формат(ТекущийНаборЗаписей.Индекс(ТекущаяЗапись) + 1, "ЧГ=0"); + КонецЕсли; КонецЦикла; - КонецЦикла; + Если ПроверенныеСсылки.Количество() >= МаксимальноеКоличество Тогда + ПроверенныеСсылки.Очистить(); + КонецЕсли; + Если ПустаяСтрока(НомераПроблемныхЗаписей) Тогда Продолжить; КонецЕсли; @@ -2745,12 +2701,6 @@ КонецФункции -Функция РазмерКэшаПроверенныхСсылок() - - Возврат 100000; - -КонецФункции - #КонецОбласти #КонецОбласти @@ -2961,7 +2911,6 @@ ТекущийНаборЗаписей.Отбор.Регистратор.Установить(СтрокаРезультата.РегистраторРеквизитСсылка); ТекущийНаборЗаписей.Прочитать(); - УточнениеПроблемы = ""; Если ТекущийНаборЗаписей.ПроверитьЗаполнение() Тогда Продолжить; КонецЕсли; @@ -3298,6 +3247,11 @@ Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]); КонецЦикла; + ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество(); + Если МодульОценкаПроизводительности <> Неопределено Тогда + МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных); + КонецЕсли; + Результат = Запрос.Выполнить().Выгрузить(); КонецЦикла; @@ -3333,31 +3287,27 @@ Результат = Запрос.Выполнить().Выгрузить(); - МассивИсключений = Новый Массив; + ПроверенныеЭлементы = Новый Соответствие; Пока Результат.Количество() > 0 Цикл Для Каждого СтрокаРезультата Из Результат Цикл СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; - Если МассивИсключений.Найти(СсылкаНаОбъект) <> Неопределено Тогда + Если ПроверенныеЭлементы[СсылкаНаОбъект] <> Неопределено Тогда Продолжить; КонецЕсли; - ПредставлениеОбъекта = СтрокаРезультата.Представление; - - НайденЦикл = Ложь; - ЦиклВМассиве = Новый Массив; - ПроверитьЗацикливаниеУровней(СсылкаНаОбъект, СтрокаРезультата.Родитель, НайденЦикл, ЦиклВМассиве); - Если НайденЦикл Тогда + ПроверяемыеЭлементы = Новый Массив; + Если ПроверитьЗацикливаниеУровней(СсылкаНаОбъект, СтрокаРезультата.Родитель, ПроверяемыеЭлементы) Тогда Путь = ""; - - Для Каждого ЭлементЦикла Из ЦиклВМассиве Цикл - ЗначениеПредставления = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭлементЦикла, Новый Структура("Представление", "ПредставлениеСсылки(Ссылка)")); - Путь = Путь + ?(ЗначениеЗаполнено(Путь), " -> ", "") + ЗначениеПредставления.Представление; - МассивИсключений.Добавить(ЭлементЦикла); + Представления = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ПроверяемыеЭлементы, Новый Структура("Представление", "ПредставлениеСсылки(Ссылка)")); + Для Каждого ЭлементЦикла Из ПроверяемыеЭлементы Цикл + Путь = Путь + ?(ЗначениеЗаполнено(Путь), " -> ", "") + Представления[ЭлементЦикла].Значение; + ПроверенныеЭлементы[ЭлементЦикла] = Истина; КонецЦикла; + ПредставлениеОбъекта = СтрокаРезультата.Представление; Если ЗначениеЗаполнено(Путь) Тогда УточнениеПроблемы = ПредставлениеОбъекта + " -> " + Путь + " -> " + ПредставлениеОбъекта; Иначе @@ -3384,16 +3334,18 @@ КонецПроцедуры -Процедура ПроверитьЗацикливаниеУровней(СсылкаНаОбъект, ТекущийРодитель, НайденЦикл, ЦиклВМассиве) +Функция ПроверитьЗацикливаниеУровней(Знач СсылкаНаОбъект, Знач ТекущийРодитель, Знач ВсеЭлементы) - Если СсылкаНаОбъект = ТекущийРодитель Тогда - НайденЦикл = Истина; - ИначеЕсли ЗначениеЗаполнено(ТекущийРодитель) И ЦиклВМассиве.Найти(ТекущийРодитель) = Неопределено Тогда - ЦиклВМассиве.Добавить(ТекущийРодитель); - ПроверитьЗацикливаниеУровней(СсылкаНаОбъект, ТекущийРодитель.Родитель, НайденЦикл, ЦиклВМассиве) - КонецЕсли; + Пока ЗначениеЗаполнено(ТекущийРодитель) Цикл + Если СсылкаНаОбъект = ТекущийРодитель Тогда + Возврат Истина; + КонецЕсли; + ВсеЭлементы.Добавить(ТекущийРодитель); + ТекущийРодитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийРодитель, "Родитель"); + КонецЦикла; + Возврат Ложь; -КонецПроцедуры +КонецФункции Функция ЕстьИерархия(СтандартныеРеквизиты) @@ -3437,27 +3389,21 @@ Пока Результат.Следующий() Цикл ПроблемныйОбъектСсылка = Результат.ПроблемныйОбъект; - Родитель = ПроблемныйОбъектСсылка.Родитель; + Родитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПроблемныйОбъектСсылка, "Родитель"); - НайденЦикл = Ложь; - ЦиклВМассиве = Новый Массив; - ПроверитьЗацикливаниеУровней(ПроблемныйОбъектСсылка, Родитель, НайденЦикл, ЦиклВМассиве); - Если Не НайденЦикл Тогда + ПроверяемыеЭлементы = Новый Массив; + Если Не ПроверитьЗацикливаниеУровней(ПроблемныйОбъектСсылка, Родитель, ПроверяемыеЭлементы) Тогда Продолжить; КонецЕсли; - ПоследнийОбъектЦикла = ЦиклВМассиве.Получить(ЦиклВМассиве.Количество() - 1); + ПоследнийОбъектЦикла = ПроверяемыеЭлементы[ПроверяемыеЭлементы.Количество() - 1]; КоличествоДетейПервого = КоличествоДочернихЭлементов(ПроблемныйОбъектСсылка, Родитель); КоличествоДетейВторого = КоличествоДочернихЭлементов(ПоследнийОбъектЦикла, Родитель); - Если КоличествоДетейПервого > КоличествоДетейВторого Тогда - ПроблемныйОбъект = ПроблемныйОбъектСсылка.ПолучитьОбъект(); - Иначе - ПроблемныйОбъект = ПоследнийОбъектЦикла.ПолучитьОбъект(); - КонецЕсли; - - ПроблемныйОбъект.Родитель = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПроблемныйОбъектСсылка.Метаданные().ПолноеИмя()).ПустаяСсылка(); + ПроблемныйОбъект = ?(КоличествоДетейПервого > КоличествоДетейВторого, ПроблемныйОбъектСсылка, ПоследнийОбъектЦикла); + ПроблемныйОбъект = ПроблемныйОбъект.ПолучитьОбъект(); + ПроблемныйОбъект.Родитель = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПроблемныйОбъектСсылка.Метаданные().ПолноеИмя()).ПустаяСсылка(); ПроблемныйОбъект.ОбменДанными.Загрузка = Истина; ПроблемныйОбъект.Записать(); @@ -3510,7 +3456,7 @@ Продолжить; КонецЕсли; - НайденныйЭлемент = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(ПолноеИмя + "." + ПредопределенныйЭлемент); + НайденныйЭлемент = ОбщегоНазначения.ПредопределенныйЭлемент(ПолноеИмя + "." + ПредопределенныйЭлемент); Если НайденныйЭлемент <> Неопределено Тогда Продолжить; КонецЕсли; @@ -3642,6 +3588,28 @@ #Область Прочее +Функция ПрочитанныеПараметры(ПараметрыВыполненияПроверки) + Результат = Новый Структура("ПолноеИмя, ОбъектМетаданных, ОбластьПроверки"); + Если ПараметрыВыполненияПроверки.Количество() <> 1 Тогда + Возврат Неопределено; + КонецЕсли; + + СтруктураПараметров = ПараметрыВыполненияПроверки[0]; + Если ТипЗнч(СтруктураПараметров) <> Тип("Структура") Тогда + Возврат Неопределено; + КонецЕсли; + + Если СтруктураПараметров.Свойство1 <> "ПроверяемыйОбъект" Тогда + Возврат Неопределено; + КонецЕсли; + + Результат.ПолноеИмя = СтруктураПараметров.Свойство2; + Результат.ОбластьПроверки = ?(СтрНачинаетсяС(Результат.ПолноеИмя, "Регистр"), "Регистры", "СсылочныеОбъекты"); + Результат.ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Результат.ПолноеИмя); + + Возврат Результат; +КонецФункции + Функция ПредставлениеПроблемногоОбъекта(ПроблемныйОбъект, ПроблемныйОбъектПредставление, ДополнительнаяИнформация) Экспорт Результат = ПроблемныйОбъектПредставление + " (" + ПроблемныйОбъект.Метаданные().Представление() + ")"; diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl index 8a9c976f8..d0de7f987 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl index 72a3d7518..c881c7543 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -259,6 +266,7 @@ КолонкиПроверок.Добавить("ИдентификаторРодителя", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); КолонкиПроверок.Добавить("Комментарий", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); КолонкиПроверок.Добавить("Отключена", Новый ОписаниеТипов("Булево")); + Проверки.Индексы.Добавить("Идентификатор"); Возврат Проверки; diff --git a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl index 1e6878b0c..8ea3d04d6 100644 --- a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -62,8 +69,6 @@ Возврат; КонецЕсли; - ТипДанныхКурса = ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/SuppliedData/CurrencyRates", "Rate"); - Фильтр = Новый Массив; Фильтр.Добавить(Новый Структура("Код, Значение", "Валюта", КодВалюты)); Курсы = ПоставляемыеДанные.СсылкиПоставляемыхДанныхИзКэша("КурсыОднойВалюты", Фильтр); @@ -464,11 +469,11 @@ Исключение РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось установить разделение сеанса %1 по причине: - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), Формат(ОбластьДанных, "ЧН=0; ЧГ=0"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Распространение курсов валют по областям данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Распространение курсов валют по областям данных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); @@ -495,10 +500,10 @@ ВалютыОбластей = ОбщегоНазначения.ЗначениеИзСтрокиXML(ВалютыОбластейСтрокой); РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось обновить курсы валют в области %1 по причине: - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), Формат(ОбластьДанных, "ЧН=0; ЧГ=0"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Распространение курсов валют по областям данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Распространение курсов валют по областям данных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); @@ -688,7 +693,7 @@ Иначе Комментарий = НСтр("ru = 'Загрузка курса валюты %1 на дату %2 отменена из-за нарушения даты запрета изменений.'"); Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Комментарий, ВыборкаВалюты.Код, ВыборкаОбщий.Дата); - ИмяСобытия = НСтр("ru = 'Поставляемые данные.Отмена загрузки курсов валюты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ИмяСобытия = НСтр("ru = 'Поставляемые данные.Отмена загрузки курсов валюты'", ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация,, ВыборкаВалюты.Ссылка, Комментарий); КонецЕсли; diff --git a/SSL/src/CommonModules/ЛокализацияКлиент/Module.bsl b/SSL/src/CommonModules/ЛокализацияКлиент/Module.bsl new file mode 100644 index 000000000..170b4a7db --- /dev/null +++ b/SSL/src/CommonModules/ЛокализацияКлиент/Module.bsl @@ -0,0 +1,75 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Обработчик события ПриОткрытии поля ввода формы для открытия формы ввода значения реквизита на разных языках. +// +// Параметры: +// Объект - ДанныеФормыКоллекция - Объект на форме. +// Элемент - ПолеФормы - Элемент формы, для которого будет открыта форма ввода на разных языках. +// ИмяРеквизита - Строка - Имя реквизита, для которого будет открыта форма ввода на разных языках. +// СтандартнаяОбработка - Булево - Признак выполнения стандартной (системной) обработки события. +// +Процедура ПриОткрытии(Объект, Элемент, ИмяРеквизита, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Представления", Объект.Представления); + ПараметрыФормы.Вставить("Ссылка", Объект.Ссылка); + ПараметрыФормы.Вставить("ИмяРеквизита", ИмяРеквизита); + ПараметрыФормы.Вставить("ТекущиеЗначение", Элемент.ТекстРедактирования); + ПараметрыФормы.Вставить("ТолькоПросмотр", Элемент.ТолькоПросмотр); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Объект", Объект); + ДополнительныеПараметры.Вставить("ИмяРеквизита", ИмяРеквизита); + + Оповещение = Новый ОписаниеОповещения("ПослеВводаСтрокНаРазныхЯзыках", ЛокализацияКлиент, ДополнительныеПараметры); + ОткрытьФорму("ОбщаяФорма.ВводНаРазныхЯзыках", ПараметрыФормы,,,,, Оповещение); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПослеВводаСтрокНаРазныхЯзыках(Результат, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Объект = ДополнительныеПараметры.Объект; + + Для каждого Представление Из Результат.ЗначенияНаРазныхЯзыках Цикл + Отбор = Новый Структура("КодЯзыка", Представление.КодЯзыка); + НайденныеСтроки = Объект.Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Если ПустаяСтрока(Представление.ЗначениеРеквизита) + И СтрСравнить(Результат.ОсновнойЯзык, Представление.КодЯзыка) <> 0 Тогда + Объект.Представления.Удалить(НайденныеСтроки[0]); + Продолжить; + КонецЕсли; + СтрокаПредставлений = НайденныеСтроки[0]; + Иначе + СтрокаПредставлений = Объект.Представления.Добавить(); + СтрокаПредставлений.КодЯзыка = Представление.КодЯзыка; + КонецЕсли; + СтрокаПредставлений[ДополнительныеПараметры.ИмяРеквизита] = Представление.ЗначениеРеквизита; + + КонецЦикла; + + Если Результат.Свойство("СтрокаНаТекущемЯзыке") Тогда + Объект[ДополнительныеПараметры.ИмяРеквизита] = Результат.СтрокаНаТекущемЯзыке; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЛокализацияКлиент/ЛокализацияКлиент.mdo b/SSL/src/CommonModules/ЛокализацияКлиент/ЛокализацияКлиент.mdo new file mode 100644 index 000000000..8b2bdb210 --- /dev/null +++ b/SSL/src/CommonModules/ЛокализацияКлиент/ЛокализацияКлиент.mdo @@ -0,0 +1,10 @@ + + + ЛокализацияКлиент + + ru + Локализация клиент + + true + true + diff --git a/SSL/src/CommonModules/ЛокализацияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЛокализацияКлиентСервер/Module.bsl new file mode 100644 index 000000000..351ffcd64 --- /dev/null +++ b/SSL/src/CommonModules/ЛокализацияКлиентСервер/Module.bsl @@ -0,0 +1,55 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Вызывается при получении представления объекта или ссылки в зависимости от языка, +// используемого при работе пользователя. +// +// Параметры: +// Данные - Структура - Содержит значения полей, из которых формируется представление. +// Представление - Строка - В данный параметр нужно поместить сформированное представление. +// СтандартнаяОбработка - Булево - В данный параметр передается признак формирования стандартного представления. +// ИмяРеквизита - Строка - Указывает, в каком реквизите хранится представление на основном языке. +// +Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка, ИмяРеквизита = "Наименование") Экспорт + + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Или ВнешнееСоединение Тогда + + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Или Не Данные.Свойство("Ссылка") Или Данные.Ссылка = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Представления.%2 КАК Наименование + |ИЗ + | %1.Представления КАК Представления + |ГДЕ + | Представления.КодЯзыка = &Язык + | И Представления.Ссылка = &Ссылка"; + + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗапроса, + Данные.Ссылка.Метаданные().ПолноеИмя(), ИмяРеквизита); + + Запрос = Новый Запрос(ТекстЗапроса); + + Запрос.УстановитьПараметр("Ссылка", Данные.Ссылка); + Запрос.УстановитьПараметр("Язык", ТекущийЯзык().КодЯзыка); + + РезультатЗапроса = Запрос.Выполнить(); + Если Не РезультатЗапроса.Пустой() Тогда + СтандартнаяОбработка = Ложь; + Представление = РезультатЗапроса.Выгрузить()[0].Наименование; + КонецЕсли; + +#КонецЕсли + +КонецПроцедуры + +#КонецОбласти \ 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 9df811383..c0490a2b3 100644 --- a/SSL/src/CommonModules/ГрафикиРаботыКлиентСервер/ГрафикиРаботыКлиентСервер.mdo +++ b/SSL/src/CommonModules/ЛокализацияКлиентСервер/ЛокализацияКлиентСервер.mdo @@ -1,9 +1,9 @@ - - ГрафикиРаботыКлиентСервер + + ЛокализацияКлиентСервер ru - Графики работы клиент сервер + Локализация клиент сервер true true diff --git a/SSL/src/CommonModules/ЛокализацияСервер/Module.bsl b/SSL/src/CommonModules/ЛокализацияСервер/Module.bsl new file mode 100644 index 000000000..88ea5acf8 --- /dev/null +++ b/SSL/src/CommonModules/ЛокализацияСервер/Module.bsl @@ -0,0 +1,157 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает метаданные по коду языка конфигурации. +// +// Параметры: +// КодЯзыка - Строка - код языка, например "en" (как задано в свойстве КодЯзыка метаданных ОбъектМетаданных: Язык). +// +// Возвращаемое значение: +// ОбъектМетаданных: Язык - если найден по переданному коду языка, иначе Неопределено. +// +Функция ЯзыкПоКоду(Знач КодЯзыка) Экспорт + Для каждого Язык Из Метаданные.Языки Цикл + Если Язык.КодЯзыка = КодЯзыка Тогда + Возврат Язык; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; +КонецФункции + +// Вызывается из обработчика ПриСозданииНаСервере формы объекта для отображения кнопки открытия для локализуемых элементов, +// нажатие на которую открывает форму ввода значения реквизита на разных языках. +// +// Параметры: +// ЛокализуемыеЭлементыФормы - ПолеВвода, Массив - Элементы формы, у которых необходимо вывести кнопку открытия. +// +Процедура ПриСозданииНаСервере(ЛокализуемыеЭлементыФормы) Экспорт + + Если Метаданные.Языки.Количество() < 2 Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ЛокализуемыеЭлементыФормы) = Тип("Массив") Тогда + Для каждого ЛокализуемыйЭлемент Из ЛокализуемыеЭлементыФормы Цикл + ЛокализуемыйЭлемент.КнопкаОткрытия = Истина; + КонецЦикла; + Иначе + ЛокализуемыеЭлементыФормы.КнопкаОткрытия = Истина; + КонецЕсли; + +КонецПроцедуры + +// Вызывается из обработчика ПриЧтениеНаСервере формы объекта для заполнения значений реквизитов формы +// в зависимости от языка, используемого при работе пользователя. +// +// Параметры: +// Форма - УправляемаяФорма - Форма объекта. +// ТекущийОбъект - Произвольный - Объект, который был получен в обработчике формы ПриЧтенииНаСервере. +// +Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт + + ТекущийОбъект.ПриЧтенииПредставленийНаСервере(); + Форма.ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + +КонецПроцедуры + +// Вызывается из модуля объекта для установки значений у локализуемых реквизитов объекта +// в зависимости от языка, используемого при работе пользователя. +// +// Параметры: +// Объект - Произвольный - объект данных. +// +Процедура ПриЧтенииПредставленийНаСервере(Объект) Экспорт + + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда + Возврат; + КонецЕсли; + + Для каждого Реквизит Из Объект.Метаданные().ТабличныеЧасти.Представления.Реквизиты Цикл + + Если СтрСравнить(Реквизит.Имя, "КодЯзыка") = 0 Тогда + Продолжить; + КонецЕсли; + + ИмяРеквизита = Реквизит.Имя; + + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", Метаданные.ОсновнойЯзык.КодЯзыка); + НайденныеСтроки = Объект.Представления.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() > 0 Тогда + Представление = НайденныеСтроки[0]; + Иначе + Представление = Объект.Представления.Добавить(); + Представление.КодЯзыка = Метаданные.ОсновнойЯзык.КодЯзыка; + КонецЕсли; + Представление[ИмяРеквизита] = Объект[ИмяРеквизита]; + + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка); + НайденныеСтроки = Объект.Представления.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() > 0 И ЗначениеЗаполнено(НайденныеСтроки[0][ИмяРеквизита]) Тогда + Объект[ИмяРеквизита] = НайденныеСтроки[0][ИмяРеквизита]; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Вызывается из обработчика ПередЗаписьюНаСервере формы объекта или при программной записи объекта +// для установки значений реквизитов формы в зависимости от языка, используемого при работе пользователя. +// +// Параметры: +// ТекущийОбъект - Произвольный - Записываемый объект. +// +Процедура ПередЗаписьюНаСервере(ТекущийОбъект) Экспорт + + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда + Возврат; + КонецЕсли; + + Реквизиты = Новый Массив; + Для каждого Реквизит Из ТекущийОбъект.Ссылка.Метаданные().ТабличныеЧасти.Представления.Реквизиты Цикл + Если СтрСравнить(Реквизит.Имя, "КодЯзыка") = 0 Тогда + Продолжить; + КонецЕсли; + + Реквизиты.Добавить(Реквизит.Имя); + КонецЦикла; + + Отбор = Новый Структура(); + Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка); + НайденныеСтроки = ТекущийОбъект.Представления.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() > 0 Тогда + Представление = НайденныеСтроки[0]; + Иначе + Представление = ТекущийОбъект.Представления.Добавить(); + Представление.КодЯзыка = ТекущийЯзык().КодЯзыка; + КонецЕсли; + + Для каждого ИмяРеквизита Из Реквизиты Цикл + Представление[ИмяРеквизита] = ТекущийОбъект[ИмяРеквизита]; + КонецЦикла; + + Отбор.КодЯзыка = Метаданные.ОсновнойЯзык.КодЯзыка; + НайденныеСтроки = ТекущийОбъект.Представления.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + Для каждого ИмяРеквизита Из Реквизиты Цикл + ТекущийОбъект[ИмяРеквизита] = НайденныеСтроки[0][ИмяРеквизита]; + КонецЦикла; + ТекущийОбъект.Представления.Удалить(НайденныеСтроки[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..4ef12730c --- /dev/null +++ b/SSL/src/CommonModules/ЛокализацияСервер/ЛокализацияСервер.mdo @@ -0,0 +1,11 @@ + + + ЛокализацияСервер + + ru + Локализация сервер + + true + true + true + diff --git a/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl index 5fa1b6e92..b9117d094 100644 --- a/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователя/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Создает напоминание с произвольным временем или расписанием выполнения. @@ -22,16 +30,11 @@ // Предмет - Ссылка, Массив - предмет или предметы напоминания. // Идентификатор - Строка - уточняет предмет напоминания, например, "ДеньРождения". // -// Возвращаемое значение +// Возвращаемое значение: // Массив - коллекция напоминаний в виде структур с полями, соответствующими полям регистра сведений НапоминанияПользователя. // Функция НайтиНапоминания(Знач Предмет = Неопределено, Идентификатор = Неопределено) Экспорт - СписокПредметов = Предмет; - Если ТипЗнч(Предмет) <> Тип("Массив") Тогда - СписокПредметов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Предмет); - КонецЕсли; - ТекстЗапроса = "ВЫБРАТЬ | * diff --git a/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl index 21c8671ac..0c049b66d 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Выполняет запрос по напоминаниям для текущего пользователя на момент времени ТекущаяДатаСеанса() + 30минут. diff --git a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl index 9f4e39d51..a32390fca 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Открывает форму текущих напоминаний пользователя. diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl index 3a75a77b8..3f5ff2bae 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Запускает периодическую проверку текущих напоминаний пользователя. @@ -49,8 +57,8 @@ // Параметры: // Текст - Строка - текст напоминания; // ВремяСобытия - Дата - дата и время события, о котором надо напомнить; -// - РасписаниеРегламентногоЗадания - расписание периодического события. -// - Строка - имя реквизита Предмета, в котором содержится время наступления события. +// - РасписаниеРегламентногоЗадания - расписание периодического события; +// - Строка - имя реквизита предмета напоминания, в котором содержится время наступления события. // ИнтервалДоСобытия - Число - время в секундах, за которое необходимо напомнить относительно времени события; // Предмет - ЛюбаяСсылка - предмет напоминания; // Идентификатор - Строка - уточняет предмет напоминания, например, "ДеньРождения". diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl index 5a628391d..9e85a1b03 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Выполняет запрос по напоминаниям для текущего пользователя на 30 минут вперед от текущего времени. diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl index 33f87e704..dca62cbf5 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает ежегодное расписание для события на указанную дату. @@ -27,20 +35,6 @@ #Область СлужебныеПроцедурыИФункции -// Возвращает массив текстовых представлений стандартных интервалов времени. -Функция ПолучитьСтандартныеИнтервалыОповещения() Экспорт - - Результат = Новый Массив; - - ИнтервалыВремени = Новый Структура("_5м,_10м,_15м,_30м,_1ч,_2ч,_4ч,_8ч,_1д,_2д,_3д,_1н,_2н"); - Для Каждого Интервал Из ИнтервалыВремени Цикл - Результат.Добавить(ОформитьВремя(Интервал.Ключ)); - КонецЦикла; - - Возврат Результат; - -КонецФункции - // Возвращает текстовое представление интервала времени, заданного в секундах. // // Параметры: @@ -141,7 +135,6 @@ ПредыдущийСимволЭтоЦифра = Ложь; ЕстьДробнаяЧасть = Ложь; - ЕстьЕдиницаИзмерения = Ложь; Результат = 0; Для Позиция = 1 По СтрДлина(СтрокаСоВременем) Цикл @@ -159,7 +152,6 @@ ПредыдущийСимволЭтоЦифра = Ложь; ЕстьДробнаяЧасть = Ложь; - ЕстьЕдиницаИзмерения = Ложь; КонецЕсли; ПодстрокаСЦифрами = ПодстрокаСЦифрами + Сред(СтрокаСоВременем,Позиция,1); @@ -169,7 +161,7 @@ ЕстьДробнаяЧасть = Истина; КонецЕсли; Иначе - Если Символ = " " И ЗаменитьЕдиницуИзмеренияНаМножитель(ПодстрокаСБуквами)="0" Тогда + Если Символ = " " И ЗаменитьЕдиницуИзмеренияНаМножитель(ПодстрокаСБуквами) = "0" Тогда ПодстрокаСБуквами = ""; КонецЕсли; diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl index 9773c7bcd..8b03c6354 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/НапоминанияПользователяПереопределяемый/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяПереопределяемый/Module.bsl index 2182fcfdb..8d3d69e1f 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Переопределяет настройки подсистемы. diff --git a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl index ea1b1e59c..4fd265967 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -44,7 +52,7 @@ Функция НастройкиПодсистемы() Экспорт Настройки = Новый Структура; Настройки.Вставить("Расписания", ПолучитьСтандартныеРасписанияДляНапоминания()); - Настройки.Вставить("СтандартныеИнтервалы", НапоминанияПользователяКлиентСервер.ПолучитьСтандартныеИнтервалыОповещения()); + Настройки.Вставить("СтандартныеИнтервалы", СтандартныеИнтервалыОповещения()); НапоминанияПользователяПереопределяемый.ПриОпределенииНастроек(Настройки); // Поддержка обратной совместимости. @@ -54,6 +62,19 @@ Возврат Настройки; КонецФункции +Функция СтандартныеИнтервалыОповещения() + + Результат = Новый Массив; + + ИнтервалыВремени = Новый Структура("_5м,_10м,_15м,_30м,_1ч,_2ч,_4ч,_8ч,_1д,_2д,_3д,_1н,_2н"); + Для Каждого Интервал Из ИнтервалыВремени Цикл + Результат.Добавить(НапоминанияПользователяКлиентСервер.ОформитьВремя(Интервал.Ключ)); + КонецЦикла; + + Возврат Результат; + +КонецФункции + // Возвращает стандартные расписания для периодических напоминаний. Функция ПолучитьСтандартныеРасписанияДляНапоминания() @@ -341,7 +362,6 @@ Функция ГрафикСобытия(Расписание, НачалоПериода, КонецПериода) Результат = Неопределено; - ТекущаяДатаСеанса = ТекущаяДатаСеанса(); ДатаОтсчета = НачалоПериода; @@ -719,7 +739,7 @@ Напоминание = НапоминанияПользователяКлиентСервер.ОписаниеНапоминания(ПараметрыНапоминания, Истина); Если Не ЗначениеЗаполнено(Напоминание.Пользователь) Тогда - Напоминание.Пользователь = ПользователиКлиентСервер.ТекущийПользователь(); + Напоминание.Пользователь = Пользователи.ТекущийПользователь(); КонецЕсли; Если Не ЗначениеЗаполнено(Напоминание.СпособУстановкиВремениНапоминания) Тогда @@ -813,7 +833,6 @@ Или ГрафикСобытияНаГод.Количество() = 1 И ТекущаяДатаСеанса() > ДобавитьМесяц(Напоминание.ВремяСобытия, 1) // - напоминание ежемесячное, но уже прошла неделя со времени события. Или ГрафикСобытияНаГод.Количество() = 12 И ТекущаяДатаСеанса() > Напоминание.ВремяСобытия + 60*60*24*7 Тогда - ВремяБлижайшегоСобытия = Неопределено; Если ПодошедшееВремяСобытия.Количество() > 0 Тогда ОтключитьНапоминание(Напоминание, Ложь); diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl index 64b58a5ad..3e8264a84 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Заполняет значение реквизита дополнительного упорядочивания у объекта. @@ -136,7 +144,7 @@ ВыводитьКоманды = Ложь; Для Каждого Источник Из Источники.Строки Цикл Если ОбъектыСНастраиваемымПорядком.Найти(Источник.ПолноеИмя) <> Неопределено Тогда - ВыводитьКоманды = Истина; + ВыводитьКоманды = ПравоДоступа("Изменение", Источник.Метаданные); Прервать; КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl index 92ca283b8..4fd233fc2 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Возвращает значение реквизита доп. упорядочивания для нового объекта. @@ -259,7 +267,6 @@ МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); Исключение - ТекстСообщенияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат Неопределено; КонецПопытки; @@ -271,6 +278,7 @@ ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); Возврат Результат; + КонецФункции Процедура ПоменятьЭлементыМестами(ПервыйЭлементСсылка, ВторойЭлементСсылка) diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера/Module.bsl index cec302f38..5d55c5877 100644 --- a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Проверяет завершение операции применения разрешений на использование внешних ресурсов. diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный/Module.bsl index 9956bcd99..d83c53741 100644 --- a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный/Module.bsl +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Выполняет асинхронную обработку оповещения о закрытии форм мастера настройки разрешений на diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl index 2b1bb34ef..99d212abd 100644 --- a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -24,91 +32,6 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Применение запросов разрешений на использование внешних ресурсов. -// - -// Применяет изменения разрешений в профилях безопасности в кластере серверов по сценарию. -// -// Параметры: -// ВидыОпераций - Структура, описывающая значения перечисления ОперацииАдминистрированияПрофилейБезопасности: -// * Ключ - Строка - имя значения перечисления, -// * Значение - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности, -// СценарийПримененияРазрешений - Массив(Структура) - сценарий применения изменений разрешений на -// использование профилей безопасности в кластере серверов. Значениями массива являются структуры -// со следующими полями: -// * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности - операция, которую -// требуется выполнить, -// * Профиль - Строка, имя профиля безопасности, -// * Разрешения - Структура - описание свойств профиля безопасности, см. -// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(), -// ПараметрыАдминистрированияКластера - Структура - параметры администрирования кластера серверов, см. -// АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(), -// ПараметрыАдминистрированияИнформационнойБазы - Структура - параметры администрирования информационной -// базы, см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(). -// -Процедура ПрименитьИзмененияРазрешенийВПрофиляхБезопасностиВКластереСерверов(Знач ВидыОпераций, Знач СценарийПримененияРазрешений, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы = Неопределено) Экспорт - - Если ПараметрыАдминистрированияКластера.ТипПодключения = "COM" Тогда - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); - КонецЕсли; - - ТребуютсяПараметрыАдминистрированияИБ = (ПараметрыАдминистрированияИнформационнойБазы <> Неопределено); - - АдминистрированиеКластераКлиентСервер.ПроверитьПараметрыАдминистрирования( - ПараметрыАдминистрированияКластера, - ПараметрыАдминистрированияИнформационнойБазы, - Истина, - ТребуютсяПараметрыАдминистрированияИБ); - - Для Каждого ЭлементСценария Из СценарийПримененияРазрешений Цикл - - Если ЭлементСценария.Операция = ВидыОпераций.Создание Тогда - - Если АдминистрированиеКластераКлиентСервер.ПрофильБезопасностиСуществует(ПараметрыАдминистрированияКластера, ЭлементСценария.Профиль) Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Профиль безопасности %1 уже присутствует в кластере серверов. Настройки в профиле безопасности будут замещены...'"), ЭлементСценария.Профиль)); - - АдминистрированиеКластераКлиентСервер.УстановитьСвойстваПрофиляБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Разрешения); - - Иначе - - АдминистрированиеКластераКлиентСервер.СоздатьПрофильБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Разрешения); - - КонецЕсли; - - ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.Назначение Тогда - - АдминистрированиеКластераКлиентСервер.УстановитьПрофильБезопасностиИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИнформационнойБазы, ЭлементСценария.Профиль); - - ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.Обновление Тогда - - АдминистрированиеКластераКлиентСервер.УстановитьСвойстваПрофиляБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Разрешения); - - ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.Удаление Тогда - - Если АдминистрированиеКластераКлиентСервер.ПрофильБезопасностиСуществует(ПараметрыАдминистрированияКластера, ЭлементСценария.Профиль) Тогда - - АдминистрированиеКластераКлиентСервер.УдалитьПрофильБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Профиль); - - Иначе - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Профиль безопасности %1 отсутствует в кластере серверов. Возможно, профиль безопасности был удален ранее...'"), ЭлементСценария.Профиль)); - - КонецЕсли; - - ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.УдалениеНазначения Тогда - - АдминистрированиеКластераКлиентСервер.УстановитьПрофильБезопасностиИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИнформационнойБазы, ""); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Логика перехода между операциями мастера настройки разрешений на использование // внешних ресурсов. diff --git a/SSL/src/CommonModules/НастройкиПрограммыПереопределяемый/Module.bsl b/SSL/src/CommonModules/НастройкиПрограммыПереопределяемый/Module.bsl index 066160ae5..87a1c9253 100644 --- a/SSL/src/CommonModules/НастройкиПрограммыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/НастройкиПрограммыПереопределяемый/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl index bd4363cef..4664abc0a 100644 --- a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область ИнициализацияОбмена @@ -43,6 +51,9 @@ КомпонентыОбмена.Вставить("КлючСообщенияЖурналаРегистрации", ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными()); КомпонентыОбмена.Вставить("ИспользоватьКвитирование", Истина); + КомпонентыОбмена.Вставить("ОбменДаннымиСВнешнейСистемой", Ложь); + КомпонентыОбмена.Вставить("ИдентификаторКорреспондента", ""); + КомпонентыОбмена.Вставить("ТолькоНастройкиXDTO", Ложь); // Перечень поддерживаемых объектов формата для текущего сеанса обмена. // Содержит набор совместно поддерживаемых объектов этой базы и базы корреспондента @@ -232,7 +243,7 @@ Исключение СтрокаСообщения = НСтр("ru = 'Ошибка при попытке записи в файл протокола данных: %1. Описание ошибки: %2'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяФайлаПротоколаОбмена, ОписаниеОшибки()); ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, КомпонентыОбмена, УровеньЖурналаРегистрации.Предупреждение); @@ -685,9 +696,6 @@ СсылкиИзОбъекта = Новый Массив; КонецЕсли; - ПравилаКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов; - УзелКорреспондента = КомпонентыОбмена.УзелКорреспондента; - Если Приемник = Неопределено Тогда Приемник = ФабрикаXDTO.Создать(ТипXDTO); КонецЕсли; @@ -1028,7 +1036,6 @@ ВложенныеСвойства = СтрРазделить(СвойствоФормата_Имя,".",Ложь); // Указано полное имя свойства, входящего в группу общих свойств. Если ВложенныеСвойства.Количество() > 1 Тогда - УказаноПолноеИмяСвойства = Истина; ПолучитьЗначениеВложенныхСвойств(Приемник, ВложенныеСвойства, ЗначениеСвойства); Иначе Приемник.Свойство(СвойствоФормата_Имя, ЗначениеСвойства); @@ -1371,18 +1378,16 @@ ПараметрыЗаголовка = ПараметрыЗаголовкаСообщенияОбмена(); - ПараметрыЗаголовка.ФорматОбмена = КомпонентыОбмена.XMLСхема; - ПараметрыЗаголовка.ЭтоОбменЧерезПланОбмена = КомпонентыОбмена.ЭтоОбменЧерезПланОбмена; - ПараметрыЗаголовка.ВерсияФорматаОбмена = КомпонентыОбмена.ВерсияФорматаОбмена; + ПараметрыЗаголовка.ФорматОбмена = КомпонентыОбмена.XMLСхема; + ПараметрыЗаголовка.ЭтоОбменЧерезПланОбмена = КомпонентыОбмена.ЭтоОбменЧерезПланОбмена; + ПараметрыЗаголовка.ОбменДаннымиСВнешнейСистемой = КомпонентыОбмена.ОбменДаннымиСВнешнейСистемой; + ПараметрыЗаголовка.ВерсияФорматаОбмена = КомпонентыОбмена.ВерсияФорматаОбмена; Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - ПараметрыЗаголовка.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); - ПараметрыЗаголовка.ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(КомпонентыОбмена.УзелКорреспондента); - - ПараметрыЗаголовка.ИдентификаторПолучателя = ОбменДаннымиСервер.ИдентификаторУзлаКорреспондентаДляОбмена(КомпонентыОбмена.УзелКорреспондента); + ПараметрыЗаголовка.УзелКорреспондента = КомпонентыОбмена.УзелКорреспондента; ПараметрыЗаголовка.ИдентификаторОтправителя = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(КомпонентыОбмена.УзелКорреспондента); - + Если Не КомпонентыОбмена.ТолькоНастройкиXDTO Тогда ПараметрыЗаголовка.НомерСообщения = ЗаписьСообщения.НомерСообщения; ПараметрыЗаголовка.НомерПринятого = ЗаписьСообщения.НомерПринятого; @@ -1391,9 +1396,14 @@ ПараметрыЗаголовка.ПоддерживаемыеВерсии = КомпонентыОбмена.НастройкиXDTO.ПоддерживаемыеВерсии; ПараметрыЗаголовка.ПоддерживаемыеОбъекты = КомпонентыОбмена.НастройкиXDTO.ПоддерживаемыеОбъекты; - ПараметрыЗаголовка.Префикс = ОбменДаннымиСервер.ПрефиксИнформационнойБазы(); - - ПараметрыЗаголовка.УзелКорреспондента = КомпонентыОбмена.УзелКорреспондента; + Если Не КомпонентыОбмена.ОбменДаннымиСВнешнейСистемой Тогда + ПараметрыЗаголовка.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); + ПараметрыЗаголовка.ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(КомпонентыОбмена.УзелКорреспондента); + + ПараметрыЗаголовка.ИдентификаторПолучателя = ОбменДаннымиСервер.ИдентификаторУзлаКорреспондентаДляОбмена(КомпонентыОбмена.УзелКорреспондента); + + ПараметрыЗаголовка.Префикс = ОбменДаннымиСервер.ПрефиксИнформационнойБазы(); + КонецЕсли; КонецЕсли; @@ -1655,7 +1665,7 @@ Если Не ДанныеДляЗаписиВИБ.ЭтоНовый() И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеДляЗаписиВИБ.Ссылка, "Проведен") Тогда // Записываем новую версию документа с отменой проведения. - Результат = ОтменитьПроведениеОбъектаВИБ(ДанныеДляЗаписиВИБ, КомпонентыОбмена.УзелКорреспондента); + ОтменитьПроведениеОбъектаВИБ(ДанныеДляЗаписиВИБ, КомпонентыОбмена.УзелКорреспондента); Иначе // Записываем новую версию документа. ЗаписатьОбъектВИБ(КомпонентыОбмена, ДанныеДляЗаписиВИБ, ПравилоКонвертации.ТипДанных); @@ -1923,13 +1933,9 @@ КонецЦикла; Если НЕ КомпонентыОбмена.ФлагОшибки И КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу Тогда - ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Истина); - ПрименитьУдалениеОбъектов(КомпонентыОбмена, МассивОбъектовКУдалению, МассивЗагруженныхОбъектов); УдалитьВременныеОбъектыСозданныеПоСсылкам(КомпонентыОбмена); ОтложенноеЗаполнениеОбъектов(КомпонентыОбмена); - - ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Ложь); Если НЕ КомпонентыОбмена.ФлагОшибки Тогда Попытка КомпонентыОбмена.МенеджерОбмена.ПослеКонвертации(КомпонентыОбмена); @@ -1945,12 +1951,8 @@ КонецПопытки; КонецЕсли; Если НЕ КомпонентыОбмена.ФлагОшибки Тогда - ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Истина); - ВыполнитьОтложенноеПроведениеДокументов(КомпонентыОбмена); ВыполнитьОтложеннуюЗаписьОбъектов(КомпонентыОбмена); - - ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Ложь); КонецЕсли; КонецЕсли; @@ -2156,11 +2158,15 @@ Confirmation = Header.Confirmation; - ИмяПланаОбмена = Confirmation.ExchangePlan; + Если КомпонентыОбмена.ОбменДаннымиСВнешнейСистемой Тогда + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); + Иначе + ИмяПланаОбмена = Confirmation.ExchangePlan; - Если Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена) = Неопределено Тогда - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 177); - Прервать; + Если Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена) = Неопределено Тогда + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 177); + Прервать; + КонецЕсли; КонецЕсли; ФорматПланаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена"); @@ -2169,8 +2175,19 @@ Не ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(КомпонентыОбмена.УзелКорреспондента) Или (URIФормата = ФорматПланаОбмена); - КомпонентыОбмена.НомерВходящегоСообщения = Confirmation.MessageNo; - КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом = Confirmation.ReceivedNo; + Если Confirmation.MessageNo <> Неопределено Тогда + КомпонентыОбмена.НомерВходящегоСообщения = Confirmation.MessageNo; + Иначе + КомпонентыОбмена.НомерВходящегоСообщения = 0; + КонецЕсли; + Если Confirmation.ReceivedNo <> Неопределено Тогда + КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом = Confirmation.ReceivedNo; + Иначе + КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом = 0; + КонецЕсли; + + КодОтКого = Confirmation.From; + КодКому = Confirmation.To; Если Не КомпонентыОбмена.ТолькоНастройкиXDTO Тогда КомпонентыОбмена.XMLСхема = URIФормата; @@ -2200,43 +2217,43 @@ КомпонентыОбмена.МенеджерОбмена = МенеджерОбменаВерсииФормата(КомпонентыОбмена.ВерсияФорматаОбмена, КомпонентыОбмена.УзелКорреспондента); - КодОтКого = Confirmation.From; - КодКому = Confirmation.To; - - КодОтКогоНовый = ""; - Если Header.Установлено("NewFrom") Тогда - КодОтКогоНовый = Header.NewFrom; - КонецЕсли; - Если КомпонентыОбмена.НомерВходящегоСообщения <= 0 Тогда КомпонентыОбмена.ИспользоватьКвитирование = Ложь; КонецЕсли; - - ПолучательИзСообщения = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодКому); - Если ПолучательИзСообщения <> ПланыОбмена[ИмяПланаОбмена].ЭтотУзел() Тогда - // Возможно, задан виртуальный код получателя. - ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(КомпонентыОбмена.УзелКорреспондента); - Если ПсевдонимПредопределенногоУзла <> КодКому Тогда - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 178); - Прервать; + + Если Не КомпонентыОбмена.ОбменДаннымиСВнешнейСистемой Тогда + + КодОтКогоНовый = ""; + Если Header.Установлено("NewFrom") Тогда + КодОтКогоНовый = Header.NewFrom; КонецЕсли; - КонецЕсли; - - ОтправительИзСообщения = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодОтКого); - Если (ОтправительИзСообщения = Неопределено - Или ОтправительИзСообщения <> КомпонентыОбмена.УзелКорреспондента) - И ЗначениеЗаполнено(КодОтКогоНовый) Тогда - ОтправительИзСообщения = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодОтКогоНовый); - КонецЕсли; - - Если ОтправительИзСообщения = Неопределено - Или ОтправительИзСообщения <> КомпонентыОбмена.УзелКорреспондента Тогда - СтрокаСообщения = НСтр("ru = 'Не найден узел обмена для загрузки данных. План обмена: %1, Идентификатор: %2'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПланаОбмена, КодОтКого); - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); - Прервать; + ПолучательИзСообщения = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодКому); + Если ПолучательИзСообщения <> ПланыОбмена[ИмяПланаОбмена].ЭтотУзел() Тогда + // Возможно, задан виртуальный код получателя. + ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(КомпонентыОбмена.УзелКорреспондента); + Если ПсевдонимПредопределенногоУзла <> КодКому Тогда + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 178); + Прервать; + КонецЕсли; + КонецЕсли; + ОтправительИзСообщения = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодОтКого); + Если (ОтправительИзСообщения = Неопределено + Или ОтправительИзСообщения <> КомпонентыОбмена.УзелКорреспондента) + И ЗначениеЗаполнено(КодОтКогоНовый) Тогда + ОтправительИзСообщения = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодОтКогоНовый); + КонецЕсли; + + Если ОтправительИзСообщения = Неопределено + Или ОтправительИзСообщения <> КомпонентыОбмена.УзелКорреспондента Тогда + + СтрокаСообщения = НСтр("ru = 'Не найден узел обмена для загрузки данных. План обмена: %1, Идентификатор: %2'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПланаОбмена, КодОтКого); + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СтрокаСообщения); + Прервать; + + КонецЕсли; КонецЕсли; Если КомпонентыОбмена.ИспользоватьКвитирование Тогда @@ -2266,6 +2283,10 @@ КонецЕсли; + Если КомпонентыОбмена.ОбменДаннымиСВнешнейСистемой Тогда + КомпонентыОбмена.ИдентификаторКорреспондента = КодОтКого; + КонецЕсли; + ЗаполнитьСтруктуруНастроекXDTOКорреспондента(КомпонентыОбмена.НастройкиXDTOКорреспондента, Header, Не (URIФормата = ФорматПланаОбмена), КомпонентыОбмена.УзелКорреспондента); @@ -2274,8 +2295,8 @@ КонецЕсли; // Проверяем поддержку кодировки по УИДам в корреспонденте. - КомпонентыОбмена.Вставить("КорреспондентПоддерживаетИдентификаторОбменаДанными", - КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии.Найти(НомерВерсииСПоддержкойИдентификатораОбменаДанными()) <> Неопределено); + КомпонентыОбмена.Вставить("КорреспондентПоддерживаетИдентификаторОбменаДанными", + ВерсияПоддерживается(КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии, НомерВерсииСПоддержкойИдентификатораОбменаДанными())); Иначе @@ -2510,7 +2531,6 @@ ОписаниеОшибки = ""; ДокументПроведенУспешно = Ложь; - КлючСообщенияЖурналаРегистрации = КомпонентыОбмена.КлючСообщенияЖурналаРегистрации; УзелКорреспондента = КомпонентыОбмена.УзелКорреспондента; // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку @@ -2570,8 +2590,6 @@ ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Истина, Ложь, Отправитель); // Проверка на коллизии дат запрета загрузки. - Отказ = Ложь; - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); ПроведениеДокументаОтменено = Ложь; @@ -2963,30 +2981,17 @@ // Функция ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(Знач УзелИнформационнойБазы) Экспорт - ПроверяемаяВерсия = НомерВерсииСПоддержкойИдентификатораОбменаДанными(); - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - Результат = Ложь; - Если УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел() Или Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда - - ПоддерживаемыеВерсии = ВерсииФорматаОбмена(УзелИнформационнойБазы); - - Для Каждого ПоддерживаемаяВерсия Из ПоддерживаемыеВерсии Цикл - Если СравнитьВерсии(ПоддерживаемаяВерсия.Ключ, ПроверяемаяВерсия) >= 0 Тогда - Результат = Истина; - Прервать; - КонецЕсли; - КонецЦикла; + ПоддерживаемыеВерсии = ВерсииФорматаОбменаМассив(УзелИнформационнойБазы); Иначе - ВерсияФорматаКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "ВерсияФорматаОбмена"); - - Результат = (СравнитьВерсии(ВерсияФорматаКорреспондента, ПроверяемаяВерсия) >= 0); + ПоддерживаемыеВерсии = Новый Массив; + ПоддерживаемыеВерсии.Добавить(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "ВерсияФорматаОбмена")); КонецЕсли; - Возврат Результат; + Возврат ВерсияПоддерживается(ПоддерживаемыеВерсии, НомерВерсииСПоддержкойИдентификатораОбменаДанными()); КонецФункции @@ -3083,11 +3088,6 @@ Возврат; КонецЕсли; - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(КомпонентыОбмена.УзелКорреспондента); - - ОбъектыБазы = Неопределено; - ОбъектыБазыКорреспондента = Неопределено; - Если КомпонентыОбмена.НаправлениеОбмена = "Отправка" Тогда // Для отправки поддерживаются объекты: @@ -4028,6 +4028,7 @@ ПараметрыЗаголовка = Новый Структура; ПараметрыЗаголовка.Вставить("ФорматОбмена", ""); ПараметрыЗаголовка.Вставить("ЭтоОбменЧерезПланОбмена", Ложь); + ПараметрыЗаголовка.Вставить("ОбменДаннымиСВнешнейСистемой", Ложь); ПараметрыЗаголовка.Вставить("ВерсияФорматаОбмена", ""); ПараметрыЗаголовка.Вставить("ИмяПланаОбмена", ""); @@ -4068,35 +4069,51 @@ Confirmation = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(XMLБазоваяСхема(), "Confirmation")); - Confirmation.ExchangePlan = ПараметрыЗаголовка.ИмяПланаОбмена; - Confirmation.To = ПараметрыЗаголовка.ИдентификаторПолучателя; - - Если ЗначениеЗаполнено(ПараметрыЗаголовка.ПсевдонимПредопределенногоУзла) Тогда - // Требуется корректировка кода узла отправителя. - Confirmation.From = ПараметрыЗаголовка.ПсевдонимПредопределенногоУзла; - Иначе + Если ПараметрыЗаголовка.ОбменДаннымиСВнешнейСистемой Тогда Confirmation.From = ПараметрыЗаголовка.ИдентификаторОтправителя; + + Confirmation.MessageNo = ПараметрыЗаголовка.НомерСообщения; + Confirmation.ReceivedNo = ПараметрыЗаголовка.НомерПринятого; + + Header.Confirmation = Confirmation; + + Для Каждого ВерсияФормата Из ПараметрыЗаголовка.ПоддерживаемыеВерсии Цикл + Header.AvailableVersion.Добавить(ВерсияФормата); + КонецЦикла; + + ВыгрузитьПоддерживаемыеОбъектыФормата(Header, + ПараметрыЗаголовка.ПоддерживаемыеОбъекты, ПараметрыЗаголовка.УзелКорреспондента); + Иначе + Confirmation.ExchangePlan = ПараметрыЗаголовка.ИмяПланаОбмена; + Confirmation.To = ПараметрыЗаголовка.ИдентификаторПолучателя; + + Если ЗначениеЗаполнено(ПараметрыЗаголовка.ПсевдонимПредопределенногоУзла) Тогда + // Требуется корректировка кода узла отправителя. + Confirmation.From = ПараметрыЗаголовка.ПсевдонимПредопределенногоУзла; + Иначе + Confirmation.From = ПараметрыЗаголовка.ИдентификаторОтправителя; + КонецЕсли; + + Confirmation.MessageNo = ПараметрыЗаголовка.НомерСообщения; + Confirmation.ReceivedNo = ПараметрыЗаголовка.НомерПринятого; + + Header.Confirmation = Confirmation; + + Для Каждого ВерсияФормата Из ПараметрыЗаголовка.ПоддерживаемыеВерсии Цикл + Header.AvailableVersion.Добавить(ВерсияФормата); + КонецЦикла; + + Если ЗначениеЗаполнено(ПараметрыЗаголовка.ПсевдонимПредопределенногоУзла) Тогда + // Тип Header является Упорядоченным, поэтому важен порядок присвоения значений свойств. + // В противном случае может быть не пройдена валидация по схеме. + Header.NewFrom = ПараметрыЗаголовка.ИдентификаторОтправителя; + КонецЕсли; + + ВыгрузитьПоддерживаемыеОбъектыФормата(Header, + ПараметрыЗаголовка.ПоддерживаемыеОбъекты, ПараметрыЗаголовка.УзелКорреспондента); + + Header.Prefix = ПараметрыЗаголовка.Префикс; КонецЕсли; - - Confirmation.MessageNo = ПараметрыЗаголовка.НомерСообщения; - Confirmation.ReceivedNo = ПараметрыЗаголовка.НомерПринятого; - - Header.Confirmation = Confirmation; - - Для Каждого ВерсияФормата Из ПараметрыЗаголовка.ПоддерживаемыеВерсии Цикл - Header.AvailableVersion.Добавить(ВерсияФормата); - КонецЦикла; - - Если ЗначениеЗаполнено(ПараметрыЗаголовка.ПсевдонимПредопределенногоУзла) Тогда - // Тип Header является Упорядоченным, поэтому важен порядок присвоения значений свойств. - // В противном случае может быть не пройдена валидация по схеме. - Header.NewFrom = ПараметрыЗаголовка.ИдентификаторОтправителя; - КонецЕсли; - - ВыгрузитьПоддерживаемыеОбъектыФормата(Header, - ПараметрыЗаголовка.ПоддерживаемыеОбъекты, ПараметрыЗаголовка.УзелКорреспондента); - - Header.Prefix = ПараметрыЗаголовка.Префикс; Иначе Header.AvailableVersion.Добавить(ПараметрыЗаголовка.ВерсияФорматаОбмена); @@ -4391,8 +4408,6 @@ Для НомерСтроки = 1 По МассивСтруктурСДаннымиСтрок.Количество() Цикл - СтруктураСДаннымиСтроки = МассивСтруктурСДаннымиСтрок[НомерСтроки - 1]; - // Возможно, строка уже была добавлена при прямой конвертации Если НомерСтроки <= КоличествоСтрокТЧКонфигурации Тогда СтрокаТЧ = ПолученныеДанные[ТЧ.ТЧКонфигурации][НомерСтроки - 1]; @@ -4828,7 +4843,6 @@ Процедура ОтложенноеЗаполнениеОбъектов(КомпонентыОбмена) - ПараметрыКонвертации = КомпонентыОбмена.ПараметрыКонвертации; ЗагруженныеОбъекты = КомпонентыОбмена.ЗагруженныеОбъекты; Попытка @@ -5158,8 +5172,6 @@ Или ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда Если ТаблицыДляЗагрузки <> Неопределено Тогда - ТипОбъектаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; - ТипИсточникаСтрокой = ОбъектXDTO.Тип().Имя; ТипПриемникаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; @@ -6076,7 +6088,7 @@ // Параметры: // УзелИнформационнойБазы - ссылка на узел-корреспондент. // -Функция ВерсииФорматаОбменаМассив(Знач УзелИнформационнойБазы) +Функция ВерсииФорматаОбменаМассив(Знач УзелИнформационнойБазы) Экспорт Возврат СортироватьВерсииФормата(ВерсииФорматаОбмена(УзелИнформационнойБазы)); @@ -6126,6 +6138,21 @@ КонецФункции +Функция ВерсияПоддерживается(ПоддерживаемыеВерсии, ПроверяемаяВерсия) + + Результат = Ложь; + + Для Каждого ПоддерживаемаяВерсия Из ПоддерживаемыеВерсии Цикл + Если СравнитьВерсии(ПоддерживаемаяВерсия, ПроверяемаяВерсия) >= 0 Тогда + Результат = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область Прочее @@ -6170,7 +6197,6 @@ ЛитералыТипа = СтрРазделить(ОбъектМетаданных.ПолноеИмя(), "."); ТипТаблицы = ЛитералыТипа[0]; - ИмяТаблицы = ЛитералыТипа[1]; Если ТипТаблицы = "Константа" Тогда diff --git a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl index 980a633a4..f1c510937 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает данные списка объектов заданного объекта метаданных в виде системного представления. diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl index daa4c2495..81995a3b0 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Обмен данными" // @@ -12,16 +20,7 @@ // Процедура СброситьКэшМеханизмаРегистрацииОбъектов() Экспорт - Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - - УстановитьПривилегированныйРежим(Истина); - // Записываем дату и время компьютера сервера - ТекущаяДата() - // метод ТекущаяДатаСеанса() использовать нельзя. - // Текущая дата сервера в данном случае используется в качестве ключа уникальности кэша механизма регистрации - // объектов. - Константы.ДатаОбновленияПовторноИспользуемыхЗначенийМРО.Установить(ТекущаяДата()); - - КонецЕсли; + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); КонецПроцедуры @@ -29,22 +28,6 @@ #Область СлужебныйПрограммныйИнтерфейс -// Возвращает признак ошибки при запуске: -// 1) Ошибка загрузки сообщения обмена: -// - ошибка загрузки идентификаторов объектов метаданных при загрузке сообщения обмена, -// - ошибка проверки идентификаторов объектов метаданных, -// - ошибка загрузки сообщения обмена перед обновлением ИБ, -// - ошибка загрузки сообщения обмена перед обновлением ИБ в режиме когда версия не изменилась; -// 2) Ошибка обновления ИБ после успешной загрузки сообщения обмена. -// -Функция ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Получить(); - -КонецФункции - // Возвращает состояние выполнения фонового задания. // Используется для реализации логики длительных операций. // @@ -75,56 +58,6 @@ #Область СлужебныеПроцедурыИФункции -// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. -Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт - - // Инициализация параметров сеанса должна выполняться без обращения к параметрам работы программы. - - Если ИмяПараметра = "РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском" Тогда - ПараметрыСеанса.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском = Новый ФиксированнаяСтруктура(Новый Структура); - УстановленныеПараметры.Добавить("РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском"); - Возврат; - КонецЕсли; - - Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - - // Процедура обновления повторно-используемых значений и параметров сеанса. - ОбновитьКэшМеханизмаРегистрацииОбъектов(); - - // Зарегистрируем имена параметров, которые установлены при. - // Выполнении ОбменДаннымиВызовСервера.ОбновитьКэшМеханизмаРегистрацииОбъектов. - УстановленныеПараметры.Добавить("ПравилаВыборочнойРегистрацииОбъектов"); - УстановленныеПараметры.Добавить("ПравилаРегистрацииОбъектов"); - УстановленныеПараметры.Добавить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО"); - - ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(Новый Соответствие); - УстановленныеПараметры.Добавить("ПаролиСинхронизацииДанных"); - - ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Новый Массив); - УстановленныеПараметры.Добавить("ПриоритетныеДанныеОбмена"); - - ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(Новый Соответствие); - УстановленныеПараметры.Добавить("ПараметрыСеансаСинхронизацииДанных"); - - СтруктураПроверки =Новый Структура; - СтруктураПроверки.Вставить("ПроверятьРасхождениеВерсий", Ложь); - СтруктураПроверки.Вставить("ЕстьОшибка", Ложь); - СтруктураПроверки.Вставить("ТекстОшибки", ""); - - ПараметрыСеанса.ОшибкаРасхожденияВерсийПриПолученииДанных = Новый ФиксированнаяСтруктура(СтруктураПроверки); - УстановленныеПараметры.Добавить("ОшибкаРасхожденияВерсийПриПолученииДанных"); - - Иначе - - ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(Новый Соответствие); - УстановленныеПараметры.Добавить("ПаролиСинхронизацииДанных"); - - ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(Новый Соответствие); - УстановленныеПараметры.Добавить("ПараметрыСеансаСинхронизацииДанных"); - КонецЕсли; - -КонецПроцедуры - // Выполняет процесс обмена данными отдельно для каждой строки настройки обмена. // Процесс обмена данными состоит из двух стадий: // - инициализация обмена - подготовка подсистемы обмена данными к процессу обмена @@ -151,67 +84,6 @@ КонецПроцедуры -// Выполняет проверку актуальности КЭШа механизма регистрации объектов. -// Если кэш неактуальный, то выполняется инициализация КЭШа актуальными значениями. -// -// Параметры: -// Нет. -// -Процедура ПроверитьКэшМеханизмаРегистрацииОбъектов() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - - АктуальнаяДата = ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО"); - - Если ПараметрыСеанса.ДатаОбновленияПовторноИспользуемыхЗначенийМРО <> АктуальнаяДата Тогда - - ОбновитьКэшМеханизмаРегистрацииОбъектов(); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Обновляет/устанавливает повторно-используемые значения и параметры сеанса для подсистемы обмена данными. -// -// Устанавливаемые параметры сеанса: -// ПравилаРегистрацииОбъектов - ХранилищеЗначения - в бинарном виде содержит таблицу значений с правилами регистрации -// объектов. -// ПравилаВыборочнойРегистрацииОбъектов - -// ДатаОбновленияПовторноИспользуемыхЗначенийМРО - Дата (Дата и время) - содержит дату последнего актуального -// кэша для подсистемы обмена данными. -// -// Параметры: -// Нет. -// -Процедура ОбновитьКэшМеханизмаРегистрацииОбъектов() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ОбновитьПовторноИспользуемыеЗначения(); - - Если ОбменДаннымиПовтИсп.ИспользуемыеПланыОбмена().Количество() > 0 Тогда - - ПараметрыСеанса.ПравилаРегистрацииОбъектов = Новый ХранилищеЗначения(ОбменДаннымиСервер.ПолучитьПравилаРегистрацииОбъектов()); - - ПараметрыСеанса.ПравилаВыборочнойРегистрацииОбъектов = Новый ХранилищеЗначения(ОбменДаннымиСервер.ПолучитьПравилаВыборочнойРегистрацииОбъектов()); - - Иначе - - ПараметрыСеанса.ПравилаРегистрацииОбъектов = Новый ХранилищеЗначения(ОбменДаннымиСервер.ИнициализацияТаблицыПравилРегистрацииОбъектов()); - - ПараметрыСеанса.ПравилаВыборочнойРегистрацииОбъектов = Новый ХранилищеЗначения(ОбменДаннымиСервер.ИнициализацияТаблицыПравилВыборочнойРегистрацииОбъектов()); - - КонецЕсли; - - // Ключ для проверки актуальности кэша. - ПараметрыСеанса.ДатаОбновленияПовторноИспользуемыхЗначенийМРО = ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО"); - -КонецПроцедуры - // Фиксирует успешное выполнение обмена данными в системе. // Процедура ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Знач УзелИнформационнойБазы, Знач ДатаНачала) Экспорт @@ -249,41 +121,6 @@ СтрокаСообщенияОбОшибке); КонецПроцедуры -// Выполняет получение файла сообщения обмена из базы-корреспондента через веб-сервис. -// Выполняет загрузку полученного файла сообщения обмена в эту базу. -// -Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( - Отказ, - Знач УзелИнформационнойБазы, - Знач ИдентификаторФайла, - Знач ДатаНачалаОперации, - Знач ПараметрыАутентификации = Неопределено) Экспорт - - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла, - ДатаНачалаОперации, - ПараметрыАутентификации); -КонецПроцедуры - -// Выполняет попытку установки внешнего соединения по переданным параметрам подключения. -// Если установить внешнее соединение не удалось, то поднимается флаг Отказ. -// -Процедура ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, СтруктураНастроек, ОшибкаПодключенияКомпоненты = Ложь) Экспорт - - СтрокаСообщенияОбОшибке = ""; - - // Выполняем попытку установки внешнего соединения. - Результат = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(СтруктураНастроек); - // Выводим сообщение об ошибке. - Если Результат.Соединение = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.КраткоеОписаниеОшибки,,,, Отказ); - КонецЕсли; - ОшибкаПодключенияКомпоненты = Результат.ОшибкаПодключенияКомпоненты; - -КонецПроцедуры - // Возвращает признак того, что набора записей регистра не содержит данных. // Функция НаборЗаписейРегистраПустой(СтруктураЗаписи, ИмяРегистра) Экспорт @@ -389,53 +226,6 @@ КонецФункции -// Возвращает признак изменения конфигурации для подчиненного узла распределенной ИБ. -// -Функция ТребуетсяУстановкаОбновления() Экспорт - - ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(); - - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбменДаннымиСервер.ТребуетсяУстановкаОбновления(); - -КонецФункции - -// Удаляет информацию о проблемах записи объекта при его записи. -// -Процедура ЗарегистрироватьУстранениеПроблемы(Источник, ТипПроблемы, Знач НовоеЗначениеПометкиУдаления) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбменДаннымиПовтИсп.ИспользуемыеПланыОбмена().Количество() > 0 - И (БезопасныйРежим() = ЛОЖЬ ИЛИ Пользователи.ЭтоПолноправныйПользователь()) Тогда - - НаборЗаписейКонфликта = РегистрыСведений.РезультатыОбменаДанными.СоздатьНаборЗаписей(); - НаборЗаписейКонфликта.Отбор.ПроблемныйОбъект.Установить(Источник); - НаборЗаписейКонфликта.Отбор.ТипПроблемы.Установить(ТипПроблемы); - - НаборЗаписейКонфликта.Прочитать(); - - Если НаборЗаписейКонфликта.Количество() = 1 Тогда - - Если НовоеЗначениеПометкиУдаления <> ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник, "ПометкаУдаления") Тогда - - НаборЗаписейКонфликта[0].ПометкаУдаления = НовоеЗначениеПометкиУдаления; - НаборЗаписейКонфликта.Записать(); - - Иначе - - НаборЗаписейКонфликта.Очистить(); - НаборЗаписейКонфликта.Записать(); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - // Выполняет удаление настройки синхронизации данных. // Процедура УдалитьНастройкуСинхронизации(Знач УзелИнформационнойБазы) Экспорт @@ -454,273 +244,6 @@ //////////////////////////////////////////////////////////////////////////////// // Обмен данными под полными правами. -// Проверяет режим запуска, устанавливает привилегированный режим и выполняет обработчик. -// -Процедура ВыполнитьОбработчикВПривилегированномРежиме(Значение, Знач СтрокаОбработчика) Экспорт - - Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда - ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); - КонецЕсли; - - Если ОбщегоНазначения.РазделениеВключено() Тогда - ВызватьИсключение НСтр("ru = 'Метод не поддерживается при работе в модели сервиса.'"); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Выполнить(СтрокаОбработчика); - -КонецПроцедуры - -// Находит регламентное задание по GUID. -// -// Параметры: -// УникальныйНомерЗадания - Строка - строка с GUID регламентного задания. -// -// Возвращаемое значение: -// Неопределено - если поиск регламентного задания по GUID не дал результатов или. -// РегламентноеЗадание - найденное по GUID регламентное задание. -// -Функция НайтиРегламентноеЗаданиеПоПараметру(Знач УникальныйНомерЗадания) Экспорт - - Если ПустаяСтрока(УникальныйНомерЗадания) Тогда - Возврат Неопределено; - КонецЕсли; - - Отбор = Новый Структура; - Отбор.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор(УникальныйНомерЗадания)); - - УстановитьПривилегированныйРежим(Истина); - Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); - - Если Задания.Количество() = 0 Тогда - Возврат Неопределено; - КонецЕсли; - - Возврат Задания[0]; - -КонецФункции - -// Возвращает структуру со значениями свойств объекта, полученных запросом из ИБ. -// Ключ структуры - имя свойства; Значение - значение свойства объекта. -// -// Параметры: -// Ссылка - ссылка на объект ИБ, значения свойств которого требуется получить. -// -// Возвращаемое значение: -// Структура - структура со значениями свойств объекта. -// -Функция ЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, Знач СвойстваОбъектаСтрокой, Знач ОбъектМетаданныхИмя) Экспорт - - Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда - ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); - КонецЕсли; - - Если ОбщегоНазначения.РазделениеВключено() Тогда - ВызватьИсключение НСтр("ru = 'Метод не поддерживается при работе в модели сервиса.'"); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбменДаннымиСобытия.ЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, СвойстваОбъектаСтрокой, ОбъектМетаданныхИмя); -КонецФункции - -// Возвращает массив узлов плана обмена по заданным параметрам запроса и тексту запроса к таблице плана обмена. -// -// -Функция МассивУзловПоЗначениямСвойств(ЗначенияСвойств, Знач ТекстЗапроса, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага, Знач Выгрузка = Ложь) Экспорт - - Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда - ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбменДаннымиСобытия.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага, Выгрузка); -КонецФункции - -// Возвращает значение параметра сеанса ПравилаРегистрацииОбъектов, полученное в привилегированном режиме. -// -// Возвращаемое значение: -// ХранилищеЗначения - значение параметра сеанса ПравилаРегистрацииОбъектов. -// -Функция ПараметрыСеансаПравилаРегистрацииОбъектов() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ПараметрыСеанса.ПравилаРегистрацииОбъектов; - -КонецФункции - -// Функция возвращает список всех узлов заданного плана обмена кроме предопределенного узла. -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе, список узлов для которого необходимо -// получить. -// -// Возвращаемое значение: -// Массив - список всех узлов заданного плана обмена. -// -Функция ВсеУзлыПланаОбмена(Знач ИмяПланаОбмена) Экспорт - - Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда - ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбменДаннымиСервер.УзлыПланаОбмена(ИмяПланаОбмена); - -КонецФункции - -// Возвращает признак того, что для получателя зарегистрированы изменения данных. -// -Функция ИзмененияЗарегистрированы(Знач Получатель) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 1 - |ИЗ - | [Таблица].Изменения КАК ТаблицаИзменений - |ГДЕ - | ТаблицаИзменений.Узел = &Узел"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Узел", Получатель); - - УстановитьПривилегированныйРежим(Истина); - - СоставПланаОбмена = Метаданные.ПланыОбмена[ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Получатель)].Состав; - - Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл - - Запрос.Текст = СтрЗаменить(ТекстЗапроса, "[Таблица]", ЭлементСостава.Метаданные.ПолноеИмя()); - - РезультатЗапроса = Запрос.Выполнить(); - - Если Не РезультатЗапроса.Пустой() Тогда - Возврат Истина; - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; -КонецФункции - -// Возвращает признак использования плана обмена в обмене данными. -// Если план обмена содержит хотя бы один узел кроме предопределенного, -// то считается, что он используется. -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. -// -// Возвращаемое значение: -// Булево - Истина, если план обмена используется, Ложь - нет. -// -Функция ОбменДаннымиВключен(Знач ИмяПланаОбмена, Знач Отправитель) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбменДаннымиПовтИсп.ОбменДаннымиВключен(ИмяПланаОбмена, Отправитель); -КонецФункции - -// Получает массив узлов плана обмена, для которых установлен признак «Выгружать всегда». -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, по которому определяются узлы. -// ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов. -// -// Возвращаемое значение: -// Массив - узлы плана обмена, для которых установлен признак «Выгружать всегда». -// -Функция УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт - - Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда - ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбменДаннымиСобытия.УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(ИмяПланаОбмена, ИмяРеквизитаФлага); - -КонецФункции - -// Получает массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости». -// -// Параметры: -// Ссылка - ссылка на объект ИБ, для которого необходимо получить массив узлов, в которые объект ранее выгружался. -// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, по которому определяются узлы. -// ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов. -// -// Возвращаемое значение: -// Массив - узлы плана обмена, для которых установлен признак «Выгружать при необходимости». -// -Функция УзлыДляРегистрацииПоУсловиюВыгружатьПриНеобходимости(Ссылка, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт - - Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда - ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбменДаннымиСобытия.УзлыДляРегистрацииПоУсловиюВыгружатьПриНеобходимости(Ссылка, ИмяПланаОбмена, ИмяРеквизитаФлага); - -КонецФункции - -// Возвращает признак режима загрузки параметров работы программы из сообщения обмена в информационную базу. -// Актуально для обмена в РИБ при загрузке данных в подчиненном узле РИБ. -// -Функция РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском(Свойство) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ПараметрыСеанса.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском.Свойство(Свойство); - -КонецФункции - -// Возвращает список приоритетных данных обмена. -// -// Возвращаемое значение: -// Массив - коллекция ссылок на выгруженные приоритетные данные обмена. -// -Функция ПриоритетныеДанныеОбмена() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Результат = Новый Массив; - - Для Каждого Элемент Из ПараметрыСеанса.ПриоритетныеДанныеОбмена Цикл - - Результат.Добавить(Элемент); - - КонецЦикла; - - Возврат Результат; -КонецФункции - -// Дополняет список приоритетных данных обмена переданным значением. -// -Процедура ДополнитьПриоритетныеДанныеОбмена(Знач Данные) Экспорт - - Результат = ПриоритетныеДанныеОбмена(); - - Результат.Добавить(Данные); - - УстановитьПривилегированныйРежим(Истина); - - ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Результат); - -КонецПроцедуры - -// Очищает список приоритетных данных обмена. -// -Процедура ОчиститьПриоритетныеДанныеОбмена() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Новый Массив); - -КонецПроцедуры - // Получает список метаданных объектов узла, для которых не разрешена выгрузка. // Выгрузка не разрешена, если в правилах регистрации объектов плана обмена таблица отмечена как НеВыгружать. // diff --git a/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl index cc2f1067a..8c863a313 100644 --- a/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Выполняет проверку необходимости обновления конфигурации базы данных в подчиненном узле. diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index 0a7d25dc5..2e913f784 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Обмен данными" // @@ -170,13 +178,11 @@ ВыборГруппИЭлементов = Неопределено; ТекущиеДанные = Владелец.ТекущиеДанные; - Если ТекущиеДанные<>Неопределено Тогда + Если ТекущиеДанные <> Неопределено Тогда НачальноеЗначениеВыбора = ТекущиеДанные[ИмяРеквизитаИдентификатора]; КонецЕсли; - СтандартнаяОбработка = Ложь; - - Если ПараметрыВыбора<>Неопределено Тогда + Если ПараметрыВыбора <> Неопределено Тогда Если ПараметрыВыбора.Свойство("ВыборГруппИЭлементов") Тогда ВыборГруппИЭлементов = ПараметрыВыбора.ВыборГруппИЭлементов; КонецЕсли; @@ -344,7 +350,7 @@ КонецЦикла; ПараметрыПомощника = Новый Структура; - ПараметрыПомощника.Вставить("ИмяПланаОбмена", ПараметрыРаботыКлиента.ИмяПланаОбменаРИБ); + ПараметрыПомощника.Вставить("ИмяПланаОбмена", ПараметрыРаботыКлиента.ИмяПланаОбменаРИБ); ПараметрыПомощника.Вставить("ИдентификаторНастройки", ПараметрыРаботыКлиента.ИдентификаторНастройкиУзлаРИБ); ПараметрыПомощника.Вставить("НастройкаНовойСинхронизации"); ПараметрыПомощника.Вставить("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); @@ -379,6 +385,23 @@ //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные функции-свойства. +Процедура ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт + + ПараметрыОбработчикаОжидания = Новый Структура; + ПараметрыОбработчикаОжидания.Вставить("МинимальныйИнтервал", 1); + ПараметрыОбработчикаОжидания.Вставить("МаксимальныйИнтервал", 15); + ПараметрыОбработчикаОжидания.Вставить("ТекущийИнтервал", 1); + ПараметрыОбработчикаОжидания.Вставить("КоэффициентУвеличенияИнтервала", 1.4); + +КонецПроцедуры + +Процедура ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт + + ПараметрыОбработчикаОжидания.ТекущийИнтервал = Мин(ПараметрыОбработчикаОжидания.МаксимальныйИнтервал, + Окр(ПараметрыОбработчикаОжидания.ТекущийИнтервал * ПараметрыОбработчикаОжидания.КоэффициентУвеличенияИнтервала, 1)); + +КонецПроцедуры + // Возвращает максимально допустимое количество полей, // которые отображаются в помощнике сопоставления объектов ИБ. // @@ -465,7 +488,7 @@ Если ВРег(Лев(СсылкаНаПодробноеОписание, 4)) = "HTTP" Тогда - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СсылкаНаПодробноеОписание); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СсылкаНаПодробноеОписание); Иначе @@ -557,7 +580,7 @@ Возврат; КонецЕсли; - ОбщегоНазначенияКлиент.ОткрытьПроводник(ПолноеИмяФайла); + ФайловаяСистемаКлиент.ОткрытьПроводник(ПолноеИмяФайла); КонецПроцедуры @@ -592,7 +615,7 @@ ДополнительныеПараметры.Вставить("ОповещениеЗавершения", ОповещениеЗавершения); Оповещение = Новый ОписаниеОповещения("ОбработчикВыбораФайловогоКаталогаЗавершение", ЭтотОбъект, ДополнительныеПараметры); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредупреждения, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредупреждения, Ложь); КонецПроцедуры // Обработчик немодального завершения диалога выбора каталога. @@ -646,8 +669,9 @@ // ПараметрыДиалога - Структура - Необязательные дополнительные параметры диалога выбора файла. // ОповещениеЗавершения - ОписаниеОповещения - Необязательное оповещение, которое будет вызвано со следующими // параметрами: -// Результат - Строка, Неопределено - Выбранное значение (массив строк, если был -// множественный выбор), или Неопределено - если ничего не выбрано; +// Результат - Строка, Неопределено - Выбранное значение (массив строк, +// если был множественный выбор), или +// Неопределено - если ничего не выбрано; // ДополнительныеПараметры - Неопределено. // // @@ -674,7 +698,7 @@ Оповещение = Новый ОписаниеОповещения("ОбработчикВыбораФайлаПродолжение", ЭтотОбъект, ДополнительныеПараметры); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредупреждения, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредупреждения, Ложь); КонецПроцедуры @@ -1226,7 +1250,7 @@ Иначе - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресДляВосстановленияПароляУчетнойЗаписи); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(АдресДляВосстановленияПароляУчетнойЗаписи); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl index f27178fd5..3fa5cabd8 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определяет префикс кодов и номеров объектов информационной базы по умолчанию. diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index 6712b4b3f..db87e1689 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область УстаревшиеПроцедурыИФункции @@ -424,7 +432,7 @@ // Функция ПравилаРегистрацииОбъектовПланаОбмена(Знач ИмяПланаОбмена) Экспорт - ПравилаРегистрацииОбъектов = ОбменДаннымиВызовСервера.ПараметрыСеансаПравилаРегистрацииОбъектов().Получить(); + ПравилаРегистрацииОбъектов = ОбменДаннымиСлужебный.ПараметрыСеансаПравилаРегистрацииОбъектов().Получить(); Возврат ПравилаРегистрацииОбъектов.Скопировать(Новый Структура("ИмяПланаОбмена", ИмяПланаОбмена)); КонецФункции @@ -982,17 +990,6 @@ КонецФункции -// Получает менеджер плана обмена по имени объекта метаданных плана обмена. -// -// Параметры: -// УзелПланаОбмена - ПланОбменаСсылка - узел плана обмена, для которого требуется получить менеджер. -// -Функция ПолучитьМенеджерПланаОбмена(УзелПланаОбмена) Экспорт - - Возврат ПолучитьМенеджерПланаОбменаПоИмени(ПолучитьИмяПланаОбмена(УзелПланаОбмена)); - -КонецФункции - // Функция-обертка одноименной функции. // Функция МетаданныеКонфигурации(Отбор) Экспорт @@ -1027,16 +1024,9 @@ // Функция МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага, Знач Выгрузка = Ложь) Экспорт - #Если ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда - - Возврат ОбменДаннымиВызовСервера.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага, Выгрузка); - - #Иначе - - УстановитьПривилегированныйРежим(Истина); - Возврат ОбменДаннымиСобытия.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага, Выгрузка); - - #КонецЕсли + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбменДаннымиСобытия.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага, Выгрузка); КонецФункции @@ -1502,18 +1492,13 @@ ОбщийТипПлатформы = "Windows"; - СистемнаяИнфо = Новый СистемнаяИнформация; - ТипПлатформыСервера = СистемнаяИнфо.ТипПлатформы; - УстановитьПривилегированныйРежим(Истина); - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 - ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда Результат = Константы.КаталогСообщенийОбменаДаннымиДляWindows.Получить(); - ИначеЕсли ТипПлатформыСервера = ТипПлатформы.Linux_x86 - ИЛИ ТипПлатформыСервера = ТипПлатформы.Linux_x86_64 Тогда + ИначеЕсли ОбщегоНазначения.ЭтоLinuxСервер() Тогда Результат = Константы.КаталогСообщенийОбменаДаннымиДляLinux.Получить(); ОбщийТипПлатформы = "Linux"; @@ -1556,4 +1541,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index d732ab4bd..d6713cc92 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Получает значение настройки плана обмена по ее имени. @@ -12,8 +20,9 @@ // ВерсияКорреспондента - Строка - Версия конфигурации корреспондента. // // Возвращаемое значение: -// Произвольный - Тип возвращаемого значения зависит от типа значения получаемой настройки. -// Структура - Если в качестве параметра ИмяПараметра была передан список параметров через запятую. +// Произвольный, Структура - Тип возвращаемого значения зависит от типа значения получаемой настройки. +// Произвольный, если в качестве ИмяПараметра был передан единичный параметр +// Структура, если в качестве параметра ИмяПараметра была передан список параметров через запятую. // Функция ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, ИмяПараметра, ИдентификаторНастройки = "", ВерсияКорреспондента = "") Экспорт @@ -204,7 +213,7 @@ Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(СокрЛП(Префикс)); КонецЕсли; - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); КонецПроцедуры @@ -276,8 +285,6 @@ ВариантНастройки = ""; - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелПланаОбмена); - Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВариантНастройки", УзелПланаОбмена.Метаданные()) Тогда УстановитьПривилегированныйРежим(Истина); @@ -358,7 +365,7 @@ СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); @@ -850,6 +857,368 @@ КонецФункции +#Область НастройкиПодключенияКВнешнейСистеме + +// Сохраняет настройки подключения для обмена с внешней системой через EnterpriseData. +// +// Параметры: +// Контекст - Структура - контекст выполнения операции. +// * Режим - Строка - режим, в котором вызывается обработчик. +// Возможные значения: "НовоеПодключение" | "РедактированиеПараметровПодключения". +// * Корреспондент - ПланОбменаСсылка, Неопределено - узел обмена, соответствующий корреспонденту. +// Для режима "НовоеПодключение" равен Неопределено; +// * ИмяПланаОбмена - Строка, Неопределено - имя плана обмена, на котором создается узел. +// * ИдентификаторНастройки - Строка, Неопределено - идентификатор варианта настройки, +// как он указан в модуле менеджера плана обмена. +// ПараметрыПодключения - Структура - структура параметров подключения. +// * ИдентификаторКорреспондента - Строка(36), Неопределено - уникальный идентификатор корреспондента. +// * НаименованиеКорреспондента - Строка, Неопределено - название корреспондента, как он будет отображаться +// в списке настроенных синхронизаций. +// * НастройкиТранспорта - Произвольный, Неопределено - произвольное значение, описывающее параметры подключения. +// * РасписаниеСинхронизации - РасписаниеРегламентногоЗадания, Неопределено - расписание запуска синхронизации. +// * НастройкиXDTO - Структура, Неопределено - структура настроек XDTO корреспондента. +// ** ПоддерживаемыеВерсии - Массив - перечень поддерживаемых корреспондентом версий формата. +// ** ПоддерживаемыеОбъекты - ТаблицаЗначений - перечень поддерживаемых корреспондентом объектов формата. +// См. ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата +// Результат - Структура - исходящий. +// * УзелОбмена - ПланОбменаСсылка - узел плана обмена, соответствующий корреспонденту. +// * ИдентификаторКорреспондента - Строка - уникальный идентификатор корреспондента. +// +Процедура ПриСохраненииНастроекПодключенияВнешнейСистемы(Контекст, ПараметрыПодключения, Результат) Экспорт + + Корреспондент = Неопределено; + Контекст.Свойство("Корреспондент", Корреспондент); + + НастройкиXDTO = Неопределено; + ПараметрыПодключения.Свойство("НастройкиXDTO", НастройкиXDTO); + + ВерсияФорматаОбмена = ""; + Если Не НастройкиXDTO = Неопределено Тогда + Если НастройкиXDTO.ПоддерживаемыеВерсии <> Неопределено + И НастройкиXDTO.ПоддерживаемыеВерсии.Количество() > 0 Тогда + ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.МаксимальнаяОбщаяВерсияФормата( + Контекст.ИмяПланаОбмена, НастройкиXDTO.ПоддерживаемыеВерсии); + КонецЕсли; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + Если Контекст.Режим = "НовоеПодключение" Тогда + + ИдентификаторКорреспондента = Неопределено; + ПараметрыПодключения.Свойство("ИдентификаторКорреспондента", ИдентификаторКорреспондента); + Если Не ЗначениеЗаполнено(ИдентификаторКорреспондента) Тогда + ИдентификаторКорреспондента = XMLСтрока(Новый УникальныйИдентификатор); + КонецЕсли; + + Корреспондент = НовыйУзелОбменаДаннымиXDTO( + Контекст.ИмяПланаОбмена, + Контекст.ИдентификаторНастройки, + ИдентификаторКорреспондента, + ПараметрыПодключения.НаименованиеКорреспондента, + ВерсияФорматаОбмена); + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + ВыполнитьОбновлениеПравилДляОбменаДанными(); + КонецЕсли; + + ТаблицаОбъектыБазы = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата( + Контекст.ИмяПланаОбмена, "ОтправкаПолучение", Корреспондент); + + МенеджерНастройкиXDTO = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиОбменаДаннымиXDTO"); + МенеджерНастройкиXDTO.ОбновитьНастройки( + Корреспондент, "ПоддерживаемыеОбъекты", ТаблицаОбъектыБазы); + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", Корреспондент); + СтруктураЗаписи.Вставить("ИмяПланаОбменаКорреспондента", Контекст.ИмяПланаОбмена); + + ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиОбменаДаннымиXDTO"); + ИначеЕсли Контекст.Режим = "РедактированиеПараметровПодключения" Тогда + ДанныеКорреспондента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Корреспондент, "Код, Наименование, ВерсияФорматаОбмена"); + + ЗначенияДляОбновления = Новый Структура; + + Если ПараметрыПодключения.Свойство("ИдентификаторКорреспондента") + И ЗначениеЗаполнено(ПараметрыПодключения.ИдентификаторКорреспондента) + И СокрЛП(ПараметрыПодключения.ИдентификаторКорреспондента) <> СокрЛП(ДанныеКорреспондента.Код) Тогда + ЗначенияДляОбновления.Вставить("Код", СокрЛП(ПараметрыПодключения.ИдентификаторКорреспондента)); + КонецЕсли; + + Если ПараметрыПодключения.Свойство("НаименованиеКорреспондента") + И ЗначениеЗаполнено(ПараметрыПодключения.НаименованиеКорреспондента) + И СокрЛП(ПараметрыПодключения.НаименованиеКорреспондента) <> СокрЛП(ДанныеКорреспондента.Наименование) Тогда + ЗначенияДляОбновления.Вставить("Наименование", СокрЛП(ПараметрыПодключения.НаименованиеКорреспондента)); + КонецЕсли; + + Если ЗначениеЗаполнено(ВерсияФорматаОбмена) + И Не ВерсияФорматаОбмена = ДанныеКорреспондента.ВерсияФорматаОбмена Тогда + ЗначенияДляОбновления.Вставить("ВерсияФорматаОбмена", ВерсияФорматаОбмена); + КонецЕсли; + + Если ЗначенияДляОбновления.Количество() > 0 Тогда + КорреспондентОбъект = Корреспондент.ПолучитьОбъект(); + + Для Каждого ЗначениеДляОбновления Из ЗначенияДляОбновления Цикл + КорреспондентОбъект[ЗначениеДляОбновления.Ключ] = ЗначениеДляОбновления.Значение; + КонецЦикла; + + КорреспондентОбъект.ОбменДанными.Загрузка = Истина; + КорреспондентОбъект.Записать(); + КонецЕсли; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не подходящий режим вызова функции: %1'"), Контекст.Режим); + КонецЕсли; + + Если Не НастройкиXDTO = Неопределено Тогда + Если Не НастройкиXDTO.ПоддерживаемыеОбъекты = Неопределено Тогда + МенеджерНастройкиXDTO = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиОбменаДаннымиXDTO"); + МенеджерНастройкиXDTO.ОбновитьНастройкиКорреспондента( + Корреспондент, "ПоддерживаемыеОбъекты", НастройкиXDTO.ПоддерживаемыеОбъекты); + КонецЕсли; + КонецЕсли; + + МенеджерНастроекТранспорта = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаДанными"); + МенеджерНастроекТранспорта.СохранитьНастройкиТранспортаВнешнейСистемы( + Корреспондент, ПараметрыПодключения.НастройкиТранспорта); + + Если ПараметрыПодключения.Свойство("РасписаниеСинхронизации") + И ПараметрыПодключения.РасписаниеСинхронизации <> Неопределено Тогда + + ИспользоватьРегламентноеЗадание = ?(ПараметрыПодключения.Свойство("ИспользоватьРегламентноеЗадание"), + ПараметрыПодключения.ИспользоватьРегламентноеЗадание, Истина); + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + + КлючЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'ОбменДаннымиСВнешнейСистемой (%1)'"), + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "Код")); + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ОбластьДанных", МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + ПараметрыЗадания.Вставить("Использование", ИспользоватьРегламентноеЗадание); + ПараметрыЗадания.Вставить("ИмяМетода", "ОбменДаннымиСервер.ВыполнитьОбменДаннымиСВнешнейСистемой"); + + ПараметрыЗадания.Вставить("Параметры", Новый Массив); + ПараметрыЗадания.Параметры.Добавить(Корреспондент); + ПараметрыЗадания.Параметры.Добавить(Новый Структура("ВыполнятьЗагрузку, ВыполнятьОтправкуНастроек", Истина, Истина)); + ПараметрыЗадания.Параметры.Добавить(Ложь); + + ПараметрыЗадания.Вставить("Ключ", КлючЗадания); + ПараметрыЗадания.Вставить("Расписание", ПараметрыПодключения.РасписаниеСинхронизации); + + Если Контекст.Режим = "НовоеПодключение" Тогда + МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + ИначеЕсли Контекст.Режим = "РедактированиеПараметровПодключения" Тогда + Отбор = Новый Структура("ОбластьДанных, ИмяМетода, Ключ"); + ЗаполнитьЗначенияСвойств(Отбор, ПараметрыЗадания); + + ТаблицаЗадания = МодульОчередьЗаданий.ПолучитьЗадания(Отбор); + Если ТаблицаЗадания.Количество() > 0 Тогда + МодульОчередьЗаданий.ИзменитьЗадание(ТаблицаЗадания[0].Идентификатор, ПараметрыЗадания); + Иначе + МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + Иначе + Если Контекст.Режим = "НовоеПодключение" Тогда + Справочники.СценарииОбменовДанными.СоздатьСценарий( + Корреспондент, ПараметрыПодключения.РасписаниеСинхронизации, ИспользоватьРегламентноеЗадание); + ИначеЕсли Контекст.Режим = "РедактированиеПараметровПодключения" Тогда + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | СценарииОбменовДанными.Ссылка КАК Сценарий, + | СценарииОбменовДанными.Ссылка.ИспользоватьРегламентноеЗадание КАК ИспользоватьРегламентноеЗадание + |ИЗ + | Справочник.СценарииОбменовДанными КАК СценарииОбменовДанными + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена + | ПО (СценарииОбменовДаннымиНастройкиОбмена.Ссылка = СценарииОбменовДанными.Ссылка) + |ГДЕ + | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы + | И НЕ СценарииОбменовДанными.ПометкаУдаления"); + Запрос.УстановитьПараметр("УзелИнформационнойБазы", Корреспондент); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + СценарийОбъект = Выборка.Сценарий.ПолучитьОбъект(); + + Отказ = Ложь; + Справочники.СценарииОбменовДанными.ОбновитьДанныеРегламентногоЗадания( + Отказ, ПараметрыПодключения.РасписаниеСинхронизации, СценарийОбъект); + + Если Не Отказ Тогда + СценарийОбъект.ИспользоватьРегламентноеЗадание = ИспользоватьРегламентноеЗадание; + СценарийОбъект.Записать(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если Контекст.Режим = "НовоеПодключение" Тогда + // Отправка формализованных настроек XDTO. + ПараметрыОбмена = Новый Структура; + ПараметрыОбмена.Вставить("ВыполнятьЗагрузку", Ложь); + ПараметрыОбмена.Вставить("ВыполнятьОтправкуНастроек", Истина); + + Отказ = Ложь; + СообщениеОбОшибке = ""; + Попытка + ВыполнитьОбменДаннымиСВнешнейСистемой(Корреспондент, ПараметрыОбмена, Отказ); + Исключение + Отказ = Истина; + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + КонецПопытки; + + Если Отказ Тогда + НастройкиУдаления = Новый Структура; + НастройкиУдаления.Вставить("УзелОбмена", Корреспондент); + НастройкиУдаления.Вставить("УдалитьНастройкуВКорреспонденте", Истина); + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("НастройкиУдаления", НастройкиУдаления); + + АдресРезультата = ""; + Попытка + МодульПомощникСозданияОбменаДанными().УдалитьНастройкуСинхронизации(ПараметрыПроцедуры, АдресРезультата); + Исключение + ВызватьИсключение; + КонецПопытки; + + ВызватьИсключение СообщениеОбОшибке; + КонецЕсли; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("УзелОбмена", Корреспондент); + Результат.Вставить("ИдентификаторКорреспондента", + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "Код")); + +КонецПроцедуры + +// Заполняет структуру сохраненных параметров подключения к внешней системе. +// +// Параметры: +// Контекст - Структура - контекст выполнения операции. +// * Корреспондент - ПланОбменаСсылка - узел обмена, соответствующий корреспонденту. +// ПараметрыПодключения - Структура - структура параметров подключения. +// * ИдентификаторКорреспондента - Строка(36) - уникальный идентификатор корреспондента. +// * НаименованиеКорреспондента - Строка - название корреспондента, как он отображается +// в списке настроенных синхронизаций. +// * НастройкиТранспорта - Произвольный - сохраненные настройки транспорта сообщений обмена внешней системы. +// * РасписаниеСинхронизации - РасписаниеРегламентногоЗадания - расписание автоматического запуска обмена. +// * НастройкиXDTO - Структура, Неопределено - структура настроек XDTO корреспондента. +// ** ПоддерживаемыеВерсии - Массив - перечень поддерживаемых корреспондентом версий формата. +// ** ПоддерживаемыеОбъекты - ТаблицаЗначений - перечень поддерживаемых корреспондентом объектов формата. +// См. ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата. +// +Процедура ПриПолученииНастроекПодключенияВнешнейСистемы(Контекст, ПараметрыПодключения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ДанныеУзлаОбмена = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Контекст.Корреспондент, "Код, Наименование"); + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("ИдентификаторКорреспондента", ДанныеУзлаОбмена.Код); + ПараметрыПодключения.Вставить("НаименованиеКорреспондента", ДанныеУзлаОбмена.Наименование); + ПараметрыПодключения.Вставить("НастройкиТранспорта", + РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаВнешнейСистемы(Контекст.Корреспондент)); + ПараметрыПодключения.Вставить("РасписаниеСинхронизации"); + ПараметрыПодключения.Вставить("НастройкиXDTO", Новый Структура); + + ПараметрыПодключения.НастройкиXDTO.Вставить("ПоддерживаемыеВерсии", + РегистрыСведений.НастройкиОбменаДаннымиXDTO.ЗначениеНастройкиКорреспондента(Контекст.Корреспондент, "ПоддерживаемыеВерсии")); + ПараметрыПодключения.НастройкиXDTO.Вставить("ПоддерживаемыеОбъекты", + РегистрыСведений.НастройкиОбменаДаннымиXDTO.ЗначениеНастройкиКорреспондента(Контекст.Корреспондент, "ПоддерживаемыеОбъекты")); + +КонецПроцедуры + +// Таблица настроек транспорта обмена для всех настроенных обменов данными с внешними системами. +// +// Возвращаемое значение: +// ТаблицаЗначений - настройки транспорта +// * Корреспондент - ПланОбменаСсылка - узел обмена, соответствующий корреспонденту. +// * НастройкиТранспорта - Произвольный - сохраненные настройки транспорта сообщений обмена внешней системы. +// +Функция ВсеНастройкиТранспортаОбменаСВнешнимиСистемами() Экспорт + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Корреспондент"); + Результат.Колонки.Добавить("НастройкиТранспорта"); + + ОбщийТекстЗапроса = ""; + ПланыОбменаБСП = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + + Для Каждого ПланОбмена Из ПланыОбменаБСП Цикл + + Если Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ПланОбмена) Тогда + Продолжить; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | Т.Ссылка КАК Корреспондент, + | НастройкиТранспортаОбменаДанными.ПараметрыПодключенияВнешнейСистемы КАК ПараметрыПодключенияВнешнейСистемы + |ИЗ + | #ТаблицаПланаОбмена КАК Т + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспортаОбменаДанными + | ПО (НастройкиТранспортаОбменаДанными.Корреспондент = Т.Ссылка) + |ГДЕ + | НЕ Т.ЭтотУзел + | И НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.ВнешняяСистема)"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаПланаОбмена", "ПланОбмена." + ПланОбмена); + + Если Не ПустаяСтрока(ОбщийТекстЗапроса) Тогда + ОбщийТекстЗапроса = ОбщийТекстЗапроса + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |"; + КонецЕсли; + + ОбщийТекстЗапроса = ОбщийТекстЗапроса + ТекстЗапроса; + + КонецЦикла; + + Если ПустаяСтрока(ОбщийТекстЗапроса) Тогда + Возврат Результат; + КонецЕсли; + + Запрос = Новый Запрос(ОбщийТекстЗапроса); + + УстановитьПривилегированныйРежим(Истина); + ТаблицаНастройки = Запрос.Выполнить().Выгрузить(); + + Для Каждого СтрокаНастройки Из ТаблицаНастройки Цикл + СтрокаРезультат = Результат.Добавить(); + СтрокаРезультат.Корреспондент = СтрокаНастройки.Корреспондент; + СтрокаРезультат.НастройкиТранспорта = СтрокаНастройки.ПараметрыПодключенияВнешнейСистемы.Получить(); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + #Область СохранениеНастроекСинхронизацииДанных // Начинает сохранение настроек синхронизации данных в длительной операции. @@ -1007,16 +1376,12 @@ УстановитьПривилегированныйРежим(Истина); Если Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() Тогда - Возврат Константы.ЭтоАвтономноеРабочееМесто.Получить(); - - Иначе - - ГлавныйУзелЭтойИнформационнойБазы = ГлавныйУзел(); - Возврат ГлавныйУзелЭтойИнформационнойБазы <> Неопределено - И ОбменДаннымиПовтИсп.ЭтоУзелАвтономногоРабочегоМеста(ГлавныйУзелЭтойИнформационнойБазы); - КонецЕсли; + + ГлавныйУзелЭтойИнформационнойБазы = ГлавныйУзел(); + Возврат ГлавныйУзелЭтойИнформационнойБазы <> Неопределено + И ОбменДаннымиПовтИсп.ЭтоУзелАвтономногоРабочегоМеста(ГлавныйУзелЭтойИнформационнойБазы); КонецФункции @@ -1222,6 +1587,44 @@ #КонецОбласти +// Точка входа для выполнения итерации обмена данными (загрузки и выгрузки) с внешней системой по узлу плана обмена. +// +// Параметры: +// Корреспондент - ПланОбменаСсылка - узел плана обмена, соответствующий внешней системе. +// ПараметрыОбмена - Структура - должна содержать следующие параметры: +// * ВыполнятьЗагрузку - Булево - флаг необходимости выполнять загрузку данных. +// * ВыполнятьОтправкуНастроек - Булево - флаг необходимости выполнять отправку настроек XDTO. +// ФлагОшибка - Булево - Истина, в случае возникновения ошибки при выполнении обмена. +// Подробная информация об ошибке фиксируется в журнале регистрации. +// +Процедура ВыполнитьОбменДаннымиСВнешнейСистемой(Корреспондент, ПараметрыОбмена, ФлагОшибка) Экспорт + + ДополнительныеПараметры = Новый Структура; + + ДействиеЗагрузка = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + ДействиеВыгрузка = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + + ПроверитьВозможностьВыполненияОбменов(); + + ПроверитьИспользованиеОбменаДанными(); + + ТолькоПараметры = Ложь; + ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема; + + ФлагОшибка = Ложь; + + Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(ФлагОшибка, Корреспондент, + ДействиеЗагрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); + КонецЕсли; + + Если ПараметрыОбмена.ВыполнятьОтправкуНастроек Тогда + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(ФлагОшибка, Корреспондент, + ДействиеВыгрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -1231,12 +1634,12 @@ // Выполняет загрузку приоритетных данных, полученных из главного узла РИБ. Процедура ЗагрузитьПриоритетныеДанныеВПодчиненныйУзелРИБ(Отказ = Ложь) Экспорт - Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда Возврат; КонецЕсли; - Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "ПропуститьЗагрузкуПриоритетныхДанныхПередЗапуском") Тогда Возврат; КонецЕсли; @@ -1302,7 +1705,7 @@ ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Обмен данными.Загрузка приоритетных данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Обмен данными.Загрузка приоритетных данных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -1651,7 +2054,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.ДанныеДляОтложенногоОбновления"); + Блокировка.Добавить("Константа.ДанныеДляОтложенногоОбновления"); Блокировка.Заблокировать(); ЗначениеКонстанты = Константы.ДанныеДляОтложенногоОбновления.Получить().Получить(); @@ -1760,7 +2163,10 @@ КонецЕсли; // Регистрация сообщения для чтения из клиентского сеанса. - ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, Текст); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ОбменДанными", Истина); + + ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, Текст, ДополнительныеПараметры); КонецПроцедуры // Рассчитывает процент загрузки и записывает в виде сообщения пользователю. @@ -1800,7 +2206,10 @@ КонецЕсли; // Регистрация сообщения для чтения из клиентского сеанса. - ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, Текст); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ОбменДанными", Истина); + + ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, Текст, ДополнительныеПараметры); КонецПроцедуры @@ -1868,8 +2277,6 @@ КонецЕсли; Если НЕ Отправитель.ДополнительныеСвойства.Свойство("КоличествоОбъектовКЗагрузке") ИЛИ НЕ Отправитель.ДополнительныеСвойства.Свойство("РазмерФайлаСообщенияОбмена") Тогда - КоличествоОбъектовКЗагрузке = 0; - РазмерФайлаСообщенияОбмена = 0; // Извлечение общего количества объектов к загрузке и размера файла сообщения обмена. ТекущийПараметрСеанса = Неопределено; УстановитьПривилегированныйРежим(Истина); @@ -2190,7 +2597,7 @@ ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена); - КодУзла = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(), "Код")); + КодУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(), "Код"); Если ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(УзелОбмена) Тогда ПрефиксыУзла = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксыУзла(УзелОбмена); @@ -2209,7 +2616,7 @@ Функция ИдентификаторУзлаКорреспондентаДляОбмена(УзелОбмена) Экспорт - КодУзла = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОбмена, "Код")); + КодУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОбмена, "Код"); Если ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(УзелОбмена) Тогда ПрефиксыУзла = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксыУзла(УзелОбмена); @@ -2242,7 +2649,7 @@ // Формирует выборку измененных данных для передачи их в тот или иной узел плана обмена. // Если обращение к методу выполняется в активной транзакции, то вызывает исключение. -// См. описание метода ПланыОбменаМенеджер.ВыбратьИзменения() в синтаксис-помощнике. +// См. описание метода ПланыОбменаМенеджер.ВыбратьИзменения() в синтакс-помощнике. // Функция ВыбратьИзменения(Знач Узел, Знач НомерСообщения, Знач ФильтрВыборки = Неопределено) Экспорт @@ -2397,7 +2804,7 @@ КонецЕсли; ИначеЕсли ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() - И Не ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена") Тогда + И Не ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена") Тогда Если ПриложениеВИнтернете Тогда ВызватьИсключение НСтр("ru = 'Приложение в Интернете находится в состоянии обновления.'"); @@ -2525,7 +2932,7 @@ ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, УзелИнформационнойБазы, ДействиеВыгрузка, ПараметрыОбмена); КонецЕсли; - + Иначе // Обмен через обычные каналы связи. ТолькоПараметры = ПараметрыОбмена.ТолькоПараметры; @@ -2689,16 +3096,12 @@ МассивОбрабатываемыхСтрокТаблицыДвижений.Добавить(СтрокаДвижения); Если ТипРегистра = "РегистрНакопления" Тогда - МетаданныеНабора = Метаданные.РегистрыНакопления[ИмяРегистра]; Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрБухгалтерии" Тогда - МетаданныеНабора = Метаданные.РегистрыБухгалтерии[ИмяРегистра]; Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрСведений" Тогда - МетаданныеНабора = Метаданные.РегистрыСведений[ИмяРегистра]; Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрРасчета" Тогда - МетаданныеНабора = Метаданные.РегистрыРасчета[ИмяРегистра]; Набор = РегистрыРасчета[ИмяРегистра].СоздатьНаборЗаписей(); КонецЕсли; @@ -2985,15 +3388,15 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт - Обработчики.Вставить("РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); + Обработчики.Вставить("РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском", "ОбменДаннымиСлужебный.УстановкаПараметровСеанса"); - Обработчики.Вставить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); - Обработчики.Вставить("ПравилаВыборочнойРегистрацииОбъектов", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); - Обработчики.Вставить("ПравилаРегистрацииОбъектов", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); - Обработчики.Вставить("ПаролиСинхронизацииДанных", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); - Обработчики.Вставить("ПриоритетныеДанныеОбмена", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); - Обработчики.Вставить("ОшибкаРасхожденияВерсийПриПолученииДанных", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); - Обработчики.Вставить("ПараметрыСеансаСинхронизацииДанных", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); + Обработчики.Вставить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО", "ОбменДаннымиСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ПравилаВыборочнойРегистрацииОбъектов", "ОбменДаннымиСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ПравилаРегистрацииОбъектов", "ОбменДаннымиСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ПаролиСинхронизацииДанных", "ОбменДаннымиСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ПриоритетныеДанныеОбмена", "ОбменДаннымиСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ОшибкаРасхожденияВерсийПриПолученииДанных", "ОбменДаннымиСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ПараметрыСеансаСинхронизацииДанных", "ОбменДаннымиСлужебный.УстановкаПараметровСеанса"); КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов. @@ -3213,6 +3616,13 @@ КонецПроцедуры +// См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков. +Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт + + СоответствиеИменПсевдонимам.Вставить("ОбменДаннымиСервер.ВыполнитьОбменДаннымиСВнешнейСистемой"); + +КонецПроцедуры + #КонецОбласти @@ -3688,7 +4098,12 @@ | ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ОбменЧерезВебСервис + | КОНЕЦ КАК ОбменЧерезВебСервис, + | + | ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.ВнешняяСистема) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ОбменСВнешнейСистемой |ИЗ | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиВыполненияОбменаНастройкиОбмена |ГДЕ @@ -3710,15 +4125,17 @@ Выборка = Запрос.Выполнить().Выбрать(); ЭтоПодчиненныйУзелРИБТребующийУстановкиОбновления = - ЭтоПодчиненныйУзелРИБ() - И ОбменДаннымиВызовСервера.ТребуетсяУстановкаОбновления(); - + ЭтоПодчиненныйУзелРИБ() И ТребуетсяУстановкаОбновления(); + Пока Выборка.Следующий() Цикл ОтказПоСтрокеСценария = Ложь; Если ЭтоПодчиненныйУзелРИБТребующийУстановкиОбновления И ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Выборка.УзелИнформационнойБазы) Тогда // Обмен по расписанию не выполняется. Продолжить; + ИначеЕсли Не НастройкаСинхронизацииЗавершена(Выборка.УзелИнформационнойБазы) + И Не Выборка.ОбменСВнешнейСистемой Тогда + Продолжить; КонецЕсли; Если Выборка.ОбменЧерезВнешнееСоединение Тогда @@ -3755,7 +4172,7 @@ СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); // Добавляем в ЖР информацию о процессе обмена данными. - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными по настройке %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными по настройке %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.НастройкаВыполненияОбменаНаименование); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); @@ -3858,7 +4275,7 @@ Если ВыводитьСообщения Тогда НСтрока = НСтр("ru = 'При инициализации обработки транспорта сообщений обмена возникли ошибки.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(НСтрока,,,, Отказ); КонецЕсли; ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); @@ -3879,7 +4296,7 @@ Если ВыводитьСообщения Тогда НСтрока = НСтр("ru = 'При получении сообщений обмена возникли ошибки.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(НСтрока,,,, Отказ); КонецЕсли; // Удаляем временный каталог и все его содержимое. @@ -3935,7 +4352,7 @@ Если ВыводитьСообщения Тогда Сообщение = НСтр("ru = 'Не удалось произвести обмен: %1'"); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(Сообщение,,,, Отказ); КонецЕсли; Возврат Результат; КонецПопытки; @@ -3949,7 +4366,7 @@ Сообщение = НСтр("ru = 'Не удалось произвести обмен: %1'"); Если ВыводитьСообщения Тогда СообщениеДляПользователя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ДанныеСоединения.КраткоеОписаниеОшибки); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеДляПользователя,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(СообщениеДляПользователя,,,, Отказ); КонецЕсли; // Добавляем две записи в ЖР: одну для загрузки данных, другую для выгрузки данных. @@ -3971,7 +4388,6 @@ ПланОбменаМенеджер = ВнешнееСоединение.ПланыОбмена[ИмяПланаОбмена]; Если ПланОбменаМенеджер.НайтиПоКоду(ПсевдонимУзла) <> ПланОбменаМенеджер.ПустаяСсылка() Тогда КодТекущегоУзлаПланаОбмена = ПсевдонимУзла; - ПроверятьНаличиеУзлаВКорреспонденте = Ложь; КонецЕсли; КонецЕсли; @@ -3983,7 +4399,7 @@ // Выводим сообщение об ошибке. Сообщение = НСтр("ru = 'Не удалось выгрузить данные: %1'"); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ДанныеСоединения.КраткоеОписаниеОшибки); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(Сообщение,,,, Отказ); КонецЕсли; Возврат Результат; @@ -4099,7 +4515,7 @@ Исключение Отказ = Истина; - Сообщение = НСтр("ru = 'При выгрузке данных возникли ошибки во второй информационной базе: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Сообщение = НСтр("ru = 'При выгрузке данных возникли ошибки во второй информационной базе: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); @@ -4112,7 +4528,7 @@ СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание получения данных от базы-корреспондента...'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), СтруктураНастроекОбмена); + ОбщегоНазначения.КодОсновногоЯзыка()), СтруктураНастроекОбмена); Возврат Результат; КонецЕсли; @@ -4121,7 +4537,7 @@ Исключение Отказ = Истина; - Сообщение = НСтр("ru = 'Возникли ошибки при получении сообщения обмена из сервиса передачи файлов: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Сообщение = НСтр("ru = 'Возникли ошибки при получении сообщения обмена из сервиса передачи файлов: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); @@ -4134,7 +4550,7 @@ ИмяКаталогаСообщенияОбмена = СоздатьВременныйКаталогСообщенийОбмена(); Исключение Отказ = Истина; - Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); @@ -4194,7 +4610,6 @@ ИмяКаталогаСообщенияОбмена = ""; ИмяФайлаСообщенияОбмена = ""; ДатаФайлаСообщенияОбмена = Дата('00010101'); - СтрокаСообщенияОбОшибке = ""; Попытка @@ -4202,7 +4617,7 @@ Исключение Отказ = Истина; - Сообщение = НСтр("ru = 'Возникли ошибки при получении сообщения обмена из сервиса передачи файлов: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Сообщение = НСтр("ru = 'Возникли ошибки при получении сообщения обмена из сервиса передачи файлов: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); @@ -4215,7 +4630,7 @@ ИмяКаталогаСообщенияОбмена = СоздатьВременныйКаталогСообщенийОбмена(); Исключение Отказ = Истина; - Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); @@ -4713,7 +5128,7 @@ СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; СтруктураНастроекОбмена.ДатаНачала = ?(ПараметрыОбмена.ДатаНачалаОперации = Неопределено, ТекущаяДатаСеанса(), ПараметрыОбмена.ДатаНачалаОперации); - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); @@ -4851,7 +5266,7 @@ СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); @@ -4901,7 +5316,7 @@ Если ПараметрыОбмена.ДлительнаяОперация Тогда ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание получения данных от базы-корреспондента...'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), СтруктураНастроекОбмена); + ОбщегоНазначения.КодОсновногоЯзыка()), СтруктураНастроекОбмена); Возврат; КонецЕсли; @@ -5019,6 +5434,7 @@ МинимальнаяВерсия); Если Прокси = Неопределено Тогда + // добавляем запись в ЖР ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); @@ -5119,7 +5535,7 @@ Если ПараметрыОбмена.ДлительнаяОперация Тогда ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание загрузки данных в базе-корреспонденте...'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), СтруктураНастроекОбмена); + ОбщегоНазначения.КодОсновногоЯзыка()), СтруктураНастроекОбмена); Возврат; КонецЕсли; КонецЕсли; @@ -5250,7 +5666,6 @@ КонецЕсли; КонецЕсли; Если ПроверятьНаличиеУзлаВКорреспонденте Тогда - // Проверка наличия узла в базе-корреспонденте. ПланОбменаСсылка = ПланОбменаМенеджер.НайтиПоКоду(Структура.ТекущийУзелПланаОбменаКод); Если НЕ ЗначениеЗаполнено(ПланОбменаСсылка.Code) Тогда // При необходимости запуск перехода на синхронизацию данных через универсальный формат. @@ -5271,7 +5686,7 @@ Если СтруктураПараметров.Ошибка Тогда ЕстьОшибки = Истина; НСтрока = НСтр("ru = 'Ошибка при переходе на синхронизацию данных через универсальный формат: %1. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураПараметров.СообщениеОбОшибке); ИначеЕсли РезультатПерехода = Неопределено Тогда @@ -5279,7 +5694,6 @@ СтрокаСообщенияОбОшибке = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат не выполнен'"); КонецЕсли; Если ЕстьОшибки Тогда - // Синхронизация данных невозможна. ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); @@ -5287,19 +5701,17 @@ Возврат; Иначе Сообщение = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат завершен успешно.'"); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Ложь); + ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Ложь); КонецЕсли; - КонецЕсли; // Если НЕ ЗначениеЗаполнено(ПланОбменаСсылка.Code) Тогда - КонецЕсли; // Если ПроверятьНаличиеУзлаВКорреспонденте Тогда - КонецЕсли; //Если ЭтоПланОбменаXDTO Тогда + КонецЕсли; + КонецЕсли; + КонецЕсли; Попытка СтруктураНастроекОбменаВнешнееСоединение = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СтруктураНастроекОбмена(Структура); Исключение - // Добавляем запись в ЖР. ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); - // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); Отказ = Истина; @@ -5320,7 +5732,7 @@ // Правила обмена должны быть указаны. НСтрока = НСтр("ru = 'Не заданы правила конвертации во второй информационной базе для плана обмена %1. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбменаВнешнееСоединение.ИмяПланаОбмена); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -5488,6 +5900,11 @@ Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда + Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда + ВыполнитьОбменДаннымиСВнешнейСистемойЗагрузкаДанных(СтруктураНастроекОбмена); + Возврат; + КонецЕсли; + // {Обработчик: ПередЧтениемСообщенияОбмена} Начало СообщениеОбмена = ""; СтандартнаяОбработка = Истина; @@ -5556,6 +5973,17 @@ КонецЕсли; + // {Обработчик: ПослеЧтенияСообщенияОбмена} Начало + СтандартнаяОбработка = Истина; + + ПослеЧтенияСообщенияОбмена( + СтруктураНастроекОбмена.УзелИнформационнойБазы, + СообщениеОбмена, + РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), + СтандартнаяОбработка, + Не ТолькоПараметры); + // {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание + Если СтандартнаяОбработка Тогда ВыполнитьТранспортСообщенияОбменаПослеОбработки(СтруктураНастроекОбмена); @@ -5564,6 +5992,11 @@ ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда + Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда + ВыполнитьОбменДаннымиСВнешнейСистемойВыгрузкаНастроекXDTO(СтруктураНастроекОбмена); + Возврат; + КонецЕсли; + ВыполнитьТранспортСообщенияОбменаПередОбработкой(СтруктураНастроекОбмена); // выгрузка данных @@ -5627,8 +6060,8 @@ Если ЭтоПодчиненныйУзелРИБ() И ТипЗнч(ГлавныйУзел()) = ТипЗнч(Получатель) Тогда - Если НЕ СообщениеПрочитано - И ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("СообщениеПолученоИзКэша") Тогда + Если Не СообщениеПрочитано + И ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("СообщениеПолученоИзКэша") Тогда // Не удалось прочитать сообщение, полученное из кэша - требуется очистка кэша. ОчиститьСообщениеОбменаДаннымиИзГлавногоУзла(); Возврат; @@ -5919,15 +6352,21 @@ ОбработкаОбменаДаннымиXML.ИмяФайлаОбмена = ИмяФайлаСообщенияОбмена; // загрузка данных - ОбработкаОбменаДаннымиXML.ВыполнитьЗагрузкуДанных(); - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.ИмяПланаОбмена) Тогда + ПараметрыЗагрузки = Новый Структура; + ПараметрыЗагрузки.Вставить("ОбменДаннымиСВнешнейСистемой", + СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема); + + ОбработкаОбменаДаннымиXML.ВыполнитьЗагрузкуДанных(ПараметрыЗагрузки); + ПолученыДанныеДляСопоставления = Ложь; Если Не ОбработкаОбменаДаннымиXML.КомпонентыОбмена.ФлагОшибки Тогда ПолученыДанныеДляСопоставления = (ОбработкаОбменаДаннымиXML.КомпонентыОбмена.НомерВходящегоСообщения > 0 И ОбработкаОбменаДаннымиXML.КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом = 0); КонецЕсли; СтруктураНастроекОбмена.ДополнительныеПараметры.Вставить("ПолученыДанныеДляСопоставления", ПолученыДанныеДляСопоставления); + Иначе + ОбработкаОбменаДаннымиXML.ВыполнитьЗагрузкуДанных(); КонецЕсли; СтруктураНастроекОбмена.РезультатВыполненияОбмена = ОбработкаОбменаДаннымиXML.РезультатВыполненияОбмена(); @@ -5950,7 +6389,7 @@ СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, КоличествоОбъектовОбработано, РезультатВыполненияОбмена); - + СтруктураНастроекОбмена.КоличествоОбъектовОбработано = КоличествоОбъектовОбработано; СтруктураНастроекОбмена.РезультатВыполненияОбмена = РезультатВыполненияОбмена; @@ -5960,6 +6399,113 @@ КонецПроцедуры +Процедура ВыполнитьОбменДаннымиСВнешнейСистемойЗагрузкаДанных(СтруктураНастроекОбмена) + + ИмяВременногоКаталога = СоздатьВременныйКаталогСообщенийОбмена(); + + ИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ИмяВременногоКаталога, УникальноеИмяФайлаСообщенияОбмена()); + + ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; + + СообщениеПолучено = Ложь; + Попытка + СообщениеПолучено = ОбработкаТранспортаСообщенийОбмена.ПолучитьСообщение(ИмяФайлаСообщения); + Исключение + Информация = ИнформацияОбОшибке(); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(Информация), СтруктураНастроекОбмена, Истина); + КонецПопытки; + + СообщениеОбработано = Ложь; + ВыполнитьОбработчикПослеЗагрузки = Ложь; + + Если СообщениеПолучено + И СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда + + ВыполнитьОбработчикПослеЗагрузки = Истина; + + ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ИмяФайлаСообщения); + + СообщениеОбработано = РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена); + + КонецЕсли; + + Попытка + УдалитьФайлы(ИмяВременногоКаталога); + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(Информация), СтруктураНастроекОбмена); + КонецПопытки; + + НастройкаЗавершена = НастройкаСинхронизацииЗавершена(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + Если ВыполнитьОбработчикПослеЗагрузки Тогда + ЕстьСледующееСообщение = Ложь; + Попытка + ОбработкаТранспортаСообщенийОбмена.ПослеОбработкиПолученногоСообщения(СообщениеОбработано, ЕстьСледующееСообщение); + Исключение + Информация = ИнформацияОбОшибке(); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(Информация), СтруктураНастроекОбмена, Истина); + ЕстьСледующееСообщение = Ложь; + КонецПопытки; + + Если СообщениеОбработано + И Не НастройкаЗавершена Тогда + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + Если ЕстьАлгоритмМенеджераПланаОбмена("ПередНастройкойСинхронизацииДанных", ИмяПланаОбмена) Тогда + + Контекст = Новый Структура; + Контекст.Вставить("Корреспондент", СтруктураНастроекОбмена.УзелИнформационнойБазы); + Контекст.Вставить("ИдентификаторНастройки", СохраненныйВариантНастройкиУзлаПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы)); + Контекст.Вставить("НачальнаяНастройка", Не НастройкаЗавершена); + + ИмяФормыПомощника = ""; + + ПланыОбмена[ИмяПланаОбмена].ПередНастройкойСинхронизацииДанных(Контекст, НастройкаЗавершена, ИмяФормыПомощника); + + Если НастройкаЗавершена Тогда + ЗавершитьНастройкуСинхронизацииДанных(СтруктураНастроекОбмена.УзелИнформационнойБазы); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если ЕстьСледующееСообщение И НастройкаЗавершена Тогда + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; + ВыполнитьОбменДаннымиСВнешнейСистемойЗагрузкаДанных(СтруктураНастроекОбмена); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьОбменДаннымиСВнешнейСистемойВыгрузкаНастроекXDTO(СтруктураНастроекОбмена) + + ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + НастройкиXDTO = Новый Структура; + НастройкиXDTO.Вставить("ФорматОбмена", + ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена")); + НастройкиXDTO.Вставить("ПоддерживаемыеВерсии", + ОбменДаннымиXDTOСервер.ВерсииФорматаОбменаМассив(СтруктураНастроекОбмена.УзелИнформационнойБазы)); + НастройкиXDTO.Вставить("ПоддерживаемыеОбъекты", + ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена, , СтруктураНастроекОбмена.УзелИнформационнойБазы)); + + Попытка + ОбработкаТранспортаСообщенийОбмена.ОтправитьНастройкиXDTO(НастройкиXDTO); + Исключение + Информация = ИнформацияОбОшибке(); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(Информация), СтруктураНастроекОбмена, Истина); + КонецПопытки; + +КонецПроцедуры + #КонецОбласти #Область ВыполнениеОбменаМетодамиСериализации @@ -6006,7 +6552,7 @@ ИспользоватьТранзакции = КоличествоЭлементовВТранзакции <> 1; - ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.ПроверитьКэшМеханизмаРегистрацииОбъектов(); // Получаем выборку измененных данных. ВыборкаИзменений = ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения); @@ -6113,13 +6659,11 @@ КлючСообщенияЖурналаРегистрации, КоличествоОбъектовОбработано, РезультатВыполненияОбмена) - + Если ПустаяСтрока(КлючСообщенияЖурналаРегистрации) Тогда КлючСообщенияЖурналаРегистрации = СобытиеЖурналаРегистрацииОбменДанными(); КонецЕсли; - МенеджерПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьМенеджерПланаОбмена(УзелИнформационнойБазы); - Попытка ЧтениеXML = Новый ЧтениеXML; @@ -6160,7 +6704,7 @@ ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка, УзелИнформационнойБазы.Метаданные(), УзелИнформационнойБазы, НСтр("ru = 'Сообщение обмена содержит данные для другого узла информационной базы.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + ОбщегоНазначения.КодОсновногоЯзыка())); // Возврат; КонецЕсли; @@ -6391,7 +6935,8 @@ // Параметры: // ПланОбмена - Ссылка на узел плана обмена или имя плана обмена. // -// Возвращаемое значение: Булево. +// Возвращаемое значение: +// Булево - Истина, если план обмена используется для обмена данными по формату XDTO. // Функция ЭтоПланОбменаXDTO(ПланОбмена) Экспорт Возврат ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ПланОбмена); @@ -6449,61 +6994,61 @@ Функция СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису() Экспорт - Возврат НСтр("ru = 'Обмен данными.Установка подключения к web-сервису'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен данными.Установка подключения к web-сервису'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными() Экспорт - Возврат НСтр("ru = 'Обмен данными.Загрузка правил'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен данными.Загрузка правил'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция СобытиеЖурналаРегистрацииСозданиеОбменаДанными() Экспорт - Возврат НСтр("ru = 'Обмен данными.Создание обмена данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен данными.Создание обмена данными'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция СобытиеЖурналаРегистрацииУдалениеОбменаДанными() Экспорт - Возврат НСтр("ru = 'Обмен данными.Удаление обмена данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен данными.Удаление обмена данными'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция СобытиеЖурналаРегистрацииРегистрацияДанныхДляНачальнойВыгрузки() Экспорт - Возврат НСтр("ru = 'Обмен данными.Регистрация данных для начальной выгрузки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен данными.Регистрация данных для начальной выгрузки'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция СобытиеЖурналаРегистрацииВыгрузкаДанныхДляСопоставления() Экспорт - Возврат НСтр("ru = 'Обмен данными.Выгрузка данных для сопоставления'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен данными.Выгрузка данных для сопоставления'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция СобытиеЖурналаРегистрацииУдалениеВременногоФайла() Экспорт - Возврат НСтр("ru = 'Обмен данными.Удаление временного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен данными.Удаление временного файла'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция СобытиеЖурналаРегистрацииОбменДанными() Экспорт - Возврат НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен данными'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция СобытиеЖурналаРегистрацииВыгрузкаДанныхВСервисПередачиФайлов() Экспорт - Возврат НСтр("ru = 'Обмен данными.Сервис передачи файлов.Выгрузка данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен данными.Сервис передачи файлов.Выгрузка данных'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция СобытиеЖурналаРегистрацииЗагрузкаДанныхИзСервисаПередачиФайлов() Экспорт - Возврат НСтр("ru = 'Обмен данными.Сервис передачи файлов.Загрузка данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен данными.Сервис передачи файлов.Загрузка данных'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -6622,9 +7167,9 @@ Прокси = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); Протокол = ?(ЗащищенноеСоединение = Неопределено, "ftp", "ftps"); - Прокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(Протокол); + Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси(Протокол); КонецЕсли; Возврат Прокси; @@ -7331,28 +7876,6 @@ Возврат Результат; КонецФункции -Функция ЗначенияПоУмолчаниюНаУзле(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - НастройкиПланаОбмена = ОбменДаннымиПовтИсп.НастройкиПланаОбмена(ИмяПланаОбмена, ВерсияКорреспондента); - ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, - ИдентификаторНастройки, ВерсияКорреспондента); - ИмяФормы = ОписаниеВариантаНастройки.ИмяФормыЗначенийПоУмолчанию; - Результат = Неопределено; - Если ЗначениеЗаполнено(ОписаниеВариантаНастройки.ЗначенияПоУмолчанию) Тогда - Результат = ОписаниеВариантаНастройки.ЗначенияПоУмолчанию; - КонецЕсли; - - Если Результат = Неопределено Тогда - Результат = Новый Структура; - КонецЕсли; - - Возврат Результат; - -КонецФункции - Функция ОписаниеОграниченийПередачиДанных(Знач ИмяПланаОбмена, Знач Настройка, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ОписаниеОграниченийПередачиДанных", ИмяПланаОбмена) Тогда @@ -7365,18 +7888,6 @@ КонецФункции -Функция ОписаниеЗначенийПоУмолчанию(Знач ИмяПланаОбмена, Знач Настройка, Знач ВерсияКорреспондента, - ИдентификаторНастройки = "") Экспорт - Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ОписаниеЗначенийПоУмолчанию",ИмяПланаОбмена) Тогда - Возврат ""; - ИначеЕсли ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеЗначенийПоУмолчанию(Настройка, ВерсияКорреспондента, ИдентификаторНастройки); - -КонецФункции - Функция ОбщиеДанныеУзлов(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, Знач ИдентификаторНастройки) Экспорт Если ПустаяСтрока(ВерсияКорреспондента) Тогда @@ -7557,7 +8068,7 @@ И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() И Не ЭтоРазделенныйОбъект(Данные) Тогда - ТекстИсключения = НСтр("ru = 'Недостаточно прав для выполнения действия.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ТекстИсключения = НСтр("ru = 'Недостаточно прав для выполнения действия.'", ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации( ТекстИсключения, @@ -8437,14 +8948,14 @@ // Узел информационной базы не должен быть пустым. СтрокаСообщенияОбОшибке = НСтр( "ru = 'Не задан узел информационной базы с которым нужно производить обмен информацией. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задан вид транспорта обмена. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8452,7 +8963,7 @@ ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ДействиеПриОбмене) Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Не указано выполняемое действие (выгрузка / загрузка). Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8468,14 +8979,14 @@ // Узел информационной базы не должен быть пустым. СтрокаСообщенияОбОшибке = НСтр( "ru = 'Не задан узел информационной базы с которым нужно производить обмен информацией. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); ИначеЕсли ИспользоватьНастройкиТранспорта И НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задан вид транспорта обмена. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8483,7 +8994,7 @@ ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ДействиеПриОбмене) Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Не указано выполняемое действие (выгрузка / загрузка). Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8492,7 +9003,7 @@ // Узел информационной базы не должен быть помечен на удаление. СтрокаСообщенияОбОшибке = НСтр("ru = 'Узел информационной базы помечен на удаление. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8502,7 +9013,7 @@ // Сами с собой не обмениваемся. СтрокаСообщенияОбОшибке = НСтр( "ru = 'Нельзя организовать обмен данными с текущим узлом информационной базы. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8512,7 +9023,7 @@ // У узлов участвующих в обмене должен быть не пустой код. СтрокаСообщенияОбОшибке = НСтр("ru = 'Один из узлов обмена имеет пустой код. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8524,7 +9035,7 @@ Если Не ФайлОбработкиВыгрузки.Существует() Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки выгрузки не существует. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8538,7 +9049,7 @@ Если Не ФайлОбработкиЗагрузки.Существует() Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки загрузки не существует. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8593,6 +9104,11 @@ Процедура ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена) + Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда + ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбменаСВнешнейСистемой(СтруктураНастроекОбмена); + Возврат; + КонецЕсли; + // Создаем обработку транспорта. ОбработкаТранспортаСообщенийОбмена = Обработки[СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена].Создать(); @@ -8705,7 +9221,7 @@ // Правила обмена должны быть указаны. НСтрока = НСтр("ru = 'Не заданы правила конвертации для плана обмена %1. Выгрузка данных отменена.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбмена.ИмяПланаОбмена); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8733,7 +9249,7 @@ // Правила обмена должны быть указаны. НСтрока = НСтр("ru = 'Не заданы правила конвертации для плана обмена %1. Загрузка данных отменена.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбмена.ИмяПланаОбмена); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); @@ -8996,6 +9512,24 @@ КонецЕсли; КонецПроцедуры +Процедура ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбменаСВнешнейСистемой(СтруктураНастроекОбмена) + + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда + + ОбработкаТранспортаСообщенийОбмена = Обработки[СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена].Создать(); + + ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаВнешнейСистемы( + СтруктураНастроекОбмена.УзелИнформационнойБазы); + + // Инициализируем транспорт. + ОбработкаТранспортаСообщенийОбмена.Инициализация(ПараметрыПодключения); + + СтруктураНастроекОбмена.Вставить("ОбработкаТранспортаСообщенийОбмена", ОбработкаТранспортаСообщенийОбмена); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область РаботаСМониторомПроблемОбменаДанными @@ -9098,7 +9632,7 @@ СтрокаСообщения = НСтр("ru = 'Не удалось провести документ %1, полученный из другой информационной базы.%2 |Возможно не заполнены все реквизиты, обязательные к заполнению.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), ПричинаОшибки); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение,,, СтрокаСообщения); @@ -9162,7 +9696,7 @@ СтрокаСообщения = НСтр("ru = 'Не удалось записать объект %1, полученный из другой информационной базы.%2 |Возможно не заполнены все реквизиты, обязательные к заполнению.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), ПричинаОшибки); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение,,, СтрокаСообщения); @@ -9990,12 +10524,12 @@ // Формируем итоговое сообщение для протокола. Если СтруктураНастроекОбмена.ЭтоОбменВРИБ Тогда - СтрокаСообщения = НСтр("ru = '%1, %2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = '%1, %2'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.РезультатВыполненияОбмена, СтруктураНастроекОбмена.ДействиеПриОбмене); Иначе - СтрокаСообщения = НСтр("ru = '%1, %2; Объектов обработано: %3'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = '%1, %2; Объектов обработано: %3'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.РезультатВыполненияОбмена, СтруктураНастроекОбмена.ДействиеПриОбмене, @@ -10056,7 +10590,7 @@ Процедура ЗаписьЖурналаРегистрацииНачалаОбменаДанными(СтруктураНастроекОбмена) Экспорт - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); @@ -10183,7 +10717,7 @@ СтрокаСообщения = НСтр("ru = 'Ошибка при распаковке файлов архива: %1 в каталог: %2'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПолноеИмяФайлаАрхива, ПутьРаспаковкиФайлов); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения); + ОбщегоНазначения.СообщитьПользователю(СтрокаСообщения); Результат = Ложь; КонецПопытки; @@ -10232,7 +10766,7 @@ СтрокаСообщения = НСтр("ru = 'Ошибка при запаковке файлов архива: %1 из каталог: %2'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПолноеИмяФайлаАрхива, МаскаУпаковкиФайлов); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения); + ОбщегоНазначения.СообщитьПользователю(СтрокаСообщения); Результат = Ложь; КонецПопытки; @@ -10310,7 +10844,7 @@ ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); КлючСообщения = НСтр("ru = 'Обмен данными.[ИмяПланаОбмена].[ДействиеПриОбмене]'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); КлючСообщения = СтрЗаменить(КлючСообщения, "[ИмяПланаОбмена]", ИмяПланаОбмена); КлючСообщения = СтрЗаменить(КлючСообщения, "[ДействиеПриОбмене]", ДействиеПриОбмене); @@ -10979,7 +11513,11 @@ Результат.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); ЗаполнитьИдентификаторыСсылокВДереве(Результат.Строки); - Результат.Колонки.Удалить("Ссылка"); + + КолонкаСсылка = Результат.Колонки.Найти("Ссылка"); + Если Не КолонкаСсылка = Неопределено Тогда + Результат.Колонки.Удалить(КолонкаСсылка); + КонецЕсли; Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Результат); КонецФункции @@ -10987,7 +11525,7 @@ Процедура ЗаполнитьИдентификаторыСсылокВДереве(СтрокиДерева) Для Каждого Строка Из СтрокиДерева Цикл - Строка.Идентификатор = ЗначениеВСтрокуВнутр(Строка.Ссылка); + Строка.Идентификатор = XMLСтрока(Строка.Ссылка); ЗаполнитьИдентификаторыСсылокВДереве(Строка.Строки); КонецЦикла; @@ -11316,7 +11854,7 @@ СтрокаСообщения = НСтр("ru = 'Для планов обмена %1 используются правила обмена, загруженные из файла. |Эти правила могут быть несовместимы с новой версией программы. |Для предупреждения возможного возникновения ошибок при работе с программой рекомендуется актуализировать правила обмена из файла.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтрСоединить(ПланыОбменаМассив, ",")); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщения); @@ -11364,7 +11902,7 @@ СообщениеОбОшибке = ОбработкаОбъект.СтрокаСообщенияОбОшибке + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Транспорт сообщений обмена'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Транспорт сообщений обмена'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОбъект.СтрокаСообщенияОбОшибкеЖР); КонецЕсли; @@ -11386,7 +11924,7 @@ // Функция УстановитьВнешнееСоединениеСБазой(СтруктураНастроек) Экспорт - Результат = ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой( + Результат = ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой( ЗаполнитьПараметрыПодключенияВнешнегоСоединения(СтруктураНастроек)); ВнешнееСоединение = Результат.Соединение; @@ -11520,7 +12058,7 @@ Функция ЕстьПодключениеККорреспонденту(Знач Корреспондент, Знач СтруктураНастроек, СообщениеПользователю = "", НастройкаЗавершена = Истина, ПолученыДанныеДляСопоставления = Ложь) Экспорт - СобытиеЖурналаРегистрации = НСтр("ru = 'Обмен данными.Проверка подключения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СобытиеЖурналаРегистрации = НСтр("ru = 'Обмен данными.Проверка подключения'", ОбщегоНазначения.КодОсновногоЯзыка()); Попытка ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроек); @@ -11696,7 +12234,7 @@ Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); КонецПроцедуры @@ -11898,7 +12436,7 @@ КонецЕсли; Если ВыполненоОбновлениеПравил Тогда - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); КонецЕсли; КонецПроцедуры @@ -12011,7 +12549,7 @@ УстановитьПривилегированныйРежим(Истина); // Обновляем повторно используемые значения Механизма регистрации объектов. - ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.ПроверитьКэшМеханизмаРегистрацииОбъектов(); СтандартнаяОбработка = Истина; @@ -12056,7 +12594,7 @@ // Процедура ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы() - Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда Возврат; КонецЕсли; @@ -12154,7 +12692,7 @@ ЗафиксироватьТранзакцию(); Исключение Если КонфигурацияИзменена() Тогда - Если НЕ ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + Если Не ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "СообщениеПолученоИзКэша") Тогда // Переход с конфигурации, в которой не использовалось кэширование // сообщения обмена. Возможно, новое загруженное сообщение содержит @@ -12432,8 +12970,6 @@ Если ВерсияВЭтойПрограммеБезНомераСборки <> ВерсияВДругойПрограммеБезНомераСборки Тогда - ЭтоВнешнееСоединение = (ТекстСообщения = "ВнешнееСоединение"); - СинонимПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Синоним; ШаблонСообщения = НСтр("ru = 'Синхронизация данных может быть выполнена некорректно, т.к. версия программы ""%1"" (%2) в правилах конвертации этой программы отличается от версии %3 в правилах конвертации в другой программе. Убедитесь, что загружены актуальные правила, подходящие для используемых версий обеих программ.'"); @@ -12697,7 +13233,7 @@ // Функция ЗащищенноеСоединение(Путь) Экспорт - Возврат ?(НРег(Лев(Путь, 4)) = "ftps", Новый ЗащищенноеСоединениеOpenSSL, Неопределено); + Возврат ?(НРег(Лев(Путь, 4)) = "ftps", ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(), Неопределено); КонецФункции @@ -13009,6 +13545,8 @@ Алгоритмы.Вставить("ПриОпределенииПоддерживаемыхОбъектовФормата", Ложь); Алгоритмы.Вставить("ПриОпределенииПоддерживаемыхКорреспондентомОбъектовФормата", Ложь); + Алгоритмы.Вставить("ПередНастройкойСинхронизацииДанных", Ложь); + Параметры = Новый Структура; Параметры.Вставить("ВариантыНастроекОбмена", ВариантыНастроекОбмена); Параметры.Вставить("ИмяКонфигурацииИсточника", ""); @@ -13653,8 +14191,13 @@ Процедура ИнтерактивноеИзменениеВыгрузкиСохранитьНастройки(ДополнениеВыгрузки, Знач ПредставлениеНастройки) Экспорт ОбработкаДополнения = Обработки.ИнтерактивноеИзменениеВыгрузки.Создать(); - ЗаполнитьЗначенияСвойств(ОбработкаДополнения, ДополнениеВыгрузки, , - "ДополнительнаяРегистрация, ДополнительнаяРегистрацияСценарияУзла"); + ЗаполнитьЗначенияСвойств(ОбработкаДополнения, ДополнениеВыгрузки); + + СписокРеквизитов = " + |ВариантВыгрузки, ПериодОтбораВсехДокументов, + |ПериодОтбораСценарияУзла, ПредставлениеОтбораСценарияУзла"; + + ЗаполнитьЗначенияСвойств(ОбработкаДополнения, ДополнениеВыгрузки, СписокРеквизитов); ЗаполнитьТаблицуЗначений(ОбработкаДополнения.ДополнительнаяРегистрация, ДополнениеВыгрузки.ДополнительнаяРегистрация); ЗаполнитьТаблицуЗначений(ОбработкаДополнения.ДополнительнаяРегистрацияСценарияУзла, ДополнениеВыгрузки.ДополнительнаяРегистрацияСценарияУзла); @@ -13678,7 +14221,6 @@ // Текущее представление запомненных настроек. ДополнениеВыгрузки.ПредставлениеТекущейНастройки = ПредставлениеНастройки; - КонецПроцедуры // Заполняет реквизит формы по данным структуры настроек. @@ -13967,4 +14509,40 @@ #КонецОбласти +Функция НовыйУзелОбменаДаннымиXDTO( + ИмяПланаОбмена, + ИдентификаторНастройки, + ИдентификаторКорреспондента, + НаименованиеКорреспондента, + ВерсияФорматаОбмена) + + МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; + + НовыйУзел = МенеджерПланаОбмена.СоздатьУзел(); + НовыйУзел.Код = ИдентификаторКорреспондента; + НовыйУзел.Наименование = НаименованиеКорреспондента; + + Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВариантНастройки", Метаданные.ПланыОбмена[ИмяПланаОбмена]) Тогда + НовыйУзел.ВариантНастройки = ИдентификаторНастройки; + КонецЕсли; + + НовыйУзел.ВерсияФорматаОбмена = ВерсияФорматаОбмена; + + НовыйУзел.Заполнить(Неопределено); + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() + И ЭтоРазделенныйПланОбменаБСП(ИмяПланаОбмена) Тогда + + НовыйУзел.РегистрироватьИзменения = Истина; + + КонецЕсли; + + НовыйУзел.ОбменДанными.Загрузка = Истина; + НовыйУзел.Записать(); + + Возврат НовыйУзел.Ссылка; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl index ed53eb3d4..7fa97f168 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl @@ -1,5 +1,309 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс +// Возвращает признак ошибки при запуске: +// 1) Ошибка загрузки сообщения обмена: +// - ошибка загрузки идентификаторов объектов метаданных при загрузке сообщения обмена, +// - ошибка проверки идентификаторов объектов метаданных, +// - ошибка загрузки сообщения обмена перед обновлением ИБ, +// - ошибка загрузки сообщения обмена перед обновлением ИБ в режиме когда версия не изменилась; +// 2) Ошибка обновления ИБ после успешной загрузки сообщения обмена. +// +Функция ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Получить(); + +КонецФункции + +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. +Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт + + // Инициализация параметров сеанса должна выполняться без обращения к параметрам работы программы. + + Если ИмяПараметра = "РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском" Тогда + ПараметрыСеанса.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском = Новый ФиксированнаяСтруктура(Новый Структура); + УстановленныеПараметры.Добавить("РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском"); + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + // Процедура обновления повторно-используемых значений и параметров сеанса. + ОбновитьКэшМеханизмаРегистрацииОбъектов(); + + // Зарегистрируем имена параметров, которые установлены при. + // Выполнении ОбменДаннымиВызовСервера.ОбновитьКэшМеханизмаРегистрацииОбъектов. + УстановленныеПараметры.Добавить("ПравилаВыборочнойРегистрацииОбъектов"); + УстановленныеПараметры.Добавить("ПравилаРегистрацииОбъектов"); + УстановленныеПараметры.Добавить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО"); + + ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(Новый Соответствие); + УстановленныеПараметры.Добавить("ПаролиСинхронизацииДанных"); + + ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Новый Массив); + УстановленныеПараметры.Добавить("ПриоритетныеДанныеОбмена"); + + ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(Новый Соответствие); + УстановленныеПараметры.Добавить("ПараметрыСеансаСинхронизацииДанных"); + + СтруктураПроверки =Новый Структура; + СтруктураПроверки.Вставить("ПроверятьРасхождениеВерсий", Ложь); + СтруктураПроверки.Вставить("ЕстьОшибка", Ложь); + СтруктураПроверки.Вставить("ТекстОшибки", ""); + + ПараметрыСеанса.ОшибкаРасхожденияВерсийПриПолученииДанных = Новый ФиксированнаяСтруктура(СтруктураПроверки); + УстановленныеПараметры.Добавить("ОшибкаРасхожденияВерсийПриПолученииДанных"); + + Иначе + + ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(Новый Соответствие); + УстановленныеПараметры.Добавить("ПаролиСинхронизацииДанных"); + + ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(Новый Соответствие); + УстановленныеПараметры.Добавить("ПараметрыСеансаСинхронизацииДанных"); + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку актуальности КЭШа механизма регистрации объектов. +// Если кэш неактуальный, то выполняется инициализация КЭШа актуальными значениями. +// +// Параметры: +// Нет. +// +Процедура ПроверитьКэшМеханизмаРегистрацииОбъектов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + АктуальнаяДата = ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО"); + + Если ПараметрыСеанса.ДатаОбновленияПовторноИспользуемыхЗначенийМРО <> АктуальнаяДата Тогда + + ОбновитьКэшМеханизмаРегистрацииОбъектов(); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Обновляет/устанавливает повторно-используемые значения и параметры сеанса для подсистемы обмена данными. +// +// Устанавливаемые параметры сеанса: +// ПравилаРегистрацииОбъектов - ХранилищеЗначения - в бинарном виде содержит таблицу значений с правилами регистрации +// объектов. +// ПравилаВыборочнойРегистрацииОбъектов - +// ДатаОбновленияПовторноИспользуемыхЗначенийМРО - Дата (Дата и время) - содержит дату последнего актуального +// кэша для подсистемы обмена данными. +// +// Параметры: +// Нет. +// +Процедура ОбновитьКэшМеханизмаРегистрацииОбъектов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ОбновитьПовторноИспользуемыеЗначения(); + + Если ОбменДаннымиПовтИсп.ИспользуемыеПланыОбмена().Количество() > 0 Тогда + + ПараметрыСеанса.ПравилаРегистрацииОбъектов = Новый ХранилищеЗначения(ОбменДаннымиСервер.ПолучитьПравилаРегистрацииОбъектов()); + + ПараметрыСеанса.ПравилаВыборочнойРегистрацииОбъектов = Новый ХранилищеЗначения(ОбменДаннымиСервер.ПолучитьПравилаВыборочнойРегистрацииОбъектов()); + + Иначе + + ПараметрыСеанса.ПравилаРегистрацииОбъектов = Новый ХранилищеЗначения(ОбменДаннымиСервер.ИнициализацияТаблицыПравилРегистрацииОбъектов()); + + ПараметрыСеанса.ПравилаВыборочнойРегистрацииОбъектов = Новый ХранилищеЗначения(ОбменДаннымиСервер.ИнициализацияТаблицыПравилВыборочнойРегистрацииОбъектов()); + + КонецЕсли; + + // Ключ для проверки актуальности кэша. + ПараметрыСеанса.ДатаОбновленияПовторноИспользуемыхЗначенийМРО = ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО"); + +КонецПроцедуры + +// См. ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов. +Процедура СброситьКэшМеханизмаРегистрацииОбъектов() Экспорт + + Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + УстановитьПривилегированныйРежим(Истина); + // Записываем универсальную дату и время компьютера сервера - ТекущаяУниверсальнаяДата(), + // метод ТекущаяДатаСеанса() использовать нельзя. + // Текущая универсальная дата сервера в данном случае используется в качестве + // ключа уникальности кэша механизма регистрации объектов. + Константы.ДатаОбновленияПовторноИспользуемыхЗначенийМРО.Установить(ТекущаяУниверсальнаяДата()); + + КонецЕсли; + +КонецПроцедуры + +// Удаляет информацию о проблемах записи объекта при его записи. +// +Процедура ЗарегистрироватьУстранениеПроблемы(Источник, ТипПроблемы, Знач НовоеЗначениеПометкиУдаления) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОбменДаннымиПовтИсп.ИспользуемыеПланыОбмена().Количество() > 0 + И (БезопасныйРежим() = ЛОЖЬ ИЛИ Пользователи.ЭтоПолноправныйПользователь()) Тогда + + НаборЗаписейКонфликта = РегистрыСведений.РезультатыОбменаДанными.СоздатьНаборЗаписей(); + НаборЗаписейКонфликта.Отбор.ПроблемныйОбъект.Установить(Источник); + НаборЗаписейКонфликта.Отбор.ТипПроблемы.Установить(ТипПроблемы); + + НаборЗаписейКонфликта.Прочитать(); + + Если НаборЗаписейКонфликта.Количество() = 1 Тогда + + Если НовоеЗначениеПометкиУдаления <> ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник, "ПометкаУдаления") Тогда + + НаборЗаписейКонфликта[0].ПометкаУдаления = НовоеЗначениеПометкиУдаления; + НаборЗаписейКонфликта.Записать(); + + Иначе + + НаборЗаписейКонфликта.Очистить(); + НаборЗаписейКонфликта.Записать(); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Возвращает список приоритетных данных обмена. +// +// Возвращаемое значение: +// Массив - коллекция ссылок на выгруженные приоритетные данные обмена. +// +Функция ПриоритетныеДанныеОбмена() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Результат = Новый Массив; + + Для Каждого Элемент Из ПараметрыСеанса.ПриоритетныеДанныеОбмена Цикл + + Результат.Добавить(Элемент); + + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Очищает список приоритетных данных обмена. +// +Процедура ОчиститьПриоритетныеДанныеОбмена() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Новый Массив); + +КонецПроцедуры + +// Дополняет список приоритетных данных обмена переданным значением. +// +Процедура ДополнитьПриоритетныеДанныеОбмена(Знач Данные) Экспорт + + Результат = ПриоритетныеДанныеОбмена(); + + Результат.Добавить(Данные); + + УстановитьПривилегированныйРежим(Истина); + + ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Результат); + +КонецПроцедуры + +// Возвращает признак режима загрузки параметров работы программы из сообщения обмена в информационную базу. +// Актуально для обмена в РИБ при загрузке данных в подчиненном узле РИБ. +// +Функция РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском(Свойство) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ПараметрыСеанса.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском.Свойство(Свойство); + +КонецФункции + +// Возвращает признак использования плана обмена в обмене данными. +// Если план обмена содержит хотя бы один узел кроме предопределенного, +// то считается, что он используется. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. +// +// Возвращаемое значение: +// Булево - Истина, если план обмена используется, Ложь - нет. +// +Функция ОбменДаннымиВключен(Знач ИмяПланаОбмена, Знач Отправитель) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбменДаннымиПовтИсп.ОбменДаннымиВключен(ИмяПланаОбмена, Отправитель); +КонецФункции + +// Возвращает значение параметра сеанса ПравилаРегистрацииОбъектов, полученное в привилегированном режиме. +// +// Возвращаемое значение: +// ХранилищеЗначения - значение параметра сеанса ПравилаРегистрацииОбъектов. +// +Функция ПараметрыСеансаПравилаРегистрацииОбъектов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ПараметрыСеанса.ПравилаРегистрацииОбъектов; + +КонецФункции + +// Возвращает признак того, что для получателя зарегистрированы изменения данных. +// +Функция ИзмененияЗарегистрированы(Знач Получатель) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 1 + |ИЗ + | [Таблица].Изменения КАК ТаблицаИзменений + |ГДЕ + | ТаблицаИзменений.Узел = &Узел"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Узел", Получатель); + + УстановитьПривилегированныйРежим(Истина); + + СоставПланаОбмена = Метаданные.ПланыОбмена[ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Получатель)].Состав; + + Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл + + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "[Таблица]", ЭлементСостава.Метаданные.ПолноеИмя()); + + РезультатЗапроса = Запрос.Выполнить(); + + Если Не РезультатЗапроса.Пустой() Тогда + Возврат Истина; + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; +КонецФункции + Функция ЗагрузитьЧастьФайла(ИдентификаторФайла, НомерЗагружаемойЧастиФайла, ЗагружаемаяЧастьФайла, СообщениеОбОшибке) Экспорт СообщениеОбОшибке = ""; @@ -31,6 +335,8 @@ ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, ПолучитьИмяЧастиФайла(НомерЗагружаемойЧастиФайла)); ЗагружаемаяЧастьФайла.Записать(ИмяФайла); + Возврат ""; + КонецФункции Функция ВыгрузитьЧастьФайла(ИдентификаторФайла, НомерВыгружаемойЧастиФайла, СообщениеОбОшибке) Экспорт @@ -333,7 +639,7 @@ ВызватьИсключение НСтр("ru = 'Недостаточно прав для синхронизации данных.'"); ИначеЕсли ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() - И Не ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена") Тогда + И Не РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена") Тогда ВызватьИсключение НСтр("ru = 'Информационная база находится в состоянии обновления.'"); @@ -552,9 +858,9 @@ Функция СформироватьКлючСообщенияЖР(НаправлениеОбмена, ПараметрыWEBСервиса) Если НаправлениеОбмена = "Получение" Тогда - ШаблонКлючаСообщения = НСтр("ru = 'Загрузка данных через Web-сервис %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ШаблонКлючаСообщения = НСтр("ru = 'Загрузка данных через Web-сервис %1'", ОбщегоНазначения.КодОсновногоЯзыка()); Иначе - ШаблонКлючаСообщения = НСтр("ru = 'Выгрузка данных через Web-сервис %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ШаблонКлючаСообщения = НСтр("ru = 'Выгрузка данных через Web-сервис %1'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКлючаСообщения, ПараметрыWEBСервиса.ИмяWEBСервиса); @@ -579,7 +885,7 @@ СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); ЗаписьЖурналаРегистрации(СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index 30c0d2a80..47b327cc7 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Процедура-обработчик события "ПередЗаписью" документов для механизма регистрации объектов на узлах. @@ -6,8 +14,8 @@ // ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации. // Источник - ДокументОбъект - источник события. // Отказ - Булево - флаг отказа от выполнения обработчика. -// РежимЗаписи - РежимЗаписиДокумента - см. в синтаксис-помощнике РежимЗаписиДокумента. -// РежимПроведения - РежимПроведенияДокумента - см. в синтаксис-помощнике РежимПроведенияДокумента. +// РежимЗаписи - РежимЗаписиДокумента - см. в синтакс-помощнике РежимЗаписиДокумента. +// РежимПроведения - РежимПроведенияДокумента - см. в синтакс-помощнике РежимПроведенияДокумента. // Процедура МеханизмРегистрацииОбъектовПередЗаписьюДокумента(ИмяПланаОбмена, Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт @@ -205,16 +213,9 @@ // Функция ВсеУзлыПланаОбмена(ИмяПланаОбмена) Экспорт - #Если ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда - - Возврат ОбменДаннымиВызовСервера.ВсеУзлыПланаОбмена(ИмяПланаОбмена); - - #Иначе - - УстановитьПривилегированныйРежим(Истина); - Возврат ОбменДаннымиСервер.УзлыПланаОбмена(ИмяПланаОбмена); - - #КонецЕсли + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбменДаннымиСервер.УзлыПланаОбмена(ИмяПланаОбмена); КонецФункции @@ -349,7 +350,7 @@ Если ЭлементДанных.Предопределенный Тогда - ОбменДаннымиВызовСервера.ДополнитьПриоритетныеДанныеОбмена(ЭлементДанных.Ссылка); + ОбменДаннымиСлужебный.ДополнитьПриоритетныеДанныеОбмена(ЭлементДанных.Ссылка); КонецЕсли; @@ -363,11 +364,11 @@ // информационной базе. // // Параметры: -// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. +// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтакс-помощнике. // Процедура ПриПолученииДанныхОтГлавногоВНачале(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт - Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "ЗагрузкаПараметровРаботыПрограммы") Тогда // В режиме загрузки параметров работы программы игнорируем получение всех данных. @@ -388,7 +389,7 @@ // Вызывается из обработчика плана обмена: ПриПолученииДанныхОтГлавного. // // Параметры: -// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. +// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтакс-помощнике. // Процедура ПриПолученииДанныхОтГлавногоВКонце(ЭлементДанных, ПолучениеЭлемента, Знач Отправитель) Экспорт @@ -408,7 +409,7 @@ // Вызывается из обработчика плана обмена: ПриПолученииДанныхОтПодчиненного. // // Параметры: -// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтаксис-помощнике. +// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтакс-помощнике. // Процедура ПриПолученииДанныхОтПодчиненногоВКонце(ЭлементДанных, ПолучениеЭлемента, Знач Отправитель) Экспорт @@ -552,7 +553,7 @@ ЗарегистрированныеКВыгрузкеОбъекты = Неопределено; Если Источник.ДополнительныеСвойства.Свойство("ЗарегистрированныеКВыгрузкеОбъекты", ЗарегистрированныеКВыгрузкеОбъекты) Тогда - ОбменДаннымиВызовСервера.ОбновитьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.ОбновитьКэшМеханизмаРегистрацииОбъектов(); Для Каждого Объект Из ЗарегистрированныеКВыгрузкеОбъекты Цикл @@ -573,7 +574,7 @@ ВыполнитьРегистрациюОбъектовСсылочногоТипаПоСвойствамУзла(Источник, ТаблицаРеквизитовСсылочногоТипа); // Обновляем повторно используемые значения механизма. - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); КонецЕсли; @@ -588,7 +589,7 @@ Если Источник.ЭтоНовый() И ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(Источник.Ссылка) Тогда // Кэш открытых сеансов для МРО стал неактуальным. - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); КонецЕсли; @@ -603,7 +604,7 @@ Если ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(Источник.Ссылка) Тогда // Кэш открытых сеансов для МРО стал неактуальным. - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); КонецЕсли; @@ -623,7 +624,7 @@ И Не Источник.ЭтоНовый() И Не Источник.ЭтотУзел И ДанныеРазличаются(Источник, Источник.Ссылка.ПолучитьОбъект(),, "НомерОтправленного, НомерПринятого, ПометкаУдаления, Код, Наименование") - И ОбменДаннымиВызовСервера.ИзмененияЗарегистрированы(Источник.Ссылка) Тогда + И ОбменДаннымиСлужебный.ИзмененияЗарегистрированы(Источник.Ссылка) Тогда СохранитьРазрешенныеКВыгрузкеОбъекты(Источник); @@ -839,6 +840,31 @@ Справочники.СценарииОбменовДанными.ОчиститьСсылкиНаУзелИнформационнойБазы(Источник.Ссылка); + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + + КлючЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'ОбменДаннымиСВнешнейСистемой (%1)'"), + Источник.Код); + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + + Отбор = Новый Структура; + Отбор.Вставить("ОбластьДанных", МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + Отбор.Вставить("ИмяМетода", "ОбменДаннымиСервер.ВыполнитьОбменДаннымиСВнешнейСистемой"); + Отбор.Вставить("Ключ", КлючЗадания); + + ТаблицаЗадания = МодульОчередьЗаданий.ПолучитьЗадания(Отбор); + Для Каждого СтрокаЗадания Из ТаблицаЗадания Цикл + МодульОчередьЗаданий.УдалитьЗадание(СтрокаЗадания.Идентификатор); + КонецЦикла; + КонецЕсли; + + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -865,7 +891,7 @@ // Необязательный, значение по умолчанию Ложь. // * ЭтоКонстанта - Булево - значение Истина означает, что обрабатывается константа. // Необязательный, значение по умолчанию Ложь. -// * РежимЗаписи - см. в синтаксис-помощнике РежимЗаписиДокумента - режим записи документа (только для документов). +// * РежимЗаписи - см. в синтакс-помощнике РежимЗаписиДокумента - режим записи документа (только для документов). // Необязательный, значение по умолчанию Неопределено. // * Замещение - Булево - режим записи регистра (только для регистров). // Необязательный, значение по умолчанию Неопределено. @@ -898,7 +924,7 @@ УстановитьПривилегированныйРежим(Истина); // Обновляем повторно используемые значения Механизма регистрации объектов. - ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.ПроверитьКэшМеханизмаРегистрацииОбъектов(); Если Объект.ДополнительныеСвойства.Свойство("РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ") Тогда // Параметр РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ указывает на то, что выполняется обновление данных ИБ. @@ -990,7 +1016,7 @@ Объект.ОбменДанными.Отправитель = Неопределено; КонецЕсли; - Если Не ОбменДаннымиВызовСервера.ОбменДаннымиВключен(ИмяПланаОбмена, Объект.ОбменДанными.Отправитель) Тогда + Если Не ОбменДаннымиСлужебный.ОбменДаннымиВключен(ИмяПланаОбмена, Объект.ОбменДанными.Отправитель) Тогда Возврат; КонецЕсли; @@ -1049,7 +1075,7 @@ ИмяПланаОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Правила регистрации объектов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Правила регистрации объектов'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ПланыОбмена[ИмяПланаОбмена], , ОписаниеОшибки); ВызватьИсключение ОписаниеОшибки; @@ -1295,7 +1321,7 @@ // Необязательный, значение по умолчанию Ложь. // * ЭтоУдалениеОбъекта - Булево - значение Истина означает, что обрабатывается удаление объекта. // Необязательный, значение по умолчанию Ложь. -// * РежимЗаписи - см. в синтаксис-помощнике РежимЗаписиДокумента - режим записи документа (только для документов). +// * РежимЗаписи - см. в синтакс-помощнике РежимЗаписиДокумента - режим записи документа (только для документов). // Необязательный, значение по умолчанию Неопределено. // * Замещение - Булево - режим записи регистра (только для регистров). // Необязательный, значение по умолчанию Неопределено. @@ -1347,7 +1373,7 @@ // * ОбъектМетаданных - ОбъектМетаданных - объект метаданных, которому соответствуют изменяемые данные. Обязательный. // * ЭтоРегистр - Булево - значение Истина означает, что обрабатывается регистр. Обязательный. // * ЭтоУдалениеОбъекта - Булево - значение Истина означает, что обрабатывается удаление объекта. Обязательный. -// * РежимЗаписи - см. в синтаксис-помощнике РежимЗаписиДокумента - режим записи документа (только для документов). +// * РежимЗаписи - см. в синтакс-помощнике РежимЗаписиДокумента - режим записи документа (только для документов). // Обязательный. // * Замещение - Булево - режим записи регистра (только для регистров). Обязательный. // * ПроверятьСсылку - Булево - признак необходимости учитывать версию данных на момент до их изменения. @@ -1360,10 +1386,7 @@ ОбъектМетаданных = ДополнительныеПараметры.ОбъектМетаданных; ЭтоРегистр = ДополнительныеПараметры.ЭтоРегистр; - ЭтоУдалениеОбъекта = ДополнительныеПараметры.ЭтоУдалениеОбъекта; - РежимЗаписи = ДополнительныеПараметры.РежимЗаписи; Замещение = ДополнительныеПараметры.Замещение; - ПроверятьСсылку = ДополнительныеПараметры.ПроверятьСсылку; Выгрузка = ДополнительныеПараметры.Выгрузка; ПравилаРегистрацииОбъекта = Новый Массив; @@ -1403,17 +1426,9 @@ // ОПРЕДЕЛЯЕМ ПОЛУЧАТЕЛЕЙ С РЕЖИМОМ ВЫГРУЗКИ "ВСЕГДА" - #Если ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда - - Получатели = ОбменДаннымиВызовСервера.УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); - - #Иначе - - УстановитьПривилегированныйРежим(Истина); - Получатели = УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); - УстановитьПривилегированныйРежим(Ложь); - - #КонецЕсли + УстановитьПривилегированныйРежим(Истина); + Получатели = УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); + УстановитьПривилегированныйРежим(Ложь); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, Получатели, Истина); @@ -1436,17 +1451,9 @@ // ОПРЕДЕЛЯЕМ ПОЛУЧАТЕЛЕЙ С РЕЖИМОМ ВЫГРУЗКИ "ВСЕГДА" - #Если ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда - - Получатели = ОбменДаннымиВызовСервера.УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); - - #Иначе - - УстановитьПривилегированныйРежим(Истина); - Получатели = УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); - УстановитьПривилегированныйРежим(Ложь); - - #КонецЕсли + УстановитьПривилегированныйРежим(Истина); + Получатели = УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); + УстановитьПривилегированныйРежим(Ложь); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, Получатели, Истина); @@ -1454,17 +1461,9 @@ Если Не Объект.ЭтоНовый() Тогда - #Если ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда - - Получатели = ОбменДаннымиВызовСервера.УзлыДляРегистрацииПоУсловиюВыгружатьПриНеобходимости(Объект.Ссылка, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); - - #Иначе - - УстановитьПривилегированныйРежим(Истина); - Получатели = УзлыДляРегистрацииПоУсловиюВыгружатьПриНеобходимости(Объект.Ссылка, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); - УстановитьПривилегированныйРежим(Ложь); - - #КонецЕсли + УстановитьПривилегированныйРежим(Истина); + Получатели = УзлыДляРегистрацииПоУсловиюВыгружатьПриНеобходимости(Объект.Ссылка, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); + УстановитьПривилегированныйРежим(Ложь); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, Получатели, Истина); @@ -1480,16 +1479,16 @@ КонецПроцедуры -// Получает массив узлов плана обмена, для которых установлен признак «Выгружать всегда». +// Получает массив узлов плана обмена, для которых установлен признак "Выгружать всегда". // // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, по которому определяются узлы. // ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов. // // Возвращаемое значение: -// Массив - Массив узлов плана обмена, для которых установлен признак «Выгружать всегда». +// Массив - Массив узлов плана обмена, для которых установлен признак "Выгружать всегда". // -Функция УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт +Функция УзлыДляРегистрацииПоУсловиюВыгружатьВсегда(Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) ТекстЗапроса = " |ВЫБРАТЬ @@ -1511,7 +1510,7 @@ Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Узел"); КонецФункции -// Получает массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости». +// Получает массив узлов плана обмена, для которых установлен признак "Выгружать при необходимости". // // Параметры: // Ссылка - ссылка на объект ИБ, для которого необходимо получить массив узлов, в которые объект ранее выгружался. @@ -1519,9 +1518,9 @@ // ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов. // // Возвращаемое значение: -// Массив - Массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости». +// Массив - Массив узлов плана обмена, для которых установлен признак "Выгружать при необходимости". // -Функция УзлыДляРегистрацииПоУсловиюВыгружатьПриНеобходимости(Ссылка, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт +Функция УзлыДляРегистрацииПоУсловиюВыгружатьПриНеобходимости(Ссылка, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) МассивУзлов = Новый Массив; @@ -1595,7 +1594,7 @@ // ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации. // ДополнительныеПараметры - Структура - уточняющие сведения об изменяемых данных: // * ЭтоУдалениеОбъекта - Булево - значение Истина означает, что обрабатывается удаление объекта. Обязательный. -// * РежимЗаписи - см. в синтаксис-помощнике РежимЗаписиДокумента - режим записи документа (только для документов). +// * РежимЗаписи - см. в синтакс-помощнике РежимЗаписиДокумента - режим записи документа (только для документов). // Обязательный. // * ПроверятьСсылку - Булево - признак необходимости учитывать версию данных на момент до их изменения. // Обязательный. @@ -1644,7 +1643,7 @@ // ДополнительныеПараметры - Структура - уточняющие сведения об изменяемых данных: // * ОбъектМетаданных - ОбъектМетаданных - объект метаданных, которому соответствуют изменяемые данные. Обязательный. // * ЭтоУдалениеОбъекта - Булево - значение Истина означает, что обрабатывается удаление объекта. Обязательный. -// * РежимЗаписи - см. в синтаксис-помощнике РежимЗаписиДокумента - режим записи документа (только для документов). +// * РежимЗаписи - см. в синтакс-помощнике РежимЗаписиДокумента - режим записи документа (только для документов). // Обязательный. // * ПроверятьСсылку - Булево - признак необходимости учитывать версию данных на момент до их изменения. // Обязательный. @@ -1741,17 +1740,9 @@ Если ПроверятьСсылку Тогда // Получаем структуру значений свойств для ссылки. - #Если ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда - - ЗначенияСвойствСсылки = ОбменДаннымиВызовСервера.ЗначенияСвойствДляСсылки(Источник.Ссылка, ПРО.СвойстваОбъекта, ПРО.СвойстваОбъектаСтрокой, ПРО.ОбъектМетаданныхИмя); - - #Иначе - - УстановитьПривилегированныйРежим(Истина); - ЗначенияСвойствСсылки = ЗначенияСвойствДляСсылки(Источник.Ссылка, ПРО.СвойстваОбъекта, ПРО.СвойстваОбъектаСтрокой, ПРО.ОбъектМетаданныхИмя); - УстановитьПривилегированныйРежим(Ложь); - - #КонецЕсли + УстановитьПривилегированныйРежим(Истина); + ЗначенияСвойствСсылки = ЗначенияСвойствДляСсылки(Источник.Ссылка, ПРО.СвойстваОбъекта, ПРО.СвойстваОбъектаСтрокой, ПРО.ОбъектМетаданныхИмя); + УстановитьПривилегированныйРежим(Ложь); // Определяем массив узлов для регистрации ссылки. МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойствСсылки, ПРО, ИмяПланаОбмена, Источник); @@ -1840,7 +1831,7 @@ // Возвращаемое значение: // Структура - Структура со значениями свойств объекта. // -Функция ЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, Знач СвойстваОбъектаСтрокой, Знач ОбъектМетаданныхИмя) Экспорт +Функция ЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, Знач СвойстваОбъектаСтрокой, Знач ОбъектМетаданныхИмя) ЗначенияСвойств = СкопироватьСтруктуру(СвойстваОбъекта); @@ -1921,16 +1912,8 @@ Иначе - #Если ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда - - Возврат ОбменДаннымиВызовСервера.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага, Выгрузка); - - #Иначе - - УстановитьПривилегированныйРежим(Истина); - Возврат МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага, Выгрузка); - - #КонецЕсли + УстановитьПривилегированныйРежим(Истина); + Возврат МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага, Выгрузка); КонецЕсли; @@ -1957,16 +1940,8 @@ Иначе - #Если ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда - - Возврат ОбменДаннымиВызовСервера.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); - - #Иначе - - УстановитьПривилегированныйРежим(Истина); - Возврат МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); - - #КонецЕсли + УстановитьПривилегированныйРежим(Истина); + Возврат МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); КонецЕсли; @@ -2243,7 +2218,7 @@ #Если ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда - ОбменДаннымиВызовСервера.ВыполнитьОбработчикВПривилегированномРежиме(Значение, СтрокаДерева.ЗначениеКонстанты); + ВыполнитьОбработчикВПривилегированномРежиме(Значение, СтрокаДерева.ЗначениеКонстанты); #Иначе @@ -2422,18 +2397,16 @@ Функция УсловиеИстинноДляЭлемента(СтрокаДерева, ЭтоОператорИ) - Перем ВидСравнения; - - ВидСравнения = СтрокаДерева.ВидСравнения; + ВидСравненияПравила = СтрокаДерева.ВидСравнения; Попытка - Если ВидСравнения = "Равно" Тогда Возврат СтрокаДерева.ЗначениеСвойства = СтрокаДерева.ЗначениеКонстанты; - ИначеЕсли ВидСравнения = "НеРавно" Тогда Возврат СтрокаДерева.ЗначениеСвойства <> СтрокаДерева.ЗначениеКонстанты; - ИначеЕсли ВидСравнения = "Больше" Тогда Возврат СтрокаДерева.ЗначениеСвойства > СтрокаДерева.ЗначениеКонстанты; - ИначеЕсли ВидСравнения = "БольшеИлиРавно" Тогда Возврат СтрокаДерева.ЗначениеСвойства >= СтрокаДерева.ЗначениеКонстанты; - ИначеЕсли ВидСравнения = "Меньше" Тогда Возврат СтрокаДерева.ЗначениеСвойства < СтрокаДерева.ЗначениеКонстанты; - ИначеЕсли ВидСравнения = "МеньшеИлиРавно" Тогда Возврат СтрокаДерева.ЗначениеСвойства <= СтрокаДерева.ЗначениеКонстанты; + Если ВидСравненияПравила = "Равно" Тогда Возврат СтрокаДерева.ЗначениеСвойства = СтрокаДерева.ЗначениеКонстанты; + ИначеЕсли ВидСравненияПравила = "НеРавно" Тогда Возврат СтрокаДерева.ЗначениеСвойства <> СтрокаДерева.ЗначениеКонстанты; + ИначеЕсли ВидСравненияПравила = "Больше" Тогда Возврат СтрокаДерева.ЗначениеСвойства > СтрокаДерева.ЗначениеКонстанты; + ИначеЕсли ВидСравненияПравила = "БольшеИлиРавно" Тогда Возврат СтрокаДерева.ЗначениеСвойства >= СтрокаДерева.ЗначениеКонстанты; + ИначеЕсли ВидСравненияПравила = "Меньше" Тогда Возврат СтрокаДерева.ЗначениеСвойства < СтрокаДерева.ЗначениеКонстанты; + ИначеЕсли ВидСравненияПравила = "МеньшеИлиРавно" Тогда Возврат СтрокаДерева.ЗначениеСвойства <= СтрокаДерева.ЗначениеКонстанты; КонецЕсли; Исключение @@ -2558,7 +2531,7 @@ КонецЕсли; // Проверяем актуальность кэша механизма регистрации объектов. - ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.ПроверитьКэшМеханизмаРегистрацииОбъектов(); РежимВыгрузкиОбъекта = ОбменДаннымиПовтИсп.РежимВыгрузкиОбъекта(ЭлементДанных.Метаданные().ПолноеИмя(), Получатель); @@ -3135,23 +3108,21 @@ Процедура УстановитьЗначенияОтборовНаУзле(УзелПланаОбмена, Настройки) Экспорт - ИмяПланаОбмена = УзелПланаОбмена.Метаданные().Имя; - УстановитьЗначенияНаУзле(УзелПланаОбмена, Настройки); КонецПроцедуры Процедура УстановитьЗначенияПоУмолчаниюНаУзле(УзелПланаОбмена, Настройки) Экспорт - ИмяПланаОбмена = УзелПланаОбмена.Метаданные().Имя; - УстановитьЗначенияНаУзле(УзелПланаОбмена, Настройки); КонецПроцедуры Процедура УстановитьЗначенияНаУзле(УзелПланаОбмена, Настройки) - ИмяПланаОбмена = УзелПланаОбмена.Метаданные().Имя; + // УзелПланаОбмена - ПланОбменаОбъект - недоступный тип параметра + // для модулей с повторным использованием значений, поэтому используется УзелПланаОбмена.Ссылка. + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелПланаОбмена.Ссылка); Для Каждого Элемент Из Настройки Цикл @@ -3292,6 +3263,24 @@ КонецФункции +// Проверяет режим запуска, устанавливает привилегированный режим и выполняет обработчик. +// +Процедура ВыполнитьОбработчикВПривилегированномРежиме(Значение, Знач СтрокаОбработчика) + + Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда + ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); + КонецЕсли; + + Если ОбщегоНазначения.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'Метод не поддерживается при работе в модели сервиса.'"); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Выполнить(СтрокаОбработчика); + +КонецПроцедуры + #КонецОбласти #Область РаботаСКоллизиямиИзмененияДанныхПриОбмене diff --git a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl index 1cdcb90ab..37b8c07e3 100644 --- a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выполняет отправку сообщения в адресный канал сообщений. @@ -389,7 +397,6 @@ КонецЕсли; СправочникДляСообщения = Справочники.СообщенияСистемы; - СтандартнаяОбработка = Истина; Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда МодульСообщенияВМоделиСервисаРазделениеДанных = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); @@ -440,7 +447,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.БлокировкаОтправкиБыстрыхСообщений"); + Блокировка.Добавить("Константа.БлокировкаОтправкиБыстрыхСообщений"); Блокировка.Заблокировать(); БлокировкаОтправкиБыстрыхСообщений = Константы.БлокировкаОтправкиБыстрыхСообщений.Получить(); @@ -467,7 +474,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.БлокировкаОтправкиБыстрыхСообщений"); + Блокировка.Добавить("Константа.БлокировкаОтправкиБыстрыхСообщений"); Блокировка.Заблокировать(); Константы.БлокировкаОтправкиБыстрыхСообщений.Установить(Дата('00010101')); diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl index b4a77f4dc..9419645af 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Только для внутреннего использования. @@ -788,7 +796,7 @@ Если ПланыОбмена.ОбменСообщениями.НайтиПоКоду(КодЭтойКонечнойТочки) <> ЭтотУзел() Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Заданы неверные параметры подключения к конечной точке. Параметры подключения указывают на другую конечную точку.'"); СтрокаСообщенияОбОшибкеДляЖурналаРегистрации = НСтр("ru = 'Заданы неверные параметры подключения к конечной точке. - |Параметры подключения указывают на другую конечную точку.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + |Параметры подключения указывают на другую конечную точку.'", ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибкеДляЖурналаРегистрации); ВызватьИсключение СтрокаСообщенияОбОшибке; @@ -1174,21 +1182,21 @@ // Только для внутреннего использования. Функция СобытиеЖурналаРегистрацииПодключениеКонечнойТочки() Экспорт - Возврат НСтр("ru = 'Обмен сообщениями.Подключение конечной точки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен сообщениями.Подключение конечной точки'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции // Только для внутреннего использования. Функция СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки() Экспорт - Возврат НСтр("ru = 'Обмен сообщениями.Установка ведущей конечной точки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен сообщениями.Установка ведущей конечной точки'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции // Только для внутреннего использования. Функция СобытиеЖурналаРегистрацииЭтойПодсистемы() Экспорт - Возврат НСтр("ru = 'Обмен сообщениями'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен сообщениями'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -1317,7 +1325,7 @@ Если Не УзелКонечнойТочки.Пустая() Тогда Отказ = Истина; - СтрокаСообщенияОбОшибке = НСтр("ru = 'Конечная точка уже подключена к информационной базе; наименование точки: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщенияОбОшибке = НСтр("ru = 'Конечная точка уже подключена к информационной базе; наименование точки: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелКонечнойТочки, "Наименование")); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); Возврат; diff --git a/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl index 84dfce5ad..233996c56 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Выполняет отправку и получение сообщений системы. diff --git a/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl index dfb00ed9f..8a32cb3a4 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Выполняет отправку и получение сообщений системы. diff --git a/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl index 34e52829e..92014eda8 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Получает список обработчиков сообщений, которые обрабатывает diff --git a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl index 25e2cda71..bcc0fbd6b 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Возвращает ссылку на объект WSПрокси для заданного узла обмена. diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index 4d3469e60..9e45d6651 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -195,7 +203,7 @@ КонецЕсли; Форма.ТолькоПросмотр = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.ТекстИсключения); + ОбщегоНазначения.СообщитьПользователю(Результат.ТекстИсключения); Возврат; КонецЕсли; @@ -480,12 +488,14 @@ // * Очередь - Число - очередь обработки, в которой выполняется текущий обработчик. // * ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами - ЗаписьFastInfoset - параметр // существует, только если внедрена подсистема ОбменДанными. +// * ПараметрыВыборки - Структура - см. ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(). // Функция ОсновныеПараметрыОтметкиКОбработке() Экспорт Параметры = Новый Структура; Параметры.Вставить("Очередь", 0); Параметры.Вставить("ПовторнаяРегистрация", Ложь); + Параметры.Вставить("ПараметрыВыборки"); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда @@ -798,25 +808,33 @@ // // Возвращаемое значение: // Структура - поля структуры: -// * ВыбиратьПорциями - Булево - выбирать данные для обработки порциями. -// Если выбираются документы, то в порция определяется с учетом упорядочивания по убыванию -// по дате документа. Если выбираются регистраторы регистра, то в порция определяется с -// учетом упорядочивания по убыванию по дате регистратора , если передано полное имя -// документа. Если полное имя документа не передано - упорядочивание происходит по периоду регистра: -// - берется максимальная дата по каждому регистратору -// - если по регистратору нет записей - он в топе. -// * ИмяВременнойТаблицы - Строка - параметр актуален для методов, создающих временные таблицы. Если имя не задано -// (поведение по умолчанию), то временная таблица будет создана с именем, указанным -// в описании каждого метода. -// * ДополнительныеИсточникиДанных - Соответствие - параметр актуален для методов, выбирающих регистраторы и ссылки -// для обработки. В ключах соответствия лежат пути к реквизитам -// шапки документа или реквизитам табличных частей, -// которые участвуют в соединениях с другими таблицами (в т.ч. -// неявных соединениях при обращении "через точку"). Процедуры -// проверяют блокировку данных этих таблиц обработчиками меньших -// очередей. Формат имен <ИмяРеквизита> или <ИмяТабличной>.<ИмяРеквизитаТабличнойЧасти>. -// * ПоляУпорядочивания - Массив - имена полей независимого регистра сведений, используется для упорядочивания -// результата запроса. +// * ВыбиратьПорциями - Булево - выбирать данные для обработки порциями. +// Если выбираются документы, то порция определяется с учетом упорядочивания по убыванию +// по дате документа. Если выбираются регистраторы регистра, то порция определяется с +// учетом упорядочивания по убыванию по дате регистратора, если передано полное имя документа. +// Если полное имя документа не передано - упорядочивание происходит по периоду регистра: +// - берется максимальная дата по каждому регистратору +// - если по регистратору нет записей - он в топе. +// * ИмяВременнойТаблицы - Строка - параметр актуален для методов, создающих временные таблицы. Если имя не задано +// (поведение по умолчанию), то временная таблица будет создана с именем, указанным +// в описании каждого метода. +// * ДополнительныеИсточникиДанных - Соответствие - параметр актуален для методов, выбирающих регистраторы и ссылки +// для обработки. В ключах соответствия может быть только один из следующих +// видов данных: +// 1. Пути к реквизитам шапки документа или реквизитам табличных частей, которые +// участвуют в соединениях с другими таблицами (в т.ч. неявных соединениях при +// обращении "через точку"). +// 2. Имена ссылочных объектов метаданных (Строка), в значениях которых находится +// соответствие, в котором ключ - это имя регистра (Строка), а в значении +// соответствие в ключах которого тоже, что и в п. 1, т.е. +// иерархия соответствий "Объект" -> "Регистр" -> "Источники". +// Процедуры проверяют блокировку данных этих таблиц обработчиками меньших +// очередей. Формат имен источников <ИмяРеквизита> или +// <ИмяТабличной>.<ИмяРеквизитаТабличнойЧасти>. Для удобства заполнения +// см. УстановитьИсточникДанных() и см. ПолучитьИсточникДанных(). +// * ПоляУпорядочивания - Массив - имена полей независимого регистра сведений, используется для упорядочивания +// результата запроса. +// * МаксимумВыборки - Число - максимальное количество выбираемых записей. // Функция ДополнительныеПараметрыВыборкиДанныхДляОбработки() Экспорт @@ -825,11 +843,127 @@ ДополнительныеПараметры.Вставить("ИмяВременнойТаблицы", ""); ДополнительныеПараметры.Вставить("ДополнительныеИсточникиДанных", Новый Соответствие); ДополнительныеПараметры.Вставить("ПоляУпорядочивания", Новый Массив); + ДополнительныеПараметры.Вставить("МаксимумВыборки", МаксимальноеКоличествоЗаписейВВыборке()); Возврат ДополнительныеПараметры; КонецФункции +// Дополнительные параметры выборки данных для многопоточной обработки. +// +// Возвращаемое значение: +// Структура - поля из ДополнительныеПараметрыВыборкиДанныхДляОбработки() дополненные следующими полями: +// * ПолныеИменаОбъектов - Строка - полные имена обновляемых объектов (например, документов), разделенных запятыми. +// * ПолныеИменаРегистров - Строка - полные имена регистров, разделенных запятыми. +// * ПоляУпорядочиванияПриРаботеПользователей - Массив - поля упорядочивания, используемые при обновлении +// с приоритетом работы пользователей. +// * ПоляУпорядочиванияПриОбработкеДанных - Массив - поля упорядочивания, используемые при обновлении +// с приоритетом обработки данных. +// * СпособВыборки - Строка - один из способов выборки: +// ОбновлениеИнформационнойБазы.СпособВыборкиИзмеренияНезависимогоРегистраСведений(), +// ОбновлениеИнформационнойБазы.СпособВыборкиРегистраторыРегистра(), +// ОбновлениеИнформационнойБазы.СпособВыборкиСсылки(). +// * ПоследняяВыбраннаяЗапись - СписокЗначений - конец предыдущей выборки (служебное поле). +// * ПерваяЗапись - СписокЗначений - начало выборки (служебное поле). +// * ПоследняяЗапись - СписокЗначений - конец выборки (служебное поле). +// * ОптимизироватьВыборкуПоСтраницам - Булево - если Истина, то выборка выполняется без ИЛИ, значение Ложь может +// быть полезно, если исходный запрос не оптимален, тогда с ИЛИ будет быстрее. +// +Функция ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки() Экспорт + + ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + ДополнительныеПараметры.Вставить("ПолныеИменаОбъектов"); + ДополнительныеПараметры.Вставить("ПолныеИменаРегистров"); + ДополнительныеПараметры.Вставить("ПоляУпорядочиванияПриРаботеПользователей", Новый Массив); + ДополнительныеПараметры.Вставить("ПоляУпорядочиванияПриОбработкеДанных", Новый Массив); + ДополнительныеПараметры.Вставить("СпособВыборки"); + ДополнительныеПараметры.Вставить("ПоследняяВыбраннаяЗапись"); + ДополнительныеПараметры.Вставить("ПерваяЗапись"); + ДополнительныеПараметры.Вставить("ПоследняяЗапись"); + ДополнительныеПараметры.Вставить("ОптимизироватьВыборкуПоСтраницам", Истина); + + Возврат ДополнительныеПараметры; + +КонецФункции + +// Установить параметр ДополнительныеИсточникиДанных в структуре, возвращаемой функцией +// ДополнительныеПараметрыВыборкиДанныхДляОбработки(). +// +// Используется, когда источники данных нужно установить в разрезе документов и регистров. +// Применяется при многопоточном обновлении. +// +// Параметры: +// ДополнительныеИсточникиДанных - Соответствие - тоже, что и ДополнительныеИсточникиДанных +// (см. ДополнительныеПараметрыВыборкиДанныхДляОбработки()). +// Источник - Строка - источники данных (см. ДополнительныеПараметрыВыборкиДанныхДляОбработки()). +// Объект - Строка - имя документа (полное или короткое). +// Регистр - Строка - имя регистра (полное или короткое). +// +Процедура УстановитьИсточникДанных(ДополнительныеИсточникиДанных, Источник, Объект = "", Регистр = "") Экспорт + + ИмяОбъекта = ИмяОбъектаМетаданных(Объект); + ИмяРегистра = ИмяОбъектаМетаданных(Регистр); + + Если ПустаяСтрока(ИмяОбъекта) И ПустаяСтрока(ИмяРегистра) Тогда + ДополнительныеИсточникиДанных.Вставить(Источник); + Иначе + РегистрыОбъекта = ДополнительныеИсточникиДанных[ИмяОбъекта]; + + Если РегистрыОбъекта = Неопределено Тогда + РегистрыОбъекта = Новый Соответствие; + ДополнительныеИсточникиДанных[ИмяОбъекта] = РегистрыОбъекта; + КонецЕсли; + + ИсточникиДанных = РегистрыОбъекта[ИмяРегистра]; + + Если ИсточникиДанных = Неопределено Тогда + ИсточникиДанных = Новый Соответствие; + РегистрыОбъекта[ИмяРегистра] = ИсточникиДанных; + КонецЕсли; + + ИсточникиДанных.Вставить(Источник); + КонецЕсли; + +КонецПроцедуры + +// Получить значение параметра ДополнительныеИсточникиДанных из структуры, возвращаемой +// функцией ДополнительныеПараметрыВыборкиДанныхДляОбработки(). +// +// Можно использовать, когда источники данных нужно получить в разрезе документов и регистров. +// Применяется при многопоточном обновлении. +// +// Параметры: +// ДополнительныеИсточникиДанных - Соответствие - тоже, что и ДополнительныеИсточникиДанных +// (см. ДополнительныеПараметрыВыборкиДанныхДляОбработки()). +// Объект - Строка - имя документа (полное или короткое). +// Регистр - Строка - имя регистра (полное или короткое). +// +// Возвращаемое значение: +// Соответствие - источники данных для указанного документа и регистра. +// +Функция ИсточникиДанных(ДополнительныеИсточникиДанных, Объект = "", Регистр = "") Экспорт + + Если ЭтоПростойИсточникДанных(ДополнительныеИсточникиДанных) Тогда + Возврат ДополнительныеИсточникиДанных; + Иначе + ИмяОбъекта = ИмяОбъектаМетаданных(Объект); + ИмяРегистра = ИмяОбъектаМетаданных(Регистр); + РегистрыОбъекта = ДополнительныеИсточникиДанных[ИмяОбъекта]; + ТипСоответствие = Тип("Соответствие"); + + Если ТипЗнч(РегистрыОбъекта) = ТипСоответствие Тогда + ИсточникиДанных = РегистрыОбъекта[ИмяРегистра]; + + Если ТипЗнч(ИсточникиДанных) = ТипСоответствие Тогда + Возврат ИсточникиДанных; + КонецЕсли; + КонецЕсли; + + Возврат Новый Соответствие; + КонецЕсли; + +КонецФункции + // Создает временную таблицу ссылок, которые не обработаны в текущей очереди // и не заблокированы меньшими очередями. // Имя таблицы: ВТДляОбработки<ИмяРегистра>, например ВТДляОбработкиТоварыНаСкладах. @@ -936,7 +1070,6 @@ |УНИЧТОЖИТЬ ВТЗаблокированоРегистратор"; КонецЕсли; Иначе - ИмяДокумента = СтрРазделить(ПолноеИмяДокумента,".",Ложь)[1]; Если ДополнительныеПараметры.ВыбиратьПорциями Тогда ТекстЗапроса = "ВЫБРАТЬ @@ -1084,12 +1217,13 @@ // ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. // // Возвращаемое значение: -// ВыборкаИзРезультатаЗапроса - выборка регистраторов, которые нужно обработать, поля выборки: -// * Регистратор - ДокументСсылка. -// * Период - Дата - дата документа, если передано полное имя документа, максимальный период по регистратору, -// если полное имя документа не передано. -// * Проведен - Булево, Неопределено - значение реквизита Проведен документа, если передано полное имя документа, -// Неопределено - если имя документа не передано. +// * ВыборкаИзРезультатаЗапроса - выборка регистраторов, которые нужно обработать, поля выборки: +// ** Регистратор - ДокументСсылка. +// ** Период - Дата - дата документа, если передано полное имя документа, максимальный период по регистратору, +// если полное имя документа не передано. +// ** Проведен - Булево, Неопределено - значение реквизита Проведен документа, если передано полное имя документа, +// Неопределено - если имя документа не передано. +// * ТаблицаЗначений - данные, которые нужно обработать, имена колонок соответствуют именам измерений регистра. // Функция ВыбратьРегистраторыРегистраДляОбработки(Очередь, ПолноеИмяДокумента, ПолноеИмяРегистра, ДополнительныеПараметры = Неопределено) Экспорт @@ -1097,15 +1231,14 @@ ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); КонецЕсли; - ИмяРегистра = СтрРазделить(ПолноеИмяРегистра,".",Ложь)[1]; - - ТекущаяОчередь = ОчередьСсылкой(Очередь); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц(); + ПроверитьПараметрыВыборки(ДополнительныеПараметры); + ПараметрыПостроения = ПараметрыПостроенияВыборки(ДополнительныеПараметры); Если ПолноеИмяДокумента = Неопределено Тогда ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 10000 - | ТаблицаРегистраИзменения.Регистратор КАК Регистратор + | &ВыбираемыеПоля |ИЗ | #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения | ЛЕВОЕ СОЕДИНЕНИЕ #ТаблицаДвиженийРегистра КАК ТаблицаРегистра @@ -1119,16 +1252,25 @@ | И &УсловиеПоДопИсточникамРегистрам | |СГРУППИРОВАТЬ ПО - | ТаблицаРегистраИзменения.Регистратор - | - |УПОРЯДОЧИТЬ ПО - | МАКСИМУМ(ЕСТЬNULL(ТаблицаРегистра.Период, ДАТАВРЕМЯ(3000, 1, 1))) УБЫВ"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаДвиженийРегистра", ПолноеИмяРегистра); + | ТаблицаРегистраИзменения.Регистратор"; + + Если ПараметрыПостроения.ПостраничнаяВыборка Тогда + ТекстЗапроса = ТекстЗапроса + " + | + |ИМЕЮЩИЕ + | &УсловиеПоСтраницам" + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + | + |УПОРЯДОЧИТЬ ПО + | &ПорядокВыборки"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаДвиженийРегистра", ПолноеИмяРегистра); + УстановитьПоляУпорядочиванияРегистра(ПараметрыПостроения); Иначе - ИмяДокумента = СтрРазделить(ПолноеИмяДокумента,".",Ложь)[1]; ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 10000 - | ТаблицаРегистраИзменения.Регистратор КАК Регистратор + | &ВыбираемыеПоля |ИЗ | #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоРегистратор КАК ВТЗаблокированоРегистратор @@ -1148,12 +1290,14 @@ | И ВТЗаблокированоСсылка.Ссылка ЕСТЬ NULL | И &УсловиеПоДопИсточникамСсылкам | И &УсловиеПоДопИсточникамРегистрам + | И &УсловиеПоСтраницам | |УПОРЯДОЧИТЬ ПО - | ТаблицаДокумента.Дата УБЫВ"; + | &ПорядокВыборки"; ДополнительныеПараметрыСозданияВТ = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); ДополнительныеПараметрыСозданияВТ.ИмяВременнойТаблицы = "ВТЗаблокированоСсылка"; СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяДокумента, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ); + УстановитьПоляУпорядочиванияРегистраПоДокументу(ПараметрыПостроения); КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаРегистраИзменения", ПолноеИмяРегистра + ".Изменения"); @@ -1161,11 +1305,7 @@ ДополнительныеПараметрыСозданияВТ = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); ДополнительныеПараметрыСозданияВТ.ИмяВременнойТаблицы = "ВТЗаблокированоРегистратор"; СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяРегистра, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ); - - Если Не ДополнительныеПараметры.ВыбиратьПорциями Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 10000","ВЫБРАТЬ"); - КонецЕсли; - + УстановитьРазмерВыборки(ТекстЗапроса, ДополнительныеПараметры); ДобавитьПроверкуБлокировкиДополнительныхИсточников(Очередь, ТекстЗапроса, ПолноеИмяДокумента, ПолноеИмяРегистра, МенеджерВременныхТаблиц, Ложь, ДополнительныеПараметры); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПолноеИмяДокумента", ПолноеИмяДокумента); @@ -1173,11 +1313,13 @@ Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; - Запрос.УстановитьПараметр("ТекущаяОчередь", ТекущаяОчередь); - ВыборкаПоРегистраторам = Запрос.Выполнить().Выбрать(); - - Возврат ВыборкаПоРегистраторам; - + Запрос.УстановитьПараметр("ТекущаяОчередь", ОчередьСсылкой(Очередь)); + + УстановитьПоляПоСтраницам(Запрос, ПараметрыПостроения); + УстановитьПорядокПоСтраницам(Запрос, ПараметрыПостроения); + + Возврат ВыбратьДанныеДляОбработки(Запрос, ПараметрыПостроения); + КонецФункции // Возвращает порцию ссылок, по которым нужно произвести обработку. @@ -1191,8 +1333,9 @@ // ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. // // Возвращаемое значение: -// ВыборкаИзРезультатаЗапроса - выборка ссылок, которые нужно обработать, поля выборки: -// * Ссылка - ЛюбаяСсылка. +// * ВыборкаИзРезультатаЗапроса - выборка ссылок, которые нужно обработать, поля выборки: +// ** Ссылка - ЛюбаяСсылка. +// * ТаблицаЗначений - данные, которые нужно обработать, имена колонок соответствуют именам измерений регистра. // Функция ВыбратьСсылкиДляОбработки(Очередь, ПолноеИмяОбъекта, ДополнительныеПараметры = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда @@ -1204,9 +1347,12 @@ ЭтоДокумент = ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) Или ОбщегоНазначения.ЭтоЗадача(МетаданныеОбъекта); + ПроверитьПараметрыВыборки(ДополнительныеПараметры); + ПараметрыПостроения = ПараметрыПостроенияВыборки(ДополнительныеПараметры); + ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 10000 - | ТаблицаИзменений.Ссылка + | &ВыбираемыеПоля |ИЗ | #ТаблицаОбъектаИзменения КАК ТаблицаИзменений | ЛЕВОЕ СОЕДИНЕНИЕ #ВТЗаблокированоСсылка КАК ВТЗаблокированоСсылка @@ -1220,39 +1366,40 @@ | ТаблицаИзменений.Узел = &ТекущаяОчередь | И ВТЗаблокированоСсылка.Ссылка ЕСТЬ NULL | И &УсловиеПоДопИсточникамСсылкам - | И &УсловиеПоДопИсточникамРегистрам"; - Если ЭтоДокумент Тогда + | И &УсловиеПоДопИсточникамРегистрам + | И &УсловиеПоСтраницам"; + Если ЭтоДокумент Или ПараметрыПостроения.ПостраничнаяВыборка Тогда ТекстЗапроса = ТекстЗапроса + " | |УПОРЯДОЧИТЬ ПО - | ТаблицаОбъекта.Дата УБЫВ"; + | &ПорядокВыборки"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |; |УНИЧТОЖИТЬ | #ВТЗаблокированоСсылка"; - + УстановитьПоляУпорядочиванияСсылок(ПараметрыПостроения, ЭтоДокумент); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТЗаблокированоСсылка","ВТЗаблокировано" + ИмяОбъекта); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъектаИзменения", ПолноеИмяОбъекта + ".Изменения"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъекта", ПолноеИмяОбъекта); - - Если Не ДополнительныеПараметры.ВыбиратьПорциями Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 10000","ВЫБРАТЬ"); - КонецЕсли; - + УстановитьРазмерВыборки(ТекстЗапроса, ДополнительныеПараметры); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц(); СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц); ДобавитьПроверкуБлокировкиДополнительныхИсточников(Очередь, ТекстЗапроса, ПолноеИмяОбъекта, Неопределено, МенеджерВременныхТаблиц, Ложь, ДополнительныеПараметры); - ТекущаяОчередь = ОчередьСсылкой(Очередь); Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; - Запрос.УстановитьПараметр("ТекущаяОчередь", ТекущаяОчередь); - ВыборкаПоСсылкам = Запрос.Выполнить().Выбрать(); - - Возврат ВыборкаПоСсылкам; + Запрос.УстановитьПараметр("ТекущаяОчередь", ОчередьСсылкой(Очередь)); + + УстановитьПоляПоСтраницам(Запрос, ПараметрыПостроения); + Если ЭтоДокумент Или ПараметрыПостроения.ПостраничнаяВыборка Тогда + УстановитьПорядокПоСтраницам(Запрос, ПараметрыПостроения); + КонецЕсли; + + Возврат ВыбратьДанныеДляОбработки(Запрос, ПараметрыПостроения); + КонецФункции // Создает временную таблицу ссылок, которые не обработаны в текущей очереди @@ -1423,9 +1570,10 @@ // ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. // // Возвращаемое значение: -// ВыборкаИзРезультатаЗапроса - выборка значений измерений, которые нужно обработать, имена полей соответствует именам -// измерений регистра. Если по измерению не регистрировалась необходимость обработки, -// то в выборке по этому измерению будет пустое значение. +// * ВыборкаИзРезультатаЗапроса - выборка значений измерений, которые нужно обработать, имена полей соответствует именам +// измерений регистра. Если по измерению не регистрировалась необходимость обработки, +// то в выборке по этому измерению будет пустое значение. +// * ТаблицаЗначений - данные, которые нужно обработать, имена колонок соответствуют именам измерений регистра. // Функция ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(Очередь, ПолноеИмяОбъекта, ДополнительныеПараметры = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда @@ -1434,11 +1582,14 @@ ИмяОбъекта = СтрРазделить(ПолноеИмяОбъекта,".",Ложь)[1]; МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта); - + ПараметрыПостроения = ПараметрыПостроенияВыборки(ДополнительныеПараметры, "ТаблицаИзменений"); + ЗаданыПоляУпорядочивания = ЗаданыПоляУпорядочивания(ДополнительныеПараметры); + НеобходимоУпорядочивание = ЗаданыПоляУпорядочивания Или ПараметрыПостроения.ПостраничнаяВыборка; + Запрос = Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 10000 - | &ТекстВыборкиИзмерений + | &ВыбираемыеПоля |ИЗ | #ТаблицаОбъектаИзменения КАК ТаблицаИзменений | ЛЕВОЕ СОЕДИНЕНИЕ #ВТЗаблокированоИзмерения КАК ВТЗаблокированоИзмерения @@ -1447,19 +1598,17 @@ |ГДЕ | ТаблицаИзменений.Узел = &ТекущаяОчередь | И &ТекстУсловияПоОтборуНезаблокированных - | И &УсловиеПоДопИсточникамСсылкам"; + | И &УсловиеПоДопИсточникамСсылкам + | И &УсловиеПоСтраницам"; - Если ДополнительныеПараметры.ПоляУпорядочивания.Количество() > 0 Тогда - ТекстУпорядочивания = ""; - Для Каждого ИмяПоля Из ДополнительныеПараметры.ПоляУпорядочивания Цикл - ТекстУпорядочивания = ТекстУпорядочивания + "ТаблицаИзменений." + ИмяПоля + ", "; - КонецЦикла; + Если НеобходимоУпорядочивание Тогда + УстановитьПоляУпорядочиванияНезависимогоРегистраСведений(ПараметрыПостроения); ТекстЗапроса = ТекстЗапроса + " - |УПОРЯДОЧИТЬ ПО - | " + ТекстУпорядочивания + "ИСТИНА"; + |УПОРЯДОЧИТЬ ПО + | &ПорядокВыборки + |"; КонецЕсли; - ТекстВыборкиИзмерений = ""; ТекстУсловияСоединенияИзмерений = "ИСТИНА"; ТекстУсловияПоОтборуНезаблокированных = "ИСТИНА"; ПервоеИзмерение = Истина; @@ -1469,9 +1618,7 @@ Продолжить; КонецЕсли; - ТекстВыборкиИзмерений = ТекстВыборкиИзмерений + " - | ТаблицаИзменений." + Измерение.Имя + " КАК " + Измерение.Имя + ","; - + УстановитьИзмерение(ПараметрыПостроения, Измерение.Имя); ТекстУсловияСоединенияИзмерений = ТекстУсловияСоединенияИзмерений + " | И (ТаблицаИзменений." + Измерение.Имя + " = ВТЗаблокированоИзмерения." + Измерение.Имя + " | ИЛИ ТаблицаИзменений." + Измерение.Имя + " = &ПустоеЗначениеИзмерения"+ Измерение.Имя + " @@ -1487,24 +1634,17 @@ ПризнакНепериодический = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический; Если МетаданныеОбъекта.ПериодичностьРегистраСведений <> ПризнакНепериодический И МетаданныеОбъекта.ОсновнойОтборПоПериоду Тогда - ТекстВыборкиИзмерений = ТекстВыборкиИзмерений + " - | ТаблицаИзменений.Период КАК Период,"; + УстановитьПериод(ПараметрыПостроения); КонецЕсли; - Если ПустаяСтрока(ТекстВыборкиИзмерений) Тогда - ТекстВыборкиИзмерений = "*"; - Иначе - ТекстВыборкиИзмерений = Лев(ТекстВыборкиИзмерений, СтрДлина(ТекстВыборкиИзмерений) - 1); - КонецЕсли; + УстановитьРесурсы(ПараметрыПостроения, МетаданныеОбъекта.Ресурсы); + УстановитьРеквизиты(ПараметрыПостроения, МетаданныеОбъекта.Реквизиты); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВыборкиИзмерений", ТекстВыборкиИзмерений); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияСоединенияИзмерений", ТекстУсловияСоединенияИзмерений); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияПоОтборуНезаблокированных", ТекстУсловияПоОтборуНезаблокированных); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаОбъектаИзменения", ПолноеИмяОбъекта + ".Изменения"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТЗаблокированоИзмерения","ВТЗаблокировано" + ИмяОбъекта); - Если Не ДополнительныеПараметры.ВыбиратьПорциями Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 10000","ВЫБРАТЬ"); - КонецЕсли; + УстановитьРазмерВыборки(ТекстЗапроса, ДополнительныеПараметры); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц(); @@ -1516,14 +1656,17 @@ МенеджерВременныхТаблиц, ДополнительныеПараметры); - ТекущаяОчередь = ОчередьСсылкой(Очередь); - Запрос.Текст = ТекстЗапроса; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; - Запрос.УстановитьПараметр("ТекущаяОчередь", ТекущаяОчередь); - ВыборкаПоИзмерениям = Запрос.Выполнить().Выбрать(); - - Возврат ВыборкаПоИзмерениям; + Запрос.УстановитьПараметр("ТекущаяОчередь", ОчередьСсылкой(Очередь)); + + УстановитьПоляПоСтраницам(Запрос, ПараметрыПостроения); + Если НеобходимоУпорядочивание Тогда + УстановитьПорядокПоСтраницам(Запрос, ПараметрыПостроения); + КонецЕсли; + + Возврат ВыбратьДанныеДляОбработки(Запрос, ПараметрыПостроения); + КонецФункции // Создает временную таблицу значения измерений независимого регистра сведений для обработки. @@ -2448,6 +2591,39 @@ КонецФункции +// Выборка данных через ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). +// +// Возвращаемое значение: +// Строка - константа "ИзмеренияНезависимогоРегистраСведений". +// +Функция СпособВыборкиИзмеренияНезависимогоРегистраСведений() Экспорт + + Возврат "ИзмеренияНезависимогоРегистраСведений"; + +КонецФункции + +// Выборка данных через ВыбратьРегистраторыРегистраДляОбработки(). +// +// Возвращаемое значение: +// Строка - константа "РегистраторыРегистра". +// +Функция СпособВыборкиРегистраторыРегистра() Экспорт + + Возврат "РегистраторыРегистра"; + +КонецФункции + +// Выборка данных через ВыбратьСсылкиДляОбработки(). +// +// Возвращаемое значение: +// Строка - константа "Ссылки". +// +Функция СпособВыборкиСсылки() Экспорт + + Возврат "Ссылки"; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции. @@ -2633,6 +2809,7 @@ Обработчики.Колонки.Добавить("ЧитаемыеОбъекты", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); Обработчики.Колонки.Добавить("ИзменяемыеОбъекты", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0))); Обработчики.Колонки.Добавить("ПриоритетыВыполнения"); + Обработчики.Колонки.Добавить("Многопоточный", Новый ОписаниеТипов("Булево")); // Устарело. Обратная совместимость с редакцией "2.2". Обработчики.Колонки.Добавить("Опциональный"); @@ -2714,7 +2891,13 @@ // Функция ВыполнитьОбновлениеИнформационнойБазы(ВыполнятьОтложенныеОбработчики = Ложь) Экспорт - Возврат ОбновлениеИнформационнойБазыСлужебныйВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(,, ВыполнятьОтложенныеОбработчики); + ДатаНачала = ТекущаяДатаСеанса(); + Результат = ОбновлениеИнформационнойБазыСлужебныйВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(,, + ВыполнятьОтложенныеОбработчики); + ДатаОкончания = ТекущаяДатаСеанса(); + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьВремяВыполненияОбновления(ДатаНачала, ДатаОкончания); + + Возврат Результат; КонецФункции @@ -2835,7 +3018,7 @@ Сведения = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); ИндексЭлемента = Сведения.НовыеПодсистемы.Найти(ИмяПодсистемы); Если ИндексЭлемента <> Неопределено Тогда - Сведения.НовыеПодсистемы.Удалить(ИмяПодсистемы); + Сведения.НовыеПодсистемы.Удалить(ИндексЭлемента); ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(Сведения); КонецЕсли; @@ -2867,6 +3050,40 @@ КонецФункции +// Максимальное количество записей в выборке данных для обновления. +// +// Возвращаемое значение: +// Число - константа 10000. +// +Функция МаксимальноеКоличествоЗаписейВВыборке() Экспорт + + Возврат 10000; + +КонецФункции + +// Возвращает таблицу с данными, которые нужно обновить. +// Используется в многопоточных обработчиках обновления. +// +// Параметры: +// Параметры - Структура - тот параметр, который передается в обработчик обновления. +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица с обновляемыми данными, состав колонок которой зависит от способа выборки, +// указанного в процедуре регистрации данных для обновления. +// Если данных для обновления нет, то возвращается пустая таблица значений без колонок. +// +Функция ДанныеДляОбновленияВМногопоточномОбработчике(Параметры) Экспорт + + НаборДанных = Параметры.ОбновляемыеДанные.НаборДанных; + + Если НаборДанных.Количество() > 0 Тогда + Возврат НаборДанных[0].Данные; + Иначе + Возврат Новый ТаблицаЗначений; + КонецЕсли; + +КонецФункции + #Область УстаревшиеПроцедурыИФункции // Устарела: больше не требуется, т.к. данные действия выполняются автоматически механизмом обновления. @@ -3302,14 +3519,6 @@ ТекстЗапросаСоединениеСДопИсточниками = ""; УсловиеПоДопИсточникамСсылкам = "ИСТИНА"; - ШаблонТекстаЗапросаУничтоженияВременнойТаблицы = " - |УНИЧТОЖИТЬ - | #ИмяВТ - |"; - - ТекстыЗапроса = Новый Массив; - ТекстыЗапроса.Добавить(ТекстЗапроса); - Для Каждого КлючЗначение Из ДополнительныеПараметры.ДополнительныеИсточникиДанных Цикл ИсточникДанных = КлючЗначение.Ключ; @@ -3340,13 +3549,8 @@ УсловиеПоДопИсточникамСсылкам = УсловиеПоДопИсточникамСсылкам + " | И " + ИмяВременнойТаблицы + ".Ссылка ЕСТЬ NULL "; - ТекстЗапросаУничтоженияВременнойТаблицы = СтрЗаменить(ШаблонТекстаЗапросаУничтоженияВременнойТаблицы, "#ИмяВТ", ИмяВременнойТаблицы); - ТекстыЗапроса.Добавить(ТекстЗапросаУничтоженияВременнойТаблицы); - КонецЦикла; - ТекстЗапроса = СтрСоединить(ТекстыЗапроса, ";"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТекстЗапросаСоединениеСДопИсточниками", ТекстЗапросаСоединениеСДопИсточниками); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоДопИсточникамСсылкам", УсловиеПоДопИсточникамСсылкам); @@ -3426,4 +3630,1070 @@ Возврат ПланыОбмена.ОбновлениеИнформационнойБазы.УзелПоОчереди(Очередь); КонецФункции +// Контекст построения выборки при помощи таких функций, как: +// - ВыбратьРегистраторыРегистраДляОбработки(); +// - ВыбратьСсылкиДляОбработки(); +// - ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(); +// +// Параметры: +// ДополнительныеПараметры - Структура - см. +// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки(). +// ИмяТаблицы - Строка - имя таблицы из которой выбираются данные. +// +// Возвращаемое значение: +// Структура - со следующими полями: +// * ДополнительныеПараметры - Структура - копия ссылки входного параметра для процедур механизма. +// * ПостраничнаяВыборка - Булево - Истина, если выборка выполняется по страницам. +// * ИмяТаблицы - Строка - имя таблицы из которой выбираются данные. +// * ПоляВыборки - Массив - поля, которые подставляются в список выборки запроса. +// * ПоляУпорядочивания - Массив - поля, которые подставляются в раздел упорядочивания запроса. +// * ИспользуемыеПоляУпорядочивания - Соответствие - кеш полей, которые уже использованы для упорядочивания. +// * Псевдонимы - Массив - псевдонимы имен выбираемых полей, подставляемых в запрос выборки. +// * Направления - Массив - направления упорядочивания (УБЫВ, ВОЗР). +// +Функция ПараметрыПостроенияВыборки(ДополнительныеПараметры, ИмяТаблицы = Неопределено) + + ПроверитьПараметрыВыборки(ДополнительныеПараметры); + + ПараметрыПостроения = Новый Структура; + ПараметрыПостроения.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + ПараметрыПостроения.Вставить("ПостраничнаяВыборка", ЭтоПостраничнаяВыборка(ДополнительныеПараметры)); + ПараметрыПостроения.Вставить("ИмяТаблицы", ИмяТаблицы); + ПараметрыПостроения.Вставить("ПоляВыборки", Новый Массив); + ПараметрыПостроения.Вставить("ПоляУпорядочивания", Новый Массив); + ПараметрыПостроения.Вставить("ИспользуемыеПоляУпорядочивания", Новый Соответствие); + ПараметрыПостроения.Вставить("Псевдонимы", Новый Массив); + ПараметрыПостроения.Вставить("Направления", Новый Массив); + + Возврат ПараметрыПостроения; + +КонецФункции + +// Установить поля упорядочивания в ВыбратьСсылкиДляОбработки(). +// +// Параметры: +// ПараметрыПостроения - Структура - см. ПараметрыПостроенияВыборки(). +// ЭтоДокумент - Булево - Истина, если обрабатываются ссылки документа. +// +Процедура УстановитьПоляУпорядочиванияСсылок(ПараметрыПостроения, ЭтоДокумент) + + ПоляВыборки = ПараметрыПостроения.ПоляВыборки; + ПоляУпорядочивания = ПараметрыПостроения.ПоляУпорядочивания; + ПостраничнаяВыборка = ПараметрыПостроения.ПостраничнаяВыборка; + + Если ЭтоДокумент Тогда + Если ПостраничнаяВыборка Тогда + ПоляВыборки.Добавить("ТаблицаОбъекта.Дата"); + КонецЕсли; + + ПоляУпорядочивания.Добавить("ТаблицаОбъекта.Дата"); + КонецЕсли; + + ПоляВыборки.Добавить("ТаблицаИзменений.Ссылка"); + + Если ПостраничнаяВыборка Тогда + ПоляУпорядочивания.Добавить("ТаблицаИзменений.Ссылка"); + КонецЕсли; + +КонецПроцедуры + +// Установить поля упорядочивания для регистра в ВыбратьРегистраторыРегистраДляОбработки(). +// +// Параметры: +// ПараметрыПостроения - Структура - см. ПараметрыПостроенияВыборки(). +// +Процедура УстановитьПоляУпорядочиванияРегистра(ПараметрыПостроения) + + ПоляВыборки = ПараметрыПостроения.ПоляВыборки; + Псевдонимы = ПараметрыПостроения.Псевдонимы; + ПоляУпорядочивания = ПараметрыПостроения.ПоляУпорядочивания; + + ПоляВыборки.Добавить("ТаблицаРегистраИзменения.Регистратор"); + Псевдонимы.Добавить("Регистратор"); + + Если ПараметрыПостроения.ПостраничнаяВыборка Тогда + ПоляУпорядочивания.Добавить("ТаблицаРегистраИзменения.Регистратор"); + Иначе + ПоляВыборки.Добавить("МАКСИМУМ(ЕСТЬNULL(ТаблицаРегистра.Период, ДАТАВРЕМЯ(3000, 1, 1)))"); + Псевдонимы.Добавить("Период"); + ПоляУпорядочивания.Добавить("МАКСИМУМ(ЕСТЬNULL(ТаблицаРегистра.Период, ДАТАВРЕМЯ(3000, 1, 1)))"); + КонецЕсли; + +КонецПроцедуры + +// Установить поля упорядочивания для документа в ВыбратьРегистраторыРегистраДляОбработки(). +// +// Параметры: +// ПараметрыПостроения - Структура - см. ПараметрыПостроенияВыборки(). +// +Процедура УстановитьПоляУпорядочиванияРегистраПоДокументу(ПараметрыПостроения) + + ПоляВыборки = ПараметрыПостроения.ПоляВыборки; + Псевдонимы = ПараметрыПостроения.Псевдонимы; + ПоляУпорядочивания = ПараметрыПостроения.ПоляУпорядочивания; + ПоляУпорядочивания.Добавить("ТаблицаДокумента.Дата"); + + Если ПараметрыПостроения.ПостраничнаяВыборка Тогда + ПоляВыборки.Добавить("ТаблицаДокумента.Дата"); + Псевдонимы.Добавить("Дата"); + ПоляУпорядочивания.Добавить("ТаблицаРегистраИзменения.Регистратор"); + КонецЕсли; + + ПоляВыборки.Добавить("ТаблицаРегистраИзменения.Регистратор"); + Псевдонимы.Добавить("Регистратор"); + +КонецПроцедуры + +// Установить поля упорядочивания для документа в ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). +// +// Параметры: +// ПараметрыПостроения - Структура - см. ПараметрыПостроенияВыборки(). +// +Процедура УстановитьПоляУпорядочиванияНезависимогоРегистраСведений(ПараметрыПостроения) + + Разделители = " " + Символы.Таб + Символы.ПС; + ПоляУпорядочивания = ПараметрыПостроения.ДополнительныеПараметры.ПоляУпорядочивания; + + Для ИндексПоля = 0 По ПоляУпорядочивания.ВГраница() Цикл + Поле = ПоляУпорядочивания[ИндексПоля]; + Состав = СтрРазделить(Поле, Разделители, Ложь); + ИмяПоля = Состав[0]; + ПараметрыПостроения.ПоляВыборки.Добавить(ИмяПоля); + ПараметрыПостроения.ИспользуемыеПоляУпорядочивания[ИмяПоля] = Истина; + + Если Состав.Количество() > 1 Тогда + ПараметрыПостроения.Направления.Добавить(Состав[1]); + Иначе + ПараметрыПостроения.Направления.Добавить(?(ИндексПоля = 0, "УБЫВ", "")); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Учесть измерение в параметрах формирования запроса в ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). +// +// Параметры: +// ПараметрыПостроения - Структура - см. ПараметрыПостроенияВыборки(). +// ИмяИзмерения - Строка - имя обрабатываемого измерения. +// +Процедура УстановитьИзмерение(ПараметрыПостроения, ИмяИзмерения) + + Если ПараметрыПостроения.ИспользуемыеПоляУпорядочивания[ИмяИзмерения] = Неопределено Тогда + ПараметрыПостроения.ПоляВыборки.Добавить(ИмяИзмерения); + ЗаданыПоляУпорядочивания = ЗаданыПоляУпорядочивания(ПараметрыПостроения.ДополнительныеПараметры); + + Если ЗаданыПоляУпорядочивания Или ПараметрыПостроения.ПостраничнаяВыборка Тогда + ПараметрыПостроения.Направления.Добавить(""); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Учесть период в параметрах формирования запроса в ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). +// +// Параметры: +// ПараметрыПостроения - Структура - см. ПараметрыПостроенияВыборки(). +// +Процедура УстановитьПериод(ПараметрыПостроения) + + ПараметрыПостроения.ПоляВыборки.Вставить(0, "Период"); + ПараметрыПостроения.Направления.Вставить(0, ""); + +КонецПроцедуры + +// Учесть ресурсы в параметрах формирования запроса в ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). +// +// Параметры: +// ПараметрыПостроения - Структура - см. ПараметрыПостроенияВыборки(). +// +Процедура УстановитьРесурсы(ПараметрыПостроения, Ресурсы) + + Если ПараметрыПостроения.ПоляВыборки.Количество() = 0 Тогда + Для Каждого Ресурс Из Ресурсы Цикл + Если ПараметрыПостроения.ИспользуемыеПоляУпорядочивания[Ресурс.Имя] = Неопределено Тогда + ПараметрыПостроения.ПоляВыборки.Добавить(Ресурс.Имя); + ПараметрыПостроения.Направления.Добавить(""); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Учесть реквизиты в параметрах формирования запроса в ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(). +// +// Параметры: +// ПараметрыПостроения - Структура - см. ПараметрыПостроенияВыборки(). +// +Процедура УстановитьРеквизиты(ПараметрыПостроения, Реквизиты) + + Если ПараметрыПостроения.ПоляВыборки.Количество() = 0 Тогда + Для Каждого Реквизит Из Реквизиты Цикл + Если ПараметрыПостроения.ИспользуемыеПоляУпорядочивания[Реквизит.Имя] = Неопределено Тогда + ПараметрыПостроения.ПоляВыборки.Добавить(Реквизит.Имя); + ПараметрыПостроения.Направления.Добавить(""); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Выбрать данные в следующих функциях с учетом постраничной выборки: +// - ВыбратьРегистраторыРегистраДляОбработки(); +// - ВыбратьСсылкиДляОбработки(); +// - ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(); +// +// Параметры: +// Запрос - Запрос - запрос выборки данных. +// ПараметрыПостроения - Структура - см. ПараметрыПостроенияВыборки(). +// +// Возвращаемое значение: +// * ВыборкаИзРезультатаЗапроса - в случае обычной выборки. +// * ТаблицаЗначений - в случае постраничной выборки. +// +Функция ВыбратьДанныеДляОбработки(Запрос, ПараметрыПостроения) + + Если ПараметрыПостроения.ПостраничнаяВыборка Тогда + Возврат ВыбратьДанныеПостранично(Запрос, ПараметрыПостроения); + Иначе + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеПоСтраницам", "ИСТИНА"); + Возврат Запрос.Выполнить().Выбрать(); + КонецЕсли; + +КонецФункции + +// Получить таблицу значений с данными для обработки с учетом постраничной выборки. +// +// Параметры: +// Запрос - Запрос - запрос выборки данных. +// ПараметрыПостроения - Структура - см. ПараметрыПостроенияВыборки(). +// +// Возвращаемое значение: +// ТаблицаЗначений - данные для обработчика обновления (многопоточного). +// +Функция ВыбратьДанныеПостранично(Запрос, ПараметрыПостроения) + + ПоляВыборки = ПараметрыПостроения.ПоляВыборки; + Параметры = ПараметрыПостроения.ДополнительныеПараметры; + ТаблицаИзменений = ПараметрыПостроения.ИмяТаблицы; + Направления = ПараметрыПостроения.Направления; + ПоследняяВыбраннаяЗапись = Параметры.ПоследняяВыбраннаяЗапись; + ПерваяЗапись = Параметры.ПерваяЗапись; + ПоследняяЗапись = Параметры.ПоследняяЗапись; + ВыбратьПервые = ПоследняяВыбраннаяЗапись = Неопределено + И ПерваяЗапись = Неопределено + И ПоследняяЗапись = Неопределено; + + Если ВыбратьПервые Тогда + ИзменитьМаксимумВыборки(Запрос.Текст, МаксимальноеКоличествоЗаписейВВыборке(), Параметры.МаксимумВыборки); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеПоСтраницам", "ИСТИНА"); + Результат = Запрос.Выполнить().Выгрузить(); + Иначе + ВыбратьДиапазон = ПерваяЗапись <> Неопределено И ПоследняяЗапись <> Неопределено; + БазовыйТекстЗапроса = Запрос.Текст; + + Если ВыбратьДиапазон Тогда + Условия = УсловияДляДиапазонаСтраницы(ПоляВыборки, Параметры, Направления); + Иначе + Условия = УсловияДляСледующейСтраницы(ПоляВыборки, Параметры, Направления); + КонецЕсли; + + Если Параметры.ОптимизироватьВыборкуПоСтраницам Тогда + Результат = Неопределено; + ИндексПоследнегоУсловия = Условия.Количество() - 1; + ОтложитьУничтожениеВременныхТаблиц = Условия.Количество() > 1; + + Если ОтложитьУничтожениеВременныхТаблиц Тогда + ТекстЗапросаУничтоженияВременныхТаблиц = ВырезатьУничтожениеВременныхТаблиц(БазовыйТекстЗапроса); + КонецЕсли; + + Для Индекс = 0 По ИндексПоследнегоУсловия Цикл + Если Результат = Неопределено Тогда + Количество = Параметры.МаксимумВыборки; + Иначе + Количество = Параметры.МаксимумВыборки - Результат.Количество(); + КонецЕсли; + + Запрос.Текст = Строка(БазовыйТекстЗапроса); + ИзменитьМаксимумВыборки(Запрос.Текст, МаксимальноеКоличествоЗаписейВВыборке(), Количество); + УстановитьУсловияВыборкиПоСтраницам(Запрос, Условия, ТаблицаИзменений, Параметры, Истина, Индекс); + + Если ОтложитьУничтожениеВременныхТаблиц И Индекс = ИндексПоследнегоУсловия Тогда + Запрос.Текст = Запрос.Текст + ТекстЗапросаУничтоженияВременныхТаблиц; + КонецЕсли; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + + Если Результат = Неопределено Тогда + Результат = Выгрузка; + Иначе + Для каждого СтрокаВыгрузки Из Выгрузка Цикл + СтрокаРезультата = Результат.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаРезультата, СтрокаВыгрузки); + КонецЦикла; + КонецЕсли; + + Если Результат.Количество() = Параметры.МаксимумВыборки Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Иначе + ИзменитьМаксимумВыборки(Запрос.Текст, МаксимальноеКоличествоЗаписейВВыборке(), Параметры.МаксимумВыборки); + УстановитьУсловияВыборкиПоСтраницам(Запрос, Условия, ТаблицаИзменений, Параметры, Истина); + Результат = Запрос.Выполнить().Выгрузить(); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Удалить из пакета запросов запросы удаления временных таблиц и вернуть их, как результат этой функции. +// +// Параметры: +// ТекстЗапроса - Строка - изменяемый текст запроса. +// +// Возвращаемое значение: +// Строка - фрагмент текста запроса с удалением временных таблиц. +// +Функция ВырезатьУничтожениеВременныхТаблиц(ТекстЗапроса) + + ЗапросыУничтожения = Новый Массив; + ПозицияУничтожить = СтрНайти(ТекстЗапроса, "УНИЧТОЖИТЬ"); + + Пока ПозицияУничтожить > 0 Цикл + ПозицияРазделителя = СтрНайти(ТекстЗапроса, ";",, ПозицияУничтожить); + + Если ПозицияРазделителя > 0 Тогда + ЗапросУничтожения = Сред(ТекстЗапроса, ПозицияУничтожить, ПозицияРазделителя - ПозицияУничтожить + 1); + Иначе + ЗапросУничтожения = Сред(ТекстЗапроса, ПозицияУничтожить); + КонецЕсли; + + Если ЗапросыУничтожения.Количество() = 0 Тогда + ЗапросыУничтожения.Добавить(Символы.ПС); + КонецЕсли; + + ЗапросыУничтожения.Добавить(ЗапросУничтожения); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ЗапросУничтожения, ""); + ПозицияУничтожить = СтрНайти(ТекстЗапроса, "УНИЧТОЖИТЬ"); + КонецЦикла; + + Возврат СтрСоединить(ЗапросыУничтожения, Символы.ПС); + +КонецФункции + +// Добавить в запрос условия, ограничивающие выборку по страницам. +// +// Постраничная выборка работает в двух режимах: +// - выборка сверху - записи большие указанной (аналогично динамическому списку); +// - выборка диапазона - записи между двумя указанными записями включительно. +// +// Параметры: +// Запрос - Запрос - запрос выборки данных. +// Условия - см. УсловияДляДиапазонаСтраницы(). +// Таблица - Строка - имя таблицы из которой выполняется выборка. +// Параметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// Первые - Булево - Истина, если это первые условия в запросе. +// НомерУсловия - Число - номер обрабатываемого условия. +// +Процедура УстановитьУсловияВыборкиПоСтраницам(Запрос, Условия, Таблица, Параметры, Первые, НомерУсловия = Неопределено) + + ПерваяЗапись = Параметры.ПерваяЗапись; + ПоследняяЗапись = Параметры.ПоследняяЗапись; + ВыбратьДиапазон = ПерваяЗапись <> Неопределено + И ПоследняяЗапись <> Неопределено; + + Если Не ВыбратьДиапазон Тогда + ПерваяЗапись = Параметры.ПоследняяВыбраннаяЗапись; + КонецЕсли; + + Колонки = Условия.Колонки; + КоличествоКолонок = Колонки.Количество(); + УсловияИ = Новый Массив; + УсловияИли = Новый Массив; + ЕстьУсловияИли = (НомерУсловия = Неопределено); + ЕстьТаблица = Не ПустаяСтрока(Таблица); + ШаблонУсловияИ = ?(ЕстьТаблица, Таблица + ".%1 %2 &%3", "%1 %2 &%3"); + ШаблонУсловияИли = "(%1)"; + РазделительУсловийИ = + " + | И "; + РазделительУсловийИли = + " + | ) ИЛИ ( + | "; + + Если ЕстьУсловияИли Тогда + ИндексНачала = 0; + ИндексОкончания = Условия.Количество() - 1; + Иначе + ИндексНачала = НомерУсловия; + ИндексОкончания = НомерУсловия; + КонецЕсли; + + Для ИндексСтроки = ИндексНачала По ИндексОкончания Цикл + УсловияИ.Очистить(); + + Для ИндексКолонки = 0 По КоличествоКолонок - 1 Цикл + Оператор = Условия[ИндексСтроки][ИндексКолонки]; + ИндексПоля = ?(ВыбратьДиапазон, Цел(ИндексКолонки / 2), ИндексКолонки) + 2; + + Если Не ПустаяСтрока(Оператор) Тогда + Колонка = Колонки[ИндексКолонки]; + ИмяПоляПолное = Колонка.Заголовок; + ИмяПараметра = Колонка.Имя + "Значение"; + ИмяПоля = ИмяКолонкиДляЗапроса(ИмяПоляПолное); + Условие = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловияИ, ИмяПоля, Оператор, ИмяПараметра); + УсловияИ.Добавить(Условие); + + Если ЭтоИмяКолонкиКонцаДиапазона(ИмяПоляПолное) Тогда + ЗначениеПараметра = ПоследняяЗапись[ИндексПоля].Значение; + Иначе + ЗначениеПараметра = ПерваяЗапись[ИндексПоля].Значение; + КонецЕсли; + + Запрос.УстановитьПараметр(ИмяПараметра, ЗначениеПараметра); + КонецЕсли; + КонецЦикла; + + ТекстУсловий = СтрСоединить(УсловияИ, РазделительУсловийИ); + + Если ЕстьУсловияИли Тогда + УсловияИли.Добавить(ТекстУсловий); + КонецЕсли; + КонецЦикла; + + Если ЕстьУсловияИли Тогда + ТекстУсловийИли = СтрСоединить(УсловияИли, РазделительУсловийИли); + ТекстУсловий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУсловияИли, ТекстУсловийИли); + КонецЕсли; + + Если Не Первые Тогда + ТекстУсловий = " И " + ТекстУсловий; + КонецЕсли; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеПоСтраницам", ТекстУсловий); + +КонецПроцедуры + +// Получить условия для выборки записей большие указанной (аналогично динамическому списку). +// +// Параметры: +// ПоляВыборки - Массив - выбираемые запросом поля. +// Параметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// Направления - Массив - направления упорядочивания (ВОЗР, УБЫВ) в количестве равном количеству ПоляВыборки. +// - Неопределено - порядок не указывается (всегда ВОЗР). +// +// Возвращаемое значение: +// ТаблицаЗначений - см. НовыеУсловияПостраничнойВыборки(). +// +Функция УсловияДляСледующейСтраницы(ПоляВыборки, Параметры, Направления) + + ВсеУсловия = НовыеУсловияПостраничнойВыборки(ПоляВыборки); + КоличествоПолей = ПоляВыборки.Количество(); + + Пока КоличествоПолей > 0 Цикл + НовыеУсловия = ВсеУсловия.Добавить(); + + Для НомерУсловия = 1 По КоличествоПолей Цикл + ИмяКолонкиПоля = ПоляВыборки[НомерУсловия - 1]; + + Если НомерУсловия < КоличествоПолей Тогда + Оператор = "="; + Иначе + Оператор = ОператорБольше(Направления[НомерУсловия - 1]); + КонецЕсли; + + НовыеУсловия[ИмяКолонкиИзПоляВыборки(ИмяКолонкиПоля)] = Оператор; + КонецЦикла; + + КоличествоПолей = КоличествоПолей - 1; + КонецЦикла; + + Возврат ВсеУсловия; + +КонецФункции + +// Получить условия для выборки записей между двумя указанными записями включительно. +// +// Параметры: +// ПоляВыборки - Массив - выбираемые запросом поля. +// Параметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// Направления - Массив - направления упорядочивания (ВОЗР, УБЫВ) в количестве равном количеству ПоляВыборки. +// - Неопределено - порядок не указывается (всегда ВОЗР). +// +// Возвращаемое значение: +// ТаблицаЗначений - см. НовыеУсловияПостраничнойВыборки(). +// +Функция УсловияДляДиапазонаСтраницы(ПоляВыборки, Параметры, Направления) + + ВсеУсловия = НовыеУсловияПостраничнойВыборки(ПоляВыборки, Истина); + ПерваяЗапись = Параметры.ПерваяЗапись; + ПоследняяЗапись = Параметры.ПоследняяЗапись; + КоличествоПолей = ПоляВыборки.Количество(); + ВсегоПолей = ПоляВыборки.Количество(); + ПозицияВставки = 0; + + Пока КоличествоПолей > 0 Цикл + ТекущиеПоляРавны = ЗаписиРавны(ПерваяЗапись, ПоследняяЗапись, КоличествоПолей); + + Если ТекущиеПоляРавны И КоличествоПолей <> ВсегоПолей Тогда + Прервать; + КонецЕсли; + + ПервыеУсловия = ВсеУсловия.Вставить(ПозицияВставки); + ПозицияВставки = ПозицияВставки + 1; + ПредыдущиеПоляРавны = ЗаписиРавны(ПерваяЗапись, ПоследняяЗапись, КоличествоПолей - 1); + + Если Не ПредыдущиеПоляРавны Тогда + ПоследниеУсловия = ВсеУсловия.Вставить(ПозицияВставки); + КонецЕсли; + + Для НомерУсловия = 1 По КоличествоПолей Цикл + ИмяКолонкиПоля = ИмяКолонкиИзПоляВыборки(ПоляВыборки[НомерУсловия - 1]); + ИмяКолонкиПоляПоДиапазону = ИмяКолонкиДиапазона(ИмяКолонкиПоля); + + Если НомерУсловия < КоличествоПолей Или ТекущиеПоляРавны И КоличествоПолей = ВсегоПолей Тогда + ОператорПервый = "="; + ОператорПоследний = "="; + Иначе + Направление = Направления[НомерУсловия - 1]; + + Если КоличествоПолей = ВсегоПолей Тогда + ОператорПервый = ОператорБольшеИлиРавно(Направление); + ОператорПоследний = ОператорМеньшеИлиРавно(Направление); + Иначе + ОператорПервый = ОператорБольше(Направление); + ОператорПоследний = ОператорМеньше(Направление); + КонецЕсли; + + // Ограничение по диапазону + Если ПредыдущиеПоляРавны Тогда + ПервыеУсловия[ИмяКолонкиПоляПоДиапазону] = ОператорПоследний; + КонецЕсли; + КонецЕсли; + + // Выборка по первой записи + ПервыеУсловия[ИмяКолонкиПоля] = ОператорПервый; + + // Выборка по последней записи + Если Не ПредыдущиеПоляРавны Тогда + ПоследниеУсловия[ИмяКолонкиПоляПоДиапазону] = ОператорПоследний; + КонецЕсли; + КонецЦикла; + + КоличествоПолей = КоличествоПолей - 1; + КонецЦикла; + + Возврат ВсеУсловия; + +КонецФункции + +// Возвращает результат сравнения двух записей. +// +// Параметры: +// ПерваяЗапись - см. ОбновлениеИнформационнойБазыСлужебный.НовыйКлючЗаписи(). +// ПоследняяЗапись - см. ОбновлениеИнформационнойБазыСлужебный.НовыйКлючЗаписи(). +// КоличествоПолей - Число - количество прикладных полей в ключе записи. +// +// Возвращаемое значение: +// Булево - Истина, если записи равны. +// +Функция ЗаписиРавны(ПерваяЗапись, ПоследняяЗапись, КоличествоПолей) + + Для Индекс = 2 По КоличествоПолей + 2 - 1 Цикл + Если ПерваяЗапись[Индекс].Значение <> ПоследняяЗапись[Индекс].Значение Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Возвращает таблицу значений с условиями постраничной выборки. +// +// Параметры: +// ПоляВыборки - Массив - выбираемые запросом поля. +// ДляДиапазона - Булево - Истина, если таблица будет использоваться для ограничения по диапазону. +// В этом случае, добавляются дополнительные колонки для нижнего условия диапазона. +// +// Возвращаемое значение: +// ТаблицаЗначений - колонки таблицы описывают поля запроса, где в заголовке хранится полное имя поля. +// Имена колонок формируются динамические из имен полей выборки запроса. +// Каждая строка описывает условия для одного запроса выбирающего порции данных для страницы +// или группы условий при выборке через ИЛИ. В ячейках таблицы хранятся условия +// ("=", ">", "<", ">=", "<=").. +// +Функция НовыеУсловияПостраничнойВыборки(ПоляВыборки, ДляДиапазона = Ложь) + + Условия = Новый ТаблицаЗначений; + Колонки = Условия.Колонки; + + Для каждого ПолеВыборки Из ПоляВыборки Цикл + Имя = ИмяКолонкиИзПоляВыборки(ПолеВыборки); + Колонки.Добавить(Имя,, ПолеВыборки); + + Если ДляДиапазона Тогда + Колонки.Добавить(ИмяКолонкиДиапазона(Имя),, ПолеВыборки); + КонецЕсли; + КонецЦикла; + + Возврат Условия; + +КонецФункции + +// Возвращает имя колонки для условия по нижней границе диапазона постраничной выборки. +// +// Параметры: +// ИмяПоля - Строка - имя поля. +// +// Возвращаемое значение: +// Строка - имя поля для условия по нижней границе диапазона. +// +Функция ИмяКолонкиДиапазона(ИмяПоля) + + Возврат ИмяПоля + "_"; + +КонецФункции + +// Возвращает имя, например, для колонки таблицы значений, полученное из полного имени поля запроса. +// +// Параметры: +// Имя - Строка - полное имя поля запроса (возможно, разделенное точкой). +// +// Возвращаемое значение: +// Строка - имя поля. +// +Функция ИмяКолонкиИзПоляВыборки(Имя) + + ЗаменяемыеСимволы = ".,() "; + ИмяКолонки = Строка(Имя); + + Для Индекс = 1 По СтрДлина(ЗаменяемыеСимволы) Цикл + Символ = Сред(ЗаменяемыеСимволы, Индекс, 1); + ИмяКолонки = СтрЗаменить(ИмяКолонки, Символ, "_"); + КонецЦикла; + + Возврат ИмяКолонки; + +КонецФункции + +// Имя поля, полученное из колонки таблицы условий постраничной выборки (см. НовыеУсловияПостраничнойВыборки()). +// +// Параметры: +// ИмяПоля - Строка - имя поля. +// +// Возвращаемое значение: +// Строка - имя поля без служебных символов. +// +Функция ИмяКолонкиДляЗапроса(ИмяПоля) + + Если ЭтоИмяКолонкиКонцаДиапазона(ИмяПоля) Тогда + Возврат Лев(ИмяПоля, СтрДлина(ИмяПоля) - 1); + Иначе + Возврат ИмяПоля; + КонецЕсли; + +КонецФункции + +// Определяет, описывает ли колонка конец диапазона постраничной выборки. +// +// Параметры: +// ИмяПоля - Строка - имя поля. +// +// Возвращаемое значение: +// Булево - Истина, если это поле описывает конец диапазона постраничной выборки. +// +Функция ЭтоИмяКолонкиКонцаДиапазона(ИмяПоля) + + Возврат Прав(ИмяПоля, 1) = "_"; + +КонецФункции + +// Проверка корректности заполнения параметров выборки данных. +// +// Параметры - Структура - см. +// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// +// Возвращаемое значение: +// Булево - Истина, если выборка многопоточная. +// +Процедура ПроверитьПараметрыВыборки(Параметры) + + Если Не Параметры.ВыбиратьПорциями И ЭтоПостраничнаяВыборка(Параметры) Тогда + ВызватьИсключение НСтр("ru = 'Многопоточный обработчик обновления обязан выбирать данные порциями.'"); + КонецЕсли; + +КонецПроцедуры + +// Проверка, что имя начинается на букву или подчеркивание и кроме них может содержать только цифры. +// +// Параметры: +// Имя - Строка - проверяемое имя. +// +// Возвращаемое значение: +// Булево - Истина, если это правильный идентификатор. +// +Функция ИмяСоответствуетТребованиямИменованияСвойств(Имя) + + Цифры = "1234567890"; + Если Имя = "" Или СтрНайти(Цифры, Лев(Имя, 1)) > 0 Тогда + Возврат Ложь; + КонецЕсли; + + НедопустимыеСимволы = """/\[]:;|=-?*<>,.()+№@!%^&~" + " "; + НовоеИмя = СтрСоединить(СтрРазделить(Имя, НедопустимыеСимволы, Истина)); + Возврат (НовоеИмя = Имя); + +КонецФункции + +// Формирует фрагмент текста запроса с выбираемыми полями. +// +// Параметры: +// ИменаПолей - Массив - имена полей в виде массива. +// Псевдонимы - Массив - псевдонимы в виде массива с тем же количеством элементов, что и в ИменаПолей. +// - Неопределено - в этом случае, псевдонимы равны именам полей. +// ИмяТаблицы - Строка - имя таблицы в которой расположены поля. +// если указана пустая строка, то имя таблицы не подставляется. +// Дополнительные - Булево - Истина, если это не первые поля в выборке и перед ними нужна ",". +// +// Возвращаемое значение: +// Строка - фрагмент текста запроса с выбираемыми полями. +// +Функция ПоляДляЗапроса(ИменаПолей, Псевдонимы = Неопределено, ИмяТаблицы = "", Дополнительные = Ложь) + + КоличествоПолей = ИменаПолей.Количество(); + + Если КоличествоПолей = 0 Тогда + Возврат ""; + КонецЕсли; + + ЕстьПсевдонимы = Псевдонимы <> Неопределено И Псевдонимы.Количество() = КоличествоПолей; + ПолноеИмяТаблицы = ?(ПустаяСтрока(ИмяТаблицы), "", ИмяТаблицы + "."); + ИспользуемыеПсевдонимы = Новый Соответствие; + Поля = Новый Массив; + + Для Индекс = 0 По КоличествоПолей - 1 Цикл + ИмяПоля = ИменаПолей[Индекс]; + + Если ЕстьПсевдонимы Тогда + Псевдоним = Псевдонимы[Индекс]; + Иначе + Состав = СтрРазделить(ИмяПоля, "."); + Псевдоним = Состав[Состав.Количество() - 1]; + ИспользуемыйПсевдоним = ИспользуемыеПсевдонимы[Псевдоним]; + + Если ИспользуемыйПсевдоним = Неопределено Тогда + ИспользуемыеПсевдонимы[Псевдоним] = 1; + Иначе + ИспользуемыеПсевдонимы[Псевдоним] = ИспользуемыеПсевдонимы[Псевдоним] + 1; + Псевдоним = Псевдоним + Формат(ИспользуемыеПсевдонимы[Псевдоним], "ЧГ=0"); + КонецЕсли; + КонецЕсли; + + Если ИмяСоответствуетТребованиямИменованияСвойств(Псевдоним) Тогда + Псевдоним = " КАК " + Псевдоним; + Иначе + Псевдоним = ""; + КонецЕсли; + + Имя = ПолноеИмяТаблицы + ИмяПоля + Псевдоним; + Поля.Добавить(Имя); + КонецЦикла; + + Разделитель = ", + | "; + + Возврат ?(Дополнительные, Разделитель, "") + СтрСоединить(Поля, Разделитель); + +КонецФункции + +// Формирует фрагмент текста запроса с указанным порядком. +// +// Параметры: +// ИменаПолей - Массив - имена полей в виде массива. +// Направления - Массив - направления упорядочивания (ВОЗР, УБЫВ) в количестве равном количеству ИменаПолей. +// - Неопределено - порядок не указывается (всегда ВОЗР). +// ИмяТаблицы - Строка - имя таблицы в которой расположены поля. +// если указана пустая строка, то имя таблицы не подставляется. +// Дополнительные - Булево - Истина, если это не первые поля в выборке и перед ними нужна ",". +// +// Возвращаемое значение: +// Строка - фрагмент текста запроса для упорядочивания. +// +Функция УпорядочиванияДляЗапроса(ИменаПолей, Направления = Неопределено, ИмяТаблицы = "", Дополнительные = Ложь) + + КоличествоПолей = ИменаПолей.Количество(); + + Если КоличествоПолей = 0 Тогда + Возврат ""; + КонецЕсли; + + ПолноеИмяТаблицы = ?(ПустаяСтрока(ИмяТаблицы), "", ИмяТаблицы + "."); + ЕстьНаправления = Направления <> Неопределено И Направления.Количество() = КоличествоПолей; + Упорядочивание = Новый Массив; + + Для Индекс = 0 По КоличествоПолей - 1 Цикл + ИмяПоля = ИменаПолей[Индекс]; + + Если ЕстьНаправления Тогда + ТекущееНаправление = Направления[Индекс]; + Направление = ?(ПустаяСтрока(ТекущееНаправление), "", " " + ТекущееНаправление); + Иначе + Направление = ""; + КонецЕсли; + + Порядок = ПолноеИмяТаблицы + ИмяПоля + Направление; + Упорядочивание.Добавить(Порядок); + КонецЦикла; + + Разделитель = ", + | "; + + Возврат ?(Дополнительные, Разделитель, "") + СтрСоединить(Упорядочивание, Разделитель); + +КонецФункции + +// Установить размер выборки запроса, получающего данные для обновления. +// +// Параметры: +// ТекстЗапроса - Строка - текст модифицируемого запроса. +// Параметры - Структура - см. +// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// +Процедура УстановитьРазмерВыборки(ТекстЗапроса, Параметры) + + РазмерВыборки = ?(Параметры.ВыбиратьПорциями, Параметры.МаксимумВыборки, Неопределено); + ИзменитьМаксимумВыборки(ТекстЗапроса, 10000, РазмерВыборки); + +КонецПроцедуры + +// Установить размер выборки запроса (ПЕРВЫЕ N). +// +// Параметры: +// ТекстЗапроса - Строка - текст изменяемого запроса. +// ТекущееКоличество - Число - количество, установленное в текущем тексте запроса. +// НовоеКоличество - Число - новое значение для "ПЕРВЫЕ N". +// - Неопределено - выбрать все (без ПЕРВЫЕ N). +// +Процедура ИзменитьМаксимумВыборки(ТекстЗапроса, ТекущееКоличество, НовоеКоличество) + + ТекстПоиска = "ПЕРВЫЕ " + Формат(ТекущееКоличество, "ЧН=0; ЧГ=0"); + + Если НовоеКоличество = Неопределено Тогда + ТекстЗамены = ""; + Иначе + ТекстЗамены = "ПЕРВЫЕ " + Формат(НовоеКоличество, "ЧН=0; ЧГ=0"); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ТекстПоиска, ТекстЗамены); + +КонецПроцедуры + +// Установить поля выборки с учетом многопоточных обработчиков обновления. +// +// Параметры: +// Запрос - Запрос - модифицируемый запрос. +// ИменаПолей - Массив - имена полей для выборки. +// Псевдонимы - Массив - псевдонимы выбираемых полей. +// ИмяТаблицы - Строка - имя таблицы в которой расположены поля. +// если указана пустая строка, то имя таблицы не подставляется. +// +Процедура УстановитьПоляПоСтраницам(Запрос, ПараметрыПостроения) + + ВыбираемыеПоля = ПоляДляЗапроса(ПараметрыПостроения.ПоляВыборки, + ПараметрыПостроения.Псевдонимы, + ПараметрыПостроения.ИмяТаблицы); + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВыбираемыеПоля", ВыбираемыеПоля); + +КонецПроцедуры + +// Установить порядок выборки с учетом многопоточных обработчиков обновления. +// +// Параметры: +// Запрос - Запрос - модифицируемый запрос. +// ИменаПолей - Массив - имена полей для выборки. +// Параметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// ИмяТаблицы - Строка - имя таблицы в которой расположены поля. +// если указана пустая строка, то имя таблицы не подставляется. +// Направления - Массив - направления упорядочивания (ВОЗР, УБЫВ) в количестве равном количеству ИменаПолей. +// - Неопределено - порядок не указывается (всегда ВОЗР). +// +Процедура УстановитьПорядокПоСтраницам(Запрос, ПараметрыПостроения) + + ПоляВыборки = ПараметрыПостроения.ПоляВыборки; + ИмяТаблицы = ПараметрыПостроения.ИмяТаблицы; + Направления = ПараметрыПостроения.Направления; + + Если Направления.Количество() = 0 Тогда + Направления.Добавить("УБЫВ"); + + Если ПараметрыПостроения.ПостраничнаяВыборка Тогда + Для Индекс = 1 По ПоляВыборки.Количество() - 1 Цикл + Направления.Добавить(""); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + ПорядокВыборки = УпорядочиванияДляЗапроса(ПоляВыборки, Направления, ИмяТаблицы); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПорядокВыборки", ПорядокВыборки); + +КонецПроцедуры + +// Позволяет определить постраничная ли это выборка. +// +// Параметры: +// Параметры - Структура - см. +// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// +// Возвращаемое значение: +// Булево - Истина, если выборка многопоточная. +// +Функция ЭтоПостраничнаяВыборка(Параметры) + + Возврат Параметры.Свойство("СпособВыборки") И Параметры.ВыбиратьПорциями; + +КонецФункции + +// Возвращает, выполняется ли упорядочивание по возрастанию. +// +// Параметры: +// Направление - Строка - Проверяемое направление упорядочивания. +// +// Возвращаемое значение: +// Булево - Истина, если упорядочивание по возрастанию, иначе Ложь. +// +Функция УпорядочиваниеПоВозрастанию(Направление) + + Если Направление = Неопределено Тогда + Возврат Истина; + Иначе + ПорядокВРег = ВРег(Направление); + + // НеПереводить: "УБЫВ". + Возврат НЕ (ПорядокВРег = "УБЫВ" Или ПорядокВРег = "DESC"); + КонецЕсли; + +КонецФункции + +// Возвращает оператор ">" для страничной выборки, с учетом порядка упорядочивания. +// +// Параметры: +// Направление - Строка - Проверяемое направление упорядочивания. +// +// Возвращаемое значение: +// Строка - оператор ">", если Порядок = "ВОЗР", иначе "<". +// +Функция ОператорБольше(Направление) + + Возврат ?(УпорядочиваниеПоВозрастанию(Направление), ">", "<"); + +КонецФункции + +// Возвращает оператор "<" для страничной выборки, с учетом порядка упорядочивания. +// +// Параметры: +// Направление - Строка - Проверяемое направление упорядочивания. +// +// Возвращаемое значение: +// Строка - оператор "<", если Порядок = "ВОЗР", иначе ">". +// +Функция ОператорМеньше(Направление) + + Возврат ?(УпорядочиваниеПоВозрастанию(Направление), "<", ">"); + +КонецФункции + +// Возвращает оператор ">=" для страничной выборки, с учетом порядка упорядочивания. +// +// Параметры: +// Направление - Строка - Проверяемое направление упорядочивания. +// +// Возвращаемое значение: +// Строка - оператор ">=", если Порядок = "ВОЗР", иначе "<=". +// +Функция ОператорБольшеИлиРавно(Направление) + + Возврат ?(УпорядочиваниеПоВозрастанию(Направление), ">=", "<="); + +КонецФункции + +// Возвращает оператор "<=" для страничной выборки, с учетом порядка упорядочивания. +// +// Параметры: +// Направление - Строка - Проверяемое направление упорядочивания. +// +// Возвращаемое значение: +// Строка - оператор "<=", если Порядок = "ВОЗР", иначе ">=". +// +Функция ОператорМеньшеИлиРавно(Направление) + + Возврат ?(УпорядочиваниеПоВозрастанию(Направление), "<=", ">="); + +КонецФункции + +// Возвращает имя объекта метаданных из его полного имени. +// +// Параметры: +// ПолноеИмя - Строка - полное имя объекта метаданных. +// +// Возвращаемое значение: +// Строка - имя объекта метаданных (после точки). +// +Функция ИмяОбъектаМетаданных(ПолноеИмя) + + Позиция = СтрНайти(ПолноеИмя, ".", НаправлениеПоиска.СКонца); + + Если Позиция > 0 Тогда + Возврат Сред(ПолноеИмя, Позиция + 1); + Иначе + Возврат ПолноеИмя; + КонецЕсли; + +КонецФункции + +// Возвращает признак наличия полей упорядочивания. +// +// Параметры: +// +Функция ЗаданыПоляУпорядочивания(ДополнительныеПараметры) + + Возврат ДополнительныеПараметры.ПоляУпорядочивания.Количество() > 0; + +КонецФункции + +// Возвращает вид источника данных (см. ДополнительныеПараметрыВыборкиДанныхДляОбработки(), п. 1 и п. 2. +// +// Параметры: +// ДополнительныеИсточникиДанных - Структура - см. ДополнительныеПараметрыВыборкиДанныхДляОбработки(). +// +// Возвращаемое значение: +// Булево - Истина, если это простой набор источников, как в п.1, Ложь - если это иерархия соответствий, +// как в п. 2. +// +Функция ЭтоПростойИсточникДанных(ДополнительныеИсточникиДанных) + + ПростойИсточник = Ложь; + СложныйИсточник = Ложь; + ТипСоответствие = Тип("Соответствие"); + + Для каждого КлючИЗначение Из ДополнительныеИсточникиДанных Цикл + Если ТипЗнч(КлючИЗначение.Значение) = ТипСоответствие Тогда + СложныйИсточник = Истина; + Иначе + ПростойИсточник = Истина; + КонецЕсли; + КонецЦикла; + + Если ПростойИсточник И СложныйИсточник Тогда + Ошибка = НСтр("ru = 'Источник данных задан неверно (см. ДополнительныеПараметрыВыборкиДанныхДляОбработки()).'"); + ВызватьИсключение Ошибка; + Иначе + Возврат ПростойИсточник; + КонецЕсли; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index dcb978b5e..7c6c1322a 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем @@ -16,6 +24,7 @@ // * Имя - Строка - имя библиотеки, например, "СтандартныеПодсистемы". // * Версия - Строка - версия в формате из 4-х цифр, например, "2.1.3.1". // +// * ИдентификаторИнтернетПоддержки - Строка - уникальное имя программы в сервисах Интернет-поддержки. // * ТребуемыеПодсистемы - Массив - имена других библиотек (Строка), от которых зависит данная библиотека. // Обработчики обновления таких библиотек должны быть вызваны ранее // обработчиков обновления данной библиотеки. @@ -32,7 +41,8 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "3.0.1.336"; + Описание.Версия = "3.0.2.150"; + Описание.ИдентификаторИнтернетПоддержки = "SSL"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0"; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl index dffd3745e..b9e8bfaf4 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Для интеграции с подсистемой "Обновление конфигурации". diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl index aedbc13fd..d3355ef81 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Проверяет статус отложенного обновления. Если обновление завершилось diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl index d8b1970e5..23a46477d 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Открывает форму отложенных обработчиков. @@ -36,7 +44,7 @@ Параметры.Отказ = Истина; Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( "ПоказатьПредупреждениеИПродолжить", - СтандартныеПодсистемыКлиент.ЭтотОбъект, + СтандартныеПодсистемыКлиент, ОписаниеПредупреждения); КонецЕсли; @@ -229,7 +237,7 @@ // Процедура ОповеститьОтложенныеОбработчикиНеВыполнены() Экспорт - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Если ПользователиКлиент.ЭтоСеансВнешнегоПользователя() Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl index b1f620657..8a4a81d8d 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается при нажатии на гиперссылку или двойном щелчке на ячейке diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl index a73f022da..cbf883799 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Позволяет переопределить различные сообщения, выводимые пользователю. diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl index 4f3e90767..ab40993bb 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Проверить необходимость обновления неразделенных данных информационной базы @@ -167,7 +175,6 @@ КонецЕсли; ОперативноеОбновление = БлокировкаИБ.ОперативноеОбновление; - КлючЗаписи = БлокировкаИБ.КлючЗаписи; Попытка @@ -882,13 +889,7 @@ Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() И ПриЗапуске = Истина Тогда Результат = ОтметкаНачалаОбновления(); - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Возврат НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. - |Для завершения обновления версии программы требуются запуск в режиме толстого, тонкого или ВЕБ-клиента'"); - - ИначеЕсли Не Результат.МожноВыполнятьОбновление Тогда + Если Не Результат.МожноВыполнятьОбновление Тогда Сообщение = НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. |Обновление уже выполняется: | компьютер - %1 @@ -906,16 +907,15 @@ Возврат Сообщение; КонецЕсли; КонецЕсли; - Возврат ""; КонецЕсли; ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском = Ложь; Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - МодульОбменДаннымиВызовСервера = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВызовСервера"); + МодульОбменДаннымиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСлужебный"); ТребуетсяПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском = - МодульОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском(); + МодульОбменДаннымиСлужебный.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском(); КонецЕсли; // В этих случаях запуск не блокируется. @@ -1111,6 +1111,13 @@ ПараметрыОбработчикаСтруктура.Очередь = Обработчик.ОчередьОтложеннойОбработки; ПараметрыОбработчикаСтруктура.Вставить("ДанныеОбработчика", Новый Соответствие); + Если Обработчик.Многопоточный Тогда + ПараметрыОбработчикаСтруктура.ПараметрыВыборки = + ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(); + Иначе + ПараметрыОбработчикаСтруктура.ПараметрыВыборки = Неопределено; + КонецЕсли; + ПараметрыОбработчика = Новый Массив; ПараметрыОбработчика.Добавить(ПараметрыОбработчикаСтруктура); Попытка @@ -1139,7 +1146,14 @@ ВызватьИсключение; КонецПопытки; - ОбрабатываемыеДанные.Вставить(Обработчик.ИмяОбработчика, ПараметрыОбработчикаСтруктура.ДанныеОбработчика); + ОписаниеОбрабатываемыхДанных = НовоеОписаниеОбрабатываемыхДанных(Обработчик.Многопоточный); + ОписаниеОбрабатываемыхДанных.ДанныеОбработчика = ПараметрыОбработчикаСтруктура.ДанныеОбработчика; + + Если Обработчик.Многопоточный Тогда + ОписаниеОбрабатываемыхДанных.ПараметрыВыборки = ПараметрыОбработчикаСтруктура.ПараметрыВыборки; + КонецЕсли; + + ОбрабатываемыеДанные.Вставить(Обработчик.ИмяОбработчика, ОписаниеОбрабатываемыхДанных); КонецЦикла; КонецЦикла; @@ -1819,7 +1833,7 @@ КонецФункции // Запускает обновление информационной базы в длительной операции. -Функция ВыполнитьОбновлениеИнформационнойБазыВФоне(ПараметрыОбновленияИБ, АдресХранилища) Экспорт +Процедура ВыполнитьОбновлениеИнформационнойБазыВФоне(ПараметрыОбновленияИБ, АдресХранилища) Экспорт Если ПараметрыОбновленияИБ.ВФоне Тогда ПараметрыСеанса.ПараметрыКлиентаНаСервере = ПараметрыОбновленияИБ.ПараметрыКлиентаНаСервере; @@ -1859,7 +1873,7 @@ КонецЕсли; ПоместитьВоВременноеХранилище(РезультатОбновления, АдресХранилища); -КонецФункции +КонецПроцедуры // Для внутреннего использования. // @@ -1874,7 +1888,7 @@ Если ОбщегоНазначения.РазделениеВключено() Тогда БлокировкаИБ.РежимОтладки = Ложь; Иначе - БлокировкаИБ.РежимОтладки = ОбщегоНазначенияКлиентСервер.РежимОтладки(); + БлокировкаИБ.РежимОтладки = ОбщегоНазначения.РежимОтладки(); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда @@ -2081,6 +2095,7 @@ ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура); ОтключитьОбновлениеКлючейДоступа(Ложь, ПодсистемаСуществует); Исключение + ОтключитьОбновлениеКлючейДоступа(Ложь, ПодсистемаСуществует); ИмяОбработчика = Обработчик.Процедура; ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -2166,7 +2181,7 @@ // Функция СобытиеЖурналаРегистрации() Экспорт - Возврат НСтр("ru = 'Обновление информационной базы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обновление информационной базы'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -2178,7 +2193,7 @@ // Функция СобытиеЖурналаРегистрацииПротокол() Экспорт - Возврат СобытиеЖурналаРегистрации() + "." + НСтр("ru = 'Протокол выполнения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат СобытиеЖурналаРегистрации() + "." + НСтр("ru = 'Протокол выполнения'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -2282,10 +2297,8 @@ СведенияОбОбновлении.Вставить("ОбрабатываемыеДанные", Новый Соответствие); СведенияОбОбновлении.Вставить("ТекущаяИтерацияОбновления", 1); СведенияОбОбновлении.Вставить("ПланОтложенногоОбновления"); - СведенияОбОбновлении.Вставить("ОписаниеПроцедурЗаполнения"); ИмяБиблиотеки = ""; - НомерВерсии = ""; ТекстОшибок = ""; ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; @@ -2648,6 +2661,39 @@ //////////////////////////////////////////////////////////////////////////////// // Механизм многопоточного обновления. +// Имя группы потоков регистрации данных для отложенного обновления. +// +// Возвращаемое значение: +// Строка - имя группы. +// +Функция ГруппаПотоковРегистрацииДанныхОтложенногоОбновления() + + Возврат "Регистрация"; + +КонецФункции + +// Имя группы потоков отложенного обновления. +// +// Возвращаемое значение: +// Строка - имя группы. +// +Функция ГруппаПотоковОтложенногоОбновления() + + Возврат "Обновление"; + +КонецФункции + +// Имя группы потоков поиска порций данных для многопоточного выполнения обработчиков обновления. +// +// Возвращаемое значение: +// Строка - имя группы. +// +Функция ГруппаПотоковПоискаПорций() + + Возврат "Поиск"; + +КонецФункции + // Создать новое описание потоков регистрации данных отложенного обновления. // // Возвращаемое значение: @@ -2655,12 +2701,15 @@ // Функция НовоеОписаниеПотоковРегистрацииДанныхОтложенногоОбновления() - Описание = НовоеОписаниеПотоков(); - Описание.Процедура = + ГруппаРегистрации = НовоеОписаниеГруппыПотоков(); + ГруппаРегистрации.Процедура = "ОбновлениеИнформационнойБазыСлужебный.ЗаполнитьДанныеОтложенногоОбработчика"; - Описание.ПроцедураЗавершения = + ГруппаРегистрации.ПроцедураЗавершения = "ОбновлениеИнформационнойБазыСлужебный.ЗавершитьРегистрациюДанныхОтложенногоОбновления"; + Описание = НовоеОписаниеПотоков(); + Описание.Группы[ГруппаПотоковРегистрацииДанныхОтложенногоОбновления()] = ГруппаРегистрации; + Возврат Описание; КонецФункции @@ -2669,21 +2718,22 @@ // // Параметры: // ОписаниеПотоков - Структура - см. НовоеОписаниеПотоков(). -// ОписаниеПроцедуры - Структура - описание процедуры заполнения. +// ОписаниеОбрабатываемыхДанных - Структура - см. НовоеОписаниеОбрабатываемыхДанных(). // // Возвращаемое значение: // СтрокаТаблицыЗначений - новый поток (см. НовоеОписаниеПотоков()). // -Функция ДобавитьПотокРегистрацииДанныхОтложенногоОбновления(ОписаниеПотоков, ОписаниеПроцедуры) +Функция ДобавитьПотокРегистрацииДанныхОтложенногоОбновления(ОписаниеПотоков, ОписаниеОбрабатываемыхДанных) ШаблонНаименования = НСтр("ru = 'Регистрация данных обработчика обновления ""%1""'"); - ОписаниеПроцедуры.Статус = "Выполняется"; + ОписаниеОбрабатываемыхДанных.Статус = "Выполняется"; Поток = ОписаниеПотоков.Потоки.Добавить(); - Поток.ПараметрыПроцедуры = ОписаниеПроцедуры; - Поток.ПараметрыПроцедурыЗавершения = ОписаниеПроцедуры; + Поток.ПараметрыПроцедуры = ОписаниеОбрабатываемыхДанных; + Поток.ПараметрыПроцедурыЗавершения = ОписаниеОбрабатываемыхДанных; + Поток.Группа = ГруппаПотоковРегистрацииДанныхОтложенногоОбновления(); Поток.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонНаименования, - ОписаниеПроцедуры.ИмяОбработчика); + ОписаниеОбрабатываемыхДанных.ИмяОбработчика); Возврат Поток; @@ -2693,11 +2743,11 @@ // Вызывается автоматически в основном потоке, после завершения выполнения ЗаполнитьДанныеОтложенногоОбработчика(). // // Параметры: -// ОписаниеПроцедуры - Структура - описание процедуры заполнения. +// ОписаниеОбрабатываемыхДанных - Структура - см. НовоеОписаниеОбрабатываемыхДанных(). // АдресРезультата - Строка - адрес временного хранилища с результатом из ЗаполнитьДанныеОтложенногоОбработчика(). -// СведенияОбОбновлении - сведения об обновлении (см. НовыеСведенияОбОбновлении()). +// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). // -Процедура ЗавершитьРегистрациюДанныхОтложенногоОбновления(ОписаниеПроцедуры, +Процедура ЗавершитьРегистрациюДанныхОтложенногоОбновления(ОписаниеОбрабатываемыхДанных, АдресРезультата, СведенияОбОбновлении) Экспорт @@ -2707,8 +2757,9 @@ СведенияОбОбновлении.ОбрабатываемыеДанные = Новый Соответствие; КонецЕсли; - СведенияОбОбновлении.ОписаниеПроцедурЗаполнения[ОписаниеПроцедуры.ИмяОбработчика].Статус = "Выполнено"; - СведенияОбОбновлении.ОбрабатываемыеДанные.Вставить(ОписаниеПроцедуры.ИмяОбработчика, Результат.ДанныеОбработчика); + ОписаниеОбрабатываемыхДанных = СведенияОбОбновлении.ОбрабатываемыеДанные[ОписаниеОбрабатываемыхДанных.ИмяОбработчика]; + ЗаполнитьЗначенияСвойств(ОписаниеОбрабатываемыхДанных, Результат); + ОписаниеОбрабатываемыхДанных.Статус = "Выполнено"; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда Если Результат.ДанныеОбновления <> Неопределено Тогда @@ -2726,16 +2777,30 @@ // Функция НовоеОписаниеПотоковОбработчиковОтложенногоОбновления() - Описание = НовоеОписаниеПотоков(); - Описание.Процедура = + ГруппаОбновления = НовоеОписаниеГруппыПотоков(); + ГруппаОбновления.Процедура = "ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенныйОбработчик"; - Описание.ПроцедураЗавершения = + ГруппаОбновления.ПроцедураЗавершения = "ОбновлениеИнформационнойБазыСлужебный.ЗавершитьВыполнениеОтложенногоОбработчика"; - Описание.ПриАварийномЗавершении = + ГруппаОбновления.ПриАварийномЗавершении = "ОбновлениеИнформационнойБазыСлужебный.ПриАварийномЗавершенииПотокаОтложенногоОбработчика"; - Описание.ПриОтменеПотока = + ГруппаОбновления.ПриОтменеПотока = "ОбновлениеИнформационнойБазыСлужебный.ПриОтменеПотокаОтложенногоОбработчика"; + ГруппаПоиска = НовоеОписаниеГруппыПотоков(); + ГруппаПоиска.Процедура = + "ОбновлениеИнформационнойБазыСлужебный.НайтиПорциюДляОбновления"; + ГруппаПоиска.ПроцедураЗавершения = + "ОбновлениеИнформационнойБазыСлужебный.ЗавершитьПоискПорцииДляОбновления"; + ГруппаПоиска.ПриАварийномЗавершении = + "ОбновлениеИнформационнойБазыСлужебный.ПриАварийномЗавершенииПотокаПоискаПорцииДляОбновления"; + ГруппаПоиска.ПриОтменеПотока = + "ОбновлениеИнформационнойБазыСлужебный.ПриОтменеПотокаПоискаПорцииДляОбновления"; + + Описание = НовоеОписаниеПотоков(); + Описание.Группы[ГруппаПотоковОтложенногоОбновления()] = ГруппаОбновления; + Описание.Группы[ГруппаПотоковПоискаПорций()] = ГруппаПоиска; + Возврат Описание; КонецФункции @@ -2744,7 +2809,7 @@ // // Параметры: // ОписаниеПотоков - Структура - см. НовоеОписаниеПотоковОбработчиковОтложенногоОбновления(). -// СведенияОбОбновлении - сведения об обновлении (см. НовыеСведенияОбОбновлении()). +// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). // // Возвращаемое значение: // * СтрокаТаблицыЗначений - новый поток (см. НовоеОписаниеПотоков()). @@ -2757,12 +2822,22 @@ Если ТипЗнч(ОбработчикОбновления) = Тип("СтрокаДереваЗначений") Тогда Если КонтекстОбработчика.ВыполнитьОбработчик Тогда - ШаблонНаименования = НСтр("ru = 'Выполнение обработчика обновления ""%1""'"); Поток = ОписаниеПотоков.Потоки.Добавить(); - Поток.ПараметрыПроцедуры = КонтекстОбработчика; - Поток.ПараметрыПроцедурыЗавершения = КонтекстОбработчика; - Поток.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонНаименования, - ОбработчикОбновления.ИмяОбработчика); + + Если ОбработчикОбновления.Многопоточный Тогда + ДополнитьКонтекстМногопоточногоОбработчика(КонтекстОбработчика); + Добавлен = ДобавитьПотокПоискаДанныхДляОбновления(Поток, + ОбработчикОбновления, + КонтекстОбработчика, + СведенияОбОбновлении); + + Если Не Добавлен Тогда + ОписаниеПотоков.Потоки.Удалить(Поток); + Поток = Истина; + КонецЕсли; + Иначе + ДобавитьПотокОбработчикаОбновления(Поток, КонтекстОбработчика); + КонецЕсли; Иначе Поток = Истина; КонецЕсли; @@ -2774,6 +2849,81 @@ КонецФункции +// Добавить поток поиска данных для обработчика отложенного обновления. +// +// Параметры: +// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// Обработчик - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. +// КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). +// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). +// +// Возвращаемое значение: +// Булево - Истина, поток добавлен, иначе Ложь. +// +Функция ДобавитьПотокПоискаДанныхДляОбновления(Поток, Обработчик, КонтекстОбработчика, СведенияОбОбновлении) + + ИмяОбработчика = Обработчик.ИмяОбработчика; + Описание = СведенияОбОбновлении.ОбрабатываемыеДанные[ИмяОбработчика]; + + Если Не Описание.ВыполняетсяПоискПорции Тогда + ПорцииДляОбновления = Описание.ПорцииДляОбновления; + + Если Описание.ПоискЗавершен И (ПорцииДляОбновления = Неопределено Или ПорцииДляОбновления.Количество() = 0) Тогда + ПорцииДляОбновления = Неопределено; + Описание.ПоследняяВыбраннаяЗапись = Неопределено; + Описание.ПоискЗавершен = Ложь; + КонецЕсли; + + ШаблонНаименования = НСтр("ru = 'Поиск данных для обработчика обновления ""%1""'"); + Поток.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонНаименования, ИмяОбработчика); + Поток.Группа = ГруппаПотоковПоискаПорций(); + Поток.ПриоритетЗавершения = 1; + + ПараметрыПоиска = НовыеПараметрыПоискаПорции(); + ПараметрыПоиска.ИмяОбработчика = ИмяОбработчика; + ПараметрыПоиска.КонтекстОбработчика = КонтекстОбработчика; + ПараметрыПоиска.ПараметрыВыборки = Описание.ПараметрыВыборки; + ПараметрыПоиска.Очередь = КонтекстОбработчика.Параметры.Очередь; + ПараметрыПоиска.ФорсироватьОбновление = ФорсироватьОбновление(СведенияОбОбновлении); + + НеобработаннаяПорция = ПерваяНеобработаннаяПорция(ПорцииДляОбновления); + + Если НеобработаннаяПорция <> Неопределено Тогда + ПараметрыПоиска.ИдентификаторПорции = НеобработаннаяПорция.Идентификатор; + ПараметрыПоиска.ПерваяЗапись = НеобработаннаяПорция.ПерваяЗапись; + ПараметрыПоиска.ПоследняяЗапись = НеобработаннаяПорция.ПоследняяЗапись; + ИначеЕсли Описание.ПоследняяВыбраннаяЗапись <> Неопределено Тогда + ПараметрыПоиска.ПоследняяВыбраннаяЗапись = Описание.ПоследняяВыбраннаяЗапись; + КонецЕсли; + + Поток.ПараметрыПроцедуры = ПараметрыПоиска; + Поток.ПараметрыПроцедурыЗавершения = ПараметрыПоиска; + Описание.ВыполняетсяПоискПорции = Истина; + + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Добавить поток обработчика отложенного обновления. +// +// Параметры: +// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). +// +Процедура ДобавитьПотокОбработчикаОбновления(Поток, КонтекстОбработчика) + + ИмяОбработчика = КонтекстОбработчика.ИмяОбработчика; + ШаблонНаименования = НСтр("ru = 'Выполнение обработчика обновления ""%1""'"); + Поток.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонНаименования, ИмяОбработчика); + Поток.Группа = ГруппаПотоковОтложенногоОбновления(); + Поток.ПараметрыПроцедуры = КонтекстОбработчика; + Поток.ПараметрыПроцедурыЗавершения = КонтекстОбработчика; + +КонецПроцедуры + // Выполнить отложенный обработчик в фоновом задании. // Выполняется только, если КонтекстОбработчика.ВыполнитьОбработчик = Истина (т.е. не в подчиненном узле РИБ). // @@ -2790,11 +2940,15 @@ Попытка ПараметрыВызова = Новый Массив; ПараметрыВызова.Добавить(КонтекстОбработчика.Параметры); - ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова); - Результат = НовыйРезультатВыполненияОтложенногоОбработчика(); + + Результат.НачалоПроцедурыОбработчика = ТекущаяУниверсальнаяДатаВМиллисекундах(); + ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова); + Результат.ЗавершениеПроцедурыОбработчика = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Результат.Параметры = КонтекстОбработчика.Параметры; Результат.ПараметрыОбработчикаОбновления = ПараметрыСеанса.ПараметрыОбработчикаОбновления; + Попытка ПроверитьВложеннуюТранзакцию(КонтекстОбработчика.ТранзакцияАктивнаНаНачалоВыполнения, КонтекстОбработчика.ИмяОбработчика); @@ -2834,16 +2988,58 @@ ОбработчикОбновления.ОбработкаПорцииЗавершена = Истина; ЗагрузитьРезультатВыполненияОбработчика(КонтекстОбработчика, АдресРезультата); - ДеревоОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков; ПараметрыСеанса.ПараметрыОбработчикаОбновления = КонтекстОбработчика.ПараметрыОбработчикаОбновления; Если КонтекстОбработчика.ЗапускВыполненБезОшибок Тогда - ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, ДеревоОбработчиков); + ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, СведенияОбОбновлении); КонецЕсли; - ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления); + ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, СведенияОбОбновлении); ПараметрыСеанса.ПараметрыОбработчикаОбновления = Новый ФиксированнаяСтруктура(НовыеПараметрыОбработчикаОбновления()); ЗавершитьВыполнениеОтложенногоОбработчикаОбновления(КонтекстОбработчика, СведенияОбОбновлении); + РассчитатьВремяВыполненияПроцедурыОбработчика(КонтекстОбработчика, ОбработчикОбновления); + + Если ОбработчикОбновления.Многопоточный Тогда + ЗавершитьВыполнениеМногопоточногоОбработчика(КонтекстОбработчика, СведенияОбОбновлении); + КонецЕсли; + +КонецПроцедуры + +// Рассчитать время выполнения процедуры обработки данных (не всего обработчика). +// +// Параметры: +// КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). +// ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. +// +Процедура РассчитатьВремяВыполненияПроцедурыОбработчика(КонтекстОбработчика, ОбработчикОбновления) + + НачалоПроцедурыОбработчика = КонтекстОбработчика.НачалоПроцедурыОбработчика; + ЗавершениеПроцедурыОбработчика = КонтекстОбработчика.ЗавершениеПроцедурыОбработчика; + ДлительностьПроцедурыОбработчика = ЗавершениеПроцедурыОбработчика - НачалоПроцедурыОбработчика; + НачалоВыполнения = '00010101' + НачалоПроцедурыОбработчика / 1000; + ЗавершениеВыполнения = '00010101' + ЗавершениеПроцедурыОбработчика / 1000; + СтатистикаНачало = ОбработчикОбновления.СтатистикаВыполнения["НачалоПроцедурыОбработчика"]; + СтатистикаЗавершение = ОбработчикОбновления.СтатистикаВыполнения["ЗавершениеПроцедурыОбработчика"]; + СтатистикаДлительность = ОбработчикОбновления.СтатистикаВыполнения["ДлительностьПроцедурыОбработчика"]; + + Если СтатистикаНачало = Неопределено Тогда + СтатистикаНачало = Новый Массив; + ОбработчикОбновления.СтатистикаВыполнения["НачалоПроцедурыОбработчика"] = СтатистикаНачало; + КонецЕсли; + + Если СтатистикаЗавершение = Неопределено Тогда + СтатистикаЗавершение = Новый Массив; + ОбработчикОбновления.СтатистикаВыполнения["ЗавершениеПроцедурыОбработчика"] = СтатистикаЗавершение; + КонецЕсли; + + Если СтатистикаДлительность = Неопределено Тогда + СтатистикаДлительность = Новый Массив; + ОбработчикОбновления.СтатистикаВыполнения["ДлительностьПроцедурыОбработчика"] = СтатистикаДлительность; + КонецЕсли; + + СтатистикаНачало.Добавить(НачалоВыполнения); + СтатистикаЗавершение.Добавить(ЗавершениеВыполнения); + СтатистикаДлительность.Добавить(ДлительностьПроцедурыОбработчика); КонецПроцедуры @@ -2859,9 +3055,12 @@ ОбработчикОбновления = НайтиОбработчикВДереве(СведенияОбОбновлении.ДеревоОбработчиков.Строки, Поток.ПараметрыПроцедуры.ИдентификаторОбработчика, Поток.ПараметрыПроцедуры.ИмяОбработчика); - ОбработатьИсключениеОбработчика(Поток.ПараметрыПроцедуры, ОбработчикОбновления, ИнформацияОбОшибке); + Если ОбработчикОбновления.Многопоточный Тогда + ОтменитьОбработкуДанныхМногопоточногоОбработчика(Поток, ОбработчикОбновления, СведенияОбОбновлении); + КонецЕсли; + КонецПроцедуры // Обработчик отмены выполнения потока. @@ -2876,10 +3075,14 @@ Поток.ПараметрыПроцедуры.ИдентификаторОбработчика, Поток.ПараметрыПроцедуры.ИмяОбработчика); - Если ОбработчикОбновления.Статус <> "Ошибка" Тогда + Если ОбработчикОбновления.Статус = "Выполняется" Тогда ОбработчикОбновления.Статус = Неопределено; КонецЕсли; + Если ОбработчикОбновления.Многопоточный Тогда + ОтменитьОбработкуДанныхМногопоточногоОбработчика(Поток, ОбработчикОбновления, СведенияОбОбновлении); + КонецЕсли; + КонецПроцедуры // Загрузить результат выполнения обработчика из временного хранилища в контекст обработчика обновления. @@ -2898,7 +3101,9 @@ КонецЕсли; КонтекстОбработчика.ЕстьНеЗакрытыеТранзакции = Результат.ЕстьНеЗакрытыеТранзакции; + КонтекстОбработчика.ЗавершениеПроцедурыОбработчика = Результат.ЗавершениеПроцедурыОбработчика; КонтекстОбработчика.ИнформацияОбОшибке = Результат.ИнформацияОбОшибке; + КонтекстОбработчика.НачалоПроцедурыОбработчика = Результат.НачалоПроцедурыОбработчика; КонтекстОбработчика.Параметры = Результат.Параметры; КонтекстОбработчика.ПараметрыОбработчикаОбновления = Результат.ПараметрыОбработчикаОбновления; КонецЕсли; @@ -2924,6 +3129,7 @@ // Структура - описание контекста (сериализуется для возможности передачи в фоновое задание): // * ВыполнитьОбработчик - Булево - если Истина, то обработчик готов к выполнению. // * ДетальноеОписаниеОбработчика - Структура - см. ПодготовитьДетальнуюИнформациюОХодеОбновления(). +// * ЗавершениеПроцедурыОбработчика - Число - завершение процедуры обработки данных. // * ЗаписыватьВЖурнал - Булево - см. Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации. // * ЗапускВыполненБезОшибок - Булево - если Истина, то при запуске обработчика не возникло исключений. // * ИдентификаторОбработчика - УникальныйИдентификатор - идентификатор обработчика обновления. @@ -2931,6 +3137,7 @@ // * ИндексОписанияЦиклаОбновления - Число - индекс элемента плана обновления. // * ИндексТекущегоЦиклаОбновления - Число - индекс текущего элемента плана обновления. // * НачалоОбработкиДанных - Дата - время начала выполнения обработчика обновления. +// * НачалоПроцедурыОбработчика - Число - начало процедуры обработки данных. // * ПараллельныйРежим - Булево - признак параллельного режима выполнения обработчика обновления. // * Параметры - Структура - параметры обработчика обновления. // * ПараметрыОбновления - Структура - описание параметров обновления. @@ -2946,6 +3153,7 @@ КонтекстОбработчика.Вставить("ВыполнитьОбработчик", Ложь); КонтекстОбработчика.Вставить("ДетальноеОписаниеОбработчика"); КонтекстОбработчика.Вставить("ЕстьНеЗакрытыеТранзакции", Ложь); + КонтекстОбработчика.Вставить("ЗавершениеПроцедурыОбработчика"); КонтекстОбработчика.Вставить("ЗаписыватьВЖурнал"); КонтекстОбработчика.Вставить("ЗапускВыполненБезОшибок", Ложь); КонтекстОбработчика.Вставить("ИдентификаторОбработчика"); @@ -2954,6 +3162,7 @@ КонтекстОбработчика.Вставить("ИндексТекущегоЦиклаОбновления"); КонтекстОбработчика.Вставить("ИнформацияОбОшибке"); КонтекстОбработчика.Вставить("НачалоОбработкиДанных"); + КонтекстОбработчика.Вставить("НачалоПроцедурыОбработчика"); КонтекстОбработчика.Вставить("ПараллельныйРежим"); КонтекстОбработчика.Вставить("Параметры"); КонтекстОбработчика.Вставить("ПараметрыОбновления"); @@ -2966,22 +3175,39 @@ КонецФункции +// Дополнить контекст обработчика полями для многопоточного обработчика. +// +// Параметры: +// КонтекстОбработчика - Структура (см. НовыйКонтекстОбработчика()). +// +Процедура ДополнитьКонтекстМногопоточногоОбработчика(КонтекстОбработчика) + + КонтекстОбработчика.Параметры.Вставить("ОбновляемыеДанные"); + +КонецПроцедуры + // Результат выполнения отложенного обработчика обновления для передачи в процедуру завершения // его выполнения в управляющем потоке. // // Возвращаемое значение: // Структура - описание результата: -// * Параметры - Структура - параметры, переданные в обработчик обновления; +// * ЕстьНеЗакрытыеТранзакции - Булево - признак наличия не закрытых транзакций в самом обработчике. +// * ЗавершениеПроцедурыОбработчика - Число - время завершения выполнения процедуры обработчика обновления. +// * ИнформацияОбОшибке - ИнформацияОбОшибке - описание ошибки (если была). +// * НачалоПроцедурыОбработчика - Число - время начала выполнения процедуры обработчика обновления. +// * Параметры - Структура - параметры, переданные в обработчик обновления. // * ПараметрыОбработчикаОбновления - ФиксированнаяСтруктура - значение параметра сеанса // ПараметрыОбработчикаОбновления. // Функция НовыйРезультатВыполненияОтложенногоОбработчика() Результат = Новый Структура; + Результат.Вставить("ЕстьНеЗакрытыеТранзакции", Ложь); + Результат.Вставить("ЗавершениеПроцедурыОбработчика"); Результат.Вставить("ИнформацияОбОшибке"); + Результат.Вставить("НачалоПроцедурыОбработчика"); Результат.Вставить("Параметры"); Результат.Вставить("ПараметрыОбработчикаОбновления"); - Результат.Вставить("ЕстьНеЗакрытыеТранзакции", Ложь); Возврат Результат; @@ -3042,7 +3268,9 @@ // Процедура ВыполнитьПоток(ОписаниеПотоков, Поток, ИдентификаторФормы = Неопределено) - Если Не ПустаяСтрока(ОписаниеПотоков.Процедура) И Поток.ПараметрыПроцедуры <> Неопределено Тогда + ОписаниеПотока = ОписаниеПотоков.Группы[Поток.Группа]; + + Если Не ПустаяСтрока(ОписаниеПотока.Процедура) И Поток.ПараметрыПроцедуры <> Неопределено Тогда ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдентификаторФормы); ПараметрыВыполнения.НаименованиеФоновогоЗадания = Поток.Наименование; ПараметрыВыполнения.ОжидатьЗавершение = 0; @@ -3051,7 +3279,7 @@ ПараметрыВыполнения.АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор); КонецЕсли; - РезультатЗапуска = ДлительныеОперации.ВыполнитьВФоне(ОписаниеПотоков.Процедура, + РезультатЗапуска = ДлительныеОперации.ВыполнитьВФоне(ОписаниеПотока.Процедура, Поток.ПараметрыПроцедуры, ПараметрыВыполнения); @@ -3080,10 +3308,13 @@ ЕстьЗавершенныеПотоки = Ложь; Потоки = ОписаниеПотоков.Потоки; + Группы = ОписаниеПотоков.Группы; + Потоки.Сортировать("ПриоритетЗавершения Убыв"); Индекс = Потоки.Количество() - 1; Пока Индекс >= 0 Цикл Поток = Потоки[Индекс]; + ОписаниеПотока = Группы[Поток.Группа]; ИдентификаторЗадания = Поток.ИдентификаторЗадания; Если ИдентификаторЗадания <> Неопределено Тогда @@ -3093,13 +3324,13 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); ЗаданиеВыполнено = Неопределено; - Если Не ПустаяСтрока(ОписаниеПотоков.ПриАварийномЗавершении) Тогда + Если Не ПустаяСтрока(ОписаниеПотока.ПриАварийномЗавершении) Тогда ПараметрыВызова = Новый Массив; ПараметрыВызова.Добавить(Поток); ПараметрыВызова.Добавить(ИнформацияОбОшибке); ПараметрыВызова.Добавить(Параметры); - ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотоков.ПриАварийномЗавершении, ПараметрыВызова); + ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПриАварийномЗавершении, ПараметрыВызова); Иначе ВызватьИсключение; КонецЕсли; @@ -3107,7 +3338,7 @@ КонецЕсли; Если ИдентификаторЗадания = Неопределено Или ЗаданиеВыполнено <> Ложь Тогда - Выполнять = Не ПустаяСтрока(ОписаниеПотоков.ПроцедураЗавершения) + Выполнять = Не ПустаяСтрока(ОписаниеПотока.ПроцедураЗавершения) И Поток.ПараметрыПроцедурыЗавершения <> Неопределено И (ИдентификаторЗадания = Неопределено Или ЗаданиеВыполнено = Истина); @@ -3117,7 +3348,7 @@ ПараметрыВызова.Добавить(Поток.АдресРезультата); ПараметрыВызова.Добавить(Параметры); - ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотоков.ПроцедураЗавершения, ПараметрыВызова); + ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПроцедураЗавершения, ПараметрыВызова); КонецЕсли; УдалитьИзВременногоХранилища(Поток.АдресРезультата); @@ -3182,7 +3413,7 @@ Пока Потоки.Количество() >= МаксимумПотоков Цикл Если ЗавершитьПотокиВыполнившиеФЗ(ОписаниеПотоков, Параметры) Тогда - Возврат; + Продолжить; КонецЕсли; ОжидатьЗавершениеПотока(Потоки[0]); @@ -3201,26 +3432,33 @@ Если ОписаниеПотоков <> Неопределено Тогда Потоки = ОписаниеПотоков.Потоки; + Группы = ОписаниеПотоков.Группы; Если Потоки <> Неопределено Тогда - Индекс = Потоки.Количество() - 1; + УдаляемыеПотоки = Новый Массив; + Индекс = 0; - Пока Индекс >= 0 Цикл + Пока Индекс < Потоки.Количество() Цикл Поток = Потоки[Индекс]; + ОписаниеПотока = Группы[Поток.Группа]; Если Поток.ИдентификаторЗадания <> Неопределено Тогда ДлительныеОперации.ОтменитьВыполнениеЗадания(Поток.ИдентификаторЗадания); КонецЕсли; - Если ОписаниеПотоков.ПриОтменеПотока <> Неопределено Тогда + Если ОписаниеПотока.ПриОтменеПотока <> Неопределено Тогда ПараметрыВызова = Новый Массив; ПараметрыВызова.Добавить(Поток); ПараметрыВызова.Добавить(ПараметрыОтмены); - ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотоков.ПриОтменеПотока, ПараметрыВызова); + ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПриОтменеПотока, ПараметрыВызова); КонецЕсли; - Потоки.Удалить(Поток); - Индекс = Индекс - 1; + УдаляемыеПотоки.Добавить(Поток); + Индекс = Индекс + 1; + КонецЦикла; + + Для каждого УдаляемыйПоток Из УдаляемыеПотоки Цикл + Потоки.Удалить(УдаляемыйПоток); КонецЦикла; КонецЕсли; КонецЕсли; @@ -3230,7 +3468,7 @@ // Описание группы потоков. // // Возвращаемое значение: -// Структура - общее описание потоков и описание каждого отдельного потока со следующими полями: +// Структура - общее описание потоков со следующими полями: // * Процедура - Строка - имя процедуры, выполняемой в фоновом задании. Объявление: // ИмяПроцедуры(ОписаниеПроцедуры, АдресРезультата), где: // ** ОписаниеПроцедуры - Структура - описание процедуры заполнения. @@ -3249,8 +3487,28 @@ // ПриОтменеПотока(Поток, ДополнительныеПараметры), где: // ** Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). // ** ДополнительныеПараметры - Произвольный - дополнительный параметр. -// * Потоки - ТаблицаЗначений - описание потоков со следующими колонками: +// +Функция НовоеОписаниеГруппыПотоков() + + Описание = Новый Структура; + Описание.Вставить("Процедура"); + Описание.Вставить("ПроцедураЗавершения"); + Описание.Вставить("ПриАварийномЗавершении"); + Описание.Вставить("ПриОтменеПотока"); + + Возврат Описание; + +КонецФункции + +// Описание группы потоков. +// +// Возвращаемое значение: +// * Группы - Соответствие - описание групп потоков, где: +// ** Ключ - Строка - имя группы. +// ** Значение - Структура - см. НовоеОписаниеГруппыПотоков(). +// * Потоки - ТаблицаЗначений - описание потоков со следующими колонками: // ** Наименование - Строка - произвольное наименование потока (используется в наименовании фонового задания). +// ** Группа - Строка - имя группы с описанием потока. // ** ИдентификаторЗадания - УникальныйИдентификатор - уникальный идентификатор фонового задания. // ** ПараметрыПроцедуры - Произвольный - параметры для Процедура. // ** ПараметрыПроцедурыЗавершения - Произвольный - параметры для ПроцедураЗавершения. @@ -3261,16 +3519,15 @@ Потоки = Новый ТаблицаЗначений; Колонки = Потоки.Колонки; Колонки.Добавить("Наименование"); + Колонки.Добавить("Группа"); + Колонки.Добавить("ПриоритетЗавершения", Новый ОписаниеТипов("Число")); Колонки.Добавить("ИдентификаторЗадания"); Колонки.Добавить("ПараметрыПроцедуры"); Колонки.Добавить("ПараметрыПроцедурыЗавершения"); Колонки.Добавить("АдресРезультата"); Описание = Новый Структура; - Описание.Вставить("Процедура"); - Описание.Вставить("ПроцедураЗавершения"); - Описание.Вставить("ПриАварийномЗавершении"); - Описание.Вставить("ПриОтменеПотока"); + Описание.Вставить("Группы", Новый Соответствие); Описание.Вставить("Потоки", Потоки); Возврат Описание; @@ -3306,6 +3563,982 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Механизм многопоточного выполнения обработчика обновления. + +// Найти порцию данных для потока обработчика обновления. +// +// Параметры: +// ПараметрыПоиска - Структура - см. НовыеПараметрыПоискаПорции(). +// АдресРезультата - Строка - адрес результата выполнения процедуры. Возвращается таблица значений. +// +Процедура НайтиПорциюДляОбновления(ПараметрыПоиска, АдресРезультата) Экспорт + + ПараметрыВыборки = ПараметрыПоиска.ПараметрыВыборки; + ПроверитьПараметрыВыборки(ПараметрыВыборки); + ПараметрыВыборки.МаксимумВыборки = ОбновлениеИнформационнойБазы.МаксимальноеКоличествоЗаписейВВыборке(); + ПоляУпорядочивания = ПоляУпорядочиванияПриПоискеПорций(ПараметрыПоиска); + ПараметрыВыборки.ПоляУпорядочивания = ПоляУпорядочивания; + ПараметрыВыборки.ОптимизироватьВыборкуПоСтраницам = Не ЕстьУпорядочиваниеПоВнешнимТаблицам(ПоляУпорядочивания); + Максимум = ОбновлениеИнформационнойБазы.МаксимальноеКоличествоЗаписейВВыборке(); + ПараметрыОбхода = ПараметрыОбходаДанныхДляОбновления(ПараметрыПоиска); + ИтераторОбхода = ТекущиеПараметрыОбхода(ПараметрыОбхода); + РезультатПоиска = НовыйРезультатПоискаПорции(); + НаборДанных = НовыйНаборДанныхДляОбновления(); + РезультатПоиска.НаборДанных = НаборДанных; + ПараметрыВыборки = ПараметрыПоиска.ПараметрыВыборки; + ДополнительныеИсточникиДанных = ПараметрыВыборки.ДополнительныеИсточникиДанных; + Очередь = ПараметрыПоиска.Очередь; + + Пока ИтераторОбхода <> Неопределено Цикл + СсылочныйОбъект = ИтераторОбхода.СсылочныйОбъект; + ТабличныйОбъект = ИтераторОбхода.ТабличныйОбъект; + УстановитьГраницуНачалаВыборки(ПараметрыПоиска, ИтераторОбхода.СсылочныйИндекс, ИтераторОбхода.ТабличныйИндекс); + УстановитьГраницуКонцаВыборки(ПараметрыПоиска, СсылочныйОбъект, ТабличныйОбъект); + МаксимумВыборки = ПараметрыВыборки.МаксимумВыборки; + ПараметрыВыборки.ДополнительныеИсточникиДанных = ОбновлениеИнформационнойБазы.ИсточникиДанных( + ДополнительныеИсточникиДанных, + СсылочныйОбъект, + ТабличныйОбъект); + Данные = ВыбратьДанныеПорции(ПараметрыВыборки, Очередь, СсылочныйОбъект, ТабличныйОбъект); + Количество = Данные.Количество(); + РезультатПоиска.Количество = РезультатПоиска.Количество + Количество; + ПараметрыВыборки.МаксимумВыборки = ПараметрыВыборки.МаксимумВыборки - Количество; + + Если Количество > 0 Тогда + ЗаписьНабора = НаборДанных.Добавить(); + ЗаписьНабора.СсылочныйОбъект = СсылочныйОбъект; + ЗаписьНабора.ТабличныйОбъект = ТабличныйОбъект; + ЗаписьНабора.Данные = Данные; + КонецЕсли; + + Если РезультатПоиска.Количество < Максимум Тогда + СледующиеПараметрыОбхода(ПараметрыОбхода, Количество = МаксимумВыборки); + ИтераторОбхода = ТекущиеПараметрыОбхода(ПараметрыОбхода); + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + + ПараметрыВыборки.ДополнительныеИсточникиДанных = ДополнительныеИсточникиДанных; + РезультатПоиска.ПоискЗавершен = (ИтераторОбхода = Неопределено); + ПоместитьВоВременноеХранилище(РезультатПоиска, АдресРезультата); + +КонецПроцедуры + +// Проверить корректность заполнения параметров выборки данных обработчика обновления. +// +// Параметры: +// ПараметрыВыборки - Структура - см. +// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(). +// +Процедура ПроверитьПараметрыВыборки(ПараметрыВыборки) + + СпособВыборки = ПараметрыВыборки.СпособВыборки; + ИзвестныйСпособ = (СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиИзмеренияНезависимогоРегистраСведений()) + Или (СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиРегистраторыРегистра()) + Или (СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки()); + Если Не ИзвестныйСпособ Тогда + ШаблонСообщения = НСтр( + "ru = 'Укажите способ выборки в процедуре регистрации данных к обновлению. + |Указывается в ""Параметры.ПараметрыВыборки.СпособВыборки"". + |Сейчас указан неизвестный способ выборки ""%1"".'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СпособВыборки); + КонецЕсли; + + ТаблицыУказаны = Не ПустаяСтрока(ПараметрыВыборки.ПолныеИменаОбъектов) + Или Не ПустаяСтрока(ПараметрыВыборки.ПолныеИменаРегистров); + Если Не ТаблицыУказаны Тогда + ВызватьИсключение НСтр( + "ru = 'Укажите обрабатываемые таблицы в процедуре регистрации данных к обновлению. + |Указывается в ""Параметры.ПараметрыВыборки.ПолныеИменаОбъектов"" и/или + |""Параметры.ПараметрыВыборки.ПолныеИменаРегистров"".'"); + КонецЕсли; + +КонецПроцедуры + +// Установить границу начала выборки порции. +// +// Параметры: +// ПараметрыПоиска - Структура - см. НовыеПараметрыПоискаПорции(). +// СсылочныйИндекс - Число - номер итерации по ссылочным объектам. +// ТабличныйИндекс - Число - номер итерации по табличным объектам. +// +Процедура УстановитьГраницуНачалаВыборки(ПараметрыПоиска, СсылочныйИндекс, ТабличныйИндекс) + + ПараметрыВыборки = ПараметрыПоиска.ПараметрыВыборки; + ПоследняяВыбраннаяЗапись = ПараметрыПоиска.ПоследняяВыбраннаяЗапись; + ПерваяЗапись = ПараметрыПоиска.ПерваяЗапись; + + Если СсылочныйИндекс = 0 И ТабличныйИндекс = 0 Тогда // Выбирается первая страница в цикле выборки. + ПараметрыВыборки.ПоследняяВыбраннаяЗапись = ПоследняяВыбраннаяЗапись; + ПараметрыВыборки.ПерваяЗапись = ПерваяЗапись; + Иначе // Выбираются последующие страницы в цикле выборки (всегда в новом объекте, поэтому сначала). + ПараметрыВыборки.ПоследняяВыбраннаяЗапись = Неопределено; + ПараметрыВыборки.ПерваяЗапись = Неопределено; + КонецЕсли; + +КонецПроцедуры + +// Установить границу конца выборки порции. +// +// Параметры: +// ПараметрыПоиска - Структура - см. НовыеПараметрыПоискаПорции(). +// СсылочныйОбъект - Строка - полное имя ссылочного объекта метаданных. +// ТабличныйОбъект - Строка - полное имя табличного объекта метаданных. +// +Процедура УстановитьГраницуКонцаВыборки(ПараметрыПоиска, СсылочныйОбъект, ТабличныйОбъект) + + ПараметрыВыборки = ПараметрыПоиска.ПараметрыВыборки; + ПоследняяЗапись = ПараметрыПоиска.ПоследняяЗапись; + ЭтоПоследнийОбъект = ПоследняяЗапись <> Неопределено + И СсылочныйОбъект = ПоследняяЗапись[0].Значение + И ТабличныйОбъект = ПоследняяЗапись[1].Значение; + + Если ЭтоПоследнийОбъект Тогда // Последний объект в цикле обхода метаданных (конец выборки). + ПараметрыВыборки.ПоследняяЗапись = ПоследняяЗапись; + Иначе // Промежуточная выборка. + ПараметрыВыборки.ПоследняяЗапись = Неопределено; + КонецЕсли; + +КонецПроцедуры + +// Выбрать данные порции указанным способом. +// +// Параметры: +// ПараметрыВыборки - Структура - см. +// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(). +// Очередь - Число - номер очереди. +// СсылочныйОбъект - Строка - полное имя ссылочного объекта метаданных. +// ТабличныйОбъект - Строка - полное имя табличного объекта метаданных. +// +// Возвращаемое значение: +// ТаблицаЗначений - данные порции. +// +Функция ВыбратьДанныеПорции(ПараметрыВыборки, Очередь, СсылочныйОбъект, ТабличныйОбъект) + + СпособВыборки = ПараметрыВыборки.СпособВыборки; + + Если СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиИзмеренияНезависимогоРегистраСведений() Тогда + Данные = ОбновлениеИнформационнойБазы.ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки( + Очередь, + ТабличныйОбъект, + ПараметрыВыборки); + ИначеЕсли СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиРегистраторыРегистра() Тогда + Данные = ОбновлениеИнформационнойБазы.ВыбратьРегистраторыРегистраДляОбработки( + Очередь, + ?(ПустаяСтрока(СсылочныйОбъект), Неопределено, СсылочныйОбъект), + ТабличныйОбъект, + ПараметрыВыборки); + ИначеЕсли СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки() Тогда + Данные = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки( + Очередь, + СсылочныйОбъект, + ПараметрыВыборки); + КонецЕсли; + + Возврат Данные; + +КонецФункции + +// Подготовить параметры обхода данных для обновления. +// По сути найти границу начала выборки (то место, где остановились в последний раз). +// +// Параметры: +// ПараметрыПоиска - Структура - см. НовыеПараметрыПоискаПорции(). +// +// Возвращаемое значение: +// Структура - параметры поиска, со следующими полями: +// СсылочныеОбъекты - Массив - имена ссылочных объектов метаданных. +// ТабличныеОбъектыВсе - Массив - имена табличных объектов метаданных. +// ТабличныеОбъектыНачало - Массив - имена табличных объектов метаданных на первой итерации. +// +Функция ПараметрыОбходаДанныхДляОбновления(ПараметрыПоиска) + + ПоследняяВыбраннаяЗапись = ПараметрыПоиска.ПоследняяВыбраннаяЗапись; + ПерваяЗапись = ПараметрыПоиска.ПерваяЗапись; + ПараметрыВыборки = ПараметрыПоиска.ПараметрыВыборки; + ПолныеИменаОбъектов = ПараметрыВыборки.ПолныеИменаОбъектов; + ПолныеИменаРегистров = ПараметрыВыборки.ПолныеИменаРегистров; + ПолныеИменаРегистровНачало = ПолныеИменаРегистров; + + Если ПоследняяВыбраннаяЗапись <> Неопределено Тогда // Продолжение выборки по страницам. + ПерваяСсылочная = ПоследняяВыбраннаяЗапись[0].Значение; + ПерваяТабличная = ПоследняяВыбраннаяЗапись[1].Значение; + ИначеЕсли ПерваяЗапись <> Неопределено Тогда // Повтор выборки (завершившейся аварийно). + ПерваяСсылочная = ПерваяЗапись[0].Значение; + ПерваяТабличная = ПерваяЗапись[1].Значение; + Иначе // Начало выборки (выборка первой страницы). + ПерваяСсылочная = Неопределено; + ПерваяТабличная = Неопределено; + КонецЕсли; + + Если Не ПустаяСтрока(ПолныеИменаОбъектов) И Не ПустаяСтрока(ПерваяСсылочная) Тогда // Есть ссылочные объекты. + // Установить ссылочную часть начала выборки на место, на котором она остановилась в последний раз. + Начало = СтрНайти(ПолныеИменаОбъектов, ПерваяСсылочная); + ПолныеИменаОбъектов = Сред(ПолныеИменаОбъектов, Начало); + КонецЕсли; + + Если Не ПустаяСтрока(ПолныеИменаРегистровНачало) И Не ПустаяСтрока(ПерваяТабличная) Тогда // Есть табличные объекты. + // Установить табличную часть начала выборки на место, на котором она остановилась в последний раз. + Начало = СтрНайти(ПолныеИменаРегистровНачало, ПерваяТабличная); + ПолныеИменаРегистровНачало = Сред(ПолныеИменаРегистровНачало, Начало); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("СсылочныеОбъекты", СтрРазделитьСокрЛП(ПолныеИменаОбъектов, ",")); + Результат.Вставить("ТабличныеОбъектыВсе", СтрРазделитьСокрЛП(ПолныеИменаРегистров, ",")); + Результат.Вставить("ТабличныеОбъектыНачало", СтрРазделитьСокрЛП(ПолныеИменаРегистровНачало, ",")); + Результат.Вставить("СсылочныйИндекс", 0); + Результат.Вставить("ТабличныйИндекс", 0); + + Возврат Результат; + +КонецФункции + +// Получить следующую порцию параметров обхода данных для обновления. +// +// Параметры: +// ПараметрыОбхода - Структура - см. ПараметрыОбходаДанныхДляОбновления(). +// +// Возвращаемое значение: +// * Структура - параметры обхода текущей итерации в виде структуры со следующими полями: +// ** СсылочныйОбъект - Строка - имя ссылочного объекта. +// ** ТабличныйОбъект - Строка - имя табличного объекта. +// * Неопределено - если обход закончен. +// +Функция ТекущиеПараметрыОбхода(ПараметрыОбхода) + + Если ПараметрыОбхода.СсылочныйИндекс < ПараметрыОбхода.СсылочныеОбъекты.Количество() Тогда + Если ПараметрыОбхода.СсылочныйИндекс = 0 Тогда + ТабличныеОбъекты = ПараметрыОбхода.ТабличныеОбъектыНачало; + Иначе + ТабличныеОбъекты = ПараметрыОбхода.ТабличныеОбъектыВсе; + КонецЕсли; + + Если ПараметрыОбхода.ТабличныйИндекс < ТабличныеОбъекты.Количество() Тогда + СсылочныйОбъект = ПараметрыОбхода.СсылочныеОбъекты[ПараметрыОбхода.СсылочныйИндекс]; + ТабличныйОбъект = ТабличныеОбъекты[ПараметрыОбхода.ТабличныйИндекс]; + + Результат = Новый Структура; + Результат.Вставить("СсылочныйОбъект", СсылочныйОбъект); + Результат.Вставить("ТабличныйОбъект", ТабличныйОбъект); + Результат.Вставить("СсылочныйИндекс", ПараметрыОбхода.СсылочныйИндекс); + Результат.Вставить("ТабличныйИндекс", ПараметрыОбхода.ТабличныйИндекс); + + Возврат Результат; + КонецЕсли; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Перейти к следующим параметрам выборки, если не было выбрано ни одной записи с текущими параметрами. +// +// Параметры: +// ПараметрыОбхода - Структура - см. ПараметрыОбходаДанныхДляОбновления(). +// ПолнаяВыборка - Булево - Истина, если выбрано максимум записей. +// +Процедура СледующиеПараметрыОбхода(ПараметрыОбхода, ПолнаяВыборка) + + Если Не ПолнаяВыборка Тогда + Если ПараметрыОбхода.СсылочныйИндекс = 0 Тогда + ТабличныеОбъекты = ПараметрыОбхода.ТабличныеОбъектыНачало; + Иначе + ТабличныеОбъекты = ПараметрыОбхода.ТабличныеОбъектыВсе; + КонецЕсли; + + Если ПараметрыОбхода.ТабличныйИндекс = ТабличныеОбъекты.ВГраница() Тогда + ПараметрыОбхода.ТабличныйИндекс = 0; + ПараметрыОбхода.СсылочныйИндекс = ПараметрыОбхода.СсылочныйИндекс + 1; + Иначе + ПараметрыОбхода.ТабличныйИндекс = ПараметрыОбхода.ТабличныйИндекс + 1; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Получить поля упорядочивания для заданных параметров поиска порции. +// +// Параметры: +// ПараметрыПоиска - Структура - см. НовыеПараметрыПоискаПорции(). +// +// Возвращаемое значение: +// Строка - Массив - поля упорядочивания. +// +Функция ПоляУпорядочиванияПриПоискеПорций(ПараметрыПоиска) + + ПараметрыВыборки = ПараметрыПоиска.ПараметрыВыборки; + Возврат ?(ПараметрыПоиска.ФорсироватьОбновление, + ПараметрыВыборки.ПоляУпорядочиванияПриОбработкеДанных, + ПараметрыВыборки.ПоляУпорядочиванияПриРаботеПользователей); + +КонецФункции + +// Определить, есть ли упорядочивание по полям присоединяемых таблиц. +// +// Параметры: +// ПоляУпорядочивания - Массив - поля упорядочивания. +// +// Возвращаемое значение: +// Булево - Истина, если есть упорядочивание по полям присоединяемых таблиц. +// +Функция ЕстьУпорядочиваниеПоВнешнимТаблицам(ПоляУпорядочивания) + + Для каждого ПолеУпорядочивания Из ПоляУпорядочивания Цикл + Если СтрНайти(ПолеУпорядочивания, ".") > 0 Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Получить результат поиска, разбить его на порции и запустить потоки обновления. +// +// Параметры: +// ПараметрыПоиска - Структура - см. НовыеПараметрыПоискаПорции(). +// АдресРезультата - Строка - адрес результата выполнения НайтиПорциюДляОбновления(). +// СведенияОбОбновлении - Структура - см. НовыеСведенияОбОбновлении(). +// +Процедура ЗавершитьПоискПорцииДляОбновления(ПараметрыПоиска, АдресРезультата, СведенияОбОбновлении) Экспорт + + РезультатПоиска = ПолучитьИзВременногоХранилища(АдресРезультата); + ОписаниеПотоков = СведенияОбОбновлении.ОписаниеПотоков; + КонтекстОбработчика = ПараметрыПоиска.КонтекстОбработчика; + ОписаниеПроцедурыЗаполнения = СведенияОбОбновлении.ОбрабатываемыеДанные[КонтекстОбработчика.ИмяОбработчика]; + ПорцииДляОбновления = ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления; + ИдентификаторПорции = ПараметрыПоиска.ИдентификаторПорции; + ЕстьИдентификатор = ИдентификаторПорции <> Неопределено; + СтараяПорция = ?(ЕстьИдентификатор, ПорцииДляОбновления.Найти(ИдентификаторПорции, "Идентификатор"), Неопределено); + ЭтоПервыйПоиск = ПараметрыПоиска.ПоследняяВыбраннаяЗапись = Неопределено + И ПараметрыПоиска.ПерваяЗапись = Неопределено + И ПараметрыПоиска.ПоследняяЗапись = Неопределено; + ЭтоПовторныйПоиск = ПараметрыПоиска.ПерваяЗапись <> Неопределено + И ПараметрыПоиска.ПоследняяЗапись <> Неопределено; + + Если ЭтоПервыйПоиск Тогда + СохранитьРезультатПервогоПоиска(РезультатПоиска, ОписаниеПроцедурыЗаполнения); + ПорцииДляОбновления = ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления; + ИначеЕсли ЭтоПовторныйПоиск Тогда + СохранитьРезультатПовторногоПоиска(РезультатПоиска, ОписаниеПроцедурыЗаполнения, ИдентификаторПорции); + Иначе + СохранитьРезультатПоиска(РезультатПоиска, ОписаниеПроцедурыЗаполнения); + КонецЕсли; + + Если РезультатПоиска.Количество > 0 Тогда + МаксимумПотоков = КоличествоПотоковОбновленияИнформационнойБазы(); + СвободныхПотоков = МаксимумПотоков - ОписаниеПотоков.Потоки.Количество() + 1; + Фрагменты = РазбитьРезультатПоискаНаФрагменты(РезультатПоиска, СвободныхПотоков); + КоличествоФрагментов = Фрагменты.Количество(); + + Для НомерФрагмента = 0 По КоличествоФрагментов - 1 Цикл + Фрагмент = Фрагменты[НомерФрагмента]; + ЕстьСтараяПорция = (НомерФрагмента = 0 И СтараяПорция <> Неопределено); + + Если ЕстьСтараяПорция Тогда + Порция = СтараяПорция; + Фрагмент.Идентификатор = Порция.Идентификатор; + Иначе + Порция = ПорцииДляОбновления.Добавить(); + Порция.Идентификатор = Фрагмент.Идентификатор; + КонецЕсли; + + Порция.ПерваяЗапись = Фрагмент.ПерваяЗапись; + Порция.ПоследняяЗапись = Фрагмент.ПоследняяЗапись; + Порция.Обрабатывается = Истина; + + ОбработатьФрагментДанныхВПотоке(Фрагмент, ОписаниеПотоков, КонтекстОбработчика); + КонецЦикла; + Иначе + Фрагмент = НоваяПорцияДляОбновления(); + Фрагмент.НаборДанных = НовыйНаборДанныхДляОбновления(); + ОбработатьФрагментДанныхВПотоке(Фрагмент, ОписаниеПотоков, КонтекстОбработчика); + КонецЕсли; + + ОписаниеПроцедурыЗаполнения.ВыполняетсяПоискПорции = Ложь; + +КонецПроцедуры + +// Обработчик аварийного завершения выполнения потока поиска порции для обновления. +// +// Параметры: +// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// ИнформацияОбОшибке - ИнформацияОбОшибке - описание возникшей ошибки. +// СведенияОбОбновлении - Структура - см. НовыеСведенияОбОбновлении(). +// +Процедура ПриАварийномЗавершенииПотокаПоискаПорцииДляОбновления(Поток, ИнформацияОбОшибке, СведенияОбОбновлении) Экспорт + + Описание = СведенияОбОбновлении.ОбрабатываемыеДанные[Поток.ПараметрыПроцедуры.ИмяОбработчика]; + Описание.ВыполняетсяПоискПорции = Ложь; + +КонецПроцедуры + +// Обработчик отмены выполнения потока поиска порции для обновления. +// +// Параметры: +// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// СведенияОбОбновлении - Структура - см. НовыеСведенияОбОбновлении(). +// +Процедура ПриОтменеПотокаПоискаПорцииДляОбновления(Поток, СведенияОбОбновлении) Экспорт + + Описание = СведенияОбОбновлении.ОбрабатываемыеДанные[Поток.ПараметрыПроцедуры.ИмяОбработчика]; + Описание.ВыполняетсяПоискПорции = Ложь; + +КонецПроцедуры + +// Завершить обработку данных многопоточного обработчика обновления. +// Удалить обработанную порцию данных. +// +// Параметры: +// КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). +// СведенияОбОбновлении - Структура - см. НовыеСведенияОбОбновлении(). +// +Процедура ЗавершитьВыполнениеМногопоточногоОбработчика(КонтекстОбработчика, СведенияОбОбновлении) + + ОписаниеПроцедурыЗаполнения = СведенияОбОбновлении.ОбрабатываемыеДанные[КонтекстОбработчика.ИмяОбработчика]; + ПорцииДляОбновления = ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления; + + Если ПорцииДляОбновления <> Неопределено Тогда + ОбновляемыеДанные = КонтекстОбработчика.Параметры.ОбновляемыеДанные; + + Если ОбновляемыеДанные <> Неопределено Тогда + Порция = ПорцииДляОбновления.Найти(ОбновляемыеДанные.Идентификатор, "Идентификатор"); + + Если Порция <> Неопределено Тогда + ПорцииДляОбновления.Удалить(Порция); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Отменить обработку данных многопоточного обработчика обновления. +// Отметить, что найденную порцию данных нужно будет обрабатывать повторно. +// +// Параметры: +// Поток - СтрокаТаблицыЗначений - описание потока (см. НовоеОписаниеПотоков()). +// ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. +// СведенияОбОбновлении - Структура - см. НовыеСведенияОбОбновлении(). +// +Процедура ОтменитьОбработкуДанныхМногопоточногоОбработчика(Поток, ОбработчикОбновления, СведенияОбОбновлении) + + ОписаниеПроцедурыЗаполнения = СведенияОбОбновлении.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; + ПорцииДляОбновления = ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления; + + Если ПорцииДляОбновления <> Неопределено Тогда + ОбновляемыеДанные = Поток.ПараметрыПроцедуры.Параметры.ОбновляемыеДанные; + + Если ОбновляемыеДанные <> Неопределено Тогда + Порция = ПорцииДляОбновления.Найти(ОбновляемыеДанные.Идентификатор, "Идентификатор"); + + Если Порция <> Неопределено Тогда + Порция.Обрабатывается = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Сохранить результат первого поиска данных для многопоточного обработчика. +// +// Параметры: +// РезультатПоиска - Структура - см. НовыйРезультатПоискаПорции(). +// ОписаниеПроцедурыЗаполнения - Структура - см. НовоеОписаниеОбрабатываемыхДанных(). +// +Процедура СохранитьРезультатПервогоПоиска(РезультатПоиска, ОписаниеПроцедурыЗаполнения) + + Если РезультатПоиска.Количество > 0 Тогда + ПоследняяВыбраннаяЗапись = КлючЗаписиПоследнейСтрокиНабораДанных(РезультатПоиска.НаборДанных); + ОписаниеПроцедурыЗаполнения.ПоследняяВыбраннаяЗапись = ПоследняяВыбраннаяЗапись; + + Если ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления = Неопределено Тогда + ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления = НоваяТаблицаПорцийДляОбновления(); + КонецЕсли; + Иначе + ОписаниеПроцедурыЗаполнения.ПоследняяВыбраннаяЗапись = Неопределено; + КонецЕсли; + + ОписаниеПроцедурыЗаполнения.ПоискЗавершен = РезультатПоиска.ПоискЗавершен; + +КонецПроцедуры + +// Сохранить результат повторного (после ошибки) поиска данных для многопоточного обработчика. +// +// Параметры: +// РезультатПоиска - Структура - см. НовыйРезультатПоискаПорции(). +// ОписаниеПроцедурыЗаполнения - Структура - см. НовоеОписаниеОбрабатываемыхДанных(). +// ИдентификаторПорции - УникальныйИдентификатор - идентификатор порции для которой искались данные. +// +Процедура СохранитьРезультатПовторногоПоиска(РезультатПоиска, ОписаниеПроцедурыЗаполнения, ИдентификаторПорции) + + Если РезультатПоиска.Количество = 0 Тогда + ПорцииДляОбновления = ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления; + Порция = ПорцииДляОбновления.Найти(ИдентификаторПорции, "Идентификатор"); + ПорцииДляОбновления.Удалить(Порция); + КонецЕсли; + + ОписаниеПроцедурыЗаполнения.ПоискЗавершен = РезультатПоиска.ПоискЗавершен; + +КонецПроцедуры + +// Сохранить результат поиска данных для многопоточного обработчика. +// +// Параметры: +// РезультатПоиска - Структура - см. НовыйРезультатПоискаПорции(). +// ОписаниеПроцедурыЗаполнения - Структура - см. НовоеОписаниеОбрабатываемыхДанных(). +// +Процедура СохранитьРезультатПоиска(РезультатПоиска, ОписаниеПроцедурыЗаполнения) + + Если РезультатПоиска.Количество > 0 Тогда + ПоследняяВыбраннаяЗапись = КлючЗаписиПоследнейСтрокиНабораДанных(РезультатПоиска.НаборДанных); + ОписаниеПроцедурыЗаполнения.ПоследняяВыбраннаяЗапись = ПоследняяВыбраннаяЗапись; + КонецЕсли; + + ОписаниеПроцедурыЗаполнения.ПоискЗавершен = РезультатПоиска.ПоискЗавершен; + +КонецПроцедуры + +// Разбить найденные данные на указанное количество порций. +// +// Параметры: +// РезультатПоиска - Структура - см. НовыйРезультатПоискаПорции(). +// КоличествоФрагментов - Число - количество фрагментов на которые нужно разбить данные. +// +// Возвращаемое значение: +// НаборПорций - см. НовыйНаборПорцийДляОбновления(). +// +Функция РазбитьРезультатПоискаНаФрагменты(РезультатПоиска, Знач КоличествоФрагментов) + + Фрагменты = НовыйНаборПорцийДляОбновления(); + НайденныйНаборДанных = РезультатПоиска.НаборДанных; + КоличествоНайденных = РезультатПоиска.Количество; + КоличествоФрагментов = ?(КоличествоНайденных < КоличествоФрагментов, 1, КоличествоФрагментов); + МаксимальныйРазмерПорции = Цел(КоличествоНайденных / КоличествоФрагментов); + КоличествоОбработанных = 0; + + Для НомерФрагмента = 1 По КоличествоФрагментов Цикл // Разбивка идет с конца найденного набора данных. + Фрагмент = НоваяПорцияДляОбновления(); + Фрагмент.Идентификатор = Новый УникальныйИдентификатор; + Фрагмент.НаборДанных = НовыйНаборДанныхДляОбновления(); + Фрагмент.ПоследняяЗапись = КлючЗаписиПоследнейСтрокиНабораДанных(НайденныйНаборДанных); + Фрагменты.Вставить(0, Фрагмент); + ИндексНабораДанных = НайденныйНаборДанных.Количество() - 1; + КоличествоСвободных = ?(НомерФрагмента = КоличествоФрагментов, + КоличествоНайденных - КоличествоОбработанных, + МаксимальныйРазмерПорции); + + Пока ИндексНабораДанных >= 0 Цикл + ТекущаяСтрокаДанных = НайденныйНаборДанных[ИндексНабораДанных]; + ТекущиеДанные = ТекущаяСтрокаДанных.Данные; + ТекущееКоличество = ТекущиеДанные.Количество(); + ДанныеФрагмента = Фрагмент.НаборДанных.Добавить(); + + Если ТекущееКоличество <= КоличествоСвободных Тогда + ЗаполнитьЗначенияСвойств(ДанныеФрагмента, ТекущаяСтрокаДанных); + НайденныйНаборДанных.Удалить(ИндексНабораДанных); + КоличествоСвободных = КоличествоСвободных - ТекущееКоличество; + КоличествоОбработанных = КоличествоОбработанных + ТекущееКоличество; + Иначе + ЗаполнитьЗначенияСвойств(ДанныеФрагмента, ТекущаяСтрокаДанных, "СсылочныйОбъект, ТабличныйОбъект"); + НачалоВырезки = ТекущееКоличество - КоличествоСвободных; + ДанныеФрагмента.Данные = ВырезатьСтрокиИзТаблицыЗначений(ТекущиеДанные, НачалоВырезки, КоличествоСвободных); + КоличествоОбработанных = КоличествоОбработанных + КоличествоСвободных; + КоличествоСвободных = 0; + КонецЕсли; + + Если КоличествоСвободных = 0 Тогда + Прервать; + Иначе + ИндексНабораДанных = ИндексНабораДанных - 1; + КонецЕсли; + КонецЦикла; + + Фрагмент.ПерваяЗапись = КлючЗаписиПервойСтрокиНабораДанных(Фрагмент.НаборДанных); + КонецЦикла; + + Возврат Фрагменты; + +КонецФункции + +// Вырезать фрагмент таблицы значений в новую таблицу значений. +// +// Параметры: +// Таблица - ТаблицаЗначений - таблица из которой вырезаются строки. +// Начало - Число - индекс первой вырезаемой строки. +// Количество - Число - количество вырезаемых строк. +// +// Возвращаемое значение: +// ТаблицаЗначений - вырезанные строки в виде новой таблицы значений. +// +Функция ВырезатьСтрокиИзТаблицыЗначений(Таблица, Начало, Количество) + + НоваяТаблица = Таблица.СкопироватьКолонки(); + Индекс = Начало + Количество - 1; + + Пока Индекс >= Начало Цикл + НоваяСтрока = НоваяТаблица.Добавить(); + СтараяСтрока = Таблица[Индекс]; + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтараяСтрока); + Таблица.Удалить(СтараяСтрока); + Индекс = Индекс - 1; + КонецЦикла; + + Возврат НоваяТаблица; + +КонецФункции + +// Определяет, есть ли в обработчике порции, которые можно было бы обновить в новом потоке. +// +// Параметры: +// ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. +// СведенияОбОбновлении - Структура - см. НовыеСведенияОбОбновлении(). +// +Функция ЕстьПорцииДляОбновления(ОбработчикОбновления, СведенияОбОбновлении) + + Описание = СведенияОбОбновлении.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; + + Если Описание.ВыполняетсяПоискПорции Тогда + Возврат Ложь; + Иначе + Если Описание.ПорцииДляОбновления <> Неопределено И Описание.ПорцииДляОбновления.Количество() > 0 Тогда + Для каждого Порция Из Описание.ПорцииДляОбновления Цикл + Если Не Порция.Обрабатывается Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; + КонецЕсли; + +КонецФункции + +// Получить ключ записи первой строки набора данных. +// +// Параметры: +// НаборДанных - ТаблицаЗначений - см. НовыйНаборДанныхДляОбновления(). +// +// Возвращаемое значение: +// СписокЗначений - ключ записи. +// +Функция КлючЗаписиПервойСтрокиНабораДанных(НаборДанных) + + ПерваяСтрокаДанных = НаборДанных[0]; + Возврат НовыйКлючЗаписиИзТаблицыДанных(ПерваяСтрокаДанных.СсылочныйОбъект, + ПерваяСтрокаДанных.ТабличныйОбъект, + ПерваяСтрокаДанных.Данные, + 0); + +КонецФункции + +// Получить ключ записи последней строки набора данных. +// +// Параметры: +// НаборДанных - ТаблицаЗначений - см. НовыйНаборДанныхДляОбновления(). +// +// Возвращаемое значение: +// СписокЗначений - ключ записи. +// +Функция КлючЗаписиПоследнейСтрокиНабораДанных(НаборДанных) + + ПоследняяСтрокаДанных = НаборДанных[НаборДанных.Количество() - 1]; + Возврат НовыйКлючЗаписиИзТаблицыДанных(ПоследняяСтрокаДанных.СсылочныйОбъект, + ПоследняяСтрокаДанных.ТабличныйОбъект, + ПоследняяСтрокаДанных.Данные, + ПоследняяСтрокаДанных.Данные.Количество() - 1); + +КонецФункции + +// Таблица с описанием порций обновляемых данных. +// +// Возвращаемое значение: +// ТаблицаЗначений - описание порций со следующей структурой: +// * Идентификатор - УникальныйИдентификатор - идентификатор порции. +// * ПерваяЗапись - СписокЗначений - первая запись в порции, где: +// ** Представление - Строка - имя поля. +// ** Значение - Произвольный - значение поля ключа. +// * ПоследняяЗапись - СписокЗначений - последняя запись в порции, где: +// ** Представление - Строка - имя поля. +// ** Значение - Произвольный - значение поля ключа. +// * Обрабатывается - Булево - Истина, если запущен поток обновления данных. +// +Функция НоваяТаблицаПорцийДляОбновления() + + Таблица = Новый ТаблицаЗначений; + Колонки = Таблица.Колонки; + Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); + Колонки.Добавить("ПерваяЗапись", Новый ОписаниеТипов("СписокЗначений")); + Колонки.Добавить("ПоследняяЗапись", Новый ОписаниеТипов("СписокЗначений")); + Колонки.Добавить("Обрабатывается", Новый ОписаниеТипов("Булево")); + Таблица.Индексы.Добавить("Идентификатор"); + + Возврат Таблица; + +КонецФункции + +// Описание обрабатываемых данных обработчика обновления (для СведенияОбОбновлении.ОбрабатываемыеДанные). +// +// Параметры: +// Многопоточное - Булево - Истина, если используется для многопоточного обработчика обновления. +// Фоновое - Булево - Истина, если используется для ЗаполнитьДанныеОтложенногоОбработчика(). +// +// Возвращаемое значение: +// Структура - описание со следующими полями: +// * ДанныеОбработчика - Соответствие - данные регистрируемые и обрабатываемые обработчиком обновления. +// * ВыполняетсяПоискПорции - Булево - признак наличия потока, выполняющего поиск порции данных для обновления. +// * ПараметрыВыборки - Структура - см. +// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(). +// * ПорцииДляОбновления - ТаблицаЗначений - см. НоваяТаблицаПорцийДляОбновления(). +// * ПоследняяВыбраннаяЗапись - СписокЗначений - описание начала отбора при страничной выборке: +// ** Представление - Строка - имя поля. +// ** Значение - Произвольный - значение поля. +// * ПоискЗавершен - Булево - Истина, поиск больше выполняться не будет (завершен). +// * ОбработкаЗавершена - Булево - признак завершения обработки, заполняемый обработчиком обновления. +// * ИмяОбработчика - Строка - имя обработчика обновления. +// * Очередь - Число - номер очереди обработчика обновления. +// * ПроцедураЗаполнения - Строка - имя процедуры заполнения данных для обновления. +// * Статус - Строка - статус обработки данных. +// +Функция НовоеОписаниеОбрабатываемыхДанных(Многопоточное = Ложь, Фоновое = Ложь) Экспорт + + Описание = Новый Структура; + Описание.Вставить("ДанныеОбработчика"); + + Если Многопоточное Тогда + Описание.Вставить("ВыполняетсяПоискПорции", Ложь); + Описание.Вставить("ПараметрыВыборки"); + Описание.Вставить("ПорцииДляОбновления"); + Описание.Вставить("ПоследняяВыбраннаяЗапись"); + Описание.Вставить("ПоискЗавершен", Ложь); + КонецЕсли; + + Если Фоновое Тогда + Описание.Вставить("ИмяОбработчика"); + Описание.Вставить("Очередь"); + Описание.Вставить("ПроцедураЗаполнения"); + Описание.Вставить("Статус"); + КонецЕсли; + + Возврат Описание; + +КонецФункции + +// Отбор для процедуры НайтиПорциюДляОбновления(). +// Если заполнена ПоследняяВыбраннаяЗапись, то выполняется поиск первых 10000 записей после нее. +// Иначе выполняется поиск записей между ПерваяЗапись и ПоследняяЗапись. +// +// Возвращаемое значение: +// Структура - отбор со следующими полями: +// * ИдентификаторПорции - УникальныйИдентификатор - идентификатор порции для которой ищутся данные. +// * КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). +// * ПоследняяВыбраннаяЗапись - СписокЗначений - описание начала отбора при страничной выборке: +// ** Представление - Строка - имя поля. +// ** Значение - Произвольный - значение поля. +// * ПерваяЗапись - СписокЗначений - первая запись в порции, где: +// ** Представление - Строка - имя поля. +// ** Значение - Произвольный - значение поля ключа. +// * ПоследняяЗапись - СписокЗначений - последняя запись в порции, где: +// ** Представление - Строка - имя поля. +// ** Значение - Произвольный - значение поля ключа. +// * ПараметрыВыборки - Структура - см. +// ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(). +// * Очередь - Число - номер очереди обработчика. +// +Функция НовыеПараметрыПоискаПорции() + + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("ИдентификаторПорции"); + ПараметрыПоиска.Вставить("ИмяОбработчика"); + ПараметрыПоиска.Вставить("КонтекстОбработчика"); + ПараметрыПоиска.Вставить("ПоследняяВыбраннаяЗапись"); + ПараметрыПоиска.Вставить("ПерваяЗапись"); + ПараметрыПоиска.Вставить("ПоследняяЗапись"); + ПараметрыПоиска.Вставить("ПараметрыВыборки"); + ПараметрыПоиска.Вставить("Очередь"); + ПараметрыПоиска.Вставить("ФорсироватьОбновление", Ложь); + + Возврат ПараметрыПоиска; + +КонецФункции + +// Ключ записи порции данных. +// +// Параметры: +// СсылочныйОбъект - Строка - полное имя объекта метаданных ссылочного типа. +// ТабличныйОбъект - Строка - полное имя объекта метаданных табличного типа. +// +// Возвращаемое значение: +// СписокЗначений - ключ записи. +// +Функция НовыйКлючЗаписи(СсылочныйОбъект, ТабличныйОбъект) + + КлючЗаписи = Новый СписокЗначений; + КлючЗаписи.Добавить(СсылочныйОбъект); + КлючЗаписи.Добавить(ТабличныйОбъект); + + Возврат КлючЗаписи; + +КонецФункции + +// Ключ записи порции из таблицы с данными. +// +// Параметры: +// СсылочныйОбъект - Строка - полное имя объекта метаданных ссылочного типа. +// ТабличныйОбъект - Строка - полное имя объекта метаданных табличного типа. +// Данные - ТаблицаЗначений - данные порции. +// Индекс - Число - индекс строки данных для формирования ключа. +// +// Возвращаемое значение: +// СписокЗначений - ключ записи. +// +Функция НовыйКлючЗаписиИзТаблицыДанных(СсылочныйОбъект, ТабличныйОбъект, Данные, Индекс) + + КлючЗаписи = НовыйКлючЗаписи(СсылочныйОбъект, ТабличныйОбъект); + Строка = Данные[Индекс]; + + Для каждого Колонка Из Данные.Колонки Цикл + ИмяКолонки = Колонка.Имя; + КлючЗаписи.Добавить(Строка[ИмяКолонки], ИмяКолонки); + КонецЦикла; + + Возврат КлючЗаписи; + +КонецФункции + +// Таблица значений с описанием данных для обновления. +// Является результатом поиска данных для обновления. +// +// Возвращаемое значение: +// ТаблицаЗначений - описание порций со следующей структурой: +// * СсылочныйОбъект - Строка - имя ссылочного объекта метаданных (может быть Неопределено). +// * ТабличныйОбъект - Строка - имя табличного объекта метаданных (может быть Неопределено). +// * Данные - ТаблицаЗначений - выборка из СУБД в виде таблицы значений. +// +Функция НовыйНаборДанныхДляОбновления() + + НаборДанных = Новый ТаблицаЗначений; + Колонки = НаборДанных.Колонки; + Колонки.Добавить("СсылочныйОбъект", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("ТабличныйОбъект", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("Данные", Новый ОписаниеТипов("ТаблицаЗначений")); + + Возврат НаборДанных; + +КонецФункции + +// Массив описаний порций данных для обновления. +// Является результатом разбиения найденных данных на фрагменты. +// +// Возвращаемое значение: +// Массив - массив структур (см. НоваяПорцияДляОбновления()). +// +Функция НовыйНаборПорцийДляОбновления() + + Возврат Новый Массив; + +КонецФункции + +// Описание порции данных для обновления. +// +// Возвращаемое значение: +// Структура - описание порции со следующей структурой: +// * Идентификатор - УникальныйИдентификатор - идентификатор порции. +// * ПерваяЗапись - СписокЗначений - ключ первой записи порции (см. НовыйКлючЗаписиИзДанныхПорции()). +// * ПоследняяЗапись - СписокЗначений - ключ последней записи порции (см. НовыйКлючЗаписиИзДанныхПорции()). +// * НаборДанных - ТаблицаЗначений - набор данных для обновления (см. НовыйНаборДанныхДляОбновления()). +// +Функция НоваяПорцияДляОбновления() + + Порция = Новый Структура; + Порция.Вставить("Идентификатор"); + Порция.Вставить("ПерваяЗапись"); + Порция.Вставить("ПоследняяЗапись"); + Порция.Вставить("НаборДанных"); + + Возврат Порция; + +КонецФункции + +// Результат выполнения поиска порции. +// +// Возвращаемое значение: +// Структура - результат поиска со следующими полями: +// Количество - Число - количество выбранных записей. +// НаборДанных - ТаблицаЗначений - см. НовыйНаборДанныхДляОбновления(). +// ПоискЗавершен - Булево - Истина, если искать больше нечего. +// +Функция НовыйРезультатПоискаПорции() + + РезультатПоиска = Новый Структура; + РезультатПоиска.Вставить("Количество", 0); + РезультатПоиска.Вставить("НаборДанных"); + РезультатПоиска.Вставить("ПоискЗавершен", Ложь); + + Возврат РезультатПоиска; + +КонецФункции + +// Найти первую не обработанную порцию (обработка которой завершилась аварийно). +// +// Параметры: +// ПорцииДляОбновления - ТаблицаЗначений - см. НоваяТаблицаПорцийДляОбновления(). +// +// Возвращаемое значение: +// * СтрокаТаблицыЗначений - найденная порция. +// * Неопределено - если необработанных порций нет. +// +Функция ПерваяНеобработаннаяПорция(ПорцииДляОбновления) + + Если ПорцииДляОбновления <> Неопределено Тогда + Для каждого Порция Из ПорцииДляОбновления Цикл + Если Не Порция.Обрабатывается Тогда + Возврат Порция; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Аналог СтрРазделить, дополненный тем, что фрагменты сокращены слева и справа. +// +// Параметры: +// Строка - Строка - разделяемая строка. +// Разделитель - Строка - разделитель элементов строки. +// ВключатьПустые - Булево - Истина, если в результат попадают пустые строки. +// +// Возвращаемое значение: +// Массив - элементы строки, разбитые по разделителю. +// +Функция СтрРазделитьСокрЛП(Строка, Разделитель, ВключатьПустые = Истина) + + Массив = СтрРазделить(Строка, Разделитель, ВключатьПустые); + + Для Индекс = 0 По Массив.ВГраница() Цикл + Массив[Индекс] = СокрЛП(Массив[Индекс]); + КонецЦикла; + + Возврат Массив; + +КонецФункции + +// Определяет, является ли описание обработчика многопоточным. +// +// Возвращаемое значение: +// Булево - Истина, если описание многопоточное. +// +Функция ЭтоОписаниеДанныхМногопоточногоОбработчика(Описание) + + Возврат Описание.Свойство("ПорцииДляОбновления"); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ @@ -3387,7 +4620,7 @@ |ГДЕ | Пользователи.Служебный = ЛОЖЬ | И Пользователи.ИдентификаторПользователяИБ <> &ПустойИдентификатор"; - Запрос.УстановитьПараметр("ПустойИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.УстановитьПараметр("ПустойИдентификатор", ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -3870,7 +5103,7 @@ Процедура ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, НазваниеОбработчика) - ИмяСобытия = СобытиеЖурналаРегистрации() + "." + НСтр("ru = 'Выполнение обработчиков'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ИмяСобытия = СобытиеЖурналаРегистрации() + "." + НСтр("ru = 'Выполнение обработчиков'", ОбщегоНазначения.КодОсновногоЯзыка()); Если ТранзакцияАктивнаНаНачалоВыполнения Тогда Если ТранзакцияАктивна() Тогда @@ -4257,13 +5490,13 @@ Процедура ЗаписатьИнформацию(Знач Текст) - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,, Текст); + ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,, Текст); КонецПроцедуры Процедура ЗаписатьОшибку(Знач Текст) - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Текст); + ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Текст); КонецПроцедуры @@ -4495,7 +5728,6 @@ Процедура ПроверитьОтложенныеОбработчики(ПроверяемыеОбработчики, Библиотека, НеобходимоСохранитьНевыполненныеОбработчики) Для Каждого ПроверяемыйОбработчик Из ПроверяемыеОбработчики Цикл - ОбработчикПереименован = Ложь; Если Не ЗначениеЗаполнено(ПроверяемыйОбработчик.Идентификатор) Тогда НайденныйОбработчик = Библиотека.Обработчики.Найти(ПроверяемыйОбработчик.ИмяОбработчика, "Процедура"); Если НайденныйОбработчик <> Неопределено Тогда @@ -4689,8 +5921,53 @@ АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено); Попытка - ВыполнитьОтложенныйОбработчик(КонтекстОбработчика, АдресРезультата); - ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата, СведенияОбОбновлении); + Если ОбработчикОбновления.Многопоточный Тогда + ДополнитьКонтекстМногопоточногоОбработчика(КонтекстОбработчика); + ОбрабатываемыеДанные = СведенияОбОбновлении.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; + ПараметрыВыборки = ОбрабатываемыеДанные.ПараметрыВыборки; + ПараметрыВыборки.МаксимумВыборки = ОбновлениеИнформационнойБазы.МаксимальноеКоличествоЗаписейВВыборке(); + ПараметрыПоиска = НовыеПараметрыПоискаПорции(); + ПараметрыПоиска.ПараметрыВыборки = ПараметрыВыборки; + ПараметрыПоиска.ПоследняяВыбраннаяЗапись = ОбрабатываемыеДанные.ПоследняяВыбраннаяЗапись; + ПараметрыОбхода = ПараметрыОбходаДанныхДляОбновления(ПараметрыПоиска); + Очередь = КонтекстОбработчика.Параметры.Очередь; + ИтераторОбхода = ТекущиеПараметрыОбхода(ПараметрыОбхода); + ДополнительныеИсточникиДанных = ПараметрыВыборки.ДополнительныеИсточникиДанных; + + Пока ИтераторОбхода <> Неопределено Цикл + СсылочныйОбъект = ИтераторОбхода.СсылочныйОбъект; + ТабличныйОбъект = ИтераторОбхода.ТабличныйОбъект; + НаборДанных = НовыйНаборДанныхДляОбновления(); + ЗаписьДанных = НаборДанных.Добавить(); + ПараметрыВыборки.ДополнительныеИсточникиДанных = ОбновлениеИнформационнойБазы.ИсточникиДанных( + ДополнительныеИсточникиДанных, + СсылочныйОбъект, + ТабличныйОбъект); + ЗаписьДанных.Данные = ВыбратьДанныеПорции(ПараметрыВыборки, Очередь, СсылочныйОбъект, ТабличныйОбъект); + ЗаписьДанных.СсылочныйОбъект = СсылочныйОбъект; + ЗаписьДанных.ТабличныйОбъект = ТабличныйОбъект; + ОбновляемыеДанные = НоваяПорцияДляОбновления(); + ОбновляемыеДанные.НаборДанных = НаборДанных; + КонтекстОбработчика.Параметры.ОбновляемыеДанные = ОбновляемыеДанные; + Количество = ЗаписьДанных.Данные.Количество(); + ВыполнитьОтложенныйОбработчик(КонтекстОбработчика, АдресРезультата); + ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата, СведенияОбОбновлении); + + Если Количество > 0 Тогда + ОбрабатываемыеДанные.ПоследняяВыбраннаяЗапись = КлючЗаписиПоследнейСтрокиНабораДанных(НаборДанных); + Иначе + ОбрабатываемыеДанные.ПоследняяВыбраннаяЗапись = Неопределено; + КонецЕсли; + + СледующиеПараметрыОбхода(ПараметрыОбхода, Количество = ПараметрыВыборки.МаксимумВыборки); + ИтераторОбхода = ТекущиеПараметрыОбхода(ПараметрыОбхода); + КонецЦикла; + + ПараметрыВыборки.ДополнительныеИсточникиДанных = ДополнительныеИсточникиДанных; + Иначе + ВыполнитьОтложенныйОбработчик(КонтекстОбработчика, АдресРезультата); + ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата, СведенияОбОбновлении); + КонецЕсли; Исключение ОбработатьИсключениеОбработчика(КонтекстОбработчика, ОбработчикОбновления, ИнформацияОбОшибке()); КонецПопытки; @@ -4721,6 +5998,10 @@ ТекущаяИтерацияОбновления = СведенияОбОбновлении.ТекущаяИтерацияОбновления; ТекущийЦиклОбновления = Неопределено; ЗавершеноУспешно = Истина; + ВыполняющийсяМногопоточныйОбработчик = Неопределено; + ЦиклОбновленияМногопоточногоОбработчика = Неопределено; + ОписаниеМногопоточногоОбработчика = Неопределено; + Пока Истина Цикл ЕстьНевыполненные = Ложь; ЕстьВыполняющиеся = Ложь; @@ -4754,6 +6035,14 @@ ОписаниеОбработчика.ИмяОбработчика); Если ОбработчикОбновления.Статус = "Выполняется" И Не ОбработчикОбновления.ОбработкаПорцииЗавершена Тогда + Если ОбработчикОбновления.Многопоточный Тогда + Если ЕстьПорцииДляОбновления(ОбработчикОбновления, СведенияОбОбновлении) Тогда + ВыполняющийсяМногопоточныйОбработчик = ОбработчикОбновления; + ЦиклОбновленияМногопоточногоОбработчика = ОписаниеЦиклаОбновления; + ОписаниеМногопоточногоОбработчика = ОписаниеОбработчика; + КонецЕсли; + КонецЕсли; + ЕстьВыполняющиеся = Истина; Продолжить; КонецЕсли; @@ -4763,16 +6052,16 @@ Продолжить; КонецЕсли; - Если ОбработчикОбновления.Статус = "Ошибка" Тогда - ЕстьОшибки = Истина; - Продолжить; - КонецЕсли; - - Если ОбработчикОбновления.ЧислоПопыток >= 3 - И ВсеОбработчикиЗациклились(СведенияОбОбновлении.ДеревоОбработчиков) Тогда - ОтметитьЗациклившиесяОбработчики(СведенияОбОбновлении.ДеревоОбработчиков); - ЕстьОшибки = Истина; - Продолжить; + МаксимумПопытокОбновления = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления); + Если ОбработчикОбновления.ЧислоПопыток >= МаксимумПопытокОбновления Тогда + Если ОбработчикОбновления.Статус = "Ошибка" Тогда + ЕстьОшибки = Истина; + Продолжить; + ИначеЕсли ВсеОбработчикиЗациклились(СведенияОбОбновлении) Тогда + ОтметитьЗациклившиесяОбработчики(СведенияОбОбновлении); + ЕстьОшибки = Истина; + Продолжить; + КонецЕсли; КонецЕсли; ТекущийЦиклОбновления = ОписаниеЦиклаОбновления; @@ -4780,7 +6069,7 @@ КонецЦикла; - Если ТекущийЦиклОбновления = Неопределено Тогда + Если ТекущийЦиклОбновления = Неопределено И ЦиклОбновленияМногопоточногоОбработчика = Неопределено Тогда Если ЕстьОшибки Тогда ОписаниеЦиклаОбновления.Вставить("ЗавершеноСОшибками"); ЗавершеноУспешно = Ложь; @@ -4788,6 +6077,11 @@ ОписаниеЦиклаОбновления.Вставить("ЕстьОстановленные"); КонецЕсли; Иначе + Если ТекущийЦиклОбновления = Неопределено И ЦиклОбновленияМногопоточногоОбработчика <> Неопределено Тогда + ОбработчикОбновления = ВыполняющийсяМногопоточныйОбработчик; + ТекущийЦиклОбновления = ЦиклОбновленияМногопоточногоОбработчика; + ОписаниеОбработчика = ОписаниеМногопоточногоОбработчика; + КонецЕсли; Прервать; КонецЕсли; КонецЕсли; @@ -4796,7 +6090,6 @@ КонецЦикла; Если ТекущийЦиклОбновления <> Неопределено Тогда - КоллекцияОбработчиков = ТекущийЦиклОбновления.Обработчики; Прервать; ИначеЕсли ЕстьНевыполненные Тогда ТекущаяИтерацияОбновления = ТекущаяИтерацияОбновления + 1; @@ -4840,7 +6133,7 @@ ПередЗапускомПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, ПараметрыОбновления, - ДеревоОбработчиков); + СведенияОбОбновлении); КонтекстОбработчика.ИдентификаторОбработчика = ОписаниеОбработчика.Идентификатор; КонтекстОбработчика.ИмяОбработчика = ОписаниеОбработчика.ИмяОбработчика; @@ -4882,7 +6175,12 @@ КонтекстОбработчика.ИмяОбработчика); Если ОбработчикОбновления.Статус = "Выполнено" Тогда - КоллекцияОбработчиков.Удалить(КоллекцияОбработчиков.Найти(ОписаниеОбработчика)); + Обработчик = КоллекцияОбработчиков.Найти(ОписаниеОбработчика); + + Если Обработчик <> Неопределено Тогда + КоллекцияОбработчиков.Удалить(КоллекцияОбработчиков.Найти(ОписаниеОбработчика)); + КонецЕсли; + СведенияОБлокируемыхОбъектах = СведенияОБлокируемыхОбъектах(); СведенияОбОбработчике = СведенияОБлокируемыхОбъектах.Обработчики[ОбработчикОбновления.ИмяОбработчика]; Если СведенияОбОбработчике <> Неопределено Тогда @@ -4894,7 +6192,10 @@ // обработчики каких очередей еще не завершились. Если ПараллельныйРежим Тогда Строка = ТекущийЦиклОбновления.ОчередьОбработчиков.Найти(ОбработчикОбновления.ИмяОбработчика, "Обработчик"); - ТекущийЦиклОбновления.ОчередьОбработчиков.Удалить(Строка); + + Если Строка <> Неопределено Тогда + ТекущийЦиклОбновления.ОчередьОбработчиков.Удалить(Строка); + КонецЕсли; КонецЕсли; ИначеЕсли ОбработчикОбновления.Статус = "Выполняется" Тогда @@ -4922,7 +6223,7 @@ // т.к. от данных, которые он обрабатывает, могут зависеть другие обработчики. Если ПараллельныйРежим И ОбработчикОбновления.Статус = "Ошибка" - И ОбработчикОбновления.ЧислоПопыток >= 3 Тогда + И ОбработчикОбновления.ЧислоПопыток >= МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) Тогда СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Ложь; ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); @@ -4942,7 +6243,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); Блокировка.Заблокировать(); НовыеСведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); @@ -4992,7 +6293,6 @@ СведенияОбОбновлении.Вставить("ОбрабатываемыеДанные", Новый Соответствие); СведенияОбОбновлении.Вставить("ТекущаяИтерацияОбновления", 1); СведенияОбОбновлении.Вставить("ПланОтложенногоОбновления"); - СведенияОбОбновлении.Вставить("ОписаниеПроцедурЗаполнения"); СведенияОбОбновлении.Вставить("СеансОбновления"); СведенияОбОбновлении.Вставить("ОписаниеПотоков"); @@ -5025,6 +6325,7 @@ ДеревоОбработчиков.Колонки.Добавить("ЗапускатьТолькоВГлавномУзле", Новый ОписаниеТипов("Булево")); ДеревоОбработчиков.Колонки.Добавить("ЗапускатьИВПодчиненномУзлеРИБСФильтрами", Новый ОписаниеТипов("Булево")); ДеревоОбработчиков.Колонки.Добавить("ОбработкаПорцииЗавершена", Новый ОписаниеТипов("Булево")); + ДеревоОбработчиков.Колонки.Добавить("Многопоточный", Новый ОписаниеТипов("Булево")); Возврат ДеревоОбработчиков; @@ -5079,11 +6380,12 @@ // КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). // ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. // ПараметрыОбновления - Структура - см. ВыполнитьОбновлениеИнформационнойБазы(). +// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). // Процедура ПередЗапускомПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, ПараметрыОбновления, - ДеревоОбработчиков) + СведенияОбОбновлении) КонтекстОбработчика.ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); КонтекстОбработчика.ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна(); @@ -5092,7 +6394,7 @@ Попытка КонтекстОбработчика.ЗапускВыполненБезОшибок = Истина; СообщениеОЗапущенномОбработчике = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполняется процедура обновления ""%1"".'"), ИмяОбработчика); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,, СообщениеОЗапущенномОбработчике); // Прогресс выполнения процедуры обработки данных. @@ -5144,7 +6446,7 @@ |Выполнение прервано для предотвращения зацикливания механизма обработки данных.'"); КонецЕсли; - ОбработчикОбновления.ЧислоПопыток = 3; + ОбработчикОбновления.ЧислоПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -5162,11 +6464,13 @@ // В подчиненном узле РИБ только проверяем, что обрабатываемые обработчиком данные // пришли из главного узла и обновляем статус обработчика. КонтекстОбработчика.ПропуститьПроверкуОбработанныхДанных = Истина; - ОбрабатываемыеДанные = ПараметрыОбновления.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; - Если ОбрабатываемыеДанные.Количество() = 0 Тогда + ОписаниеОбрабатываемыхДанных = ПараметрыОбновления.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; + ДанныеОбработчика = ОписаниеОбрабатываемыхДанных.ДанныеОбработчика; + + Если ДанныеОбработчика.Количество() = 0 Тогда Параметры.ОбработкаЗавершена = Истина; Иначе - Для Каждого ОбрабатываемыйОбъект Из ОбрабатываемыеДанные Цикл + Для Каждого ОбрабатываемыйОбъект Из ДанныеОбработчика Цикл Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена( ОбработчикОбновления.ОчередьОтложеннойОбработки, ОбрабатываемыйОбъект.Ключ); @@ -5184,7 +6488,7 @@ КонтекстОбработчика.ЗапускВыполненБезОшибок = Ложь; КонецПопытки; - ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления); + ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, СведенияОбОбновлении); КонецПроцедуры @@ -5193,8 +6497,9 @@ // Параметры: // КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). // ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. +// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). // -Процедура ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, ДеревоОбработчиков) +Процедура ПослеЗапускаПроцедурыОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, СведенияОбОбновлении) Параметры = КонтекстОбработчика.Параметры; ПараметрыОбновления = КонтекстОбработчика.ПараметрыОбновления; @@ -5245,11 +6550,13 @@ Если Не ЕстьОбработанныеОбъекты И ОчередьОбработчика = МинимальнаяОчередь Тогда ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток; - Если ЧислоПопыток >= 2 И ВсеОбработчикиЗациклились(ДеревоОбработчиков) Тогда + МаксимумПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) - 1; + Если ЧислоПопыток >= МаксимумПопыток И ВсеОбработчикиЗациклились(СведенияОбОбновлении) Тогда ТекстИсключения = НСтр("ru = 'Произошло зацикливание процедуры обработки данных. Выполнение прервано.'"); ВызватьИсключение ТекстИсключения; Иначе - ОбработчикОбновления.ЧислоПопыток = ЧислоПопыток + 1; + ДобавляемоеЧислоПопыток = ДобавляемоеЧислоПопыток(ОбработчикОбновления, КонтекстОбработчика); + ОбработчикОбновления.ЧислоПопыток = ЧислоПопыток + ДобавляемоеЧислоПопыток; КонецЕсли; Иначе ОбработчикОбновления.ЧислоПопыток = 0; @@ -5257,7 +6564,17 @@ КонецЕсли; // Сохранение данных по процедуре обработки данных. - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПрогрессВыполнения", Параметры.ПрогрессВыполнения); + Если ОбработчикОбновления.Многопоточный Тогда + ПрогрессВыполнения = ОбработчикОбновления.СтатистикаВыполнения[ПрогрессВыполнения]; + Если ПрогрессВыполнения = Неопределено Тогда + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПрогрессВыполнения", Параметры.ПрогрессВыполнения); + Иначе + ОбработаноОбъектов = Параметры.ПрогрессВыполнения.ОбработаноОбъектов; + ПрогрессВыполнения.ОбработаноОбъектов = ПрогрессВыполнения.ОбработаноОбъектов + ОбработаноОбъектов; + КонецЕсли; + Иначе + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПрогрессВыполнения", Параметры.ПрогрессВыполнения); + КонецЕсли; КоличествоЗапусковПроцедурыОбновления = КоличествоЗапусковПроцедурыОбновления(ОбработчикОбновления) + 1; ДлительностьВыполнения = ЗавершениеОбработкиДанных - КонтекстОбработчика.НачалоОбработкиДанных; @@ -5277,8 +6594,9 @@ // Параметры: // КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). // ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. +// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). // -Процедура ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления) +Процедура ЗавершитьПроцедуруОбработкиДанных(КонтекстОбработчика, ОбработчикОбновления, СведенияОбОбновлении) Параметры = КонтекстОбработчика.Параметры; @@ -5292,7 +6610,7 @@ ОбработчикОбновления.ИнформацияОбОшибке = Строка(ОбработчикОбновления.ИнформацияОбОшибке) + Символы.ПС + КонтекстОбработчика.ИнформацияОбОшибке; - ОбработчикОбновления.ЧислоПопыток = 3; + ОбработчикОбновления.ЧислоПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления); КонецЕсли; Если КонтекстОбработчика.ЗаписыватьВЖурнал Тогда @@ -5316,7 +6634,6 @@ СведенияОБлокируемыхОбъектах = НовыеСведенияОБлокируемыхОбъектах(); Для Каждого Подсистема Из ОписанияПодсистем.Порядок Цикл - ИмяКоллекции = ""; ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам[Подсистема]; РежимВыполнения = ОписаниеПодсистемы.РежимВыполненияОтложенныхОбработчиков; ПараллельноСВерсии = ОписаниеПодсистемы.ПараллельноеОтложенноеОбновлениеСВерсии; @@ -5501,7 +6818,6 @@ Процедура ВключитьОтключитьОтложенныеОбработчикиОбновления(СведенияОбОбновлении) ПланОбновления = СведенияОбОбновлении.ПланОтложенногоОбновления; - УправлениеОбработчиками = СведенияОбОбновлении.УправлениеОтложеннымОбновлением; ЗапуститьОбработчики = Неопределено; ОстановитьОбработчики = Неопределено; ПриоритетЖелательноБыстрее = Неопределено; @@ -5691,6 +7007,13 @@ ПараметрыОбработчикаСтруктура.Очередь = Обработчик.ОчередьОтложеннойОбработки; ПараметрыОбработчикаСтруктура.Вставить("ДанныеОбработчика", Новый Соответствие); + Если Обработчик.Многопоточный Тогда + ПараметрыОбработчикаСтруктура.ПараметрыВыборки = + ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(); + Иначе + ПараметрыОбработчикаСтруктура.ПараметрыВыборки = Неопределено; + КонецЕсли; + ПараметрыОбработчика = Новый Массив; ПараметрыОбработчика.Добавить(ПараметрыОбработчикаСтруктура); Попытка @@ -5728,7 +7051,14 @@ ВызватьИсключение; КонецПопытки; - ОбрабатываемыеДанные.Вставить(Обработчик.ИмяОбработчика, ПараметрыОбработчикаСтруктура.ДанныеОбработчика); + ОписаниеОбрабатываемыхДанных = НовоеОписаниеОбрабатываемыхДанных(Обработчик.Многопоточный); + ОписаниеОбрабатываемыхДанных.ДанныеОбработчика = ПараметрыОбработчикаСтруктура.ДанныеОбработчика; + + Если Обработчик.Многопоточный Тогда + ОписаниеОбрабатываемыхДанных.ПараметрыВыборки = ПараметрыОбработчикаСтруктура.ПараметрыВыборки; + КонецЕсли; + + ОбрабатываемыеДанные.Вставить(Обработчик.ИмяОбработчика, ОписаниеОбрабатываемыхДанных); КонецЦикла; КонецЦикла; @@ -5753,17 +7083,12 @@ Процедура ЗапускРегистрацииДанныхОтложенногоОбновления(ИдентификаторФормы, АдресРезультата) Экспорт СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - - Если СведенияОбОбновлении.ОписаниеПотоков <> Неопределено Тогда - ОтменитьВыполнениеВсехПотоков(СведенияОбОбновлении.ОписаниеПотоков); - КонецЕсли; - ОписаниеПотоков = НовоеОписаниеПотоковРегистрацииДанныхОтложенногоОбновления(); СведенияОбОбновлении.ОписаниеПотоков = ОписаниеПотоков; Попытка - Для каждого ТекущаяПроцедура Из СведенияОбОбновлении.ОписаниеПроцедурЗаполнения Цикл - Поток = ДобавитьПотокРегистрацииДанныхОтложенногоОбновления(ОписаниеПотоков, ТекущаяПроцедура.Значение); + Для каждого ОписаниеОбрабатываемыхДанных Из СведенияОбОбновлении.ОбрабатываемыеДанные Цикл + Поток = ДобавитьПотокРегистрацииДанныхОтложенногоОбновления(ОписаниеПотоков, ОписаниеОбрабатываемыхДанных.Значение); ВыполнитьПоток(ОписаниеПотоков, Поток, ИдентификаторФормы); ОжидатьСвободныйПоток(ОписаниеПотоков, СведенияОбОбновлении); ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); @@ -5782,10 +7107,10 @@ // Заполнение данных отложенного обработчика в фоновом задании. // // Параметры: -// ОписаниеПроцедуры - Структура - описание процедуры заполнения. +// ОписаниеОбрабатываемыхДанных - Структура - (см. НовоеОписаниеОбрабатываемыхДанных()). // АдресРезультата - Строка - адрес временного хранилища для сохранения результата выполнения процедуры. // -Процедура ЗаполнитьДанныеОтложенногоОбработчика(ОписаниеПроцедуры, АдресРезультата) Экспорт +Процедура ЗаполнитьДанныеОтложенногоОбработчика(ОписаниеОбрабатываемыхДанных, АдресРезультата) Экспорт ПараметрыОтметкиКОбработке = ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке(); ЕстьПодсистемаОбменаДанными = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными"); @@ -5795,8 +7120,16 @@ МодульОбменДаннымиСервер.ИнициализироватьФайлСДаннымиОбновления(ПараметрыОтметкиКОбработке); КонецЕсли; - ПараметрыОтметкиКОбработке.Очередь = ОписаниеПроцедуры.Очередь; + ПараметрыОтметкиКОбработке.Очередь = ОписаниеОбрабатываемыхДанных.Очередь; ПараметрыОтметкиКОбработке.Вставить("ДанныеОбработчика", Новый Соответствие); + МногопоточныйРежим = ЭтоОписаниеДанныхМногопоточногоОбработчика(ОписаниеОбрабатываемыхДанных); + + Если МногопоточныйРежим Тогда + ПараметрыОтметкиКОбработке.ПараметрыВыборки = + ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(); + Иначе + ПараметрыОтметкиКОбработке.ПараметрыВыборки = Неопределено; + КонецЕсли; ПараметрыОбработчика = Новый Массив; ПараметрыОбработчика.Добавить(ПараметрыОтметкиКОбработке); @@ -5807,12 +7140,12 @@ |отложенного обработчика обновления |""%2"".'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - ОписаниеПроцедуры.ПроцедураЗаполнения, - ОписаниеПроцедуры.ИмяОбработчика); + ОписаниеОбрабатываемыхДанных.ПроцедураЗаполнения, + ОписаниеОбрабатываемыхДанных.ИмяОбработчика); ЗаписатьИнформацию(ТекстСообщения); Попытка - ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПроцедуры.ПроцедураЗаполнения, ПараметрыОбработчика); + ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеОбрабатываемыхДанных.ПроцедураЗаполнения, ПараметрыОбработчика); Исключение ИнформацияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ШаблонОшибки = НСтр( @@ -5823,8 +7156,8 @@ |произошла ошибка: |""%3"".'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, - ОписаниеПроцедуры.ПроцедураЗаполнения, - ОписаниеПроцедуры.ИмяОбработчика, + ОписаниеОбрабатываемыхДанных.ПроцедураЗаполнения, + ОписаниеОбрабатываемыхДанных.ИмяОбработчика, ИнформацияОбОшибке); ЗаписатьОшибку(ТекстСообщения); ВызватьИсключение; @@ -5833,6 +7166,10 @@ Результат = Новый Структура; Результат.Вставить("ДанныеОбработчика", ПараметрыОтметкиКОбработке.ДанныеОбработчика); + Если МногопоточныйРежим Тогда + Результат.Вставить("ПараметрыВыборки", ПараметрыОтметкиКОбработке.ПараметрыВыборки); + КонецЕсли; + Если ЕстьПодсистемаОбменаДанными Тогда ДанныеОбновления = МодульОбменДаннымиСервер.ЗавершитьЗаписьФайлаИПолучитьДанныеОбновления(ПараметрыОтметкиКОбработке); Результат.Вставить("ДанныеОбновления", ДанныеОбновления); @@ -5906,7 +7243,8 @@ ОтменитьТранзакцию(); КонецЦикла; - ОбработчикОбновления.ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток + 1; + ДобавляемоеЧислоПопыток = ДобавляемоеЧислоПопыток(ОбработчикОбновления, КонтекстОбработчика); + ОбработчикОбновления.ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток + ДобавляемоеЧислоПопыток; ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); ЗаписатьОшибку(ПодробноеПредставлениеОшибки); @@ -5917,21 +7255,41 @@ КонецПроцедуры +// Обработать фрагмент, полученный в результате разбиения результата поиска данных для обновления, в отдельном потоке. +// +// Параметры: +// Фрагмент - Массив - см. НовыйНаборПорцийДляОбновления(). +// ОписаниеПотоков - Структура - см. НовоеОписаниеПотоков(). +// КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). +// +Процедура ОбработатьФрагментДанныхВПотоке(Фрагмент, ОписаниеПотоков, КонтекстОбработчика) + + КонтекстОбработчикаДляПотока = ОбщегоНазначения.СкопироватьРекурсивно(КонтекстОбработчика); + КонтекстОбработчикаДляПотока.Параметры.ОбновляемыеДанные = Фрагмент; + Поток = ОписаниеПотоков.Потоки.Добавить(); + ДобавитьПотокОбработчикаОбновления(Поток, КонтекстОбработчикаДляПотока); + ВыполнитьПоток(ОписаниеПотоков, Поток); + КонтекстОбработчикаДляПотока.Параметры.ОбновляемыеДанные.НаборДанных = Неопределено; + +КонецПроцедуры + // Устанавливает статус ошибки у всех зациклившихся обработчиков. // // Параметры: -// ДеревоОбработчиков - КоллекцияСтрокДереваЗначений - верхний уровень дерева. +// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). // // Возвращаемое значение: -// Булево - все выполняемые обработчики зациклились (ЧислоПопыток >= 2), Ложь - хоть один еще выполняется. +// Булево - все выполняемые обработчики зациклились (ЧислоПопыток >= Максимум), Ложь - хоть один еще выполняется. // -Процедура ОтметитьЗациклившиесяОбработчики(ДеревоОбработчиков) +Процедура ОтметитьЗациклившиесяОбработчики(СведенияОбОбновлении) Отбор = Новый Структура("Статус", "Выполняется"); - Выполняющиеся = ДеревоОбработчиков.Строки.НайтиСтроки(Отбор, Истина); + Выполняющиеся = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Отбор, Истина); Для каждого ОбработчикОбновления Из Выполняющиеся Цикл - Если ОбработчикОбновления.ЧислоПопыток >= 2 Тогда + МаксимумПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) - 1; + + Если ОбработчикОбновления.ЧислоПопыток >= МаксимумПопыток Тогда ОбработчикОбновления.Статус = "Ошибка"; ОбработчикОбновления.ИнформацияОбОшибке = НСтр("ru = 'Произошло зацикливание процедуры обработки данных. Выполнение прервано.'"); КонецЕсли; @@ -5948,14 +7306,15 @@ // - есть минимум один обработчик, завершенный с ошибкой. // // Параметры: -// ДеревоОбработчиков - КоллекцияСтрокДереваЗначений - верхний уровень дерева. +// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). // // Возвращаемое значение: // Булево - Истина, если обработчики зациклились. // -Функция ВсеОбработчикиЗациклились(ДеревоОбработчиков) +Функция ВсеОбработчикиЗациклились(СведенияОбОбновлении) Отбор = Новый Структура("Статус", "Выполняется"); + ДеревоОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков; Выполняющиеся = ДеревоОбработчиков.Строки.НайтиСтроки(Отбор, Истина); Если Выполняющиеся.Количество() > 0 Тогда @@ -5963,7 +7322,9 @@ ЕстьНормальные = Ложь; Для каждого ОбработчикОбновления Из Выполняющиеся Цикл - Если ОбработчикОбновления.ЧислоПопыток < 2 Тогда + МаксимумПопыток = МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) - 1; + + Если ОбработчикОбновления.ЧислоПопыток < МаксимумПопыток Тогда ЕстьНормальные = Истина; Иначе ЕстьПревысившие = Истина; @@ -6057,4 +7418,61 @@ КонецФункции -#КонецОбласти \ No newline at end of file +// Возвращает максимальное количество попыток обновления для указанного обработчика обновления. +// +// Параметры: +// СведенияОбОбновлении - Структура - сведения об обновлении (см. НовыеСведенияОбОбновлении()). +// ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. +// +// Возвращаемое значение: +// Число - максимальное количество попыток обновления. +// +Функция МаксимумПопытокОбновления(СведенияОбОбновлении, ОбработчикОбновления) + + Если ОбработчикОбновления.Многопоточный Тогда + ОбрабатываемыеДанные = СведенияОбОбновлении.ОбрабатываемыеДанные[ОбработчикОбновления.ИмяОбработчика]; + ПараметрыВыборки = ОбрабатываемыеДанные.ПараметрыВыборки; + ПолныеИменаОбъектов = ПараметрыВыборки.ПолныеИменаОбъектов; + ПолныеИменаРегистров = ПараметрыВыборки.ПолныеИменаРегистров; + СоставОбъектов = СтрРазделить(ПолныеИменаОбъектов, ","); + СоставРегистров = СтрРазделить(ПолныеИменаРегистров, ","); + ПорцииДляОбновления = ОбрабатываемыеДанные.ПорцииДляОбновления; + КоличествоПорций = ?(ПорцииДляОбновления <> Неопределено, ПорцииДляОбновления.Количество(), 0); + Множитель = СоставОбъектов.Количество() * СоставРегистров.Количество() + КоличествоПорций; + Иначе + Множитель = 1; + КонецЕсли; + + Возврат 3 * Множитель; + +КонецФункции + +// Количество добавляемых попыток для счетчика ЧислоПопыток. +// +// Параметры: +// ОбработчикОбновления - СтрокаДереваЗначений - обработчик обновления в виде строки дерева обработчиков. +// КонтекстОбработчика - Структура - см. НовыйКонтекстОбработчика(). +// +// Возвращаемое значение: +// Число - 0, если это многопоточный обработчик, которому не были переданы данные для обновления, иначе 1. +// +Функция ДобавляемоеЧислоПопыток(ОбработчикОбновления, КонтекстОбработчика) + + Если ОбработчикОбновления.Многопоточный Тогда + ОбновляемыеДанные = КонтекстОбработчика.Параметры.ОбновляемыеДанные; + + // Проверяется по полям ОбновляемыеДанные.ПерваяЗапись и ОбновляемыеДанные.ПоследняяЗапись, а не по полю + // ОбновляемыеДанные.НаборДанных, т.к. оно очищается в ОбработатьФрагментДанныхВПотоке() для экономии памяти. + // ОбновляемыеДанные может быть Неопределено, если обработчик выбросил исключение. + Если ОбновляемыеДанные <> Неопределено + И ОбновляемыеДанные.ПерваяЗапись = Неопределено + И ОбновляемыеДанные.ПоследняяЗапись = Неопределено Тогда + Возврат 0; + КонецЕсли; + КонецЕсли; + + Возврат 1; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl index 604e0c707..e2eb990a9 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -239,7 +246,7 @@ ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); Исключение ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации() + "." - + НСтр("ru = 'Обновление области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + + НСтр("ru = 'Обновление области данных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение(НСтр("ru = 'Ошибка обновления области данных. Запись версий области данных заблокирована.'")); @@ -537,7 +544,7 @@ // возможной конкуренции при доступе к таблицам объектов метаданных, разделенных // в режиме "Независимо и совместно" (что будет менее эффективно, нежели в // выполнение в монопольном режиме). - СтрокаСообщения = НСтр("ru = 'Не удалось установить монопольный режим. Описание ошибки: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Не удалось установить монопольный режим. Описание ошибки: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), @@ -616,7 +623,7 @@ Попытка Блокировка = Новый БлокировкаДанных(); - БлокировкаРегистра = Блокировка.Добавить("РегистрСведений.ВерсииПодсистемОбластейДанных"); + Блокировка.Добавить("РегистрСведений.ВерсииПодсистемОбластейДанных"); Блокировка.Заблокировать(); ТекстЗапроса = diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВызовСервера/Module.bsl index 9beb115ab..f8d0d3d30 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // См. описание этой же функции в модуле ОбновлениеИнформационнойБазыСлужебный. diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl index 6a6c24c6a..b1c5d302e 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает минимальную версию информационной базы среди всех областей данных. diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index a0bd17d40..11aaca96d 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -1,5 +1,130 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс +// Удаляет устаревшие исправления, устанавливает корректные +// свойства новым исправлениям. Требуется вызывать перед выполнением обновления +// конфигурации в пакетном режиме (см. ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы). +// Важно: Выполненные действия применятся после перезапуска сеанса. +// +// Возвращаемое значение: +// Булево - Истина, если были внесены изменения в составе исправлений. +// +Функция ИсправленияИзменены() Экспорт + + ИсправленияИзменены = Ложь; + + // Для расширений, которые подключились нужно проверять версию. + Исправления = Новый Массив; + Расширения = РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные); + Для Каждого Расширение Из Расширения Цикл + Если ЭтоИсправление(Расширение) Тогда + Исправления.Добавить(Расширение); + КонецЕсли; + КонецЦикла; + + Если Исправления.Количество() > 0 Тогда + + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + + БиблиотекиКонфигурации = Новый Соответствие; + Для Каждого Подсистема Из ОписанияПодсистем.ПоИменам Цикл + БиблиотекиКонфигурации.Вставить(Подсистема.Ключ, Подсистема.Значение.Версия); + КонецЦикла; + + Для Каждого Исправление Из Исправления Цикл + УдалитьИсправление = Истина; + СвойстваИсправления = СвойстваИсправления(Исправление.Имя); + Если СвойстваИсправления = Неопределено Тогда + // Исправление еще не применено. + УдалитьИсправление = Ложь; + Иначе + Для Каждого ИнформацияОПрименимости Из СвойстваИсправления.AppliedFor Цикл + ВерсияБиблиотекиКонфигурации = БиблиотекиКонфигурации.Получить(ИнформацияОПрименимости.ConfigurationName); + + Если ВерсияБиблиотекиКонфигурации <> Неопределено + И СтрНайти(ИнформацияОПрименимости.Versions, ВерсияБиблиотекиКонфигурации) > 0 Тогда + УдалитьИсправление = Ложь; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если УдалитьИсправление Тогда + Попытка + Исправление.Удалить(); + ИсправленияИзменены = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить исправление ""%1"" по причине: + | + |%2'"), Исправление.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Удаление'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + ВызватьИсключение ТекстОшибки; + КонецПопытки; + Иначе + ТребуетсяЗапись = Ложь; + ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); + Если Исправление.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях + <> ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях Тогда + Исправление.ЗащитаОтОпасныхДействий = ЗащитаОтОпасныхДействий; + ТребуетсяЗапись = Истина; + КонецЕсли; + Если Исправление.БезопасныйРежим <> Ложь Тогда + Исправление.БезопасныйРежим = Ложь ; + ТребуетсяЗапись = Истина; + КонецЕсли; + + Если ТребуетсяЗапись Тогда + Попытка + Исправление.Записать(); + ИсправленияИзменены = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи исправления ""%1"" произошла ошибка: + | + |%2'"), Исправление.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Изменение'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + ВызватьИсключение ТекстОшибки; + КонецПопытки; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Неподключенные исправления удаляем без проверки версии. + Расширения = РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансОтключенные); + Для Каждого Расширение Из Расширения Цикл + Если ЭтоИсправление(Расширение) Тогда + Попытка + Расширение.Удалить(); + ИсправленияИзменены = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить отключенное исправление ""%1"" по причине: + | + |%2'"), Расширение.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Удаление'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + ВызватьИсключение ТекстОшибки; + КонецПопытки; + КонецЕсли; + КонецЦикла; + + Возврат ИсправленияИзменены; + +КонецФункции + #Область ДляВызоваИзДругихПодсистем // ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы @@ -88,9 +213,10 @@ // // Параметры: // Исправления - структура - с ключами: -// * Установить - Массив - пути к файлам исправлений во временном хранилище, -// которые требуется установить. +// * Установить - Массив - файлы исправлений во временном хранилище, которые требуется установить. // * Удалить - Массив - уникальные идентификаторы (Строка) исправлений, которые требуется удалить. +// ВФоне - Булево - необходимо устанавливать в значение Истина, если вызов функции выполняется +// фоновом задании. // // Возвращаемое значение: // Структура - с ключами: @@ -98,7 +224,7 @@ // * НеУстановлено - Число - количество неустановленных исправлений. // * НеУдалено - Число - количество неудаленных исправлений. // -Функция УстановкаИУдалениеИсправлений(Исправления) Экспорт +Функция УстановкаИУдалениеИсправлений(Исправления, ВФоне = Ложь) Экспорт Устанавливаемые = Неопределено; НеУстановлено = 0; @@ -109,16 +235,39 @@ Для Каждого Патч Из Устанавливаемые Цикл Попытка + // Чтение исправления из архива. + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + Данные = ПолучитьИзВременногоХранилища(Патч); + Данные.Записать(ИмяАрхива); + + ИсправлениеНайдено = Ложь; + ЧтениеZip = Новый ЧтениеZipФайла(ИмяАрхива); + Для Каждого ЭлементАрхива Из ЧтениеZip.Элементы Цикл + Если ЭлементАрхива.Расширение = "cfe" Тогда + ИсправлениеНайдено = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ИсправлениеНайдено Тогда + ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог("Патчи"); + ЧтениеZip.Извлечь(ЭлементАрхива, ВременныйКаталог); + ЧтениеZip.Закрыть(); + ПолноеИмяИсправления = ВременныйКаталог + ЭлементАрхива.Имя; + КонецЕсли; + ДвоичныеДанныеИсправления = Новый ДвоичныеДанные(ПолноеИмяИсправления); + Расширение = РасширенияКонфигурации.Создать(); Расширение.БезопасныйРежим = Ложь; - Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда - Расширение.ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); - КонецЕсли; + Расширение.ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе = Истина; - Расширение.Записать(ПолучитьИзВременногоХранилища(Патч)); + Расширение.Записать(ДвоичныеДанныеИсправления); УстановленноеИсправление = РасширениеПоИдентификатору(Расширение.УникальныйИдентификатор); Установленные.Добавить(УстановленноеИсправление.Имя); + + УдалитьФайлы(ИмяАрхива); + УдалитьФайлы(ПолноеИмяИсправления); Исключение НеУстановлено = НеУстановлено + 1; ИнформацияОбОшибке = ИнформацияОбОшибке(); @@ -126,7 +275,7 @@ НСтр("ru = 'При установке исправления ""%1"" произошла ошибка: | |%2'"), Расширение.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Установка'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Установка'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); КонецПопытки; КонецЦикла; @@ -140,7 +289,8 @@ И Удаляемые.Количество() > 0 Тогда ВсеРасширения = РасширенияКонфигурации.Получить(); Для Каждого Расширение Из ВсеРасширения Цикл - Если Не ЭтоИсправление(Расширение) Тогда + Если Не ЭтоИсправление(Расширение) + Или Установленные.Найти(Расширение.Имя) <> Неопределено Тогда Продолжить; КонецЕсли; Попытка @@ -156,14 +306,20 @@ НСтр("ru = 'Не удалось удалить исправление ""%1"" по причине: | |%2'"), Расширение.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Удаление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Удаление'", ОбщегоНазначения.КодОсновногоЯзыка()) , УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); КонецПопытки; КонецЦикла; КонецЕсли; + ТекстДляАсинхронногоВызова = ""; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() И ВФоне Тогда + ТекстДляАсинхронногоВызова = НСтр("ru = 'Обновление параметров работы расширений после установки или + |удаления патчей завершилось с ошибкой.'") + КонецЕсли; + #Если Не ВнешнееСоединение Тогда - РегистрыСведений.ПараметрыРаботыВерсийРасширений.ОбновитьПараметрыРаботыРасширений(); + РегистрыСведений.ПараметрыРаботыВерсийРасширений.ОбновитьПараметрыРаботыРасширений(Неопределено, "", ТекстДляАсинхронногоВызова); #КонецЕсли Результат = Новый Структура; @@ -291,125 +447,6 @@ КонецФункции -// Удаляет устаревшие исправления, устанавливает корректные -// свойства новым исправлениям. Требуется вызывать перед выполнением обновления -// конфигурации в пакетном режиме (см. ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы). -// Важно: Выполненные действия применятся после перезапуска сеанса. -// -// Возвращаемое значение: -// Булево - Истина, если были внесены изменения в составе исправлений. -// -Функция ИсправленияИзменены() Экспорт - - ИсправленияИзменены = Ложь; - - // Для расширений, которые подключились нужно проверять версию. - Исправления = Новый Массив; - Расширения = РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные); - Для Каждого Расширение Из Расширения Цикл - Если ЭтоИсправление(Расширение) Тогда - Исправления.Добавить(Расширение); - КонецЕсли; - КонецЦикла; - - Если Исправления.Количество() > 0 Тогда - - ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); - - БиблиотекиКонфигурации = Новый Соответствие; - Для Каждого Подсистема Из ОписанияПодсистем.ПоИменам Цикл - БиблиотекиКонфигурации.Вставить(Подсистема.Ключ, Подсистема.Значение.Версия); - КонецЦикла; - - Для Каждого Исправление Из Исправления Цикл - УдалитьИсправление = Истина; - СвойстваИсправления = СвойстваИсправления(Исправление.Имя); - Если СвойстваИсправления = Неопределено Тогда - // Исправление еще не применено. - УдалитьИсправление = Ложь; - Иначе - Для Каждого ИнформацияОПрименимости Из СвойстваИсправления.AppliedFor Цикл - ВерсияБиблиотекиКонфигурации = БиблиотекиКонфигурации.Получить(ИнформацияОПрименимости.ConfigurationName); - - Если ВерсияБиблиотекиКонфигурации <> Неопределено - И СтрНайти(ИнформацияОПрименимости.Versions, ВерсияБиблиотекиКонфигурации) > 0 Тогда - УдалитьИсправление = Ложь; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если УдалитьИсправление Тогда - Попытка - Исправление.Удалить(); - ИсправленияИзменены = Истина; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось удалить исправление ""%1"" по причине: - | - |%2'"), Исправление.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Удаление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); - ВызватьИсключение ТекстОшибки; - КонецПопытки; - Иначе - ТребуетсяЗапись = Ложь; - Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда - ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); - Если Исправление.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях - <> ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях Тогда - Исправление.ЗащитаОтОпасныхДействий = ЗащитаОтОпасныхДействий; - ТребуетсяЗапись = Истина; - КонецЕсли; - КонецЕсли; - Если Исправление.БезопасныйРежим <> Ложь Тогда - Исправление.БезопасныйРежим = Ложь ; - ИсправленияИзменены = Истина; - КонецЕсли; - - Если ТребуетсяЗапись Тогда - Попытка - Исправление.Записать(); - ИсправленияИзменены = Истина; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При записи исправления ""%1"" произошла ошибка: - | - |%2'"), Исправление.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Изменение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); - ВызватьИсключение ТекстОшибки; - КонецПопытки; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - // Неподключенные исправления удаляем без проверки версии. - Расширения = РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансОтключенные); - Для Каждого Расширение Из Расширения Цикл - Если ЭтоИсправление(Расширение) Тогда - Попытка - Расширение.Удалить(); - ИсправленияИзменены = Истина; - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось удалить отключенное исправление ""%1"" по причине: - | - |%2'"), Расширение.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Удаление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); - ВызватьИсключение ТекстОшибки; - КонецПопытки; - КонецЕсли; - КонецЦикла; - - Возврат ИсправленияИзменены; - -КонецФункции - Функция ЭтоИсправление(Расширение) Экспорт Возврат Расширение.Назначение = Метаданные.СвойстваОбъектов.НазначениеРасширенияКонфигурации.Исправление @@ -493,7 +530,7 @@ Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() - Или Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Или Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда Возврат; КонецЕсли; @@ -633,7 +670,7 @@ // Возвращает имя события для записи журнала регистрации. Функция СобытиеЖурналаРегистрации() - Возврат НСтр("ru = 'Обновление конфигурации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обновление конфигурации'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции // Заполняет структуру настроек обновления конфигурации и возвращает их. diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl index aa1a1b4e4..40d897775 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Проверка наличия активных соединений с информационной базой. diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index e8dfcaa70..8ea90b749 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму установки обновлений с указанными параметрами. @@ -90,17 +98,25 @@ // ** Установить - Массив - пути к файлам исправлений во временном хранилище, // которые требуется установить. // ** Удалить - Массив - уникальные идентификаторы (Строка) исправлений, которые требуется удалить. +// * КаталогПлатформы - Строка - путь к платформе, на которой должно быть запущено обновление, если не указано +// запускается на платформе текущего сеанса. // ПараметрыАдминистрирования - Структура - См. СтандартныеПодсистемыСервер.ПараметрыАдминистрирования. // Процедура УстановитьОбновление(Форма, Параметры, ПараметрыАдминистрирования) Экспорт +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда + Если Не ВозможнаУстановкаОбновления(Параметры, ПараметрыАдминистрирования) Тогда Возврат; КонецЕсли; + ОбновлениеКонфигурацииВызовСервера.СохранитьНастройкиОбновленияКонфигурации(Параметры); + + Если Форма <> Неопределено Тогда + Форма.Закрыть(); + КонецЕсли; + Если Параметры.РежимОбновления = 0 Тогда // Обновить сейчас - ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); - ЗавершитьРаботуСистемы(Ложь); ЗапуститьСкриптОбновления(Параметры, ПараметрыАдминистрирования); ИначеЕсли Параметры.РежимОбновления = 1 Тогда // При завершении работы ИмяПараметра = "СтандартныеПодсистемы.ПредлагатьОбновлениеИнформационнойБазыПриЗавершенииСеанса"; @@ -110,11 +126,7 @@ ЗапланироватьОбновлениеКонфигурации(Параметры, ПараметрыАдминистрирования); КонецЕсли; - ОбновлениеКонфигурацииВызовСервера.СохранитьНастройкиОбновленияКонфигурации(Параметры); - - Если Форма <> Неопределено Тогда - Форма.Закрыть(); - КонецЕсли; +#КонецЕсли КонецПроцедуры @@ -217,7 +229,7 @@ #Иначе - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда ВозможенЗапускОбновления = Ложь; ТекстСообщения = НСтр("ru = 'Обновление программы доступно только в клиенте под управлением ОС Windows.'"); КонецЕсли; @@ -309,29 +321,6 @@ КонецФункции -Процедура ЗапуститьСкриптОбновления(Параметры, ПараметрыАдминистрирования) - - ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(Истина, Параметры, ПараметрыАдминистрирования); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Информация", - НСтр("ru = 'Выполняется процедура обновления конфигурации:'") + " " + ИмяГлавногоФайлаСкрипта); - ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь, - ИмяГлавногоФайлаСкрипта, ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); - - Оболочка = Новый COMОбъект("Wscript.Shell"); - Оболочка.RegWrite("HKCU\Software\Microsoft\Internet Explorer\Styles\MaxScriptStatements", 1107296255, "REG_DWORD"); - - ПутьКПрограммеЗапуска = СтандартныеПодсистемыКлиент.ПапкаСистемныхПриложений() + "mshta.exe"; - - СтрокаЗапуска = """%1"" ""%2"" [p1]%3[/p1][p2]%4[/p2]"; - СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапуска, - ПутьКПрограммеЗапуска, ИмяГлавногоФайлаСкрипта, - СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы), - СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораКластера)); - - ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаЗапуска); - -КонецПроцедуры - Функция ДатаОбновленияУказанаВерно(Параметры) ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); @@ -350,12 +339,327 @@ КонецФункции +Процедура ВставитьПараметрСкрипта(Знач ИмяПараметра, Знач ЗначениеПараметра, Форматировать, ОбластьПараметров) + + Если Форматировать = Истина Тогда + ЗначениеПараметра = Форматировать(ЗначениеПараметра); + ИначеЕсли Форматировать = Ложь Тогда + ЗначениеПараметра = ?(ЗначениеПараметра, "true", "false"); + КонецЕсли; + ОбластьПараметров = СтрЗаменить(ОбластьПараметров, "[" + ИмяПараметра + "]", ЗначениеПараметра); + +КонецПроцедуры + +Функция ИменаФайловОбновления(Параметры) + + ИмяПараметра = "СтандартныеПодсистемы.ИменаФайловОбновления"; + Если ПараметрыПриложения.Получить(ИмяПараметра) <> Неопределено Тогда + Возврат ПараметрыПриложения[ИмяПараметра]; + КонецЕсли; + + Если Параметры.Свойство("НуженФайлОбновления") И Не Параметры.НуженФайлОбновления Тогда + ИменаФайловОбновления = ""; + Иначе + Если ПустаяСтрока(Параметры.ИмяФайлаОбновления) Тогда + ИменаФайлов = Новый Массив; + Для Каждого ФайлОбновления Из Параметры.ФайлыОбновления Цикл + ПрефиксФайлаОбновления = ?(ФайлОбновления.ВыполнитьОбработчикиОбновления, "+", ""); + ИменаФайлов.Добавить(Форматировать(ПрефиксФайлаОбновления + ФайлОбновления.ПолноеИмяФайлаОбновления)); + КонецЦикла; + ИменаФайловОбновления = СтрСоединить(ИменаФайлов, ","); + Иначе + ИменаФайловОбновления = Форматировать(Параметры.ИмяФайлаОбновления); + КонецЕсли; + КонецЕсли; + + Возврат "[" + ИменаФайловОбновления + "]"; + +КонецФункции + +Функция Форматировать(Знач Текст) + Текст = СтрЗаменить(Текст, "\", "\\"); + Текст = СтрЗаменить(Текст, """", "\"""); + Текст = СтрЗаменить(Текст, "'", "\'"); + Возврат "'" + Текст + "'"; +КонецФункции + +Функция ПолучитьПараметрыАутентификацииАдминистратораОбновления(ПараметрыАдминистрирования) + + Результат = Новый Структура("СтрокаПодключения, СтрокаСоединенияИнформационнойБазы"); + + ПортКластера = ПараметрыАдминистрирования.ПортКластера; + ТекущиеСоединения = СоединенияИБВызовСервера.ИнформацияОСоединениях(Истина, + ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"], ПортКластера); + + Результат.СтрокаСоединенияИнформационнойБазы = ТекущиеСоединения.СтрокаСоединенияИнформационнойБазы; + Результат.СтрокаПодключения = "Usr=""{0}"";Pwd=""{1}"""; + + Возврат Результат; + +КонецФункции + +Функция ИмяЗадачиScheduleService(Знач КодЗадачи) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление конфигурации (%1)'"), Формат(КодЗадачи, "ЧГ=0")); + +КонецФункции + +Функция СтрокаUnicode(Строка) + + Результат = ""; + + Для НомерСимвола = 1 По СтрДлина(Строка) Цикл + + Символ = Формат(КодСимвола(Сред(Строка, НомерСимвола, 1)), "ЧГ=0"); + Символ = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Символ, 4); + Результат = Результат + Символ; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает имя события для записи журнала регистрации. +Функция СобытиеЖурналаРегистрации() Экспорт + Возврат НСтр("ru = 'Обновление конфигурации'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); +КонецФункции + +// Проверяет наличие обновления конфигурации при запуске программы. +// +Процедура ПроверитьОбновлениеКонфигурации() + + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + Возврат; + КонецЕсли; + +#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботыКлиента.РазделениеВключено Или Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + Возврат; + КонецЕсли; + + Если ПараметрыРаботыКлиента.Свойство("ПоказатьСообщениеОбОшибочныхОбработчиках") Тогда + Возврат; // Форма результатов обновления будет показана позже. + КонецЕсли; + + НастройкиОбновления = ПараметрыРаботыКлиента.НастройкиОбновления; + НаличиеОбновления = НастройкиОбновления.ПроверитьПрошлыеОбновленияБазы; + + Если НаличиеОбновления Тогда + // Надо завершить предыдущее обновление. + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ИндикацияХодаОтложенногоОбновленияИБ"); + Возврат; + КонецЕсли; + + Если НастройкиОбновления.КонфигурацияИзменена Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Обновление конфигурации'"), + "e1cib/app/Обработка.УстановкаОбновлений", + НСтр("ru = 'Конфигурация отличается от основной конфигурации информационной базы.'"), + БиблиотекаКартинок.Информация32); + КонецЕсли; + +#КонецЕсли + +КонецПроцедуры + +Процедура ПрочитатьДанныеВЖурналРегистрации(РезультатОбновления, КаталогСкрипта) + + РезультатОбновления = Неопределено; + ПриОбновленииПроизошлаОшибка = Ложь; + + ОписаниеОповещения = Новый ОписаниеОповещения("ПрочитатьДанныеВЖурналРегистрацииПриОбработкеФайловЛога", ЭтотОбъект); + НачатьПоискФайлов(ОписаниеОповещения, КаталогСкрипта, "log*.txt"); + +КонецПроцедуры + +Процедура ПрочитатьДанныеВЖурналРегистрацииПриОбработкеФайловЛога(НайденныеФайлы, Контекст) Экспорт + + Если НайденныеФайлы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ФайлЖурнала = НайденныеФайлы[0]; + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.Прочитать(ФайлЖурнала.ПолноеИмя); + + Для НомерСтроки = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл + + ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки); + Если ПустаяСтрока(ТекущаяСтрока) Тогда + Продолжить; + КонецЕсли; + + ПредставлениеУровня = "Информация"; + Если Сред(ТекущаяСтрока, 3, 1) = "." И Сред(ТекущаяСтрока, 6, 1) = "." Тогда // Строка с датой + МассивСтроки = СтрРазделить(ТекущаяСтрока, " ", Ложь); + МассивДаты = СтрРазделить(МассивСтроки[0], "."); + МассивВремени = СтрРазделить(МассивСтроки[1], ":"); + ДатаСобытия = Дата(МассивДаты[2], МассивДаты[1], МассивДаты[0], МассивВремени[0], МассивВремени[1], МассивВремени[2]); + Если МассивСтроки[2] = "{ERR}" Тогда + ПредставлениеУровня = "Ошибка"; + ПриОбновленииПроизошлаОшибка = Истина; + КонецЕсли; + Комментарий = СокрЛП(Сред(ТекущаяСтрока, СтрНайти(ТекущаяСтрока, "}") + 2)); + + Если Комментарий = НСтр("ru = 'Обновление выполнено'") Тогда + РезультатОбновления = Истина; + Продолжить; + ИначеЕсли Комментарий = НСтр("ru = 'Обновление не выполнено'") Тогда + РезультатОбновления = Ложь; + Продолжить; + КонецЕсли; + + Для НомерСледСтроки = НомерСтроки + 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл + ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСледСтроки); + Если Сред(ТекущаяСтрока, 3, 1) = "." И Сред(ТекущаяСтрока, 6, 1) = "." Тогда + // Следующая строка - строка нового события. + НомерСтроки = НомерСледСтроки - 1; + Прервать; + КонецЕсли; + + Комментарий = Комментарий + Символы.ПС + ТекущаяСтрока; + + КонецЦикла; + + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( + СобытиеЖурналаРегистрации(), + ПредставлениеУровня, + Комментарий, + ДатаСобытия); + + КонецЕсли; + + КонецЦикла; + + // Если обновление выполнялось с версии БСП ниже 2.3.1.6, то записей лога + // - "Обновление выполнено" + // - "Обновление не выполнено" + // может не быть, потому будем опираться на то - происходили ли ошибки в ходе обновления. + Если РезультатОбновления = Неопределено Тогда + РезультатОбновления = Не ПриОбновленииПроизошлаОшибка; + КонецЕсли; + + ЗаписатьСобытияВЖурналРегистрации(); + +КонецПроцедуры + +Процедура ЗаписатьСобытияВЖурналРегистрации() Экспорт + + СобытияДляЖурналаРегистрации = ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]; + + Если ТипЗнч(СобытияДляЖурналаРегистрации) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + Если СобытияДляЖурналаРегистрации.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ЖурналРегистрацииВызовСервера.ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации); + +КонецПроцедуры + +Функция ПоддерживаетсяПланировщикЗаданий() + + // Планировщик заданий поддерживается начиная с версии 6.0 - Windows Vista. + + СистемнаяИнформация = Новый СистемнаяИнформация(); + + ПозицияТочки = СтрНайти(СистемнаяИнформация.ВерсияОС, "."); + Если ПозицияТочки < 2 Тогда + Возврат Ложь; + КонецЕсли; + + НомерВерсии = Сред(СистемнаяИнформация.ВерсияОС, ПозицияТочки - 2, 2); + + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + ВерсияВышеVista = ОписаниеТипаЧисло.ПривестиЗначение(НомерВерсии) >= 6; + + Возврат ВерсияВышеVista; + +КонецФункции + +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда + +Функция КодировкаФайловПрограммыОбновления() + + // wscript.exe может работать только с файлами в кодировке UTF-16 LE. + Возврат КодировкаТекста.UTF16; + +КонецФункции + +Функция ИменаФайловИсправлений(Параметры, КаталогВременныхФайлов) + + ИмяПараметра = "СтандартныеПодсистемы.ИменаФайловИсправлений"; + Если ПараметрыПриложения.Получить(ИмяПараметра) <> Неопределено Тогда + Возврат ПараметрыПриложения[ИмяПараметра]; + КонецЕсли; + + ИменаФайлов = Новый Массив; + Для Каждого ИмяФайлаИсправления Из Параметры.ФайлыИсправлений Цикл + Если СтрЗаканчиваетсяНа(ИмяФайлаИсправления, ".cfe") Тогда + ИмяАрхива = КаталогВременныхФайлов + СтрЗаменить(Строка(Новый УникальныйИдентификатор),"-", "") + ".zip"; + ЗаписьАрхива = Новый ЗаписьZipФайла(ИмяАрхива); + ЗаписьАрхива.Добавить(ИмяФайлаИсправления); + ЗаписьАрхива.Записать(); + + ИменаФайлов.Добавить(Форматировать(ИмяАрхива)); + Иначе + ИменаФайлов.Добавить(Форматировать(ИмяФайлаИсправления)); + КонецЕсли; + КонецЦикла; + ИменаФайловИсправлений = СтрСоединить(ИменаФайлов, ","); + + Возврат "[" + ИменаФайловИсправлений + "]"; + +КонецФункции + +Функция ИнформацияОбИсправлениях(Параметры, КаталогВременныхФайлов) + + ИмяПараметра = "СтандартныеПодсистемы.ИнформацияОбИсправлениях"; + Если ПараметрыПриложения.Получить(ИмяПараметра) <> Неопределено Тогда + Возврат ПараметрыПриложения[ИмяПараметра]; + КонецЕсли; + + УстанавливаемыеИсправления = "['']"; + УдаляемыеИсправления = "['']"; + Если Параметры.Свойство("ФайлыИсправлений") Тогда + УстанавливаемыеИсправления = ИменаФайловИсправлений(Параметры, КаталогВременныхФайлов); + ИначеЕсли Параметры.Свойство("Исправления") Тогда + Если Параметры.Исправления.Свойство("Установить") + И Параметры.Исправления.Установить.Количество() > 0 Тогда + ИменаФайлов = Новый Массив; + Для Каждого НовоеИсправление Из Параметры.Исправления.Установить Цикл + ИмяАрхива = КаталогВременныхФайлов + СтрЗаменить(Строка(Новый УникальныйИдентификатор),"-", "") + ".zip"; + Данные = ПолучитьИзВременногоХранилища(НовоеИсправление); + Данные.Записать(ИмяАрхива); + ИменаФайлов.Добавить(Форматировать(ИмяАрхива)); + КонецЦикла; + УстанавливаемыеИсправления = СтрСоединить(ИменаФайлов, ","); + УстанавливаемыеИсправления = "[" + УстанавливаемыеИсправления + "]"; + КонецЕсли; + + Если Параметры.Исправления.Свойство("Удалить") + И Параметры.Исправления.Удалить.Количество() > 0 Тогда + УдаляемыеИсправления = СтрСоединить(Параметры.Исправления.Удалить, ","); + УдаляемыеИсправления = "[" + УдаляемыеИсправления + "]"; + КонецЕсли; + КонецЕсли; + + ИнформацияОбИсправлениях = Новый Структура; + ИнформацияОбИсправлениях.Вставить("Установить", УстанавливаемыеИсправления); + ИнформацияОбИсправлениях.Вставить("Удалить", УдаляемыеИсправления); + + Возврат ИнформацияОбИсправлениях; + +КонецФункции + Функция СформироватьФайлыСкриптаОбновления(Знач ИнтерактивныйРежим, Параметры, ПараметрыАдминистрирования) ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); ЭтоФайловаяБаза = ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая; - #Если Не ВебКлиент И НЕ МобильныйКлиент Тогда КаталогПлатформы = Неопределено; Параметры.Свойство("КаталогПлатформы", КаталогПлатформы); КаталогПрограммы = ?(ЗначениеЗаполнено(КаталогПлатформы), КаталогПлатформы, КаталогПрограммы()); @@ -409,6 +713,8 @@ ИмяЗадачи = ИмяЗадачиScheduleService(КодЗадачи); КонецЕсли; + ПараметрыЗапускаПредприятияИзСкрипта = ОбщегоНазначенияСлужебныйКлиент.ПараметрыЗапускаПредприятияИзСкрипта(); + ОбластьПараметров = ТекстыМакетов.ОбластьПараметров; ВставитьПараметрСкрипта("ИмяИсполняемогоФайлаКонфигуратора" , ИмяИсполняемогоФайлаКонфигуратора , Истина, ОбластьПараметров); ВставитьПараметрСкрипта("ИмяИсполняемогоФайлаКлиента" , ИмяИсполняемогоФайлаКлиента , Истина, ОбластьПараметров); @@ -429,6 +735,7 @@ ВставитьПараметрСкрипта("ВыполнятьСжатиеТаблицИБ" , ЭтоФайловаяБаза , Ложь , ОбластьПараметров); ВставитьПараметрСкрипта("ВыполнитьОтложенныеОбработчики" , ВыполнитьОтложенныеОбработчики , Ложь , ОбластьПараметров); ВставитьПараметрСкрипта("ИмяЗадачиПланировщикаЗадач" , ИмяЗадачи , Истина, ОбластьПараметров); + ВставитьПараметрСкрипта("ПараметрыЗапускаПредприятия" , ПараметрыЗапускаПредприятияИзСкрипта , Истина, ОбластьПараметров); СоздатьКаталог(КаталогВременныхФайловОбновления); ИнформацияОбИсправлениях = ИнформацияОбИсправлениях(Параметры, КаталогВременныхФайловОбновления); @@ -518,327 +825,52 @@ Возврат ИмяГлавногоФайлаСкрипта; - #КонецЕсли - КонецФункции -Процедура ВставитьПараметрСкрипта(Знач ИмяПараметра, Знач ЗначениеПараметра, Форматировать, ОбластьПараметров) +Процедура ЗапуститьСкриптОбновления(Параметры, ПараметрыАдминистрирования) - Если Форматировать = Истина Тогда - ЗначениеПараметра = Форматировать(ЗначениеПараметра); - ИначеЕсли Форматировать = Ложь Тогда - ЗначениеПараметра = ?(ЗначениеПараметра, "true", "false"); - КонецЕсли; - ОбластьПараметров = СтрЗаменить(ОбластьПараметров, "[" + ИмяПараметра + "]", ЗначениеПараметра); + ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(Истина, Параметры, ПараметрыАдминистрирования); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Информация", + НСтр("ru = 'Выполняется процедура обновления конфигурации:'") + " " + ИмяГлавногоФайлаСкрипта); + ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь, + ИмяГлавногоФайлаСкрипта, ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); + + Оболочка = Новый COMОбъект("Wscript.Shell"); + Оболочка.RegWrite("HKCU\Software\Microsoft\Internet Explorer\Styles\MaxScriptStatements", 1107296255, "REG_DWORD"); + + ПутьКПрограммеЗапуска = СтандартныеПодсистемыКлиент.ПапкаСистемныхПриложений() + "mshta.exe"; + + СтрокаЗапуска = """%1"" ""%2"" [p1]%3[/p1][p2]%4[/p2]"; + СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапуска, + ПутьКПрограммеЗапуска, ИмяГлавногоФайлаСкрипта, + СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораИнформационнойБазы), + СтрокаUnicode(ПараметрыАдминистрирования.ПарольАдминистратораКластера)); + + КодВозврата = Неопределено; + ЗапуститьПриложение(СтрокаЗапуска,,, КодВозврата); // АПК:534 запуск скрипта обновления. + ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); + ЗавершитьРаботуСистемы(Ложь); КонецПроцедуры -Функция ИменаФайловОбновления(Параметры) - - ИмяПараметра = "СтандартныеПодсистемы.ИменаФайловОбновления"; - Если ПараметрыПриложения.Получить(ИмяПараметра) <> Неопределено Тогда - Возврат ПараметрыПриложения[ИмяПараметра]; - КонецЕсли; - - Если Параметры.Свойство("НуженФайлОбновления") И Не Параметры.НуженФайлОбновления Тогда - ИменаФайловОбновления = ""; - Иначе - Если ПустаяСтрока(Параметры.ИмяФайлаОбновления) Тогда - ИменаФайлов = Новый Массив; - Для Каждого ФайлОбновления Из Параметры.ФайлыОбновления Цикл - ПрефиксФайлаОбновления = ?(ФайлОбновления.ВыполнитьОбработчикиОбновления, "+", ""); - ИменаФайлов.Добавить(Форматировать(ПрефиксФайлаОбновления + ФайлОбновления.ПолноеИмяФайлаОбновления)); - КонецЦикла; - ИменаФайловОбновления = СтрСоединить(ИменаФайлов, ","); - Иначе - ИменаФайловОбновления = Форматировать(Параметры.ИмяФайлаОбновления); - КонецЕсли; - КонецЕсли; - - Возврат "[" + ИменаФайловОбновления + "]"; - -КонецФункции - -Функция ИнформацияОбИсправлениях(Параметры, КаталогВременныхФайлов) - - ИмяПараметра = "СтандартныеПодсистемы.ИнформацияОбИсправлениях"; - Если ПараметрыПриложения.Получить(ИмяПараметра) <> Неопределено Тогда - Возврат ПараметрыПриложения[ИмяПараметра]; - КонецЕсли; - - УстанавливаемыеИсправления = "['']"; - УдаляемыеИсправления = "['']"; - Если Параметры.Свойство("ФайлыИсправлений") Тогда - УстанавливаемыеИсправления = ИменаФайловИсправлений(Параметры); - ИначеЕсли Параметры.Свойство("Исправления") Тогда - Если Параметры.Исправления.Свойство("Установить") - И Параметры.Исправления.Установить.Количество() > 0 Тогда - ИменаФайлов = Новый Массив; - Для Каждого НовоеИсправление Из Параметры.Исправления.Установить Цикл - ИмяФайла = СтрЗаменить(Строка(Новый УникальныйИдентификатор),"-", "") + ".cfe"; - ПолноеИмяФайла = КаталогВременныхФайлов + ИмяФайла; - ПолучитьФайл(НовоеИсправление, ПолноеИмяФайла, Ложь); - ИменаФайлов.Добавить(Форматировать(ПолноеИмяФайла)); - КонецЦикла; - УстанавливаемыеИсправления = СтрСоединить(ИменаФайлов, ","); - УстанавливаемыеИсправления = "[" + УстанавливаемыеИсправления + "]"; - КонецЕсли; - - Если Параметры.Исправления.Свойство("Удалить") - И Параметры.Исправления.Удалить.Количество() > 0 Тогда - УдаляемыеИсправления = СтрСоединить(Параметры.Исправления.Удалить, ","); - УдаляемыеИсправления = "[" + УдаляемыеИсправления + "]"; - КонецЕсли; - КонецЕсли; - - ИнформацияОбИсправлениях = Новый Структура; - ИнформацияОбИсправлениях.Вставить("Установить", УстанавливаемыеИсправления); - ИнформацияОбИсправлениях.Вставить("Удалить", УдаляемыеИсправления); - - Возврат ИнформацияОбИсправлениях; - -КонецФункции - -Функция ИменаФайловИсправлений(Параметры) - - ИмяПараметра = "СтандартныеПодсистемы.ИменаФайловИсправлений"; - Если ПараметрыПриложения.Получить(ИмяПараметра) <> Неопределено Тогда - Возврат ПараметрыПриложения[ИмяПараметра]; - КонецЕсли; - - ИменаФайлов = Новый Массив; - Для Каждого ИмяФайлаИсправления Из Параметры.ФайлыИсправлений Цикл - ИменаФайлов.Добавить(Форматировать(ИмяФайлаИсправления)); - КонецЦикла; - ИменаФайловИсправлений = СтрСоединить(ИменаФайлов, ","); - - Возврат "[" + ИменаФайловИсправлений + "]"; - -КонецФункции - -Функция Форматировать(Знач Текст) - Текст = СтрЗаменить(Текст, "\", "\\"); - Текст = СтрЗаменить(Текст, """", "\"""); - Текст = СтрЗаменить(Текст, "'", "\'"); - Возврат "'" + Текст + "'"; -КонецФункции - -Функция ПолучитьПараметрыАутентификацииАдминистратораОбновления(ПараметрыАдминистрирования) - - Результат = Новый Структура("СтрокаПодключения, СтрокаСоединенияИнформационнойБазы"); - - ПортКластера = ПараметрыАдминистрирования.ПортКластера; - ТекущиеСоединения = СоединенияИБВызовСервера.ИнформацияОСоединениях(Истина, - ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"], ПортКластера); - - Результат.СтрокаСоединенияИнформационнойБазы = ТекущиеСоединения.СтрокаСоединенияИнформационнойБазы; - Результат.СтрокаПодключения = "Usr=""{0}"";Pwd=""{1}"""; - - Возврат Результат; - -КонецФункции - -Функция ИмяЗадачиScheduleService(Знач КодЗадачи) - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление конфигурации (%1)'"), Формат(КодЗадачи, "ЧГ=0")); - -КонецФункции - -Функция СтрокаUnicode(Строка) - - Результат = ""; - - Для НомерСимвола = 1 По СтрДлина(Строка) Цикл - - Символ = Формат(КодСимвола(Сред(Строка, НомерСимвола, 1)), "ЧГ=0"); - Символ = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Символ, 4); - Результат = Результат + Символ; - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Возвращает имя события для записи журнала регистрации. -Функция СобытиеЖурналаРегистрации() Экспорт - Возврат НСтр("ru = 'Обновление конфигурации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); -КонецФункции - -// Проверяет наличие обновления конфигурации при запуске программы. -// -Процедура ПроверитьОбновлениеКонфигурации() - - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - Возврат; - КонецЕсли; - -#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); - Если ПараметрыРаботыКлиента.РазделениеВключено Или Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда - Возврат; - КонецЕсли; - - Если ПараметрыРаботыКлиента.Свойство("ПоказатьСообщениеОбОшибочныхОбработчиках") Тогда - Возврат; // Форма результатов обновления будет показана позже. - КонецЕсли; - - НастройкиОбновления = ПараметрыРаботыКлиента.НастройкиОбновления; - НаличиеОбновления = НастройкиОбновления.ПроверитьПрошлыеОбновленияБазы; - - Если НаличиеОбновления Тогда - // Надо завершить предыдущее обновление. - ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ИндикацияХодаОтложенногоОбновленияИБ"); - Возврат; - КонецЕсли; - - Если НастройкиОбновления.КонфигурацияИзменена Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Обновление конфигурации'"), - "e1cib/app/Обработка.УстановкаОбновлений", - НСтр("ru = 'Конфигурация отличается от основной конфигурации информационной базы.'"), - БиблиотекаКартинок.Информация32); - КонецЕсли; - -#КонецЕсли - -КонецПроцедуры - -Процедура ПрочитатьДанныеВЖурналРегистрации(РезультатОбновления, КаталогСкрипта) - - РезультатОбновления = Неопределено; - ПриОбновленииПроизошлаОшибка = Ложь; - - МассивФайлов = НайтиФайлы(КаталогСкрипта, "log*.txt"); - - Если МассивФайлов.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ФайлЖурнала = МассивФайлов[0]; - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.Прочитать(ФайлЖурнала.ПолноеИмя); - - Для НомерСтроки = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл - - ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки); - Если ПустаяСтрока(ТекущаяСтрока) Тогда - Продолжить; - КонецЕсли; - - ПредставлениеУровня = "Информация"; - Если Сред(ТекущаяСтрока, 3, 1) = "." И Сред(ТекущаяСтрока, 6, 1) = "." Тогда // Строка с датой - МассивСтроки = СтрРазделить(ТекущаяСтрока, " ", Ложь); - МассивДаты = СтрРазделить(МассивСтроки[0], "."); - МассивВремени = СтрРазделить(МассивСтроки[1], ":"); - ДатаСобытия = Дата(МассивДаты[2], МассивДаты[1], МассивДаты[0], МассивВремени[0], МассивВремени[1], МассивВремени[2]); - Если МассивСтроки[2] = "{ERR}" Тогда - ПредставлениеУровня = "Ошибка"; - ПриОбновленииПроизошлаОшибка = Истина; - КонецЕсли; - Комментарий = СокрЛП(Сред(ТекущаяСтрока, СтрНайти(ТекущаяСтрока, "}") + 2)); - - Если Комментарий = НСтр("ru = 'Обновление выполнено'") Тогда - РезультатОбновления = Истина; - Продолжить; - ИначеЕсли Комментарий = НСтр("ru = 'Обновление не выполнено'") Тогда - РезультатОбновления = Ложь; - Продолжить; - КонецЕсли; - - - Для НомерСледСтроки = НомерСтроки + 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл - ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСледСтроки); - Если Сред(ТекущаяСтрока, 3, 1) = "." И Сред(ТекущаяСтрока, 6, 1) = "." Тогда - // Следующая строка - строка нового события. - НомерСтроки = НомерСледСтроки - 1; - Прервать; - КонецЕсли; - - Комментарий = Комментарий + Символы.ПС + ТекущаяСтрока; - - КонецЦикла; - - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), ПредставлениеУровня, Комментарий, ДатаСобытия); - - КонецЕсли; - - КонецЦикла; - - // Если обновление выполнялось с версии БСП ниже 2.3.1.6, то записей лога - // - "Обновление выполнено" - // - "Обновление не выполнено" - // может не быть, потому будем опираться на то - происходили ли ошибки в ходе обновления. - Если РезультатОбновления = Неопределено Тогда - РезультатОбновления = Не ПриОбновленииПроизошлаОшибка; - КонецЕсли; - - ЗаписатьСобытияВЖурналРегистрации(); - -КонецПроцедуры - -Процедура ЗаписатьСобытияВЖурналРегистрации() Экспорт - - СобытияДляЖурналаРегистрации = ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]; - - Если ТипЗнч(СобытияДляЖурналаРегистрации) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - - Если СобытияДляЖурналаРегистрации.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ЖурналРегистрацииВызовСервера.ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации); - -КонецПроцедуры - -Функция ПоддерживаетсяПланировщикЗаданий() - - // Планировщик заданий поддерживается начиная с версии 6.0 - Windows Vista. - - СистемнаяИнформация = Новый СистемнаяИнформация(); - - ПозицияТочки = СтрНайти(СистемнаяИнформация.ВерсияОС, "."); - Если ПозицияТочки < 2 Тогда - Возврат Ложь; - КонецЕсли; - - НомерВерсии = Сред(СистемнаяИнформация.ВерсияОС, ПозицияТочки - 2, 2); - - ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); - ВерсияВышеVista = ОписаниеТипаЧисло.ПривестиЗначение(НомерВерсии) >= 6; - - Возврат ВерсияВышеVista; - -КонецФункции - Процедура ЗапланироватьОбновлениеКонфигурации(Параметры, ПараметрыАдминистрирования) СформироватьФайлыСкриптаОбновления(Ложь, Параметры, ПараметрыАдминистрирования); - ШаблонКоманды = "wscript.exe //nologo %1"; - СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонКоманды, - Параметры.ИмяСкриптаСозданияЗадачиПланировщикаЗадач); - - ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами = Истина; - ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаПрограммы); + КомандаЗапуска = Новый Массив; + КомандаЗапуска.Добавить("wscript.exe"); + КомандаЗапуска.Добавить("//nologo"); + КомандаЗапуска.Добавить(Параметры.ИмяСкриптаСозданияЗадачиПланировщикаЗадач); + + ФайловаяСистемаКлиент.ЗапуститьПрограмму(КомандаЗапуска, ПараметрыЗапускаПрограммы); ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь); КонецПроцедуры -#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда - -Функция КодировкаФайловПрограммыОбновления() - - // wscript.exe может работать только с файлами в кодировке UTF-16 LE. - Возврат КодировкаТекста.UTF16; - -КонецФункции - #КонецЕсли #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl b/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl new file mode 100644 index 000000000..6191f5bd7 --- /dev/null +++ b/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl @@ -0,0 +1,123 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция Заблокированы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ДанныеРегистрации = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища( + "ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия"); + Заблокированы = ДанныеРегистрации <> Неопределено; + Возврат Заблокированы; + +КонецФункции + +Процедура Заблокировать() Экспорт + + Если Не ПравоДоступа("АдминистрированиеДанных", Метаданные) Тогда + ВызватьИсключение + НСтр("ru = 'Обсуждения не заблокированы. Для выполнения операции требуется право администрирования данных.'"); + КонецЕсли; + + Если Заблокированы() Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ДанныеРегистрации = СистемаВзаимодействия.ПолучитьДанныеРегистрацииИнформационнойБазы(); + Если ТипЗнч(ДанныеРегистрации) = Тип("ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия") Тогда + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище( + "ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия", + ДанныеРегистрации); + КонецЕсли; + СистемаВзаимодействия.УстановитьДанныеРегистрацииИнформационнойБазы(Неопределено); + +КонецПроцедуры + +Процедура Разблокировать() Экспорт + + Если Не ПравоДоступа("АдминистрированиеДанных", Метаданные) Тогда + ВызватьИсключение + НСтр("ru = 'Обсуждения не заблокированы. Для выполнения операции требуется право администрирования данных.'"); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ДанныеРегистрации = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища( + "ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия"); + ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища("ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия"); + Если ТипЗнч(ДанныеРегистрации) = Тип("ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия") Тогда + СистемаВзаимодействия.УстановитьДанныеРегистрацииИнформационнойБазы(ДанныеРегистрации); + КонецЕсли; + ДанныеРегистрации = Неопределено; + +КонецПроцедуры + +Процедура ПриСозданииНаСервереПользователя(Отказ, Форма, Объект) Экспорт + + Если Не ПравоДоступа("АдминистрированиеДанных", Метаданные) Тогда + Форма.ПредлагатьОбсуждения = Ложь; + Возврат; + КонецЕсли; + + ПредлагатьОбсуждения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПредлагатьОбсуждения", Истина); + Форма.ПредлагатьОбсуждения = Не Отказ И Не ЗначениеЗаполнено(Объект.Ссылка) И ПредлагатьОбсуждения + И Не ОбсужденияСлужебныйВызовСервера.Подключены() И БольшеДвухПользователей(); + Если Не Форма.ПредлагатьОбсуждения Тогда + Возврат; + КонецЕсли; + + ПодсистемаАдминистрирование = Метаданные.Подсистемы.Найти("Администрирование"); + Если ПодсистемаАдминистрирование <> Неопределено Тогда + ВключитьПозднее = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Включить обсуждения также можно позднее из раздела %1.'"), + ПодсистемаАдминистрирование.Синоним); + Иначе + ВключитьПозднее = НСтр("ru = 'Включить обсуждения также можно позднее из настроек программы.'"); + КонецЕсли; + Форма.ПредлагатьОбсужденияТекст = + НСтр("ru = 'Включить обсуждения? + | + |С их помощью пользователи смогут отправлять друг другу текстовые сообщения и совершать видеозвонки, создавать тематические обсуждения и вести переписку по документам.'") + + Символы.ПС + Символы.ПС + ВключитьПозднее; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция БольшеДвухПользователей() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(Пользователи.Ссылка) КАК Количество + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | НЕ Пользователи.Недействителен + | И НЕ Пользователи.Служебный"; + + КоличествоВсехПользователей = Запрос.Выполнить().Выгрузить()[0].Количество; + Если КоличествоВсехПользователей < 10 Тогда // для того, чтобы избежать перебора большого количества пользователей ИБ + КоличествоПользователей = 0; + Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл + Если Пользователи.ВходВПрограммуРазрешен(ПользовательИБ) Тогда + КоличествоПользователей = КоличествоПользователей + 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..2bea4474a --- /dev/null +++ b/SSL/src/CommonModules/ОбсужденияСлужебный/ОбсужденияСлужебный.mdo @@ -0,0 +1,11 @@ + + + ОбсужденияСлужебный + + ru + Обсуждения служебный + + true + true + true + diff --git a/SSL/src/CommonModules/ОбсужденияСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбсужденияСлужебныйВызовСервера/Module.bsl index dcaa1c664..7df36bb6c 100644 --- a/SSL/src/CommonModules/ОбсужденияСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбсужденияСлужебныйВызовСервера/Module.bsl @@ -1,8 +1,16 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс Функция Подключены() Экспорт - Если Заблокированы() Тогда + Если ОбсужденияСлужебный.Заблокированы() Тогда Возврат Ложь; КонецЕсли; @@ -13,69 +21,9 @@ КонецФункции -Функция Заблокированы() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ДанныеРегистрации = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища( - "ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия"); - - Заблокированы = ДанныеРегистрации <> Неопределено; - - УстановитьПривилегированныйРежим(Ложь); - - Возврат Заблокированы; - -КонецФункции - -Процедура Заблокировать() Экспорт - - Если Не ПравоДоступа("АдминистрированиеДанных", Метаданные) Тогда - ВызватьИсключение - НСтр("ru = 'Обсуждения не заблокированы. Для выполнения операции требуется право администрирования данных.'"); - КонецЕсли; - - Если Заблокированы() Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - ДанныеРегистрации = СистемаВзаимодействия.ПолучитьДанныеРегистрацииИнформационнойБазы(); - - Если ТипЗнч(ДанныеРегистрации) = Тип("ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия") Тогда - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище( - "ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия", - ДанныеРегистрации); - КонецЕсли; - - СистемаВзаимодействия.УстановитьДанныеРегистрацииИнформационнойБазы(Неопределено); - - УстановитьПривилегированныйРежим(Ложь); - -КонецПроцедуры - Процедура Разблокировать() Экспорт - Если Не ПравоДоступа("АдминистрированиеДанных", Метаданные) Тогда - ВызватьИсключение - НСтр("ru = 'Обсуждения не заблокированы. Для выполнения операции требуется право администрирования данных.'"); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - ДанныеРегистрации = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища( - "ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия"); - - ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища("ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия"); - - Если ТипЗнч(ДанныеРегистрации) = Тип("ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия") Тогда - СистемаВзаимодействия.УстановитьДанныеРегистрацииИнформационнойБазы(ДанныеРегистрации); - КонецЕсли; - - ДанныеРегистрации = Неопределено; - - УстановитьПривилегированныйРежим(Ложь); + ОбсужденияСлужебный.Разблокировать(); КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl index 148337a5e..f8f291bb8 100644 --- a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс Функция Подключены() Экспорт @@ -6,16 +14,98 @@ КонецФункции -Процедура ПоказатьПодключение() Экспорт +Процедура ПоказатьПодключение(ОписаниеЗавершения = Неопределено) Экспорт - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("e1cib/app/Обработка.ПодключениеОбсуждений") + ОткрытьФорму("Обработка.ПодключениеОбсуждений.Форма",,,,,, ОписаниеЗавершения); КонецПроцедуры Процедура ПоказатьОтключение() Экспорт - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("e1cib/command/Обработка.ПодключениеОбсуждений.Команда.ОтключениеОбсуждений"); + Если Не ОбсужденияСлужебныйВызовСервера.Подключены() Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Подключение обсуждений не выполнено.'")); + Возврат; + КонецЕсли; + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Отключить", НСтр("ru = 'Отключить'")); + Кнопки.Добавить(КодВозвратаДиалога.Нет); + + Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОтключении", ЭтотОбъект); + + ПоказатьВопрос(Оповещение, НСтр("ru = 'Отключить обсуждения?'"), + Кнопки,, КодВозвратаДиалога.Нет); + +КонецПроцедуры + +Процедура ПослеЗаписиПользователя(Форма, ОписаниеЗавершения) Экспорт + + Если Не Форма.ПредлагатьОбсуждения Тогда + ВыполнитьОбработкуОповещения(ОписаниеЗавершения); + Возврат; + КонецЕсли; + + Форма.ПредлагатьОбсуждения = Ложь; + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ПредлагатьОбсужденияЗавершение", ЭтотОбъект, ОписаниеЗавершения); + ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); + ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Истина; + ПараметрыВопроса.Заголовок = НСтр("ru = 'Обсуждения (система взаимодействий)'"); + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОповещениеОЗавершении, Форма.ПредлагатьОбсужденияТекст, + РежимДиалогаВопрос.ДаНет, ПараметрыВопроса); КонецПроцедуры #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПослеОтветаНаВопросОбОтключении(КодВозврата, Контекст) Экспорт + + Если КодВозврата = "Отключить" Тогда + ПриОтключении(); + КонецЕсли; + +КонецПроцедуры + +Процедура ПриОтключении() + + Оповещение = Новый ОписаниеОповещения("ПослеУспешногоОтключения", ЭтотОбъект,, + "ПриОбработкеОшибкиОтключения", ЭтотОбъект); + СистемаВзаимодействия.НачатьОтменуРегистрацииИнформационнойБазы(Оповещение); + +КонецПроцедуры + +Процедура ПослеУспешногоОтключения(Контекст) Экспорт + + Оповестить("ОбсужденияПодключены", Ложь); + +КонецПроцедуры + +Процедура ПриОбработкеОшибкиОтключения(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке); + +КонецПроцедуры + +Процедура ПредлагатьОбсужденияЗавершение(Результат, ОписаниеЗавершения) Экспорт + + Если Результат = Неопределено Тогда + ВыполнитьОбработкуОповещения(ОписаниеЗавершения); + Возврат; + КонецЕсли; + + Если Результат.БольшеНеЗадаватьЭтотВопрос Тогда + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПредлагатьОбсуждения", Ложь); + КонецЕсли; + + Если Результат.Значение = КодВозвратаДиалога.Да Тогда + ПоказатьПодключение(); + Возврат; + КонецЕсли; + ВыполнитьОбработкуОповещения(ОписаниеЗавершения); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index abf351303..b4309b1b3 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -1,26 +1,107 @@ -//////////////////////////////////////////////////////////////////////////////// -// Серверные процедуры и функции общего назначения: -// - для работы с данными в базе; -// - для работы с прикладными типами и коллекциями значений; -// - математические процедуры и функции; -// - для работы с внешним соединением; -// - для работы с формами; -// - для работы с типами, объектами метаданных и их строковыми представлениями; -// - функции определения типов объектов метаданных; -// - сохранение, чтение и удаление настроек из хранилищ; -// - для работы с табличными документами; -// - для работы с журналом регистрации; -// - версионирование программных интерфейсов; -// - вспомогательные процедуры и функции. -// -//////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс +#Область ОповещениеПользователя + +// АПК:142-выкл 4 необязательных параметра для совместимости +// с устаревшей процедурой ОбщегоНазначенияКлиентСервер.СообщитьПользователю. + +// Формирует и выводит сообщение, которое может быть связано с элементом управления формы. +// +// Параметры: +// ТекстСообщенияПользователю - Строка - текст сообщения. +// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится. +// Поле - Строка - наименование реквизита формы. +// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). +// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина. +// +// Пример: +// +// 1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта: +// ОбщегоНазначенияКлиент.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "ПолеВРеквизитеФормыОбъект", +// "Объект"); +// +// Альтернативный вариант использования в форме объекта: +// ОбщегоНазначенияКлиент.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "Объект.ПолеВРеквизитеФормыОбъект"); +// +// 2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы: +// ОбщегоНазначенияКлиент.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "ИмяРеквизитаФормы"); +// +// 3. Для вывода сообщения связанного с объектом информационной базы: +// ОбщегоНазначенияКлиент.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ); +// +// 4. Для вывода сообщения по ссылке на объект информационной базы: +// ОбщегоНазначенияКлиент.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ); +// +// Случаи некорректного использования: +// 1. Передача одновременно параметров КлючДанных и ПутьКДанным. +// 2. Передача в параметре КлючДанных значения типа отличного от допустимого. +// 3. Установка ссылки без установки поля (и/или пути к данным). +// +Процедура СообщитьПользователю( + Знач ТекстСообщенияПользователю, + Знач КлючДанных = Неопределено, + Знач Поле = "", + Знач ПутьКДанным = "", + Отказ = Ложь) Экспорт + + ЭтоОбъект = Ложь; + + Если КлючДанных <> Неопределено + И XMLТипЗнч(КлючДанных) <> Неопределено Тогда + + ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; + ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0; + КонецЕсли; + + ОбщегоНазначенияСлужебныйКлиентСервер.СообщитьПользователю( + ТекстСообщенияПользователю, + КлючДанных, + Поле, + ПутьКДанным, + Отказ, + ЭтоОбъект); + +КонецПроцедуры + +// АПК:142-вкл + +// Возвращает код основного языка конфигурации, например "ru". +// +// Возвращаемое значение: +// Строка - код языка. +// +Функция КодОсновногоЯзыка() Экспорт + + Возврат Метаданные.ОсновнойЯзык.КодЯзыка; + +КонецФункции + +#КонецОбласти + +#Область ДанныеВБазе + //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции для работы с данными в базе. -// Структура, содержащая значения реквизитов, прочитанные из информационной базы по ссылке на объект. +// Возвращает структуру, содержащую значения реквизитов, прочитанные из информационной базы по ссылке на объект. +// Рекомендуется использовать вместо обращения к реквизитам объекта через точку от ссылки на объект +// для быстрого чтения отдельных реквизитов объекта из базы данных. // // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. @@ -37,11 +118,10 @@ // Если ключ задан, а значение не определено, то имя поля берется из ключа. // - Массив, ФиксированныйМассив - имена реквизитов в формате требований // к свойствам структуры. -// ВыбратьРазрешенные - Булево - если Истина, то запрос к объекту выполняется с учетом прав пользователя, и в случае, -// - если есть ограничение на уровне записей, то все реквизиты вернутся -// со значением Неопределено; -// - если нет прав для работы с таблицей, то возникнет исключение. -// - если Ложь, то возникнет исключение при отсутствии прав на таблицу +// ВыбратьРазрешенные - Булево - если Истина, то запрос к объекту выполняется с учетом прав пользователя; +// если есть ограничение на уровне записей, то все реквизиты вернутся со +// значением Неопределено; если нет прав для работы с таблицей, то возникнет исключение; +// если Ложь, то возникнет исключение при отсутствии прав на таблицу // или любой из реквизитов. // // Возвращаемое значение: @@ -62,10 +142,10 @@ // Вычисление ссылки по имени предопределенного. // - дополнительно выполняет проверку метаданных предопределенного, выполняется предварительно. Попытка - Ссылка = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(ПолноеИмяПредопределенногоЭлемента); + Ссылка = ПредопределенныйЭлемент(ПолноеИмяПредопределенногоЭлемента); Исключение ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный первый параметр Ссылка: + НСтр("ru = 'Неверный первый параметр Ссылка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение ТекстОшибки; КонецПопытки; @@ -77,14 +157,11 @@ // Если предопределенный не создан в ИБ, то требуется выполнить проверку доступа к объекту. // В других сценариях проверка доступа выполняется в момент исполнения запроса. Если Ссылка = Неопределено Тогда - МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); - Если Не ПравоДоступа("Чтение", МетаданныеОбъекта) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав для работы с таблицей ""%1""'"), ПолноеИмяОбъектаМетаданных); КонецЕсли; - КонецЕсли; Иначе // Если передана ссылка. @@ -92,8 +169,9 @@ Попытка ПолноеИмяОбъектаМетаданных = Ссылка.Метаданные().ПолноеИмя(); Исключение - ВызватьИсключение НСтр("ru = 'Неверный первый параметр Ссылка: - |- Значение должно быть ссылкой или именем предопределенного элемента'"); + ВызватьИсключение + НСтр("ru = 'Неверный первый параметр Ссылка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: + |- Значение должно быть ссылкой или именем предопределенного элемента'"); КонецПопытки; КонецЕсли; @@ -132,7 +210,8 @@ Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты); Если Результат.Ошибка Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный второй параметр Реквизиты: %1'"), Результат.ОписаниеОшибки); + НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: %1'"), + Результат.ОписаниеОшибки); КонецЕсли; // Не удалось распознать ошибку, проброс первичной ошибки. @@ -142,7 +221,8 @@ КонецЦикла; Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты))); + НСтр("ru = 'Неверный тип второго параметра Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: %1'"), + Строка(ТипЗнч(Реквизиты))); КонецЕсли; // Подготовка результата (после выполнения запроса переопределится). @@ -174,13 +254,19 @@ КонецЕсли; ТекстЗапроса = - "ВЫБРАТЬ " + ?(ВыбратьРазрешенные, "РАЗРЕШЕННЫЕ", "") + " - |" + ТекстЗапросаПолей + " + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + |&ТекстЗапросаПолей |ИЗ - | " + ПолноеИмяОбъектаМетаданных + " КАК Таблица + | &ПолноеИмяОбъектаМетаданных КАК Таблица |ГДЕ - | Таблица.Ссылка = &Ссылка - |"; + | Таблица.Ссылка = &Ссылка"; + + Если Не ВыбратьРазрешенные Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РАЗРЕШЕННЫЕ", ""); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаПолей", ТекстЗапросаПолей); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); // Выполнение запроса. Запрос = Новый Запрос; @@ -209,7 +295,8 @@ Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты); Если Результат.Ошибка Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный второй параметр Реквизиты: %1'"), Результат.ОписаниеОшибки); + НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: %1'"), + Результат.ОписаниеОшибки); КонецЕсли; // Не удалось распознать ошибку, проброс первичной ошибки. @@ -226,7 +313,9 @@ КонецФункции -// Значение реквизита, прочитанного из информационной базы по ссылке на объект. +// Возвращает значения реквизита, прочитанного из информационной базы по ссылке на объект. +// Рекомендуется использовать вместо обращения к реквизитам объекта через точку от ссылки на объект +// для быстрого чтения отдельных реквизитов объекта из базы данных. // // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. @@ -235,23 +324,24 @@ // Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить. // - Строка - полное имя предопределенного элемента, значения реквизитов которого необходимо получить. // ИмяРеквизита - Строка - имя получаемого реквизита. -// ВыбратьРазрешенные - Булево - если Истина, то запрос к объекту выполняется с учетом прав пользователя, и в случае, -// - если есть ограничение на уровне записей, то возвращается Неопределено; -// - если нет прав для работы с таблицей, то возникнет исключение. -// - если Ложь, то возникнет исключение при отсутствии прав на таблицу +// ВыбратьРазрешенные - Булево - если Истина, то запрос к объекту выполняется с учетом прав пользователя; +// если есть ограничение на уровне записей, то возвращается Неопределено; +// если нет прав для работы с таблицей, то возникнет исключение; +// если Ложь, то возникнет исключение при отсутствии прав на таблицу // или любой из реквизитов. // // Возвращаемое значение: // Произвольный - зависит от типа значения прочитанного реквизита. -// - если в параметр Ссылка передана пустая ссылка, то возвращается Неопределено. +// - если в параметр Ссылка передана пустая ссылка, то возвращается Неопределено; // - если в параметр Ссылка передана ссылка несуществующего объекта (битая ссылка), // то возвращается Неопределено. // Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные = Ложь) Экспорт Если ПустаяСтрока(ИмяРеквизита) Тогда - ВызватьИсключение НСтр("ru = 'Неверный второй параметр ИмяРеквизита: - |- Имя реквизита должно быть заполнено'"); + ВызватьИсключение + НСтр("ru = 'Неверный второй параметр ИмяРеквизита в функции ОбщегоНазначения.ЗначениеРеквизитаОбъекта: + |- Имя реквизита должно быть заполнено'"); КонецЕсли; Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные); @@ -259,21 +349,25 @@ КонецФункции -// Значения реквизитов, прочитанные из информационной базы для нескольких объектов. +// Возвращает значения реквизитов, прочитанные из информационной базы для нескольких объектов. +// Рекомендуется использовать вместо обращения к реквизитам объекта через точку от ссылки на объект +// для быстрого чтения отдельных реквизитов объекта из базы данных. // -// Если необходимо зачитать реквизит независимо от прав текущего пользователя, -// то следует использовать предварительный переход в привилегированный режим. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. // // Параметры: -// Ссылки - Массив - массив ссылок на объекты одного типа. -// Значения массива должны быть ссылками на объекты одного типа. -// если массив пуст, то результатом будет пустое соответствие. +// Ссылки - Массив, ФиксированныйМассив - ссылки на объекты одного типа. +// Значения массива должны быть ссылками на объекты одного типа. +// если массив пуст, то результатом будет пустое соответствие. // Реквизиты - Строка - имена реквизитов перечисленные через запятую, в формате требований к свойствам -// структуры. Например, "Код, Наименование, Родитель". -// ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя, и в случае, -// - если какой-либо объект будет исключен из выборки по правам, то этот объект -// будет исключен и из результата; -// - если Ложь, то возникнет исключение при отсутствии прав на таблицу +// структуры. Например, "Код, Наименование, Родитель". +// - Массив, ФиксированныйМассив - имена реквизитов в формате требований +// к свойствам структуры. +// ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя; +// если какой-либо объект будет исключен из выборки по правам, то этот объект +// будет исключен и из результата; +// если Ложь, то возникнет исключение при отсутствии прав на таблицу // или любой из реквизитов. // // Возвращаемое значение: @@ -285,14 +379,20 @@ // Функция ЗначенияРеквизитовОбъектов(Ссылки, Знач Реквизиты, ВыбратьРазрешенные = Ложь) Экспорт + Если ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда + Реквизиты = СтрСоединить(Реквизиты, ","); + КонецЕсли; + Если ПустаяСтрока(Реквизиты) Тогда - ВызватьИсключение НСтр("ru = 'Неверный второй параметр Реквизиты: - |- Поле объекта должно быть указано'"); + ВызватьИсключение + НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: + |- Поле объекта должно быть указано'"); КонецЕсли; Если СтрНайти(Реквизиты, ".") <> 0 Тогда - ВызватьИсключение НСтр("ru = 'Неверный второй параметр Реквизиты: - |- Обращение через точку не поддерживается'"); + ВызватьИсключение + НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: + |- Обращение через точку не поддерживается'"); КонецЕсли; ЗначенияРеквизитов = Новый Соответствие; @@ -305,19 +405,30 @@ Попытка ПолноеИмяОбъектаМетаданных = ПерваяСсылка.Метаданные().ПолноеИмя(); Исключение - ВызватьИсключение НСтр("ru = 'Неверный первый параметр Ссылки: - |- Значения массива должны быть ссылками'"); + ВызватьИсключение + НСтр("ru = 'Неверный первый параметр Ссылки в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: + |- Значения массива должны быть ссылками'"); КонецПопытки; - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ " + ?(ВыбратьРазрешенные, "РАЗРЕШЕННЫЕ", "") + " - | Ссылка КАК Ссылка, " + Реквизиты + " + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Ссылка КАК Ссылка, + | &Реквизиты |ИЗ - | " + ПолноеИмяОбъектаМетаданных + " КАК Таблица + | &ПолноеИмяОбъектаМетаданных КАК Таблица |ГДЕ | Таблица.Ссылка В (&Ссылки)"; + + Если Не ВыбратьРазрешенные Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РАЗРЕШЕННЫЕ", ""); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Реквизиты", Реквизиты); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); + + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылки", Ссылки); + Запрос.Текст = ТекстЗапроса; Попытка Выборка = Запрос.Выполнить().Выбрать(); @@ -332,7 +443,8 @@ Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты); Если Результат.Ошибка Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный второй параметр Реквизиты: %1'"), Результат.ОписаниеОшибки); + НСтр("ru = 'Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъектов: %1'"), + Результат.ОписаниеОшибки); КонецЕсли; // Не удалось распознать ошибку, проброс первичной ошибки. @@ -350,19 +462,21 @@ КонецФункции -// Значения реквизита, прочитанного из информационной базы для нескольких объектов. +// Возвращает значения реквизита, прочитанного из информационной базы для нескольких объектов. +// Рекомендуется использовать вместо обращения к реквизитам объекта через точку от ссылки на объект +// для быстрого чтения отдельных реквизитов объекта из базы данных. // -// Если необходимо зачитать реквизит независимо от прав текущего пользователя, -// то следует использовать предварительный переход в привилегированный режим. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. // // Параметры: // МассивСсылок - Массив - массив ссылок на объекты одного типа. // Значения массива должны быть ссылками на объекты одного типа. // ИмяРеквизита - Строка - например, "Код". -// ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя, и в случае, -// - если какой-либо объект будет исключен из выборки по правам, то этот объект -// будет исключен и из результата; -// - если Ложь, то возникнет исключение при отсутствии прав на таблицу +// ВыбратьРазрешенные - Булево - если Истина, то запрос к объектам выполняется с учетом прав пользователя; +// если какой-либо объект будет исключен из выборки по правам, то этот объект +// будет исключен и из результата; +// если Ложь, то возникнет исключение при отсутствии прав на таблицу // или любой из реквизитов. // // Возвращаемое значение: @@ -373,7 +487,7 @@ Функция ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита, ВыбратьРазрешенные = Ложь) Экспорт Если ПустаяСтрока(ИмяРеквизита) Тогда - ВызватьИсключение НСтр("ru = 'Неверный второй параметр ИмяРеквизита: + ВызватьИсключение НСтр("ru = 'Неверный второй параметр ИмяРеквизита в функции ОбщегоНазначения.ЗначениеРеквизитаОбъектов: |- Имя реквизита должно быть заполнено'"); КонецЕсли; @@ -386,6 +500,45 @@ КонецФункции +// Возвращает ссылку предопределенного элемента по его полному имени. +// Предопределенные элементы могут содержаться только в следующих объектах: +// - справочники; +// - планы видов характеристик; +// - планы счетов; +// - планы видов расчета. +// После изменения состава предопределенных следует выполнить метод +// ОбновитьПовторноИспользуемыеЗначения(), который сбросит кэш ПовтИсп в текущем сеансе. +// +// Параметры: +// ПолноеИмяПредопределенного - Строка - полный путь к предопределенному элементу, включая его имя. +// Формат аналогичен функции глобального контекста ПредопределенноеЗначение(). +// Например: +// "Справочник.ВидыКонтактнойИнформации.EmailПользователя" +// "ПланСчетов.Хозрасчетный.Материалы" +// "ПланВидовРасчета.Начисления.ОплатаПоОкладу". +// +// Возвращаемое значение: +// ЛюбаяСсылка - ссылка на предопределенный элемент. +// Неопределено - если предопределенный элемент есть в метаданных, но не создан в ИБ. +// +Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного) Экспорт + + Если ОбщегоНазначенияСлужебныйКлиентСервер.ИспользоватьСтандартнуюФункциюПолученияПредопределенного( + ПолноеИмяПредопределенного) Тогда + + Возврат ПредопределенноеЗначение(ПолноеИмяПредопределенного); + КонецЕсли; + + ПоляПредопределенного = ОбщегоНазначенияСлужебныйКлиентСервер.ИмяПредопределенногоПоПолям(ПолноеИмяПредопределенного); + + ПредопределенныеЗначения = СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных( + ПоляПредопределенного.ПолноеИмяОбъектаМетаданных); + + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.ПредопределенныйЭлемент( + ПолноеИмяПредопределенного, ПоляПредопределенного, ПредопределенныеЗначения); + +КонецФункции + // Проверяет статус проведения переданных документов и возвращает // те из них, которые не проведены. // @@ -491,22 +644,19 @@ КонецФункции // Проверяет наличие ссылок на объект в базе данных. +// При вызове в неразделенном сеансе не выявляет ссылок в разделенных областях. // // Параметры: -// СсылкаИлиМассивСсылок - ЛюбаяСсылка, Массив - объект или список объектов. +// СсылкаИлиМассивСсылок - ЛюбаяСсылка, Массив - объект или список объектов. // ИскатьСредиСлужебныхОбъектов - Булево - если Истина, то не будут учитываться -// исключения поиска ссылок, заданные при разработке конфигурации. -// Про исключение поиска ссылок подробнее -// см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок -// ДругиеИсключения - Массив - полные имена объектов метаданных, которые также -// требуется исключить из поиска ссылок. +// исключения поиска ссылок, заданные при разработке конфигурации. +// Про исключение поиска ссылок подробнее +// см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок // // Возвращаемое значение: // Булево - Истина, если есть ссылки на объект. // -Функция ЕстьСсылкиНаОбъект(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь, ДругиеИсключения = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); +Функция ЕстьСсылкиНаОбъект(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь) Экспорт Если ТипЗнч(СсылкаИлиМассивСсылок) = Тип("Массив") Тогда МассивСсылок = СсылкаИлиМассивСсылок; @@ -515,100 +665,81 @@ МассивСсылок.Добавить(СсылкаИлиМассивСсылок); КонецЕсли; - ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок); - ТаблицаСсылок.Колонки[0].Имя = "ИсходнаяСсылка"; - ТаблицаСсылок.Колонки[1].Имя = "ОбнаруженныйСсылка"; - ТаблицаСсылок.Колонки[2].Имя = "ОбнаруженныйМетаданные"; + УстановитьПривилегированныйРежим(Истина); + МестаИспользования = НайтиПоСсылкам(МассивСсылок); + УстановитьПривилегированныйРежим(Ложь); - Если НЕ ИскатьСредиСлужебныхОбъектов Тогда + // МестаИспользования - ТаблицаЗначений - где: + // * Ссылка - ЛюбаяСсылка - Ссылка, которая анализируется. + // * Данные - Произвольный - Данные, содержащие анализируемую ссылку. + // * Метаданные - ОбъектМетаданных - Метаданные найденных данных. + + Если Не ИскатьСредиСлужебныхОбъектов Тогда ИсключенияПоискаСсылок = ИсключенияПоискаСсылок(); Исключения = Новый Массив; - Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл - ИсключениеПоиска = ИсключенияПоискаСсылок[СтрокаТаблицы.ОбнаруженныйМетаданные]; - Если ИсключениеПоиска = "*" Тогда - Исключения.Добавить(СтрокаТаблицы); + Для Каждого МестоИспользования Из МестаИспользования Цикл + Если ЭтоСлужебныеДанные(МестоИспользования, ИсключенияПоискаСсылок) Тогда + Исключения.Добавить(МестоИспользования); КонецЕсли; КонецЦикла; - Для Каждого СтрокаТаблицы Из Исключения Цикл - ТаблицаСсылок.Удалить(СтрокаТаблицы); + Для Каждого МестоИспользования Из Исключения Цикл + МестаИспользования.Удалить(МестоИспользования); КонецЦикла; КонецЕсли; - Если ТипЗнч(ДругиеИсключения) = Тип("Массив") Тогда - ИсключенияПоискаСсылок = Новый Соответствие; - Исключения = Новый Массив; - - Для каждого ПолноеИмя Из ДругиеИсключения Цикл - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); - Если ОбъектМетаданных <> Неопределено Тогда - ИсключенияПоискаСсылок.Вставить(ОбъектМетаданных, "*"); - КонецЕсли; - КонецЦикла; - - Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл - ИсключениеПоиска = ИсключенияПоискаСсылок[СтрокаТаблицы.ОбнаруженныйМетаданные]; - Если ИсключениеПоиска = "*" Тогда - Исключения.Добавить(СтрокаТаблицы); - КонецЕсли; - КонецЦикла; - - Для Каждого СтрокаТаблицы Из Исключения Цикл - ТаблицаСсылок.Удалить(СтрокаТаблицы); - КонецЦикла; - КонецЕсли; - - Возврат ТаблицаСсылок.Количество() > 0; + Возврат МестаИспользования.Количество() > 0; КонецФункции // Производит замену ссылок во всех данных. После замены неиспользуемые ссылки опционально удаляются. // Замена ссылок происходит с транзакциями по изменяемому объекту и его связям, не по анализируемой ссылке. +// При вызове в неразделенном сеансе не выявляет ссылок в разделенных областях. // // Параметры: -// ПарыЗамен - Соответствие - Пары замен. -// * Ключ - ЛюбаяСсылка - Что ищем (дубль). -// * Значение - ЛюбаяСсылка - На что заменяем (оригинал). +// ПарыЗамен - Соответствие - пары замен. +// * Ключ - ЛюбаяСсылка - что ищем (дубль). +// * Значение - ЛюбаяСсылка - на что заменяем (оригинал). // Ссылки сами на себя и пустые ссылки для поиска будут проигнорированы. // // Параметры - Структура - Необязательный. Параметры замены. // -// * СпособУдаления - Строка - Необязательный. Что делать с дублем после успешной замены. -// "" - По умолчанию. Не предпринимать никаких действий. -// "Пометка" - Помечать на удаление. -// "Непосредственно" - Удалять непосредственно. +// * СпособУдаления - Строка - необязательный. Что делать с дублем после успешной замены. +// "" - по умолчанию. Не предпринимать никаких действий. +// "Пометка" - помечать на удаление. +// "Непосредственно" - удалять непосредственно. // -// * УчитыватьПрикладныеПравила - Булево - Необязательный. Режим проверки параметра ПарыЗамен. -// Истина - По умолчанию. Проверять каждую пару "дубль-оригинал" (вызывается функция +// * УчитыватьПрикладныеПравила - Булево - необязательный. Режим проверки параметра ПарыЗамен. +// Истина - по умолчанию. Проверять каждую пару "дубль-оригинал" (вызывается функция // ВозможностьЗаменыЭлементов модуля менеджера). -// Ложь - Отключить прикладные проверки пар. +// Ложь - отключить прикладные проверки пар. // -// * ВключатьБизнесЛогику - Булево - Необязательный. Режим записи мест использования при замене дублей на оригиналы. -// Истина - По умолчанию. Места использования дублей записываются в режиме ОбменДанными.Загрузка = Ложь. -// Ложь - Запись ведется в режиме ОбменДанными.Загрузка = Истина. +// * ВключатьБизнесЛогику - Булево - необязательный. Режим записи мест использования при замене дублей на оригиналы. +// Истина - по умолчанию. Места использования дублей записываются в режиме ОбменДанными.Загрузка = Ложь. +// Ложь - запись ведется в режиме ОбменДанными.Загрузка = Истина. // -// * ЗаменаПарыВТранзакции - Булево - Необязательный. Определяет размер транзакции. -// Истина - По умолчанию. Транзакция охватывает все места использования одного дубля. Может быть очень ресурсоемко +// * ЗаменаПарыВТранзакции - Булево - необязательный. Определяет размер транзакции. +// Истина - по умолчанию. Транзакция охватывает все места использования одного дубля. Может быть очень ресурсоемко // в случае большого количества мест использований. -// Ложь - Замена каждого места использования выполняется в отдельной транзакции. +// Ложь - замена каждого места использования выполняется в отдельной транзакции. // -// * ПривилегированнаяЗапись - Булево - Необязательный. Требуется ли устанавливать привилегированный режим перед запись. -// Ложь - По умолчанию. Записывать с текущими правами. -// Истина - Записывать в привилегированном режиме. +// * ПривилегированнаяЗапись - Булево - необязательный. Требуется ли устанавливать привилегированный режим перед запись. +// Ложь - по умолчанию. Записывать с текущими правами. +// Истина - записывать в привилегированном режиме. // // Возвращаемое значение: -// ТаблицаЗначений - Неуспешные замены (ошибки). -// * Ссылка - ЛюбаяСсылка - Ссылка, которую заменяли. -// * ОбъектОшибки - Произвольный - Объект - причина ошибки. -// * ПредставлениеОбъектаОшибки - Строка - Строковое представление объекта ошибки. -// * ТипОшибки - Строка - Тип ошибки: +// ТаблицаЗначений - неуспешные замены (ошибки). +// * Ссылка - ЛюбаяСсылка - ссылка, которую заменяли. +// * ОбъектОшибки - Произвольный - объект - причина ошибки. +// * ПредставлениеОбъектаОшибки - Строка - строковое представление объекта ошибки. +// * ТипОшибки - Строка - тип ошибки: // "ОшибкаБлокировки" - при обработке ссылки некоторые объекты были заблокированы. // "ДанныеИзменены" - в процессе обработки данные были изменены другим пользователем. // "ОшибкаЗаписи" - не смогли записать объект, или метод ВозможностьЗаменыЭлементов вернул отказ. // "ОшибкаУдаления" - не смогли удалить объект. // "НеизвестныеДанные" - при обработке были найдены данные, которые не планировались к анализу, замена не реализована. -// * ТекстОшибки - Строка - Подробное описание ошибки. +// * ТекстОшибки - Строка - подробное описание ошибки. // Функция ЗаменитьСсылки(Знач ПарыЗамен, Знач Параметры = Неопределено) Экспорт @@ -769,7 +900,6 @@ КонецПопытки; Возврат Результат.Ошибки; - КонецФункции // Получает все места использования ссылок. @@ -777,19 +907,19 @@ // При вызове в неразделенном сеансе не выявляет ссылок в разделенных областях. // // Параметры: -// НаборСсылок - Массив - Ссылки, для которых ищем места использования. -// АдресРезультата - Строка - Необязательный адрес во временном хранилище, куда будет помещен копия результата +// НаборСсылок - Массив - ссылки, для которых ищем места использования. +// АдресРезультата - Строка - необязательный адрес во временном хранилище, куда будет помещен копия результата // замены. // // Возвращаемое значение: -// ТаблицаЗначений - Состоит из колонок: -// * Ссылка - ЛюбаяСсылка - Ссылка, которая анализируется. -// * Данные - Произвольный - Данные, содержащие анализируемую ссылку. -// * Метаданные - ОбъектМетаданных - Метаданные найденных данных. -// * ПредставлениеДанных - Строка - Представление данных, содержащих анализируемую ссылку. -// * ТипСсылки - Тип - Тип анализируемой ссылки. +// ТаблицаЗначений - состоит из колонок: +// * Ссылка - ЛюбаяСсылка - ссылка, которая анализируется. +// * Данные - Произвольный - данные, содержащие анализируемую ссылку. +// * Метаданные - ОбъектМетаданных - метаданные найденных данных. +// * ПредставлениеДанных - Строка - представление данных, содержащих анализируемую ссылку. +// * ТипСсылки - Тип - тип анализируемой ссылки. // * ВспомогательныеДанные - Булево - Истина, если данные используются анализируемой ссылкой как -// вспомогательными данными (ведущее измерение или попали в исключение ПриДобавленииИсключенийПоискаСсылок). +// вспомогательные данные (ведущее измерение или попали в исключение ПриДобавленииИсключенийПоискаСсылок). // * ЭтоСлужебныеДанные - Булево - данные попали в исключение ПриДобавленииИсключенийПоискаСсылок // Функция МестаИспользования(Знач НаборСсылок, Знач АдресРезультата = "") Экспорт @@ -901,82 +1031,788 @@ Возврат МестаИспользования; КонецФункции -// Возвращает описание типа, включающего в себя все возможные ссылочные типы конфигурации. +// Возвращает исключения при поиске мест использования объектов. // // Возвращаемое значение: -// ОписаниеТипов - все ссылочные типы конфигурации. +// Соответствие - исключения поиска ссылок в разрезе объектов метаданных: +// * Ключ - ОбъектМетаданных - объект метаданных, для которого применяются исключения. +// * Значение - Строка, Массив - описание исключенных реквизитов. +// Если "*", то исключены все реквизиты объекта метаданных. +// Если массив строк, то содержит относительные имена исключенных реквизитов. // -Функция ОписаниеТипаВсеСсылки() Экспорт +Функция ИсключенияПоискаСсылок() Экспорт - Возврат Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов( - Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов( - Справочники.ТипВсеСсылки(), - Документы.ТипВсеСсылки().Типы()), - ПланыОбмена.ТипВсеСсылки().Типы()), - Перечисления.ТипВсеСсылки().Типы()), - ПланыВидовХарактеристик.ТипВсеСсылки().Типы()), - ПланыСчетов.ТипВсеСсылки().Типы()), - ПланыВидовРасчета.ТипВсеСсылки().Типы()), - БизнесПроцессы.ТипВсеСсылки().Типы()), - БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().Типы()), - Задачи.ТипВсеСсылки().Типы()); + ИсключенияПоискаИнтеграция = Новый Массив; + + ИнтеграцияПодсистемБСП.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаИнтеграция); + + ИсключенияПоиска = Новый Массив; + ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоиска); + + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИсключенияПоиска, ИсключенияПоискаИнтеграция); + + Результат = Новый Соответствие; + Для Каждого ИсключениеПоиска Из ИсключенияПоиска Цикл + // Определение полного имени реквизита и объекта метаданных - носителя реквизита. + Если ТипЗнч(ИсключениеПоиска) = Тип("Строка") Тогда + ПолноеИмя = ИсключениеПоиска; + МассивПодстрок = СтрРазделить(ПолноеИмя, "."); + КоличествоПодстрок = МассивПодстрок.Количество(); + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(МассивПодстрок[0] + "." + МассивПодстрок[1]); + Иначе + ОбъектМетаданных = ИсключениеПоиска; + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + МассивПодстрок = СтрРазделить(ПолноеИмя, "."); + КоличествоПодстрок = МассивПодстрок.Количество(); + Если КоличествоПодстрок > 2 Тогда + Пока Истина Цикл + Родитель = ОбъектМетаданных.Родитель(); + Если ТипЗнч(Родитель) = Тип("ОбъектМетаданныхКонфигурация") Тогда + Прервать; + Иначе + ОбъектМетаданных = Родитель; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + // Регистрация. + Если КоличествоПодстрок < 4 Тогда + Результат.Вставить(ОбъектМетаданных, "*"); + Иначе + ПутиКРеквизитам = Результат.Получить(ОбъектМетаданных); + Если ПутиКРеквизитам = "*" Тогда + Продолжить; // Весь объект метаданных уже исключен. + ИначеЕсли ПутиКРеквизитам = Неопределено Тогда + ПутиКРеквизитам = Новый Массив; + Результат.Вставить(ОбъектМетаданных, ПутиКРеквизитам); + КонецЕсли; + // Формат реквизита: + // "<ВидОМ>.<ИмяОМ>.<ТипРеквизитаИлиТЧ>.<ИмяРеквизитаИлиТЧ>[.<ТипРеквизита>.<ИмяРеквизитаТЧ>]". + // Примеры: + // "РегистрСведений.ВерсииОбъектов.Реквизит.АвторВерсии", + // "Документ._ДемоЗаказПокупателя.ТабличнаяЧасть.СчетаНаОплату.Реквизит.Счет", + // "ПланВидовРасчета._ДемоОсновныеНачисления.СтандартнаяТабличнаяЧасть.БазовыеВидыРасчета.СтандартныйРеквизит.ВидРасчета". + // Относительный путь к реквизиту должен получиться таким, чтобы его можно было использовать в условиях запроса: + // "<ИмяРеквизитаИлиТЧ>[.<ИмяРеквизитаТЧ>]". + Если КоличествоПодстрок = 4 Тогда + ОтносительныйПутьКРеквизиту = МассивПодстрок[3]; + Иначе + ОтносительныйПутьКРеквизиту = МассивПодстрок[3] + "." + МассивПодстрок[5]; + КонецЕсли; + ПутиКРеквизитам.Добавить(ОтносительныйПутьКРеквизиту); + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область УсловныеВызовы + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для вызова необязательных подсистем. + +// Возвращает Истина, если "функциональная" подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// +// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс". +// +// Параметры: +// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема +// без слов "Подсистема." и с учетом регистра символов. +// Например: "СтандартныеПодсистемы.ВариантыОтчетов". +// +// Пример: +// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда +// МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); +// МодульВариантыОтчетов.<Имя метода>(); +// КонецЕсли; +// +// Возвращаемое значение: +// Булево - Истина, если существует. +// +Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт + + ИменаПодсистем = СтандартныеПодсистемыПовтИсп.ИменаПодсистем(); + Возврат ИменаПодсистем.Получить(ПолноеИмяПодсистемы) <> Неопределено; + +КонецФункции + +// Возвращает ссылку на общий модуль или модуль менеджера по имени. +// +// Параметры: +// Имя - Строка - имя общего модуля. +// +// Возвращаемое значение: +// ОбщийМодуль, МодульМенеджераОбъекта - общий модуль. +// +// Пример: +// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда +// МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации"); +// МодульОбновлениеКонфигурации.<Имя метода>(); +// КонецЕсли; +// +// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда +// МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); +// МодульПолнотекстовыйПоискСервер.<Имя метода>(); +// КонецЕсли; +// +Функция ОбщийМодуль(Имя) Экспорт + + Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда + Модуль = Вычислить(Имя); // ВычислитьВБезопасномРежиме не требуется, т.к. проверка надежная. + ИначеЕсли СтрЧислоВхождений(Имя, ".") = 1 Тогда + Возврат СерверныйМодульМенеджера(Имя); + Иначе + Модуль = Неопределено; + КонецЕсли; + + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + КонецЕсли; + + Возврат Модуль; + +КонецФункции + +#КонецОбласти + +#Область ТекущееОкружение + +//////////////////////////////////////////////////////////////////////////////// +// Функции описания текущего окружения клиентского приложения и операционной системы. + +// Возвращает Истина, если клиентское приложение запущено под управлением ОС Windows. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоWindowsКлиент() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЭтоWindowsКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоWindowsКлиент"); + + Если ЭтоWindowsКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат ЭтоWindowsКлиент; + +КонецФункции + +// Возвращает Истина, если текущий сеанс выполняется на сервере, работающем под управлением ОС Windows. +// +// Возвращаемое значение: +// Булево - Истина, если сервер работает под управлением ОС Windows. +// +Функция ЭтоWindowsСервер() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; + +КонецФункции + +// Возвращает Истина, если клиентское приложение запущено под управлением ОС Linux. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоLinuxКлиент() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЭтоLinuxКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоLinuxКлиент"); + + Если ЭтоLinuxКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат ЭтоLinuxКлиент; + +КонецФункции + +// Возвращает Истина, если текущий сеанс выполняется на сервере, работающем под управлением ОС Linux. +// +// Возвращаемое значение: +// Булево - Истина, если сервер работает под управлением ОС Linux. +// +Функция ЭтоLinuxСервер() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; + +КонецФункции + +// Возвращает Истина, если клиентское приложение запущено под управлением ОС X. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоOSXКлиент() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЭтоOSXКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоOSXКлиент"); + + Если ЭтоOSXКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат ЭтоOSXКлиент; + +КонецФункции + +// Возвращает Истина, если клиентское приложение является Веб-клиентом. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоВебКлиент() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ЭтоВебКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоВебКлиент"); + + Если ЭтоВебКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат ЭтоВебКлиент; + +КонецФункции + +// Возвращает Истина, если клиентское приложение является мобильным клиентом. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоМобильныйКлиент() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЭтоМобильныйКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоМобильныйКлиент"); + + Если ЭтоМобильныйКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат ЭтоМобильныйКлиент; + +КонецФункции + +// Возвращает Истина, если клиентское приложение подключено к базе через веб-сервер. +// +// Возвращаемое значение: +// Булево - Истина, если подключен. +// +Функция КлиентПодключенЧерезВебСервер() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СтрокаСоединенияИнформационнойБазы = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("СтрокаСоединенияИнформационнойБазы"); + + Если СтрокаСоединенияИнформационнойБазы = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "WS=") = 1; + +КонецФункции + +// Возвращает Истина, если включен режим отладки. +// +// Возвращаемое значение: +// Булево - Истина, если включен режим отладки. +// +Функция РежимОтладки() Экспорт + + ПараметрЗапускаПриложения = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + Возврат СтрНайти(ПараметрЗапускаПриложения, "РежимОтладки") > 0; + +КонецФункции + +// Возвращает объем оперативной памяти, доступной клиентскому приложению. +// +// Возвращаемое значение: +// Число - количество гигабайтов оперативной памяти с точностью до десятых долей. +// Неопределено - нет клиентского приложения, то есть ТекущийРежимЗапуска() = Неопределено. +// +Функция ОперативнаяПамятьДоступнаяКлиентскомуПриложению() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ДоступныйОбъем = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ОперативнаяПамять"); + Возврат ДоступныйОбъем; + +КонецФункции + +// Определяет режим эксплуатации информационной базы файловый (Истина) или серверный (Ложь). +// При проверке используется СтрокаСоединенияИнформационнойБазы, которую можно указать явно. +// +// Параметры: +// СтрокаСоединенияИнформационнойБазы - Строка - параметр используется, если +// нужно проверить строку соединения не текущей информационной базы. +// +// Возвращаемое значение: +// Булево - Истина, если файловая. +// +Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт + + Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда + СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); + КонецЕсли; + Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; + +КонецФункции + +// Возвращает Истина, если эта информационная база подключена к 1С:Fresh. +// +// Возвращаемое значение: +// Булево - признак автономного рабочего места. +// +Функция ЭтоАвтономноеРабочееМесто() Экспорт + + Если ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщийМодуль("ОбменДаннымиСервер"); + Возврат МодульОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто(); + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Определяет, что эта информационная база является подчиненным узлом +// распределенной информационной базы (РИБ). +// +// Возвращаемое значение: +// Булево - Истина, если эта информационная база является подчиненным узлом РИБ. +// +Функция ЭтоПодчиненныйУзелРИБ() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ПланыОбмена.ГлавныйУзел() <> Неопределено; + +КонецФункции + +// Определяет, что эта информационная база является подчиненным узлом +// распределенной информационной базы (РИБ) с фильтром. +// +// Возвращаемое значение: +// Булево - Истина, если эта информационная база является подчиненным узлом РИБ с фильтром. +// +Функция ЭтоПодчиненныйУзелРИБСФильтром() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ПланыОбмена.ГлавныйУзел() <> Неопределено + И ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + ОбщийМодульОбменДаннымиСервер = ОбщийМодуль("ОбменДаннымиСервер"); + Если ОбщийМодульОбменДаннымиСервер.НазначениеПланаОбмена(ПланыОбмена.ГлавныйУзел().Метаданные().Имя) = "РИБСФильтром" Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. +// В главном узле всегда Ложь. +// +// Возвращаемое значение: +// Булево - Истина, если требуется. +// +Функция ТребуетсяОбновлениеКонфигурацииПодчиненногоУзлаРИБ() Экспорт + + Возврат ЭтоПодчиненныйУзелРИБ() И КонфигурацияИзменена(); + +КонецФункции + +// Возвращает признак работы в режиме разделения данных по областям +// (технически это признак условного разделения). +// +// Возвращает Ложь, если конфигурация не может работать в режиме разделения данных +// (не содержит общих реквизитов, предназначенных для разделения данных). +// +// Возвращаемое значение: +// Булево - Истина, если разделение включено, +// - Ложь, если разделение выключено или не поддерживается. +// +Функция РазделениеВключено() Экспорт + + Если ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщийМодуль("РаботаВМоделиСервиса"); + Возврат МодульРаботаВМоделиСервиса.РазделениеВключено(); + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Возвращает признак возможности обращения к разделенным данным (которые входят в состав разделителей). +// Признак относится к сеансу, но может меняться во время работы сеанса, если разделение было включено +// в самом сеансе, поэтому проверку следует делать непосредственно перед обращением к разделенным данным. +// +// Возвращает Истина, если конфигурация не может работать в режиме разделения данных +// (не содержит общих реквизитов, предназначенных для разделения данных). +// +// Возвращаемое значение: +// Булево - Истина, если разделение не поддерживается, либо разделение выключено, +// либо разделение включено и разделители установлены. +// - Ложь, если разделение включено и разделители не установлены. +// +Функция ДоступноИспользованиеРазделенныхДанных() Экспорт + + Если ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщийМодуль("РаботаВМоделиСервиса"); + Возврат МодульРаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных(); + Иначе + Возврат Истина; + КонецЕсли; + +КонецФункции + +// Возвращает адрес публикации информационной базы для формирования прямых ссылок на объекты ИБ +// для возможности перехода к ним пользователей, имеющих доступ к базе через публикацию в сети Интернет. +// Например, если такой адрес включить в электронное письмо, то из письма одним нажатием +// можно перейти к форме объекта в самой программе. +// +// Возвращаемое значение: +// Строка - адрес информационной базы, как он задан в настройке "Адрес в Интернете" в панели администрирования +// (хранится в константе АдресПубликацииИнформационнойБазыВИнтернете). +// Например, "http://1c.ru/database". +// +// Пример: +// АдресПубликацииИнформационнойБазыВЛокальнойСети() + "/" + e1cib/app/Обработка.ВыгрузкаДанныхПроекта"; +// возвращает прямую ссылку для открытия обработки ВыгрузкаДанныхПроекта. +// +Функция АдресПубликацииИнформационнойБазыВИнтернете() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат Константы.АдресПубликацииИнформационнойБазыВИнтернете.Получить(); + +КонецФункции + +// Возвращает адрес публикации информационной базы для формирования прямых ссылок на объекты ИБ +// для возможности перехода к ним пользователей, имеющих доступ к базе через публикацию локальной сети. +// Например, если такой адрес включить в электронное письмо, то из письма за одно нажатие +// можно перейти к форме объекта в самой программе. +// +// Возвращаемое значение: +// Строка - адрес информационной базы, как он задан в настройке "Локальный адрес" в панели администрирования +// (хранится в константе АдресПубликацииИнформационнойБазыВЛокальнойСети). +// Например, "http://localserver/base". +// +// Пример: +// АдресПубликацииИнформационнойБазыВЛокальнойСети() + "/" + e1cib/app/Обработка.ВыгрузкаДанныхПроекта"; +// возвращает прямую ссылку для открытия обработки ВыгрузкаДанныхПроекта. +// +Функция АдресПубликацииИнформационнойБазыВЛокальнойСети() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат Константы.АдресПубликацииИнформационнойБазыВЛокальнойСети.Получить(); + +КонецФункции + +// Формирует ссылку для входа в программу для указанного пользователя. +// +// Параметры: +// Пользователь - Строка - логин пользователя для входа в программу; +// Пароль - Строка - пароль пользователя для входа в программу; +// ВидПубликацииИБ - Строка - через какую публикацию пользователь входит в программу: +// "ВИнтернете" или "ВЛокальнойСети". +// +// Возвращаемое значение: +// Строка, Неопределено - адрес входа в программу или Неопределено, если адрес не настроен. +Функция АдресВходаВПрограмму(Пользователь, Пароль, ВидПубликацииИБ) Экспорт + + Результат = ""; + + Если НРег(ВидПубликацииИБ) = НРег("ВИнтернете") Тогда + Результат = АдресПубликацииИнформационнойБазыВИнтернете(); + ИначеЕсли НРег(ВидПубликацииИБ) = НРег("ВЛокальнойСети") Тогда + Результат = АдресПубликацииИнформационнойБазыВЛокальнойСети(); + КонецЕсли; + + Если ПустаяСтрока(Результат) Тогда + Возврат Неопределено; + КонецЕсли; + + Если Не СтрЗаканчиваетсяНа(Результат, "/") Тогда + Результат = Результат + "/"; + КонецЕсли; + + Результат = Результат + "?n=" + КодироватьСтроку(Пользователь, СпособКодированияСтроки.КодировкаURL); + Если ЗначениеЗаполнено(Пароль) Тогда + Результат = Результат + "&p=" + КодироватьСтроку(Пароль, СпособКодированияСтроки.КодировкаURL); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает редакцию конфигурации. +// Редакцией принято называть две первые группы цифр полной версии конфигурации. +// Например, у версии "1.2.3.4" редакция "1.2". +// +// Возвращаемое значение: +// Строка - номер редакции конфигурации. +// +Функция РедакцияКонфигурации() Экспорт + + Результат = ""; + ВерсияКонфигурации = Метаданные.Версия; + + Позиция = СтрНайти(ВерсияКонфигурации, "."); + Если Позиция > 0 Тогда + Результат = Лев(ВерсияКонфигурации, Позиция); + ВерсияКонфигурации = Сред(ВерсияКонфигурации, Позиция + 1); + Позиция = СтрНайти(ВерсияКонфигурации, "."); + Если Позиция > 0 Тогда + Результат = Результат + Лев(ВерсияКонфигурации, Позиция - 1); + Иначе + Результат = ""; + КонецЕсли; + КонецЕсли; + + Если ПустаяСтрока(Результат) Тогда + Результат = Метаданные.Версия; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// (См. ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности) +Функция ОбщиеПараметрыБазовойФункциональности() Экспорт + + ОбщиеПараметры = Новый Структура; + ОбщиеПараметры.Вставить("ИмяФормыПерсональныхНастроек", ""); + ОбщиеПараметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", Истина); + ОбщиеПараметры.Вставить("ОтключитьИдентификаторыОбъектовМетаданных", Ложь); + ОбщиеПараметры.Вставить("РекомендуемыйОбъемОперативнойПамяти", 2); + ОбщиеПараметры.Вставить("МинимальнаяВерсияПлатформы", "8.3.12.1412"); + ОбщиеПараметры.Вставить("РекомендуемаяВерсияПлатформы", "8.3.12.1412"); + // Устарело, следует использовать свойства МинимальнаяВерсияПлатформы и РекомендуемаяВерсияПлатформы: + ОбщиеПараметры.Вставить("МинимальноНеобходимаяВерсияПлатформы", ""); + ОбщиеПараметры.Вставить("РаботаВПрограммеЗапрещена", Ложь); // Блокировать запуск, если версия ниже минимальной. + + ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры); + + Минимальная = ОбщиеПараметры.МинимальнаяВерсияПлатформы; + Рекомендуемая = ОбщиеПараметры.РекомендуемаяВерсияПлатформы; + Если Не ПустаяСтрока(Минимальная) + И Не ПустаяСтрока(Рекомендуемая) + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Минимальная, Рекомендуемая) > 0 Тогда + ТекстСообщения = НСтр("ru = 'Минимальная версия платформы ""1С:Предприятие 8"" указана выше рекомендуемой. + |Минимальная версия - ""%1"", рекомендуемая версия - ""%2"".'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстСообщения, + ОбщиеПараметры.МинимальнаяВерсияПлатформы, + ОбщиеПараметры.РекомендуемаяВерсияПлатформы); + КонецЕсли; + + // Обратная совместимость. + МинимальноНеобходимаяВерсияПлатформы = ОбщиеПараметры.МинимальноНеобходимаяВерсияПлатформы; + Если ЗначениеЗаполнено(МинимальноНеобходимаяВерсияПлатформы) Тогда + Если ОбщиеПараметры.РаботаВПрограммеЗапрещена Тогда + ОбщиеПараметры.МинимальнаяВерсияПлатформы = МинимальноНеобходимаяВерсияПлатформы; + ОбщиеПараметры.РекомендуемаяВерсияПлатформы = ""; + Иначе + ОбщиеПараметры.РекомендуемаяВерсияПлатформы = МинимальноНеобходимаяВерсияПлатформы; + ОбщиеПараметры.МинимальнаяВерсияПлатформы = ""; + КонецЕсли; + Иначе + СистемнаяИнформация = Новый СистемнаяИнформация; + Текущая = СистемнаяИнформация.ВерсияПриложения; + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Минимальная, Текущая) > 0 Тогда + ОбщиеПараметры.МинимальноНеобходимаяВерсияПлатформы = Минимальная; + ОбщиеПараметры.РаботаВПрограммеЗапрещена = Истина; + Иначе + ОбщиеПараметры.МинимальноНеобходимаяВерсияПлатформы = Рекомендуемая; + ОбщиеПараметры.РаботаВПрограммеЗапрещена = Ложь; + КонецЕсли; + КонецЕсли; + + Возврат ОбщиеПараметры; + +КонецФункции + +// Возвращает описания всех библиотек конфигурации, включая +// описание самой конфигурации. +// +// Возвращаемое значение: +// Массив - структур со свойствами: +// * Имя - Строка - имя подсистемы, например, "СтандартныеПодсистемы". +// * ИдентификаторИнтернетПоддержки - Строка - уникальное имя программы в сервисах интернет-поддержки. +// * Версия - Строка - версия в формате из четырех цифр, например "2.3.3.1". +// * ЭтоКонфигурация - Булево - признак того, что данная подсистема является основной конфигурацией. +// +Функция ОписанияПодсистем() Экспорт + Результат = Новый Массив; + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + Для Каждого ОписаниеПодсистемы Из ОписанияПодсистем.ПоИменам Цикл + Параметры = Новый Структура; + Параметры.Вставить("Имя"); + Параметры.Вставить("ИдентификаторИнтернетПоддержки"); + Параметры.Вставить("Версия"); + Параметры.Вставить("ЭтоКонфигурация"); + + ЗаполнитьЗначенияСвойств(Параметры, ОписаниеПодсистемы.Значение); + Результат.Добавить(Параметры); + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Возвращает идентификатор Интернет-поддержки основной конфигурации. +// +// Возвращаемое значение: +// Строка - уникальное имя программы в сервисах Интернет-поддержки. +// +Функция ИдентификаторИнтернетПоддержкиКонфигурации() Экспорт + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + Для Каждого ОписаниеПодсистемы Из ОписанияПодсистем.ПоИменам Цикл + Если ОписаниеПодсистемы.Значение.ЭтоКонфигурация Тогда + Возврат ОписаниеПодсистемы.Значение.ИдентификаторИнтернетПоддержки; + КонецЕсли; + КонецЦикла; +КонецФункции + +#КонецОбласти + +#Область Даты + +//////////////////////////////////////////////////////////////////////////////// +// Функции для работы с датами с учетом часового пояса сеанса + +// Преобразует локальную дату к формату "YYYY-MM-DDThh:mm:ssTZD" согласно ISO 8601. +// +// Параметры: +// ЛокальнаяДата - Дата - дата в часовом поясе сеанса. +// +// Возвращаемое значение: +// Строка - представление даты. +// +Функция ПредставлениеЛокальнойДатыСоСмещением(ЛокальнаяДата) Экспорт + + Смещение = СмещениеСтандартногоВремени(ЧасовойПоясСеанса()); + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.ПредставлениеЛокальнойДатыСоСмещением(ЛокальнаяДата, Смещение); + +КонецФункции + +// Возвращает строковое представление интервала между переданными датами или +// относительно переданной даты и текущей даты сеанса. +// +// Параметры: +// ВремяНачала - Дата - начальная точка интервала. +// ВремяОкончания - Дата - конечная точка интервала, если не задана - берется текущая дата сеанса. +// +// Возвращаемое значение: +// Строка - представление интервала времени. +// +Функция ИнтервалВремениСтрокой(ВремяНачала, ВремяОкончания = Неопределено) Экспорт + + Если ВремяОкончания = Неопределено Тогда + ВремяОкончания = ТекущаяДатаСеанса(); + ИначеЕсли ВремяНачала > ВремяОкончания Тогда + ВызватьИсключение НСтр("ru = 'Дата окончания интервала не может быть меньше даты начала.'"); + КонецЕсли; + + ВеличинаИнтервала = ВремяОкончания - ВремяНачала; + ВеличинаИнтервалаВДнях = Цел(ВеличинаИнтервала/60/60/24); + + Если ВеличинаИнтервалаВДнях > 365 Тогда + ОписаниеИнтервала = НСтр("ru = 'более года'"); + ИначеЕсли ВеличинаИнтервалаВДнях > 31 Тогда + ОписаниеИнтервала = НСтр("ru = 'более месяца'"); + ИначеЕсли ВеличинаИнтервалаВДнях >= 1 Тогда + ОписаниеИнтервала = Формат(ВеличинаИнтервалаВДнях, "ЧДЦ=0") + " " + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(ВеличинаИнтервалаВДнях, + "", НСтр("ru = 'день,дня,дней,,,,,,0'")); + Иначе + ОписаниеИнтервала = НСтр("ru = 'менее одного дня'"); + КонецЕсли; + + Возврат ОписаниеИнтервала; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции для работы с прикладными типами и коллекциями значений. +// Функции для работы с настройкой рабочей даты. -// Установить текст запроса, основную таблицу или динамическое считывание в динамическом списке. -// Устанавливать эти свойства следует за один вызов этой процедуры, чтобы не снижалась производительность. +// Сохраняет настройку рабочей даты пользователя. // // Параметры: -// Список - ТаблицаФормы - элемент формы динамического списка, для которого устанавливаются свойства. -// СтруктураПараметров - Структура - см. СтруктураСвойствДинамическогоСписка(). -// -Процедура УстановитьСвойстваДинамическогоСписка(Список, СтруктураПараметров) Экспорт - - Форма = Список.Родитель; - ТипУправляемаяФорма = Тип("УправляемаяФорма"); - - Пока ТипЗнч(Форма) <> ТипУправляемаяФорма Цикл - Форма = Форма.Родитель; - КонецЦикла; - - ДинамическийСписок = Форма[Список.ПутьКДанным]; - ТекстЗапроса = СтруктураПараметров.ТекстЗапроса; - - Если Не ПустаяСтрока(ТекстЗапроса) Тогда - ДинамическийСписок.ТекстЗапроса = ТекстЗапроса; - КонецЕсли; - - ОсновнаяТаблица = СтруктураПараметров.ОсновнаяТаблица; - - Если Не ПустаяСтрока(ОсновнаяТаблица) Тогда - ДинамическийСписок.ОсновнаяТаблица = ОсновнаяТаблица; - КонецЕсли; - - ДинамическоеСчитываниеДанных = СтруктураПараметров.ДинамическоеСчитываниеДанных; - - Если ТипЗнч(ДинамическоеСчитываниеДанных) = Тип("Булево") Тогда - ДинамическийСписок.ДинамическоеСчитываниеДанных = ДинамическоеСчитываниеДанных; - КонецЕсли; +// НоваяРабочаяДата - Дата - дата, которую необходимо установить в качестве рабочей даты пользователя. +// ИмяПользователя - Строка - имя пользователя, для которого устанавливается рабочая дата. +// Если не задано, то устанавливается для текущего пользователя. +// +Процедура УстановитьРабочуюДатуПользователя(НоваяРабочаяДата, ИмяПользователя = Неопределено) Экспорт + + КлючОбъекта = ВРег("РабочаяДата"); + ХранилищеОбщихНастроекСохранить(КлючОбъекта, "", НоваяРабочаяДата, , ИмяПользователя); + КонецПроцедуры -// Создать структуру свойств динамического списка для вызова УстановитьСвойстваДинамическогоСписка(). +// Возвращает значение настройки рабочей даты для пользователя. +// +// Параметры: +// ИмяПользователя - Строка - имя пользователя, для которого запрашивается рабочая дата. +// Если не задано, то устанавливается для текущего пользователя. // // Возвращаемое значение: -// Структура - любое поле может иметь значение неопределено, если оно не устанавливается: -// * ТекстЗапроса - Строка - новый текст запроса. -// * ОсновнаяТаблица - Строка - имя основной таблицы. -// * ДинамическоеСчитываниеДанных - Булево - признак использования динамического считывания. +// Дата - значение настройки рабочей даты пользователя или пустая дата, если настройка не задана. // -Функция СтруктураСвойствДинамическогоСписка() Экспорт +Функция РабочаяДатаПользователя(ИмяПользователя = Неопределено) Экспорт + + КлючОбъекта = ВРег("РабочаяДата"); + + Результат = ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, "", '0001-01-01', , ИмяПользователя); - Возврат Новый Структура("ТекстЗапроса, ОсновнаяТаблица, ДинамическоеСчитываниеДанных"); + Если ТипЗнч(Результат) <> Тип("Дата") Тогда + Результат = '0001-01-01'; + КонецЕсли; + + Возврат Результат; КонецФункции +// Возвращает значение настройки рабочей даты для пользователя или текущей даты сеанса, +// если рабочая дата пользователя не задана. +// +// Параметры: +// ИмяПользователя - Строка - имя пользователя, для которого запрашивается рабочая дата. +// Если не задано, то устанавливается для текущего пользователя. +// +// Возвращаемое значение: +// Дата - значение настройки рабочей даты пользователя или текущая дата сеанса, если настройка не задана. +// +Функция ТекущаяДатаПользователя(ИмяПользователя = Неопределено) Экспорт + + Результат = РабочаяДатаПользователя(ИмяПользователя); + + Если НЕ ЗначениеЗаполнено(Результат) Тогда + Результат = ТекущаяДатаСеанса(); + КонецЕсли; + + Возврат НачалоДня(Результат); + +КонецФункции + +#КонецОбласти + +#Область Данные + +//////////////////////////////////////////////////////////////////////////////// +// Общие процедуры и функции для работы с прикладными типами и коллекциями значений. + // Возвращает строковое имя значения перечисления по его ссылке. // // Параметры: @@ -1082,7 +1918,7 @@ // МетаданныеРегистра - ОбъектМетаданных - метаданные регистра сведений. // // Возвращаемое значение: -// Структура - коллекция измерений, ресурсов и реквизитов переданного менеджеру записи. +// Структура - коллекция измерений ресурсов и реквизитов, переданного менеджеру записи. // Функция СтруктураПоМенеджеруЗаписи(МенеджерЗаписи, МетаданныеРегистра) Экспорт @@ -1118,7 +1954,7 @@ // А так же другие объекты, для которых доступен обход // посредством оператора Для каждого … Из … Цикл. // ИмяКолонки - Строка - имя поля коллекции, значения которого нужно выгрузить. -// ТолькоУникальныеЗначения - Булево - необязательный, если истина, то в массив будут включены +// ТолькоУникальныеЗначения - Булево - если Истина, то в массив будут включены // только различающиеся значения. // // Возвращаемое значение: @@ -1233,7 +2069,7 @@ КонецФункции -// Функция выполняет сравнение двух коллекций строк (ТаблицаЗначений, ДеревоЗначений и т.д.), +// Сравнивает две коллекции строк (ТаблицаЗначений, ДеревоЗначений и т.д.), // для которых доступен обход посредством оператора Для каждого … Из … Цикл. // Сравниваемые коллекции должны отвечать следующим требованиям: // - доступен обход посредством оператора Для каждого … Из … Цикл, @@ -1247,244 +2083,52 @@ // СписокЗначений, // ТабличнаяЧасть, // Соответствие, +// Массив, +// ФиксированныйМассив, // Структура - коллекция, отвечающая вышеописанным требованиям. -// А так же другие объекты, для которых доступен обход +// А также другие объекты, для которых доступен обход // посредством оператора Для каждого … Из … Цикл. // КоллекцияСтрок2 - ТаблицаЗначений, // ДеревоЗначений, // СписокЗначений, // ТабличнаяЧасть, // Соответствие, +// Массив, +// ФиксированныйМассив, // Структура - коллекция, отвечающая вышеописанным требованиям. -// А так же другие объекты, для которых доступен обход +// А также другие объекты, для которых доступен обход // посредством оператора Для каждого … Из … Цикл. -// ИменаКолонок - Строка - (необязательный) имена колонок через запятую, -// по которым производится сравнение. -// Не является обязательным для коллекций, -// состав колонок которых можно выявить: -// ТаблицаЗначений, СписокЗначений, Соответствие, Структура, -// если не указан - сравнение производится по колонкам первой коллекции. +// ИменаКолонок - Строка - имена колонок через запятую, по которым производится сравнение. +// Не обязательно для коллекций, состав колонок которых можно определить автоматически: +// ТаблицаЗначений, СписокЗначений, Соответствие, Структура. +// Если не указан, то сравнение производится по колонкам первой коллекции. // Для коллекций других типов является обязательным. -// ИсключаяКолонки - Строка - (необязательный) имена колонок, которые игнорируются при сравнении. +// ИсключаяКолонки - Строка - Имена колонок, которые игнорируются при сравнении. // УчитыватьПоследовательностьСтрок - Булево - если Истина, то коллекции признаются -// идентичными только если одинаковые строки размещены -// в коллекциях на одинаковых местах. +// идентичными, только если одинаковые строки размещены в коллекциях на одинаковых местах. // // Возвращаемое значение: // Булево - Истина, если идентичны. // -Функция КоллекцииИдентичны(КоллекцияСтрок1, КоллекцияСтрок2, Знач ИменаКолонок = "", Знач ИсключаяКолонки = "", УчитыватьПоследовательностьСтрок = Ложь) Экспорт +Функция КоллекцииИдентичны(КоллекцияСтрок1, КоллекцияСтрок2, Знач ИменаКолонок = "", Знач ИсключаяКолонки = "", + УчитыватьПоследовательностьСтрок = Ложь) Экспорт - СравниваютсяМассивы = (ТипЗнч(КоллекцияСтрок1) = Тип("Массив") - Или ТипЗнч(КоллекцияСтрок1) = Тип("ФиксированныйМассив")); + ТипКоллекции = ТипЗнч(КоллекцияСтрок1); + СравниваютсяМассивы = (ТипКоллекции = Тип("Массив") Или ТипКоллекции = Тип("ФиксированныйМассив")); + СравниваемыеКолонки = Неопределено; Если Не СравниваютсяМассивы Тогда - - // Типы коллекций, для которых доступен состав колонок, - // и можно выявить, если он не задан. - ТипыОсобыхКоллекций = Новый Массив; - ТипыОсобыхКоллекций.Добавить(Тип("ТаблицаЗначений")); - ТипыОсобыхКоллекций.Добавить(Тип("СписокЗначений")); - - ТипыКоллекцийКлючИЗначение = Новый Массив; - ТипыКоллекцийКлючИЗначение.Добавить(Тип("Соответствие")); - ТипыКоллекцийКлючИЗначение.Добавить(Тип("Структура")); - ТипыКоллекцийКлючИЗначение.Добавить(Тип("ФиксированноеСоответствие")); - ТипыКоллекцийКлючИЗначение.Добавить(Тип("ФиксированнаяСтруктура")); - - Если ПустаяСтрока(ИменаКолонок) Тогда - Если ТипыОсобыхКоллекций.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено - Или ТипыКоллекцийКлючИЗначение.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено Тогда - СравниваемыеКолонки = Новый Массив; - Если ТипЗнч(КоллекцияСтрок1) = Тип("ТаблицаЗначений") Тогда - Для Каждого Колонка Из КоллекцияСтрок1.Колонки Цикл - СравниваемыеКолонки.Добавить(Колонка.Имя); - КонецЦикла; - ИначеЕсли ТипЗнч(КоллекцияСтрок1) = Тип("СписокЗначений") Тогда - СравниваемыеКолонки.Добавить("Значение"); - СравниваемыеКолонки.Добавить("Картинка"); - СравниваемыеКолонки.Добавить("Пометка"); - СравниваемыеКолонки.Добавить("Представление"); - ИначеЕсли ТипыКоллекцийКлючИЗначение.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено Тогда - СравниваемыеКолонки.Добавить("Ключ"); - СравниваемыеКолонки.Добавить("Значение"); - КонецЕсли; - Иначе - ТекстИсключения = НСтр("ru = 'Для коллекции типа %1 необходимо указать имена полей, по которым производится сравнение'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ТипЗнч(КоллекцияСтрок1)); - КонецЕсли; - Иначе - ИменаКолонок = СтрЗаменить(ИменаКолонок, " ", ""); - СравниваемыеКолонки = СтрРазделить(ИменаКолонок, ","); - КонецЕсли; - - // Вычитаем исключаемые поля - ИсключаяКолонки = СтрЗаменить(ИсключаяКолонки, " ", ""); - СравниваемыеКолонки = ОбщегоНазначенияКлиентСервер.РазностьМассивов(СравниваемыеКолонки, СтрРазделить(ИсключаяКолонки, ",")); + СравниваемыеКолонки = СравниваемыеКолонки(КоллекцияСтрок1, ИменаКолонок, ИсключаяКолонки); КонецЕсли; Если УчитыватьПоследовательностьСтрок Тогда - - // Параллельный обход обеих коллекций. - НомерСтрокиКоллекции1 = 0; - Для Каждого СтрокаКоллекции1 Из КоллекцияСтрок1 Цикл - // Спозиционируемся на аналогичную строку второй коллекции. - НомерСтрокиКоллекции2 = 0; - ЕстьСтрокиКоллекции2 = Ложь; - Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл - ЕстьСтрокиКоллекции2 = Истина; - Если НомерСтрокиКоллекции2 = НомерСтрокиКоллекции1 Тогда - Прервать; - КонецЕсли; - НомерСтрокиКоллекции2 = НомерСтрокиКоллекции2 + 1; - КонецЦикла; - Если Не ЕстьСтрокиКоллекции2 Тогда - // Во второй коллекции вообще нет строк. - Возврат Ложь; - КонецЕсли; - // Сравниваем значения полей двух строк. - Если СравниваютсяМассивы Тогда - Если СтрокаКоллекции1 <> СтрокаКоллекции2 Тогда - Возврат Ложь; - КонецЕсли; - Иначе - Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл - Если СтрокаКоллекции1[ИмяКолонки] <> СтрокаКоллекции2[ИмяКолонки] Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - КонецЕсли; - НомерСтрокиКоллекции1 = НомерСтрокиКоллекции1 + 1; - КонецЦикла; - - КоличествоСтрокКоллекции1 = НомерСтрокиКоллекции1; - - // Отдельно подсчитаем количество строк второй коллекции. - КоличествоСтрокКоллекции2 = 0; - Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл - КоличествоСтрокКоллекции2 = КоличествоСтрокКоллекции2 + 1; - КонецЦикла; - - // Если в первой коллекции не оказалось строк, - // то их не должно быть и во второй. - Если КоличествоСтрокКоллекции1 = 0 Тогда - Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл - Возврат Ложь; - КонецЦикла; - КоличествоСтрокКоллекции2 = 0; - КонецЕсли; - - // Количество строк не должно отличаться. - Если КоличествоСтрокКоллекции1 <> КоличествоСтрокКоллекции2 Тогда - Возврат Ложь; - КонецЕсли; - + Возврат СравнитьСУчетомПоследовательности(КоллекцияСтрок1, КоллекцияСтрок2, СравниваемыеКолонки); + ИначеЕсли СравниваютсяМассивы Тогда // Для массивов используется более простой алгоритм. + Возврат СравнитьМассивы(КоллекцияСтрок1, КоллекцияСтрок2); Иначе - - // Для массивов используется более простой алгоритм. - Если СравниваютсяМассивы Тогда - - Если КоллекцияСтрок1.Количество() <> КоллекцияСтрок2.Количество() Тогда - Возврат Ложь; - КонецЕсли; - - Для Каждого СтрокаКоллекции1 Из КоллекцияСтрок1 Цикл - Если КоллекцияСтрок2.Найти(СтрокаКоллекции1) = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Иначе - - // Проверяем идентичность состава одинаковых строк без учета их последовательности. - - // Строки отбора накапливаем по первой коллекции для того, чтобы: - // - повторно не искать одинаковые строки, - // - убедиться, что во второй коллекции ни одной такой строки, которой нет в накопленных. - - СтрокиОтбора = Новый ТаблицаЗначений; - ПараметрыОтбора = Новый Структура; - Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл - СтрокиОтбора.Колонки.Добавить(ИмяКолонки); - ПараметрыОтбора.Вставить(ИмяКолонки); - КонецЦикла; - - ЕстьСтрокиКоллекции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 Цикл - Возврат Ложь; - КонецЦикла; - КонецЕсли; - - // Проверим, что во второй коллекции нет ни одной такой строки, которой нет в накопленных. - Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл - ЗаполнитьЗначенияСвойств(ПараметрыОтбора, СтрокаКоллекции2); - Если СтрокиОтбора.НайтиСтроки(ПараметрыОтбора).Количество() = 0 Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - + Возврат СравнитьБезУчетаПоследовательности(КоллекцияСтрок1, КоллекцияСтрок2, СравниваемыеКолонки); КонецЕсли; - Возврат Истина; - КонецФункции // Сравнивает данные сложной структуры с учетом вложенности. @@ -1694,9 +2338,10 @@ // Алгоритм - ХешФункция - алгоритм расчета контрольной суммы. По умолчанию, MD5. // // Возвращаемое значение: -// Строка - контрольная сумма строкой без пробелов, 32 байта. +// Строка - контрольная сумма строкой без пробелов (например 32 символа). // Функция КонтрольнаяСуммаСтрокой(Знач Данные, Знач Алгоритм = Неопределено) Экспорт + Если Алгоритм = Неопределено Тогда Алгоритм = ХешФункция.MD5; КонецЕсли; @@ -1706,9 +2351,15 @@ Данные = ЗначениеВСтрокуXML(Данные); КонецЕсли; ХешированиеДанных.Добавить(Данные); - Результат = СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); + + Если ТипЗнч(ХешированиеДанных.ХешСумма) = Тип("ДвоичныеДанные") Тогда + Результат = СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); + ИначеЕсли ТипЗнч(ХешированиеДанных.ХешСумма) = Тип("Число") Тогда + Результат = Формат(ХешированиеДанных.ХешСумма, "ЧГ="); + КонецЕсли; Возврат Результат; + КонецФункции // Сокращает строку до нужной длины, при этом обрезанная часть хешируется, @@ -1738,163 +2389,53 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Математические процедуры и функции. - -// Делит сумму на требуемое количество частей, размеры частей задаются коэффициентами. -// Остатки от округления распределяется на часть с наибольшим коэффициентом. +// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, +// с учетом типов дочерних элементов. При этом содержимое значений объектных типов +// (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. // // Параметры: -// РаспределяемаяСумма - Число - сумма, которую надо распределить; -// КоэффициентыРаспределения - Массив - список коэффициентов (типа Число); -// Точность - Число - количество знаков дробной части, до которых производится округление. Если параметр отрицательный, -// то число округляется до соответствующего разряда в целой части, начиная с младших разрядов. +// Источник - Структура, ФиксированнаяСтруктура, +// Соответствие, ФиксированноеСоответствие, +// Массив, ФиксированныйМассив, +// СписокЗначений - объект, который необходимо скопировать. +// ФиксироватьДанные - Булево, Неопределено - если Истина - фиксировать, +// если Ложь - снять фиксацию, если Неопределено - не изменять. // // Возвращаемое значение: -// Массив - список чисел, полученный в результате распределения суммы. -// В случае если распределить не удалось (сумма = 0, кол-во коэффициентов = 0, -// или суммарный вес коэффициентов = 0), то возвращается значение Неопределено. +// Структура, ФиксированнаяСтруктура, +// Соответствие, ФиксированноеСоответствие, +// Массив, ФиксированныйМассив, +// СписокЗначений - копия объекта, переданного в параметре Источник. // -Функция РаспределитьСуммуПропорциональноКоэффициентам(Знач РаспределяемаяСумма, КоэффициентыРаспределения, Знач Точность = 2) Экспорт +Функция СкопироватьРекурсивно(Источник, ФиксироватьДанные = Неопределено) Экспорт - Возврат ОбщегоНазначенияКлиентСервер.РаспределитьСуммуПропорциональноКоэффициентам(РаспределяемаяСумма, КоэффициентыРаспределения, Точность); + Перем Приемник; + + ТипИсточника = ТипЗнч(Источник); + + Если ТипИсточника = Тип("ТаблицаЗначений") Тогда + Возврат Источник.Скопировать(); + КонецЕсли; + + Если ТипИсточника = Тип("Структура") + Или ТипИсточника = Тип("ФиксированнаяСтруктура") Тогда + Приемник = СкопироватьСтруктуру(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Соответствие") + Или ТипИсточника = Тип("ФиксированноеСоответствие") Тогда + Приемник = СкопироватьСоответствие(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Массив") + Или ТипИсточника = Тип("ФиксированныйМассив") Тогда + Приемник = СкопироватьМассив(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда + Приемник = СкопироватьСписокЗначений(Источник, ФиксироватьДанные); + Иначе + Приемник = Источник; + КонецЕсли; + + Возврат Приемник; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с внешним соединением. - -// Возвращает CLSID COM-класса для работы с 1С:Предприятием 8 через COM-соединение. -// -// Параметры: -// ИмяCOMСоединителя - Строка - имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение. -// -// Возвращаемое значение: -// Строка - строковое представление CLSID. -// -Функция ИдентификаторCOMСоединителя(Знач ИмяCOMСоединителя) Экспорт - - Если ИмяCOMСоединителя = "v83.COMConnector" Тогда - Возврат "181E893D-73A4-4722-B61D-D604B3D67D47"; - КонецЕсли; - - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'На задан CLSID для класса %1'"), ИмяCOMСоединителя); - ВызватьИсключение ТекстИсключения; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. - -// Определяет режим эксплуатации информационной базы файловый (Истина) или серверный (Ложь). -// При проверке используется СтрокаСоединенияИнформационнойБазы, которую можно указать явно. -// -// Параметры: -// СтрокаСоединенияИнформационнойБазы - Строка - параметр используется, если -// нужно проверить строку соединения не текущей информационной базы. -// -// Возвращаемое значение: -// Булево - Истина, если файловая. -// -Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт - - Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда - СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); - КонецЕсли; - Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; - -КонецФункции - -// Создает временный каталог. После окончания работы с временным каталогом его необходимо удалить -// с помощью ОбщегоНазначения.УдалитьВременныйКаталог. -// -// Параметры: -// Расширение - Строка - Расширение каталога, которое идентифицирует назначение временного каталога -// и подсистему, которая его создала. -// Рекомендуется указывать на английском языке. -// -// Возвращаемое значение: -// Строка - Полный путь к каталогу с разделителем пути. -// -Функция СоздатьВременныйКаталог(Знач Расширение = "") Экспорт - - ПутьККаталогу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла(Расширение)); - СоздатьКаталог(ПутьККаталогу); - Возврат ПутьККаталогу; - -КонецФункции - -// Удаляет временный каталог вместе с его содержимым, если возможно. -// Если временный каталог не может быть удален (например, он занят каким-то процессом), -// то в журнал регистрации записывается соответствующее предупреждение, а процедура завершается. -// -// Для совместного использования с ОбщегоНазначения.СоздатьВременныйКаталог, -// после окончания работы с временным каталогом. -// -// Параметры: -// ПутьККаталогу - Строка - Полный путь к временному каталогу. -// -Процедура УдалитьВременныйКаталог(Знач ПутьККаталогу) Экспорт - - // Ожидается, что ПутьККаталогу получен методом ПолучитьИмяВременногоФайла(). - // Перед проверкой разворачиваем слэши в одну сторону. - Если Не СтрНачинаетсяС(СтрЗаменить(ПутьККаталогу, "/", "\"), СтрЗаменить(КаталогВременныхФайлов(), "/", "\")) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверное значение параметра ПутьККаталогу в ОбщегоНазначения.УдалитьВременныйКаталог: - |Каталог не является временным ""%1""'"), - ПутьККаталогу); - КонецЕсли; - - Попытка - УдалитьФайлы(ПутьККаталогу); - Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Стандартные подсистемы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Предупреждение, - , - , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось удалить временный каталог ""%1"" по причине: - |%2'"), - ПутьККаталогу, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); - КонецПопытки; - -КонецПроцедуры - -// Переводит параметры сеанса в состояние "Не установлено". -// -// Параметры: -// ПараметрыДляОчистки - Строка - имена параметров сеанса для очистки, разделенные ",". -// Исключения - Строка - имена параметров сеанса не предназначенные для очистки, разделенные ",". -// -Процедура ОчиститьПараметрыСеанса(ПараметрыДляОчистки = "", Исключения = "") Экспорт - - МассивИсключений = СтрРазделить(Исключения, ","); - МассивПараметровДляОчистки = СтрРазделить(ПараметрыДляОчистки, ",", Ложь); - - Если МассивПараметровДляОчистки.Количество() = 0 Тогда - Для Каждого ПараметрСеанса Из Метаданные.ПараметрыСеанса Цикл - Если МассивИсключений.Найти(ПараметрСеанса.Имя) = Неопределено Тогда - МассивПараметровДляОчистки.Добавить(ПараметрСеанса.Имя); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Индекс = МассивПараметровДляОчистки.Найти("ПараметрыКлиентаНаСервере"); - Если Индекс <> Неопределено Тогда - МассивПараметровДляОчистки.Удалить(Индекс); - КонецЕсли; - - Индекс = МассивПараметровДляОчистки.Найти("УстановленныеРасширения"); - Если Индекс <> Неопределено Тогда - МассивПараметровДляОчистки.Удалить(Индекс); - КонецЕсли; - - ПараметрыСеанса.Очистить(МассивПараметровДляОчистки); - -КонецПроцедуры - // Возвращает описание предмета в виде текстовой строки. // // Параметры: @@ -1909,9 +2450,9 @@ Если СсылкаНаПредмет = Неопределено Или СсылкаНаПредмет.Пустая() Тогда Результат = НСтр("ru = 'не задан'"); - ИначеЕсли Метаданные.Документы.Содержит(СсылкаНаПредмет.Метаданные()) Тогда + ИначеЕсли Метаданные.Документы.Содержит(СсылкаНаПредмет.Метаданные()) Или Метаданные.Перечисления.Содержит(СсылкаНаПредмет.Метаданные()) Тогда Результат = Строка(СсылкаНаПредмет); - Иначе + Иначе ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; Если ПустаяСтрока(ПредставлениеОбъекта) Тогда ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); @@ -1923,1591 +2464,112 @@ КонецФункции -// Возвращает исключения при поиске мест использования объектов. +#КонецОбласти + +#Область ДинамическийСписок + +// Создать структуру свойств динамического списка для вызова УстановитьСвойстваДинамическогоСписка(). // // Возвращаемое значение: -// Соответствие - Исключения поиска ссылок в разрезе объектов метаданных: -// * Ключ - ОбъектМетаданных - Объект метаданных, для которого применяются исключения. -// * Значение - Строка, Массив - описание исключенных реквизитов. -// Если "*", то исключены все реквизиты объекта метаданных. -// Если массив строк, то содержит относительные имена исключенных реквизитов. +// Структура - любое поле может иметь значение Неопределено, если оно не устанавливается: +// * ТекстЗапроса - Строка - новый текст запроса. +// * ОсновнаяТаблица - Строка - имя основной таблицы. +// * ДинамическоеСчитываниеДанных - Булево - признак использования динамического считывания. // -Функция ИсключенияПоискаСсылок() Экспорт +Функция СтруктураСвойствДинамическогоСписка() Экспорт - ИсключенияПоискаИнтеграция = Новый Массив; + Возврат Новый Структура("ТекстЗапроса, ОсновнаяТаблица, ДинамическоеСчитываниеДанных"); - ИнтеграцияПодсистемБСП.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаИнтеграция); +КонецФункции + +// Установить текст запроса, основную таблицу или динамическое считывание в динамическом списке. +// Устанавливать эти свойства следует за один вызов этой процедуры, чтобы не снижалась производительность. +// +// Параметры: +// Список - ТаблицаФормы - элемент формы динамического списка, для которого устанавливаются свойства. +// СтруктураПараметров - Структура - см. СтруктураСвойствДинамическогоСписка(). +// +Процедура УстановитьСвойстваДинамическогоСписка(Список, СтруктураПараметров) Экспорт - ИсключенияПоиска = Новый Массив; - ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоиска); + Форма = Список.Родитель; + ТипУправляемаяФорма = Тип("УправляемаяФорма"); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИсключенияПоиска, ИсключенияПоискаИнтеграция); - - Результат = Новый Соответствие; - Для Каждого ИсключениеПоиска Из ИсключенияПоиска Цикл - // Определение полного имени реквизита и объекта метаданных - носителя реквизита. - Если ТипЗнч(ИсключениеПоиска) = Тип("Строка") Тогда - ПолноеИмя = ИсключениеПоиска; - МассивПодстрок = СтрРазделить(ПолноеИмя, "."); - КоличествоПодстрок = МассивПодстрок.Количество(); - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(МассивПодстрок[0] + "." + МассивПодстрок[1]); - Иначе - ОбъектМетаданных = ИсключениеПоиска; - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - МассивПодстрок = СтрРазделить(ПолноеИмя, "."); - КоличествоПодстрок = МассивПодстрок.Количество(); - Если КоличествоПодстрок > 2 Тогда - Пока Истина Цикл - Родитель = ОбъектМетаданных.Родитель(); - Если ТипЗнч(Родитель) = Тип("ОбъектМетаданныхКонфигурация") Тогда - Прервать; - Иначе - ОбъектМетаданных = Родитель; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - // Регистрация. - Если КоличествоПодстрок < 4 Тогда - Результат.Вставить(ОбъектМетаданных, "*"); - Иначе - ПутиКРеквизитам = Результат.Получить(ОбъектМетаданных); - Если ПутиКРеквизитам = "*" Тогда - Продолжить; // Весь объект метаданных уже исключен. - ИначеЕсли ПутиКРеквизитам = Неопределено Тогда - ПутиКРеквизитам = Новый Массив; - Результат.Вставить(ОбъектМетаданных, ПутиКРеквизитам); - КонецЕсли; - // Формат реквизита: - // "<ВидОМ>.<ИмяОМ>.<ТипРеквизитаИлиТЧ>.<ИмяРеквизитаИлиТЧ>[.<ТипРеквизита>.<ИмяРеквизитаТЧ>]". - // Примеры: - // "РегистрСведений.ВерсииОбъектов.Реквизит.АвторВерсии", - // "Документ._ДемоЗаказПокупателя.ТабличнаяЧасть.СчетаНаОплату.Реквизит.Счет", - // "ПланВидовРасчета._ДемоОсновныеНачисления.СтандартнаяТабличнаяЧасть.БазовыеВидыРасчета.СтандартныйРеквизит.ВидРасчета". - // Относительный путь к реквизиту должен получиться таким, чтобы его можно было использовать в условиях запроса: - // "<ИмяРеквизитаИлиТЧ>[.<ИмяРеквизитаТЧ>]". - Если КоличествоПодстрок = 4 Тогда - ОтносительныйПутьКРеквизиту = МассивПодстрок[3]; - Иначе - ОтносительныйПутьКРеквизиту = МассивПодстрок[3] + "." + МассивПодстрок[5]; - КонецЕсли; - ПутиКРеквизитам.Добавить(ОтносительныйПутьКРеквизиту); - КонецЕсли; + Пока ТипЗнч(Форма) <> ТипУправляемаяФорма Цикл + Форма = Форма.Родитель; КонецЦикла; - Возврат Результат; -КонецФункции - -// Преобразует (сериализует) любое значение в XML-строку. -// Преобразованы в могут быть только те объекты, для которых в синтакс-помощнике указано, что они сериализуются. -// См. также ЗначениеИзСтрокиXML. -// -// Параметры: -// Значение - Произвольный - значение, которое необходимо сериализовать в XML-строку. -// -// Возвращаемое значение: -// Строка - XML-строка. -// -Функция ЗначениеВСтрокуXML(Значение) Экспорт + ДинамическийСписок = Форма[Список.ПутьКДанным]; + ТекстЗапроса = СтруктураПараметров.ТекстЗапроса; - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку(); - СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное); - - Возврат ЗаписьXML.Закрыть(); -КонецФункции - -// Выполняет преобразование (десериализацию) XML-строки в значение. -// См. также ЗначениеВСтрокуXML. -// -// Параметры: -// СтрокаXML - Строка - XML-строка, с сериализованным объектом.. -// -// Возвращаемое значение: -// Произвольный - значение, полученное из переданной XML-строки. -// -Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт - - ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.УстановитьСтроку(СтрокаXML); - - Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); -КонецФункции - -// Возвращает XML-представление XDTO-объекта. -// -// Параметры: -// ОбъектXDTO - ОбъектXDTO - объект, для которого требуется сформировать XML-представление. -// Фабрика - ФабрикаXDTO - фабрика, с использованием которой требуется формировать XML-представление. -// Если параметр не указан - будет использоваться глобальная фабрика XDTO. -// -// Возвращаемое значение: -// Строка - XML-представление XDTO-объекта. -// -Функция ОбъектXDTOВСтрокуXML(Знач ОбъектXDTO, Знач Фабрика = Неопределено) Экспорт - - ОбъектXDTO.Проверить(); - - Если Фабрика = Неопределено Тогда - Фабрика = ФабрикаXDTO; + Если Не ПустаяСтрока(ТекстЗапроса) Тогда + ДинамическийСписок.ТекстЗапроса = ТекстЗапроса; КонецЕсли; - Запись = Новый ЗаписьXML(); - Запись.УстановитьСтроку(); - Фабрика.ЗаписатьXML(Запись, ОбъектXDTO, , , , НазначениеТипаXML.Явное); + ОсновнаяТаблица = СтруктураПараметров.ОсновнаяТаблица; - Возврат Запись.Закрыть(); - -КонецФункции - -// Формирует XDTO-объект по XML-представлению. -// -// Параметры: -// СтрокаXML - Строка - XML-представление XDTO-объекта, -// Фабрика - ФабрикаXDTO - фабрика, с использованием которой требуется формировать XDTO-объект. -// Если параметр не указан - будет использоваться глобальная фабрика XDTO. -// -// Возвращаемое значение: -// ОбъектXDTO - XDTO-объект. -// -Функция ОбъектXDTOИзСтрокиXML(Знач СтрокаXML, Знач Фабрика = Неопределено) Экспорт - - Если Фабрика = Неопределено Тогда - Фабрика = ФабрикаXDTO; + Если Не ПустаяСтрока(ОсновнаяТаблица) Тогда + ДинамическийСписок.ОсновнаяТаблица = ОсновнаяТаблица; КонецЕсли; - Чтение = Новый ЧтениеXML(); - Чтение.УстановитьСтроку(СтрокаXML); + ДинамическоеСчитываниеДанных = СтруктураПараметров.ДинамическоеСчитываниеДанных; - Возврат Фабрика.ПрочитатьXML(Чтение); - -КонецФункции - -// Подготавливает строку для использования в качестве шаблона поиска в запросе. -// Экранирует служебные символы, если они есть в строке. -// -// Параметры: -// СтрокаПоиска - Строка - произвольная строка. -// -// Возвращаемое значение: -// Строка - строка подготовленная для поиска данных в запросе. -// -Функция СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска) Экспорт - - ИтоговаяСтрокаДляПоиска = СтрокаПоиска; - ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "~", "~~"); - ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "%", "~%"); - ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "_", "~_"); - ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "[", "~["); - ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "-", "~-"); - - Возврат ИтоговаяСтрокаДляПоиска; - -КонецФункции - -// Конструктор объекта WSПрокси. -// -// Отличия от конструктора Новый WSПрокси: -// - встроенный конструктор WSОпределения; -// - кэширует файл WSDL; -// - не требуется указание ИнтернетПрокси (используется автоматически, если настроен); -// - умеет делать быструю проверку доступности сервиса. -// -// Параметры: -// ПереданныеПараметры - Структура - настройки подключения (необходимо использовать функцию ПараметрыПодключенияWSПрокси): -// * АдресWSDL - Строка - месторасположение wsdl. -// * URIПространстваИмен - Строка - URI пространства имен web-сервиса. -// * ИмяСервиса - Строка - имя сервиса. -// * ИмяТочкиПодключения - Строка - (необязательный) если не задано, образуется как <ИмяСервиса>Soap. -// * ИмяПользователя - Строка - (необязательный) имя пользователя для входа на сервер. -// * Пароль - Строка - (необязательный) пароль пользователя. -// * Таймаут - Число - (необязательный) таймаут на операции выполняемые через полученное прокси. -// * Местоположение - Строка - (необязательный) фактический адрес сервиса. Используется, если адрес реального -// расположения сервиса отличается от адреса, который указан в WSDL-файле. -// * ИспользоватьАутентификациюОС - Булево - (необязательный) включает использование авторизации NTLM или Negotiate на -// сервере. -// * ДелатьКонтрольныйВызов - Булево - (необязательный) выполнять проверку доступности сервиса (требуется -// поддержка этой команды веб-сервисом). -// * ЗащищенноеСоединение - ЗащищенноеСоединениеOpenSSL, Неопределено - (необязательный) параметры защищенного -// соединения. -// -// Возвращаемое значение: -// WSПрокси - объект WSПрокси. -// -Функция СоздатьWSПрокси(ПереданныеПараметры) Экспорт - - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("СоздатьWSПрокси", "Параметры", ПереданныеПараметры, Тип("Структура"), - Новый Структура("АдресWSDL,URIПространстваИмен,ИмяСервиса", Тип("Строка"), Тип("Строка"), Тип("Строка"))); - - ПараметрыПодключения = ПараметрыПодключенияWSПрокси(); - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ПереданныеПараметры); - - ДелатьКонтрольныйВызов = ПараметрыПодключения.ДелатьКонтрольныйВызов; - Таймаут = ПараметрыПодключения.Таймаут; - - Если ДелатьКонтрольныйВызов И Таймаут <> Неопределено И Таймаут > 20 Тогда - ПараметрыПодключения.Таймаут = 7; - WSПроксиPing = РегистрыСведений.КэшПрограммныхИнтерфейсов.ВнутренняяWSПрокси(ПараметрыПодключения); - Попытка - WSПроксиPing.Ping(); - Исключение - - АдресТочкиПодключения = WSПроксиPing.ТочкаПодключения.Местоположение; - РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(АдресТочкиПодключения); - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось проверить доступность web-сервиса - |%1 - |по причине: - |%2 - | - |Результат диагностики: - |%3'"), - ПараметрыПодключения.АдресWSDL, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), - РезультатДиагностики.ОписаниеОшибки); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'WSПрокси'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); - ВызватьИсключение ТекстОшибки; - КонецПопытки; - ПараметрыПодключения.Таймаут = Таймаут; - КонецЕсли; - - Возврат РегистрыСведений.КэшПрограммныхИнтерфейсов.ВнутренняяWSПрокси(ПараметрыПодключения); - -КонецФункции - -// Возвращает структуру параметров для функции СоздатьWSПрокси. -// -// Возвращаемое значение: -// Структура - коллекция параметров, см. СоздатьWSПрокси(). -// -Функция ПараметрыПодключенияWSПрокси() Экспорт - Результат = Новый Структура; - Результат.Вставить("АдресWSDL"); - Результат.Вставить("URIПространстваИмен"); - Результат.Вставить("ИмяСервиса"); - Результат.Вставить("ИмяТочкиПодключения", ""); - Результат.Вставить("ИмяПользователя"); - Результат.Вставить("Пароль"); - Результат.Вставить("Таймаут", 0); - Результат.Вставить("Местоположение"); - Результат.Вставить("ИспользоватьАутентификациюОС", Ложь); - Результат.Вставить("ДелатьКонтрольныйВызов", Ложь); - Результат.Вставить("ЗащищенноеСоединение", Неопределено); - Возврат Результат; -КонецФункции - -// Определяет доступность объекта метаданных по функциональным опциям. -// -// Параметры: -// ОбъектМетаданных - ОбъектМетаданных, Строка - проверяемый объект метаданных. -// -// Возвращаемое значение: -// Булево - Истина, если объект доступен. -// -Функция ОбъектМетаданныхДоступенПоФункциональнымОпциям(Знач ОбъектМетаданных) Экспорт - Если ОбъектМетаданных = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - Если ТипЗнч(ОбъектМетаданных) <> Тип("Строка") Тогда - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Иначе - ПолноеИмя = ОбъектМетаданных; - КонецЕсли; - Возврат ОбщегоНазначенияПовтИсп.ДоступностьОбъектовПоОпциям().Получить(ПолноеИмя) <> Ложь; -КонецФункции - -// См. ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности. -Функция ОбщиеПараметрыБазовойФункциональности() Экспорт - - ОбщиеПараметры = Новый Структура; - ОбщиеПараметры.Вставить("ИмяФормыПерсональныхНастроек", ""); - ОбщиеПараметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", Истина); - ОбщиеПараметры.Вставить("ОтключитьИдентификаторыОбъектовМетаданных", Ложь); - ОбщиеПараметры.Вставить("РекомендуемыйОбъемОперативнойПамяти", 2); - ОбщиеПараметры.Вставить("МинимальнаяВерсияПлатформы", "8.3.12.1412"); - ОбщиеПараметры.Вставить("РекомендуемаяВерсияПлатформы", "8.3.12.1412"); - // Устарело, следует использовать свойства МинимальнаяВерсияПлатформы и РекомендуемаяВерсияПлатформы: - ОбщиеПараметры.Вставить("МинимальноНеобходимаяВерсияПлатформы", ""); - ОбщиеПараметры.Вставить("РаботаВПрограммеЗапрещена", Ложь); // Блокировать запуск, если версия ниже минимальной. - - ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры); - - Минимальная = ОбщиеПараметры.МинимальнаяВерсияПлатформы; - Рекомендуемая = ОбщиеПараметры.РекомендуемаяВерсияПлатформы; - Если Не ПустаяСтрока(Минимальная) - И Не ПустаяСтрока(Рекомендуемая) - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Минимальная, Рекомендуемая) > 0 Тогда - ТекстСообщения = НСтр("ru = 'Минимальная версия платформы ""1С:Предприятие 8"" указана выше рекомендуемой. - |Минимальная версия - ""%1"", рекомендуемая версия - ""%2"".'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстСообщения, - ОбщиеПараметры.МинимальнаяВерсияПлатформы, - ОбщиеПараметры.РекомендуемаяВерсияПлатформы); - КонецЕсли; - - // Обратная совместимость. - МинимальноНеобходимаяВерсияПлатформы = ОбщиеПараметры.МинимальноНеобходимаяВерсияПлатформы; - Если ЗначениеЗаполнено(МинимальноНеобходимаяВерсияПлатформы) Тогда - Если ОбщиеПараметры.РаботаВПрограммеЗапрещена Тогда - ОбщиеПараметры.МинимальнаяВерсияПлатформы = МинимальноНеобходимаяВерсияПлатформы; - ОбщиеПараметры.РекомендуемаяВерсияПлатформы = ""; - Иначе - ОбщиеПараметры.РекомендуемаяВерсияПлатформы = МинимальноНеобходимаяВерсияПлатформы; - ОбщиеПараметры.МинимальнаяВерсияПлатформы = ""; - КонецЕсли; - Иначе - СистемнаяИнформация = Новый СистемнаяИнформация; - Текущая = СистемнаяИнформация.ВерсияПриложения; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Минимальная, Текущая) > 0 Тогда - ОбщиеПараметры.МинимальноНеобходимаяВерсияПлатформы = Минимальная; - ОбщиеПараметры.РаботаВПрограммеЗапрещена = Истина; - Иначе - ОбщиеПараметры.МинимальноНеобходимаяВерсияПлатформы = Рекомендуемая; - ОбщиеПараметры.РаботаВПрограммеЗапрещена = Ложь; - КонецЕсли; - КонецЕсли; - - Возврат ОбщиеПараметры; - -КонецФункции - -// Возвращает Истина, если эта информационная база подключена к 1С:Fresh. -// -// Возвращаемое значение: -// Булево - признак автономного рабочего места. -// -Функция ЭтоАвтономноеРабочееМесто() Экспорт - - Если ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - МодульОбменДаннымиСервер = ОбщийМодуль("ОбменДаннымиСервер"); - Возврат МодульОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто(); - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Определяет, что эта информационная база является подчиненным узлом -// распределенной информационной базы (РИБ) с фильтром. -// -// Возвращаемое значение: -// Булево - Истина, если эта информационная база является подчиненным узлом РИБ с фильтром. -// -Функция ЭтоПодчиненныйУзелРИБСФильтром() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ПланыОбмена.ГлавныйУзел() <> Неопределено - И ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - ОбщийМодульОбменДаннымиСервер = ОбщийМодуль("ОбменДаннымиСервер"); - Если ОбщийМодульОбменДаннымиСервер.НазначениеПланаОбмена(ПланыОбмена.ГлавныйУзел().Метаданные().Имя) = "РИБСФильтром" Тогда - Возврат Истина; - КонецЕсли; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Определяет, что эта информационная база является подчиненным узлом -// распределенной информационной базы (РИБ). -// -// Возвращаемое значение: -// Булево - Истина, если эта информационная база является подчиненным узлом РИБ. -// -Функция ЭтоПодчиненныйУзелРИБ() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ПланыОбмена.ГлавныйУзел() <> Неопределено; - -КонецФункции - -// Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. -// В главном узле всегда Ложь. -// -// Возвращаемое значение: -// Булево - Истина, если требуется. -// -Функция ТребуетсяОбновлениеКонфигурацииПодчиненногоУзлаРИБ() Экспорт - - Возврат ЭтоПодчиненныйУзелРИБ() И КонфигурацияИзменена(); - -КонецФункции - -// Возвращает Истина, если текущий сеанс выполняется на сервере, работающим под управлением ОС Linux. -// -// Возвращаемое значение: -// Булево - Истина, если сервер работает под управлением ОС Linux. -// -Функция ЭтоLinuxСервер() Экспорт - - СистемнаяИнформация = Новый СистемнаяИнформация; - Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; - -КонецФункции - -// Выполняет действия перед продолжением выполнения обработчика регламентного задания. -// -// Например, проверяет возможность выполнения обработчика регламентного задания. -// Если администратор не заблокировал выполнение регламентных заданий до -// окончания обновления ИБ, тогда требуется прекратить выполнение обработчика. -// -// Параметры: -// РегламентноеЗадание - ОбъектМетаданных.РегламентноеЗадание - регламентное задание, -// из которого был вызван данный метод. Необходимо передавать для проверки доступности -// по функциональным опциям. -// -Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Справочники.ВерсииРасширений.ЗарегистрироватьИспользованиеВерсииРасширений(); - УстановитьПривилегированныйРежим(Ложь); - - Если РегистрыСведений.ПараметрыРаботыПрограммы.НеобходимоОбновление() Тогда - ВызватьИсключение - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. - |Рекомендуется запрещать выполнение регламентных заданий на время обновления.'"); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Если Не РазделениеВключено() - И ПланыОбмена.ГлавныйУзел() = Неопределено - И ЗначениеЗаполнено(Константы.ГлавныйУзел.Получить()) Тогда - - ВызватьИсключение - НСтр("ru = 'Вход в программу временно невозможен до восстановления связи с главным узлом. - |Рекомендуется запрещать выполнение регламентных заданий на время восстановления.'"); - КонецЕсли; - - Если РегламентноеЗадание <> Неопределено - И ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда - МодульРегламентныеЗаданияСлужебный = ОбщийМодуль("РегламентныеЗаданияСлужебный"); - - ЗависимостиЗаданий = Неопределено; - МодульРегламентныеЗаданияСлужебный.ПроверитьВозможностьРаботыСВнешнимиРесурсами( - РегламентноеЗадание, ЗависимостиЗаданий); - - Доступно = МодульРегламентныеЗаданияСлужебный.РегламентноеЗаданиеДоступноПоФункциональнымОпциям( - РегламентноеЗадание, ЗависимостиЗаданий); - - Если Не Доступно Тогда - Задания = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Метаданные", РегламентноеЗадание)); - Для Каждого Задание Из Задания Цикл - РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор, - Новый Структура("Использование", Ложь)); - КонецЦикла; - ВызватьИсключение - НСтр("ru = 'Регламентное задание недоступно по функциональным опциям или - |не поддерживает работу в текущем режиме работы программы. - |Выполнение прервано. Задание отключено.'"); - КонецЕсли; + Если ТипЗнч(ДинамическоеСчитываниеДанных) = Тип("Булево") Тогда + ДинамическийСписок.ДинамическоеСчитываниеДанных = ДинамическоеСчитываниеДанных; КонецЕсли; КонецПроцедуры -// Возвращает редакцию конфигурации. -// Редакцией принято называть две первые группы цифр полной версии конфигурации. -// Например, у версии "1.2.3.4" редакция "1.2". -// -// Возвращаемое значение: -// Строка - номер редакции конфигурации. -// -Функция РедакцияКонфигурации() Экспорт - - Результат = ""; - ВерсияКонфигурации = Метаданные.Версия; - - Позиция = СтрНайти(ВерсияКонфигурации, "."); - Если Позиция > 0 Тогда - Результат = Лев(ВерсияКонфигурации, Позиция); - ВерсияКонфигурации = Сред(ВерсияКонфигурации, Позиция + 1); - Позиция = СтрНайти(ВерсияКонфигурации, "."); - Если Позиция > 0 Тогда - Результат = Результат + Лев(ВерсияКонфигурации, Позиция - 1); - Иначе - Результат = ""; - КонецЕсли; - КонецЕсли; - - Если ПустаяСтрока(Результат) Тогда - Результат = Метаданные.Версия; - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Возвращает строковое представление интервала между переданными датами или -// относительно переданной даты и текущей даты сеанса. -// -// Параметры: -// ВремяНачала - Дата - начальная точка интервала. -// ВремяОкончания - Дата - конечная точка интервала, если не задана - берется текущая дата сеанса. -// -// Возвращаемое значение: -// Строка - представление интервала времени. -// -Функция ИнтервалВремениСтрокой(ВремяНачала, ВремяОкончания = Неопределено) Экспорт - - Если ВремяОкончания = Неопределено Тогда - ВремяОкончания = ТекущаяДатаСеанса(); - ИначеЕсли ВремяНачала > ВремяОкончания Тогда - ВызватьИсключение НСтр("ru = 'Дата окончания интервала не может быть меньше даты начала.'"); - КонецЕсли; - - ВеличинаИнтервала = ВремяОкончания - ВремяНачала; - ВеличинаИнтервалаВДнях = Цел(ВеличинаИнтервала/60/60/24); - - Если ВеличинаИнтервалаВДнях > 365 Тогда - ОписаниеИнтервала = НСтр("ru = 'более года'"); - ИначеЕсли ВеличинаИнтервалаВДнях > 31 Тогда - ОписаниеИнтервала = НСтр("ru = 'более месяца'"); - ИначеЕсли ВеличинаИнтервалаВДнях >= 1 Тогда - ОписаниеИнтервала = Формат(ВеличинаИнтервалаВДнях, "ЧДЦ=0") + " " - + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(ВеличинаИнтервалаВДнях, - "", НСтр("ru = 'день,дня,дней,,,,,,0'")); - Иначе - ОписаниеИнтервала = НСтр("ru = 'менее одного дня'"); - КонецЕсли; - - Возврат ОписаниеИнтервала; - -КонецФункции - -// Возвращает фрагмент текста запроса, отделяющего один запрос от другого. -// -// Возвращаемое значение: -// Строка - разделитель запросов. -// -Функция РазделительПакетаЗапросов() Экспорт - - Возврат " - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |"; - -КонецФункции - -// Возвращает адрес публикации информационной базы для формирования прямых ссылок на объекты ИБ -// для возможности перехода к ним пользователей, имеющих доступ к базе через публикацию в сети Интернет. -// Например, если такой адрес включить в электронное письмо, то из письма за одно нажатие -// можно перейти к форме объекта в самой программе. -// -// Возвращаемое значение: -// Строка - адрес информационной базы, как он задан в настройке "Адрес в Интернете" в панели администрирования -// (хранится в константе АдресПубликацииИнформационнойБазыВИнтернете). -// Например, "http://1c.ru/database". -// -// Пример: -// АдресПубликацииИнформационнойБазыВЛокальнойСети() + "/" + e1cib/app/Обработка.ВыгрузкаДанныхПроекта"; -// возвращает прямую ссылку для открытия обработки ВыгрузкаДанныхПроекта. -// -Функция АдресПубликацииИнформационнойБазыВИнтернете() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат Константы.АдресПубликацииИнформационнойБазыВИнтернете.Получить(); - -КонецФункции - -// Возвращает адрес публикации информационной базы для формирования прямых ссылок на объекты ИБ -// для возможности перехода к ним пользователей, имеющих доступ к базе через публикацию локальной сети. -// Например, если такой адрес включить в электронное письмо, то из письма за одно нажатие -// можно перейти к форме объекта в самой программе. -// -// Возвращаемое значение: -// Строка - адрес информационной базы, как он задан в настройке "Локальный адрес" в панели администрирования -// (хранится в константе АдресПубликацииИнформационнойБазыВЛокальнойСети). -// Например, "http://localserver/base". -// -// Пример: -// АдресПубликацииИнформационнойБазыВЛокальнойСети() + "/" + e1cib/app/Обработка.ВыгрузкаДанныхПроекта"; -// возвращает прямую ссылку для открытия обработки ВыгрузкаДанныхПроекта. -// -Функция АдресПубликацииИнформационнойБазыВЛокальнойСети() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат Константы.АдресПубликацииИнформационнойБазыВЛокальнойСети.Получить(); - -КонецФункции - -// Формирует ссылку для входа в программу для указанного пользователя. -// -// Параметры: -// Пользователь - Строка - логин пользователя для входа в программу; -// Пароль - Строка - пароль пользователя для входа в программу; -// ВидПубликацииИБ - Строка - через какую публикацию пользователь входит в программу: -// "ВИнтернете" или "ВЛокальнойСети". -// -// Возвращаемое значение: -// Строка, Неопределено - адрес входа в программу или Неопределено, если адрес не настроен. -Функция АдресВходаВПрограмму(Пользователь, Пароль, ВидПубликацииИБ) Экспорт - - Результат = ""; - - Если НРег(ВидПубликацииИБ) = НРег("ВИнтернете") Тогда - Результат = АдресПубликацииИнформационнойБазыВИнтернете(); - ИначеЕсли НРег(ВидПубликацииИБ) = НРег("ВЛокальнойСети") Тогда - Результат = АдресПубликацииИнформационнойБазыВЛокальнойСети(); - КонецЕсли; - - Если ПустаяСтрока(Результат) Тогда - Возврат Неопределено; - КонецЕсли; - - Если Не СтрЗаканчиваетсяНа(Результат, "/") Тогда - Результат = Результат + "/"; - КонецЕсли; - - Результат = Результат + "?n=" + КодироватьСтроку(Пользователь, СпособКодированияСтроки.КодировкаURL); - Если ЗначениеЗаполнено(Пароль) Тогда - Результат = Результат + "&p=" + КодироватьСтроку(Пароль, СпособКодированияСтроки.КодировкаURL); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Сохраняет персональные настройки пользователя, относящиеся к подсистеме БазоваяФункциональность. -// Для получения настроек предусмотрены следующие функции: -// - ОбщегоНазначенияКлиент.ПредлагатьУстановкуРасширенияРаботыСФайлами(), -// - СтандартныеПодсистемыСервер.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы(). -// -// Параметры: -// Настройки - Структура - коллекция настроек: -// * НапоминатьОбУстановкеРасширенияРаботыСФайлами - Булево - Признак необходимости -// напоминания об установке расширения. -// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - Запрашивать подтверждение по завершении работы. -// -Процедура СохранитьПерсональныеНастройки(Настройки) Экспорт - - Если Настройки.Свойство("НапоминатьОбУстановкеРасширенияРаботыСФайлами") Тогда - ПараметрыКлиентаНаСервере = ПараметрыСеанса.ПараметрыКлиентаНаСервере; - Если ПараметрыКлиентаНаСервере.Получить("ЭтоВебКлиент") Тогда - ИдентификаторКлиента = ПараметрыКлиентаНаСервере.Получить("ИдентификаторКлиента"); - ХранилищеОбщихНастроекСохранить( - "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", - ИдентификаторКлиента, Настройки.НапоминатьОбУстановкеРасширенияРаботыСФайлами); - КонецЕсли; - КонецЕсли; - - Если Настройки.Свойство("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы") Тогда - ХранилищеОбщихНастроекСохранить("ОбщиеНастройкиПользователя", - "ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", - Настройки.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы); - КонецЕсли; - -КонецПроцедуры - -// Возвращает признак работы в режиме разделения данных по областям -// (технически это признак условного разделения). -// -// Возвращает Ложь, если конфигурация не может работать в режиме разделения данных -// (не содержит общих реквизитов, предназначенных для разделения данных). -// -// Возвращаемое значение: -// Булево - Истина, если разделение включено. -// - Ложь, если разделение выключено или не поддерживается. -// -Функция РазделениеВключено() Экспорт - - Если ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульРаботаВМоделиСервиса = ОбщийМодуль("РаботаВМоделиСервиса"); - Возврат МодульРаботаВМоделиСервиса.РазделениеВключено(); - Иначе - Возврат Ложь; - КонецЕсли; - -КонецФункции - -// Возвращает признак возможности обращения к разделенным данным (которые входят в состав разделителей). -// Признак относится к сеансу, но может меняться во время работы сеанса, если разделение было включено -// в самом сеансе, поэтому проверку следует делать непосредственно перед обращением к разделенным данным. -// -// Возвращает Истина, если конфигурация не может работать в режиме разделения данных -// (не содержит общих реквизитов, предназначенных для разделения данных). -// -// Возвращаемое значение: -// Булево - Истина, если разделение не поддерживается, либо разделение выключено, -// либо разделение включено и разделители установлены. -// - Ложь, если разделение включено и разделители не установлены. -// -Функция ДоступноИспользованиеРазделенныхДанных() Экспорт - - Если ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульРаботаВМоделиСервиса = ОбщийМодуль("РаботаВМоделиСервиса"); - Возврат МодульРаботаВМоделиСервиса.ДоступноИспользованиеРазделенныхДанных(); - Иначе - Возврат Истина; - КонецЕсли; - -КонецФункции +#КонецОбласти +#Область ВнешнееСоединение //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с формами. +// Процедуры и функции для работы с внешним соединением. -// Процедура предназначена для заполнения реквизита формы типа ДанныеФормыДерево. +// Возвращает CLSID COM-класса для работы с "1С:Предприятием 8" через COM-соединение. // // Параметры: -// КоллекцияЭлементовДерева - ДанныеФормыДерево - реквизит, который нужно заполнить. -// ДеревоЗначений - ДеревоЗначений - данные для заполнения. -// -Процедура ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоЗначений) Экспорт - - Для Каждого Строка Из ДеревоЗначений.Строки Цикл - - ЭлементДерева = КоллекцияЭлементовДерева.Добавить(); - - ЗаполнитьЗначенияСвойств(ЭлементДерева, Строка); - - Если Строка.Строки.Количество() > 0 Тогда - - ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(ЭлементДерева.ПолучитьЭлементы(), Строка); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с типами, объектами метаданных и их строковыми представлениями. - -// Возвращает имена реквизитов объекта заданного типа. +// ИмяCOMСоединителя - Строка - имя COM-класса для работы с "1С:Предприятием 8" через COM-соединение. // -// Параметры: -// Ссылка - ЛюбаяСсылка - ссылка на элемент базы данных, для которого требуется получить результат функции; -// Тип - Тип - тип значения реквизита. -// // Возвращаемое значение: -// Строка - строка реквизитов объекта метаданных конфигурации, разделенные символом ",". +// Строка - строковое представление CLSID. // -// Пример: -// РеквизитыОрганизации = ОбщегоНазначения.ИменаРеквизитовПоТипу(Документ.Ссылка, Тип("СправочникСсылка.Организации")); -// -Функция ИменаРеквизитовПоТипу(Ссылка, Тип) Экспорт +Функция ИдентификаторCOMСоединителя(Знач ИмяCOMСоединителя) Экспорт - Результат = ""; - МетаданныеОбъекта = Ссылка.Метаданные(); - - Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл - Если Реквизит.Тип.СодержитТип(Тип) Тогда - Результат = Результат + ?(ПустаяСтрока(Результат), "", ", ") + Реквизит.Имя; - КонецЕсли; - КонецЦикла; - - Возврат Результат; -КонецФункции - -// Возвращает имя базового типа по переданному значению объекта метаданных. -// -// Параметры: -// ОбъектМетаданных - ОбъектМетаданных - объект метаданных, по которому необходимо определить базовый тип. -// -// Возвращаемое значение: -// Строка - имя базового типа по переданному значению объекта метаданных. -// -// Пример: -// ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(Метаданные.Справочники.Номенклатура); = "Справочники". -// -Функция ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных) Экспорт - - Если Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда - Возврат "Документы"; - - ИначеЕсли Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда - Возврат "Справочники"; - - ИначеЕсли Метаданные.Перечисления.Содержит(ОбъектМетаданных) Тогда - Возврат "Перечисления"; - - ИначеЕсли Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда - Возврат "РегистрыСведений"; - - ИначеЕсли Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных) Тогда - Возврат "РегистрыНакопления"; - - ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМетаданных) Тогда - Возврат "РегистрыБухгалтерии"; - - ИначеЕсли Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных) Тогда - Возврат "РегистрыРасчета"; - - ИначеЕсли Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда - Возврат "ПланыОбмена"; - - ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных) Тогда - Возврат "ПланыВидовХарактеристик"; - - ИначеЕсли Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных) Тогда - Возврат "БизнесПроцессы"; - - ИначеЕсли Метаданные.Задачи.Содержит(ОбъектМетаданных) Тогда - Возврат "Задачи"; - - ИначеЕсли Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных) Тогда - Возврат "ПланыСчетов"; - - ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных) Тогда - Возврат "ПланыВидовРасчета"; - - ИначеЕсли Метаданные.Константы.Содержит(ОбъектМетаданных) Тогда - Возврат "Константы"; - - ИначеЕсли Метаданные.ЖурналыДокументов.Содержит(ОбъектМетаданных) Тогда - Возврат "ЖурналыДокументов"; - - ИначеЕсли Метаданные.Последовательности.Содержит(ОбъектМетаданных) Тогда - Возврат "Последовательности"; - - ИначеЕсли Метаданные.РегламентныеЗадания.Содержит(ОбъектМетаданных) Тогда - Возврат "РегламентныеЗадания"; - - ИначеЕсли Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных.Родитель()) - И ОбъектМетаданных.Родитель().Перерасчеты.Найти(ОбъектМетаданных.Имя) = ОбъектМетаданных Тогда - Возврат "Перерасчеты"; - - Иначе - - Возврат ""; - + Если ИмяCOMСоединителя = "v83.COMConnector" Тогда + Возврат "181E893D-73A4-4722-B61D-D604B3D67D47"; КонецЕсли; + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'На задан CLSID для класса %1'"), ИмяCOMСоединителя); + ВызватьИсключение ТекстИсключения; + КонецФункции -// Возвращает менеджер объекта по полному имени объекта метаданных. -// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. -// -// Параметры: -// ПолноеИмя - Строка - полное имя объекта метаданных. Пример: "Справочник.Организации". -// -// Возвращаемое значение: -// СправочникМенеджер, ДокументМенеджер, ОбработкаМенеджер, РегистрСведенийМенеджер - менеджер объекта. -// -// Пример: -// МенеджерСправочника = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.Организации"); -// ПустаяСсылка = МенеджерСправочника.ПустаяСсылка(); -// -Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) Экспорт - Перем КлассОМ, ИмяОМ, Менеджер; - - ЧастиИмени = СтрРазделить(ПолноеИмя, "."); - - Если ЧастиИмени.Количество() >= 2 Тогда - КлассОМ = ЧастиИмени[0]; - ИмяОМ = ЧастиИмени[1]; - КонецЕсли; - - Если ВРег(КлассОМ) = "ПЛАНОБМЕНА" Тогда - Менеджер = ПланыОбмена; - - ИначеЕсли ВРег(КлассОМ) = "СПРАВОЧНИК" Тогда - Менеджер = Справочники; - - ИначеЕсли ВРег(КлассОМ) = "ДОКУМЕНТ" Тогда - Менеджер = Документы; - - ИначеЕсли ВРег(КлассОМ) = "ЖУРНАЛДОКУМЕНТОВ" Тогда - Менеджер = ЖурналыДокументов; - - ИначеЕсли ВРег(КлассОМ) = "ПЕРЕЧИСЛЕНИЕ" Тогда - Менеджер = Перечисления; - - ИначеЕсли ВРег(КлассОМ) = "ОТЧЕТ" Тогда - Менеджер = Отчеты; - - ИначеЕсли ВРег(КлассОМ) = "ОБРАБОТКА" Тогда - Менеджер = Обработки; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда - Менеджер = ПланыВидовХарактеристик; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНСЧЕТОВ" Тогда - Менеджер = ПланыСчетов; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВРАСЧЕТА" Тогда - Менеджер = ПланыВидовРасчета; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРСВЕДЕНИЙ" Тогда - Менеджер = РегистрыСведений; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРНАКОПЛЕНИЯ" Тогда - Менеджер = РегистрыНакопления; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРБУХГАЛТЕРИИ" Тогда - Менеджер = РегистрыБухгалтерии; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРРАСЧЕТА" Тогда - Если ЧастиИмени.Количество() = 2 Тогда - // Регистр расчета - Менеджер = РегистрыРасчета; - Иначе - КлассПодчиненногоОМ = ЧастиИмени[2]; - ИмяПодчиненногоОМ = ЧастиИмени[3]; - Если ВРег(КлассПодчиненногоОМ) = "ПЕРЕРАСЧЕТ" Тогда - // Перерасчет - Попытка - Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; - ИмяОм = ИмяПодчиненногоОМ; - Исключение - Менеджер = Неопределено; - КонецПопытки; - КонецЕсли; - КонецЕсли; - - ИначеЕсли ВРег(КлассОМ) = "БИЗНЕСПРОЦЕСС" Тогда - Менеджер = БизнесПроцессы; - - ИначеЕсли ВРег(КлассОМ) = "ЗАДАЧА" Тогда - Менеджер = Задачи; - - ИначеЕсли ВРег(КлассОМ) = "КОНСТАНТА" Тогда - Менеджер = Константы; - - ИначеЕсли ВРег(КлассОМ) = "ПОСЛЕДОВАТЕЛЬНОСТЬ" Тогда - Менеджер = Последовательности; - КонецЕсли; - - Если Менеджер <> Неопределено Тогда - Попытка - Возврат Менеджер[ИмяОМ]; - Исключение - Менеджер = Неопределено; - КонецПопытки; - КонецЕсли; - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); - -КонецФункции - -// Возвращает менеджер объекта по ссылке на объект. -// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. -// См. также ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени. -// -// Параметры: -// Ссылка - ЛюбаяСсылка - объект, менеджер которого требуется получить. -// -// Возвращаемое значение: -// СправочникМенеджер, ДокументМенеджер, ОбработкаМенеджер, РегистрСведенийМенеджер - менеджер объекта. -// -// Пример: -// МенеджерСправочника = ОбщегоНазначения.МенеджерОбъектаПоСсылке(СсылкаНаОрганизацию); -// ПустаяСсылка = МенеджерСправочника.ПустаяСсылка(); -// -Функция МенеджерОбъектаПоСсылке(Ссылка) Экспорт - - ИмяОбъекта = Ссылка.Метаданные().Имя; - ТипСсылки = ТипЗнч(Ссылка); - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат Справочники[ИмяОбъекта]; - - ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат Документы[ИмяОбъекта]; - - ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат БизнесПроцессы[ИмяОбъекта]; - - ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат ПланыВидовХарактеристик[ИмяОбъекта]; - - ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат ПланыСчетов[ИмяОбъекта]; - - ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат ПланыВидовРасчета[ИмяОбъекта]; - - ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат Задачи[ИмяОбъекта]; - - ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат ПланыОбмена[ИмяОбъекта]; - - ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат Перечисления[ИмяОбъекта]; - Иначе - Возврат Неопределено; - КонецЕсли; - -КонецФункции - -// Создает и возвращает экземпляр отчета или обработки по полному имени объекта метаданных. -// -// Параметры: -// ПолноеИмя - Строка - полное имя объекта метаданных. Пример: "Отчет.БизнесПроцессы". -// -// Возвращаемое значение: -// ОтчетОбъект, ОбработкаОбъект - экземпляр отчета или обработки. -// -Функция ОбъектПоПолномуИмени(ПолноеИмя) Экспорт - МассивСтрок = СтрРазделить(ПолноеИмя, "."); - - Если МассивСтрок.Количество() >= 2 Тогда - Вид = ВРег(МассивСтрок[0]); - Имя = МассивСтрок[1]; - Иначе - ВызватьИсключение СтрЗаменить(НСтр("ru = 'Некорректное полное имя отчета или обработки ""%1"".'"), "%1", ПолноеИмя); - КонецЕсли; - - Если Вид = "ОТЧЕТ" Тогда - Возврат Отчеты[Имя].Создать(); - ИначеЕсли Вид = "ОБРАБОТКА" Тогда - Возврат Обработки[Имя].Создать(); - ИначеЕсли Вид = "ВНЕШНИЙОТЧЕТ" Тогда - Возврат ВнешниеОтчеты.Создать(Имя); - ИначеЕсли Вид = "ВНЕШНЯЯОБРАБОТКА" Тогда - Возврат ВнешниеОбработки.Создать(Имя); - Иначе - ВызватьИсключение СтрЗаменить(НСтр("ru = '""%1"" не является отчетом или обработкой.'"), "%1", ПолноеИмя); - КонецЕсли; -КонецФункции - -// Проверяет физическое наличие записи в информационной базе данных о переданном значении ссылки. -// -// Параметры: -// ПроверяемаяСсылка - ЛюбаяСсылка - значение любой ссылки информационной базы данных. -// -// Возвращаемое значение: -// Булево - Истина, если существует. -// -Функция СсылкаСуществует(ПроверяемаяСсылка) Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ - | Ссылка КАК Ссылка - |ИЗ - | [ИмяТаблицы] - |ГДЕ - | Ссылка = &Ссылка - |"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицыПоСсылке(ПроверяемаяСсылка)); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("Ссылка", ПроверяемаяСсылка); - - УстановитьПривилегированныйРежим(Истина); - - Возврат НЕ Запрос.Выполнить().Пустой(); - -КонецФункции - -// Возвращает имя вида объектов метаданных по ссылке на объект. -// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. -// См. так же ВидОбъектаПоТипу. -// -// Параметры: -// Ссылка - ЛюбаяСсылка - объект, вид которого требуется получить. -// -// Возвращаемое значение: -// Строка - имя вида объектов метаданных. Например: "Справочник", "Документ". -// -Функция ВидОбъектаПоСсылке(Ссылка) Экспорт - - Возврат ВидОбъектаПоТипу(ТипЗнч(Ссылка)); - -КонецФункции - -// Возвращает имя вида объектов метаданных по типу объекта. -// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. -// См. так же ВидОбъектаПоСсылке. -// -// Параметры: -// ТипОбъекта - Тип - Тип прикладного объекта, определенный в конфигурации. -// -// Возвращаемое значение: -// Строка - имя вида объектов метаданных. Например: "Справочник", "Документ". -// -Функция ВидОбъектаПоТипу(ТипОбъекта) Экспорт - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "Справочник"; - - ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "Документ"; - - ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "БизнесПроцесс"; - - ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "ПланВидовХарактеристик"; - - ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "ПланСчетов"; - - ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "ПланВидовРасчета"; - - ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "Задача"; - - ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "ПланОбмена"; - - ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "Перечисление"; - - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(ТипОбъекта)); - - КонецЕсли; - -КонецФункции - -// Возвращает полное имя объекта метаданных по переданному значению ссылки. -// -// Параметры: -// Ссылка - ЛюбаяСсылка - объект, для которого необходимо получить имя таблицы ИБ. -// -// Возвращаемое значение: -// Строка - полное имя объекта метаданных для указанного объекта. Например: "Справочник.Номенклатура". -// -Функция ИмяТаблицыПоСсылке(Ссылка) Экспорт - - Возврат Ссылка.Метаданные().ПолноеИмя(); - -КонецФункции - -// Проверяет, что переданное значение имеет ссылочный тип данных. -// -// Параметры: -// Значение - Произвольный - проверяемое значение. -// -// Возвращаемое значение: -// Булево - Истина, если тип значения ссылочный. -// -Функция ЗначениеСсылочногоТипа(Значение) Экспорт - - Возврат ЭтоСсылка(ТипЗнч(Значение)); - -КонецФункции - -// Проверка того, что переданный тип является ссылочным типом данных. -// Для типа "Неопределено" возвращается Ложь. -// -// Параметры: -// ПроверяемыйТип - Тип - для проверки на тип ссылка. -// -// Возвращаемое значение: -// Булево - Истина, если это ссылка. -// -Функция ЭтоСсылка(ПроверяемыйТип) Экспорт - - Возврат ПроверяемыйТип <> Тип("Неопределено") - И (Справочники.ТипВсеСсылки().СодержитТип(ПроверяемыйТип) - ИЛИ Документы.ТипВсеСсылки().СодержитТип(ПроверяемыйТип) - ИЛИ Перечисления.ТипВсеСсылки().СодержитТип(ПроверяемыйТип) - ИЛИ ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ПроверяемыйТип) - ИЛИ ПланыСчетов.ТипВсеСсылки().СодержитТип(ПроверяемыйТип) - ИЛИ ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ПроверяемыйТип) - ИЛИ БизнесПроцессы.ТипВсеСсылки().СодержитТип(ПроверяемыйТип) - ИЛИ БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().СодержитТип(ПроверяемыйТип) - ИЛИ Задачи.ТипВсеСсылки().СодержитТип(ПроверяемыйТип) - ИЛИ ПланыОбмена.ТипВсеСсылки().СодержитТип(ПроверяемыйТип)); - -КонецФункции - -// Проверяет, является ли объект группой элементов. -// -// Параметры: -// Объект - ЛюбаяСсылка, Объект - проверяемый объект. -// -// Возвращаемое значение: -// Булево - Истина, если является. -// -Функция ОбъектЯвляетсяГруппой(Объект) Экспорт - - Если ЗначениеСсылочногоТипа(Объект) Тогда - Ссылка = Объект; - Иначе - Ссылка = Объект.Ссылка; - КонецЕсли; - - МетаданныеОбъекта = Ссылка.Метаданные(); - - Если ЭтоСправочник(МетаданныеОбъекта) Тогда - - Если НЕ МетаданныеОбъекта.Иерархический - ИЛИ МетаданныеОбъекта.ВидИерархии - <> Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда - - Возврат Ложь; - КонецЕсли; - - ИначеЕсли НЕ ЭтоПланВидовХарактеристик(МетаданныеОбъекта) Тогда - Возврат Ложь; - - ИначеЕсли НЕ МетаданныеОбъекта.Иерархический Тогда - Возврат Ложь; - КонецЕсли; - - Если Ссылка <> Объект Тогда - Возврат Объект.ЭтоГруппа; - КонецЕсли; - - Возврат ЗначениеРеквизитаОбъекта(Ссылка, "ЭтоГруппа") = Истина; - -КонецФункции - -// Возвращает ссылку, соответствующую объекту метаданных, для использования в базе данных. -// См. также ОбщегоНазначения.ИдентификаторыОбъектаМетаданных. -// -// Поддерживаются следующие объекты метаданных. -// - Подсистемы (требуется программировать переименование). -// - Роли (требуется программировать переименование). -// - ПланыОбмена. -// - Константы. -// - Справочники. -// - Документы. -// - ЖурналыДокументов. -// - Отчеты. -// - Обработки. -// - ПланыВидовХарактеристик. -// - ПланыСчетов. -// - ПланыВидовРасчета. -// - РегистрыСведений. -// - РегистрыНакопления. -// - РегистрыБухгалтерии. -// - РегистрыРасчета. -// - БизнесПроцессы. -// - Задачи. +// Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель +// на это соединение. // // Параметры: -// ОписаниеОбъектаМетаданных - ОбъектМетаданных - объект метаданных конфигурации; -// - Тип - тип, который можно успешно использовать в функции Метаданные.НайтиПоТипу(); -// - Строка - полное имя объекта метаданных, которое можно успешно использовать -// в функции Метаданные.НайтиПоПолномуИмени(). -// Возвращаемое значение: -// СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений - ссылка. -// -// Пример: -// Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Ссылка)); -// Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); -// Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Справочник.Организации"); -// -Функция ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных) Экспорт - - Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных); - -КонецФункции - -// Возвращает ссылки, соответствующие объектам метаданных, для использования в базе данных. -// См. также ОбщегоНазначения.ИдентификаторОбъектаМетаданных. -// -// Поддерживаются следующие объекты метаданных. -// - Подсистемы (требуется программировать переименование). -// - Роли (требуется программировать переименование). -// - ПланыОбмена. -// - Константы. -// - Справочники. -// - Документы. -// - ЖурналыДокументов. -// - Отчеты. -// - Обработки. -// - ПланыВидовХарактеристик. -// - ПланыСчетов. -// - ПланыВидовРасчета. -// - РегистрыСведений. -// - РегистрыНакопления. -// - РегистрыБухгалтерии. -// - РегистрыРасчета. -// - БизнесПроцессы. -// - Задачи. -// -// Параметры: -// ПолныеИменаОбъектовМетаданных - Массив - со значениями: -// * Строка - полное имя объекта метаданных, которое можно успешно использовать -// в функции Метаданные.НайтиПоПолномуИмени(). -// -// Возвращаемое значение: -// Соответствие - со свойствами: -// * Ключ - Строка - полное имя указанного объекта метаданных. -// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - найденный идентификатор. -// Пример: -// ПолныеИмена = Новый Массив; -// ПолныеИмена.Добавить(Метаданные.Справочники.Валюты.ПолноеИмя()); -// ПолныеИмена.Добавить(Метаданные.РегистрыСведений.КурсыВалют.ПолноеИмя()); -// Идентификаторы = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ПолныеИмена); -// -Функция ИдентификаторыОбъектовМетаданных(ПолныеИменаОбъектовМетаданных) Экспорт - - Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторыОбъектовМетаданных(ПолныеИменаОбъектовМетаданных); - -КонецФункции - -// Возвращает объект метаданных по переданному идентификатору. -// -// Параметры: -// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификатор -// объекта метаданных конфигурации или расширения. -// -// Возвращаемое значение: -// ОбъектМетаданных - объект метаданных, соответствующий идентификатору. -// -Функция ОбъектМетаданныхПоИдентификатору(Идентификатор) Экспорт - - Возврат Справочники.ИдентификаторыОбъектовМетаданных.ОбъектМетаданныхПоИдентификатору(Идентификатор); - -КонецФункции - -// Добавляет описание переименования объекта метаданных при переходе на указанную версию конфигурации. -// Добавление выполняется в структуру Итог, которая передается в -// процедуру ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -// -// Параметры: -// Итог - Структура - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -// ВерсияИБ - Строка - версия конечной конфигурации, при переходе на которую нужно -// выполнить переименование, например, "2.1.2.14". -// СтароеПолноеИмя - Строка - старое полное имя объекта метаданных, которое нужно переименовать, -// например, "Подсистема._ДемоПодсистемы". -// НовоеПолноеИмя - Строка - новое полное имя объекта метаданных, на которое нужно переименовать, -// например, "Подсистема._ДемоСервисныеПодсистемы". -// ИдентификаторБиблиотеки - Строка - внутренний идентификатор библиотеки, к которой относится ВерсияИБ. -// Для основной конфигурации не требуется. -// Например, "СтандартныеПодсистемы" - как указано -// в ОбновлениеИнформационнойБазыБСП.ПриДобавленииПодсистемы. -// Пример: -// ОбщегоНазначения.ДобавитьПереименование(Итог, "2.1.2.14", -// "Подсистема._ДемоПодсистемы", -// "Подсистема._ДемоСервисныеПодсистемы"); -// -Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт - - Справочники.ИдентификаторыОбъектовМетаданных.ДобавитьПереименование(Итог, - ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки); - -КонецПроцедуры - -// Возвращает строковое представление типа. -// Для ссылочных типов возвращает в формате "СправочникСсылка.ИмяОбъекта" или "ДокументСсылка.ИмяОбъекта". -// Для остальных типов приводит тип к строке, например "Число". -// -// Параметры: -// Тип - Тип - для которого надо получить представление. -// -// Возвращаемое значение: -// Строка - представление типа. -// -Функция СтроковоеПредставлениеТипа(Тип) Экспорт - - Представление = ""; - - Если ЭтоСсылка(Тип) Тогда - - ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); - ИмяОбъекта = СтрРазделить(ПолноеИмя, ".")[1]; - - Если Справочники.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "СправочникСсылка"; - - ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ДокументСсылка"; - - ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "БизнесПроцессСсылка"; - - ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланВидовХарактеристикСсылка"; - - ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланСчетовСсылка"; - - ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланВидовРасчетаСсылка"; - - ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ЗадачаСсылка"; - - ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланОбменаСсылка"; - - ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПеречислениеСсылка"; - - КонецЕсли; - - Результат = ?(Представление = "", Представление, Представление + "." + ИмяОбъекта); - - Иначе - - Результат = Строка(Тип); - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Проверить, что описание типа состоит из единственного типа значения и -// совпадает с нужным типом. -// -// Параметры: -// ОписаниеТипа - ОписаниеТипов - проверяемая коллекция типов; -// ТипЗначения - Тип - проверяемый тип. -// -// Возвращаемое значение: -// Булево - Истина, если совпадает. -// -// Пример: -// Если ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево") Тогда -// // Выводим поле в виде флажка. -// КонецЕсли; -// -Функция ОписаниеТипаСостоитИзТипа(ОписаниеТипа, ТипЗначения) Экспорт - - Если ОписаниеТипа.Типы().Количество() = 1 - И ОписаниеТипа.Типы().Получить(0) = ТипЗначения Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов. -// -// Параметры: -// СтандартныеРеквизиты - ОписанияСтандартныхРеквизитов - тип и значение описывает коллекцию настроек различных -// стандартных реквизитов; -// ИмяРеквизита - Строка - реквизит который необходимо проверить на принадлежность множеству стандартных -// реквизитов; +// Параметры - (См. ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения) // // Возвращаемое значение: -// Булево - Истина, если реквизит входит в подмножество стандартных реквизитов. +// Структура - информация о соединении: +// * Соединение - COMОбъект, Неопределено - указатель на COM-объект соединения или Неопределено в случае ошибки; +// * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; +// * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; +// * ОшибкаПодключенияКомпоненты - Булево - флаг ошибки подключения COM. // -Функция ЭтоСтандартныйРеквизит(СтандартныеРеквизиты, ИмяРеквизита) Экспорт +Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт - Для Каждого Реквизит Из СтандартныеРеквизиты Цикл - Если Реквизит.Имя = ИмяРеквизита Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; + ПодключениеНедоступно = ЭтоLinuxСервер(); + КраткоеОписаниеОшибки = НСтр("ru = 'Прямое подключение к информационной базе недоступно на сервере под управлением ОС Linux.'"); + + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.УстановитьВнешнееСоединениеСБазой(Параметры, ПодключениеНедоступно, КраткоеОписаниеОшибки); КонецФункции -// Возвращает таблицу значений с описанием требуемых свойств всех реквизитов объекта метаданного. -// Получает значения свойств стандартных реквизитов и пользовательских реквизитов (созданных в режиме конфигуратора). -// -// Параметры: -// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо получить значение свойств реквизитов. -// Например: Метаданные.Документ.РеализацияТоваровИУслуг -// Свойства - Строка - свойства реквизитов, перечисленные через запятую, значение которых необходимо получить. -// Например: "Имя, Тип, Синоним, Подсказка". -// -// Возвращаемое значение: -// ТаблицаЗначений - описание требуемых свойств всех реквизитов объекта метаданных. -// -Функция ОписаниеСвойствОбъекта(ОбъектМетаданных, Свойства) Экспорт - - МассивСвойств = СтрРазделить(Свойства, ","); - - // Возвращаемое значение функции. - ТаблицаОписанияСвойствОбъекта = Новый ТаблицаЗначений; - - // Добавляем в таблицу поля согласно именам переданных свойств. - Для Каждого ИмяСвойства Из МассивСвойств Цикл - ТаблицаОписанияСвойствОбъекта.Колонки.Добавить(СокрЛП(ИмяСвойства)); - КонецЦикла; - - // Заполняем строку таблицы свойствами реквизитов объекта метаданных. - Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл - ЗаполнитьЗначенияСвойств(ТаблицаОписанияСвойствОбъекта.Добавить(), Реквизит); - КонецЦикла; - - // Заполняем строку таблицы свойствами стандартных реквизитов объекта метаданных. - Для Каждого Реквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл - ЗаполнитьЗначенияСвойств(ТаблицаОписанияСвойствОбъекта.Добавить(), Реквизит); - КонецЦикла; - - Возврат ТаблицаОписанияСвойствОбъекта; - -КонецФункции +#КонецОбласти -// Создает объект ОписаниеТипов, содержащий тип Строка. -// -// Параметры: -// ДлинаСтроки - Число - длина строки. -// -// Возвращаемое значение: -// ОписаниеТипов - описание типа Строка. -// -Функция ОписаниеТипаСтрока(ДлинаСтроки) Экспорт - - Массив = Новый Массив; - Массив.Добавить(Тип("Строка")); - - КвалификаторСтроки = Новый КвалификаторыСтроки(ДлинаСтроки, ДопустимаяДлина.Переменная); - - Возврат Новый ОписаниеТипов(Массив, , КвалификаторСтроки); - -КонецФункции - -// Создает объект ОписаниеТипов, содержащий тип Число. -// -// Параметры: -// Разрядность - Число - общее количество разрядов числа (количество разрядов -// целой части плюс количество разрядов дробной части). -// РазрядностьДробнойЧасти - Число - число разрядов дробной части. -// ЗнакЧисла - ДопустимыйЗнак - допустимый знак числа. -// -// Возвращаемое значение: -// ОписаниеТипов - описание типа Число. -Функция ОписаниеТипаЧисло(Разрядность, РазрядностьДробнойЧасти = 0, ЗнакЧисла = Неопределено) Экспорт - - Если ЗнакЧисла = Неопределено Тогда - КвалификаторЧисла = Новый КвалификаторыЧисла(Разрядность, РазрядностьДробнойЧасти); - Иначе - КвалификаторЧисла = Новый КвалификаторыЧисла(Разрядность, РазрядностьДробнойЧасти, ЗнакЧисла); - КонецЕсли; - - Возврат Новый ОписаниеТипов("Число", КвалификаторЧисла); - -КонецФункции - -// Создает объект ОписаниеТипов, содержащий тип Дата. -// -// Параметры: -// ЧастиДаты - ЧастиДаты - набор вариантов использования значений типа Дата. -// -// Возвращаемое значение: -// ОписаниеТипов - описание типа Дата. -Функция ОписаниеТипаДата(ЧастиДаты) Экспорт - - Массив = Новый Массив; - Массив.Добавить(Тип("Дата")); - - КвалификаторДаты = Новый КвалификаторыДаты(ЧастиДаты); - - Возврат Новый ОписаниеТипов(Массив, , , КвалификаторДаты); - -КонецФункции - -// Позволяет определить, есть ли среди реквизитов объекта реквизит с переданным именем. -// -// Параметры: -// ИмяРеквизита - Строка - имя реквизита; -// МетаданныеОбъекта - ОбъектМетаданных - объект, в котором требуется проверить наличие реквизита. -// -// Возвращаемое значение: -// Булево - Истина, если есть. -// -Функция ЕстьРеквизитОбъекта(ИмяРеквизита, МетаданныеОбъекта) Экспорт - - Возврат НЕ (МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита) = Неопределено); - -КонецФункции +#Область Метаданные //////////////////////////////////////////////////////////////////////////////// // Функции определения типов объектов метаданных. @@ -3809,6 +2871,881 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с типами, объектами метаданных и их строковыми представлениями. + +// Возвращает имена реквизитов объекта заданного типа. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - ссылка на элемент базы данных, для которого требуется получить результат функции; +// Тип - Тип - тип значения реквизита. +// +// Возвращаемое значение: +// Строка - строка реквизитов объекта метаданных конфигурации, разделенных символом ",". +// +// Пример: +// РеквизитыОрганизации = ОбщегоНазначения.ИменаРеквизитовПоТипу(Документ.Ссылка, Тип("СправочникСсылка.Организации")); +// +Функция ИменаРеквизитовПоТипу(Ссылка, Тип) Экспорт + + Результат = ""; + МетаданныеОбъекта = Ссылка.Метаданные(); + + Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл + Если Реквизит.Тип.СодержитТип(Тип) Тогда + Результат = Результат + ?(ПустаяСтрока(Результат), "", ", ") + Реквизит.Имя; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Возвращает имя базового типа по переданному значению объекта метаданных. +// +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных - объект метаданных, по которому необходимо определить базовый тип. +// +// Возвращаемое значение: +// Строка - имя базового типа по переданному значению объекта метаданных. +// +// Пример: +// ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(Метаданные.Справочники.Номенклатура); = "Справочники". +// +Функция ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных) Экспорт + + Если Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда + Возврат "Документы"; + + ИначеЕсли Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда + Возврат "Справочники"; + + ИначеЕсли Метаданные.Перечисления.Содержит(ОбъектМетаданных) Тогда + Возврат "Перечисления"; + + ИначеЕсли Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда + Возврат "РегистрыСведений"; + + ИначеЕсли Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных) Тогда + Возврат "РегистрыНакопления"; + + ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМетаданных) Тогда + Возврат "РегистрыБухгалтерии"; + + ИначеЕсли Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных) Тогда + Возврат "РегистрыРасчета"; + + ИначеЕсли Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда + Возврат "ПланыОбмена"; + + ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных) Тогда + Возврат "ПланыВидовХарактеристик"; + + ИначеЕсли Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных) Тогда + Возврат "БизнесПроцессы"; + + ИначеЕсли Метаданные.Задачи.Содержит(ОбъектМетаданных) Тогда + Возврат "Задачи"; + + ИначеЕсли Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных) Тогда + Возврат "ПланыСчетов"; + + ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных) Тогда + Возврат "ПланыВидовРасчета"; + + ИначеЕсли Метаданные.Константы.Содержит(ОбъектМетаданных) Тогда + Возврат "Константы"; + + ИначеЕсли Метаданные.ЖурналыДокументов.Содержит(ОбъектМетаданных) Тогда + Возврат "ЖурналыДокументов"; + + ИначеЕсли Метаданные.Последовательности.Содержит(ОбъектМетаданных) Тогда + Возврат "Последовательности"; + + ИначеЕсли Метаданные.РегламентныеЗадания.Содержит(ОбъектМетаданных) Тогда + Возврат "РегламентныеЗадания"; + + ИначеЕсли Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных.Родитель()) + И ОбъектМетаданных.Родитель().Перерасчеты.Найти(ОбъектМетаданных.Имя) = ОбъектМетаданных Тогда + Возврат "Перерасчеты"; + + Иначе + + Возврат ""; + + КонецЕсли; + +КонецФункции + +// Возвращает менеджер объекта по полному имени объекта метаданных. +// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. +// +// Параметры: +// ПолноеИмя - Строка - полное имя объекта метаданных. Пример: "Справочник.Организации". +// +// Возвращаемое значение: +// СправочникМенеджер, ДокументМенеджер, ОбработкаМенеджер, РегистрСведенийМенеджер - менеджер объекта. +// +// Пример: +// МенеджерСправочника = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.Организации"); +// ПустаяСсылка = МенеджерСправочника.ПустаяСсылка(); +// +Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) Экспорт + Перем КлассОМ, ИмяОМ, Менеджер; + + ЧастиИмени = СтрРазделить(ПолноеИмя, "."); + + Если ЧастиИмени.Количество() >= 2 Тогда + КлассОМ = ЧастиИмени[0]; + ИмяОМ = ЧастиИмени[1]; + КонецЕсли; + + Если ВРег(КлассОМ) = "ПЛАНОБМЕНА" Тогда + Менеджер = ПланыОбмена; + + ИначеЕсли ВРег(КлассОМ) = "СПРАВОЧНИК" Тогда + Менеджер = Справочники; + + ИначеЕсли ВРег(КлассОМ) = "ДОКУМЕНТ" Тогда + Менеджер = Документы; + + ИначеЕсли ВРег(КлассОМ) = "ЖУРНАЛДОКУМЕНТОВ" Тогда + Менеджер = ЖурналыДокументов; + + ИначеЕсли ВРег(КлассОМ) = "ПЕРЕЧИСЛЕНИЕ" Тогда + Менеджер = Перечисления; + + ИначеЕсли ВРег(КлассОМ) = "ОТЧЕТ" Тогда + Менеджер = Отчеты; + + ИначеЕсли ВРег(КлассОМ) = "ОБРАБОТКА" Тогда + Менеджер = Обработки; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + Менеджер = ПланыВидовХарактеристик; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНСЧЕТОВ" Тогда + Менеджер = ПланыСчетов; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВРАСЧЕТА" Тогда + Менеджер = ПланыВидовРасчета; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРСВЕДЕНИЙ" Тогда + Менеджер = РегистрыСведений; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРНАКОПЛЕНИЯ" Тогда + Менеджер = РегистрыНакопления; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРБУХГАЛТЕРИИ" Тогда + Менеджер = РегистрыБухгалтерии; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРРАСЧЕТА" Тогда + Если ЧастиИмени.Количество() = 2 Тогда + // Регистр расчета + Менеджер = РегистрыРасчета; + Иначе + КлассПодчиненногоОМ = ЧастиИмени[2]; + ИмяПодчиненногоОМ = ЧастиИмени[3]; + Если ВРег(КлассПодчиненногоОМ) = "ПЕРЕРАСЧЕТ" Тогда + // Перерасчет + Попытка + Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; + ИмяОм = ИмяПодчиненногоОМ; + Исключение + Менеджер = Неопределено; + КонецПопытки; + КонецЕсли; + КонецЕсли; + + ИначеЕсли ВРег(КлассОМ) = "БИЗНЕСПРОЦЕСС" Тогда + Менеджер = БизнесПроцессы; + + ИначеЕсли ВРег(КлассОМ) = "ЗАДАЧА" Тогда + Менеджер = Задачи; + + ИначеЕсли ВРег(КлассОМ) = "КОНСТАНТА" Тогда + Менеджер = Константы; + + ИначеЕсли ВРег(КлассОМ) = "ПОСЛЕДОВАТЕЛЬНОСТЬ" Тогда + Менеджер = Последовательности; + КонецЕсли; + + Если Менеджер <> Неопределено Тогда + Попытка + Возврат Менеджер[ИмяОМ]; + Исключение + Менеджер = Неопределено; + КонецПопытки; + КонецЕсли; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); + +КонецФункции + +// Возвращает менеджер объекта по ссылке на объект. +// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. +// См. также ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - объект, менеджер которого требуется получить. +// +// Возвращаемое значение: +// СправочникМенеджер, ДокументМенеджер, ОбработкаМенеджер, РегистрСведенийМенеджер - менеджер объекта. +// +// Пример: +// МенеджерСправочника = ОбщегоНазначения.МенеджерОбъектаПоСсылке(СсылкаНаОрганизацию); +// ПустаяСсылка = МенеджерСправочника.ПустаяСсылка(); +// +Функция МенеджерОбъектаПоСсылке(Ссылка) Экспорт + + ИмяОбъекта = Ссылка.Метаданные().Имя; + ТипСсылки = ТипЗнч(Ссылка); + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + Возврат Справочники[ИмяОбъекта]; + + ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + Возврат Документы[ИмяОбъекта]; + + ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + Возврат БизнесПроцессы[ИмяОбъекта]; + + ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + Возврат ПланыВидовХарактеристик[ИмяОбъекта]; + + ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + Возврат ПланыСчетов[ИмяОбъекта]; + + ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + Возврат ПланыВидовРасчета[ИмяОбъекта]; + + ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + Возврат Задачи[ИмяОбъекта]; + + ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + Возврат ПланыОбмена[ИмяОбъекта]; + + ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда + Возврат Перечисления[ИмяОбъекта]; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +// Проверка того, что переданный тип является ссылочным типом данных. +// Для типа "Неопределено" возвращается Ложь. +// +// Параметры: +// ПроверяемыйТип - Тип - для проверки на ссылочный тип данных. +// +// Возвращаемое значение: +// Булево - Истина, если это ссылка. +// +Функция ЭтоСсылка(ПроверяемыйТип) Экспорт + + Возврат ПроверяемыйТип <> Тип("Неопределено") И ОписаниеТипаВсеСсылки().СодержитТип(ПроверяемыйТип); + +КонецФункции + +// Проверяет физическое наличие записи в информационной базе данных о переданном значении ссылки. +// +// Параметры: +// ПроверяемаяСсылка - ЛюбаяСсылка - значение любой ссылки информационной базы данных. +// +// Возвращаемое значение: +// Булево - Истина, если существует. +// +Функция СсылкаСуществует(ПроверяемаяСсылка) Экспорт + + ТекстЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 + |ИЗ + | [ИмяТаблицы] + |ГДЕ + | Ссылка = &Ссылка + |"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицыПоСсылке(ПроверяемаяСсылка)); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("Ссылка", ПроверяемаяСсылка); + + УстановитьПривилегированныйРежим(Истина); + + Возврат НЕ Запрос.Выполнить().Пустой(); + +КонецФункции + +// Возвращает имя вида объектов метаданных по ссылке на объект. +// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. +// См. так же ВидОбъектаПоТипу. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - объект, вид которого требуется получить. +// +// Возвращаемое значение: +// Строка - имя вида объектов метаданных. Например: "Справочник", "Документ". +// +Функция ВидОбъектаПоСсылке(Ссылка) Экспорт + + Возврат ВидОбъектаПоТипу(ТипЗнч(Ссылка)); + +КонецФункции + +// Возвращает имя вида объектов метаданных по типу объекта. +// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. +// См. так же ВидОбъектаПоСсылке. +// +// Параметры: +// ТипОбъекта - Тип - Тип прикладного объекта, определенный в конфигурации. +// +// Возвращаемое значение: +// Строка - имя вида объектов метаданных. Например: "Справочник", "Документ". +// +Функция ВидОбъектаПоТипу(ТипОбъекта) Экспорт + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат "Справочник"; + + ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат "Документ"; + + ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат "БизнесПроцесс"; + + ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат "ПланВидовХарактеристик"; + + ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат "ПланСчетов"; + + ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат "ПланВидовРасчета"; + + ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат "Задача"; + + ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат "ПланОбмена"; + + ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда + Возврат "Перечисление"; + + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Неверный тип значения параметра (%1)'"), Строка(ТипОбъекта)); + + КонецЕсли; + +КонецФункции + +// Возвращает полное имя объекта метаданных по переданному значению ссылки. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - объект, для которого необходимо получить имя таблицы ИБ. +// +// Возвращаемое значение: +// Строка - полное имя объекта метаданных для указанного объекта. Например: "Справочник.Номенклатура". +// +Функция ИмяТаблицыПоСсылке(Ссылка) Экспорт + + Возврат Ссылка.Метаданные().ПолноеИмя(); + +КонецФункции + +// Проверяет, что переданное значение имеет ссылочный тип данных. +// +// Параметры: +// Значение - Произвольный - проверяемое значение. +// +// Возвращаемое значение: +// Булево - Истина, если тип значения ссылочный. +// +Функция ЗначениеСсылочногоТипа(Значение) Экспорт + + Возврат ЭтоСсылка(ТипЗнч(Значение)); + +КонецФункции + +// Проверяет, является ли объект группой элементов. +// +// Параметры: +// Объект - ЛюбаяСсылка, Объект - проверяемый объект. +// +// Возвращаемое значение: +// Булево - Истина, если является. +// +Функция ОбъектЯвляетсяГруппой(Объект) Экспорт + + Если ЗначениеСсылочногоТипа(Объект) Тогда + Ссылка = Объект; + Иначе + Ссылка = Объект.Ссылка; + КонецЕсли; + + МетаданныеОбъекта = Ссылка.Метаданные(); + + Если ЭтоСправочник(МетаданныеОбъекта) Тогда + + Если НЕ МетаданныеОбъекта.Иерархический + ИЛИ МетаданныеОбъекта.ВидИерархии + <> Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда + + Возврат Ложь; + КонецЕсли; + + ИначеЕсли НЕ ЭтоПланВидовХарактеристик(МетаданныеОбъекта) Тогда + Возврат Ложь; + + ИначеЕсли НЕ МетаданныеОбъекта.Иерархический Тогда + Возврат Ложь; + КонецЕсли; + + Если Ссылка <> Объект Тогда + Возврат Объект.ЭтоГруппа; + КонецЕсли; + + Возврат ЗначениеРеквизитаОбъекта(Ссылка, "ЭтоГруппа") = Истина; + +КонецФункции + +// Возвращает ссылку, соответствующую объекту метаданных, для использования в базе данных. +// См. также ОбщегоНазначения.ИдентификаторыОбъектаМетаданных. +// +// Поддерживаются следующие объекты метаданных. +// - Подсистемы (требуется программировать переименование). +// - Роли (требуется программировать переименование). +// - ПланыОбмена. +// - Константы. +// - Справочники. +// - Документы. +// - ЖурналыДокументов. +// - Отчеты. +// - Обработки. +// - ПланыВидовХарактеристик. +// - ПланыСчетов. +// - ПланыВидовРасчета. +// - РегистрыСведений. +// - РегистрыНакопления. +// - РегистрыБухгалтерии. +// - РегистрыРасчета. +// - БизнесПроцессы. +// - Задачи. +// +// Параметры: +// ОписаниеОбъектаМетаданных - ОбъектМетаданных - объект метаданных конфигурации; +// - Тип - тип, который можно успешно использовать в функции Метаданные.НайтиПоТипу(); +// - Строка - полное имя объекта метаданных, которое можно успешно использовать +// в функции Метаданные.НайтиПоПолномуИмени(). +// Возвращаемое значение: +// СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений - ссылка. +// +// Пример: +// Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Ссылка)); +// Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); +// Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Справочник.Организации"); +// +Функция ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных) Экспорт + + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных); + +КонецФункции + +// Возвращает ссылки, соответствующие объектам метаданных, для использования в базе данных. +// См. также ОбщегоНазначения.ИдентификаторОбъектаМетаданных. +// +// Поддерживаются следующие объекты метаданных. +// - Подсистемы (требуется программировать переименование). +// - Роли (требуется программировать переименование). +// - ПланыОбмена. +// - Константы. +// - Справочники. +// - Документы. +// - ЖурналыДокументов. +// - Отчеты. +// - Обработки. +// - ПланыВидовХарактеристик. +// - ПланыСчетов. +// - ПланыВидовРасчета. +// - РегистрыСведений. +// - РегистрыНакопления. +// - РегистрыБухгалтерии. +// - РегистрыРасчета. +// - БизнесПроцессы. +// - Задачи. +// +// Параметры: +// ОписаниеОбъектовМетаданных - Массив - со значениями типа: +// * ОбъектМетаданных - объект метаданных конфигурации; +// * Строка - полное имя объекта метаданных, которое можно успешно использовать +// в функции Метаданные.НайтиПоПолномуИмени(); +// * Тип - тип, который можно успешно использовать в функции Метаданные.НайтиПоТипу(). +// +// Возвращаемое значение: +// Соответствие - со свойствами: +// * Ключ - Строка - полное имя указанного объекта метаданных. +// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных, +// СправочникСсылка.ИдентификаторыОбъектовРасширений - найденный идентификатор. +// Пример: +// ПолныеИмена = Новый Массив; +// ПолныеИмена.Добавить(Метаданные.Справочники.Валюты.ПолноеИмя()); +// ПолныеИмена.Добавить(Метаданные.РегистрыСведений.КурсыВалют.ПолноеИмя()); +// Идентификаторы = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ПолныеИмена); +// +Функция ИдентификаторыОбъектовМетаданных(ОписаниеОбъектовМетаданных) Экспорт + + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторыОбъектовМетаданных(ОписаниеОбъектовМетаданных); + +КонецФункции + +// Возвращает объект метаданных по переданному идентификатору. +// +// Параметры: +// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных, +// СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификатор +// объекта метаданных конфигурации или расширения конфигурации. +// +// ВызыватьИсключение - Булево - если Ложь, тогда в случае, когда объект метаданных +// не существует или недоступен, возвращает соответственно +// Null или Неопределено вместо вызова исключения. +// +// Возвращаемое значение: +// ОбъектМетаданных - объект метаданных, соответствующий идентификатору. +// +// Null - возвращается, когда ВызыватьИсключение = Ложь. Обозначает, что +// для указанного идентификатора объект метаданных не существует (идентификатор устарел). +// +// Неопределено - возвращается, когда ВызыватьИсключение = Ложь. Обозначает, +// что идентификатор действующий, но в текущем сеансе ОбъектМетаданных не может быть получен. +// Для расширений конфигурации это значит, что расширение установлено, но не подключено, +// либо потому что перезапуск еще не выполнен, либо при подключении произошла ошибка. +// Для конфигурации это значит, что в новом сеансе (новом динамическом поколении) объект +// метаданных имеется, а в текущем (старом) сеансе нет. +// +Функция ОбъектМетаданныхПоИдентификатору(Идентификатор, ВызыватьИсключение = Истина) Экспорт + + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ОбъектМетаданныхПоИдентификатору(Идентификатор, + ВызыватьИсключение); + +КонецФункции + +// Возвращает объекты метаданных по переданным идентификаторам. +// +// Параметры: +// Идентификаторы - Массив - со значениями: +// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных, +// СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификаторы +// объектов метаданных конфигурации или расширений конфигурации. +// +// ВызыватьИсключение - Булево - если Ложь, тогда в случае, когда объект метаданных +// не существует или недоступен, возвращает соответственно +// Null или Неопределено вместо вызова исключения. +// +// Возвращаемое значение: +// Соответствие - со свойствами: +// * Ключ - СправочникСсылка.ИдентификаторыОбъектовМетаданных, +// СправочникСсылка.ИдентификаторыОбъектовРасширений - переданный идентификатор. +// * Значение - ОбъектМетаданных - объект метаданных, соответствующий идентификатору. +// - Null - возвращается, когда ВызыватьИсключение = Ложь. Обозначает, что +// для указанного идентификатора объект метаданных не существует (идентификатор устарел). +// - Неопределено - возвращается, когда ВызыватьИсключение = Ложь. Обозначает, +// что идентификатор действующий, но в текущем сеансе ОбъектМетаданных не может быть получен. +// Для расширений конфигурации это значит, что расширение установлено, но не подключено, +// либо потому что перезапуск еще не выполнен, либо при подключении произошла ошибка. +// Для конфигурации это значит, что в новом сеансе (новом динамическом поколении) объект +// метаданных имеется, а в текущем (старом) сеансе нет. +// +Функция ОбъектыМетаданныхПоИдентификаторам(Идентификаторы, ВызыватьИсключение = Истина) Экспорт + + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам(Идентификаторы, + ВызыватьИсключение); + +КонецФункции + +// Определяет доступность объекта метаданных по функциональным опциям. +// +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных, Строка - проверяемый объект метаданных. +// +// Возвращаемое значение: +// Булево - Истина, если объект доступен. +// +Функция ОбъектМетаданныхДоступенПоФункциональнымОпциям(Знач ОбъектМетаданных) Экспорт + Если ОбъектМетаданных = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + Если ТипЗнч(ОбъектМетаданных) <> Тип("Строка") Тогда + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Иначе + ПолноеИмя = ОбъектМетаданных; + КонецЕсли; + Возврат СтандартныеПодсистемыПовтИсп.ДоступностьОбъектовПоОпциям().Получить(ПолноеИмя) <> Ложь; +КонецФункции + +// Добавляет описание переименования объекта метаданных при переходе на указанную версию конфигурации. +// Добавление выполняется в структуру Итог, которая передается в +// процедуру ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. +// +// Параметры: +// Итог - Структура - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. +// ВерсияИБ - Строка - версия конечной конфигурации, при переходе на которую нужно +// выполнить переименование, например, "2.1.2.14". +// СтароеПолноеИмя - Строка - старое полное имя объекта метаданных, которое нужно переименовать, +// например "Подсистема._ДемоПодсистемы". +// НовоеПолноеИмя - Строка - новое полное имя объекта метаданных, на которое нужно переименовать, +// например "Подсистема._ДемоСервисныеПодсистемы". +// ИдентификаторБиблиотеки - Строка - внутренний идентификатор библиотеки, к которой относится ВерсияИБ. +// Для основной конфигурации не требуется. +// Например, "СтандартныеПодсистемы" - как указано +// в ОбновлениеИнформационнойБазыБСП.ПриДобавленииПодсистемы. +// Пример: +// ОбщегоНазначения.ДобавитьПереименование(Итог, "2.1.2.14", +// "Подсистема._ДемоПодсистемы", +// "Подсистема._ДемоСервисныеПодсистемы"); +// +Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт + + Справочники.ИдентификаторыОбъектовМетаданных.ДобавитьПереименование(Итог, + ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки); + +КонецПроцедуры + +// Возвращает строковое представление типа. +// Для ссылочных типов возвращает в формате "СправочникСсылка.ИмяОбъекта" или "ДокументСсылка.ИмяОбъекта". +// Для остальных типов приводит тип к строке, например "Число". +// +// Параметры: +// Тип - тип - для которого надо получить представление. +// +// Возвращаемое значение: +// Строка - представление типа. +// +Функция СтроковоеПредставлениеТипа(Тип) Экспорт + + Представление = ""; + + Если ЭтоСсылка(Тип) Тогда + + ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); + ИмяОбъекта = СтрРазделить(ПолноеИмя, ".")[1]; + + Если Справочники.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "СправочникСсылка"; + + ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ДокументСсылка"; + + ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "БизнесПроцессСсылка"; + + ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ПланВидовХарактеристикСсылка"; + + ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ПланСчетовСсылка"; + + ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ПланВидовРасчетаСсылка"; + + ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ЗадачаСсылка"; + + ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ПланОбменаСсылка"; + + ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ПеречислениеСсылка"; + + КонецЕсли; + + Результат = ?(Представление = "", Представление, Представление + "." + ИмяОбъекта); + + Иначе + + Результат = Строка(Тип); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает таблицу значений с описанием требуемых свойств всех реквизитов объекта метаданных. +// Получает значения свойств стандартных реквизитов и пользовательских реквизитов (созданных в режиме конфигуратора). +// +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных - объект, для которого необходимо получить значение свойств реквизитов. +// Например: Метаданные.Документ.РеализацияТоваровИУслуг +// Свойства - Строка - свойства реквизитов, перечисленные через запятую, значение которых необходимо получить. +// Например: "Имя, Тип, Синоним, Подсказка". +// +// Возвращаемое значение: +// ТаблицаЗначений - описание требуемых свойств всех реквизитов объекта метаданных. +// +Функция ОписаниеСвойствОбъекта(ОбъектМетаданных, Свойства) Экспорт + + МассивСвойств = СтрРазделить(Свойства, ","); + + // Возвращаемое значение функции. + ТаблицаОписанияСвойствОбъекта = Новый ТаблицаЗначений; + + // Добавляем в таблицу поля согласно именам переданных свойств. + Для Каждого ИмяСвойства Из МассивСвойств Цикл + ТаблицаОписанияСвойствОбъекта.Колонки.Добавить(СокрЛП(ИмяСвойства)); + КонецЦикла; + + // Заполняем строку таблицы свойствами реквизитов объекта метаданных. + Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + ЗаполнитьЗначенияСвойств(ТаблицаОписанияСвойствОбъекта.Добавить(), Реквизит); + КонецЦикла; + + // Заполняем строку таблицы свойствами стандартных реквизитов объекта метаданных. + Для Каждого Реквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + ЗаполнитьЗначенияСвойств(ТаблицаОписанияСвойствОбъекта.Добавить(), Реквизит); + КонецЦикла; + + Возврат ТаблицаОписанияСвойствОбъекта; + +КонецФункции + +// Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов. +// +// Параметры: +// СтандартныеРеквизиты - ОписанияСтандартныхРеквизитов - тип и значение, описывающие коллекцию настроек различных +// стандартных реквизитов; +// ИмяРеквизита - Строка - реквизит, который необходимо проверить на принадлежность множеству стандартных +// реквизитов. +// +// Возвращаемое значение: +// Булево - Истина, если реквизит входит в подмножество стандартных реквизитов. +// +Функция ЭтоСтандартныйРеквизит(СтандартныеРеквизиты, ИмяРеквизита) Экспорт + + Для Каждого Реквизит Из СтандартныеРеквизиты Цикл + Если Реквизит.Имя = ИмяРеквизита Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; + +КонецФункции + +// Позволяет определить, есть ли среди реквизитов объекта реквизит с переданным именем. +// +// Параметры: +// ИмяРеквизита - Строка - имя реквизита; +// МетаданныеОбъекта - ОбъектМетаданных - объект, в котором требуется проверить наличие реквизита. +// +// Возвращаемое значение: +// Булево - Истина, если есть. +// +Функция ЕстьРеквизитОбъекта(ИмяРеквизита, МетаданныеОбъекта) Экспорт + + Возврат НЕ (МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита) = Неопределено); + +КонецФункции + +// Проверить, что описание типа состоит из единственного типа значения и +// совпадает с нужным типом. +// +// Параметры: +// ОписаниеТипа - ОписаниеТипов - проверяемая коллекция типов; +// ТипЗначения - Тип - проверяемый тип. +// +// Возвращаемое значение: +// Булево - Истина, если совпадает. +// +// Пример: +// Если ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево") Тогда +// // Выводим поле в виде флажка. +// КонецЕсли; +// +Функция ОписаниеТипаСостоитИзТипа(ОписаниеТипа, ТипЗначения) Экспорт + + Если ОписаниеТипа.Типы().Количество() = 1 + И ОписаниеТипа.Типы().Получить(0) = ТипЗначения Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Создает объект ОписаниеТипов, содержащий тип Строка. +// +// Параметры: +// ДлинаСтроки - Число - длина строки. +// +// Возвращаемое значение: +// ОписаниеТипов - описание типа Строка. +// +Функция ОписаниеТипаСтрока(ДлинаСтроки) Экспорт + + Массив = Новый Массив; + Массив.Добавить(Тип("Строка")); + + КвалификаторСтроки = Новый КвалификаторыСтроки(ДлинаСтроки, ДопустимаяДлина.Переменная); + + Возврат Новый ОписаниеТипов(Массив, , КвалификаторСтроки); + +КонецФункции + +// Создает объект ОписаниеТипов, содержащий тип Число. +// +// Параметры: +// Разрядность - Число - общее количество разрядов числа (количество разрядов +// целой части плюс количество разрядов дробной части). +// РазрядностьДробнойЧасти - Число - число разрядов дробной части. +// ЗнакЧисла - ДопустимыйЗнак - допустимый знак числа. +// +// Возвращаемое значение: +// ОписаниеТипов - описание типа Число. +Функция ОписаниеТипаЧисло(Разрядность, РазрядностьДробнойЧасти = 0, ЗнакЧисла = Неопределено) Экспорт + + Если ЗнакЧисла = Неопределено Тогда + КвалификаторЧисла = Новый КвалификаторыЧисла(Разрядность, РазрядностьДробнойЧасти); + Иначе + КвалификаторЧисла = Новый КвалификаторыЧисла(Разрядность, РазрядностьДробнойЧасти, ЗнакЧисла); + КонецЕсли; + + Возврат Новый ОписаниеТипов("Число", КвалификаторЧисла); + +КонецФункции + +// Создает объект ОписаниеТипов, содержащий тип Дата. +// +// Параметры: +// ЧастиДаты - ЧастиДаты - набор вариантов использования значений типа Дата. +// +// Возвращаемое значение: +// ОписаниеТипов - описание типа Дата. +Функция ОписаниеТипаДата(ЧастиДаты) Экспорт + + Массив = Новый Массив; + Массив.Добавить(Тип("Дата")); + + КвалификаторДаты = Новый КвалификаторыДаты(ЧастиДаты); + + Возврат Новый ОписаниеТипов(Массив, , , КвалификаторДаты); + +КонецФункции + +// Возвращает описание типа, включающего в себя все возможные ссылочные типы конфигурации. +// +// Возвращаемое значение: +// ОписаниеТипов - все ссылочные типы конфигурации. +// +Функция ОписаниеТипаВсеСсылки() Экспорт + + Возврат СтандартныеПодсистемыПовтИсп.ОписаниеТипаВсеСсылки(); + +КонецФункции + +#КонецОбласти + +#Область ХранилищеНастроек + //////////////////////////////////////////////////////////////////////////////// // Сохранение, чтение и удаление настроек из хранилищ. @@ -3963,7 +3900,7 @@ // Кроме того, возвращает указанное значение по умолчанию, если настройки не найдены. // Если нет права СохранениеДанныхПользователя, возвращается значение по умолчанию без ошибки. // -// В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно +// В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно: // - возвращаемая ссылка заменяется на указанное значение по умолчанию; // - из данных типа Массив ссылки удаляются; // - у данных типа Структура и Соответствие ключ не меняется, а значение устанавливается Неопределено; @@ -4096,92 +4033,199 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Функции для работы с настройкой рабочей даты. +#КонецОбласти -// Сохраняет настройку рабочей даты пользователя. +#Область СериализацияXML + +// Преобразует (сериализует) любое значение в XML-строку. +// Преобразованы в могут быть только те объекты, для которых в синтакс-помощнике указано, что они сериализуются. +// См. также ЗначениеИзСтрокиXML. // // Параметры: -// НоваяРабочаяДата - Дата - Дата, которую необходимо установить в качестве рабочей даты пользователя. -// ИмяПользователя - Строка - Имя пользователя, для которого устанавливается рабочая дата. -// Если не задано, то устанавливается для текущего пользователя. -// -Процедура УстановитьРабочуюДатуПользователя(НоваяРабочаяДата, ИмяПользователя = Неопределено) Экспорт - - КлючОбъекта = ВРег("РабочаяДата"); - - ХранилищеОбщихНастроекСохранить(КлючОбъекта, "", НоваяРабочаяДата, , ИмяПользователя); - -КонецПроцедуры - -// Возвращает значение настройки рабочей даты для пользователя. -// -// Параметры: -// ИмяПользователя - Строка - Имя пользователя, для которого запрашивается рабочая дата. -// Если не задано, то устанавливается для текущего пользователя. +// Значение - Произвольный - значение, которое необходимо сериализовать в XML-строку. // // Возвращаемое значение: -// Дата - Значение настройки рабочей даты пользователя или пустая дата, если настройка не задана. +// Строка - XML-строка. // -Функция РабочаяДатаПользователя(ИмяПользователя = Неопределено) Экспорт - - КлючОбъекта = ВРег("РабочаяДата"); - - Результат = ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, "", '0001-01-01', , ИмяПользователя); +Функция ЗначениеВСтрокуXML(Значение) Экспорт - Если ТипЗнч(Результат) <> Тип("Дата") Тогда - Результат = '0001-01-01'; + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное); + + Возврат ЗаписьXML.Закрыть(); +КонецФункции + +// Выполняет преобразование (десериализацию) XML-строки в значение. +// См. также ЗначениеВСтрокуXML. +// +// Параметры: +// СтрокаXML - Строка - XML-строка, с сериализованным объектом.. +// +// Возвращаемое значение: +// Произвольный - значение, полученное из переданной XML-строки. +// +Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(СтрокаXML); + + Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); +КонецФункции + +// Возвращает XML-представление XDTO-объекта. +// +// Параметры: +// ОбъектXDTO - ОбъектXDTO - объект, для которого требуется сформировать XML-представление. +// Фабрика - ФабрикаXDTO - фабрика, с использованием которой требуется формировать XML-представление. +// Если параметр не указан - будет использоваться глобальная фабрика XDTO. +// +// Возвращаемое значение: +// Строка - XML-представление XDTO-объекта. +// +Функция ОбъектXDTOВСтрокуXML(Знач ОбъектXDTO, Знач Фабрика = Неопределено) Экспорт + + ОбъектXDTO.Проверить(); + + Если Фабрика = Неопределено Тогда + Фабрика = ФабрикаXDTO; КонецЕсли; + Запись = Новый ЗаписьXML(); + Запись.УстановитьСтроку(); + Фабрика.ЗаписатьXML(Запись, ОбъектXDTO, , , , НазначениеТипаXML.Явное); + + Возврат Запись.Закрыть(); + +КонецФункции + +// Формирует XDTO-объект по XML-представлению. +// +// Параметры: +// СтрокаXML - Строка - XML-представление XDTO-объекта, +// Фабрика - ФабрикаXDTO - фабрика, с использованием которой требуется формировать XDTO-объект. +// Если параметр не указан - будет использоваться глобальная фабрика XDTO. +// +// Возвращаемое значение: +// ОбъектXDTO - XDTO-объект. +// +Функция ОбъектXDTOИзСтрокиXML(Знач СтрокаXML, Знач Фабрика = Неопределено) Экспорт + + Если Фабрика = Неопределено Тогда + Фабрика = ФабрикаXDTO; + КонецЕсли; + + Чтение = Новый ЧтениеXML(); + Чтение.УстановитьСтроку(СтрокаXML); + + Возврат Фабрика.ПрочитатьXML(Чтение); + +КонецФункции + +#КонецОбласти + +#Область ВебСервисы + +// Возвращает структуру параметров для функции СоздатьWSПрокси. +// +// Возвращаемое значение: +// Структура - коллекция параметров, см. СоздатьWSПрокси(). +// +Функция ПараметрыПодключенияWSПрокси() Экспорт + Результат = Новый Структура; + Результат.Вставить("АдресWSDL"); + Результат.Вставить("URIПространстваИмен"); + Результат.Вставить("ИмяСервиса"); + Результат.Вставить("ИмяТочкиПодключения", ""); + Результат.Вставить("ИмяПользователя"); + Результат.Вставить("Пароль"); + Результат.Вставить("Таймаут", 0); + Результат.Вставить("Местоположение"); + Результат.Вставить("ИспользоватьАутентификациюОС", Ложь); + Результат.Вставить("ДелатьКонтрольныйВызов", Ложь); + Результат.Вставить("ЗащищенноеСоединение", Неопределено); Возврат Результат; - КонецФункции -// Возвращает значение настройки рабочей даты для пользователя или текущей даты сеанса, -// если рабочая дата пользователя не задана. +// Конструктор объекта WSПрокси. +// +// Отличия от конструктора Новый WSПрокси: +// - встроенный конструктор WSОпределения; +// - кэширует файл WSDL; +// - не требуется указание ИнтернетПрокси (используется автоматически, если настроен); +// - умеет делать быструю проверку доступности сервиса. // // Параметры: -// ИмяПользователя - Строка - Имя пользователя, для которого запрашивается рабочая дата. -// Если не задано, то устанавливается для текущего пользователя. +// ПереданныеПараметры - Структура - настройки подключения (необходимо использовать функцию ПараметрыПодключенияWSПрокси): +// * АдресWSDL - Строка - месторасположение wsdl. +// * URIПространстваИмен - Строка - URI пространства имен web-сервиса. +// * ИмяСервиса - Строка - имя сервиса. +// * ИмяТочкиПодключения - Строка - (необязательный) если не задано, образуется как <ИмяСервиса>Soap. +// * ИмяПользователя - Строка - (необязательный) имя пользователя для входа на сервер. +// * Пароль - Строка - (необязательный) пароль пользователя. +// * Таймаут - Число - (необязательный) таймаут на операции выполняемые через полученное прокси. +// * Местоположение - Строка - (необязательный) фактический адрес сервиса. Используется, если адрес реального +// расположения сервиса отличается от адреса, который указан в WSDL-файле. +// * ИспользоватьАутентификациюОС - Булево - (необязательный) включает использование авторизации NTLM или Negotiate на +// сервере. +// * ДелатьКонтрольныйВызов - Булево - (необязательный) выполнять проверку доступности сервиса (требуется +// поддержка этой команды веб-сервисом). +// * ЗащищенноеСоединение - ЗащищенноеСоединениеOpenSSL, Неопределено - (необязательный) параметры защищенного +// соединения. // // Возвращаемое значение: -// Дата - Значение настройки рабочей даты пользователя или текущая дата сеанса, если настройка не задана. +// WSПрокси - объект WSПрокси. // -Функция ТекущаяДатаПользователя(ИмяПользователя = Неопределено) Экспорт - - Результат = РабочаяДатаПользователя(ИмяПользователя); +Функция СоздатьWSПрокси(ПереданныеПараметры) Экспорт - Если НЕ ЗначениеЗаполнено(Результат) Тогда - Результат = ТекущаяДатаСеанса(); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("СоздатьWSПрокси", "Параметры", ПереданныеПараметры, Тип("Структура"), + Новый Структура("АдресWSDL,URIПространстваИмен,ИмяСервиса", Тип("Строка"), Тип("Строка"), Тип("Строка"))); + + ПараметрыПодключения = ПараметрыПодключенияWSПрокси(); + ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ПереданныеПараметры); + + ДелатьКонтрольныйВызов = ПараметрыПодключения.ДелатьКонтрольныйВызов; + Таймаут = ПараметрыПодключения.Таймаут; + + Если ДелатьКонтрольныйВызов И Таймаут <> Неопределено И Таймаут > 20 Тогда + ПараметрыПодключения.Таймаут = 7; + WSПроксиPing = РегистрыСведений.КэшПрограммныхИнтерфейсов.ВнутренняяWSПрокси(ПараметрыПодключения); + Попытка + WSПроксиPing.Ping(); + Исключение + + АдресТочкиПодключения = WSПроксиPing.ТочкаПодключения.Местоположение; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось проверить доступность web-сервиса + |%1 + |по причине: + |%2'"), + ПараметрыПодключения.АдресWSDL, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + Если ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщийМодуль("ПолучениеФайловИзИнтернета"); + РезультатДиагностики = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(АдресТочкиПодключения); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + |Результат диагностики: + |%2'"), + РезультатДиагностики.ОписаниеОшибки); + КонецЕсли; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'WSПрокси'", КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + ВызватьИсключение ТекстОшибки; + КонецПопытки; + ПараметрыПодключения.Таймаут = Таймаут; КонецЕсли; - Возврат НачалоДня(Результат); + Возврат РегистрыСведений.КэшПрограммныхИнтерфейсов.ВнутренняяWSПрокси(ПараметрыПодключения); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Функции для работы с табличными документами. - -// Проверяет, умещаются ли переданные табличные документы на страницу при печати. -// -// Параметры: -// ТабДокумент - ТабличныйДокумент - табличный документ. -// ВыводимыеОбласти - Массив, ТабличныйДокумент - массив из проверяемых таблиц или табличный документ. -// РезультатПриОшибке - Булево - какой возвращать результат при возникновении ошибки. -// -// Возвращаемое значение: -// Булево - умещаются или нет переданные документы. -// -Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт - - Попытка - Возврат ТабДокумент.ПроверитьВывод(ВыводимыеОбласти); - Исключение - Возврат РезультатПриОшибке; - КонецПопытки; - -КонецФункции - ///////////////////////////////////////////////////////////////////////////////// // Версионирование программных интерфейсов. @@ -4252,11 +4296,11 @@ // // Параметры: // ВнешнееСоединение - COMОбъект - внешнее соединение, которое используется для работы с удаленной системой. -// ИмяИнтерфейса - Строка - имя запрашиваемого программного интерфейса, например, "СервисПередачиФайлов". +// ИмяИнтерфейса - Строка - имя запрашиваемого программного интерфейса, например "СервисПередачиФайлов". // // Возвращаемое значение: // ФиксированныйМассив - массив строк, каждая строка является представлением номера версии интерфейса. -// Например, "1.0.2.1". +// Например "1.0.2.1". // // Пример: // Версии = ОбщегоНазначения.ПолучитьВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение, "СервисПередачиФайлов"); @@ -4268,7 +4312,7 @@ СтрокаСообщения = НСтр("ru = 'Корреспондент не поддерживает версионирование программных интерфейсов. |Описание ошибки: %1'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение версий интерфейса'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение версий интерфейса'", КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , СтрокаСообщения); Возврат Новый ФиксированныйМассив(Новый Массив); @@ -4287,13 +4331,13 @@ Процедура УдалитьЗаписиКэшаВерсий(Знач ПодстрокаПоискаИдентификаторов) Экспорт НачатьТранзакцию(); - Попытка Блокировка = Новый БлокировкаДанных; Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов"); + Блокировка.Заблокировать(); ПодстрокаПоиска = СформироватьСтрокуДляПоискаВЗапросе(ПодстрокаПоискаИдентификаторов); - + ТекстЗапроса = "ВЫБРАТЬ | ТаблицаКэша.Идентификатор КАК Идентификатор, @@ -4319,14 +4363,16 @@ ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); ВызватьИсключение; - КонецПопытки; КонецПроцедуры +#КонецОбласти + +#Область БезопасноеХранилище + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с хранилищем паролей. @@ -4340,7 +4386,7 @@ // Параметры: // Владелец - ПланОбменаСсылка, СправочникСсылка, Строка - ссылка на объект информационной базы, // представляющий объект-владелец сохраняемого пароля или строка до 128 символов. -// Для объектов других типов в качестве Владельца рекомендуется использовать ссылку на +// Для объектов других типов в качестве владельца рекомендуется использовать ссылку на // элемент метаданных этого типа в справочнике ИдентификаторыОбъектовМетаданных // или ключ в виде строки с учетом имен подсистем. // Например, для БСП: @@ -4350,9 +4396,9 @@ // если нужно более 1 хранилища на подсистему БСП: // Владелец = "СтандартныеПодсистемы.УправлениеДоступом.<Уточнение>"; // -// Данные - Произвольный - Данные помещаемые в безопасное хранилище. Неопределенно - удаляет все данные. +// Данные - Произвольный - данные помещаемые в безопасное хранилище. Неопределенно - удаляет все данные. // Для удаления данных по ключу следует использовать процедуру УдалитьДанныеИзБезопасногоХранилища. -// Ключ - Строка - Ключ сохраняемых настроек, по умолчанию "Пароль". +// Ключ - Строка - ключ сохраняемых настроек, по умолчанию "Пароль". // Ключ должен соответствовать правилам, установленным для идентификаторов: // * Первым символом ключа должна быть буква или символ подчеркивания (_). // * Каждый из последующих символов может быть буквой, цифрой или символом подчеркивания (_). @@ -4375,6 +4421,12 @@ |параметр должен содержать ссылку; передано значение: %3 (тип %4).'"), "Владелец", "ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище", Владелец, ТипЗнч(Владелец))); + ОбщегоНазначенияКлиентСервер.Проверить(ТипЗнч(Ключ) = Тип("Строка"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |параметр должен содержать строку; передано значение: %3 (тип %4).'"), + "Ключ", "ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище", Ключ, ТипЗнч(Ключ))); + ЭтоОбластьДанных = РазделениеВключено() И ДоступноИспользованиеРазделенныхДанных(); Если ЭтоОбластьДанных Тогда БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанныхОбластейДанных.СоздатьМенеджерЗаписи(); @@ -4417,11 +4469,11 @@ // Параметры: // Владелец - ПланОбменаСсылка, СправочникСсылка, Строка - ссылка на объект информационной базы, // представляющий объект-владелец сохраняемого пароля или строка до 128 символов. -// Ключи - Строка - Содержит список имен сохраненных данных, указанных через запятую. +// Ключи - Строка - содержит список имен сохраненных данных, указанных через запятую. // ОбщиеДанные - Булево - Истина, если требуется в модели сервиса получить данные из общих данных в разделенном режиме. // // Возвращаемое значение: -// Произвольный, Структура, Неопределенно - Данные из безопасного хранилища. Если указан один ключ, +// Произвольный, Структура, Неопределенно - данные из безопасного хранилища. Если указан один ключ, // то возвращается его значение, иначе структура. // Если данные отсутствуют - Неопределенно. // @@ -4478,8 +4530,8 @@ // Параметры: // Владелец - ПланОбменаСсылка, СправочникСсылка, Строка - ссылка на объект информационной базы, // представляющий объект-владелец сохраняемого пароля или строка до 128 символов. -// Ключи - Строка - Содержит список имен удаляемых данных, указанных через запятую. -// Неопределенно - удаляет все данные. +// Ключи - Строка - содержит список имен удаляемых данных, указанных через запятую. +// Неопределено - удаляет все данные. // // Пример: // Процедура ПередУдалением(Отказ) @@ -4507,7 +4559,6 @@ БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанных.СоздатьМенеджерЗаписи(); КонецЕсли; - Отбор = Новый Структура("Владелец", Владелец); БезопасноеХранилищеДанных.Владелец = Владелец; БезопасноеХранилищеДанных.Прочитать(); Если ТипЗнч(БезопасноеХранилищеДанных.Данные) = Тип("ХранилищеЗначения") Тогда @@ -4532,71 +4583,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для вызова необязательных подсистем. +#КонецОбласти -// Возвращает Истина, если "функциональная" подсистема существует в конфигурации. -// Предназначена для реализации вызова необязательной подсистемы (условного вызова). -// -// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс". -// -// Параметры: -// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема -// без слов "Подсистема." и с учетом регистра символов. -// Например: "СтандартныеПодсистемы.ВариантыОтчетов". -// -// Пример: -// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда -// МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); -// МодульВариантыОтчетов.<Имя метода>(); -// КонецЕсли; -// -// Возвращаемое значение: -// Булево - Истина, если существует. -// -Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт - - ИменаПодсистем = СтандартныеПодсистемыПовтИсп.ИменаПодсистем(); - Возврат ИменаПодсистем.Получить(ПолноеИмяПодсистемы) <> Неопределено; - -КонецФункции - -// Возвращает ссылку на общий модуль или модуль менеджера по имени. -// -// Параметры: -// Имя - Строка - имя общего модуля. -// -// Возвращаемое значение: -// ОбщийМодуль, МодульМенеджераОбъекта - общий модуль. -// -// Пример: -// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда -// МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации"); -// МодульОбновлениеКонфигурации.<Имя метода>(); -// КонецЕсли; -// -// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда -// МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); -// МодульПолнотекстовыйПоискСервер.<Имя метода>(); -// КонецЕсли; -// -Функция ОбщийМодуль(Имя) Экспорт - - Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда - Модуль = Вычислить(Имя); // ВычислитьВБезопасномРежиме не требуется, т.к. проверка надежная. - ИначеЕсли СтрЧислоВхождений(Имя, ".") = 1 Тогда - Возврат СерверныйМодульМенеджера(Имя); - Иначе - Модуль = Неопределено; - КонецЕсли; - - Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); - КонецЕсли; - - Возврат Модуль; - -КонецФункции +#Область БуферОбмена //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с внутренним буфером обмена. @@ -4605,10 +4594,10 @@ // откуда их можно получить с помощью СтрокиИзБуфераОбмена. // // Параметры: -// ТабличнаяЧасть - ДанныеФормыКоллекция - Табличная часть, строки которой +// ТабличнаяЧасть - ДанныеФормыКоллекция - табличная часть, строки которой // необходимо поместить во внутренний буфер обмена. -// ВыделенныеСтроки - Массив - Массив идентификаторов выделенных строк. -// Источник - Строка - Произвольный строковый идентификатор, например, имя объекта, +// ВыделенныеСтроки - Массив - массив идентификаторов выделенных строк. +// Источник - Строка - произвольный строковый идентификатор, например, имя объекта, // строки табличной части которого помещаются во внутренний буфер обмена. // Процедура СкопироватьСтрокиВБуферОбмена(ТабличнаяЧасть, ВыделенныеСтроки, Источник = Неопределено) Экспорт @@ -4645,8 +4634,8 @@ // Помещает произвольные данные во внутренний буфер обмена, откуда их можно получить с помощью СтрокиИзБуфераОбмена. // // Параметры: -// Данные - Произвольный - Данные, которые необходимо поместить в внутренний буфер обмена. -// Источник - Строка - Произвольный строковый идентификатор, например, имя объекта, +// Данные - Произвольный - данные, которые необходимо поместить в внутренний буфер обмена. +// Источник - Строка - произвольный строковый идентификатор, например, имя объекта, // строки табличной части которого помещаются во внутренний буфер обмена. // Процедура СкопироватьВБуферОбмена(Данные, Источник = Неопределено) Экспорт @@ -4673,9 +4662,9 @@ // // Возвращаемое значение: // Структура - со свойствами: -// * Данные - Произвольный - Данные из внутреннего буфера обмена. +// * Данные - Произвольный - данные из внутреннего буфера обмена. // Например, ТаблицаЗначений при вызове СкопироватьСтрокиВБуферОбмена. -// * Источник - Строка - Объект, к которому относятся данные. +// * Источник - Строка - объект, к которому относятся данные. // Если при помещении во внутренний буфер не был указан, то Неопределено. // Функция СтрокиИзБуфераОбмена() Экспорт @@ -4698,8 +4687,8 @@ // Проверяет наличие сохраненных данных во внутренний буфере обмена. // // Параметры: -// Источник - Строка - Если передан, то проверяется наличие данных -// в внутреннем буфере обмена с этим ключем. +// Источник - Строка - если передан, то проверяется наличие данных +// в внутреннем буфере обмена с этим ключом. // По умолчанию - Неопределено. // Возвращаемое значение: // Булево - Истина, если пустой. @@ -4715,36 +4704,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с предупреждениями безопасности. +#КонецОбласти -// Проверяет наличие механизма платформы, предупреждающего об опасных действиях. -// -// Возвращаемое значение: -// Булево - если Истина, тогда работает механизм предупреждений безопасности. -// -Функция ЕстьЗащитаОтОпасныхДействий() Экспорт - - Возврат СтандартныеПодсистемыПовтИсп.ЕстьЗащитаОтОпасныхДействий(); - -КонецФункции - -// Возвращает описание защиты от опасных действий с отключенными предупреждениями. -// Функция не приводит к ошибке компиляции при отсутствии в платформе механизмов -// предупреждений безопасности. -// -// Возвращаемое значение: -// ОписаниеЗащитыОтОпасныхДействий - со свойством ПредупреждатьОбОпасныхДействиях = Ложь. -// -Функция ОписаниеЗащитыБезПредупреждений() Экспорт - - ИмяТипа = "ОписаниеЗащитыОтОпасныхДействий"; - ОписаниеЗащиты = Новый(ИмяТипа); - ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь; - - Возврат ОписаниеЗащиты; - -КонецФункции +#Область БезопасноеВыполнениеВнешнегоКода //////////////////////////////////////////////////////////////////////////////// // Функции для поддержки работы конфигурации с профилем безопасности, в котором @@ -4753,7 +4715,7 @@ // Выполнить экспортную процедуру по имени с уровнем привилегий конфигурации. // При включении профилей безопасности для вызова оператора Выполнить() используется -// переход в безопасный режим с профилем безопасности, используемом для информационной базы +// переход в безопасный режим с профилем безопасности, используемым для информационной базы // (если выше по стеку не был установлен другой безопасный режим). // // Параметры: @@ -4804,7 +4766,7 @@ // Выполнить экспортную процедуру объекта встроенного языка по имени. // При включении профилей безопасности для вызова оператора Выполнить() используется -// переход в безопасный режим с профилем безопасности, используемом для информационной базы +// переход в безопасный режим с профилем безопасности, используемым для информационной базы // (если выше по стеку не был установлен другой безопасный режим). // // Параметры: @@ -4818,6 +4780,9 @@ // Проверка имени метода на корректность. Попытка Тест = Новый Структура(ИмяМетода, ИмяМетода); + Если Тест = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Синтетический тест'"); + КонецЕсли; Исключение ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Некорректное значение параметра ИмяМетода (%1) в ОбщегоНазначения.ВыполнитьМетодОбъекта'"), ИмяМетода); @@ -4860,11 +4825,11 @@ // присутствующих в составе конфигурации. // // Параметры: -// Алгоритм - Строка - алгоритм на встроенном языке 1С:Предприятия. -// Параметры - Произвольный - контекст, который требуется для выполнения алгоритмы. +// Алгоритм - Строка - алгоритм на встроенном языке "1С:Предприятия". +// Параметры - Произвольный - контекст, который требуется для выполнения алгоритма. // В тексте алгоритма обращение к контексту должно происходить по имени "Параметры". // Например, выражение "Параметры.Значение1 = Параметры.Значение2" обращается к значениям -// "Значение1" и "Значение2" переданные в Параметры, как свойства. +// "Значение1" и "Значение2", переданным в Параметры, как свойства. // // Пример: // @@ -4939,8 +4904,242 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для подключения внешних компонент из макетов конфигурации. +// Возвращает описание защиты от опасных действий с отключенными предупреждениями. +// Функция не приводит к ошибке компиляции при отсутствии в платформе механизмов +// предупреждений безопасности. +// +// Возвращаемое значение: +// ОписаниеЗащитыОтОпасныхДействий - со свойством ПредупреждатьОбОпасныхДействиях = Ложь. +// +Функция ОписаниеЗащитыБезПредупреждений() Экспорт + + ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий; + ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь; + + Возврат ОписаниеЗащиты; + +КонецФункции + +#КонецОбласти + +#Область Запросы + +// Подготавливает строку для использования в качестве шаблона поиска в запросе. +// Экранирует служебные символы, если они есть в строке. +// +// Параметры: +// СтрокаПоиска - Строка - произвольная строка. +// +// Возвращаемое значение: +// Строка - строка подготовленная для поиска данных в запросе. +// +Функция СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска) Экспорт + + ИтоговаяСтрокаДляПоиска = СтрокаПоиска; + ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "~", "~~"); + ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "%", "~%"); + ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "_", "~_"); + ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "[", "~["); + ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "-", "~-"); + + Возврат ИтоговаяСтрокаДляПоиска; + +КонецФункции + +// Возвращает фрагмент текста запроса, отделяющего один запрос от другого. +// +// Возвращаемое значение: +// Строка - разделитель запросов. +// +Функция РазделительПакетаЗапросов() Экспорт + + Возврат " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |"; + +КонецФункции + +#КонецОбласти + +#Область Прочее + +// Выполняет действия перед продолжением выполнения обработчика регламентного задания. +// +// Например, проверяет возможность выполнения обработчика регламентного задания. +// Если администратор не заблокировал выполнение регламентных заданий до +// окончания обновления ИБ, тогда требуется прекратить выполнение обработчика. +// +// Параметры: +// РегламентноеЗадание - ОбъектМетаданных.РегламентноеЗадание - регламентное задание, +// из которого был вызван данный метод. Необходимо передавать для проверки доступности +// по функциональным опциям. +// +Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Справочники.ВерсииРасширений.ЗарегистрироватьИспользованиеВерсииРасширений(); + УстановитьПривилегированныйРежим(Ложь); + + Если РегистрыСведений.ПараметрыРаботыПрограммы.НеобходимоОбновление() Тогда + ВызватьИсключение + НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. + |Рекомендуется запрещать выполнение регламентных заданий на время обновления.'"); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если Не РазделениеВключено() + И ПланыОбмена.ГлавныйУзел() = Неопределено + И ЗначениеЗаполнено(Константы.ГлавныйУзел.Получить()) Тогда + + ВызватьИсключение + НСтр("ru = 'Вход в программу временно невозможен до восстановления связи с главным узлом. + |Рекомендуется запрещать выполнение регламентных заданий на время восстановления.'"); + КонецЕсли; + + Если РегламентноеЗадание <> Неопределено + И ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияСлужебный = ОбщийМодуль("РегламентныеЗаданияСлужебный"); + + ЗависимостиЗаданий = Неопределено; + МодульРегламентныеЗаданияСлужебный.ПроверитьВозможностьРаботыСВнешнимиРесурсами( + РегламентноеЗадание, ЗависимостиЗаданий); + + Доступно = МодульРегламентныеЗаданияСлужебный.РегламентноеЗаданиеДоступноПоФункциональнымОпциям( + РегламентноеЗадание, ЗависимостиЗаданий); + + Если Не Доступно Тогда + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Метаданные", РегламентноеЗадание)); + Для Каждого Задание Из Задания Цикл + РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор, + Новый Структура("Использование", Ложь)); + КонецЦикла; + ВызватьИсключение + НСтр("ru = 'Регламентное задание недоступно по функциональным опциям или + |не поддерживает работу в текущем режиме работы программы. + |Выполнение прервано. Задание отключено.'"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Переводит параметры сеанса в состояние "Не установлено". +// +// Параметры: +// ПараметрыДляОчистки - Строка - имена параметров сеанса для очистки, разделенные ",". +// Исключения - Строка - имена параметров сеанса не предназначенные для очистки, разделенные ",". +// +Процедура ОчиститьПараметрыСеанса(ПараметрыДляОчистки = "", Исключения = "") Экспорт + + МассивИсключений = СтрРазделить(Исключения, ","); + МассивПараметровДляОчистки = СтрРазделить(ПараметрыДляОчистки, ",", Ложь); + + Если МассивПараметровДляОчистки.Количество() = 0 Тогда + Для Каждого ПараметрСеанса Из Метаданные.ПараметрыСеанса Цикл + Если МассивИсключений.Найти(ПараметрСеанса.Имя) = Неопределено Тогда + МассивПараметровДляОчистки.Добавить(ПараметрСеанса.Имя); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Индекс = МассивПараметровДляОчистки.Найти("ПараметрыКлиентаНаСервере"); + Если Индекс <> Неопределено Тогда + МассивПараметровДляОчистки.Удалить(Индекс); + КонецЕсли; + + Индекс = МассивПараметровДляОчистки.Найти("УстановленныеРасширения"); + Если Индекс <> Неопределено Тогда + МассивПараметровДляОчистки.Удалить(Индекс); + КонецЕсли; + + ПараметрыСеанса.Очистить(МассивПараметровДляОчистки); + +КонецПроцедуры + +// Проверяет, умещаются ли переданные табличные документы на страницу при печати. +// +// Параметры: +// ТабДокумент - ТабличныйДокумент - табличный документ. +// ВыводимыеОбласти - Массив, ТабличныйДокумент - массив из проверяемых таблиц или табличный документ. +// РезультатПриОшибке - Булево - какой возвращать результат при возникновении ошибки. +// +// Возвращаемое значение: +// Булево - умещаются или нет переданные документы. +// +Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт + + Попытка + Возврат ТабДокумент.ПроверитьВывод(ВыводимыеОбласти); + Исключение + Возврат РезультатПриОшибке; + КонецПопытки; + +КонецФункции + +// Сохраняет персональные настройки пользователя, относящиеся к подсистеме БазоваяФункциональность. +// Для получения настроек предусмотрены следующие функции: +// - ОбщегоНазначенияКлиент.ПредлагатьУстановкуРасширенияРаботыСФайлами(), +// - СтандартныеПодсистемыСервер.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы(). +// +// Параметры: +// Настройки - Структура - коллекция настроек: +// * НапоминатьОбУстановкеРасширенияРаботыСФайлами - Булево - признак необходимости +// напоминания об установке расширения. +// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - запрашивать подтверждение по завершении работы. +// +Процедура СохранитьПерсональныеНастройки(Настройки) Экспорт + + Если Настройки.Свойство("НапоминатьОбУстановкеРасширенияРаботыСФайлами") Тогда + ПараметрыКлиентаНаСервере = ПараметрыСеанса.ПараметрыКлиентаНаСервере; + Если ПараметрыКлиентаНаСервере.Получить("ЭтоВебКлиент") Тогда + ИдентификаторКлиента = ПараметрыКлиентаНаСервере.Получить("ИдентификаторКлиента"); + ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", + ИдентификаторКлиента, Настройки.НапоминатьОбУстановкеРасширенияРаботыСФайлами); + КонецЕсли; + КонецЕсли; + + Если Настройки.Свойство("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы") Тогда + ХранилищеОбщихНастроекСохранить("ОбщиеНастройкиПользователя", + "ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", + Настройки.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы); + КонецЕсли; + +КонецПроцедуры + +// (См. ОбщегоНазначенияКлиентСервер.РаспределитьСуммуПропорциональноКоэффициентам) +// +Функция РаспределитьСуммуПропорциональноКоэффициентам(Знач РаспределяемаяСумма, КоэффициентыРаспределения, Знач Точность = 2) Экспорт + + Возврат ОбщегоНазначенияКлиентСервер.РаспределитьСуммуПропорциональноКоэффициентам(РаспределяемаяСумма, КоэффициентыРаспределения, Точность); + +КонецФункции + +// Процедура предназначена для заполнения реквизита формы типа ДанныеФормыДерево. +// +// Параметры: +// КоллекцияЭлементовДерева - ДанныеФормыДерево - реквизит, который нужно заполнить. +// ДеревоЗначений - ДеревоЗначений - данные для заполнения. +// +Процедура ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоЗначений) Экспорт + + Для Каждого Строка Из ДеревоЗначений.Строки Цикл + + ЭлементДерева = КоллекцияЭлементовДерева.Добавить(); + + ЗаполнитьЗначенияСвойств(ЭлементДерева, Строка); + + Если Строка.Строки.Количество() > 0 Тогда + + ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(ЭлементДерева.ПолучитьЭлементы(), Строка); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры // Подключает компоненту, выполненную по технологии Native API и COM. // Компонента должна храниться в макете конфигурации в виде ZIP-архива. @@ -5006,7 +5205,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Подключение внешней компоненты на сервере'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); @@ -5024,7 +5223,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Подключение внешней компоненты на сервере'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); @@ -5034,6 +5233,8 @@ КонецФункции +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.ДополнитьМассив, @@ -5183,9 +5384,6 @@ Возврат ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сохранение, чтение и удаление настроек из хранилищ. - // Устарела. Следует использовать функцию ХранилищеОбщихНастроекСохранить. Процедура ХранилищеОбщихНастроекСохранитьМассивИОбновитьПовторноИспользуемыеЗначения(МассивСтруктур) Экспорт @@ -5200,9 +5398,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции для работы в режиме разделения данных. - // Устарела. Следует использовать метод платформы УстановитьМонопольныйРежим(Истина). Процедура ЗаблокироватьИБ(Знач ПроверитьОтсутствиеДругихСеансов = Истина) Экспорт @@ -5341,9 +5536,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции для работы с прикладными типами и коллекциями значений. - // Устарела. Создает копию объекта XDTO. // // Параметры: @@ -5383,9 +5575,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Имена типов. - // Устарела. Возвращает значение для идентификации общего типа "Регистры сведений". // // Возвращаемое значение: @@ -5606,6 +5795,79 @@ КонецФункции +// Устарела. Следует использовать ФайловаяСистема.СоздатьВременныйКаталог +// Создает временный каталог. После окончания работы с временным каталогом его необходимо удалить +// с помощью ОбщегоНазначения.УдалитьВременныйКаталог. +// +// Параметры: +// Расширение - Строка - Расширение каталога, которое идентифицирует назначение временного каталога +// и подсистему, которая его создала. +// Рекомендуется указывать на английском языке. +// +// Возвращаемое значение: +// Строка - Полный путь к каталогу с разделителем пути. +// +Функция СоздатьВременныйКаталог(Знач Расширение = "") Экспорт + + Возврат ФайловаяСистема.СоздатьВременныйКаталог(Расширение); + +КонецФункции + +// Устарела. Следует использовать ФайловаяСистема.УдалитьВременныйКаталог +// Удаляет временный каталог вместе с его содержимым, если возможно. +// Если временный каталог не может быть удален (например, он занят каким-то процессом), +// то в журнал регистрации записывается соответствующее предупреждение, а процедура завершается. +// +// Для совместного использования с ОбщегоНазначения.СоздатьВременныйКаталог, +// после окончания работы с временным каталогом. +// +// Параметры: +// ПутьККаталогу - Строка - Полный путь к временному каталогу. +// +Процедура УдалитьВременныйКаталог(Знач ПутьККаталогу) Экспорт + + ФайловаяСистема.УдалитьВременныйКаталог(ПутьККаталогу); + +КонецПроцедуры + +// Устарела. Проверяет наличие механизма платформы, предупреждающего об опасных действиях. +// +// Возвращаемое значение: +// Булево - если Истина, тогда работает механизм предупреждений безопасности. +// +Функция ЕстьЗащитаОтОпасныхДействий() Экспорт + + Возврат Истина; + +КонецФункции + +// Устарела. Создает и возвращает экземпляр отчета или обработки по полному имени объекта метаданных. +// +// Параметры: +// ПолноеИмя - Строка - полное имя объекта метаданных. Пример: "Отчет.БизнесПроцессы". +// +// Возвращаемое значение: +// ОтчетОбъект, ОбработкаОбъект - экземпляр отчета или обработки. +// +Функция ОбъектПоПолномуИмени(ПолноеИмя) Экспорт + МассивСтрок = СтрРазделить(ПолноеИмя, "."); + + Если МассивСтрок.Количество() >= 2 Тогда + Вид = ВРег(МассивСтрок[0]); + Имя = МассивСтрок[1]; + Иначе + ВызватьИсключение СтрЗаменить(НСтр("ru = 'Некорректное полное имя отчета или обработки ""%1"".'"), "%1", ПолноеИмя); + КонецЕсли; + + Если Вид = "ОТЧЕТ" Тогда + Возврат Отчеты[Имя].Создать(); + ИначеЕсли Вид = "ОБРАБОТКА" Тогда + Возврат Обработки[Имя].Создать(); + Иначе + ВызватьИсключение СтрЗаменить(НСтр("ru = '""%1"" не является отчетом или обработкой.'"), "%1", ПолноеИмя); + КонецЕсли; +КонецФункции + #КонецОбласти #КонецОбласти @@ -5637,167 +5899,99 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Хранилища настроек. +#Область ДанныеВБазе -Процедура ХранилищеСохранить(МенеджерХранилища, КлючОбъекта, КлючНастроек, Настройки, - ОписаниеНастроек, ИмяПользователя, ОбновитьПовторноИспользуемыеЗначения) - - Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда - Возврат; - КонецЕсли; - - МенеджерХранилища.Сохранить(КлючОбъекта, КлючНастроек(КлючНастроек), Настройки, - ОписаниеНастроек, ИмяПользователя); - - Если ОбновитьПовторноИспользуемыеЗначения Тогда - ОбновитьПовторноИспользуемыеЗначения(); - КонецЕсли; - -КонецПроцедуры +#Область ЗначенияРеквизитов -Функция ХранилищеЗагрузить(МенеджерХранилища, КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию, - ОписаниеНастроек, ИмяПользователя) - - Результат = Неопределено; - - Если ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда - Результат = МенеджерХранилища.Загрузить(КлючОбъекта, КлючНастроек(КлючНастроек), - ОписаниеНастроек, ИмяПользователя); - КонецЕсли; - - Если Результат = Неопределено Тогда - Результат = ЗначениеПоУмолчанию; - Иначе - УстановитьПривилегированныйРежим(Истина); - Если УдалитьБитыеСсылки(Результат) Тогда - Результат = ЗначениеПоУмолчанию; - КонецЕсли; - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Удаляет битые ссылки из переменной. -// +// Выполняет поиск проверяемых выражений среди реквизитов объекта метаданных. +// // Параметры: -// СсылкаИлиКоллекция - ЛюбаяСсылка, Произвольный - Проверяемый объект или очищаемая коллекция. -// -// Возвращаемое значение: -// Булево - -// * Истина - СсылкаИлиКоллекция ссылочного типа и объект не найден в базе данных. -// * Ложь - Когда СсылкаИлиКоллекция не ссылочного типа или объект найден в базе данных. -// -Функция УдалитьБитыеСсылки(СсылкаИлиКоллекция) - - Тип = ТипЗнч(СсылкаИлиКоллекция); - - Если Тип = Тип("Неопределено") - Или Тип = Тип("Булево") - Или Тип = Тип("Строка") - Или Тип = Тип("Число") - Или Тип = Тип("Дата") Тогда // Оптимизация - часто используемые примитивные типы. - - Возврат Ложь; // Не ссылка. - - ИначеЕсли Тип = Тип("Массив") Тогда - - Количество = СсылкаИлиКоллекция.Количество(); - Для Номер = 1 По Количество Цикл - ОбратныйИндекс = Количество - Номер; - Значение = СсылкаИлиКоллекция[ОбратныйИндекс]; - Если УдалитьБитыеСсылки(Значение) Тогда - СсылкаИлиКоллекция.Удалить(ОбратныйИндекс); - КонецЕсли; - КонецЦикла; - - Возврат Ложь; // Не ссылка. - - ИначеЕсли Тип = Тип("Структура") - Или Тип = Тип("Соответствие") Тогда - - Для Каждого КлючИЗначение Из СсылкаИлиКоллекция Цикл - Значение = КлючИЗначение.Значение; - Если УдалитьБитыеСсылки(Значение) Тогда - СсылкаИлиКоллекция.Вставить(КлючИЗначение.Ключ, Неопределено); - КонецЕсли; - КонецЦикла; - - Возврат Ложь; // Не ссылка. - - ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Тип) - Или Справочники.ТипВсеСсылки().СодержитТип(Тип) - Или Перечисления.ТипВсеСсылки().СодержитТип(Тип) - Или ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) - Или ПланыСчетов.ТипВсеСсылки().СодержитТип(Тип) - Или ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Тип) - Или ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) - Или БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) - Или Задачи.ТипВсеСсылки().СодержитТип(Тип) Тогда - // Ссылочный тип, исключая ТочкаМаршрутаБизнесПроцессаСсылка. - - Если СсылкаИлиКоллекция.Пустая() Тогда - Возврат Ложь; // Ссылка пустая. - ИначеЕсли ЗначениеРеквизитаОбъекта(СсылкаИлиКоллекция, "Ссылка") = Неопределено Тогда - СсылкаИлиКоллекция = Неопределено; - Возврат Истина; // "Битая" ссылка. - Иначе - Возврат Ложь; // Объект найден. - КонецЕсли; - - Иначе - - Возврат Ложь; // Не ссылка. - - КонецЕсли; - -КонецФункции - -Процедура ХранилищеУдалить(МенеджерХранилища, КлючОбъекта, КлючНастроек, ИмяПользователя) - - Если ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда - МенеджерХранилища.Удалить(КлючОбъекта, КлючНастроек(КлючНастроек), ИмяПользователя); - КонецЕсли; - -КонецПроцедуры - -// Возвращает строку ключа настроек, не превышающую допустимую длину 128 символов. -// Если указанная строка превышает 128, тогда вместо символов сверх 96 символов -// добавляется их хеш-сумма по алгоритму MD5 размером 32 символа. -// -// Параметры: -// Строка - Строка - строка произвольной длины. -// +// ПолноеИмяОбъектаМетаданных - Строка - полное имя проверяемого объекта. +// ПроверяемыеВыражения - Массив - имена полей или проверяемые выражения объекта метаданных. +// // Возвращаемое значение: -// Строка - не более 128 символов. +// Структура - Результат проверки. +// * Ошибка - Булево - Найдена ошибка. +// * ОписаниеОшибки - Строка - Описание найденных ошибок. // -Функция КлючНастроек(Знач Строка) - Возврат СократитьСтрокуКонтрольнойСуммой(Строка, 128); +// Пример: +// +// Реквизиты = Новый Массив; +// Реквизиты.Добавить("Номер"); +// Реквизиты.Добавить("Валюта.НаименованиеПолное"); +// +// Результат = ОбщегоНазначения.НайтиОшибкуДоступностиРеквизитовОбъекта("Документ._ДемоЗаказПокупателя", Реквизиты); +// +// Если Результат.Ошибка Тогда +// ВызватьИсключение Результат.ОписаниеОшибки; +// КонецЕсли; +// +Функция НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, ПроверяемыеВыражения) + + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + + Если МетаданныеОбъекта = Неопределено Тогда + Возврат Новый Структура("Ошибка, ОписаниеОшибки", Истина, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка получения метаданных ""%1""'"), ПолноеИмяОбъектаМетаданных)); + КонецЕсли; + + // Разрешение вызова из безопасного режима внешней обработки или расширения. + // Информация о доступности полей источника схемы при проверке метаданных не является секретной. + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Схема = Новый СхемаЗапроса; + Пакет = Схема.ПакетЗапросов.Добавить(Тип("ЗапросВыбораСхемыЗапроса")); + Оператор = Пакет.Операторы.Получить(0); + + Источник = Оператор.Источники.Добавить(ПолноеИмяОбъектаМетаданных, "Таблица"); + ТекстОшибки = ""; + + Для Каждого ТекущееВыражение Из ПроверяемыеВыражения Цикл + + Если Не ПолеИсточникаСхемыЗапросаДоступно(Источник, ТекущееВыражение) Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '- Поле объекта ""%1"" не найдено'"), ТекущееВыражение); + КонецЕсли; + + КонецЦикла; + + Возврат Новый Структура("Ошибка, ОписаниеОшибки", Не ПустаяСтрока(ТекстОшибки), ТекстОшибки); + КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции по замене ссылок. - -Функция ОписаниеТипаКлючиЗаписей() +// Используется в НайтиОшибкуДоступностиРеквизитовОбъекта. +// Выполняет проверку доступности поля проверяемого выражения в источнике оператора схемы запроса. +// +Функция ПолеИсточникаСхемыЗапросаДоступно(ИсточникОператора, ПроверяемоеВыражение) - ДобавляемыеТипы = Новый Массив; - Для Каждого Мета Из Метаданные.РегистрыСведений Цикл - ДобавляемыеТипы.Добавить(Тип("РегистрСведенийКлючЗаписи." + Мета.Имя)); - КонецЦикла; - Для Каждого Мета Из Метаданные.РегистрыНакопления Цикл - ДобавляемыеТипы.Добавить(Тип("РегистрНакопленияКлючЗаписи." + Мета.Имя)); - КонецЦикла; - Для Каждого Мета Из Метаданные.РегистрыБухгалтерии Цикл - ДобавляемыеТипы.Добавить(Тип("РегистрБухгалтерииКлючЗаписи." + Мета.Имя)); - КонецЦикла; - Для Каждого Мета Из Метаданные.РегистрыРасчета Цикл - ДобавляемыеТипы.Добавить(Тип("РегистрРасчетаКлючЗаписи." + Мета.Имя)); + ЧастиИмениПоля = СтрРазделить(ПроверяемоеВыражение, "."); + ДоступныеПоля = ИсточникОператора.Источник.ДоступныеПоля; + + ТекущаяЧастьИмениПоля = 0; + Пока ТекущаяЧастьИмениПоля < ЧастиИмениПоля.Количество() Цикл + + ТекущееПоле = ДоступныеПоля.Найти(ЧастиИмениПоля.Получить(ТекущаяЧастьИмениПоля)); + + Если ТекущееПоле = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + // Инкрементация следующей части имени поля и соответствующего списка доступности полей. + ТекущаяЧастьИмениПоля = ТекущаяЧастьИмениПоля + 1; + ДоступныеПоля = ТекущееПоле.Поля; + КонецЦикла; - Возврат Новый ОписаниеТипов(ДобавляемыеТипы); + Возврат Истина; + КонецФункции +#КонецОбласти + +#Область ЗаменитьСсылки + Функция РазметитьМестаИспользования(Знач ПараметрыВыполнения, Знач Ссылка, Знач ЦелеваяСсылка, Знач ТаблицаПоиска) УстановитьПривилегированныйРежим(Истина); @@ -5848,6 +6042,147 @@ Возврат Результат; КонецФункции +Процедура ЗаменитьСсылкиКороткимиТранзакциями(Результат, Знач ПараметрыВыполнения, Знач Дубли, Знач ТаблицаПоиска) + + // Основной цикл обработки + ФильтрСсылок = Новый Структура("Ссылка, КлючЗамены"); + Для Каждого Дубль Из Дубли Цикл + БылиОшибки = Результат.ЕстьОшибки; + Результат.ЕстьОшибки = Ложь; + + ФильтрСсылок.Ссылка = Дубль; + + ФильтрСсылок.КлючЗамены = "Константа"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВКонстанте(Результат, МестоИспользования, ПараметрыВыполнения, Истина); + КонецЦикла; + + ФильтрСсылок.КлючЗамены = "Объект"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВОбъекте(Результат, МестоИспользования, ПараметрыВыполнения, Истина); + КонецЦикла; + + ФильтрСсылок.КлючЗамены = "КлючЗаписи"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Истина); + КонецЦикла; + + ФильтрСсылок.КлючЗамены = "Последовательность"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Истина); + КонецЦикла; + + ФильтрСсылок.КлючЗамены = "РегистрСведений"; + МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); + Для Каждого МестоИспользования Из МестаИспользования Цикл + ПроизвестиЗаменуВРегистреСведений(Результат, МестоИспользования, ПараметрыВыполнения, Истина); + КонецЦикла; + + Если Не Результат.ЕстьОшибки Тогда + ПараметрыВыполнения.УспешныеЗамены.Вставить(Дубль, ПараметрыВыполнения.ПарыЗамен[Дубль]); + КонецЕсли; + Результат.ЕстьОшибки = Результат.ЕстьОшибки Или БылиОшибки; + + КонецЦикла; + + // Окончательные действия + Если ПараметрыВыполнения.УдалятьНепосредственно Тогда + УдалитьСсылкиНемонопольно(Результат, Дубли, ПараметрыВыполнения, Истина); + + ИначеЕсли ПараметрыВыполнения.ПомечатьНаУдаление Тогда + УдалитьСсылкиНемонопольно(Результат, Дубли, ПараметрыВыполнения, Ложь); + + Иначе + // Поиск новых + ТаблицаПовторногоПоиска = МестаИспользования(Дубли); + ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаменитьСсылкуОднойТранзакцией(Результат, Знач Дубль, Знач ПараметрыВыполнения, Знач ТаблицаПоиска) + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + // 1. Блокирование всех мест использования. + СостояниеОперации = "ОшибкаБлокировки"; + Блокировка = Новый БлокировкаДанных; + + МестаИспользования = ТаблицаПоиска.НайтиСтроки(Новый Структура("Ссылка", Дубль)); + ЗаблокироватьМестаИспользования(ПараметрыВыполнения, Блокировка, МестаИспользования); + Блокировка.Заблокировать(); + СостояниеОперации = ""; + + УстановитьПривилегированныйРежим(Ложь); + + // 2. Замена везде до первой ошибки. + Результат.ЕстьОшибки = Ложь; + + Для Каждого МестоИспользования Из МестаИспользования Цикл + + Если МестоИспользования.КлючЗамены = "Константа" Тогда + ПроизвестиЗаменуВКонстанте(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); + ИначеЕсли МестоИспользования.КлючЗамены = "Объект" Тогда + ПроизвестиЗаменуВОбъекте(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); + ИначеЕсли МестоИспользования.КлючЗамены = "Последовательность" Тогда + ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); + ИначеЕсли МестоИспользования.КлючЗамены = "КлючЗаписи" Тогда + ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); + ИначеЕсли МестоИспользования.КлючЗамены = "РегистрСведений" Тогда + ПроизвестиЗаменуВРегистреСведений(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); + КонецЕсли; + + Если Результат.ЕстьОшибки Тогда + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + + КонецЦикла; + + // 3. Удаление + ПроизводимыеЗамены = Новый Массив; + ПроизводимыеЗамены.Добавить(Дубль); + + Если ПараметрыВыполнения.УдалятьНепосредственно Тогда + УдалитьСсылкиНемонопольно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Истина); + + ИначеЕсли ПараметрыВыполнения.ПомечатьНаУдаление Тогда + УдалитьСсылкиНемонопольно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Ложь); + + Иначе + // Поиск новых + ТаблицаПовторногоПоиска = МестаИспользования(ПроизводимыеЗамены); + ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска); + КонецЕсли; + + Если Результат.ЕстьОшибки Тогда + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + + ПараметрыВыполнения.УспешныеЗамены.Вставить(Дубль, ПараметрыВыполнения.ПарыЗамен[Дубль]); + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + Если СостояниеОперации = "ОшибкаБлокировки" Тогда + ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось заблокировать все места использования %1:'") + + Символы.ПС + ПредставлениеОшибки, Дубль); + ЗарегистрироватьОшибкуЗамены(Результат, Дубль, + ОписаниеОшибкиЗамены("ОшибкаБлокировки", Неопределено, Неопределено, Ошибка)); + Иначе + ВызватьИсключение; + КонецЕсли; + КонецПопытки + +КонецПроцедуры + Процедура ПроизвестиЗаменуВКонстанте(Результат, Знач МестоИспользования, Знач ПараметрыЗаписи, Знач ВнутренняяТранзакция = Истина) УстановитьПривилегированныйРежим(Истина); @@ -5989,7 +6324,7 @@ Попытка Если ПараметрыВыполнения.ВключатьБизнесЛогику Тогда // Первая запись без контроля, чтобы устранить циклические ссылки. - НовыеПараметрыВыполнения = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыВыполнения); + НовыеПараметрыВыполнения = СкопироватьРекурсивно(ПараметрыВыполнения); НовыеПараметрыВыполнения.ВключатьБизнесЛогику = Ложь; Для Каждого КлючЗначение Из ОбъектыЗаписи Цикл ЗаписатьОбъект(КлючЗначение.Ключ, НовыеПараметрыВыполнения); @@ -6599,82 +6934,74 @@ КонецПроцедуры -Функция ОписаниеИзмеренийНабора(Знач МетаданныеРегистра, КэшИзмеренийРегистров) +Процедура ЗаблокироватьМестаИспользования(ПараметрыВыполнения, Блокировка, МестаИспользования) - ОписаниеИзмерений = КэшИзмеренийРегистров[МетаданныеРегистра]; - Если ОписаниеИзмерений <> Неопределено Тогда - Возврат ОписаниеИзмерений; - КонецЕсли; - - // Период и регистратор, если есть. - ОписаниеИзмерений = Новый Структура; - - ДанныеИзмерения = Новый Структура("Ведущее, Представление, Формат, Тип", Ложь); - - Если Метаданные.РегистрыСведений.Содержит(МетаданныеРегистра) Тогда - // Возможно есть период - МетаПериод = МетаданныеРегистра.ПериодичностьРегистраСведений; - Периодичность = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений; + Для Каждого МестоИспользования Из МестаИспользования Цикл - Если МетаПериод = Периодичность.ПозицияРегистратора Тогда - ДанныеИзмерения.Тип = Документы.ТипВсеСсылки(); - ДанныеИзмерения.Представление = НСтр("ru='Регистратор'"); - ДанныеИзмерения.Ведущее = Истина; - ОписаниеИзмерений.Вставить("Регистратор", ДанныеИзмерения); - - ИначеЕсли МетаПериод = Периодичность.Год Тогда - ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); - ДанныеИзмерения.Представление = НСтр("ru='Период'"); - ДанныеИзмерения.Формат = "ДФ='yyyy ""г.""'; ДП='Дата не задана'"; - ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); - - ИначеЕсли МетаПериод = Периодичность.День Тогда - ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); - ДанныеИзмерения.Представление = НСтр("ru='Период'"); - ДанныеИзмерения.Формат = "ДЛФ=D; ДП='Дата не задана'"; - ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); - - ИначеЕсли МетаПериод = Периодичность.Квартал Тогда - ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); - ДанныеИзмерения.Представление = НСтр("ru='Период'"); - ДанныеИзмерения.Формат = "ДФ='к ""квартал ""yyyy ""г.""'; ДП='Дата не задана'"; - ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); - - ИначеЕсли МетаПериод = Периодичность.Месяц Тогда - ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); - ДанныеИзмерения.Представление = НСтр("ru='Период'"); - ДанныеИзмерения.Формат = "ДФ='ММММ yyyy ""г.""'; ДП='Дата не задана'"; - ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); - - ИначеЕсли МетаПериод = Периодичность.Секунда Тогда - ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); - ДанныеИзмерения.Представление = НСтр("ru='Период'"); - ДанныеИзмерения.Формат = "ДЛФ=DT; ДП='Дата не задана'"; - ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); - - КонецЕсли; + ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования); - Иначе - ДанныеИзмерения.Тип = Документы.ТипВсеСсылки(); - ДанныеИзмерения.Представление = НСтр("ru='Регистратор'"); - ДанныеИзмерения.Ведущее = Истина; - ОписаниеИзмерений.Вставить("Регистратор", ДанныеИзмерения); - - КонецЕсли; - - // Все измерения - Для Каждого МетаИзмерение Из МетаданныеРегистра.Измерения Цикл - ДанныеИзмерения = Новый Структура("Ведущее, Представление, Формат, Тип"); - ДанныеИзмерения.Тип = МетаИзмерение.Тип; - ДанныеИзмерения.Представление = МетаИзмерение.Представление(); - ДанныеИзмерения.Ведущее = МетаИзмерение.Ведущее; - ОписаниеИзмерений.Вставить(МетаИзмерение.Имя, ДанныеИзмерения); КонецЦикла; - КэшИзмеренийРегистров[МетаданныеРегистра] = ОписаниеИзмерений; - Возврат ОписаниеИзмерений; +КонецПроцедуры + +Процедура ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования) -КонецФункции + Если МестоИспользования.КлючЗамены = "Константа" Тогда + + Блокировка.Добавить(МестоИспользования.Метаданные.ПолноеИмя()); + + ИначеЕсли МестоИспользования.КлючЗамены = "Объект" Тогда + + СсылкаОбъекта = МестоИспользования.Данные; + МетаданныеОбъекта = МестоИспользования.Метаданные; + + // Сам объект. + Блокировка.Добавить(МетаданныеОбъекта.ПолноеИмя()).УстановитьЗначение("Ссылка", СсылкаОбъекта); + + // Движения по регистратору. + ОписаниеДвижений = ОписаниеДвижений(МетаданныеОбъекта); + Для Каждого Элемент Из ОписаниеДвижений Цикл + Блокировка.Добавить(Элемент.ПространствоБлокировки + ".НаборЗаписей").УстановитьЗначение("Регистратор", СсылкаОбъекта); + КонецЦикла; + + // Последовательности. + ОписаниеПоследовательностей = ОписаниеПоследовательностей(МетаданныеОбъекта); + Для Каждого Элемент Из ОписаниеПоследовательностей Цикл + Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение("Регистратор", СсылкаОбъекта); + КонецЦикла; + + ИначеЕсли МестоИспользования.КлючЗамены = "Последовательность" Тогда + + СсылкаОбъекта = МестоИспользования.Данные; + МетаданныеОбъекта = МестоИспользования.Метаданные; + + ОписаниеПоследовательностей = ОписаниеПоследовательностей(МетаданныеОбъекта); + Для Каждого Элемент Из ОписаниеПоследовательностей Цикл + Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение("Регистратор", СсылкаОбъекта); + КонецЦикла; + + ИначеЕсли МестоИспользования.КлючЗамены = "КлючЗаписи" + Или МестоИспользования.КлючЗамены = "РегистрСведений" Тогда + + Информация = ИнформацияОТипе(МестоИспользования.Метаданные, ПараметрыВыполнения); + ТипДубля = МестоИспользования.ТипСсылки; + ТипОригинала = ТипЗнч(МестоИспользования.ЦелеваяСсылка); + + Для Каждого КлючЗначение Из Информация.Измерения Цикл + ТипИзмерения = КлючЗначение.Значение.Тип; + Если ТипИзмерения.СодержитТип(ТипДубля) Тогда + БлокировкаПоИзмерению = Блокировка.Добавить(Информация.ПолноеИмя); + БлокировкаПоИзмерению.УстановитьЗначение(КлючЗначение.Ключ, МестоИспользования.Ссылка); + КонецЕсли; + Если ТипИзмерения.СодержитТип(ТипОригинала) Тогда + БлокировкаПоИзмерению = Блокировка.Добавить(Информация.ПолноеИмя); + БлокировкаПоИзмерению.УстановитьЗначение(КлючЗначение.Ключ, МестоИспользования.ЦелеваяСсылка); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры Функция ОписаниеДвижений(Знач Мета) // можно закэшировать по Мета @@ -6937,14 +7264,6 @@ КонецЕсли; КонецПроцедуры -Процедура СообщитьОтложенныеСообщения(Знач Сообщения) - - Для Каждого Сообщение Из Сообщения Цикл - Сообщение.Сообщить(); - КонецЦикла; - -КонецПроцедуры - Процедура ОбработатьОбъектСПерехватомСообщений(Знач Объект, Знач Действие, Знач РежимЗаписи, Знач ПараметрыЗаписи) // Текущие сообщения до исключения запоминаем. @@ -7009,6 +7328,14 @@ КонецПроцедуры +Процедура СообщитьОтложенныеСообщения(Знач Сообщения) + + Для Каждого Сообщение Из Сообщения Цикл + Сообщение.Сообщить(); + КонецЦикла; + +КонецПроцедуры + Процедура ЗаписатьОбъект(Знач Объект, Знач ПараметрыЗаписи) МетаданныеОбъекта = Объект.Метаданные(); @@ -7053,219 +7380,11 @@ КонецПроцедуры Функция СобытиеЖурналаРегистрацииЗаменыСсылок() - Возврат НСтр("ru='Поиск и удаление ссылок'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + + Возврат НСтр("ru='Поиск и удаление ссылок'", КодОсновногоЯзыка()); + КонецФункции -Процедура ЗаменитьСсылкиКороткимиТранзакциями(Результат, Знач ПараметрыВыполнения, Знач Дубли, Знач ТаблицаПоиска) - - // Основной цикл обработки - ФильтрСсылок = Новый Структура("Ссылка, КлючЗамены"); - Для Каждого Дубль Из Дубли Цикл - БылиОшибки = Результат.ЕстьОшибки; - Результат.ЕстьОшибки = Ложь; - - ФильтрСсылок.Ссылка = Дубль; - - ФильтрСсылок.КлючЗамены = "Константа"; - МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); - Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВКонстанте(Результат, МестоИспользования, ПараметрыВыполнения, Истина); - КонецЦикла; - - ФильтрСсылок.КлючЗамены = "Объект"; - МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); - Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВОбъекте(Результат, МестоИспользования, ПараметрыВыполнения, Истина); - КонецЦикла; - - ФильтрСсылок.КлючЗамены = "КлючЗаписи"; - МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); - Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Истина); - КонецЦикла; - - ФильтрСсылок.КлючЗамены = "Последовательность"; - МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); - Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Истина); - КонецЦикла; - - ФильтрСсылок.КлючЗамены = "РегистрСведений"; - МестаИспользования = ТаблицаПоиска.НайтиСтроки(ФильтрСсылок); - Для Каждого МестоИспользования Из МестаИспользования Цикл - ПроизвестиЗаменуВРегистреСведений(Результат, МестоИспользования, ПараметрыВыполнения, Истина); - КонецЦикла; - - Если Не Результат.ЕстьОшибки Тогда - ПараметрыВыполнения.УспешныеЗамены.Вставить(Дубль, ПараметрыВыполнения.ПарыЗамен[Дубль]); - КонецЕсли; - Результат.ЕстьОшибки = Результат.ЕстьОшибки Или БылиОшибки; - - КонецЦикла; - - // Окончательные действия - Если ПараметрыВыполнения.УдалятьНепосредственно Тогда - УдалитьСсылкиНемонопольно(Результат, Дубли, ПараметрыВыполнения, Истина); - - ИначеЕсли ПараметрыВыполнения.ПомечатьНаУдаление Тогда - УдалитьСсылкиНемонопольно(Результат, Дубли, ПараметрыВыполнения, Ложь); - - Иначе - // Поиск новых - ТаблицаПовторногоПоиска = МестаИспользования(Дубли); - ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска); - КонецЕсли; - -КонецПроцедуры - -Процедура ЗаменитьСсылкуОднойТранзакцией(Результат, Знач Дубль, Знач ПараметрыВыполнения, Знач ТаблицаПоиска) - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - // 1. Блокирование всех мест использования. - СостояниеОперации = "ОшибкаБлокировки"; - Блокировка = Новый БлокировкаДанных; - - МестаИспользования = ТаблицаПоиска.НайтиСтроки(Новый Структура("Ссылка", Дубль)); - ЗаблокироватьМестаИспользования(ПараметрыВыполнения, Блокировка, МестаИспользования); - Блокировка.Заблокировать(); - СостояниеОперации = ""; - - УстановитьПривилегированныйРежим(Ложь); - - // 2. Замена везде до первой ошибки. - Результат.ЕстьОшибки = Ложь; - - Для Каждого МестоИспользования Из МестаИспользования Цикл - - Если МестоИспользования.КлючЗамены = "Константа" Тогда - ПроизвестиЗаменуВКонстанте(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); - ИначеЕсли МестоИспользования.КлючЗамены = "Объект" Тогда - ПроизвестиЗаменуВОбъекте(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); - ИначеЕсли МестоИспользования.КлючЗамены = "Последовательность" Тогда - ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); - ИначеЕсли МестоИспользования.КлючЗамены = "КлючЗаписи" Тогда - ПроизвестиЗаменуВНаборе(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); - ИначеЕсли МестоИспользования.КлючЗамены = "РегистрСведений" Тогда - ПроизвестиЗаменуВРегистреСведений(Результат, МестоИспользования, ПараметрыВыполнения, Ложь); - КонецЕсли; - - Если Результат.ЕстьОшибки Тогда - ОтменитьТранзакцию(); - Возврат; - КонецЕсли; - - КонецЦикла; - - // 3. Удаление - ПроизводимыеЗамены = Новый Массив; - ПроизводимыеЗамены.Добавить(Дубль); - - Если ПараметрыВыполнения.УдалятьНепосредственно Тогда - УдалитьСсылкиНемонопольно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Истина); - - ИначеЕсли ПараметрыВыполнения.ПомечатьНаУдаление Тогда - УдалитьСсылкиНемонопольно(Результат, ПроизводимыеЗамены, ПараметрыВыполнения, Ложь); - - Иначе - // Поиск новых - ТаблицаПовторногоПоиска = МестаИспользования(ПроизводимыеЗамены); - ДобавитьРезультатыЗаменыИзмененныхОбъектов(Результат, ТаблицаПовторногоПоиска); - КонецЕсли; - - Если Результат.ЕстьОшибки Тогда - ОтменитьТранзакцию(); - Возврат; - КонецЕсли; - - ПараметрыВыполнения.УспешныеЗамены.Вставить(Дубль, ПараметрыВыполнения.ПарыЗамен[Дубль]); - ЗафиксироватьТранзакцию(); - - Исключение - ОтменитьТранзакцию(); - Если СостояниеОперации = "ОшибкаБлокировки" Тогда - ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось заблокировать все места использования %1:'") - + Символы.ПС + ПредставлениеОшибки, Дубль); - ЗарегистрироватьОшибкуЗамены(Результат, Дубль, - ОписаниеОшибкиЗамены("ОшибкаБлокировки", Неопределено, Неопределено, Ошибка)); - Иначе - ВызватьИсключение; - КонецЕсли; - КонецПопытки - -КонецПроцедуры - -Процедура ЗаблокироватьМестаИспользования(ПараметрыВыполнения, Блокировка, МестаИспользования) - - Для Каждого МестоИспользования Из МестаИспользования Цикл - - ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования); - - КонецЦикла; - -КонецПроцедуры - -Процедура ЗаблокироватьМестоИспользования(ПараметрыВыполнения, Блокировка, МестоИспользования) - - Если МестоИспользования.КлючЗамены = "Константа" Тогда - - Блокировка.Добавить(МестоИспользования.Метаданные.ПолноеИмя()); - - ИначеЕсли МестоИспользования.КлючЗамены = "Объект" Тогда - - СсылкаОбъекта = МестоИспользования.Данные; - МетаданныеОбъекта = МестоИспользования.Метаданные; - - // Сам объект. - Блокировка.Добавить(МетаданныеОбъекта.ПолноеИмя()).УстановитьЗначение("Ссылка", СсылкаОбъекта); - - // Движения по регистратору. - ОписаниеДвижений = ОписаниеДвижений(МетаданныеОбъекта); - Для Каждого Элемент Из ОписаниеДвижений Цикл - Блокировка.Добавить(Элемент.ПространствоБлокировки + ".НаборЗаписей").УстановитьЗначение("Регистратор", СсылкаОбъекта); - КонецЦикла; - - // Последовательности. - ОписаниеПоследовательностей = ОписаниеПоследовательностей(МетаданныеОбъекта); - Для Каждого Элемент Из ОписаниеПоследовательностей Цикл - Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение("Регистратор", СсылкаОбъекта); - КонецЦикла; - - ИначеЕсли МестоИспользования.КлючЗамены = "Последовательность" Тогда - - СсылкаОбъекта = МестоИспользования.Данные; - МетаданныеОбъекта = МестоИспользования.Метаданные; - - ОписаниеПоследовательностей = ОписаниеПоследовательностей(МетаданныеОбъекта); - Для Каждого Элемент Из ОписаниеПоследовательностей Цикл - Блокировка.Добавить(Элемент.ПространствоБлокировки).УстановитьЗначение("Регистратор", СсылкаОбъекта); - КонецЦикла; - - ИначеЕсли МестоИспользования.КлючЗамены = "КлючЗаписи" - Или МестоИспользования.КлючЗамены = "РегистрСведений" Тогда - - Информация = ИнформацияОТипе(МестоИспользования.Метаданные, ПараметрыВыполнения); - ТипДубля = МестоИспользования.ТипСсылки; - ТипОригинала = ТипЗнч(МестоИспользования.ЦелеваяСсылка); - - Для Каждого КлючЗначение Из Информация.Измерения Цикл - ТипИзмерения = КлючЗначение.Значение.Тип; - Если ТипИзмерения.СодержитТип(ТипДубля) Тогда - БлокировкаПоИзмерению = Блокировка.Добавить(Информация.ПолноеИмя); - БлокировкаПоИзмерению.УстановитьЗначение(КлючЗначение.Ключ, МестоИспользования.Ссылка); - КонецЕсли; - Если ТипИзмерения.СодержитТип(ТипОригинала) Тогда - БлокировкаПоИзмерению = Блокировка.Добавить(Информация.ПолноеИмя); - БлокировкаПоИзмерению.УстановитьЗначение(КлючЗначение.Ключ, МестоИспользования.ЦелеваяСсылка); - КонецЕсли; - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - Процедура ЗарегистрироватьОшибкуЗамены(Результат, Знач Ссылка, Знач ОписаниеОшибки) Результат.ЕстьОшибки = Истина; @@ -7510,76 +7629,174 @@ Возврат Информация; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. - -Функция ДанныеИзБезопасногоХранилища(Владелец, ИмяБезопасноеХранилищеДанных, Ключ) +Функция ЭтоСлужебныеДанные(МестоИспользования, ИсключенияПоискаСсылок) - Результат = Новый Структура(Ключ); + ИсключениеПоиска = ИсключенияПоискаСсылок[МестоИспользования.Метаданные]; - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | БезопасноеХранилищеДанных.Данные КАК Данные - |ИЗ - | РегистрСведений." + ИмяБезопасноеХранилищеДанных + " КАК БезопасноеХранилищеДанных - |ГДЕ - | БезопасноеХранилищеДанных.Владелец = &Владелец"; + // Данные может быть как ссылкой так и ключом записи регистра. - Запрос.УстановитьПараметр("Владелец", Владелец); - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - Если ЗначениеЗаполнено(РезультатЗапроса.Данные) Тогда - СохраненныеДанные = РезультатЗапроса.Данные.Получить(); - Если ЗначениеЗаполнено(СохраненныеДанные) Тогда - ЗаполнитьЗначенияСвойств(Результат, СохраненныеДанные); + Если ИсключениеПоиска = Неопределено Тогда + Возврат (МестоИспользования.Ссылка = МестоИспользования.Данные); // Ссылку саму на себя исключаем. + ИначеЕсли ИсключениеПоиска = "*" Тогда + Возврат Истина; // Если указано исключить все - считаем все исключением. + Иначе + Для Каждого ПутьКРеквизиту Из ИсключениеПоиска Цикл + // Если указаны исключения. + + // Относительный путь к реквизиту: + // "<ИмяРеквизитаИлиТЧ>[.<ИмяРеквизитаТЧ>]". + + Если ЭтоСсылка(ТипЗнч(МестоИспользования.Данные)) Тогда + + // Проверка есть ли по исключаемому пути в указанных данных проверяемая ссылка + + ПолноеИмяОбъектаМетаданных = МестоИспользования.Метаданные.ПолноеИмя(); + + ТекстЗапроса = + "ВЫБРАТЬ + | ИСТИНА + |ИЗ + | &ПолноеИмяОбъектаМетаданных КАК Таблица + |ГДЕ + | &ПутьКРеквизиту = &ПроверяемаяСсылка + | И Таблица.Ссылка = &Ссылка"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПутьКРеквизиту", ПутьКРеквизиту); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ПроверяемаяСсылка", МестоИспользования.Ссылка); + Запрос.УстановитьПараметр("Ссылка", МестоИспользования.Данные); + + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + Возврат Истина; + КонецЕсли; + + Иначе + + БуферДанных = Новый Структура(ПутьКРеквизиту); + ЗаполнитьЗначенияСвойств(БуферДанных, МестоИспользования.Данные); + Если БуферДанных[ПутьКРеквизиту] = МестоИспользования.Ссылка Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; - КонецЕсли; + + КонецЦикла; КонецЕсли; - Возврат Результат; + Возврат Ложь; + КонецФункции -Процедура ПроверкаФиксированностиДанных(Данные, ДанныеВЗначенииФиксированныхТипов = Ложь) +#КонецОбласти + +#Область МестаИспользования + +Функция ОписаниеТипаКлючиЗаписей() - ТипДанных = ТипЗнч(Данные); + ДобавляемыеТипы = Новый Массив; + Для Каждого Мета Из Метаданные.РегистрыСведений Цикл + ДобавляемыеТипы.Добавить(Тип("РегистрСведенийКлючЗаписи." + Мета.Имя)); + КонецЦикла; + Для Каждого Мета Из Метаданные.РегистрыНакопления Цикл + ДобавляемыеТипы.Добавить(Тип("РегистрНакопленияКлючЗаписи." + Мета.Имя)); + КонецЦикла; + Для Каждого Мета Из Метаданные.РегистрыБухгалтерии Цикл + ДобавляемыеТипы.Добавить(Тип("РегистрБухгалтерииКлючЗаписи." + Мета.Имя)); + КонецЦикла; + Для Каждого Мета Из Метаданные.РегистрыРасчета Цикл + ДобавляемыеТипы.Добавить(Тип("РегистрРасчетаКлючЗаписи." + Мета.Имя)); + КонецЦикла; - Если ТипДанных = Тип("ХранилищеЗначения") - ИЛИ ТипДанных = Тип("ФиксированныйМассив") - ИЛИ ТипДанных = Тип("ФиксированнаяСтруктура") - ИЛИ ТипДанных = Тип("ФиксированноеСоответствие") Тогда - - Возврат; + Возврат Новый ОписаниеТипов(ДобавляемыеТипы); +КонецФункции + +Функция ОписаниеИзмеренийНабора(Знач МетаданныеРегистра, КэшИзмеренийРегистров) + + ОписаниеИзмерений = КэшИзмеренийРегистров[МетаданныеРегистра]; + Если ОписаниеИзмерений <> Неопределено Тогда + Возврат ОписаниеИзмерений; КонецЕсли; - Если ДанныеВЗначенииФиксированныхТипов Тогда + // Период и регистратор, если есть. + ОписаниеИзмерений = Новый Структура; + + ДанныеИзмерения = Новый Структура("Ведущее, Представление, Формат, Тип", Ложь); + + Если Метаданные.РегистрыСведений.Содержит(МетаданныеРегистра) Тогда + // Возможно есть период + МетаПериод = МетаданныеРегистра.ПериодичностьРегистраСведений; + Периодичность = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений; - Если ТипДанных = Тип("Булево") - ИЛИ ТипДанных = Тип("Строка") - ИЛИ ТипДанных = Тип("Число") - ИЛИ ТипДанных = Тип("Дата") - ИЛИ ТипДанных = Тип("Неопределено") - ИЛИ ТипДанных = Тип("УникальныйИдентификатор") - ИЛИ ТипДанных = Тип("Null") - ИЛИ ТипДанных = Тип("Тип") - ИЛИ ТипДанных = Тип("ХранилищеЗначения") - ИЛИ ТипДанных = Тип("ОбщийМодуль") - ИЛИ ТипДанных = Тип("ОбъектМетаданных") - ИЛИ ТипДанных = Тип("ТипЗначенияXDTO") - ИЛИ ТипДанных = Тип("ТипОбъектаXDTO") - ИЛИ ЭтоСсылка(ТипДанных) Тогда + Если МетаПериод = Периодичность.ПозицияРегистратора Тогда + ДанныеИзмерения.Тип = Документы.ТипВсеСсылки(); + ДанныеИзмерения.Представление = НСтр("ru='Регистратор'"); + ДанныеИзмерения.Ведущее = Истина; + ОписаниеИзмерений.Вставить("Регистратор", ДанныеИзмерения); + + ИначеЕсли МетаПериод = Периодичность.Год Тогда + ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); + ДанныеИзмерения.Представление = НСтр("ru='Период'"); + ДанныеИзмерения.Формат = "ДФ='yyyy ""г.""'; ДП='Дата не задана'"; + ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); + + ИначеЕсли МетаПериод = Периодичность.День Тогда + ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); + ДанныеИзмерения.Представление = НСтр("ru='Период'"); + ДанныеИзмерения.Формат = "ДЛФ=D; ДП='Дата не задана'"; + ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); + + ИначеЕсли МетаПериод = Периодичность.Квартал Тогда + ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); + ДанныеИзмерения.Представление = НСтр("ru='Период'"); + ДанныеИзмерения.Формат = "ДФ='к ""квартал ""yyyy ""г.""'; ДП='Дата не задана'"; + ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); + + ИначеЕсли МетаПериод = Периодичность.Месяц Тогда + ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); + ДанныеИзмерения.Представление = НСтр("ru='Период'"); + ДанныеИзмерения.Формат = "ДФ='ММММ yyyy ""г.""'; ДП='Дата не задана'"; + ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); + + ИначеЕсли МетаПериод = Периодичность.Секунда Тогда + ДанныеИзмерения.Тип = Новый ОписаниеТипов("Дата"); + ДанныеИзмерения.Представление = НСтр("ru='Период'"); + ДанныеИзмерения.Формат = "ДЛФ=DT; ДП='Дата не задана'"; + ОписаниеИзмерений.Вставить("Период", ДанныеИзмерения); - Возврат; КонецЕсли; + + Иначе + ДанныеИзмерения.Тип = Документы.ТипВсеСсылки(); + ДанныеИзмерения.Представление = НСтр("ru='Регистратор'"); + ДанныеИзмерения.Ведущее = Истина; + ОписаниеИзмерений.Вставить("Регистратор", ДанныеИзмерения); + КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в функции ФиксированныеДанные общего модуля ОбщегоНазначения. - |Данные типа ""%1"" не могут быть зафиксированы.'"), - Строка(ТипДанных) ); + // Все измерения + Для Каждого МетаИзмерение Из МетаданныеРегистра.Измерения Цикл + ДанныеИзмерения = Новый Структура("Ведущее, Представление, Формат, Тип"); + ДанныеИзмерения.Тип = МетаИзмерение.Тип; + ДанныеИзмерения.Представление = МетаИзмерение.Представление(); + ДанныеИзмерения.Ведущее = МетаИзмерение.Ведущее; + ОписаниеИзмерений.Вставить(МетаИзмерение.Имя, ДанныеИзмерения); + КонецЦикла; -КонецПроцедуры + КэшИзмеренийРегистров[МетаданныеРегистра] = ОписаниеИзмерений; + Возврат ОписаниеИзмерений; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область УсловныеВызовы // Возвращает серверный модуль менеджера по имени объекта. Функция СерверныйМодульМенеджера(Имя) @@ -7670,6 +7887,539 @@ Возврат Модуль; КонецФункции +#КонецОбласти + +#Область Данные + +Функция СравниваемыеКолонки(Знач КоллекцияСтрок, Знач ИменаКолонок, Знач ИсключаяКолонки) + + Если ПустаяСтрока(ИменаКолонок) Тогда + + ТипКоллекции = ТипЗнч(КоллекцияСтрок); + ЭтоСписокЗначений = (ТипКоллекции = Тип("СписокЗначений")); + ЭтоТаблицаЗначений = (ТипКоллекции = Тип("ТаблицаЗначений")); + ЭтоКоллекцияКлючИЗначение = (ТипКоллекции = Тип("Соответствие")) + Или (ТипКоллекции = Тип("Структура")) + Или (ТипКоллекции = Тип("ФиксированноеСоответствие")) + Или (ТипКоллекции = Тип("ФиксированнаяСтруктура")); + + СравниваемыеКолонки = Новый Массив; + Если ЭтоТаблицаЗначений Тогда + Для Каждого Колонка Из КоллекцияСтрок.Колонки Цикл + СравниваемыеКолонки.Добавить(Колонка.Имя); + КонецЦикла; + ИначеЕсли ЭтоСписокЗначений Тогда + СравниваемыеКолонки.Добавить("Значение"); + СравниваемыеКолонки.Добавить("Картинка"); + СравниваемыеКолонки.Добавить("Пометка"); + СравниваемыеКолонки.Добавить("Представление"); + ИначеЕсли ЭтоКоллекцияКлючИЗначение Тогда + СравниваемыеКолонки.Добавить("Ключ"); + СравниваемыеКолонки.Добавить("Значение"); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для коллекции типа %1 необходимо указать имена полей, по которым производится сравнение в ОбщегоНазначения.КоллекцииИдентичны'"), + ТипКоллекции); + КонецЕсли; + Иначе + СравниваемыеКолонки = СтрРазделить(СтрЗаменить(ИменаКолонок, " ", ""), ","); + КонецЕсли; + + // Вычитаем исключаемые поля + Если Не ПустаяСтрока(ИсключаяКолонки) Тогда + ИсключаяКолонки = СтрРазделить(СтрЗаменить(ИсключаяКолонки, " ", ""), ","); + СравниваемыеКолонки = ОбщегоНазначенияКлиентСервер.РазностьМассивов(СравниваемыеКолонки, ИсключаяКолонки); + КонецЕсли; + Возврат СравниваемыеКолонки; + +КонецФункции + +Функция СравнитьСУчетомПоследовательности(Знач КоллекцияСтрок1, Знач КоллекцияСтрок2, Знач СравниваемыеКолонки) + + ТипКоллекции = ТипЗнч(КоллекцияСтрок1); + СравниваютсяМассивы = (ТипКоллекции = Тип("Массив") Или ТипКоллекции = Тип("ФиксированныйМассив")); + + // Параллельный обход обеих коллекций. + НомерСтрокиКоллекции1 = 0; + Для Каждого СтрокаКоллекции1 Из КоллекцияСтрок1 Цикл + // Спозиционируемся на аналогичную строку второй коллекции. + НомерСтрокиКоллекции2 = 0; + ЕстьСтрокиКоллекции2 = Ложь; + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + ЕстьСтрокиКоллекции2 = Истина; + Если НомерСтрокиКоллекции2 = НомерСтрокиКоллекции1 Тогда + Прервать; + КонецЕсли; + НомерСтрокиКоллекции2 = НомерСтрокиКоллекции2 + 1; + КонецЦикла; + Если Не ЕстьСтрокиКоллекции2 Тогда + // Во второй коллекции вообще нет строк. + Возврат Ложь; + КонецЕсли; + // Сравниваем значения полей двух строк. + Если СравниваютсяМассивы Тогда + Если СтрокаКоллекции1 <> СтрокаКоллекции2 Тогда + Возврат Ложь; + КонецЕсли; + Иначе + Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл + Если СтрокаКоллекции1[ИмяКолонки] <> СтрокаКоллекции2[ИмяКолонки] Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + КонецЕсли; + НомерСтрокиКоллекции1 = НомерСтрокиКоллекции1 + 1; + КонецЦикла; + + КоличествоСтрокКоллекции1 = НомерСтрокиКоллекции1; + + // Отдельно подсчитаем количество строк второй коллекции. + КоличествоСтрокКоллекции2 = 0; + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + КоличествоСтрокКоллекции2 = КоличествоСтрокКоллекции2 + 1; + КонецЦикла; + + // Если в первой коллекции не оказалось строк, + // то их не должно быть и во второй. + Если КоличествоСтрокКоллекции1 = 0 Тогда + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + Возврат Ложь; + КонецЦикла; + КоличествоСтрокКоллекции2 = 0; + КонецЕсли; + + // Количество строк не должно отличаться. + Если КоличествоСтрокКоллекции1 <> КоличествоСтрокКоллекции2 Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция СравнитьБезУчетаПоследовательности(Знач КоллекцияСтрок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 Цикл + Возврат Ложь; + КонецЦикла; + КонецЕсли; + + // Проверим, что во второй коллекции нет ни одной такой строки, которой нет в накопленных. + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + ЗаполнитьЗначенияСвойств(ПараметрыОтбора, СтрокаКоллекции2); + Если СтрокиОтбора.НайтиСтроки(ПараметрыОтбора).Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + Возврат Истина; + +КонецФункции + +Функция СравнитьМассивы(Знач Массив1, Знач Массив2) + + Если Массив1.Количество() <> Массив2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого Элемент Из Массив1 Цикл + Если Массив2.Найти(Элемент) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Процедура ПроверкаФиксированностиДанных(Данные, ДанныеВЗначенииФиксированныхТипов = Ложь) + + ТипДанных = ТипЗнч(Данные); + + Если ТипДанных = Тип("ХранилищеЗначения") + ИЛИ ТипДанных = Тип("ФиксированныйМассив") + ИЛИ ТипДанных = Тип("ФиксированнаяСтруктура") + ИЛИ ТипДанных = Тип("ФиксированноеСоответствие") Тогда + + Возврат; + КонецЕсли; + + Если ДанныеВЗначенииФиксированныхТипов Тогда + + Если ТипДанных = Тип("Булево") + ИЛИ ТипДанных = Тип("Строка") + ИЛИ ТипДанных = Тип("Число") + ИЛИ ТипДанных = Тип("Дата") + ИЛИ ТипДанных = Тип("Неопределено") + ИЛИ ТипДанных = Тип("УникальныйИдентификатор") + ИЛИ ТипДанных = Тип("Null") + ИЛИ ТипДанных = Тип("Тип") + ИЛИ ТипДанных = Тип("ХранилищеЗначения") + ИЛИ ТипДанных = Тип("ОбщийМодуль") + ИЛИ ТипДанных = Тип("ОбъектМетаданных") + ИЛИ ТипДанных = Тип("ТипЗначенияXDTO") + ИЛИ ТипДанных = Тип("ТипОбъектаXDTO") + ИЛИ ЭтоСсылка(ТипДанных) Тогда + + Возврат; + КонецЕсли; + КонецЕсли; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в функции ФиксированныеДанные общего модуля ОбщегоНазначения. + |Данные типа ""%1"" не могут быть зафиксированы.'"), + Строка(ТипДанных) ); + +КонецПроцедуры + +#Область СкопироватьРекурсивно + +Функция СкопироватьСтруктуру(СтруктураИсточник, ФиксироватьДанные) + + СтруктураРезультат = Новый Структура; + + Для Каждого КлючИЗначение Из СтруктураИсточник Цикл + СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СтруктураИсточник) = Тип("ФиксированнаяСтруктура") Тогда + + Возврат Новый ФиксированнаяСтруктура(СтруктураРезультат); + КонецЕсли; + + Возврат СтруктураРезультат; + +КонецФункции + +Функция СкопироватьСоответствие(СоответствиеИсточник, ФиксироватьДанные) + + СоответствиеРезультат = Новый Соответствие; + + Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл + СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СоответствиеИсточник) = Тип("ФиксированноеСоответствие") Тогда + Возврат Новый ФиксированноеСоответствие(СоответствиеРезультат); + КонецЕсли; + + Возврат СоответствиеРезультат; + +КонецФункции + +Функция СкопироватьМассив(МассивИсточник, ФиксироватьДанные) + + МассивРезультат = Новый Массив; + + Для Каждого Элемент Из МассивИсточник Цикл + МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(МассивИсточник) = Тип("ФиксированныйМассив") Тогда + Возврат Новый ФиксированныйМассив(МассивРезультат); + КонецЕсли; + + Возврат МассивРезультат; + +КонецФункции + +Функция СкопироватьСписокЗначений(СписокИсточник, ФиксироватьДанные) + + СписокРезультат = Новый СписокЗначений; + + Для Каждого ЭлементСписка Из СписокИсточник Цикл + СписокРезультат.Добавить( + СкопироватьРекурсивно(ЭлементСписка.Значение, ФиксироватьДанные), + ЭлементСписка.Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + КонецЦикла; + + Возврат СписокРезультат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область ВнешниеКомпоненты + +// Проверка существования макета по метаданным конфигурации и расширений. +// +// Параметры: +// ПолноеИмяМакета - Строка - полное имя макета. +// +// Возвращаемое значение: +// Булево - признак существования макета. +// +Функция МакетСуществует(ПолноеИмяМакета) + + Макет = Метаданные.НайтиПоПолномуИмени(ПолноеИмяМакета); + Если ТипЗнч(Макет) = Тип("ОбъектМетаданных") Тогда + + Шаблон = Новый Структура("ТипМакета"); + ЗаполнитьЗначенияСвойств(Шаблон, Макет); + ТипМакета = Неопределено; + Если Шаблон.Свойство("ТипМакета", ТипМакета) Тогда + Возврат ТипМакета <> Неопределено; + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область ХранилищеНастроек + +Процедура ХранилищеСохранить(МенеджерХранилища, КлючОбъекта, КлючНастроек, Настройки, + ОписаниеНастроек, ИмяПользователя, ОбновитьПовторноИспользуемыеЗначения) + + Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда + Возврат; + КонецЕсли; + + МенеджерХранилища.Сохранить(КлючОбъекта, КлючНастроек(КлючНастроек), Настройки, + ОписаниеНастроек, ИмяПользователя); + + Если ОбновитьПовторноИспользуемыеЗначения Тогда + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + +КонецПроцедуры + +Функция ХранилищеЗагрузить(МенеджерХранилища, КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию, + ОписаниеНастроек, ИмяПользователя) + + Результат = Неопределено; + + Если ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда + Результат = МенеджерХранилища.Загрузить(КлючОбъекта, КлючНастроек(КлючНастроек), + ОписаниеНастроек, ИмяПользователя); + КонецЕсли; + + Если Результат = Неопределено Тогда + Результат = ЗначениеПоУмолчанию; + Иначе + УстановитьПривилегированныйРежим(Истина); + Если УдалитьБитыеСсылки(Результат) Тогда + Результат = ЗначениеПоУмолчанию; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Удаляет битые ссылки из переменной. +// +// Параметры: +// СсылкаИлиКоллекция - ЛюбаяСсылка, Произвольный - Проверяемый объект или очищаемая коллекция. +// +// Возвращаемое значение: +// Булево - +// * Истина - СсылкаИлиКоллекция ссылочного типа и объект не найден в базе данных. +// * Ложь - Когда СсылкаИлиКоллекция не ссылочного типа или объект найден в базе данных. +// +Функция УдалитьБитыеСсылки(СсылкаИлиКоллекция) + + Тип = ТипЗнч(СсылкаИлиКоллекция); + + Если Тип = Тип("Неопределено") + Или Тип = Тип("Булево") + Или Тип = Тип("Строка") + Или Тип = Тип("Число") + Или Тип = Тип("Дата") Тогда // Оптимизация - часто используемые примитивные типы. + + Возврат Ложь; // Не ссылка. + + ИначеЕсли Тип = Тип("Массив") Тогда + + Количество = СсылкаИлиКоллекция.Количество(); + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + Значение = СсылкаИлиКоллекция[ОбратныйИндекс]; + Если УдалитьБитыеСсылки(Значение) Тогда + СсылкаИлиКоллекция.Удалить(ОбратныйИндекс); + КонецЕсли; + КонецЦикла; + + Возврат Ложь; // Не ссылка. + + ИначеЕсли Тип = Тип("Структура") + Или Тип = Тип("Соответствие") Тогда + + Для Каждого КлючИЗначение Из СсылкаИлиКоллекция Цикл + Значение = КлючИЗначение.Значение; + Если УдалитьБитыеСсылки(Значение) Тогда + СсылкаИлиКоллекция.Вставить(КлючИЗначение.Ключ, Неопределено); + КонецЕсли; + КонецЦикла; + + Возврат Ложь; // Не ссылка. + + ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Тип) + Или Справочники.ТипВсеСсылки().СодержитТип(Тип) + Или Перечисления.ТипВсеСсылки().СодержитТип(Тип) + Или ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) + Или ПланыСчетов.ТипВсеСсылки().СодержитТип(Тип) + Или ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Тип) + Или ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) + Или БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) + Или Задачи.ТипВсеСсылки().СодержитТип(Тип) Тогда + // Ссылочный тип, исключая ТочкаМаршрутаБизнесПроцессаСсылка. + + Если СсылкаИлиКоллекция.Пустая() Тогда + Возврат Ложь; // Ссылка пустая. + ИначеЕсли ЗначениеРеквизитаОбъекта(СсылкаИлиКоллекция, "Ссылка") = Неопределено Тогда + СсылкаИлиКоллекция = Неопределено; + Возврат Истина; // "Битая" ссылка. + Иначе + Возврат Ложь; // Объект найден. + КонецЕсли; + + Иначе + + Возврат Ложь; // Не ссылка. + + КонецЕсли; + +КонецФункции + +Процедура ХранилищеУдалить(МенеджерХранилища, КлючОбъекта, КлючНастроек, ИмяПользователя) + + Если ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда + МенеджерХранилища.Удалить(КлючОбъекта, КлючНастроек(КлючНастроек), ИмяПользователя); + КонецЕсли; + +КонецПроцедуры + +// Возвращает строку ключа настроек, не превышающую допустимую длину 128 символов. +// Если указанная строка превышает 128, тогда вместо символов сверх 96 символов +// добавляется их хеш-сумма по алгоритму MD5 размером 32 символа. +// +// Параметры: +// Строка - Строка - строка произвольной длины. +// +// Возвращаемое значение: +// Строка - не более 128 символов. +// +Функция КлючНастроек(Знач Строка) + Возврат СократитьСтрокуКонтрольнойСуммой(Строка, 128); +КонецФункции + +#КонецОбласти + +#Область БезопасноеХранилище + +Функция ДанныеИзБезопасногоХранилища(Владелец, ИмяБезопасноеХранилищеДанных, Ключ) + + Результат = Новый Структура(Ключ); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | БезопасноеХранилищеДанных.Данные КАК Данные + |ИЗ + | РегистрСведений." + ИмяБезопасноеХранилищеДанных + " КАК БезопасноеХранилищеДанных + |ГДЕ + | БезопасноеХранилищеДанных.Владелец = &Владелец"; + + Запрос.УстановитьПараметр("Владелец", Владелец); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Если РезультатЗапроса.Следующий() Тогда + Если ЗначениеЗаполнено(РезультатЗапроса.Данные) Тогда + СохраненныеДанные = РезультатЗапроса.Данные.Получить(); + Если ЗначениеЗаполнено(СохраненныеДанные) Тогда + ЗаполнитьЗначенияСвойств(Результат, СохраненныеДанные); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область БезопасноеВыполнениеВнешнегоКода + // Проверяет, что переданное имя ИмяПроцедуры является именем экспортной процедуры конфигурации. // Может использоваться для проверки, что переданная строка не содержит произвольного алгоритма // на встроенном языке 1С:Предприятия перед использованием его в операторах Выполнить и Вычислить @@ -7722,7 +8472,7 @@ // Например: МояПроцедура. ВременнаяСтруктура.Вставить(ИмяМетодаОбъекта); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода'", КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат параметра ИмяПроцедуры (передано значение: ""%1"") в ОбщегоНазначения.ВыполнитьМетодКонфигурации: @@ -7867,178 +8617,6 @@ КонецФункции -// Проверка существования макета по метаданным конфигурации и расширений. -// -// Параметры: -// ПолноеИмяМакета - Строка - полное имя макета. -// -// Возвращаемое значение: -// Булево - признак существования макета. -// -Функция МакетСуществует(ПолноеИмяМакета) - - Макет = Метаданные.НайтиПоПолномуИмени(ПолноеИмяМакета); - Если ТипЗнч(Макет) = Тип("ОбъектМетаданных") Тогда - - Шаблон = Новый Структура("ТипМакета"); - ЗаполнитьЗначенияСвойств(Шаблон, Макет); - ТипМакета = Неопределено; - Если Шаблон.Свойство("ТипМакета", ТипМакета) Тогда - Возврат ТипМакета <> Неопределено; - КонецЕсли; - - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Выполняет поиск проверяемых выражений среди реквизитов объекта метаданных. -// -// Параметры: -// ПолноеИмяОбъектаМетаданных - Строка - полное имя проверяемого объекта. -// ПроверяемыеВыражения - Массив - имена полей или проверяемые выражения объекта метаданных. -// -// Возвращаемое значение: -// Структура - Результат проверки. -// * Ошибка - Булево - Найдена ошибка. -// * ОписаниеОшибки - Строка - Описание найденных ошибок. -// -// Пример: -// -// Реквизиты = Новый Массив; -// Реквизиты.Добавить("Номер"); -// Реквизиты.Добавить("Валюта.НаименованиеПолное"); -// -// Результат = ОбщегоНазначения.НайтиОшибкуДоступностиРеквизитовОбъекта("Документ._ДемоЗаказПокупателя", Реквизиты); -// -// Если Результат.Ошибка Тогда -// ВызватьИсключение Результат.ОписаниеОшибки; -// КонецЕсли; -// -Функция НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, ПроверяемыеВыражения) - - МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); - - Если МетаданныеОбъекта = Неопределено Тогда - Возврат Новый Структура("Ошибка, ОписаниеОшибки", Истина, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка получения метаданных ""%1""'"), ПолноеИмяОбъектаМетаданных)); - КонецЕсли; - - // Разрешение вызова из безопасного режима внешней обработки или расширения. - // Информация о доступности полей источника схемы при проверке метаданных не является секретной. - УстановитьОтключениеБезопасногоРежима(Истина); - УстановитьПривилегированныйРежим(Истина); - - Схема = Новый СхемаЗапроса; - Пакет = Схема.ПакетЗапросов.Добавить(Тип("ЗапросВыбораСхемыЗапроса")); - Оператор = Пакет.Операторы.Получить(0); - - Источник = Оператор.Источники.Добавить(ПолноеИмяОбъектаМетаданных, "Таблица"); - ТекстОшибки = ""; - - Для Каждого ТекущееВыражение Из ПроверяемыеВыражения Цикл - - Если Не ПолеИсточникаСхемыЗапросаДоступно(Источник, ТекущееВыражение) Тогда - ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '- Поле объекта ""%1"" не найдено'"), ТекущееВыражение); - КонецЕсли; - - КонецЦикла; - - Возврат Новый Структура("Ошибка, ОписаниеОшибки", Не ПустаяСтрока(ТекстОшибки), ТекстОшибки); - -КонецФункции - -// Используется в НайтиОшибкуДоступностиРеквизитовОбъекта. -// Выполняет проверку доступности поля проверяемого выражения в источнике оператора схемы запроса. -// -Функция ПолеИсточникаСхемыЗапросаДоступно(ИсточникОператора, ПроверяемоеВыражение) - - ЧастиИмениПоля = СтрРазделить(ПроверяемоеВыражение, "."); - ДоступныеПоля = ИсточникОператора.Источник.ДоступныеПоля; - - ТекущаяЧастьИмениПоля = 0; - Пока ТекущаяЧастьИмениПоля < ЧастиИмениПоля.Количество() Цикл - - ТекущееПоле = ДоступныеПоля.Найти(ЧастиИмениПоля.Получить(ТекущаяЧастьИмениПоля)); - - Если ТекущееПоле = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - // Инкрементация следующей части имени поля и соответствующего списка доступности полей. - ТекущаяЧастьИмениПоля = ТекущаяЧастьИмениПоля + 1; - ДоступныеПоля = ТекущееПоле.Поля; - - КонецЦикла; - - Возврат Истина; - -КонецФункции - -Функция ЭтоСлужебныеДанные(МестоИспользования, ИсключенияПоискаСсылок) - - ИсключениеПоиска = ИсключенияПоискаСсылок[МестоИспользования.Метаданные]; - - // Данные может быть как ссылкой так и ключом записи регистра. - - Если ИсключениеПоиска = Неопределено Тогда - Возврат (МестоИспользования.Ссылка = МестоИспользования.Данные); // Ссылку саму на себя исключаем. - ИначеЕсли ИсключениеПоиска = "*" Тогда - Возврат Истина; // Если указано исключить все - считаем все исключением. - Иначе - Для Каждого ПутьКРеквизиту Из ИсключениеПоиска Цикл - // Если указаны исключения. - - // Относительный путь к реквизиту: - // "<ИмяРеквизитаИлиТЧ>[.<ИмяРеквизитаТЧ>]". - - Если ЭтоСсылка(ТипЗнч(МестоИспользования.Данные)) Тогда - - // Проверка есть ли по исключаемому пути в указанных данных проверяемая ссылка - - ПолноеИмяОбъектаМетаданных = МестоИспользования.Метаданные.ПолноеИмя(); - - ТекстЗапроса = - "ВЫБРАТЬ - | ИСТИНА - |ИЗ - | &ПолноеИмяОбъектаМетаданных КАК Таблица - |ГДЕ - | &ПутьКРеквизиту = &ПроверяемаяСсылка - | И Таблица.Ссылка = &Ссылка"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПутьКРеквизиту", ПутьКРеквизиту); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ПроверяемаяСсылка", МестоИспользования.Ссылка); - Запрос.УстановитьПараметр("Ссылка", МестоИспользования.Данные); - - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - Возврат Истина; - КонецЕсли; - - Иначе - - БуферДанных = Новый Структура(ПутьКРеквизиту); - ЗаполнитьЗначенияСвойств(БуферДанных, МестоИспользования.Данные); - Если БуферДанных[ПутьКРеквизиту] = МестоИспользования.Ссылка Тогда - Возврат Истина; - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - КонецЕсли; - - Возврат Ложь; - -КонецФункции +#КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl index 82438b42d..a5c7b7789 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl @@ -1,33 +1,47 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс +#Область ДанныеВБазе + //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции для работы с данными в базе. -// См. ОбщегоНазначения.ЕстьСсылкиНаОбъект. +// (См. ОбщегоНазначения.ЕстьСсылкиНаОбъект) Функция ЕстьСсылкиНаОбъект(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь) Экспорт Возврат ОбщегоНазначения.ЕстьСсылкиНаОбъект(СсылкаИлиМассивСсылок, ИскатьСредиСлужебныхОбъектов); КонецФункции -// См. ОбщегоНазначения.ПроверитьПроведенностьДокументов. +// (См. ОбщегоНазначения.ПроверитьПроведенностьДокументов) Функция ПроверитьПроведенностьДокументов(Знач Документы) Экспорт Возврат ОбщегоНазначения.ПроверитьПроведенностьДокументов(Документы); КонецФункции -// См. ОбщегоНазначения.ПровестиДокументы. +// (См. ОбщегоНазначения.ПровестиДокументы) Функция ПровестиДокументы(Документы) Экспорт Возврат ОбщегоНазначения.ПровестиДокументы(Документы); КонецФункции +#КонецОбласти + +#Область ХранилищеНастроек + //////////////////////////////////////////////////////////////////////////////// // Сохранение, чтение и удаление настроек из хранилищ. -// См. ОбщегоНазначения.ХранилищеОбщихНастроекСохранить. +// (См. ОбщегоНазначения.ХранилищеОбщихНастроекСохранить) Процедура ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, @@ -42,7 +56,7 @@ КонецПроцедуры -// См. ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить. +// (См. ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить) Функция ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт @@ -56,21 +70,21 @@ КонецФункции -// См. ОбщегоНазначения.ХранилищеОбщихНастроекУдалить. +// (См. ОбщегоНазначения.ХранилищеОбщихНастроекУдалить) Процедура ХранилищеОбщихНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт ОбщегоНазначения.ХранилищеОбщихНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя); КонецПроцедуры -// См. ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассив. +// (См. ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассив) Процедура ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, ОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, ОбновитьПовторноИспользуемыеЗначения); КонецПроцедуры -// См. ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить. +// (См. ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить) Процедура ХранилищеСистемныхНастроекСохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, @@ -86,7 +100,7 @@ КонецПроцедуры -// См. ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить. +// (См. ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить) Функция ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт @@ -100,14 +114,14 @@ КонецФункции -// См. ОбщегоНазначения.ХранилищеСистемныхНастроекУдалить. +// (См. ОбщегоНазначения.ХранилищеСистемныхНастроекУдалить) Процедура ХранилищеСистемныхНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт ОбщегоНазначения.ХранилищеСистемныхНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя); КонецПроцедуры -// См. ОбщегоНазначения.ХранилищеНастроекДанныхФормСохранить. +// (См. ОбщегоНазначения.ХранилищеНастроекДанныхФормСохранить) Процедура ХранилищеНастроекДанныхФормСохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, @@ -123,7 +137,7 @@ КонецПроцедуры -// См. ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить. +// (См. ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить) Функция ХранилищеНастроекДанныхФормЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт @@ -137,17 +151,16 @@ КонецФункции -// См. ОбщегоНазначения.ХранилищеНастроекДанныхФормУдалить. +// (См. ОбщегоНазначения.ХранилищеНастроекДанныхФормУдалить) Процедура ХранилищеНастроекДанныхФормУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт ОбщегоНазначения.ХранилищеНастроекДанныхФормУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя); КонецПроцедуры -#Область УстаревшиеПроцедурыИФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции для работы в режиме разделения данных. +#Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать РаботаВМоделиСервиса.УстановитьРазделениеСеанса. Процедура УстановитьРазделениеСеанса(Знач Использование, Знач ОбластьДанных = Неопределено) Экспорт @@ -159,9 +172,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сохранение, чтение и удаление настроек из хранилищ. - // Устарела. Следует использовать функцию ХранилищеОбщихНастроекСохранить. Процедура ХранилищеОбщихНастроекСохранитьМассивИОбновитьПовторноИспользуемыеЗначения(МассивСтруктур) Экспорт @@ -183,31 +193,19 @@ #Область СлужебныеПроцедурыИФункции +#Область Стили + //////////////////////////////////////////////////////////////////////////////// // Функции для работы с цветами стиля в клиентском коде. -// Функция получает цвет стиля по имени элемента стиля. -// -// Параметры: -// ИмяЦветаСтиля - Строка - Имя элемента стиля. -// -// Возвращаемое значение: -// Цвет. -// +// (См. ОбщегоНазначенияКлиент.ЦветСтиля) Функция ЦветСтиля(ИмяЦветаСтиля) Экспорт Возврат ЦветаСтиля[ИмяЦветаСтиля]; КонецФункции -// Функция получает шрифт стиля по имени элемента стиля. -// -// Параметры: -// ИмяШрифтаСтиля - Строка - Имя шрифта стиля. -// -// Возвращаемое значение: -// Шрифт. -// +// (См. ОбщегоНазначенияКлиент.ШрифтСтиля) Функция ШрифтСтиля(ИмяШрифтаСтиля) Экспорт Возврат ШрифтыСтиля[ИмяШрифтаСтиля]; @@ -215,3 +213,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияГлобальный/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияГлобальный/Module.bsl index de12c4f6f..7ba8664aa 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Задает вопрос о продолжении действия, влекущего к потере изменений. diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index 6c03e316d..5784c8226 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -1,17 +1,288 @@ -//////////////////////////////////////////////////////////////////////////////// -// Клиентские процедуры и функции общего назначения: -// - для работы со списками в формах; -// - для работы с журналом регистрации; -// - для обработки действий пользователя в процессе редактирования -// многострочного текста, например комментария в документах; -// - прочее. -// -//////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс +#Область ОповещениеПользователя + +// АПК:142-выкл 4 необязательных параметра для совместимости +// с устаревшей процедурой ОбщегоНазначенияКлиентСервер.СообщитьПользователю. + +// (См. ОбщегоНазначения.СообщитьПользователю) +Процедура СообщитьПользователю( + Знач ТекстСообщенияПользователю, + Знач КлючДанных = Неопределено, + Знач Поле = "", + Знач ПутьКДанным = "", + Отказ = Ложь) Экспорт + + ОбщегоНазначенияСлужебныйКлиентСервер.СообщитьПользователю( + ТекстСообщенияПользователю, + КлючДанных, + Поле, + ПутьКДанным, + Отказ); + +КонецПроцедуры + +// АПК:142-вкл + +// (См. ОбщегоНазначения.КодОсновногоЯзыка) +Функция КодОсновногоЯзыка() Экспорт + + Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка"); + +КонецФункции + +#КонецОбласти + +#Область ДанныеВБазе + //////////////////////////////////////////////////////////////////////////////// -// Функции работы со списками в формах. +// Общие процедуры и функции для работы с данными в базе. + +// (См. ОбщегоНазначения.ПредопределенныйЭлемент) +Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного) Экспорт + + Если ОбщегоНазначенияСлужебныйКлиентСервер.ИспользоватьСтандартнуюФункциюПолученияПредопределенного( + ПолноеИмяПредопределенного) Тогда + + Возврат ПредопределенноеЗначение(ПолноеИмяПредопределенного); + КонецЕсли; + + ПоляПредопределенного = ОбщегоНазначенияСлужебныйКлиентСервер.ИмяПредопределенногоПоПолям(ПолноеИмяПредопределенного); + + ПредопределенныеЗначения = СтандартныеПодсистемыКлиентПовтИсп.СсылкиПоИменамПредопределенных( + ПоляПредопределенного.ПолноеИмяОбъектаМетаданных); + + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.ПредопределенныйЭлемент( + ПолноеИмяПредопределенного, ПоляПредопределенного, ПредопределенныеЗначения); + +КонецФункции + +#КонецОбласти + +#Область УсловныеВызовы + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для вызова необязательных подсистем. + +// (См. ОбщегоНазначения.ПодсистемаСуществует) +Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.ПодсистемыКонфигурации"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ИменаПодсистем = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске().ИменаПодсистем; + ПараметрыПриложения.Вставить(ИмяПараметра, ИменаПодсистем); + КонецЕсли; + ИменаПодсистем = ПараметрыПриложения[ИмяПараметра]; + Возврат ИменаПодсистем.Получить(ПолноеИмяПодсистемы) <> Неопределено; + +КонецФункции + +// (См. ОбщегоНазначения.ОбщийМодуль) +Функция ОбщийМодуль(Имя) Экспорт + + Модуль = Вычислить(Имя); + +#Если Не ВебКлиент Тогда + + // В веб-клиенте не проверяется + // т.к. при обращении к модулям с вызовом сервера типа такого модуля в веб-клиенте не существует. + + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Общий модуль ""%1"" не найден.'"), + Имя); + КонецЕсли; + +#КонецЕсли + + Возврат Модуль; + +КонецФункции + +#КонецОбласти + +#Область ТекущееОкружение + +//////////////////////////////////////////////////////////////////////////////// +// Функции описания текущего окружения клиентского приложения и операционной системы. + +// (См. ОбщегоНазначения.ЭтоWindowsКлиент) +Функция ЭтоWindowsКлиент() Экспорт + + ТипПлатформыКлиента = ТипПлатформыКлиента(); + Возврат ТипПлатформыКлиента = ТипПлатформы.Windows_x86 + Или ТипПлатформыКлиента = ТипПлатформы.Windows_x86_64; + +КонецФункции + +// (См. ОбщегоНазначения.ЭтоLinuxКлиент) +Функция ЭтоLinuxКлиент() Экспорт + + ТипПлатформыКлиента = ТипПлатформыКлиента(); + Возврат ТипПлатформыКлиента = ТипПлатформы.Linux_x86 + Или ТипПлатформыКлиента = ТипПлатформы.Linux_x86_64; + +КонецФункции + +// (См. ОбщегоНазначения.ЭтоOSXКлиент) +Функция ЭтоOSXКлиент() Экспорт + + ТипПлатформыКлиента = ТипПлатформыКлиента(); + Возврат ТипПлатформыКлиента = ТипПлатформы.MacOS_x86 + Или ТипПлатформыКлиента = ТипПлатформы.MacOS_x86_64; + +КонецФункции + +// (См. ОбщегоНазначения.КлиентПодключенЧерезВебСервер) +Функция КлиентПодключенЧерезВебСервер() Экспорт + + Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы()), "WS=") = 1; + +КонецФункции + +// (См. ОбщегоНазначения.РежимОтладки) +Функция РежимОтладки() Экспорт + + Возврат СтрНайти(ПараметрЗапуска, "РежимОтладки") > 0; + +КонецФункции + +// (См. ОбщегоНазначения.ОперативнаяПамятьДоступнаяКлиентскомуПриложению) +Функция ОперативнаяПамятьДоступнаяКлиентскомуПриложению() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат Окр(СистемнаяИнформация.ОперативнаяПамять / 1024, 1); + +КонецФункции + +// (См. ОбщегоНазначения.ИнформационнаяБазаФайловая) +Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт + + Если Не ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда + Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; + КонецЕсли; + + Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("ИнформационнаяБазаФайловая"); + +КонецФункции + +// Возвращает тип платформы клиента. +// +// Возвращаемое значение: +// ТипПлатформы, Неопределено - тип платформы на которой запущен клиент. В режиме веб-клиента, если тип +// платформы иной, чем описан в типе ТипПлатформы, то возвращается Неопределено. +// +Функция ТипПлатформыКлиента() Экспорт + + СистемнаяИнфо = Новый СистемнаяИнформация; + Возврат СистемнаяИнфо.ТипПлатформы + +КонецФункции + +#КонецОбласти + +#Область Даты + +//////////////////////////////////////////////////////////////////////////////// +// Функции для работы с датами с учетом часового пояса сеанса + +// Возвращает текущую дату, приведенную к часовому поясу сеанса. +// Предназначена для использования вместо функции ТекущаяДата() в клиентском коде +// в тех случаях, когда нет возможности перевести выполнение алгоритма в серверный код. +// +// Функция возвращает время, близкое к результату функции ТекущаяДатаСеанса в серверном коде. +// Погрешность обусловлена временем выполнения серверного вызова. +// Кроме того, если на клиентском компьютере перевести время, то функция учтет это изменение +// не сразу, а только после следующего сброса кеша повторно используемых значений +// (см. также метод ОбновитьПовторноИспользуемыеЗначения). +// Поэтому алгоритмы, для которых точное время критически важно, следует размещать в серверном коде, +// а не в клиентском. +// +// Возвращаемое значение: +// Дата - текущая дата сеанса. +// +Функция ДатаСеанса() Экспорт + + Если СтандартныеПодсистемыКлиент.ЗапускПрограммыЗавершен() Тогда + ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); + Иначе + ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + КонецЕсли; + + Возврат ТекущаяДата() + ПараметрыКлиента.ПоправкаКВремениСеанса; + +КонецФункции + +// Возвращает универсальную дату сеанса, получаемую из текущей даты сеанса. +// +// Функция возвращает время, близкое к результату функции УниверсальноеВремя() в серверном контексте. +// Погрешность обусловлена временем выполнения серверного вызова. +// Предназначена для использования вместо функции УниверсальноеВремя(). +// +// Возвращаемое значение: +// Дата - универсальная дата сеанса. +// +Функция ДатаУниверсальная() Экспорт + + Если СтандартныеПодсистемыКлиент.ЗапускПрограммыЗавершен() Тогда + ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); + Иначе + ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + КонецЕсли; + + ДатаСеанса = ТекущаяДата() + ПараметрыКлиента.ПоправкаКВремениСеанса; + Возврат ДатаСеанса + ПараметрыКлиента.ПоправкаКУниверсальномуВремени; + +КонецФункции + +// (См. ОбщегоНазначения.ПредставлениеЛокальнойДатыСоСмещением) +Функция ПредставлениеЛокальнойДатыСоСмещением(ЛокальнаяДата) Экспорт + + Смещение = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().СмещениеСтандартногоВремени; + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.ПредставлениеЛокальнойДатыСоСмещением(ЛокальнаяДата, Смещение); + +КонецФункции + +#КонецОбласти + +#Область Данные + +//////////////////////////////////////////////////////////////////////////////// +// Общие процедуры и функции для работы с прикладными типами и коллекциями значений. + +// (См. ОбщегоНазначения.СкопироватьРекурсивно) +Функция СкопироватьРекурсивно(Источник, ФиксироватьДанные = Неопределено) Экспорт + + Перем Приемник; + + ТипИсточника = ТипЗнч(Источник); + + Если ТипИсточника = Тип("Структура") + Или ТипИсточника = Тип("ФиксированнаяСтруктура") Тогда + Приемник = ОбщегоНазначенияСлужебныйКлиент.СкопироватьСтруктуру(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Соответствие") + Или ТипИсточника = Тип("ФиксированноеСоответствие") Тогда + Приемник = ОбщегоНазначенияСлужебныйКлиент.СкопироватьСоответствие(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Массив") + Или ТипИсточника = Тип("ФиксированныйМассив") Тогда + Приемник = ОбщегоНазначенияСлужебныйКлиент.СкопироватьМассив(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда + Приемник = ОбщегоНазначенияСлужебныйКлиент.СкопироватьСписокЗначений(Источник, ФиксироватьДанные); + Иначе + Приемник = Источник; + КонецЕсли; + + Возврат Приемник; + +КонецФункции // Проверяет, что в параметре команды Параметр передан объект ожидаемого типа ОжидаемыйТип. // В противном случае, выдает стандартное сообщение и возвращает Ложь. @@ -56,256 +327,12 @@ КонецФункции +#КонецОбласти + +#Область Формы + //////////////////////////////////////////////////////////////////////////////// -// Клиентские процедуры общего назначения. - -// Возвращает текущую дату, приведенную к часовому поясу сеанса. -// -// Функция возвращает время, близкое к результату функции ТекущаяДатаСеанса() в серверном контексте. -// Погрешность обусловлена временем выполнения серверного вызова. -// Предназначена для использования вместо функции ТекущаяДата(). -// -// Возвращаемое значение: -// Дата - текущая дата сеанса. -// -Функция ДатаСеанса() Экспорт - - Если СтандартныеПодсистемыКлиент.ЗапускПрограммыЗавершен() Тогда - ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); - Иначе - ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); - КонецЕсли; - - Возврат ТекущаяДата() + ПараметрыКлиента.ПоправкаКВремениСеанса; - -КонецФункции - -// Возвращает универсальную дату сеанса, получаемую из текущей даты сеанса. -// -// Функция возвращает время, близкое к результату функции УниверсальноеВремя() в серверном контексте. -// Погрешность обусловлена временем выполнения серверного вызова. -// Предназначена для использования вместо функции УниверсальноеВремя(). -// -// Возвращаемое значение: -// Дата - универсальная дата сеанса. -// -Функция ДатаУниверсальная() Экспорт - - Если СтандартныеПодсистемыКлиент.ЗапускПрограммыЗавершен() Тогда - ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); - Иначе - ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); - КонецЕсли; - - ДатаСеанса = ТекущаяДата() + ПараметрыКлиента.ПоправкаКВремениСеанса; - Возврат ДатаСеанса + ПараметрыКлиента.ПоправкаКУниверсальномуВремени; - -КонецФункции - -// Предлагает пользователю установить расширение работы с файлами в веб-клиенте. -// Предназначена для использования в начале участков кода, в которых ведется работа с файлами. -// -// Параметры: -// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, -// которая будет вызвана после закрытия формы со следующими параметрами: -// РасширениеПодключено - Булево - Истина, если расширение было подключено. -// ДополнительныеПараметры - Произвольный - параметры, заданные в -// ОписаниеОповещенияОЗакрытии. -// ТекстПредложения - Строка - текст сообщения. Если не указан, то выводится текст по умолчанию. -// ВозможноПродолжениеБезУстановки - Булево - если Истина, будет показана кнопка ПродолжитьБезУстановки, -// если Ложь, будет показана кнопка Отмена. -// -// Пример: -// -// Оповещение = Новый ОписаниеОповещения("ПечатьДокументаЗавершение", ЭтотОбъект); -// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение работы с файлами.'"); -// ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); -// -// Процедура ПечатьДокументаЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт -// Если РасширениеПодключено Тогда -// // код печати документа, рассчитывающий на то, что расширение подключено. -// // ... -// Иначе -// // код печати документа, который работает без подключенного расширения. -// // ... -// КонецЕсли; -Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещенияОЗакрытии, ТекстПредложения = "", - ВозможноПродолжениеБезУстановки = Истина) Экспорт - - ОписаниеОповещенияЗавершение = Новый ОписаниеОповещения("ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиЗавершение", - ОбщегоНазначенияСлужебныйКлиент, ОписаниеОповещенияОЗакрытии); - -#Если Не ВебКлиент Тогда - // В мобильном, тонком и толстом клиентах расширение подключено всегда. - ВыполнитьОбработкуОповещения(ОписаниеОповещенияЗавершение, "ПодключениеНеТребуется"); - Возврат; -#КонецЕсли - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ОписаниеОповещенияЗавершение", ОписаниеОповещенияЗавершение); - ДополнительныеПараметры.Вставить("ТекстПредложения", ТекстПредложения); - ДополнительныеПараметры.Вставить("ВозможноПродолжениеБезУстановки", ВозможноПродолжениеБезУстановки); - - Оповещение = Новый ОписаниеОповещения("ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиПриУстановкеРасширения", - ОбщегоНазначенияСлужебныйКлиент, ДополнительныеПараметры); - НачатьПодключениеРасширенияРаботыСФайлами(Оповещение); - -КонецПроцедуры - -// Предлагает пользователю подключить расширение работы с файлами в веб-клиенте, -// и в случае отказа выдает предупреждение о невозможности продолжения операции. -// Предназначена для использования в начале участков кода, в которых ведется работа с файлами -// только при подключенном расширении. -// -// Параметры: -// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана, если расширение -// подключено со следующими параметрами: -// Результат - Булево - всегда Истина. -// ДополнительныеПараметры - Неопределено -// ТекстПредложения - Строка - текст с предложением подключить расширение работы с файлами. -// Если не указан, то выводится текст по умолчанию. -// ТекстПредупреждения - Строка - текст предупреждения о невозможности продолжения операции. -// Если не указан, то выводится текст по умолчанию. -// -// Возвращаемое значение: -// Булево - Истина, если расширение подключено. -// -// Пример: -// -// Оповещение = Новый ОписаниеОповещения("ПечатьДокументаЗавершение", ЭтотОбъект); -// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение работы с файлами.'"); -// ОбщегоНазначенияКлиент.ПроверитьРасширениеРаботыСФайламиПодключено(Оповещение, ТекстСообщения); -// -// Процедура ПечатьДокументаЗавершение(Результат, ДополнительныеПараметры) Экспорт -// // код печати документа, рассчитывающий на то, что расширение подключено. -// // ... -Процедура ПроверитьРасширениеРаботыСФайламиПодключено(ОписаниеОповещенияОЗакрытии, Знач ТекстПредложения = "", - Знач ТекстПредупреждения = "") Экспорт - - Параметры = Новый Структура("ОписаниеОповещенияОЗакрытии,ТекстПредупреждения", - ОписаниеОповещенияОЗакрытии, ТекстПредупреждения, ); - Оповещение = Новый ОписаниеОповещения("ПроверитьРасширениеРаботыСФайламиПодключеноЗавершение", - ОбщегоНазначенияСлужебныйКлиент, Параметры); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения); - -КонецПроцедуры - -// Возвращает пользовательскую настройку "Предлагать установку расширения работы с файлами". -// -// Возвращаемое значение: -// Булево - Истина, если предлагать. -// -Функция ПредлагатьУстановкуРасширенияРаботыСФайлами() Экспорт - - СистемнаяИнформация = Новый СистемнаяИнформация(); - ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; - Возврат ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( - "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, Истина); - -КонецФункции - -// Сохраняет персональные настройки пользователя. -// -// Параметры: -// Настройки - Структура - коллекция настроек: -// * НапоминатьОбУстановкеРасширенияРаботыСФайлами - Булево - Признак необходимости -// напоминания об установке расширения. -// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - Запрашивать подтверждение по завершении работы. -// -Процедура СохранитьПерсональныеНастройки(Настройки) Экспорт - - Если Настройки.Свойство("НапоминатьОбУстановкеРасширенияРаботыСФайлами") Тогда - ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"] = - Настройки.НапоминатьОбУстановкеРасширенияРаботыСФайлами; - КонецЕсли; - - Если Настройки.Свойство("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы") Тогда - СтандартныеПодсистемыКлиент.УстановитьПараметрКлиента("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", - Настройки.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы); - КонецЕсли; - - Если Настройки.Свойство("ПерсональныеНастройкиРаботыСФайлами") Тогда - СтандартныеПодсистемыКлиент.УстановитьПараметрКлиента("ПерсональныеНастройкиРаботыСФайлами", - Настройки.ПерсональныеНастройкиРаботыСФайлами); - КонецЕсли; - -КонецПроцедуры - -// Выполняет регистрацию компоненты "comcntr.dll" для текущей версии платформы. -// В случае успешной регистрации, предлагает пользователю перезапустить клиентский сеанс -// для того чтобы регистрация вступила в силу. -// -// Вызывается перед клиентским кодом, который использует менеджер COM-соединений (V83.COMConnector) -// и инициируется интерактивными действиями пользователя. -// -// Параметры: -// ВыполнитьПерезагрузкуСеанса - Булево - если Истина, то после регистрации компоненты будет вызван диалог перезапуска сеанса. -// -// Пример: -// ЗарегистрироватьCOMСоединитель(); -// // далее идет код, использующий менеджер COM-соединений (V83.COMConnector). -// // ... -// -Процедура ЗарегистрироватьCOMСоединитель(Знач ВыполнитьПерезагрузкуСеанса = Истина) Экспорт - -#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда - - Если КлиентПодключенЧерезВебСервер() Тогда - Возврат; - КонецЕсли; - - ПараметрыРаботыКлиентаПриЗапуске = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); - - Если ПараметрыРаботыКлиентаПриЗапуске.ЭтоБазоваяВерсияКонфигурации - Или ПараметрыРаботыКлиентаПриЗапуске.ЭтоУчебнаяПлатформа Тогда - Возврат; - КонецЕсли; - - ТекстКоманды = "regsvr32.exe /n /i:user /s comcntr.dll"; - - ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); - ПараметрыЗапускаПрограммы.ТекущийКаталог = КаталогПрограммы(); - ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; - - Результат = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(ТекстКоманды, ПараметрыЗапускаПрограммы); - - КодВозврата = Результат.КодВозврата; - - Если КодВозврата = Неопределено Или КодВозврата <> 0 Тогда - - ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС - + НСтр("ru = 'Код ошибки regsvr32:'") + " " + КодВозврата; - - Если КодВозврата = 5 Тогда - ТекстСообщения = ТекстСообщения + " " + НСтр("ru = 'Недостаточно прав доступа.'"); - КонецЕсли; - - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( - НСтр("ru = 'Регистрация компоненты comcntr'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), "Ошибка", ТекстСообщения); - ЖурналРегистрацииВызовСервера.ЗаписатьСобытияВЖурналРегистрации(ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]); - ПоказатьПредупреждение(,ТекстСообщения + Символы.ПС + НСтр("ru = 'Подробности см. в Журнале регистрации.'")); - ИначеЕсли ВыполнитьПерезагрузкуСеанса Тогда - Оповещение = Новый ОписаниеОповещения("ЗарегистрироватьCOMСоединительЗавершение", - ОбщегоНазначенияСлужебныйКлиент); - ТекстВопроса = НСтр("ru = 'Для завершения перерегистрации компоненты comcntr необходимо перезапустить программу. - |Перезапустить сейчас?'"); - ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); - КонецЕсли; - -#КонецЕсли - -КонецПроцедуры - -// Возвращает Истина, если клиентское приложение подключено к базе через веб-сервер. -// -// Возвращаемое значение: -// Булево - Истина, если подключен. -// -Функция КлиентПодключенЧерезВебСервер() Экспорт - - Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы()), "WS=") = 1; - -КонецФункции +// Клиентские процедуры общего назначения для работы в формами. // Задает вопрос о продолжении действия, которое приведет к потере изменений: // "Данные были изменены. Сохранить изменения?" @@ -316,7 +343,7 @@ // см. процедуру ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(). // // Параметры: -// ОповещениеСохранитьИЗакрыть - ОписаниеОповещения - содержит имя процедуры, вызываемой при нажатии на кнопку OK. +// ОповещениеСохранитьИЗакрыть - ОписаниеОповещения - содержит имя процедуры, вызываемой при нажатии на кнопку "OK". // Отказ - Булево - возвращаемый параметр, признак отказа от выполняемого действия. // ЗавершениеРаботы - Булево - признак того, что форма закрывается в процессе завершения работы приложения. // ТекстПредупреждения - Строка - текст предупреждения, выводимый пользователю. По умолчанию, выводится текст @@ -341,8 +368,12 @@ // Закрыть(<РезультатВыбораВФорме>); // КонецПроцедуры // -Процедура ПоказатьПодтверждениеЗакрытияФормы(Знач ОповещениеСохранитьИЗакрыть, Отказ, - Знач ЗавершениеРаботы, Знач ТекстПредупреждения = "", ТекстПредупрежденияПриЗавершении = Неопределено) Экспорт +Процедура ПоказатьПодтверждениеЗакрытияФормы( + Знач ОповещениеСохранитьИЗакрыть, + Отказ, + Знач ЗавершениеРаботы, + Знач ТекстПредупреждения = "", + ТекстПредупрежденияПриЗавершении = Неопределено) Экспорт Форма = ОповещениеСохранитьИЗакрыть.Модуль; Если Не Форма.Модифицированность Тогда @@ -392,16 +423,21 @@ // ТекстПредупреждения - Строка - текст предупреждения, выводимый пользователю. // ИмяРеквизитаЗакрытьФормуБезПодтверждения - Строка - имя реквизита, содержащего в себе признак того, нужно // выводить предупреждение или нет. -// ОписаниеОповещенияЗакрыть - ОписаниеОповещения - содержит имя процедуры, вызываемой при нажатии на кнопку да. +// ОписаниеОповещенияЗакрыть - ОписаниеОповещения - содержит имя процедуры, вызываемой при нажатии на кнопку "Да". // // Пример: // ТекстПредупреждения = НСтр("ru = 'Закрыть помощник?'"); // ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы( // ЭтотОбъект, Отказ, ТекстПредупреждения, "ЗакрытьФормуБезПодтверждения"); // -Процедура ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(Знач Форма, Отказ, Знач ЗавершениеРаботы, - Знач ТекстПредупреждения, Знач ИмяРеквизитаЗакрытьФормуБезПодтверждения, Знач ОписаниеОповещенияЗакрыть = Неопределено) Экспорт - +Процедура ПоказатьПодтверждениеЗакрытияПроизвольнойФормы( + Знач Форма, + Отказ, + Знач ЗавершениеРаботы, + Знач ТекстПредупреждения, + Знач ИмяРеквизитаЗакрытьФормуБезПодтверждения, + Знач ОписаниеОповещенияЗакрыть = Неопределено) Экспорт + Если Форма[ИмяРеквизитаЗакрытьФормуБезПодтверждения] Тогда Возврат; КонецЕсли; @@ -427,34 +463,6 @@ КонецПроцедуры -// Функция получает цвет стиля по имени элемента стиля. -// -// Параметры: -// ИмяЦветаСтиля - Строка - имя элемента стиля. -// -// Возвращаемое значение: -// Цвет - цвет стиля. -// -Функция ЦветСтиля(ИмяЦветаСтиля) Экспорт - - Возврат ОбщегоНазначенияКлиентПовтИсп.ЦветСтиля(ИмяЦветаСтиля); - -КонецФункции - -// Функция получает шрифт стиля по имени элемента стиля. -// -// Параметры: -// ИмяШрифтаСтиля - Строка - имя элемента стиля. -// -// Возвращаемое значение: -// Шрифт - шрифт стиля. -// -Функция ШрифтСтиля(ИмяШрифтаСтиля) Экспорт - - Возврат ОбщегоНазначенияКлиентПовтИсп.ШрифтСтиля(ИмяШрифтаСтиля); - -КонецФункции - // Обновляет интерфейс программы сохраняя текущее активное окно. // Процедура ОбновитьИнтерфейсПрограммы() Экспорт @@ -526,103 +534,9 @@ КонецПроцедуры -// Возвращает тип платформы клиента. -// -// Возвращаемое значение: -// ТипПлатформы, Неопределено - тип платформы на которой запущен клиент. В режиме веб-клиента, если тип -// платформы иной, чем описан в типе ТипПлатформы, то возвращается Неопределено. -// -Функция ТипПлатформыКлиента() Экспорт - - Возврат ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента(); - -КонецФункции +#КонецОбласти -// См. ОбщегоНазначения.ИнформационнаяБазаФайловая. -Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт - - Если Не ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда - Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; - КонецЕсли; - - Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("ИнформационнаяБазаФайловая"); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для обработки событий и вызова необязательных подсистем. - -// Возвращает Истина, если "функциональная" подсистема существует в конфигурации. -// Предназначена для реализации вызова необязательной подсистемы (условного вызова). -// -// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс". -// -// Параметры: -// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема -// без слов "Подсистема." и с учетом регистра символов. -// Например: "СтандартныеПодсистемы.ВариантыОтчетов". -// -// Пример: -// -// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда -// МодульВариантыОтчетовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВариантыОтчетовКлиент"); -// МодульВариантыОтчетовКлиент.<Имя метода>(); -// КонецЕсли; -// -// Возвращаемое значение: -// Булево - Истина, если существует. -// -Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт - - ИмяПараметра = "СтандартныеПодсистемы.ПодсистемыКонфигурации"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ИменаПодсистем = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске().ИменаПодсистем; - ПараметрыПриложения.Вставить(ИмяПараметра, ИменаПодсистем); - КонецЕсли; - ИменаПодсистем = ПараметрыПриложения[ИмяПараметра]; - Возврат ИменаПодсистем.Получить(ПолноеИмяПодсистемы) <> Неопределено; - -КонецФункции - -// Возвращает ссылку на общий модуль или модуль менеджера по имени. -// -// Параметры: -// Имя - Строка - имя общего модуля. -// -// Возвращаемое значение: -// ОбщийМодуль, МодульМенеджераОбъекта - общий модуль. -// -// Пример: -// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда -// МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент"); -// МодульОбновлениеКонфигурацииКлиент.<Имя метода>(); -// КонецЕсли; -// -// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда -// МодульПолнотекстовыйПоискКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолнотекстовыйПоискКлиент"); -// МодульПолнотекстовыйПоискКлиент.<Имя метода>(); -// КонецЕсли; -// -Функция ОбщийМодуль(Имя) Экспорт - - Модуль = Вычислить(Имя); - -#Если Не ВебКлиент Тогда - - // В веб-клиенте не проверяется - // т.к. при обращении к модулям с вызовом сервера типа такого модуля в веб-клиенте не существует. - - Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не найден.'"), - Имя); - КонецЕсли; - -#КонецЕсли - - Возврат Модуль; - -КонецФункции +#Область ФормыРедактирования //////////////////////////////////////////////////////////////////////////////// // Функции для обработки действий пользователя в процессе редактирования @@ -666,49 +580,105 @@ // Открывает форму редактирования многострочного комментария. // // Параметры: -// МногострочныйТекст - Строка - произвольный текст, который необходимо отредактировать. -// ФормаВладелец - УправляемаяФорма - форма, в поле которой выполняется ввод комментария. -// ИмяРеквизита - Строка - имя реквизита формы, в который будет помещен введенный пользователем -// комментарий. -// Заголовок - Строка - текст, который необходимо отобразить в заголовке формы. -// По умолчанию: "Комментарий". +// МногострочныйТекст - Строка - произвольный текст, который необходимо отредактировать. +// ФормаВладелец - УправляемаяФорма - форма, в поле которой выполняется ввод комментария. +// ИмяРеквизита - Строка - имя реквизита формы, в который будет помещен введенный пользователем комментарий. +// По умолчанию - "Объект.Комментарий". +// Заголовок - Строка - текст, который необходимо отобразить в заголовке формы. +// По умолчанию - "Комментарий". // // Пример: -// ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); +// ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( +// Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); // -Процедура ПоказатьФормуРедактированияКомментария(Знач МногострочныйТекст, Знач ФормаВладелец, Знач ИмяРеквизита, +Процедура ПоказатьФормуРедактированияКомментария( + Знач МногострочныйТекст, + Знач ФормаВладелец, + Знач ИмяРеквизита = "Объект.Комментарий", Знач Заголовок = Неопределено) Экспорт - ДополнительныеПараметры = Новый Структура("ФормаВладелец,ИмяРеквизита", ФормаВладелец, ИмяРеквизита); - Оповещение = Новый ОписаниеОповещения("КомментарийЗавершениеВвода", - ОбщегоНазначенияСлужебныйКлиент, ДополнительныеПараметры); + Контекст = Новый Структура; + Контекст.Вставить("ФормаВладелец", ФормаВладелец); + Контекст.Вставить("ИмяРеквизита", ИмяРеквизита); + + Оповещение = Новый ОписаниеОповещения( + "КомментарийЗавершениеВвода", + ОбщегоНазначенияСлужебныйКлиент, + Контекст); + ЗаголовокФормы = ?(Заголовок <> Неопределено, Заголовок, НСтр("ru='Комментарий'")); + ПоказатьФормуРедактированияМногострочногоТекста(Оповещение, МногострочныйТекст, ЗаголовокФормы); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для выполнения резервного копирования в пользовательском режиме. +#КонецОбласти -// Проверяет, возможно ли выполнить резервное копирование в пользовательском режиме. +#Область НастройкиПользователя + +// Сохраняет персональные настройки пользователя. +// +// Параметры: +// Настройки - Структура - коллекция настроек: +// * НапоминатьОбУстановкеРасширенияРаботыСФайлами - Булево - признак необходимости +// напоминания об установке расширения. +// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - запрашивать подтверждение по завершении работы. +// +Процедура СохранитьПерсональныеНастройки(Настройки) Экспорт + + Если Настройки.Свойство("НапоминатьОбУстановкеРасширенияРаботыСФайлами") Тогда + ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"] = + Настройки.НапоминатьОбУстановкеРасширенияРаботыСФайлами; + КонецЕсли; + + Если Настройки.Свойство("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы") Тогда + СтандартныеПодсистемыКлиент.УстановитьПараметрКлиента("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", + Настройки.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы); + КонецЕсли; + + Если Настройки.Свойство("ПерсональныеНастройкиРаботыСФайлами") Тогда + СтандартныеПодсистемыКлиент.УстановитьПараметрКлиента("ПерсональныеНастройкиРаботыСФайлами", + Настройки.ПерсональныеНастройкиРаботыСФайлами); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область Стили + +//////////////////////////////////////////////////////////////////////////////// +// Функции для работы с цветами стиля в клиентском коде. + +// Функция получает цвет стиля по имени элемента стиля. +// +// Параметры: +// ИмяЦветаСтиля - Строка - имя элемента стиля. // // Возвращаемое значение: -// Булево - Истина, если предлагать. +// Цвет - цвет стиля. // -Функция ПредлагатьСоздаватьРезервныеКопии() Экспорт +Функция ЦветСтиля(ИмяЦветаСтиля) Экспорт - Результат = Ложь; - ИнтеграцияПодсистемБСПКлиент.ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме(Результат); - Возврат Результат; + Возврат ОбщегоНазначенияКлиентПовтИсп.ЦветСтиля(ИмяЦветаСтиля); КонецФункции -// Предлагает пользователю создать резервную копию. -Процедура ПредложитьПользователюСоздатьРезервнуюКопию() Экспорт +// Функция получает шрифт стиля по имени элемента стиля. +// +// Параметры: +// ИмяШрифтаСтиля - Строка - имя элемента стиля. +// +// Возвращаемое значение: +// Шрифт - шрифт стиля. +// +Функция ШрифтСтиля(ИмяШрифтаСтиля) Экспорт - ИнтеграцияПодсистемБСПКлиент.ПриПредложенииПользователюСоздатьРезервнуюКопию(); + Возврат ОбщегоНазначенияКлиентПовтИсп.ШрифтСтиля(ИмяШрифтаСтиля); -КонецПроцедуры +КонецФункции + +#КонецОбласти #Область ВнешниеКомпоненты @@ -744,12 +714,12 @@ КонецФункции -// Подключает компоненту, выполненную по технологии Native API и COM асинхронном режиме. +// Подключает компоненту, выполненную по технологии Native API и COM, в асинхронном режиме. // Компонента должна храниться в макете конфигурации в виде ZIP-архива. // Для веб-клиента предлагается диалог, подсказывающий пользователю действия по установке. // // Параметры: -// Оповещение - ОписаниеОповещения - Описание оповещения о подключении со следующими параметрами: +// Оповещение - ОписаниеОповещения - описание оповещения о подключении со следующими параметрами: // * Результат - Структура - результат подключения компоненты: // ** Подключено - Булево - признак подключения. // ** ПодключаемыйМодуль - AddIn - экземпляр объекта внешней компоненты; @@ -842,7 +812,7 @@ // Компонента должна храниться в макете конфигурации в виде ZIP-архива. // // Параметры: -// Оповещение - ОписаниеОповещения - Описание оповещения об установке внешней компоненты: +// Оповещение - ОписаниеОповещения - описание оповещения об установке внешней компоненты: // * Результат - Структура - результат установки компоненты: // ** Установлено - Булево - признак установки. // ** ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. @@ -889,234 +859,92 @@ #КонецОбласти -#Область ЗапускВнешнихПриложений +#Область ВнешнееСоединение //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с внешними приложениями. +// Процедуры и функции для работы с внешним соединением. -// Открывает проводник с указанным путем. -// Если передан путь к файлу, то выполняет позиционирование курсора в проводнике на этом файле. +// Выполняет регистрацию компоненты "comcntr.dll" для текущей версии платформы. +// В случае успешной регистрации, предлагает пользователю перезапустить клиентский сеанс +// для того чтобы регистрация вступила в силу. // +// Вызывается перед клиентским кодом, который использует менеджер COM-соединений (V83.COMConnector) +// и инициируется интерактивными действиями пользователя. +// // Параметры: -// ПутьККаталогуИлиФайлу - Строка - полный путь к файлу или каталогу на диске. +// ВыполнитьПерезагрузкуСеанса - Булево - если Истина, то после регистрации COM соединителя +// будет вызван диалог перезапуска сеанса. +// Оповещение - ОписаниеОповещения - оповещение о результате регистрации. +// - Зарегистрировано - Булево - Истина, если COM соединитель зарегистрирован без ошибок. +// - ДополнительныеПараметры - Произвольный - значение, которое было указано +// при создании объекта ОписаниеОповещения. // // Пример: -// // Для Windows -// ОбщегоНазначенияКлиент.ОткрытьПроводник("C:\Users"); -// ОбщегоНазначенияКлиент.ОткрытьПроводник("C:\Program Files\1cv8\common\1cestart.exe"); -// // Для Linux -// ОбщегоНазначенияКлиент.ОткрытьПроводник("/home/"); -// ОбщегоНазначенияКлиент.ОткрытьПроводник("/opt/1C/v8.3/x86_64/1cv8c"); +// ЗарегистрироватьCOMСоединитель(); // -Процедура ОткрытьПроводник(ПутьККаталогуИлиФайлу) Экспорт - - ФайлИнфо = Новый Файл(ПутьККаталогуИлиФайлу); +Процедура ЗарегистрироватьCOMСоединитель(Знач ВыполнитьПерезагрузкуСеанса = Истина, + Знач Оповещение = Неопределено) Экспорт Контекст = Новый Структура; - Контекст.Вставить("ФайлИнфо", ФайлИнфо); - - Оповещение = Новый ОписаниеОповещения( - "ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами", ОбщегоНазначенияСлужебныйКлиент, Контекст); - - ТекстПредложения = НСтр("ru = 'Для открытия папки необходимо установить расширение работы с файлами.'"); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); - -КонецПроцедуры - -// Открывает файл в программе просмотра, ассоциированной с расширением файла в операционной системе. -// Блокирует возможность открытия файлов, расширение которых относятся к исполняемым файлам. -// -// Параметры: -// ПутьКФайлу - Строка - полный путь к файлу на диске, который требуется открыть. -// Оповещение - ОписаниеОповещения, Неопределено - оповещение о результате открытия. -// - если оповещение не задано - в случае ошибки будет показано предупреждение. -// * ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. -// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. -// -// Пример: -// ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(КаталогДокументов() + "test.pdf"); -// ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(КаталогДокументов() + "test.xlsx"); -// -Процедура ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу, Знач Оповещение = Неопределено) Экспорт - - ФайлИнфо = Новый Файл(ПутьКФайлу); - - Контекст = Новый Структура; - Контекст.Вставить("ФайлИнфо", ФайлИнфо); + Контекст.Вставить("ВыполнитьПерезагрузкуСеанса", ВыполнитьПерезагрузкуСеанса); Контекст.Вставить("Оповещение", Оповещение); - Оповещение = Новый ОписаниеОповещения( - "ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами", ОбщегоНазначенияСлужебныйКлиент, Контекст); + Если ОбщегоНазначенияСлужебныйКлиент.ЗарегистрироватьCOMСоединительДоступнаРегистрация() Тогда - ТекстПредложения = НСтр("ru = 'Для открытия файла необходимо установить расширение работы с файлами.'"); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); - -КонецПроцедуры - -// Открывает навигационную ссылку в программе, которая ассоциирована с протоколом навигационной ссылки. -// -// Допустимые протоколы: http, https, e1c, v8help, mailto, tel, skype. -// -// Для открытия проводника или файла в программе просмотра не следует формировать ссылку по протоколу file:// -// - для открытия проводника см. ОткрытьПроводник. -// - для открытия файла по расширению см. ОткрытьФайлВПрограммеПросмотра. -// -// Параметры: -// НавигационнаяСсылка - Строка - ссылка, которую требуется открыть. -// Оповещение - ОписаниеОповещения, Неопределено - оповещение о результате открытия. -// - если оповещение не задано - в случае ошибки будет показано предупреждение. -// * ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. -// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. -// -// Пример: -// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("e1cib/navigationpoint/startpage"); // начальная страница. -// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("v8help://1cv8/QueryLanguageFullTextSearchInData"); -// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("https://1c.ru"); -// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("mailto:help@1c.ru"); -// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("skype:echo123?call"); -// -Процедура ОткрытьНавигационнуюСсылку(НавигационнаяСсылка, Знач Оповещение = Неопределено) Экспорт - - Контекст = Новый Структура; - Контекст.Вставить("НавигационнаяСсылка", НавигационнаяСсылка); - Контекст.Вставить("Оповещение", Оповещение); - - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось перейти по ссылке ""%1"" по причине: - |Неверно задана навигационная ссылка.'"), - НавигационнаяСсылка); - - Если Не ОбщегоНазначенияСлужебныйКлиент.ЭтоДопустимаяСсылка(НавигационнаяСсылка) Тогда - ОбщегоНазначенияСлужебныйКлиент.ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст); - Возврат; - КонецЕсли; - - Если ОбщегоНазначенияСлужебныйКлиент.ЭтоВебСсылка(НавигационнаяСсылка) - Или ОбщегоНазначенияСлужебныйКлиент.ЭтоНавигационнаяСсылка(НавигационнаяСсылка) Тогда - - Попытка - -#Если ТолстыйКлиентОбычноеПриложение Тогда - // Особенность платформы: ПерейтиПоНавигационнойСсылке не доступен в толстом клиенте обычного приложения. - Оповещение = Новый ОписаниеОповещения(,, Контекст, - "ОткрытьНавигационнуюСсылкуПриОбработкеОшибки", ОбщегоНазначенияСлужебныйКлиент); - НачатьЗапускПриложения(Оповещение, НавигационнаяСсылка); -#Иначе - ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка); + ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + ПараметрыЗапускаПрограммы.ТекущийКаталог = КаталогПрограммы(); #КонецЕсли + ПараметрыЗапускаПрограммы.Оповещение = Новый ОписаниеОповещения( + "ЗарегистрироватьCOMСоединительПриПроверкеРегистрации", ОбщегоНазначенияСлужебныйКлиент, Контекст); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; - Исключение - ОбщегоНазначенияСлужебныйКлиент.ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст); - Возврат; - КонецПопытки; + ТекстКоманды = "regsvr32.exe /n /i:user /s comcntr.dll"; - Если Оповещение <> Неопределено Тогда - ПриложениеЗапущено = Истина; - ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); - КонецЕсли; + ФайловаяСистемаКлиент.ЗапуститьПрограмму(ТекстКоманды, ПараметрыЗапускаПрограммы); + + Иначе + + ОбщегоНазначенияСлужебныйКлиент.ЗарегистрироватьCOMСоединительОповеститьОбОшибке(Контекст); - Возврат; КонецЕсли; - Если ОбщегоНазначенияСлужебныйКлиент.ЭтоСсылкаНаСправку(НавигационнаяСсылка) Тогда - ОткрытьСправку(НавигационнаяСсылка); - Возврат; - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения( - "ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами", ОбщегоНазначенияСлужебныйКлиент, Контекст); - - ТекстПредложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для открытия ссылки ""%1"" необходимо установить расширение работы с файлами.'"), - НавигационнаяСсылка); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); - КонецПроцедуры -// Возвращает структуру параметров для см. процедуру ЗапуститьПрограмму. -// -// Возвращаемое значение: -// ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. -// Оповещение - Булево - ОписаниеОповещения, Неопределено - оповещение о результате -// завершения запущенного приложения. -// если оповещение не задано - в случае ошибки будет показано предупреждение. -// * Результат - Структура - Результат работы программы. -// ** ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. -// ** ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. -// ** КодВозврата - Число - код возврата программы. -// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. -// -Функция ПараметрыЗапускаПрограммы() Экспорт +// (См. ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой) +Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт - Параметры = Новый Структура; - Параметры.Вставить("ТекущийКаталог", ""); - Параметры.Вставить("Оповещение", Неопределено); + ПодключениеНедоступно = ЭтоLinuxКлиент() Или ЭтоOSXКлиент(); + КраткоеОписаниеОшибки = НСтр("ru = 'Прямое подключение к информационной базе доступно только на клиенте под управлением ОС Windows.'"); - Возврат Параметры; + Возврат ОбщегоНазначенияСлужебныйКлиентСервер.УстановитьВнешнееСоединениеСБазой(Параметры, ПодключениеНедоступно, КраткоеОписаниеОшибки); КонецФункции -// (RunApplication) Запускает внешнюю программу в соответствии с параметрами запуска. -// -// Параметры: -// КомандаЗапуска - Строка, Массив - Командная строка для запуска программы. -// Если Массив, то: первый элемент массива - путь к исполняемому приложению, остальные - передаваемые параметры, -// массив соответствует тому, который получит вызываемая программа в argv. -// ПараметрыЗапускаПрограммы - Структура, Неопределено - см. функцию ПараметрыЗапускаПрограммы. -// -// Пример: -// -// -Процедура ЗапуститьПрограмму(Знач КомандаЗапуска, ПараметрыЗапускаПрограммы = Неопределено) Экспорт - - Если ПараметрыЗапускаПрограммы = Неопределено Тогда - ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); - КонецЕсли; - - ТекущийКаталог = ПараметрыЗапускаПрограммы.ТекущийКаталог; - Оповещение = ПараметрыЗапускаПрограммы.Оповещение; - - СтрокаКоманды = ОбщегоНазначенияКлиентСервер.БезопаснаяСтрокаКоманды(КомандаЗапуска); - - Контекст = Новый Структура; - Контекст.Вставить("СтрокаКоманды", СтрокаКоманды); - Контекст.Вставить("ТекущийКаталог", ТекущийКаталог); - Контекст.Вставить("Оповещение", Оповещение); - - Оповещение = Новый ОписаниеОповещения( - "ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами", ОбщегоНазначенияСлужебныйКлиент, Контекст); - - ТекстПредложения = НСтр("ru = 'Для создания временного каталога необходимо установить расширение работы с файлами.'"); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); - -КонецПроцедуры - #КонецОбласти -#Область ВременныеФайлы +#Область РезервноеКопирование //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с временными файлами. +// Процедуры и функции для выполнения резервного копирования в пользовательском режиме. -// Получение имени временного каталога. +// Проверяет, возможно ли выполнить резервное копирование в пользовательском режиме. // -// Параметры: -// Оповещение - ОписаниеОповещения - оповещение о результате получения. -// * ИмяКаталога - Строка - путь к созданному каталогу. -// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. -// Расширение - Строка - суффикс в имени каталога, который поможет идентифицировать каталог при анализе. +// Возвращаемое значение: +// Булево - Истина, если предлагать. // -Процедура СоздатьВременныйКаталог(Знач Оповещение, Расширение = "") Экспорт +Функция ПредлагатьСоздаватьРезервныеКопии() Экспорт - Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("Расширение", Расширение); + Результат = Ложь; + ИнтеграцияПодсистемБСПКлиент.ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме(Результат); + Возврат Результат; - Оповещение = Новый ОписаниеОповещения("СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами", - ОбщегоНазначенияСлужебныйКлиент, Контекст); - - ТекстПредложения = НСтр("ru = 'Для создания временного каталога необходимо установить расширение работы с файлами.'"); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); +КонецФункции + +// Предлагает пользователю создать резервную копию. +Процедура ПредложитьПользователюСоздатьРезервнуюКопию() Экспорт + + ИнтеграцияПодсистемБСПКлиент.ПриПредложенииПользователюСоздатьРезервнуюКопию(); КонецПроцедуры @@ -1147,6 +975,192 @@ КонецПроцедуры +// Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами +// Предлагает пользователю установить расширение работы с файлами в веб-клиенте. +// Предназначена для использования в начале участков кода, в которых ведется работа с файлами. +// +// Параметры: +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, +// которая будет вызвана после закрытия формы со следующими параметрами: +// РасширениеПодключено - Булево - Истина, если расширение было подключено. +// ДополнительныеПараметры - Произвольный - параметры, заданные в +// ОписаниеОповещенияОЗакрытии. +// ТекстПредложения - Строка - текст сообщения. Если не указан, то выводится текст по умолчанию. +// ВозможноПродолжениеБезУстановки - Булево - если Истина, будет показана кнопка ПродолжитьБезУстановки, +// если Ложь, будет показана кнопка Отмена. +// +// Пример: +// +// Оповещение = Новый ОписаниеОповещения("ПечатьДокументаЗавершение", ЭтотОбъект); +// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение работы с файлами.'"); +// ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); +// +// Процедура ПечатьДокументаЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт +// Если РасширениеПодключено Тогда +// // код печати документа, рассчитывающий на то, что расширение подключено. +// // ... +// Иначе +// // код печати документа, который работает без подключенного расширения. +// // ... +// КонецЕсли; +Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами( + ОписаниеОповещенияОЗакрытии, + ТекстПредложения = "", + ВозможноПродолжениеБезУстановки = Истина) Экспорт + + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами( + ОписаниеОповещенияОЗакрытии, + ТекстПредложения, + ВозможноПродолжениеБезУстановки); + +КонецПроцедуры + +// Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами +// Предлагает пользователю подключить расширение работы с файлами в веб-клиенте, +// и в случае отказа выдает предупреждение о невозможности продолжения операции. +// Предназначена для использования в начале участков кода, в которых ведется работа с файлами +// только при подключенном расширении. +// +// Параметры: +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана, если расширение +// подключено со следующими параметрами: +// Результат - Булево - всегда Истина. +// ДополнительныеПараметры - Неопределено +// ТекстПредложения - Строка - текст с предложением подключить расширение работы с файлами. +// Если не указан, то выводится текст по умолчанию. +// ТекстПредупреждения - Строка - текст предупреждения о невозможности продолжения операции. +// Если не указан, то выводится текст по умолчанию. +// +// Возвращаемое значение: +// Булево - Истина, если расширение подключено. +// +// Пример: +// +// Оповещение = Новый ОписаниеОповещения("ПечатьДокументаЗавершение", ЭтотОбъект); +// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение работы с файлами.'"); +// ОбщегоНазначенияКлиент.ПроверитьРасширениеРаботыСФайламиПодключено(Оповещение, ТекстСообщения); +// +// Процедура ПечатьДокументаЗавершение(Результат, ДополнительныеПараметры) Экспорт +// // код печати документа, рассчитывающий на то, что расширение подключено. +// // ... +Процедура ПроверитьРасширениеРаботыСФайламиПодключено(ОписаниеОповещенияОЗакрытии, Знач ТекстПредложения = "", + Знач ТекстПредупреждения = "") Экспорт + + Параметры = Новый Структура("ОписаниеОповещенияОЗакрытии,ТекстПредупреждения", + ОписаниеОповещенияОЗакрытии, ТекстПредупреждения, ); + Оповещение = Новый ОписаниеОповещения("ПроверитьРасширениеРаботыСФайламиПодключеноЗавершение", + ОбщегоНазначенияСлужебныйКлиент, Параметры); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения); + +КонецПроцедуры + +// Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами +// Возвращает пользовательскую настройку "Предлагать установку расширения работы с файлами". +// +// Возвращаемое значение: +// Булево - Истина, если предлагать. +// +Функция ПредлагатьУстановкуРасширенияРаботыСФайлами() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; + Возврат ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( + "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, Истина); + +КонецФункции + +// Устарела. Следует использовать ФайловаяСистемаКлиент.ОткрытьФайл +// Открывает файл в программе просмотра, ассоциированной с расширением файла в операционной системе. +// Блокирует возможность открытия файлов, расширение которых относятся к исполняемым файлам. +// +// Параметры: +// ПутьКФайлу - Строка - полный путь к файлу на диске, который требуется открыть. +// Оповещение - ОписаниеОповещения - оповещение о результате открытия. +// если оповещение не задано, в случае ошибки будет показано предупреждение. +// - ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. +// - ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// +// Пример: +// ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(КаталогДокументов() + "test.pdf"); +// ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(КаталогДокументов() + "test.xlsx"); +// +Процедура ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу, Знач Оповещение = Неопределено) Экспорт + + Если Оповещение = Неопределено Тогда + ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлу); + Иначе + ПараметрыОткрытия = ФайловаяСистемаКлиент.ПараметрыОткрытияФайла(); + ПараметрыОткрытия.ДляРедактирования = Истина; + ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлу, Оповещение,, ПараметрыОткрытия); + КонецЕсли; + +КонецПроцедуры + +// Устарела. Следует использовать ФайловаяСистемаКлиент.ОткрытьПроводник +// Открывает проводник с указанным путем. +// Если передан путь к файлу, то выполняет позиционирование курсора в проводнике на этом файле. +// +// Параметры: +// ПутьККаталогуИлиФайлу - Строка - полный путь к файлу или каталогу на диске. +// +// Пример: +// // Для Windows +// ОбщегоНазначенияКлиент.ОткрытьПроводник("C:\Users"); +// ОбщегоНазначенияКлиент.ОткрытьПроводник("C:\Program Files\1cv8\common\1cestart.exe"); +// // Для Linux +// ОбщегоНазначенияКлиент.ОткрытьПроводник("/home/"); +// ОбщегоНазначенияКлиент.ОткрытьПроводник("/opt/1C/v8.3/x86_64/1cv8c"); +// +Процедура ОткрытьПроводник(ПутьККаталогуИлиФайлу) Экспорт + + ФайловаяСистемаКлиент.ОткрытьПроводник(ПутьККаталогуИлиФайлу); + +КонецПроцедуры + +// Устарела. Следует использовать ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку +// Открывает навигационную ссылку в программе, которая ассоциирована с протоколом навигационной ссылки. +// +// Допустимые протоколы: http, https, e1c, v8help, mailto, tel, skype. +// +// Для открытия проводника или файла в программе просмотра не следует формировать ссылку по протоколу file:// +// - для открытия проводника см. ОткрытьПроводник. +// - для открытия файла по расширению см. ОткрытьФайлВПрограммеПросмотра. +// +// Параметры: +// НавигационнаяСсылка - Строка - ссылка, которую требуется открыть. +// Оповещение - ОписаниеОповещения - оповещение о результате открытия. +// если оповещение не задано, в случае ошибки будет показано предупреждение. +// - ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. +// - ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// +// Пример: +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("e1cib/navigationpoint/startpage"); // начальная страница. +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("v8help://1cv8/QueryLanguageFullTextSearchInData"); +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("https://1c.ru"); +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("mailto:help@1c.ru"); +// ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("skype:echo123?call"); +// +Процедура ОткрытьНавигационнуюСсылку(НавигационнаяСсылка, Знач Оповещение = Неопределено) Экспорт + + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылка, Оповещение); + +КонецПроцедуры + +// Устарела. Следует использовать ФайловаяСистемаКлиент.СоздатьВременныйКаталог +// Получение имени временного каталога. +// +// Параметры: +// Оповещение - ОписаниеОповещения - оповещение о результате получения. +// * ИмяКаталога - Строка - путь к созданному каталогу. +// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// Расширение - Строка - суффикс в имени каталога, который поможет идентифицировать каталог при анализе. +// +Процедура СоздатьВременныйКаталог(Знач Оповещение, Расширение = "") Экспорт + + ФайловаяСистемаКлиент.СоздатьВременныйКаталог(Оповещение, Расширение); + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl index d3433da22..a7a1f9c59 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выполняется перед интерактивным началом работы пользователя с областью данных или в локальном режиме. diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl index 758262b24..7a9689120 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Функция получает цвет стиля по имени элемента стиля. @@ -28,26 +36,4 @@ КонецФункции -// См. ОбщегоНазначенияКлиентСервер.ЭтоВебКлиентПодMacOS. -Функция ЭтоВебКлиентПодMacOS() Экспорт - -#Если Не ВебКлиент Тогда - Возврат Ложь; // Только в веб клиенте этот код работает. -#КонецЕсли - - СистемнаяИнфо = Новый СистемнаяИнформация; - Если СтрНайти(СистемнаяИнфо.ИнформацияПрограммыПросмотра, "Macintosh") <> 0 Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// См. ОбщегоНазначенияКлиент.ТипПлатформыКлиента. -Функция ТипПлатформыКлиента() Экспорт - СистемнаяИнфо = Новый СистемнаяИнформация; - Возврат СистемнаяИнфо.ТипПлатформы; -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 71ffdef37..c807c9a02 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -1,126 +1,50 @@ -//////////////////////////////////////////////////////////////////////////////// -// Клиентские и серверные процедуры и функции общего назначения: -// - для поддержки формирования печатных форм; -// - для работы с файлами; -// - для работы с управляемыми формами; -// - для работы с почтовыми адресами; -// - для работы с отборами динамических списков; -// - прочее. -// -//////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс -// Формирует и выводит сообщение, которое может быть связано с элементом -// управления формы. -// -// Параметры: -// ТекстСообщенияПользователю - Строка - текст сообщения. -// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится. -// Поле - Строка - наименование реквизита формы. -// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). -// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина. -// -// Пример: -// -// 1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта: -// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( -// НСтр("ru = 'Сообщение об ошибке.'"), , -// "ПолеВРеквизитеФормыОбъект", -// "Объект"); -// -// Альтернативный вариант использования в форме объекта: -// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( -// НСтр("ru = 'Сообщение об ошибке.'"), , -// "Объект.ПолеВРеквизитеФормыОбъект"); -// -// 2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы: -// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( -// НСтр("ru = 'Сообщение об ошибке.'"), , -// "ИмяРеквизитаФормы"); -// -// 3. Для вывода сообщения связанного с объектом информационной базы: -// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( -// НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ); -// -// 4. Для вывода сообщения по ссылке на объект информационной базы: -// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( -// НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ); -// -// Случаи некорректного использования: -// 1. Передача одновременно параметров КлючДанных и ПутьКДанным. -// 2. Передача в параметре КлючДанных значения типа отличного от допустимых. -// 3. Установка ссылки без установки поля (и/или пути к данным). -// -Процедура СообщитьПользователю( - Знач ТекстСообщенияПользователю, - Знач КлючДанных = Неопределено, - Знач Поле = "", - Знач ПутьКДанным = "", - Отказ = Ложь) Экспорт - - Сообщение = Новый СообщениеПользователю; - Сообщение.Текст = ТекстСообщенияПользователю; - Сообщение.Поле = Поле; - - ЭтоОбъект = Ложь; - -#Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ МобильныйКлиент Тогда - Если КлючДанных <> Неопределено - И XMLТипЗнч(КлючДанных) <> Неопределено Тогда - ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; - ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0; - КонецЕсли; -#КонецЕсли - - Если ЭтоОбъект Тогда - Сообщение.УстановитьДанные(КлючДанных); - Иначе - Сообщение.КлючДанных = КлючДанных; - КонецЕсли; - - Если НЕ ПустаяСтрока(ПутьКДанным) Тогда - Сообщение.ПутьКДанным = ПутьКДанным; - КонецЕсли; - - Сообщение.Сообщить(); - - Отказ = Истина; - -КонецПроцедуры +#Область ОповещениеПользователя + +// АПК:142-выкл 4 необязательных параметра для совместимости с предыдущими версиями библиотеки. // Добавляет в список ошибок новую ошибку пользователя для дальнейшей отправки с помощью // процедуры СообщитьОшибкиПользователю(). -// Предназначена для накопления списка ошибок с последующей обработкой этого списка перед тем, как вывести +// Предназначена для накопления списка ошибок с последующей обработкой этого списка, перед тем как вывести // пользователю. Полученный список ошибок можно, например, отсортировать по важности, очистить от дублей, -// а также вывести пользователю в ином виде, чем выводит метод СообщитьПользователю, например, в табличный документ. +// а также вывести пользователю в ином виде, чем выводит метод СообщитьПользователю, например в табличный документ. // // Параметры: -// Ошибки - Неопределено - будет создан новый список, -// - значение, установленное при первом вызове этой процедуры со значением Неопределено. -// -// ПолеОшибки - Строка - значение, которое задается в свойстве Поле объекта СообщениеПользователю. -// Для автоподстановки номера строки должна содержать "%1". -// Например, "Объект.ИНН" или "Объект.Пользователи[%1].Пользователь". -// +// Ошибки - Неопределено - будет создан новый список, +// значение, установленное при первом вызове этой процедуры со значением Неопределено. +// ПолеОшибки - Строка - значение, которое задается в свойстве Поле объекта СообщениеПользователю. +// Для автоподстановки номера строки должна содержать "%1". +// Например, "Объект.ИНН" или "Объект.Пользователи[%1].Пользователь". // ТекстДляОднойОшибки - Строка - текст ошибки для случая, когда ГруппаОшибок в коллекции только одна, -// например, НСтр("ru = 'Пользователь не выбран.'"). -// -// ГруппаОшибок - Произвольный - используется для выбора либо текста для одной ошибки, -// либо текста для нескольких ошибок, например, имя "Объект.Пользователи". -// Если значение не заполнено, тогда используется текст для одной ошибки. -// -// НомерСтроки - Число - значение от 0 ... , определяющее номер строки, который нужно подставить -// в строку ПолеОшибки и в ТекстДляНесколькихОшибок (подставляется НомерСтроки + 1). -// +// например НСтр("ru = 'Пользователь не выбран.'"). +// ГруппаОшибок - Произвольный - используется для выбора либо текста для одной ошибки, +// либо текста для нескольких ошибок, например, имя "Объект.Пользователи". +// Если значение не заполнено, тогда используется текст для одной ошибки. +// НомерСтроки - Число - значение от 0 ... , определяющее номер строки, который нужно подставить +// в строку ПолеОшибки и в ТекстДляНесколькихОшибок (подставляется НомерСтроки + 1). // ТекстДляНесколькихОшибок - Строка - текст ошибки для случая, когда добавлено несколько ошибок с одинаковым -// свойством ГруппаОшибок, например, НСтр("ru = 'Пользователь в строке %1 не выбран.'"). +// свойством ГруппаОшибок, например, НСтр("ru = 'Пользователь в строке %1 не выбран.'"). +// ИндексСтроки - Неопределено - совпадает со значением параметра НомерСтроки. +// Число - значение от 0 ... , определяющее номер строки, который нужно подставить +// в строку ПолеОшибки. // -// ИндексСтроки - Неопределено - совпадает со значением параметра НомерСтроки. -// Число - значение от 0 ... , определяющее номер строки, который нужно подставить -// в строку ПолеОшибки. -// -Процедура ДобавитьОшибкуПользователю(Ошибки, ПолеОшибки, ТекстДляОднойОшибки, ГруппаОшибок, НомерСтроки = 0, ТекстДляНесколькихОшибок = "", ИндексСтроки = Неопределено) Экспорт +Процедура ДобавитьОшибкуПользователю( + Ошибки, + ПолеОшибки, + ТекстДляОднойОшибки, + ГруппаОшибок = Неопределено, + НомерСтроки = 0, + ТекстДляНесколькихОшибок = "", + ИндексСтроки = Неопределено) Экспорт Если Ошибки = Неопределено Тогда Ошибки = Новый Структура; @@ -141,23 +65,25 @@ КонецЕсли; Ошибка = Новый Структура; - Ошибка.Вставить("ПолеОшибки", ПолеОшибки); - Ошибка.Вставить("ТекстДляОднойОшибки", ТекстДляОднойОшибки); - Ошибка.Вставить("ГруппаОшибок", ГруппаОшибок); - Ошибка.Вставить("НомерСтроки", НомерСтроки); + Ошибка.Вставить("ПолеОшибки", ПолеОшибки); + Ошибка.Вставить("ТекстДляОднойОшибки", ТекстДляОднойОшибки); + Ошибка.Вставить("ГруппаОшибок", ГруппаОшибок); + Ошибка.Вставить("НомерСтроки", НомерСтроки); Ошибка.Вставить("ТекстДляНесколькихОшибок", ТекстДляНесколькихОшибок); - Ошибка.Вставить("ИндексСтроки", ИндексСтроки); + Ошибка.Вставить("ИндексСтроки", ИндексСтроки); Ошибки.СписокОшибок.Добавить(Ошибка); КонецПроцедуры +// АПК:142-вкл + // Выводит накопленные методом ДобавитьОшибкуПользователю ошибки, при этом использует нужные шаблоны текстов ошибок // в зависимости от количества однотипных ошибок. // // Параметры: // Ошибки - Неопределено, Структура - коллекция ошибок. -// Отказ - Булево - устанавливается Истина, если ошибки сообщались. +// Отказ - Булево - устанавливается Истина, если ошибки сообщались. // Процедура СообщитьОшибкиПользователю(Ошибки, Отказ = Ложь) Экспорт @@ -176,17 +102,17 @@ КонецЕсли; Если Ошибки.ГруппыОшибок[Ошибка.ГруппаОшибок] <> Истина Тогда - - СообщитьПользователю( + ОбщегоНазначенияСлужебныйКлиентСервер.СообщитьПользователю( Ошибка.ТекстДляОднойОшибки, - , + Неопределено, СтрЗаменить(Ошибка.ПолеОшибки, "%1", Формат(ИндексСтроки, "ЧН=0; ЧГ="))); Иначе - СообщитьПользователю( + ОбщегоНазначенияСлужебныйКлиентСервер.СообщитьПользователю( СтрЗаменить(Ошибка.ТекстДляНесколькихОшибок, "%1", Формат(Ошибка.НомерСтроки + 1, "ЧН=0; ЧГ=")), - , + Неопределено, СтрЗаменить(Ошибка.ПолеОшибки, "%1", Формат(ИндексСтроки, "ЧН=0; ЧГ="))); КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -194,46 +120,58 @@ // Формирует текст ошибок заполнения полей и списков. // // Параметры: -// ВидПоля - Строка - может принимать значения: -// Поле, Колонка, Список; -// ВидСообщения - Строка - может принимать значения: -// Заполнение, Корректность; -// ИмяПоля - Строка - имя поля; -// НомерСтроки - Строка, Число - номер строки; -// ИмяСписка - Строка - имя списка; +// ВидПоля - Строка - может принимать значения: Поле, Колонка, Список. +// ВидСообщения - Строка - может принимать значения: Заполнение, Корректность. +// ИмяПоля - Строка - имя поля. +// НомерСтроки - Строка, Число - номер строки. +// ИмяСписка - Строка - имя списка. // ТекстСообщения - Строка - детальная расшифровка ошибки заполнения. // // Возвращаемое значение: // Строка - текст ошибки заполнения. // -Функция ТекстОшибкиЗаполнения(ВидПоля = "Поле", ВидСообщения = "Заполнение", - ИмяПоля = "", НомерСтроки = "", ИмяСписка = "", ТекстСообщения = "") Экспорт - +Функция ТекстОшибкиЗаполнения( + ВидПоля = "Поле", + ВидСообщения = "Заполнение", + ИмяПоля = "", + НомерСтроки = "", + ИмяСписка = "", + ТекстСообщения = "") Экспорт + Если ВРег(ВидПоля) = "ПОЛЕ" Тогда Если ВРег(ВидСообщения) = "ЗАПОЛНЕНИЕ" Тогда - Шаблон = НСтр("ru = 'Поле ""%1"" не заполнено'"); + Шаблон = + НСтр("ru = 'Поле ""%1"" не заполнено'"); ИначеЕсли ВРег(ВидСообщения) = "КОРРЕКТНОСТЬ" Тогда - Шаблон = НСтр("ru = 'Поле ""%1"" заполнено некорректно. - |%4'"); + Шаблон = + НСтр("ru = 'Поле ""%1"" заполнено некорректно. + |%4'"); КонецЕсли; ИначеЕсли ВРег(ВидПоля) = "КОЛОНКА" Тогда Если ВРег(ВидСообщения) = "ЗАПОЛНЕНИЕ" Тогда Шаблон = НСтр("ru = 'Не заполнена колонка ""%1"" в строке %2 списка ""%3""'"); ИначеЕсли ВРег(ВидСообщения) = "КОРРЕКТНОСТЬ" Тогда - Шаблон = НСтр("ru = 'Некорректно заполнена колонка ""%1"" в строке %2 списка ""%3"". - |%4'"); + Шаблон = + НСтр("ru = 'Некорректно заполнена колонка ""%1"" в строке %2 списка ""%3"". + |%4'"); КонецЕсли; ИначеЕсли ВРег(ВидПоля) = "СПИСОК" Тогда Если ВРег(ВидСообщения) = "ЗАПОЛНЕНИЕ" Тогда Шаблон = НСтр("ru = 'Не введено ни одной строки в список ""%3""'"); ИначеЕсли ВРег(ВидСообщения) = "КОРРЕКТНОСТЬ" Тогда - Шаблон = НСтр("ru = 'Некорректно заполнен список ""%3"". - |%4'"); + Шаблон = + НСтр("ru = 'Некорректно заполнен список ""%3"". + |%4'"); КонецЕсли; КонецЕсли; - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяПоля, НомерСтроки, ИмяСписка, ТекстСообщения); - + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + ИмяПоля, + НомерСтроки, + ИмяСписка, + ТекстСообщения); + КонецФункции // Формирует путь к заданной строке НомерСтроки и колонке ИмяРеквизита @@ -243,25 +181,186 @@ // // Параметры: // ИмяТабличнойЧасти - Строка - имя табличной части. -// НомерСтроки - Число - номер строки табличной части. -// ИмяРеквизита - Строка - имя реквизита. +// НомерСтроки - Число - номер строки табличной части. +// ИмяРеквизита - Строка - имя реквизита. // // Возвращаемое значение: // Строка - путь к ячейке таблицы. // -Функция ПутьКТабличнойЧасти(Знач ИмяТабличнойЧасти, Знач НомерСтроки, - Знач ИмяРеквизита) Экспорт - +Функция ПутьКТабличнойЧасти( + Знач ИмяТабличнойЧасти, + Знач НомерСтроки, + Знач ИмяРеквизита) Экспорт + Возврат ИмяТабличнойЧасти + "[" + Формат(НомерСтроки - 1, "ЧН=0; ЧГ=0") + "]." + ИмяРеквизита; - + КонецФункции -// Дополняет таблицу значений-приемник данными из таблицы значений-источник. +#КонецОбласти + +#Область ТекущееОкружение + +//////////////////////////////////////////////////////////////////////////////// +// Функции описания текущего окружения клиентского приложения и операционной системы. + +// Для файлового режима работы возвращает полное имя каталога, в котором расположена информационная база. +// Если режим работы клиент-серверный, то возвращается пустая строка. +// +// Возвращаемое значение: +// Строка - Полное имя каталога, в котором расположена файловая информационная база. +// +Функция КаталогФайловойИнформационнойБазы() Экспорт + + ПараметрыСоединения = СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(СтрокаСоединенияИнформационнойБазы()); + + Если ПараметрыСоединения.Свойство("File") Тогда + Возврат ПараметрыСоединения.File; + КонецЕсли; + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#Область Данные + +// Вызывает исключение с текстом Сообщение, если Условие не равно Истина. +// Применяется для самодиагностики кода. // // Параметры: -// ТаблицаИсточник - ТаблицаЗначений - таблица, из которой будут браться строки для заполнения; -// ТаблицаПриемник - ТаблицаЗначений - таблица, в которую будут добавлены строки из таблицы-источника. -// +// Условие - Булево - если не равно Истина, то вызывается исключение. +// КонтекстПроверки - Строка - например, имя процедуры или функции, в которой выполняется проверка. +// Сообщение - Строка - текст сообщения. Если не задан, то исключение вызывается с сообщением по умолчанию. +// +Процедура Проверить(Знач Условие, Знач Сообщение = "", Знач КонтекстПроверки = "") Экспорт + + Если Условие <> Истина Тогда + + Если ПустаяСтрока(Сообщение) Тогда + ТекстИсключения = НСтр("ru = 'Недопустимая операция'"); // Assertion failed + Иначе + ТекстИсключения = Сообщение; + КонецЕсли; + + Если Не ПустаяСтрока(КонтекстПроверки) Тогда + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 в %2'"), + ТекстИсключения, + КонтекстПроверки); + КонецЕсли; + + ВызватьИсключение ТекстИсключения; + + КонецЕсли; + +КонецПроцедуры + +// Вызывает исключение, если тип значения параметра ИмяПараметра процедуры или функции ИмяПроцедурыИлиФункции +// отличается от ожидаемого. +// Для быстрой диагностики типов параметров, передаваемых в процедуры и функции программного интерфейса. +// +// Параметры: +// ИмяПроцедурыИлиФункции - Строка - имя процедуры или функции, параметр которой проверяется. +// ИмяПараметра - Строка - имя проверяемого параметра процедуры или функции. +// ЗначениеПараметра - Произвольный - фактическое значение параметра. +// ОжидаемыеТипы - ОписаниеТипов, Тип, Массив, ФиксированныйМассив, Соответствие, ФиксированноеСоответствие - тип(ы) +// параметра процедуры или функции. +// ОжидаемыеТипыСвойств - Структура - если ожидаемый тип - структура, то +// в этом параметре можно указать типы ее свойств. +// +Процедура ПроверитьПараметр(Знач ИмяПроцедурыИлиФункции, Знач ИмяПараметра, Знач ЗначениеПараметра, + Знач ОжидаемыеТипы, Знач ОжидаемыеТипыСвойств = Неопределено) Экспорт + + Контекст = "ОбщегоНазначенияКлиентСервер.ПроверитьПараметр"; + + Проверить( + ТипЗнч(ИмяПроцедурыИлиФункции) = Тип("Строка"), + НСтр("ru = 'Недопустимое значение параметра ИмяПроцедурыИлиФункции'"), + Контекст); + + Проверить( + ТипЗнч(ИмяПараметра) = Тип("Строка"), + НСтр("ru = 'Недопустимое значение параметра ИмяПараметра'"), + Контекст); + + ЭтоКорректныйТип = ЗначениеОжидаемогоТипа(ЗначениеПараметра, ОжидаемыеТипы); + + Проверить( + ЭтоКорректныйТип <> Неопределено, + НСтр("ru = 'Недопустимое значение параметра ОжидаемыеТипы'"), + Контекст); + + Проверить( + ЭтоКорректныйТип, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |Ожидалось: %3; передано значение: %4 (тип %5).'"), + ИмяПараметра, + ИмяПроцедурыИлиФункции, + ПредставлениеТипов(ОжидаемыеТипы), + ?(ЗначениеПараметра <> Неопределено, + ЗначениеПараметра, + НСтр("ru = 'Неопределено'")), + ТипЗнч(ЗначениеПараметра))); + + Если ТипЗнч(ЗначениеПараметра) = Тип("Структура") И ОжидаемыеТипыСвойств <> Неопределено Тогда + + Проверить( + ТипЗнч(ОжидаемыеТипыСвойств) = Тип("Структура"), + НСтр("ru = 'Недопустимое значение параметра ИмяПроцедурыИлиФункции'"), + Контекст); + + Для каждого Свойство Из ОжидаемыеТипыСвойств Цикл + + ОжидаемоеИмяСвойства = Свойство.Ключ; + ОжидаемыйТипСвойства = Свойство.Значение; + ЗначениеСвойства = Неопределено; + + Проверить( + ЗначениеПараметра.Свойство(ОжидаемоеИмяСвойства, ЗначениеСвойства), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра %1 (Структура) в %2. + |В структуре ожидалось свойство %3 (тип %4).'"), + ИмяПараметра, + ИмяПроцедурыИлиФункции, + ОжидаемоеИмяСвойства, + ОжидаемыйТипСвойства)); + + ЭтоКорректныйТип = ЗначениеОжидаемогоТипа(ЗначениеСвойства, ОжидаемыйТипСвойства); + + Проверить( + ЭтоКорректныйТип, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение свойства %1 в параметре %2 (Структура) в %3. + |Ожидалось: %4; передано значение: %5 (тип %6).'"), + ОжидаемоеИмяСвойства, + ИмяПараметра, + ИмяПроцедурыИлиФункции, + ПредставлениеТипов(ОжидаемыеТипы), + ?(ЗначениеСвойства <> Неопределено, + ЗначениеСвойства, + НСтр("ru = 'Неопределено'")), + ТипЗнч(ЗначениеСвойства))); + + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Дополняет таблицу значений - приемник данными из таблицы значений - источника. +// Типы ТаблицаЗначений, ДеревоЗначений, ТабличнаяЧасть не доступны на клиенте. +// +// Параметры: +// ТаблицаИсточник - ТаблицаЗначений, +// ДеревоЗначений, +// ТабличнаяЧасть, +// ДанныеФормыКоллекция - таблица, из которой будут браться строки для заполнения; +// ТаблицаПриемник - ТаблицаЗначений, +// ДеревоЗначений, +// ТабличнаяЧасть, +// ДанныеФормыКоллекция - таблица, в которую будут добавлены строки из таблицы-источника. +// Процедура ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник) Экспорт Для Каждого СтрокаТаблицыИсточник Из ТаблицаИсточник Цикл @@ -328,10 +427,10 @@ // Параметры: // Приемник - Структура - коллекция, в которую будут добавляться новые значения. // Источник - Структура - коллекция, из которой будут считываться пары Ключ и Значение для заполнения. -// Заменять - Булево, Неопределено - Что делать в местах пересечения ключей источника и приемника: -// Истина - Заменять значения приемника (самый быстрый способ), -// Ложь - Не заменять значения приемника (пропускать), -// Неопределено - Значение по умолчанию. Бросать исключение. +// Заменять - Булево, Неопределено - что делать в местах пересечения ключей источника и приемника: +// Истина - заменять значения приемника (самый быстрый способ), +// Ложь - не заменять значения приемника (пропускать), +// Неопределено - значение по умолчанию. Бросать исключение. // Процедура ДополнитьСтруктуру(Приемник, Источник, Заменять = Неопределено) Экспорт @@ -353,10 +452,10 @@ // Параметры: // Приемник - Соответствие - коллекция, в которую будут добавляться новые значения. // Источник - Соответствие - коллекция, из которой будут считываться пары Ключ и Значение для заполнения. -// Заменять - Булево, Неопределено - Что делать в местах пересечения ключей источника и приемника: -// Истина - Заменять значения приемника (самый быстрый способ), -// Ложь - Не заменять значения приемника (пропускать), -// Неопределено - Значение по умолчанию. Бросать исключение. +// Заменять - Булево, Неопределено - что делать в местах пересечения ключей источника и приемника: +// Истина - заменять значения приемника (самый быстрый способ), +// Ложь - не заменять значения приемника (пропускать), +// Неопределено - значение по умолчанию. Бросать исключение. // Процедура ДополнитьСоответствие(Приемник, Источник, Заменять = Неопределено) Экспорт @@ -392,36 +491,6 @@ КонецФункции -// Снимает один элемент условного оформления, если это список значений. -// -// Параметры: -// УсловноеОформление - УсловноеОформление - условное оформление элемента формы; -// ИдентификаторПользовательскойНастройки - Строка - идентификатор настройки; -// Значение - Произвольный - значение, которое требуется удалить из списка оформления. -// -Процедура СнятьУсловноеОформлениеСпискаЗначений(УсловноеОформление, Знач ИдентификаторПользовательскойНастройки, - Знач Значение) Экспорт - - Для каждого ЭлементУсловногоОформления Из УсловноеОформление.Элементы Цикл - Если ЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда - Если ЭлементУсловногоОформления.Отбор.Элементы.Количество() = 0 Тогда - Возврат; - КонецЕсли; - ЭлементСписокОтбора = ЭлементУсловногоОформления.Отбор.Элементы[0]; - Если ЭлементСписокОтбора.ПравоеЗначение = Неопределено Тогда - Возврат; - КонецЕсли; - ЭлементСписка = ЭлементСписокОтбора.ПравоеЗначение.НайтиПоЗначению(Значение); - Если ЭлементСписка <> Неопределено Тогда - ЭлементСписокОтбора.ПравоеЗначение.Удалить(ЭлементСписка); - КонецЕсли; - ЭлементСписокОтбора.ПравоеЗначение = ЭлементСписокОтбора.ПравоеЗначение; - Возврат; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - // Удаляет все вхождения переданного значения из массива. // // Параметры: @@ -502,52 +571,8 @@ Возврат Результат; КонецФункции -// Заполняет коллекцию-приемник значениями из коллекции-источник. -// В качестве коллекций источника и приемника могут выступать типы: -// ТаблицаЗначений; ДеревоЗначений; СписокЗначений и пр. -// -// Параметры: -// КоллекцияИсточник - ЛюбаяКоллекция - коллекция значений, которая является источником для заполнения данных; -// КоллекцияПриемник - ЛюбаяКоллекция - коллекция значений, которая является приемником для заполнения данных. -// -Процедура ЗаполнитьКоллекциюСвойств(КоллекцияИсточник, КоллекцияПриемник) Экспорт - - Для Каждого Элемент Из КоллекцияИсточник Цикл - - ЗаполнитьЗначенияСвойств(КоллекцияПриемник.Добавить(), Элемент); - - КонецЦикла; - -КонецПроцедуры - -// Получает массив значений из отмеченных элементов списка значений. -// -// Параметры: -// Список - СписокЗначений - список значений из которого будет формироваться массив значений; -// -// Возвращаемое значение: -// Массив - массив значений из отмеченных элементов списка значений. -// -Функция ОтмеченныеЭлементы(Список) Экспорт - - // Возвращаемое значение функции. - Массив = Новый Массив; - - Для Каждого Элемент Из Список Цикл - - Если Элемент.Пометка Тогда - - Массив.Добавить(Элемент.Значение); - - КонецЕсли; - - КонецЦикла; - - Возврат Массив; -КонецФункции - // Вычисляет разность массивов. Разностью массивов А и В является массив, содержащий -// все элементы массива А не существующие в массиве В. +// все элементы массива А, не существующие в массиве В. // // Параметры: // Массив - Массив - массив элементов, из которого необходимо выполнить вычитание; @@ -580,189 +605,6 @@ КонецФункции -// Преобразует РасписаниеРегламентногоЗадания в структуру. -// -// Параметры: -// Расписание - РасписаниеРегламентногоЗадания - исходное расписание. -// -// Возвращаемое значение: -// Структура - расписание в виде структуры. -// -Функция РасписаниеВСтруктуру(Знач Расписание) Экспорт - - ЗначениеРасписания = Расписание; - Если ЗначениеРасписания = Неопределено Тогда - ЗначениеРасписания = Новый РасписаниеРегламентногоЗадания(); - КонецЕсли; - СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце," - + "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней"; - Результат = Новый Структура(СписокПолей); - ЗаполнитьЗначенияСвойств(Результат, ЗначениеРасписания, СписокПолей); - ДетальныеРасписанияДня = Новый Массив; - Для каждого РасписаниеДля Из Расписание.ДетальныеРасписанияДня Цикл - ДетальныеРасписанияДня.Добавить(РасписаниеВСтруктуру(РасписаниеДля)); - КонецЦикла; - Результат.Вставить("ДетальныеРасписанияДня", ДетальныеРасписанияДня); - Возврат Результат; - -КонецФункции - -// Преобразует структуру в РасписаниеРегламентногоЗадания. -// -// Параметры: -// СтруктураРасписания - Структура - расписание в виде структуры. -// -// Возвращаемое значение: -// РасписаниеРегламентногоЗадания - расписание. -// -Функция СтруктураВРасписание(Знач СтруктураРасписания) Экспорт - - Если СтруктураРасписания = Неопределено Тогда - Возврат Новый РасписаниеРегламентногоЗадания(); - КонецЕсли; - СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце," - + "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней"; - Результат = Новый РасписаниеРегламентногоЗадания; - ЗаполнитьЗначенияСвойств(Результат, СтруктураРасписания, СписокПолей); - ДетальныеРасписанияДня = Новый Массив; - Для каждого Расписание Из СтруктураРасписания.ДетальныеРасписанияДня Цикл - ДетальныеРасписанияДня.Добавить(СтруктураВРасписание(Расписание)); - КонецЦикла; - Результат.ДетальныеРасписанияДня = ДетальныеРасписанияДня; - Возврат Результат; - -КонецФункции - -// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, -// с учетом типов дочерних элементов. При этом содержимое значений объектных типов -// (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. -// -// Параметры: -// Источник - Структура, Соответствие, Массив, СписокЗначений, ТаблицаЗначений - объект, который необходимо -// скопировать. -// -// Возвращаемое значение: -// Структура, Соответствие, Массив, СписокЗначений, ТаблицаЗначений - копия объекта, переданного в параметре Источник. -// -Функция СкопироватьРекурсивно(Источник) Экспорт - - Перем Приемник; - - ТипИсточника = ТипЗнч(Источник); - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Если ТипИсточника = Тип("ТаблицаЗначений") Тогда - Возврат Источник.Скопировать(); - КонецЕсли; -#КонецЕсли - Если ТипИсточника = Тип("Структура") Тогда - Приемник = СкопироватьСтруктуру(Источник); - ИначеЕсли ТипИсточника = Тип("Соответствие") Тогда - Приемник = СкопироватьСоответствие(Источник); - ИначеЕсли ТипИсточника = Тип("Массив") Тогда - Приемник = СкопироватьМассив(Источник); - ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда - Приемник = СкопироватьСписокЗначений(Источник); - Иначе - Приемник = Источник; - КонецЕсли; - - Возврат Приемник; - -КонецФункции - -// Создает копию значения типа Структура, рекурсивно, с учетом типов значений свойств. -// Если свойства структуры содержат значения объектных типов (СправочникОбъект, ДокументОбъект и т.п.), -// то их содержимое не копируются, а возвращаются ссылки на исходный объект. -// -// Параметры: -// СтруктураИсточник - Структура - копируемая структура. -// -// Возвращаемое значение: -// Структура - копия исходной структуры. -// -Функция СкопироватьСтруктуру(СтруктураИсточник) Экспорт - - СтруктураРезультат = Новый Структура; - - Для Каждого КлючИЗначение Из СтруктураИсточник Цикл - СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение)); - КонецЦикла; - - Возврат СтруктураРезультат; - -КонецФункции - -// Создает копию значения типа Соответствие, рекурсивно, с учетом типов значений. -// Если значения соответствия содержат значения объектных типов (СправочникОбъект, ДокументОбъект и т.п.), -// то их содержимое не копируются, а возвращаются ссылки на исходный объект. -// -// Параметры: -// СоответствиеИсточник - Соответствие - соответствие, копию которого необходимо получить. -// -// Возвращаемое значение: -// Соответствие - копия исходного соответствия. -// -Функция СкопироватьСоответствие(СоответствиеИсточник) Экспорт - - СоответствиеРезультат = Новый Соответствие; - - Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл - СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение)); - КонецЦикла; - - Возврат СоответствиеРезультат; - -КонецФункции - -// Создает копию значения типа Массив, рекурсивно, с учетом типов значений элементов массива. -// Если элементы массива содержат значения объектных типов (СправочникОбъект, ДокументОбъект и т.п.), -// то их содержимое не копируются, а возвращаются ссылки на исходный объект. -// -// Параметры: -// МассивИсточник - Массив - массив, копию которого необходимо получить. -// -// Возвращаемое значение: -// Массив - копия исходного массива. -// -Функция СкопироватьМассив(МассивИсточник) Экспорт - - МассивРезультат = Новый Массив; - - Для Каждого Элемент Из МассивИсточник Цикл - МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент)); - КонецЦикла; - - Возврат МассивРезультат; - -КонецФункции - -// Создает копию значения типа СписокЗначений, рекурсивно, с учетом типов его значений. -// Если в списке значений есть значения объектных типов (СправочникОбъект, ДокументОбъект и т.п.), -// то их содержимое не копируются, а возвращаются ссылки на исходный объект. -// -// Параметры: -// СписокИсточник - СписокЗначений - список значений, копию которого необходимо получить. -// -// Возвращаемое значение: -// СписокЗначений - копия исходного списка значений. -// -Функция СкопироватьСписокЗначений(СписокИсточник) Экспорт - - СписокРезультат = Новый СписокЗначений; - - Для Каждого ЭлементСписка Из СписокИсточник Цикл - СписокРезультат.Добавить( - СкопироватьРекурсивно(ЭлементСписка.Значение), - ЭлементСписка.Представление, - ЭлементСписка.Пометка, - ЭлементСписка.Картинка); - КонецЦикла; - - Возврат СписокРезультат; - -КонецФункции - // Сравнивает элементы списков значений или массивов по значениям. // // Параметры: @@ -813,41 +655,71 @@ КонецФункции -// Процедура управляет состояние поля табличного документа. +// Получает строку, содержащую ключи структуры, разделенные символом разделителя. // // Параметры: -// ПолеТабличногоДокумента - ПолеФормы - поле формы с видом ПолеТабличногоДокумента, -// для которого необходимо установить состояние. -// Состояние - Строка - задает вид состояния. +// Структура - Структура - структура, ключи которой преобразуются в строку. +// Разделитель - Строка - разделитель, который вставляется в строку между ключами структуры. // -Процедура УстановитьСостояниеПоляТабличногоДокумента(ПолеТабличногоДокумента, Состояние = "НеИспользовать") Экспорт +// Возвращаемое значение: +// Строка - строка, содержащая ключи структуры разделенные разделителем. +// +Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт - Если ТипЗнч(ПолеТабличногоДокумента) = Тип("ПолеФормы") - И ПолеТабличногоДокумента.Вид = ВидПоляФормы.ПолеТабличногоДокумента Тогда - ОтображениеСостояния = ПолеТабличногоДокумента.ОтображениеСостояния; - Если ВРег(Состояние) = "НЕИСПОЛЬЗОВАТЬ" Тогда - ОтображениеСостояния.Видимость = Ложь; - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; - ОтображениеСостояния.Картинка = Новый Картинка; - ОтображениеСостояния.Текст = ""; - ИначеЕсли ВРег(Состояние) = "НЕАКТУАЛЬНОСТЬ" Тогда - ОтображениеСостояния.Видимость = Истина; - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; - ОтображениеСостояния.Картинка = Новый Картинка; - ОтображениеСостояния.Текст = НСтр("ru = 'Отчет не сформирован. Нажмите ""Сформировать"" для получения отчета.'");; - ИначеЕсли ВРег(Состояние) = "ФОРМИРОВАНИЕОТЧЕТА" Тогда - ОтображениеСостояния.Видимость = Истина; - ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; - ОтображениеСостояния.Картинка = БиблиотекаКартинок.ДлительнаяОперация48; - ОтображениеСостояния.Текст = НСтр("ru = 'Отчет формируется...'"); - Иначе - ВызватьИсключение(НСтр("ru = 'Недопустимое значение параметра (параметр номер ''2'')'")); - КонецЕсли; - Иначе - ВызватьИсключение(НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'")); + Результат = ""; + + Для Каждого Элемент Из Структура Цикл + СимволРазделителя = ?(ПустаяСтрока(Результат), "", Разделитель); + Результат = Результат + СимволРазделителя + Элемент.Ключ; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает значение свойства структуры. +// +// Параметры: +// Структура - Структура, ФиксированнаяСтруктура - Объект, из которого необходимо прочитать значение ключа. +// Ключ - Строка - Имя свойства структуры, для которого необходимо прочитать значение. +// ЗначениеПоУмолчанию - Произвольный - Необязательный. Возвращается когда в структуре нет значения по указанному +// ключу. +// Для скорости рекомендуется передавать только быстро вычисляемые значения (например примитивные типы), +// а инициализацию более тяжелых значений выполнять после проверки полученного значения (только если это +// требуется). +// +// Возвращаемое значение: +// Произвольный - Значение свойства структуры. ЗначениеПоУмолчанию если в структуре нет указанного свойства. +// +Функция СвойствоСтруктуры(Структура, Ключ, ЗначениеПоУмолчанию = Неопределено) Экспорт + + Если Структура = Неопределено Тогда + Возврат ЗначениеПоУмолчанию; КонецЕсли; -КонецПроцедуры + Результат = ЗначениеПоУмолчанию; + Если Структура.Свойство(Ключ, Результат) Тогда + Возврат Результат; + Иначе + Возврат ЗначениеПоУмолчанию; + КонецЕсли; + +КонецФункции + +// Возвращает пустой уникальный идентификатор. +// +// Возвращаемое значение: +// УникальныйИдентификатор - 00000000-0000-0000-0000-000000000000 +// +Функция ПустойУникальныйИдентификатор() Экспорт + + Возврат Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + +КонецФункции + +#КонецОбласти + +#Область ВерсионированиеКонфигураций // Получает номер версии конфигурации без номера сборки. // @@ -944,238 +816,123 @@ КонецФункции -// Получает строку, содержащую ключи структуры, разделенные символом разделителя. +#КонецОбласти + +#Область Формы + +//////////////////////////////////////////////////////////////////////////////// +// Функции для работы с управляемыми формами. +// + +// Получает значение реквизита формы. // // Параметры: -// Структура - Структура - Структура, ключи которой преобразуются в строку. -// Разделитель - Строка - Разделитель, который вставляется в строку между ключами структуры. +// Форма - УправляемаяФорма - форма. +// ПутьРеквизита - Строка - путь к данным реквизита формы, например: "Объект.МесяцНачисления". // // Возвращаемое значение: -// Строка - Строка, содержащая ключи структуры разделенные разделителем. +// Произвольный - реквизит формы. // -Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт +Функция ПолучитьРеквизитФормыПоПути(Форма, ПутьРеквизита) Экспорт - Результат = ""; + МассивИмен = СтрРазделить(ПутьРеквизита, "."); - Для Каждого Элемент Из Структура Цикл - СимволРазделителя = ?(ПустаяСтрока(Результат), "", Разделитель); - Результат = Результат + СимволРазделителя + Элемент.Ключ; + Объект = Форма; + ПоследнееПоле = МассивИмен[МассивИмен.Количество()-1]; + + Для Сч = 0 По МассивИмен.Количество()-2 Цикл + Объект = Объект[МассивИмен[Сч]] КонецЦикла; - Возврат Результат; + Возврат Объект[ПоследнееПоле]; КонецФункции -// Возвращает значение свойства структуры. +// Устанавливает значение реквизиту формы. +// Параметры: +// Форма - УправляемаяФорма - форма-владелец реквизита. +// ПутьРеквизита - Строка - путь к данным, например: "Объект.МесяцНачисления". +// Значение - Произвольный - устанавливаемое значение. +// ТолькоЕслиНеЗаполнен - Булево - позволяет не устанавливать значение реквизита, +// если у него уже установлено какое-то значение. +Процедура УстановитьРеквизитФормыПоПути(Форма, ПутьРеквизита, Значение, ТолькоЕслиНеЗаполнен = Ложь) Экспорт + + МассивИмен = СтрРазделить(ПутьРеквизита, "."); + + Объект = Форма; + ПоследнееПоле = МассивИмен[МассивИмен.Количество()-1]; + + Для Сч = 0 По МассивИмен.Количество()-2 Цикл + Объект = Объект[МассивИмен[Сч]] + КонецЦикла; + Если НЕ ТолькоЕслиНеЗаполнен ИЛИ НЕ ЗначениеЗаполнено(Объект[ПоследнееПоле]) Тогда + Объект[ПоследнееПоле] = Значение; + КонецЕсли; + +КонецПроцедуры + +// Выполняет поиск элемента отбора в коллекции по заданному представлению. // // Параметры: -// Структура - Структура, ФиксированнаяСтруктура - Объект, из которого необходимо прочитать значение ключа. -// Ключ - Строка - Имя свойства структуры, для которого необходимо прочитать значение. -// ЗначениеПоУмолчанию - Произвольный - Необязательный. Возвращается когда в структуре нет значения по указанному -// ключу. -// Для скорости рекомендуется передавать только быстро вычисляемые значения (например примитивные типы), -// а инициализацию более тяжелых значений выполнять после проверки полученного значения (только если это -// требуется). -// -// Возвращаемое значение: -// Произвольный - Значение свойства структуры. ЗначениеПоУмолчанию если в структуре нет указанного свойства. -// -Функция СвойствоСтруктуры(Структура, Ключ, ЗначениеПоУмолчанию = Неопределено) Экспорт - - Если Структура = Неопределено Тогда - Возврат ЗначениеПоУмолчанию; - КонецЕсли; - - Результат = ЗначениеПоУмолчанию; - Если Структура.Свойство(Ключ, Результат) Тогда - Возврат Результат; - Иначе - Возврат ЗначениеПоУмолчанию; - КонецЕсли; - -КонецФункции - -// Возвращает имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение. -// -// Возвращаемое значение: -// Строка - имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение. -// -Функция ИмяCOMСоединителя() Экспорт - СистемнаяИнфо = Новый СистемнаяИнформация; - ПодстрокиВерсии = СтрРазделить(СистемнаяИнфо.ВерсияПриложения, "."); - Возврат "v" + ПодстрокиВерсии[0] + ПодстрокиВерсии[1] + ".COMConnector"; -КонецФункции - -// Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель -// на это соединение. +// КоллекцияЭлементов - КоллекцияЭлементовОтбораКомпоновкиДанных - контейнер с элементами и группами отбора, +// например, Список.Отбор.Элементы или группа в отборе. +// Представление - Строка - представление группы. // +// Возвращаемое значение: +// ЭлементОтбораКомпоновкиДанных - элемент отбора. +// +Функция НайтиЭлементОтбораПоПредставлению(КоллекцияЭлементов, Представление) Экспорт + + ВозвращаемоеЗначение = Неопределено; + + Для каждого ЭлементОтбора Из КоллекцияЭлементов Цикл + Если ЭлементОтбора.Представление = Представление Тогда + ВозвращаемоеЗначение = ЭлементОтбора; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ВозвращаемоеЗначение + +КонецФункции + +// Устанавливает свойство ИмяСвойства элемента формы с именем ИмяЭлемента в значение Значение. +// Применяется в тех случаях, когда элемента формы может не быть на форме из-за отсутствия прав у пользователя +// на объект, реквизит объекта или команду. +// // Параметры: -// Параметры - Структура - параметры для установки внешнего соединения с информационной базой. -// Свойства см. в функции -// ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения): -// -// * ВариантРаботыИнформационнойБазы - Число - Вариант работы информационной базы: 0 - файловый; 1 - -// клиент-серверный; -// * КаталогИнформационнойБазы - Строка - Каталог информационной базы для файлового режима работы; -// * ИмяСервера1СПредприятия - Строка - Имя сервера1С:Предприятия; -// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - Имя информационной базы на сервере1С:Предприятия; -// * АутентификацияОперационнойСистемы - Булево - Признак аутентификации операционной системы при создании -// внешнего подключения к информационной базе; -// * ИмяПользователя - Строка - Имя пользователя информационной базы; -// * ПарольПользователя - Строка - Пароль пользователя информационной базы. +// ЭлементыФормы - ВсеЭлементыФормы, ЭлементыФормы - коллекция элементов управляемой формы. +// ИмяЭлемента - Строка - имя элемента формы. +// ИмяСвойства - Строка - имя устанавливаемого свойства элемента формы. +// Значение - Произвольный - новое значение элемента. // -// СтрокаСообщенияОбОшибке - Строка - если в процессе установки внешнего соединения возникает ошибка, -// то подробное описание ошибки помещается в этот параметр. -// ОшибкаПодключенияКомпоненты - Булево - (возвращаемый параметр) устанавливается Истина, если была ошибка при подключении. -// -// Возвращаемое значение: -// COMОбъект, Неопределенно - в случае успешной установки внешнего соединения возвращается указатель на COM-объект соединения; -// в случае ошибки возвращается Неопределенно. -// -Функция УстановитьВнешнееСоединение(Параметры, СтрокаСообщенияОбОшибке = "", ОшибкаПодключенияКомпоненты = Ложь) Экспорт - Результат = УстановитьВнешнееСоединениеСБазой(Параметры); - ОшибкаПодключенияКомпоненты = Результат.ОшибкаПодключенияКомпоненты; - СтрокаСообщенияОбОшибке = Результат.ПодробноеОписаниеОшибки; +Процедура УстановитьСвойствоЭлементаФормы(ЭлементыФормы, ИмяЭлемента, ИмяСвойства, Значение) Экспорт - Возврат Результат.Соединение; -КонецФункции + ЭлементФормы = ЭлементыФормы.Найти(ИмяЭлемента); + Если ЭлементФормы <> Неопределено И ЭлементФормы[ИмяСвойства] <> Значение Тогда + ЭлементФормы[ИмяСвойства] = Значение; + КонецЕсли; + +КонецПроцедуры -// Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель -// на это соединение. -// -// Параметры: -// Параметры - Структура - параметры для установки внешнего соединения с информационной базой. -// Свойства см. в функции -// ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения): +// Возвращает значение свойства ИмяСвойства элемента формы с именем ИмяЭлемента. +// Применяется в тех случаях, когда элемент формы может не быть на форме из-за отсутствия прав у пользователя +// на объект, реквизит объекта или команду. // -// * ВариантРаботыИнформационнойБазы - Число - Вариант работы информационной базы: 0 - файловый; 1 - -// клиент-серверный; -// * КаталогИнформационнойБазы - Строка - Каталог информационной базы для файлового режима работы; -// * ИмяСервера1СПредприятия - Строка - Имя сервера1С:Предприятия; -// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - Имя информационной базы на сервере1С:Предприятия; -// * АутентификацияОперационнойСистемы - Булево - Признак аутентификации операционной системы при создании -// внешнего подключения к информационной базе; -// * ИмяПользователя - Строка - Имя пользователя информационной базы; -// * ПарольПользователя - Строка - Пароль пользователя информационной базы. +// Параметры: +// ЭлементыФормы - ВсеЭлементФормы, ЭлементыФормы - коллекция элементов управляемой формы. +// ИмяЭлемента - Строка - имя элемента формы. +// ИмяСвойства - Строка - имя свойства элемента формы. // // Возвращаемое значение: -// Структура - информация о соединении: -// * Соединение - COMОбъект, Неопределено - указатель на COM-объект соединения или Неопределено в -// случае ошибки; -// * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; -// * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; -// * ОшибкаПодключенияКомпоненты - Булево - флаг ошибки подключения COM. -// -Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт +// Произвольный - значение свойства ИмяСвойства элемента формы ИмяЭлемента. +// +Функция ЗначениеСвойстваЭлементаФормы(ЭлементыФормы, ИмяЭлемента, ИмяСвойства) Экспорт - Результат = Новый Структура; - Результат.Вставить("Соединение"); - Результат.Вставить("КраткоеОписаниеОшибки", ""); - Результат.Вставить("ПодробноеОписаниеОшибки", ""); - Результат.Вставить("ОшибкаПодключенияКомпоненты", Ложь); + ЭлементФормы = ЭлементыФормы.Найти(ИмяЭлемента); + Возврат ?(ЭлементФормы <> Неопределено, ЭлементФормы[ИмяСвойства], Неопределено); - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ПодключениеНедоступно = ОбщегоНазначения.ЭтоLinuxСервер(); - КраткоеОписаниеОшибки = НСтр("ru = 'Прямое подключение к информационной базе недоступно на сервере под управлением ОС Linux.'"); - #Иначе - ПодключениеНедоступно = ЭтоLinuxКлиент() Или ЭтоOSXКлиент(); - КраткоеОписаниеОшибки = НСтр("ru = 'Прямое подключение к информационной базе доступно только на клиенте под управлением ОС Windows.'"); - #КонецЕсли - - Если ПодключениеНедоступно Тогда - Результат.Соединение = Неопределено; - Результат.КраткоеОписаниеОшибки = КраткоеОписаниеОшибки; - Результат.ПодробноеОписаниеОшибки = КраткоеОписаниеОшибки; - Возврат Результат; - КонецЕсли; - - Попытка - COMConnector = Новый COMObject(ИмяCOMСоединителя()); // "V83.COMConnector" - Исключение - Информация = ИнформацияОбОшибке(); - СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось подключится к другой программе: %1'"); - - Результат.ОшибкаПодключенияКомпоненты = Истина; - Результат.ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация)); - Результат.КраткоеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация)); - - Возврат Результат; - КонецПопытки; - - ФайловыйВариантРаботы = Параметры.ВариантРаботыИнформационнойБазы = 0; - - // Проверка корректности указания параметров. - ОшибкаПроверкиЗаполнения = Ложь; - Если ФайловыйВариантРаботы Тогда - - Если ПустаяСтрока(Параметры.КаталогИнформационнойБазы) Тогда - СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задано месторасположение каталога информационной базы.'"); - ОшибкаПроверкиЗаполнения = Истина; - КонецЕсли; - - Иначе - - Если ПустаяСтрока(Параметры.ИмяСервера1СПредприятия) Или ПустаяСтрока(Параметры.ИмяИнформационнойБазыНаСервере1СПредприятия) Тогда - СтрокаСообщенияОбОшибке = НСтр("ru = 'Не заданы обязательные параметры подключения: ""Имя сервера""; ""Имя информационной базы на сервере"".'"); - ОшибкаПроверкиЗаполнения = Истина; - КонецЕсли; - - КонецЕсли; - - Если ОшибкаПроверкиЗаполнения Тогда - - Результат.ПодробноеОписаниеОшибки = СтрокаСообщенияОбОшибке; - Результат.КраткоеОписаниеОшибки = СтрокаСообщенияОбОшибке; - Возврат Результат; - - КонецЕсли; - - // Формирование строки соединения. - ШаблонСтрокиСоединения = "[СтрокаБазы][СтрокаАутентификации]"; - - Если ФайловыйВариантРаботы Тогда - СтрокаБазы = "File = ""&КаталогИнформационнойБазы"""; - СтрокаБазы = СтрЗаменить(СтрокаБазы, "&КаталогИнформационнойБазы", Параметры.КаталогИнформационнойБазы); - Иначе - СтрокаБазы = "Srvr = ""&ИмяСервера1СПредприятия""; Ref = ""&ИмяИнформационнойБазыНаСервере1СПредприятия"""; - СтрокаБазы = СтрЗаменить(СтрокаБазы, "&ИмяСервера1СПредприятия", Параметры.ИмяСервера1СПредприятия); - СтрокаБазы = СтрЗаменить(СтрокаБазы, "&ИмяИнформационнойБазыНаСервере1СПредприятия", Параметры.ИмяИнформационнойБазыНаСервере1СПредприятия); - КонецЕсли; - - Если Параметры.АутентификацияОперационнойСистемы Тогда - СтрокаАутентификации = ""; - Иначе - - Если СтрНайти(Параметры.ИмяПользователя, """") Тогда - Параметры.ИмяПользователя = СтрЗаменить(Параметры.ИмяПользователя, """", """"""); - КонецЕсли; - - Если СтрНайти(Параметры.ПарольПользователя, """") Тогда - Параметры.ПарольПользователя = СтрЗаменить(Параметры.ПарольПользователя, """", """"""); - КонецЕсли; - - СтрокаАутентификации = "; Usr = ""&ИмяПользователя""; Pwd = ""&ПарольПользователя"""; - СтрокаАутентификации = СтрЗаменить(СтрокаАутентификации, "&ИмяПользователя", Параметры.ИмяПользователя); - СтрокаАутентификации = СтрЗаменить(СтрокаАутентификации, "&ПарольПользователя", Параметры.ПарольПользователя); - КонецЕсли; - - СтрокаСоединения = СтрЗаменить(ШаблонСтрокиСоединения, "[СтрокаБазы]", СтрокаБазы); - СтрокаСоединения = СтрЗаменить(СтрокаСоединения, "[СтрокаАутентификации]", СтрокаАутентификации); - - Попытка - Результат.Соединение = COMConnector.Connect(СтрокаСоединения); - Исключение - Информация = ИнформацияОбОшибке(); - СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось подключиться к другой программе: %1'"); - - Результат.ОшибкаПодключенияКомпоненты = Истина; - Результат.ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация)); - Результат.КраткоеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация)); - КонецПопытки; - - Возврат Результат; - -КонецФункции +КонецФункции // Получает картинку для вывода на странице с комментарием в зависимости // от наличия текста в комментарии. @@ -1184,7 +941,7 @@ // Комментарий - Строка - текст комментария. // // Возвращаемое значение: -// Картинка - Картинка, которая должна отображаться на странице с комментарием. +// Картинка - картинка, которая должна отображаться на странице с комментарием. // Функция КартинкаКомментария(Комментарий) Экспорт @@ -1198,712 +955,9 @@ КонецФункции -// Преобразует локальную дату к формату "YYYY-MM-DDThh:mm:ssTZD" согласно ISO 8601. -// -// Параметры: -// ЛокальнаяДата - Дата - дата в часовом поясе сеанса. -// -// Возвращаемое значение: -// Строка - представление даты. -// -Функция ПредставлениеЛокальнойДатыСоСмещением(ЛокальнаяДата) Экспорт - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Смещение = СмещениеСтандартногоВремени(ЧасовойПоясСеанса()); - #Иначе - Смещение = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().СмещениеСтандартногоВремени; - #КонецЕсли - ПредставлениеСмещения = "Z"; - Если Смещение > 0 Тогда - ПредставлениеСмещения = "+"; - ИначеЕсли Смещение < 0 Тогда - ПредставлениеСмещения = "-"; - Смещение = -Смещение; - КонецЕсли; - Если Смещение <> 0 Тогда - ПредставлениеСмещения = ПредставлениеСмещения + Формат('00010101' + Смещение, "ДФ=HH:mm"); - КонецЕсли; - - Возврат Формат(ЛокальнаяДата, "ДФ=yyyy-MM-ddTHH:mm:ss; ДП=0001-01-01T00:00:00") + ПредставлениеСмещения; -КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Функции для работы с файлами. -// - -// Добавляет к переданному пути каталога конечный символ-разделитель, если он отсутствует. -// -// Параметры: -// ПутьКаталога - Строка - путь к каталогу. -// Платформа - ТипПлатформы - параметр устарел, больше не используется. -// -// Возвращаемое значение: -// Строка - путь к каталогу с конечным символом-разделителем. -// -// Пример: -// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог"); // возвращает "C:\Мой каталог\". -// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог\"); // возвращает "C:\Мой каталог\". -// Результат = ДобавитьКонечныйРазделительПути("%APPDATA%"); // возвращает "%APPDATA%\". -// -Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога, Знач Платформа = Неопределено) Экспорт - Если ПустаяСтрока(ПутьКаталога) Тогда - Возврат ПутьКаталога; - КонецЕсли; - - ДобавляемыйСимвол = ПолучитьРазделительПути(); - - Если СтрЗаканчиваетсяНа(ПутьКаталога, ДобавляемыйСимвол) Тогда - Возврат ПутьКаталога; - Иначе - Возврат ПутьКаталога + ДобавляемыйСимвол; - КонецЕсли; -КонецФункции - -// Составляет полное имя файла из имени каталога и имени файла. -// -// Параметры: -// ИмяКаталога - Строка - путь к каталогу файла на диске. -// ИмяФайла - Строка - имя файла, без имени каталога. -// -// Возвращаемое значение: -// Строка - полное имя файла с учетом каталога. -// -Функция ПолучитьПолноеИмяФайла(Знач ИмяКаталога, Знач ИмяФайла) Экспорт - - Если НЕ ПустаяСтрока(ИмяФайла) Тогда - - Слэш = ""; - Если (Прав(ИмяКаталога, 1) <> "\") И (Прав(ИмяКаталога, 1) <> "/") Тогда - Слэш = ?(СтрНайти(ИмяКаталога, "\") = 0, "/", "\"); - КонецЕсли; - - Возврат ИмяКаталога + Слэш + ИмяФайла; - - Иначе - - Возврат ИмяКаталога; - - КонецЕсли; - -КонецФункции - -// Раскладывает полное имя файла на составляющие. -// -// Параметры: -// ПолноеИмяФайла - Строка - полный путь к файлу. -// ЭтоПапка - Булево - признак того, что требуется разложить полное имя папки, а не файла. -// -// Возвращаемое значение: -// Структура - имя файла, разложенное на составные части(аналогично свойствам объекта Файл): -// ПолноеИмя - Содержит полный путь к файлу, т.е. полностью соответствует входному параметру ПолноеИмяФайла. -// Путь - Содержит путь к каталогу, в котором лежит файл. -// Имя - Содержит имя файла с расширением, без пути к файлу. -// Расширение - Содержит расширение файла. -// ИмяБезРасширения - Содержит имя файла без расширения и без пути к файлу. -// Пример: если ПолноеИмяФайла = "c:\temp\test.txt", то структура заполнится следующим образом: -// ПолноеИмя: "c:\temp\test.txt". -// Путь: "c:\temp\" -// Имя: "test.txt" -// Расширение: ".txt" -// ИмяБезРасширения: "test". -// -Функция РазложитьПолноеИмяФайла(Знач ПолноеИмяФайла, ЭтоПапка = Ложь) Экспорт - - СтруктураИмениФайла = Новый Структура("ПолноеИмя,Путь,Имя,Расширение,ИмяБезРасширения"); - - // Убираем из полного имени файла завершающий слеш и сохраняем получившееся полное имя в структуре. - Если ЭтоПапка И (Прав(ПолноеИмяФайла, 1) = "/" Или Прав(ПолноеИмяФайла, 1) = "\") Тогда - Если ЭтоПапка Тогда - ПолноеИмяФайла = Сред(ПолноеИмяФайла, 1, СтрДлина(ПолноеИмяФайла) - 1); - Иначе - // Если путь к файлу заканчивается слешем, то у файла нет имени. - СтруктураИмениФайла.Вставить("ПолноеИмя", ПолноеИмяФайла); - СтруктураИмениФайла.Вставить("Путь", ПолноеИмяФайла); - СтруктураИмениФайла.Вставить("Имя", ""); - СтруктураИмениФайла.Вставить("Расширение", ""); - СтруктураИмениФайла.Вставить("ИмяБезРасширения", ""); - Возврат СтруктураИмениФайла; - КонецЕсли; - КонецЕсли; - СтруктураИмениФайла.Вставить("ПолноеИмя", ПолноеИмяФайла); - - // Если полное имя файла оказалось пустым, то остальные параметры структуры возвращаем пустыми. - Если СтрДлина(ПолноеИмяФайла) = 0 Тогда - СтруктураИмениФайла.Вставить("Путь", ""); - СтруктураИмениФайла.Вставить("Имя", ""); - СтруктураИмениФайла.Вставить("Расширение", ""); - СтруктураИмениФайла.Вставить("ИмяБезРасширения", ""); - Возврат СтруктураИмениФайла; - КонецЕсли; - - // Выделяем путь к файлу и имя файла. - Если СтрНайти(ПолноеИмяФайла, "/") > 0 Тогда - ПозицияРазделителя = СтрНайти(ПолноеИмяФайла, "/", НаправлениеПоиска.СКонца); - ИначеЕсли СтрНайти(ПолноеИмяФайла, "\") > 0 Тогда - ПозицияРазделителя = СтрНайти(ПолноеИмяФайла, "\", НаправлениеПоиска.СКонца); - Иначе - ПозицияРазделителя = 0; - КонецЕсли; - СтруктураИмениФайла.Вставить("Путь", Лев(ПолноеИмяФайла, ПозицияРазделителя)); - СтруктураИмениФайла.Вставить("Имя", Сред(ПолноеИмяФайла, ПозицияРазделителя + 1)); - - // Папки не имеют расширений, а для файла выделяем расширение. - Если ЭтоПапка Тогда - СтруктураИмениФайла.Вставить("Расширение", ""); - СтруктураИмениФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.Имя); - Иначе - ПозицияТочки = СтрНайти(СтруктураИмениФайла.Имя, ".", НаправлениеПоиска.СКонца); - Если ПозицияТочки = 0 Тогда - СтруктураИмениФайла.Вставить("Расширение", ""); - СтруктураИмениФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.Имя); - Иначе - СтруктураИмениФайла.Вставить("Расширение", Сред(СтруктураИмениФайла.Имя, ПозицияТочки)); - СтруктураИмениФайла.Вставить("ИмяБезРасширения", Лев(СтруктураИмениФайла.Имя, ПозицияТочки - 1)); - КонецЕсли; - КонецЕсли; - - Возврат СтруктураИмениФайла; - -КонецФункции - -// Разбирает строку URI на составные части и возвращает в виде структуры. -// На основе RFC 3986. -// -// Параметры: -// СтрокаURI - Строка - ссылка на ресурс в формате: -// <схема>://<логин>:<пароль>@<хост>:<порт>/<путь>?<параметры>#<якорь>. -// -// Возвращаемое значение: -// Структура - составные части URI согласно формату: -// * Схема - Строка - схема из URI. -// * Логин - Строка - логин из URI. -// * Пароль - Строка - пароль из URI. -// * ИмяСервера - Строка - часть <хост>:<порт> из URI. -// * Хост - Строка - хост из URI. -// * Порт - Строка - порт из URI. -// * ПутьНаСервере - Строка - часть <путь>?<параметры>#<якорь> из URI. -// -Функция СтруктураURI(Знач СтрокаURI) Экспорт - - СтрокаURI = СокрЛП(СтрокаURI); - - // схема - Схема = ""; - Позиция = СтрНайти(СтрокаURI, "://"); - Если Позиция > 0 Тогда - Схема = НРег(Лев(СтрокаURI, Позиция - 1)); - СтрокаURI = Сред(СтрокаURI, Позиция + 3); - КонецЕсли; - - // Строка соединения и путь на сервере. - СтрокаСоединения = СтрокаURI; - ПутьНаСервере = ""; - Позиция = СтрНайти(СтрокаСоединения, "/"); - Если Позиция > 0 Тогда - ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); - СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); - КонецЕсли; - - // Информация пользователя и имя сервера. - СтрокаАвторизации = ""; - ИмяСервера = СтрокаСоединения; - Позиция = СтрНайти(СтрокаСоединения, "@"); - Если Позиция > 0 Тогда - СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); - ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); - КонецЕсли; - - // логин и пароль - Логин = СтрокаАвторизации; - Пароль = ""; - Позиция = СтрНайти(СтрокаАвторизации, ":"); - Если Позиция > 0 Тогда - Логин = Лев(СтрокаАвторизации, Позиция - 1); - Пароль = Сред(СтрокаАвторизации, Позиция + 1); - КонецЕсли; - - // хост и порт - Хост = ИмяСервера; - Порт = ""; - Позиция = СтрНайти(ИмяСервера, ":"); - Если Позиция > 0 Тогда - Хост = Лев(ИмяСервера, Позиция - 1); - Порт = Сред(ИмяСервера, Позиция + 1); - Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Порт) Тогда - Порт = ""; - КонецЕсли; - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("Схема", Схема); - Результат.Вставить("Логин", Логин); - Результат.Вставить("Пароль", Пароль); - Результат.Вставить("ИмяСервера", ИмяСервера); - Результат.Вставить("Хост", Хост); - Результат.Вставить("Порт", ?(ПустаяСтрока(Порт), Неопределено, Число(Порт))); - Результат.Вставить("ПутьНаСервере", ПутьНаСервере); - - Возврат Результат; - -КонецФункции - -// Функция раскладывает Строку в массив строк, используя "./\" как разделитель. -// -// Параметры: -// Строка - Строка - исходная строка. -// -// Возвращаемое значение: -// Массив - коллекция фрагментов строки. -// -Функция РазложитьСтрокуПоТочкамИСлэшам(Знач Строка) Экспорт - - Перем ТекущаяПозиция; - - Фрагменты = Новый Массив; - - НачальнаяПозиция = 1; - - Для ТекущаяПозиция = 1 По СтрДлина(Строка) Цикл - ТекущийСимвол = Сред(Строка, ТекущаяПозиция, 1); - Если ТекущийСимвол = "." Или ТекущийСимвол = "/" Или ТекущийСимвол = "\" Тогда - ТекущийФрагмент = Сред(Строка, НачальнаяПозиция, ТекущаяПозиция - НачальнаяПозиция); - НачальнаяПозиция = ТекущаяПозиция + 1; - Фрагменты.Добавить(ТекущийФрагмент); - КонецЕсли; - КонецЦикла; - - Если НачальнаяПозиция <> ТекущаяПозиция Тогда - ТекущийФрагмент = Сред(Строка, НачальнаяПозиция, ТекущаяПозиция - НачальнаяПозиция); - Фрагменты.Добавить(ТекущийФрагмент); - КонецЕсли; - - Возврат Фрагменты; - -КонецФункции - -// Выделяет из имени файла его расширение (набор символов после последней точки). -// -// Параметры: -// ИмяФайла - Строка - имя файла с именем каталога или без. -// -// Возвращаемое значение: -// Строка - расширение файла. -// -Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт - - Расширение = ""; - - ПозицияСимвола = СтрДлина(ИмяФайла); - Пока ПозицияСимвола >= 1 Цикл - - Если Сред(ИмяФайла, ПозицияСимвола, 1) = "." Тогда - - Расширение = Сред(ИмяФайла, ПозицияСимвола + 1); - Прервать; - КонецЕсли; - - ПозицияСимвола = ПозицияСимвола - 1; - КонецЦикла; - - Возврат Расширение; - -КонецФункции - -// Преобразует расширение файла в нижний регистр без точки. -// -// Параметры: -// Расширение - Строка - Расширение для преобразования. -// -// Возвращаемое значение: -// Строка - преобразованное расширение. -// -Функция РасширениеБезТочки(Знач Расширение) Экспорт - - Расширение = НРег(СокрЛП(Расширение)); - - Если Сред(Расширение, 1, 1) = "." Тогда - Расширение = Сред(Расширение, 2); - КонецЕсли; - - Возврат Расширение; - -КонецФункции - -// Возвращает имя файла с расширением. -// Если расширение пустое, тогда точка не добавляется. -// -// Параметры: -// ИмяБезРасширения - Строка - имя файла без расширения. -// Расширение - Строка - расширение. -// -// Возвращаемое значение: -// Строка - имя файла с расширением. -// -Функция ПолучитьИмяСРасширением(ИмяБезРасширения, Расширение) Экспорт - - ИмяСРасширением = ИмяБезРасширения; - - Если Расширение <> "" Тогда - ИмяСРасширением = ИмяСРасширением + "." + Расширение; - КонецЕсли; - - Возврат ИмяСРасширением; - -КонецФункции - -// Возвращает строку недопустимых символов. -// Согласно http://en.wikipedia.org/wiki/Filename - в разделе "Reserved characters and words". -// Возвращаемое значение: -// Строка - строка недопустимых символов. -Функция ПолучитьНедопустимыеСимволыВИмениФайла() Экспорт - - НедопустимыеСимволы = """/\[]:;|=?*<>"; - НедопустимыеСимволы = НедопустимыеСимволы + Символы.Таб; - Возврат НедопустимыеСимволы; - -КонецФункции - -// Проверяет наличие недопустимых символов в имени файла. -// -// Параметры: -// ИмяФайла - Строка - имя файла. -// -// Возвращаемое значение: -// Массив - массив обнаруженных в имени файла недопустимых символов. -// Если недопустимых символов не обнаружено - возвращается пустой массив. -Функция НайтиНедопустимыеСимволыВИмениФайла(ИмяФайла) Экспорт - - НедопустимыеСимволы = ПолучитьНедопустимыеСимволыВИмениФайла(); - - МассивНайденныхНедопустимыхСимволов = Новый Массив; - - Для ПозицияСимвола = 1 По СтрДлина(НедопустимыеСимволы) Цикл - ПроверяемыйСимвол = Сред(НедопустимыеСимволы,ПозицияСимвола,1); - Если СтрНайти(ИмяФайла,ПроверяемыйСимвол) <> 0 Тогда - МассивНайденныхНедопустимыхСимволов.Добавить(ПроверяемыйСимвол); - КонецЕсли; - КонецЦикла; - - Возврат МассивНайденныхНедопустимыхСимволов; - -КонецФункции - -// Заменяет недопустимые символы в имени файла. -// -// Параметры: -// ИмяФайла - Строка - исходное имя файла. -// НаЧтоМенять - Строка - строка, на которую необходимо заменить недопустимые символы. -// -// Возвращаемое значение: -// Строка - преобразованное имя файла. -// -Функция ЗаменитьНедопустимыеСимволыВИмениФайла(Знач ИмяФайла, НаЧтоМенять = " ") Экспорт - - Результат = ИмяФайла; - МассивНайденныхНедопустимыхСимволов = НайтиНедопустимыеСимволыВИмениФайла(Результат); - Для Каждого НедопустимыйСимвол Из МассивНайденныхНедопустимыхСимволов Цикл - Результат = СтрЗаменить(Результат, НедопустимыйСимвол, НаЧтоМенять); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Функции для работы с почтовыми адресами. -// - -// Разбирает строку с адресами электронной почты. При разборе проверяет корректность адресов. -// -// Параметры: -// СписокАдресов - Строка - адреса электронной почты, разделитель - запятая, либо точка с запятой: -// Получатель1 <Адрес1>, Получатель 2 <Адрес2>... Получатель N <АдресN>. -// -// Возвращаемое значение: -// Массив - содержит массив структур адресов. -// Поля структуры: -// Псевдоним - Строка - представление адресата. -// Адрес - Строка - найденный и соответствующий требованиям почтовый адрес; -// Если текст, похожий на адрес найден, но не соответствует требованиям -// стандартов, то такой текст записывается в поле "Псевдоним". -// ОписаниеОшибки - Строка - текстовое представление ошибки, либо пустая строка, если ошибок нет. -// -Функция АдресаЭлектроннойПочтыИзСтроки(Знач СписокАдресов) Экспорт - - Результат = Новый Массив; - - // заменяем скобки на пробелы - СимволыСкобок = "<>()[]"; - Строка = ЗаменитьСимволыВСтрокеНаПробелы(СписокАдресов, СимволыСкобок); - - // Приводим разделители к одному виду. - Строка = СтрЗаменить(Строка, ",", ";"); - - // Раскладываем mailbox-list на mailbox'ы. - МассивАдресов = СтрРазделить(Строка, ";", Ложь); - - // Допустимые символы для псевдонима (display-name). - Буквы = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; - Цифры = "0123456789"; - ДополнительныеСимволы = "._- :+"""; - - // Выделяем из строки адреса (mailbox'а) псевдоним (display-name) и адрес (addr-spec). - Для Каждого СтрокаАдреса Из МассивАдресов Цикл - Если ПустаяСтрока(СтрокаАдреса) Тогда - Продолжить; - КонецЕсли; - - Псевдоним = ""; - Адрес = ""; - ОписаниеОшибки = ""; - - Если СтрЧислоВхождений(СтрокаАдреса, "@") <> 1 Тогда - Псевдоним = СтрокаАдреса; - Иначе - // Все, что не подходит в качестве адреса, складываем в псевдоним. - Для Каждого Подстрока Из СтрРазделить(СтрокаАдреса, " ", Ложь) Цикл - Если ПустаяСтрока(Адрес) И АдресЭлектроннойПочтыСоответствуетТребованиям(Подстрока) Тогда - Адрес = Подстрока; - Иначе - Псевдоним = Псевдоним + " " + Подстрока; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Псевдоним = СокрЛП(Псевдоним); - - // проверки - ЕстьНедопустимыеСимволыВПсевдониме = Не СтрокаСодержитТолькоДопустимыеСимволы(НРег(Псевдоним), Буквы + Цифры + ДополнительныеСимволы); - АдресОпределен = Не ПустаяСтрока(Адрес); - ЕстьПризнакНаличияАдресаВСтроке = СтрНайти(СтрокаАдреса, "@") > 0; - - Если АдресОпределен Тогда - Если ЕстьНедопустимыеСимволыВПсевдониме Тогда - ОписаниеОшибки = НСтр("ru = 'Представление содержит недопустимые символы'"); - КонецЕсли; - Иначе - Если ЕстьПризнакНаличияАдресаВСтроке Тогда - ОписаниеОшибки = НСтр("ru = 'Адрес электронной почты содержит ошибки'"); - Иначе - ОписаниеОшибки = НСтр("ru = 'Строка не содержит адреса электронной почты'"); - КонецЕсли; - КонецЕсли; - - СтруктураАдреса = Новый Структура("Псевдоним,Адрес,ОписаниеОшибки", Псевдоним, Адрес, ОписаниеОшибки); - Результат.Добавить(СтруктураАдреса); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Проверяет email адрес на соответствие требованиям стандартов RFC 5321, RFC 5322, -// а также RFC 5335, RFC 5336 и RFC 3696. -// Кроме того, функция ограничивает использование спецсимволов. -// -// Параметры: -// Адрес - Строка - проверяемый email. -// РазрешитьЛокальныеАдреса - Булево - не выдавать ошибку в случае отсутствия зоны домена в адресе. -// -// Возвращаемое значение: -// Булево - Истина, если ошибок нет. -// -Функция АдресЭлектроннойПочтыСоответствуетТребованиям(Знач Адрес, РазрешитьЛокальныеАдреса = Ложь) Экспорт - - // Допустимые символы для email. - Буквы = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; - Цифры = "0123456789"; - СпецСимволы = ".@_-:+"; - - // проверяем символ @ - Если СтрЧислоВхождений(Адрес, "@") <> 1 Тогда - Возврат Ложь; - КонецЕсли; - - // Разрешаем двоеточие только один раз. - Если СтрЧислоВхождений(Адрес, ":") > 1 Тогда - Возврат Ложь; - КонецЕсли; - - // проверяем две точки подряд - Если СтрНайти(Адрес, "..") > 0 Тогда - Возврат Ложь; - КонецЕсли; - - // Приводим строку адреса к нижнему регистру. - Адрес = НРег(Адрес); - - // Проверяем допустимые символы. - Если Не СтрокаСодержитТолькоДопустимыеСимволы(Адрес, Буквы + Цифры + СпецСимволы) Тогда - Возврат Ложь; - КонецЕсли; - - // Разбираем адрес на local-part и domain. - Позиция = СтрНайти(Адрес,"@"); - ЛокальноеИмя = Лев(Адрес, Позиция - 1); - Домен = Сред(Адрес, Позиция + 1); - - // Проверяем на заполненность и допустимость длины. - Если ПустаяСтрока(ЛокальноеИмя) - Или ПустаяСтрока(Домен) - Или СтрДлина(ЛокальноеИмя) > 64 - Или СтрДлина(Домен) > 255 Тогда - - Возврат Ложь; - КонецЕсли; - - // Проверяем наличие спецсимволов в начале и в конце домена. - Если ЕстьСимволыВНачалеВКонце(Домен, СпецСимволы) Тогда - Возврат Ложь; - КонецЕсли; - - // В домене должна быть минимум одна точка. - Если Не РазрешитьЛокальныеАдреса И СтрНайти(Домен,".") = 0 Тогда - Возврат Ложь; - КонецЕсли; - - // В домене не должно быть символа подчеркивания. - Если СтрНайти(Домен,"_") > 0 Тогда - Возврат Ложь; - КонецЕсли; - - // В домене не должно быть символа двоеточие. - Если СтрНайти(Домен,":") > 0 Тогда - Возврат Ложь; - КонецЕсли; - - // В домене не должно быть символа "плюс". - Если СтрНайти(Домен,"+") > 0 Тогда - Возврат Ложь; - КонецЕсли; - - // Выделяем зону (TLD) из имени домена. - Зона = Домен; - Позиция = СтрНайти(Зона,"."); - Пока Позиция > 0 Цикл - Зона = Сред(Зона, Позиция + 1); - Позиция = СтрНайти(Зона,"."); - КонецЦикла; - - // Проверяем зону домена (минимум 2 символа, только буквы). - Возврат РазрешитьЛокальныеАдреса Или СтрДлина(Зона) >= 2 И СтрокаСодержитТолькоДопустимыеСимволы(Зона,Буквы); - -КонецФункции - -// Функция проверяет, что введенная строка с e-mail адресами введена правильно. -// -// Формат строки: -// Z = ИмяПользователя|[Имя Пользователя] [<]пользователь@почтовый_сервер[>], Строка = Z[<разделитель*>Z]. -// -// Прим.: разделитель* - имеется ввиду любой разделитель адресов. -// -// Параметры: -// СтрокаПереданныхАдресов - Строка - правильная строка с почтовыми адресами. -// ВызыватьИсключение - Булево - необходимо передать Ложь, чтобы в случае неуспешного разбора не выдавалось исключение. -// -// Возвращаемое значение: -// Структура - результат разбора: -// * Статус - Булево - успех или неуспех преобразования -// * Значение - Массив - (параметр доступен, если Статус = Истина) коллекция адресов в виде структур: -// ** Адрес - Строка - e-mail получателя. -// ** Представление - Строка - имя получателя. -// * СообщениеОбОшибке - Строка - (параметр доступен, если Статус = Ложь) информация об ошибке. -// -// ВАЖНО: Функция возвращает массив структур, в которых одно поле (любое) -// может быть незаполнено. Может использоваться различными -// подсистемами для собственного сопоставления имени пользователя -// некому e-mail адресу. Поэтому, необходимо перед непосредственной -// отправкой проверить, что поле почтового адреса заполнено. -// -Функция РазобратьСтрокуСПочтовымиАдресами(Знач СтрокаПереданныхАдресов, ВызыватьИсключение = Истина) Экспорт - - Результат = Новый Массив; - - НедопустимыеСимволы = "!#$%^&*()`~|\/="; - - СообщениеНедопустимыеСимволы = НСтр("ru = 'Недопустимый символ ""%1"" в адресе электронной почты ""%2""'"); - СообщениеНеверныйФорматПочтовогоАдреса = НСтр("ru = 'Некорректный адрес электронной почты ""%1""'"); - - СтрокаПереданныхАдресов = СтрЗаменить(СтрокаПереданныхАдресов, ",", ";"); - МассивПодстрокКОбработке = СтрРазделить(СокрЛП(СтрокаПереданныхАдресов), ";", Ложь); - - Для Каждого СтрокаАдреса Из МассивПодстрокКОбработке Цикл - - Индекс = 1; // Номер обрабатываемого символа. - Накопитель = ""; // Накопитель символов, после анализа перемещается либо в полное имя - // либо в почтовый адрес. - ПолноеИмяАдресата = ""; // Переменная, накапливающая имя адресата. - ПочтовыйАдрес = ""; // Переменная, накапливающая e-mail адрес - // 1 - формирование полного имени: ожидаются любые допустимые символы имени адресата - // 2 - формирование почтового адреса: ожидаются любые допустимые символы email адреса - // 3 - завершение формирования очередного почтового адреса - ожидаются символы разделители либо пробелы. - СтадияРазбора = 1; - - Пока Индекс <= СтрДлина(СтрокаАдреса) Цикл - - Символ = Сред(СтрокаАдреса, Индекс, 1); - - Если Символ = " " Тогда - Индекс = ? ((ПропуститьПробелы(СтрокаАдреса, Индекс, " ") - 1) > Индекс, - ПропуститьПробелы(СтрокаАдреса, Индекс, " ") - 1, - Индекс); - Если СтадияРазбора = 1 Тогда - ПолноеИмяАдресата = ПолноеИмяАдресата + Накопитель + " "; - ИначеЕсли СтадияРазбора = 2 Тогда - ПочтовыйАдрес = Накопитель; - СтадияРазбора = 3; - КонецЕсли; - Накопитель = ""; - ИначеЕсли Символ = "@" Тогда - Если СтадияРазбора = 1 Тогда - СтадияРазбора = 2; - - Для ИндексПоискаНС = 1 По СтрДлина(Накопитель) Цикл - Если СтрНайти(НедопустимыеСимволы, Сред(Накопитель, ИндексПоискаНС, 1)) > 0 И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНедопустимыеСимволы, - Сред(Накопитель, ИндексПоискаНС, 1),СтрокаАдреса); - КонецЕсли; - КонецЦикла; - - Накопитель = Накопитель + Символ; - ИначеЕсли СтадияРазбора = 2 И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса); - ИначеЕсли СтадияРазбора = 3 И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса); - КонецЕсли; - Иначе - Если СтадияРазбора = 2 ИЛИ СтадияРазбора = 3 Тогда - Если СтрНайти(НедопустимыеСимволы, Символ) > 0 И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНедопустимыеСимволы,Символ,СтрокаАдреса); - КонецЕсли; - КонецЕсли; - - Накопитель = Накопитель + Символ; - КонецЕсли; - - Индекс = Индекс + 1; - КонецЦикла; - - Если СтадияРазбора = 1 Тогда - ПолноеИмяАдресата = ПолноеИмяАдресата + Накопитель; - ИначеЕсли СтадияРазбора = 2 Тогда - ПочтовыйАдрес = Накопитель; - КонецЕсли; - - Если ПустаяСтрока(ПочтовыйАдрес) И (Не ПустаяСтрока(ПолноеИмяАдресата)) И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса, ПолноеИмяАдресата); - ИначеЕсли СтрЧислоВхождений(ПочтовыйАдрес, "@") <> 1 И ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,ПочтовыйАдрес); - КонецЕсли; - - Если НЕ (ПустаяСтрока(ПолноеИмяАдресата) И ПустаяСтрока(ПочтовыйАдрес)) Тогда - Результат.Добавить(ПроверитьИПодготовитьПочтовыйАдрес(ПолноеИмяАдресата, ПочтовыйАдрес)); - КонецЕсли; - - КонецЦикла; - - Возврат Результат; - -КонецФункции +#Область ДинамическийСписок //////////////////////////////////////////////////////////////////////////////// // Функции для работы с отборами и параметрами динамических списков. @@ -2040,7 +1094,7 @@ // // Параметры: // ОбластьПоиска - КоллекцияЭлементовОтбораКомпоновкиДанных - контейнер с элементами и группами отбора, -// например, Список.Отбор или группа в отборе. +// например Список.Отбор или группа в отборе. // ИмяПоля - Строка - имя поля компоновки данных (заполняется всегда). // Представление - Строка - представление элемента компоновки данных. // ПравоеЗначение - Произвольный - сравниваемое значение. @@ -2182,19 +1236,19 @@ // Добавить или заменить существующий элемент отбора динамического списка. // // Параметры: -// ДинамическийСписок - ДинамическийСписок - Список, в котором требуется установить отбор. -// ИмяПоля - Строка - Поле, по которому необходимо установить отбор. -// ПравоеЗначение - Произвольный - Значение отбора. -// Необязательный. Значение по умолчанию: Неопределено. +// ДинамическийСписок - ДинамическийСписок - список, в котором требуется установить отбор. +// ИмяПоля - Строка - поле, по которому необходимо установить отбор. +// ПравоеЗначение - Произвольный - значение отбора. +// Необязательный. Значение по умолчанию Неопределено. // Внимание! Если передать Неопределено, то значение не будет изменено. -// ВидСравнения - ВидСравненияКомпоновкиДанных - Условие отбора. -// Представление - Строка - Представление элемента компоновки данных. -// Необязательный. Значение по умолчанию: Неопределено. +// ВидСравнения - ВидСравненияКомпоновкиДанных - условие отбора. +// Представление - Строка - представление элемента компоновки данных. +// Необязательный. Значение по умолчанию Неопределено. // Если указано, то выводится только флажок использования с указанным представлением (значение не выводится). // Для очистки (чтобы значение снова выводилось) следует передать пустую строку. -// Использование - Булево - Флажок использования этого отбора. +// Использование - Булево - флажок использования этого отбора. // Необязательный. Значение по умолчанию: Неопределено. -// РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - Способ отображения этого отбора +// РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - способ отображения этого отбора // пользователю. // * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ - В группе быстрых настроек над списком. // * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный - В настройка списка (в подменю Еще). @@ -2275,204 +1329,616 @@ КонецПроцедуры +#КонецОбласти + +#Область РаботаСФайлами + //////////////////////////////////////////////////////////////////////////////// -// Функции для работы с управляемыми формами. +// Функции для работы с файлами. // -// Получает значение реквизита формы. +// Добавляет к переданному пути каталога конечный символ-разделитель, если он отсутствует. // // Параметры: -// Форма - УправляемаяФорма - форма. -// ПутьРеквизита - Строка - путь к данным реквизита формы, например: "Объект.МесяцНачисления". +// ПутьКаталога - Строка - путь к каталогу. +// Платформа - ТипПлатформы - параметр устарел, больше не используется. // // Возвращаемое значение: -// Произвольный - реквизит формы. +// Строка - путь к каталогу с конечным символом-разделителем. // -Функция ПолучитьРеквизитФормыПоПути(Форма, ПутьРеквизита) Экспорт +// Пример: +// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог"); // возвращает "C:\Мой каталог\". +// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог\"); // возвращает "C:\Мой каталог\". +// Результат = ДобавитьКонечныйРазделительПути("%APPDATA%"); // возвращает "%APPDATA%\". +// +Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога, Знач Платформа = Неопределено) Экспорт + Если ПустаяСтрока(ПутьКаталога) Тогда + Возврат ПутьКаталога; + КонецЕсли; - МассивИмен = СтрРазделить(ПутьРеквизита, "."); + ДобавляемыйСимвол = ПолучитьРазделительПути(); - Объект = Форма; - ПоследнееПоле = МассивИмен[МассивИмен.Количество()-1]; + Если СтрЗаканчиваетсяНа(ПутьКаталога, ДобавляемыйСимвол) Тогда + Возврат ПутьКаталога; + Иначе + Возврат ПутьКаталога + ДобавляемыйСимвол; + КонецЕсли; +КонецФункции + +// Составляет полное имя файла из имени каталога и имени файла. +// +// Параметры: +// ИмяКаталога - Строка - путь к каталогу файла на диске. +// ИмяФайла - Строка - имя файла, без имени каталога. +// +// Возвращаемое значение: +// Строка - полное имя файла с учетом каталога. +// +Функция ПолучитьПолноеИмяФайла(Знач ИмяКаталога, Знач ИмяФайла) Экспорт + + Если НЕ ПустаяСтрока(ИмяФайла) Тогда + + Слэш = ""; + Если (Прав(ИмяКаталога, 1) <> "\") И (Прав(ИмяКаталога, 1) <> "/") Тогда + Слэш = ?(СтрНайти(ИмяКаталога, "\") = 0, "/", "\"); + КонецЕсли; + + Возврат ИмяКаталога + Слэш + ИмяФайла; + + Иначе + + Возврат ИмяКаталога; + + КонецЕсли; + +КонецФункции + +// Раскладывает полное имя файла на составляющие. +// +// Параметры: +// ПолноеИмяФайла - Строка - полный путь к файлу. +// ЭтоПапка - Булево - признак того, что требуется разложить полное имя папки, а не файла. +// +// Возвращаемое значение: +// Структура - имя файла, разложенное на составные части(аналогично свойствам объекта Файл): +// ПолноеИмя - содержит полный путь к файлу, т.е. полностью соответствует входному параметру ПолноеИмяФайла. +// Путь - содержит путь к каталогу, в котором лежит файл. +// Имя - содержит имя файла с расширением, без пути к файлу. +// Расширение - содержит расширение файла. +// ИмяБезРасширения - содержит имя файла без расширения и без пути к файлу. +// Пример: если ПолноеИмяФайла = "c:\temp\test.txt", то структура заполнится следующим образом: +// ПолноеИмя: "c:\temp\test.txt". +// Путь: "c:\temp\" +// Имя: "test.txt" +// Расширение: ".txt" +// ИмяБезРасширения: "test". +// +Функция РазложитьПолноеИмяФайла(Знач ПолноеИмяФайла, ЭтоПапка = Ложь) Экспорт - Для Сч = 0 По МассивИмен.Количество()-2 Цикл - Объект = Объект[МассивИмен[Сч]] - КонецЦикла; + СтруктураИмениФайла = Новый Структура("ПолноеИмя,Путь,Имя,Расширение,ИмяБезРасширения"); - Возврат Объект[ПоследнееПоле]; + // Убираем из полного имени файла завершающий слеш и сохраняем получившееся полное имя в структуре. + Если ЭтоПапка И (Прав(ПолноеИмяФайла, 1) = "/" Или Прав(ПолноеИмяФайла, 1) = "\") Тогда + Если ЭтоПапка Тогда + ПолноеИмяФайла = Сред(ПолноеИмяФайла, 1, СтрДлина(ПолноеИмяФайла) - 1); + Иначе + // Если путь к файлу заканчивается слешем, то у файла нет имени. + СтруктураИмениФайла.Вставить("ПолноеИмя", ПолноеИмяФайла); + СтруктураИмениФайла.Вставить("Путь", ПолноеИмяФайла); + СтруктураИмениФайла.Вставить("Имя", ""); + СтруктураИмениФайла.Вставить("Расширение", ""); + СтруктураИмениФайла.Вставить("ИмяБезРасширения", ""); + Возврат СтруктураИмениФайла; + КонецЕсли; + КонецЕсли; + СтруктураИмениФайла.Вставить("ПолноеИмя", ПолноеИмяФайла); + + // Если полное имя файла оказалось пустым, то остальные параметры структуры возвращаем пустыми. + Если СтрДлина(ПолноеИмяФайла) = 0 Тогда + СтруктураИмениФайла.Вставить("Путь", ""); + СтруктураИмениФайла.Вставить("Имя", ""); + СтруктураИмениФайла.Вставить("Расширение", ""); + СтруктураИмениФайла.Вставить("ИмяБезРасширения", ""); + Возврат СтруктураИмениФайла; + КонецЕсли; + + // Выделяем путь к файлу и имя файла. + Если СтрНайти(ПолноеИмяФайла, "/") > 0 Тогда + ПозицияРазделителя = СтрНайти(ПолноеИмяФайла, "/", НаправлениеПоиска.СКонца); + ИначеЕсли СтрНайти(ПолноеИмяФайла, "\") > 0 Тогда + ПозицияРазделителя = СтрНайти(ПолноеИмяФайла, "\", НаправлениеПоиска.СКонца); + Иначе + ПозицияРазделителя = 0; + КонецЕсли; + СтруктураИмениФайла.Вставить("Путь", Лев(ПолноеИмяФайла, ПозицияРазделителя)); + СтруктураИмениФайла.Вставить("Имя", Сред(ПолноеИмяФайла, ПозицияРазделителя + 1)); + + // Папки не имеют расширений, а для файла выделяем расширение. + Если ЭтоПапка Тогда + СтруктураИмениФайла.Вставить("Расширение", ""); + СтруктураИмениФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.Имя); + Иначе + ПозицияТочки = СтрНайти(СтруктураИмениФайла.Имя, ".", НаправлениеПоиска.СКонца); + Если ПозицияТочки = 0 Тогда + СтруктураИмениФайла.Вставить("Расширение", ""); + СтруктураИмениФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.Имя); + Иначе + СтруктураИмениФайла.Вставить("Расширение", Сред(СтруктураИмениФайла.Имя, ПозицияТочки)); + СтруктураИмениФайла.Вставить("ИмяБезРасширения", Лев(СтруктураИмениФайла.Имя, ПозицияТочки - 1)); + КонецЕсли; + КонецЕсли; + + Возврат СтруктураИмениФайла; КонецФункции -// Устанавливает значение реквизиту формы. -// Параметры: -// Форма - УправляемаяФорма - форма-владелец реквизита. -// ПутьРеквизита - Строка - путь к данным, например: "Объект.МесяцНачисления". -// Значение - Произвольный - устанавливаемое значение. -// ТолькоЕслиНеЗаполнен - Булево - позволяет не устанавливать значение реквизита, -// если у него уже установлено какое-то значение. -Процедура УстановитьРеквизитФормыПоПути(Форма, ПутьРеквизита, Значение, ТолькоЕслиНеЗаполнен = Ложь) Экспорт - - МассивИмен = СтрРазделить(ПутьРеквизита, "."); - - Объект = Форма; - ПоследнееПоле = МассивИмен[МассивИмен.Количество()-1]; - - Для Сч = 0 По МассивИмен.Количество()-2 Цикл - Объект = Объект[МассивИмен[Сч]] - КонецЦикла; - Если НЕ ТолькоЕслиНеЗаполнен ИЛИ НЕ ЗначениеЗаполнено(Объект[ПоследнееПоле]) Тогда - Объект[ПоследнееПоле] = Значение; - КонецЕсли; - -КонецПроцедуры - -// Выполняет поиск элемента отбора в коллекции по заданному представлению. +// Функция раскладывает строку в массив строк, используя "./\" как разделитель. // // Параметры: -// КоллекцияЭлементов - КоллекцияЭлементовОтбораКомпоновкиДанных - контейнер с элементами и группами отбора, -// например, Список.Отбор.Элементы или группа в отборе. -// Представление - Строка - представление группы. -// +// Строка - Строка - исходная строка. +// // Возвращаемое значение: -// ЭлементОтбораКомпоновкиДанных - элемент отбора. +// Массив - коллекция фрагментов строки. // -Функция НайтиЭлементОтбораПоПредставлению(КоллекцияЭлементов, Представление) Экспорт +Функция РазложитьСтрокуПоТочкамИСлэшам(Знач Строка) Экспорт - ВозвращаемоеЗначение = Неопределено; + Перем ТекущаяПозиция; - Для каждого ЭлементОтбора Из КоллекцияЭлементов Цикл - Если ЭлементОтбора.Представление = Представление Тогда - ВозвращаемоеЗначение = ЭлементОтбора; - Прервать; + Фрагменты = Новый Массив; + + НачальнаяПозиция = 1; + + Для ТекущаяПозиция = 1 По СтрДлина(Строка) Цикл + ТекущийСимвол = Сред(Строка, ТекущаяПозиция, 1); + Если ТекущийСимвол = "." Или ТекущийСимвол = "/" Или ТекущийСимвол = "\" Тогда + ТекущийФрагмент = Сред(Строка, НачальнаяПозиция, ТекущаяПозиция - НачальнаяПозиция); + НачальнаяПозиция = ТекущаяПозиция + 1; + Фрагменты.Добавить(ТекущийФрагмент); КонецЕсли; КонецЦикла; - Возврат ВозвращаемоеЗначение + Если НачальнаяПозиция <> ТекущаяПозиция Тогда + ТекущийФрагмент = Сред(Строка, НачальнаяПозиция, ТекущаяПозиция - НачальнаяПозиция); + Фрагменты.Добавить(ТекущийФрагмент); + КонецЕсли; + + Возврат Фрагменты; КонецФункции -// Устанавливает свойство ИмяСвойства элемента формы с именем ИмяЭлемента в значение Значение. -// Применяется в тех случаях, когда элемент формы может не быть на форме из-за отсутствия прав у пользователя -// на объект, реквизит объекта или команду. +// Выделяет из имени файла его расширение (набор символов после последней точки). // // Параметры: -// ЭлементыФормы - ВсеЭлементФормы, ЭлементыФормы - коллекция элементов управляемой формы. -// ИмяЭлемента - Строка - имя элемента формы. -// ИмяСвойства - Строка - имя устанавливаемого свойства элемента формы. -// Значение - Произвольный - новое значение элемента. -// -Процедура УстановитьСвойствоЭлементаФормы(ЭлементыФормы, ИмяЭлемента, ИмяСвойства, Значение) Экспорт +// ИмяФайла - Строка - имя файла с именем каталога или без. +// +// Возвращаемое значение: +// Строка - расширение файла. +// +Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт - ЭлементФормы = ЭлементыФормы.Найти(ИмяЭлемента); - Если ЭлементФормы <> Неопределено И ЭлементФормы[ИмяСвойства] <> Значение Тогда - ЭлементФормы[ИмяСвойства] = Значение; + РасширениеФайла = ""; + МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь); + Если МассивСтрок.Количество() > 1 Тогда + РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1]; + КонецЕсли; + Возврат РасширениеФайла; + +КонецФункции + +// Преобразует расширение файла в нижний регистр без точки. +// +// Параметры: +// Расширение - Строка - Расширение для преобразования. +// +// Возвращаемое значение: +// Строка - преобразованное расширение. +// +Функция РасширениеБезТочки(Знач Расширение) Экспорт + + Расширение = НРег(СокрЛП(Расширение)); + + Если Сред(Расширение, 1, 1) = "." Тогда + Расширение = Сред(Расширение, 2); КонецЕсли; -КонецПроцедуры + Возврат Расширение; + +КонецФункции -// Возвращает значение свойства ИмяСвойства элемента формы с именем ИмяЭлемента. -// Применяется в тех случаях, когда элемент формы может не быть на форме из-за отсутствия прав у пользователя -// на объект, реквизит объекта или команду. +// Возвращает имя файла с расширением. +// Если расширение пустое, тогда точка не добавляется. // // Параметры: -// ЭлементыФормы - ВсеЭлементФормы, ЭлементыФормы - коллекция элементов управляемой формы. -// ИмяЭлемента - Строка - имя элемента формы. -// ИмяСвойства - Строка - имя свойства элемента формы. -// +// ИмяБезРасширения - Строка - имя файла без расширения. +// Расширение - Строка - расширение. +// // Возвращаемое значение: -// Произвольный - значение свойства ИмяСвойства элемента формы ИмяЭлемента. -// -Функция ЗначениеСвойстваЭлементаФормы(ЭлементыФормы, ИмяЭлемента, ИмяСвойства) Экспорт +// Строка - имя файла с расширением. +// +Функция ПолучитьИмяСРасширением(ИмяБезРасширения, Расширение) Экспорт - ЭлементФормы = ЭлементыФормы.Найти(ИмяЭлемента); - Возврат ?(ЭлементФормы <> Неопределено, ЭлементФормы[ИмяСвойства], Неопределено); + ИмяСРасширением = ИмяБезРасширения; -КонецФункции + Если Расширение <> "" Тогда + ИмяСРасширением = ИмяСРасширением + "." + Расширение; + КонецЕсли; + + Возврат ИмяСРасширением; + +КонецФункции + +// Возвращает строку недопустимых символов. +// Согласно http://en.wikipedia.org/wiki/Filename - в разделе "Reserved characters and words". +// Возвращаемое значение: +// Строка - строка недопустимых символов. +Функция ПолучитьНедопустимыеСимволыВИмениФайла() Экспорт + + НедопустимыеСимволы = """/\[]:;|=?*<>"; + НедопустимыеСимволы = НедопустимыеСимволы + Символы.Таб; + Возврат НедопустимыеСимволы; + +КонецФункции + +// Проверяет наличие недопустимых символов в имени файла. +// +// Параметры: +// ИмяФайла - Строка - имя файла. +// +// Возвращаемое значение: +// Массив - массив обнаруженных в имени файла недопустимых символов. +// Если недопустимых символов не обнаружено - возвращается пустой массив. +Функция НайтиНедопустимыеСимволыВИмениФайла(ИмяФайла) Экспорт + + НедопустимыеСимволы = ПолучитьНедопустимыеСимволыВИмениФайла(); + + МассивНайденныхНедопустимыхСимволов = Новый Массив; + + Для ПозицияСимвола = 1 По СтрДлина(НедопустимыеСимволы) Цикл + ПроверяемыйСимвол = Сред(НедопустимыеСимволы,ПозицияСимвола,1); + Если СтрНайти(ИмяФайла,ПроверяемыйСимвол) <> 0 Тогда + МассивНайденныхНедопустимыхСимволов.Добавить(ПроверяемыйСимвол); + КонецЕсли; + КонецЦикла; + + Возврат МассивНайденныхНедопустимыхСимволов; + +КонецФункции + +// Заменяет недопустимые символы в имени файла. +// +// Параметры: +// ИмяФайла - Строка - исходное имя файла. +// НаЧтоМенять - Строка - строка, на которую необходимо заменить недопустимые символы. +// +// Возвращаемое значение: +// Строка - преобразованное имя файла. +// +Функция ЗаменитьНедопустимыеСимволыВИмениФайла(Знач ИмяФайла, НаЧтоМенять = " ") Экспорт + + Результат = ИмяФайла; + МассивНайденныхНедопустимыхСимволов = НайтиНедопустимыеСимволыВИмениФайла(Результат); + Для Каждого НедопустимыйСимвол Из МассивНайденныхНедопустимыхСимволов Цикл + Результат = СтрЗаменить(Результат, НедопустимыйСимвол, НаЧтоМенять); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область РаботаСАдресамиЭлектроннойПочты //////////////////////////////////////////////////////////////////////////////// -// Работа с предопределенными данными. +// Функции для работы с почтовыми адресами. // -// Получает ссылку предопределенного элемента по его полному имени. -// Предопределенные элементы могут содержаться только в следующих объектах: -// - Справочники; -// - Планы видов характеристик; -// - Планы счетов; -// - Планы видов расчета. -// После изменения состава предопределенных следует выполнить метод -// ОбновитьПовторноИспользуемыеЗначения(), который сбросит кэш ПовтИсп в текущем сеансе. +// Разбирает строку с адресами электронной почты. При разборе проверяет корректность адресов. // // Параметры: -// ПолноеИмяПредопределенного - Строка - Полный путь к предопределенному элементу, включая его имя. -// Формат аналогичен функции глобального контекста ПредопределенноеЗначение(). -// Например: -// "Справочник.ВидыКонтактнойИнформации.EmailПользователя" -// "ПланСчетов.Хозрасчетный.Материалы" -// "ПланВидовРасчета.Начисления.ОплатаПоОкладу". +// СписокАдресов - Строка - адреса электронной почты, разделитель - запятая, либо точка с запятой: +// Получатель1 <Адрес1>, Получатель 2 <Адрес2>... Получатель N <АдресN>. // -// Возвращаемое значение: -// ЛюбаяСсылка - ссылка на предопределенный элемент. -// Неопределено - если предопределенный есть в метаданных, но не создан в ИБ. +// Возвращаемое значение: +// Массив - содержит массив структур адресов. +// Поля структуры: +// Псевдоним - Строка - представление адресата. +// Адрес - Строка - найденный и соответствующий требованиям почтовый адрес. +// Если текст, похожий на адрес найден, но не соответствует требованиям +// стандартов, то такой текст записывается в поле "Псевдоним". +// ОписаниеОшибки - Строка - текстовое представление ошибки, либо пустая строка, если ошибок нет. // -Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного) Экспорт +Функция АдресаЭлектроннойПочтыИзСтроки(Знач СписокАдресов) Экспорт - // Используется стандартная функция платформы для получения: - // - пустых ссылок; - // - значений перечислений; - // - точек маршрута бизнес-процессов. - Если ".ПУСТАЯССЫЛКА" = ВРег(Прав(ПолноеИмяПредопределенного, 13)) - Или "ПЕРЕЧИСЛЕНИЕ." = ВРег(Лев(ПолноеИмяПредопределенного, 13)) - Или "БИЗНЕСПРОЦЕСС." = ВРег(Лев(ПолноеИмяПредопределенного, 14)) Тогда + Результат = Новый Массив; + + // заменяем скобки на пробелы + СимволыСкобок = "<>()[]"; + Строка = ЗаменитьСимволыВСтрокеНаПробелы(СписокАдресов, СимволыСкобок); + + // Приводим разделители к одному виду. + Строка = СтрЗаменить(Строка, ",", ";"); + + // Раскладываем mailbox-list на mailbox'ы. + МассивАдресов = СтрРазделить(Строка, ";", Ложь); + + // Выделяем из строки адреса (mailbox'а) псевдоним (display-name) и адрес (addr-spec). + Для Каждого СтрокаАдреса Из МассивАдресов Цикл + Если ПустаяСтрока(СтрокаАдреса) Тогда + Продолжить; + КонецЕсли; - Возврат ПредопределенноеЗначение(ПолноеИмяПредопределенного); - КонецЕсли; - - // Разбор полного имени предопределенного. - ЧастиПолногоИмени = СтрРазделить(ПолноеИмяПредопределенного, "."); - Если ЧастиПолногоИмени.Количество() <> 3 Тогда - ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); - КонецЕсли; - - ПолноеИмяОбъектаМетаданных = ВРег(ЧастиПолногоИмени[0] + "." + ЧастиПолногоИмени[1]); - ИмяПредопределенного = ЧастиПолногоИмени[2]; - - // В зависимости от контекста выполняется обращение к разному кэшу. - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ПредопределенныеЗначения = СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных); -#Иначе - ПредопределенныеЗначения = СтандартныеПодсистемыКлиентПовтИсп.СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных); -#КонецЕсли - - // Если ошибка в имени метаданных. - Если ПредопределенныеЗначения = Неопределено Тогда - ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); - КонецЕсли; - - // Получение результата из кэша. - Результат = ПредопределенныеЗначения.Получить(ИмяПредопределенного); - - // Если предопределенного нет в метаданных. - Если Результат = Неопределено Тогда - ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); - КонецЕсли; - - // Если предопределенный есть в метаданных, но не создан в ИБ. - Если Результат = Null Тогда - Возврат Неопределено; - КонецЕсли; + Псевдоним = ""; + Адрес = ""; + ОписаниеОшибки = ""; + + Если СтрЧислоВхождений(СтрокаАдреса, "@") <> 1 Тогда + Псевдоним = СтрокаАдреса; + Иначе + // Все, что не подходит в качестве адреса, складываем в псевдоним. + Для Каждого Подстрока Из СтрРазделить(СтрокаАдреса, " ", Ложь) Цикл + Если ПустаяСтрока(Адрес) И АдресЭлектроннойПочтыСоответствуетТребованиям(Подстрока) Тогда + Адрес = Подстрока; + Иначе + Псевдоним = Псевдоним + " " + Подстрока; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Псевдоним = СокрЛП(Псевдоним); + + АдресОпределен = Не ПустаяСтрока(Адрес); + ЕстьПризнакНаличияАдресаВСтроке = СтрНайти(СтрокаАдреса, "@") > 0; + + Если Не АдресОпределен Тогда + Если ЕстьПризнакНаличияАдресаВСтроке Тогда + ОписаниеОшибки = НСтр("ru = 'Адрес электронной почты содержит ошибки'"); + Иначе + ОписаниеОшибки = НСтр("ru = 'Строка не содержит адреса электронной почты'"); + КонецЕсли; + КонецЕсли; + + СтруктураАдреса = Новый Структура("Псевдоним, Адрес, ОписаниеОшибки", Псевдоним, Адрес, ОписаниеОшибки); + Результат.Добавить(СтруктураАдреса); + КонецЦикла; Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочие функции +// Проверяет email-адрес на соответствие требованиям стандартов RFC 5321, RFC 5322, +// а также RFC 5335, RFC 5336 и RFC 3696. +// Кроме того, функция ограничивает использование спецсимволов. +// +// Параметры: +// Адрес - Строка - проверяемый email. +// РазрешитьЛокальныеАдреса - Булево - не выдавать ошибку в случае отсутствия зоны домена в адресе. // +// Возвращаемое значение: +// Булево - Истина, если ошибок нет. +// +Функция АдресЭлектроннойПочтыСоответствуетТребованиям(Знач Адрес, РазрешитьЛокальныеАдреса = Ложь) Экспорт + + // Допустимые символы для email. + Буквы = "abcdefghijklmnopqrstuvwxyz"; + Цифры = "0123456789"; + СпецСимволы = ".@_-:+"; + + // проверяем символ @ + Если СтрЧислоВхождений(Адрес, "@") <> 1 Тогда + Возврат Ложь; + КонецЕсли; + + // Разрешаем двоеточие только один раз. + Если СтрЧислоВхождений(Адрес, ":") > 1 Тогда + Возврат Ложь; + КонецЕсли; + + // проверяем две точки подряд + Если СтрНайти(Адрес, "..") > 0 Тогда + Возврат Ложь; + КонецЕсли; + + // Приводим строку адреса к нижнему регистру. + Адрес = НРег(Адрес); + + // Проверяем допустимые символы. + Если Не СтрокаСодержитТолькоДопустимыеСимволы(Адрес, Буквы + Цифры + СпецСимволы) Тогда + Возврат Ложь; + КонецЕсли; + + // Разбираем адрес на local-part и domain. + Позиция = СтрНайти(Адрес,"@"); + ЛокальноеИмя = Лев(Адрес, Позиция - 1); + Домен = Сред(Адрес, Позиция + 1); + + // Проверяем на заполненность и допустимость длины. + Если ПустаяСтрока(ЛокальноеИмя) + Или ПустаяСтрока(Домен) + Или СтрДлина(ЛокальноеИмя) > 64 + Или СтрДлина(Домен) > 255 Тогда + + Возврат Ложь; + КонецЕсли; + + // Проверяем наличие спецсимволов в начале и в конце домена. + + Если ЕстьСимволыВНачалеВКонце(Домен, СпецСимволы) Тогда + Возврат Ложь; + КонецЕсли; + + // В домене должна быть минимум одна точка. + Если Не РазрешитьЛокальныеАдреса И СтрНайти(Домен,".") = 0 Тогда + Возврат Ложь; + КонецЕсли; + + // В домене не должно быть символа подчеркивания. + Если СтрНайти(Домен,"_") > 0 Тогда + Возврат Ложь; + КонецЕсли; + + // В домене не должно быть символа двоеточие. + Если СтрНайти(Домен,":") > 0 Тогда + Возврат Ложь; + КонецЕсли; + + // В домене не должно быть символа "плюс". + Если СтрНайти(Домен,"+") > 0 Тогда + Возврат Ложь; + КонецЕсли; + + // Выделяем зону (TLD) из имени домена. + Зона = Домен; + Позиция = СтрНайти(Зона,"."); + Пока Позиция > 0 Цикл + Зона = Сред(Зона, Позиция + 1); + Позиция = СтрНайти(Зона,"."); + КонецЦикла; + + // Проверяем зону домена (минимум 2 символа, только буквы). + Возврат РазрешитьЛокальныеАдреса Или СтрДлина(Зона) >= 2 И СтрокаСодержитТолькоДопустимыеСимволы(Зона,Буквы); + +КонецФункции + +// Функция проверяет, что введенная строка с email-адресами введена правильно. +// +// Формат строки: +// Z = ИмяПользователя|[Имя Пользователя] [<]пользователь@почтовый_сервер[>], Строка = Z[<разделитель*>Z]. +// +// Прим.: разделитель* - имеется ввиду любой разделитель адресов. +// +// Параметры: +// СтрокаПереданныхАдресов - Строка - правильная строка с почтовыми адресами. +// ВызыватьИсключение - Булево - необходимо передать Ложь, чтобы в случае неуспешного разбора не выдавалось исключение. +// +// Возвращаемое значение: +// Структура - результат разбора: +// * Статус - Булево - успех или неуспех преобразования. +// * Значение - Массив - (параметр доступен, если Статус = Истина) коллекция адресов в виде структур: +// ** Адрес - Строка - e-mail получателя. +// ** Представление - Строка - имя получателя. +// * СообщениеОбОшибке - Строка - (параметр доступен, если Статус = Ложь) информация об ошибке. +// +// ВАЖНО: Функция возвращает массив структур, в которых одно поле (любое) +// может быть незаполнено. Может использоваться различными +// подсистемами для собственного сопоставления имени пользователя +// некому email-адресу. Поэтому необходимо перед непосредственной +// отправкой проверить, что поле почтового адреса заполнено. +// +Функция РазобратьСтрокуСПочтовымиАдресами(Знач СтрокаПереданныхАдресов, ВызыватьИсключение = Истина) Экспорт + + Результат = Новый Массив; + + НедопустимыеСимволы = "!#$%^&*()`~|\/="; + + СообщениеНедопустимыеСимволы = НСтр("ru = 'Недопустимый символ ""%1"" в адресе электронной почты ""%2""'"); + СообщениеНеверныйФорматПочтовогоАдреса = НСтр("ru = 'Некорректный адрес электронной почты ""%1""'"); + + СтрокаПереданныхАдресов = СтрЗаменить(СтрокаПереданныхАдресов, ",", ";"); + МассивПодстрокКОбработке = СтрРазделить(СокрЛП(СтрокаПереданныхАдресов), ";", Ложь); + + Для Каждого СтрокаАдреса Из МассивПодстрокКОбработке Цикл + + Индекс = 1; // Номер обрабатываемого символа. + Накопитель = ""; // Накопитель символов, после анализа перемещается либо в полное имя + // либо в почтовый адрес. + ПолноеИмяАдресата = ""; // Переменная, накапливающая имя адресата. + ПочтовыйАдрес = ""; // Переменная, накапливающая e-mail адрес + // 1 - формирование полного имени: ожидаются любые допустимые символы имени адресата + // 2 - формирование почтового адреса: ожидаются любые допустимые символы email адреса + // 3 - завершение формирования очередного почтового адреса - ожидаются символы разделители либо пробелы. + СтадияРазбора = 1; + + Пока Индекс <= СтрДлина(СтрокаАдреса) Цикл + + Символ = Сред(СтрокаАдреса, Индекс, 1); + + Если Символ = " " Тогда + Индекс = ? ((ПропуститьПробелы(СтрокаАдреса, Индекс, " ") - 1) > Индекс, + ПропуститьПробелы(СтрокаАдреса, Индекс, " ") - 1, + Индекс); + Если СтадияРазбора = 1 Тогда + ПолноеИмяАдресата = ПолноеИмяАдресата + Накопитель + " "; + ИначеЕсли СтадияРазбора = 2 Тогда + ПочтовыйАдрес = Накопитель; + СтадияРазбора = 3; + КонецЕсли; + Накопитель = ""; + ИначеЕсли Символ = "@" Тогда + Если СтадияРазбора = 1 Тогда + СтадияРазбора = 2; + + Для ИндексПоискаНС = 1 По СтрДлина(Накопитель) Цикл + Если СтрНайти(НедопустимыеСимволы, Сред(Накопитель, ИндексПоискаНС, 1)) > 0 И ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНедопустимыеСимволы, + Сред(Накопитель, ИндексПоискаНС, 1),СтрокаАдреса); + КонецЕсли; + КонецЦикла; + + Накопитель = Накопитель + Символ; + ИначеЕсли СтадияРазбора = 2 И ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса); + ИначеЕсли СтадияРазбора = 3 И ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,СтрокаАдреса); + КонецЕсли; + Иначе + Если СтадияРазбора = 2 ИЛИ СтадияРазбора = 3 Тогда + Если СтрНайти(НедопустимыеСимволы, Символ) > 0 И ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНедопустимыеСимволы,Символ,СтрокаАдреса); + КонецЕсли; + КонецЕсли; + + Накопитель = Накопитель + Символ; + КонецЕсли; + + Индекс = Индекс + 1; + КонецЦикла; + + Если СтадияРазбора = 1 Тогда + ПолноеИмяАдресата = ПолноеИмяАдресата + Накопитель; + ИначеЕсли СтадияРазбора = 2 Тогда + ПочтовыйАдрес = Накопитель; + КонецЕсли; + + Если ПустаяСтрока(ПочтовыйАдрес) И (Не ПустаяСтрока(ПолноеИмяАдресата)) И ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса, ПолноеИмяАдресата); + ИначеЕсли СтрЧислоВхождений(ПочтовыйАдрес, "@") <> 1 И ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеНеверныйФорматПочтовогоАдреса,ПочтовыйАдрес); + КонецЕсли; + + Если НЕ (ПустаяСтрока(ПолноеИмяАдресата) И ПустаяСтрока(ПочтовыйАдрес)) Тогда + Результат.Добавить(ПроверитьИПодготовитьПочтовыйАдрес(ПолноеИмяАдресата, ПочтовыйАдрес)); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ВнешнееСоединение + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с внешним соединением. + +// Возвращает имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение. +// +// Возвращаемое значение: +// Строка - имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение. +// +Функция ИмяCOMСоединителя() Экспорт + + СистемнаяИнфо = Новый СистемнаяИнформация; + ПодстрокиВерсии = СтрРазделить(СистемнаяИнфо.ВерсияПриложения, "."); + Возврат "v" + ПодстрокиВерсии[0] + ПодстрокиВерсии[1] + ".COMConnector"; + +КонецФункции // Возвращает шаблон структуры параметров для установки внешнего соединения. -// Параметрам необходимо задать требуемые значения и передать. -// В метод ОбщегоНазначения.УстановитьВнешнееСоединение(). +// Параметрам необходимо задать требуемые значения и передать +// в метод ОбщегоНазначения.УстановитьВнешнееСоединение(). // // Возвращаемое значение: // Структура - коллекция параметров. @@ -2489,6 +1955,7 @@ СтруктураПараметров.Вставить("ПарольПользователя", ""); Возврат СтруктураПараметров; + КонецФункции // Извлекает из строки соединения с информационной базой параметры подключения @@ -2513,460 +1980,12 @@ Результат.ВариантРаботыИнформационнойБазы = ?(Параметры.Свойство("File"), 0, 1); Возврат Результат; -КонецФункции - -// Для файлового режима работы возвращает полное имя каталога, в котором расположена информационная база. -// Если режим работы клиент-серверный, то возвращается пустая строка. -// -// Возвращаемое значение: -// Строка - Полное имя каталога, в котором расположена файловая информационная база. -// -Функция КаталогФайловойИнформационнойБазы() Экспорт - - ПараметрыСоединения = СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(СтрокаСоединенияИнформационнойБазы()); - - Если ПараметрыСоединения.Свойство("File") Тогда - Возврат ПараметрыСоединения.File; - КонецЕсли; - - Возврат ""; -КонецФункции - -// Получает идентификатор (метод ПолучитьИдентификатор()) строки дерева значений для заданного значения поля строки -// дерева. -// Используется для позиционирования курсора в иерархических списках. -// -// Параметры: -// ИмяПоля - Строка - Имя колонки дерева значений, по которому выполняется поиск. -// ИдентификаторСтроки - Число - полученный в результате поиска идентификатор строки дерева значений. -// КоллекцияЭлементовДерева - ДанныеФормыКоллекцияЭлементовДерева - коллекция, в которой следует выполнять поиск. -// КлючСтроки - Произвольный - искомое значение поля. -// ПрекратитьПоиск - Булево - признак прекращения поиска. -// -Процедура ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля(ИмяПоля, ИдентификаторСтроки, КоллекцияЭлементовДерева, КлючСтроки, ПрекратитьПоиск) Экспорт - - Для Каждого СтрокаДерева Из КоллекцияЭлементовДерева Цикл - - Если ПрекратитьПоиск Тогда - Возврат; - КонецЕсли; - - Если СтрокаДерева[ИмяПоля] = КлючСтроки Тогда - - ИдентификаторСтроки = СтрокаДерева.ПолучитьИдентификатор(); - - ПрекратитьПоиск = Истина; - - Возврат; - - КонецЕсли; - - КоллекцияЭлементов = СтрокаДерева.ПолучитьЭлементы(); - - Если КоллекцияЭлементов.Количество() > 0 Тогда - - ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля(ИмяПоля, ИдентификаторСтроки, КоллекцияЭлементов, КлючСтроки, ПрекратитьПоиск); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Заменяет недопустимые символы в XML-строке на заданные символы. -// -// Параметры: -// Текст - Строка - строка, в которой требуется выполнить замену недопустимых символов. -// СимволЗамены - Строка - строка, на которую требуется выполнить замену недопустимого символа в XML-строке. -// -// Возвращаемое значение: -// Строка - строка, полученная заменой недопустимых символов в XML-строке. -// -Функция ЗаменитьНедопустимыеСимволыXML(Знач Текст, СимволЗамены = " ") Экспорт - -#Если НЕ ВебКлиент Тогда - ПозицияНачала = 1; - Позиция = НайтиНедопустимыеСимволыXML(Текст, ПозицияНачала); - Пока Позиция > 0 Цикл - НедопустимыйСимвол = Сред(Текст, Позиция, 1); - Текст = СтрЗаменить(Текст, НедопустимыйСимвол, СимволЗамены); - ПозицияНачала = Позиция + СтрДлина(СимволЗамены); - Если ПозицияНачала > СтрДлина(Текст) Тогда - Прервать; - КонецЕсли; - Позиция = НайтиНедопустимыеСимволыXML(Текст, ПозицияНачала); - КонецЦикла; - - Возврат Текст; -#Иначе - // Коды символов от 0 до 2^16-1, которые метод НайтиНедопустимыеСимволыXML - // считает недопустимыми: 0-8, 11-12, 14-31, 55296-57343. - Итог = ""; - ДлинаСтроки = СтрДлина(Текст); - - Для НомерСимвола = 1 По ДлинаСтроки Цикл - Символ = Сред(Текст, НомерСимвола, 1); - КодСимвола = КодСимвола(Символ); - - Если КодСимвола < 9 - Или КодСимвола > 10 И КодСимвола < 13 - Или КодСимвола > 13 И КодСимвола < 32 - Или КодСимвола > 55295 И КодСимвола < 57344 Тогда - - Символ = СимволЗамены; - КонецЕсли; - Итог = Итог + Символ; - КонецЦикла; - - Возврат Итог; -#КонецЕсли КонецФункции -// Удаляет недопустимые символы в XML-строке. -// -// Параметры: -// Текст - Строка - строка, в которой требуется удалить недопустимые символы. -// -// Возвращаемое значение: -// Строка - Строка, полученная при удалении недопустимых символов в XML-строке. -// -Функция УдалитьНедопустимыеСимволыXML(Знач Текст) Экспорт - - Возврат ЗаменитьНедопустимыеСимволыXML(Текст, ""); - -КонецФункции +#КонецОбласти -// Сравнивает два расписания между собой. -// -// Параметры: -// Расписание1 - РасписаниеРегламентногоЗадания - первое расписание. -// Расписание2 - РасписаниеРегламентногоЗадания - второе расписание. -// -// Возвращаемое значение: -// Булево - Истина, если одинаковые. -// -Функция РасписанияОдинаковые(Знач Расписание1, Знач Расписание2) Экспорт - - Возврат Строка(Расписание1) = Строка(Расписание2); - -КонецФункции - -// Возвращает код основного языка конфигурации, например "ru". -// -// Возвращаемое значение: -// Строка - код языка. -// -Функция КодОсновногоЯзыка() Экспорт - #Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ МобильныйКлиент Тогда - Возврат Метаданные.ОсновнойЯзык.КодЯзыка; - #Иначе - Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка"); - #КонецЕсли -КонецФункции - -// Возвращает Истина, если клиентское приложение подключено к базе через веб-сервер. -// Если нет клиентского приложения, возвращается Ложь. -// -// Возвращаемое значение: -// Булево - Истина, если подключен. -// -Функция КлиентПодключенЧерезВебСервер() Экспорт - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда - УстановитьПривилегированныйРежим(Истина); - - СтрокаСоединенияИнформационнойБазы = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("СтрокаСоединенияИнформационнойБазы"); - - Если СтрокаСоединенияИнформационнойБазы = Неопределено Тогда - Возврат Ложь; // Нет клиентского приложения. - КонецЕсли; -#Иначе - СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); -#КонецЕсли - - Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "WS=") = 1; - -КонецФункции - -// Возвращает Истина, если клиентское приложение запущено под управлением ОС Windows. -// -// Возвращаемое значение: -// Булево - если нет клиентского приложения, возвращается Ложь. -// -Функция ЭтоWindowsКлиент() Экспорт - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда - УстановитьПривилегированныйРежим(Истина); - - ЭтоWindowsКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоWindowsКлиент"); - - Если ЭтоWindowsКлиент = Неопределено Тогда - Возврат Ложь; // Нет клиентского приложения. - КонецЕсли; -#Иначе - СистемнаяИнформация = Новый СистемнаяИнформация; - - ЭтоWindowsКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 - ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; -#КонецЕсли - - Возврат ЭтоWindowsКлиент; - -КонецФункции - -// Возвращает Истина, если клиентское приложение запущено под управлением ОС X. -// -// Возвращаемое значение: -// Булево - если нет клиентского приложения, возвращается Ложь. -// -Функция ЭтоOSXКлиент() Экспорт - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда - УстановитьПривилегированныйРежим(Истина); - - ЭтоOSXКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоOSXКлиент"); - - Если ЭтоOSXКлиент = Неопределено Тогда - Возврат Ложь; // Нет клиентского приложения. - КонецЕсли; -#Иначе - СистемнаяИнформация = Новый СистемнаяИнформация; - - ЭтоOSXКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86 - ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64; -#КонецЕсли - - Возврат ЭтоOSXКлиент; - -КонецФункции - -// Возвращает Истина, если клиентское приложение запущено под управлением ОС Linux. -// -// Возвращаемое значение: -// Булево - если нет клиентского приложения, возвращается Ложь. -// -Функция ЭтоLinuxКлиент() Экспорт - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда - УстановитьПривилегированныйРежим(Истина); - - ЭтоLinuxКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоLinuxКлиент"); - - Если ЭтоLinuxКлиент = Неопределено Тогда - Возврат Ложь; // Нет клиентского приложения. - КонецЕсли; -#Иначе - СистемнаяИнформация = Новый СистемнаяИнформация; - - ЭтоLinuxКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 - ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; -#КонецЕсли - - Возврат ЭтоLinuxКлиент; - -КонецФункции - -// Возвращает Истина, если клиентское приложение является Веб-клиентом. -// -// Возвращаемое значение: -// Булево - если нет клиентского приложения, возвращается Ложь. -// -Функция ЭтоВебКлиент() Экспорт - -#Если ВебКлиент Тогда - Возврат Истина; -#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда - УстановитьПривилегированныйРежим(Истина); - - ЭтоВебКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоВебКлиент"); - - Если ЭтоВебКлиент = Неопределено Тогда - Возврат Ложь; // Нет клиентского приложения. - КонецЕсли; - - Возврат ЭтоВебКлиент; -#Иначе - Возврат Ложь; -#КонецЕсли - -КонецФункции - -// Возвращает Истина, если это веб клиент в Mac OS. -// -// Возвращаемое значение: -// Булево - Истина, если сеанс запущен под веб-клиентом и в Mac OS. -// -Функция ЭтоВебКлиентПодMacOS() Экспорт - -#Если ВебКлиент Тогда - Возврат ОбщегоНазначенияКлиентПовтИсп.ЭтоВебКлиентПодMacOS(); -#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда - УстановитьПривилегированныйРежим(Истина); - - ЭтоВебКлиентПодMacOS = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоВебКлиентПодMacOS"); - - Если ЭтоВебКлиентПодMacOS = Неопределено Тогда - Возврат Ложь; // Нет клиентского приложения. - КонецЕсли; - - Возврат ЭтоВебКлиентПодMacOS; -#Иначе - Возврат Ложь; -#КонецЕсли - -КонецФункции - -// Возвращает Истина, если клиентское приложение является мобильным клиентом. -// -// Возвращаемое значение: -// Булево - если нет клиентского приложения, возвращается Ложь. -// -Функция ЭтоМобильныйКлиент() Экспорт - -#Если МобильныйКлиент Тогда - Возврат Истина; -#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда - УстановитьПривилегированныйРежим(Истина); - - ЭтоМобильныйКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоМобильныйКлиент"); - - Если ЭтоМобильныйКлиент = Неопределено Тогда - Возврат Ложь; // Нет клиентского приложения. - КонецЕсли; - - Возврат ЭтоМобильныйКлиент; -#Иначе - Возврат Ложь; -#КонецЕсли - -КонецФункции - -// Возвращает объем оперативной памяти, доступной клиентскому приложению. -// -// Возвращаемое значение: -// Число - количество гигабайт оперативной памяти с точностью до десятых долей. -// Неопределено - нет клиентского приложения, то есть ТекущийРежимЗапуска() = Неопределено. -// -Функция ОперативнаяПамятьДоступнаяКлиентскомуПриложению() Экспорт - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - УстановитьПривилегированныйРежим(Истина); - ДоступныйОбъем = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ОперативнаяПамять"); -#Иначе - СистемнаяИнформация = Новый СистемнаяИнформация; - ДоступныйОбъем = Окр(СистемнаяИнформация.ОперативнаяПамять / 1024, 1); -#КонецЕсли - - Возврат ДоступныйОбъем; - -КонецФункции - -// Возвращает Истина, если включен режим отладки. -// -// Возвращаемое значение: -// Булево - Истина, если включен режим отладки. -Функция РежимОтладки() Экспорт - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ПараметрЗапускаПриложения = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); -#Иначе - ПараметрЗапускаПриложения = ПараметрЗапуска; -#КонецЕсли - - Возврат СтрНайти(ПараметрЗапускаПриложения, "РежимОтладки") > 0; -КонецФункции - -// Вызывает исключение с текстом Сообщение, если Условие не равно Истина. -// Применяется для самодиагностики кода. -// -// Параметры: -// Условие - Булево - если не равно Истина, то вызывается исключение. -// КонтекстПроверки - Строка - например, имя процедуры или функции, в которой выполняется проверка. -// Сообщение - Строка - текст сообщения. Если не задан, то исключение вызывается с сообщением по -// умолчанию. -// -Процедура Проверить(Знач Условие, Знач Сообщение = "", Знач КонтекстПроверки = "") Экспорт - - Если Условие <> Истина Тогда - Если ПустаяСтрока(Сообщение) Тогда - ТекстИсключения = НСтр("ru = 'Недопустимая операция'"); // Assertion failed - Иначе - ТекстИсключения = Сообщение; - КонецЕсли; - Если Не ПустаяСтрока(КонтекстПроверки) Тогда - ТекстИсключения = ТекстИсключения + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'в %1'"), КонтекстПроверки); - КонецЕсли; - ВызватьИсключение ТекстИсключения; - КонецЕсли; - -КонецПроцедуры - -// Вызывает исключение, если тип значения параметра ИмяПараметра процедуры или функции ИмяПроцедурыИлиФункции -// отличается от ожидаемого. -// Для быстрой диагностики типов параметров, передаваемых в процедуры и функции программного интерфейса. -// -// Параметры: -// ИмяПроцедурыИлиФункции - Строка - имя процедуры или функции, параметр которой проверяется. -// ИмяПараметра - Строка - имя проверяемого параметра процедуры или функции. -// ЗначениеПараметра - Произвольный - фактическое значение параметра. -// ОжидаемыеТипы - ОписаниеТипов, Тип, Массив - тип(ы) параметра процедуры или функции. -// ОжидаемыеТипыСвойств - Структура - если ожидаемый тип - структура, то -// в этом параметре можно указать типы ее свойств. -// -Процедура ПроверитьПараметр(Знач ИмяПроцедурыИлиФункции, Знач ИмяПараметра, Знач ЗначениеПараметра, - Знач ОжидаемыеТипы, Знач ОжидаемыеТипыСвойств = Неопределено) Экспорт - - Контекст = "ОбщегоНазначенияКлиентСервер.ПроверитьПараметр"; - Проверить(ТипЗнч(ИмяПроцедурыИлиФункции) = Тип("Строка"), - НСтр("ru = 'Недопустимое значение параметра ИмяПроцедурыИлиФункции'"), Контекст); - Проверить(ТипЗнч(ИмяПараметра) = Тип("Строка"), - НСтр("ru = 'Недопустимое значение параметра ИмяПараметра'"), Контекст); - - ЭтоКорректныйТип = ЗначениеОжидаемогоТипа(ЗначениеПараметра, ОжидаемыеТипы); - Проверить(ЭтоКорректныйТип <> Неопределено, - НСтр("ru = 'Недопустимое значение параметра ОжидаемыеТипы'"), Контекст); - - НедопустимыйПараметр = НСтр("ru = 'Недопустимое значение параметра %1 в %2. - |Ожидалось: %3; передано значение: %4 (тип %5).'"); - Проверить(ЭтоКорректныйТип, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НедопустимыйПараметр, - ИмяПараметра, - ИмяПроцедурыИлиФункции, - ПредставлениеТипов(ОжидаемыеТипы), - ?(ЗначениеПараметра <> Неопределено, ЗначениеПараметра, НСтр("ru = 'Неопределено'")), - ТипЗнч(ЗначениеПараметра))); - - Если ТипЗнч(ЗначениеПараметра) = Тип("Структура") И ОжидаемыеТипыСвойств <> Неопределено Тогда - - Проверить(ТипЗнч(ОжидаемыеТипыСвойств) = Тип("Структура"), - НСтр("ru = 'Недопустимое значение параметра ИмяПроцедурыИлиФункции'"), Контекст); - - НетСвойства = НСтр("ru = 'Недопустимое значение параметра %1 (Структура) в %2. - |В структуре ожидалось свойство %3 (тип %4).'"); - НедопустимоеСвойство = НСтр("ru = 'Недопустимое значение свойства %1 в параметре %2 (Структура) в %3. - |Ожидалось: %4; передано значение: %5 (тип %6).'"); - Для каждого Свойство Из ОжидаемыеТипыСвойств Цикл - - ОжидаемоеИмяСвойства = Свойство.Ключ; - ОжидаемыйТипСвойства = Свойство.Значение; - ЗначениеСвойства = Неопределено; - - Проверить(ЗначениеПараметра.Свойство(ОжидаемоеИмяСвойства, ЗначениеСвойства), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НетСвойства, ИмяПараметра, ИмяПроцедурыИлиФункции, - ОжидаемоеИмяСвойства, ОжидаемыйТипСвойства)); - - ЭтоКорректныйТип = ЗначениеОжидаемогоТипа(ЗначениеСвойства, ОжидаемыйТипСвойства); - Проверить(ЭтоКорректныйТип, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НедопустимоеСвойство, - ОжидаемоеИмяСвойства, - ИмяПараметра, - ИмяПроцедурыИлиФункции, - ПредставлениеТипов(ОжидаемыеТипы), - ?(ЗначениеСвойства <> Неопределено, ЗначениеСвойства, НСтр("ru = 'Неопределено'")), - ТипЗнч(ЗначениеСвойства))); - КонецЦикла; - КонецЕсли; - -КонецПроцедуры +#Область Математика //////////////////////////////////////////////////////////////////////////////// // Математические процедуры и функции. @@ -2983,7 +2002,7 @@ // Возвращаемое значение: // Массив - массив размерностью равный массиву коэффициентов, содержит // суммы в соответствии с весом коэффициента (из массива коэффициентов). -// В случае, если распределить невозможно (кол-во коэффициентов = 0, +// В случае, если распределить невозможно (кол-во коэффициентов = 0 // есть коэффициенты с отрицательным значением или суммарный вес коэффициентов = 0), // тогда будет возвращено Неопределено. // @@ -3093,20 +2112,1239 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с внешними приложениями. +#КонецОбласти +#Область СериализацияXML + +// Заменяет недопустимые символы в XML-строке на заданные символы. +// +// Параметры: +// Текст - Строка - строка, в которой требуется выполнить замену недопустимых символов. +// СимволЗамены - Строка - строка, на которую требуется выполнить замену недопустимого символа в XML-строке. +// +// Возвращаемое значение: +// Строка - строка, полученная заменой недопустимых символов в XML-строке. +// +Функция ЗаменитьНедопустимыеСимволыXML(Знач Текст, СимволЗамены = " ") Экспорт + +#Если Не ВебКлиент Тогда + ПозицияНачала = 1; + Позиция = НайтиНедопустимыеСимволыXML(Текст, ПозицияНачала); + Пока Позиция > 0 Цикл + НедопустимыйСимвол = Сред(Текст, Позиция, 1); + Текст = СтрЗаменить(Текст, НедопустимыйСимвол, СимволЗамены); + ПозицияНачала = Позиция + СтрДлина(СимволЗамены); + Если ПозицияНачала > СтрДлина(Текст) Тогда + Прервать; + КонецЕсли; + Позиция = НайтиНедопустимыеСимволыXML(Текст, ПозицияНачала); + КонецЦикла; + + Возврат Текст; +#Иначе + // Коды символов от 0 до 2^16-1, которые метод НайтиНедопустимыеСимволыXML + // считает недопустимыми: 0-8, 11-12, 14-31, 55296-57343. + Итог = ""; + ДлинаСтроки = СтрДлина(Текст); + + Для НомерСимвола = 1 По ДлинаСтроки Цикл + Символ = Сред(Текст, НомерСимвола, 1); + КодСимвола = КодСимвола(Символ); + + Если КодСимвола < 9 + Или КодСимвола > 10 И КодСимвола < 13 + Или КодСимвола > 13 И КодСимвола < 32 + Или КодСимвола > 55295 И КодСимвола < 57344 Тогда + + Символ = СимволЗамены; + КонецЕсли; + Итог = Итог + Символ; + КонецЦикла; + + Возврат Итог; +#КонецЕсли + +КонецФункции + +// Удаляет недопустимые символы в XML-строке. +// +// Параметры: +// Текст - Строка - строка, в которой требуется удалить недопустимые символы. +// +// Возвращаемое значение: +// Строка - Строка, полученная при удалении недопустимых символов в XML-строке. +// +Функция УдалитьНедопустимыеСимволыXML(Знач Текст) Экспорт + + Возврат ЗаменитьНедопустимыеСимволыXML(Текст, ""); + +КонецФункции + +#КонецОбласти + +#Область ТабличныйДокумент + +// Процедура управляет состоянием поля табличного документа. +// +// Параметры: +// ПолеТабличногоДокумента - ПолеФормы - поле формы с видом ПолеТабличногоДокумента, +// для которого необходимо установить состояние. +// Состояние - Строка - задает вид состояния. +// +Процедура УстановитьСостояниеПоляТабличногоДокумента(ПолеТабличногоДокумента, Состояние = "НеИспользовать") Экспорт + + Если ТипЗнч(ПолеТабличногоДокумента) = Тип("ПолеФормы") + И ПолеТабличногоДокумента.Вид = ВидПоляФормы.ПолеТабличногоДокумента Тогда + ОтображениеСостояния = ПолеТабличногоДокумента.ОтображениеСостояния; + Если ВРег(Состояние) = "НЕИСПОЛЬЗОВАТЬ" Тогда + ОтображениеСостояния.Видимость = Ложь; + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; + ОтображениеСостояния.Картинка = Новый Картинка; + ОтображениеСостояния.Текст = ""; + ИначеЕсли ВРег(Состояние) = "НЕАКТУАЛЬНОСТЬ" Тогда + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; + ОтображениеСостояния.Картинка = Новый Картинка; + ОтображениеСостояния.Текст = НСтр("ru = 'Отчет не сформирован. Нажмите ""Сформировать"" для получения отчета.'");; + ИначеЕсли ВРег(Состояние) = "ФОРМИРОВАНИЕОТЧЕТА" Тогда + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; + ОтображениеСостояния.Картинка = БиблиотекаКартинок.ДлительнаяОперация48; + ОтображениеСостояния.Текст = НСтр("ru = 'Отчет формируется...'"); + Иначе + ВызватьИсключение(НСтр("ru = 'Недопустимое значение параметра (параметр номер ''2'')'")); + КонецЕсли; + Иначе + ВызватьИсключение(НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'")); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область РегламентныеЗадания + +// Преобразует РасписаниеРегламентногоЗадания в структуру. +// +// Параметры: +// Расписание - РасписаниеРегламентногоЗадания - исходное расписание. +// +// Возвращаемое значение: +// Структура - расписание в виде структуры. +// +Функция РасписаниеВСтруктуру(Знач Расписание) Экспорт + + ЗначениеРасписания = Расписание; + Если ЗначениеРасписания = Неопределено Тогда + ЗначениеРасписания = Новый РасписаниеРегламентногоЗадания(); + КонецЕсли; + СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце," + + "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней"; + Результат = Новый Структура(СписокПолей); + ЗаполнитьЗначенияСвойств(Результат, ЗначениеРасписания, СписокПолей); + ДетальныеРасписанияДня = Новый Массив; + Для каждого РасписаниеДля Из Расписание.ДетальныеРасписанияДня Цикл + ДетальныеРасписанияДня.Добавить(РасписаниеВСтруктуру(РасписаниеДля)); + КонецЦикла; + Результат.Вставить("ДетальныеРасписанияДня", ДетальныеРасписанияДня); + Возврат Результат; + +КонецФункции + +// Преобразует структуру в РасписаниеРегламентногоЗадания. +// +// Параметры: +// СтруктураРасписания - Структура - расписание в виде структуры. +// +// Возвращаемое значение: +// РасписаниеРегламентногоЗадания - расписание. +// +Функция СтруктураВРасписание(Знач СтруктураРасписания) Экспорт + + Если СтруктураРасписания = Неопределено Тогда + Возврат Новый РасписаниеРегламентногоЗадания(); + КонецЕсли; + СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце," + + "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней"; + Результат = Новый РасписаниеРегламентногоЗадания; + ЗаполнитьЗначенияСвойств(Результат, СтруктураРасписания, СписокПолей); + ДетальныеРасписанияДня = Новый Массив; + Для каждого Расписание Из СтруктураРасписания.ДетальныеРасписанияДня Цикл + ДетальныеРасписанияДня.Добавить(СтруктураВРасписание(Расписание)); + КонецЦикла; + Результат.ДетальныеРасписанияДня = ДетальныеРасписанияДня; + Возврат Результат; + +КонецФункции + +// Сравнивает два расписания между собой. +// +// Параметры: +// Расписание1 - РасписаниеРегламентногоЗадания - первое расписание. +// Расписание2 - РасписаниеРегламентногоЗадания - второе расписание. +// +// Возвращаемое значение: +// Булево - Истина, если одинаковые. +// +Функция РасписанияОдинаковые(Знач Расписание1, Знач Расписание2) Экспорт + + Возврат Строка(Расписание1) = Строка(Расписание2); + +КонецФункции + +#КонецОбласти + +#Область Интернет + +// Разбирает строку URI на составные части и возвращает в виде структуры. +// На основе RFC 3986. +// +// Параметры: +// СтрокаURI - Строка - ссылка на ресурс в формате: +// <схема>://<логин>:<пароль>@<хост>:<порт>/<путь>?<параметры>#<якорь>. +// +// Возвращаемое значение: +// Структура - составные части URI согласно формату: +// * Схема - Строка - схема из URI. +// * Логин - Строка - логин из URI. +// * Пароль - Строка - пароль из URI. +// * ИмяСервера - Строка - часть <хост>:<порт> из URI. +// * Хост - Строка - хост из URI. +// * Порт - Строка - порт из URI. +// * ПутьНаСервере - Строка - часть <путь>?<параметры>#<якорь> из URI. +// +Функция СтруктураURI(Знач СтрокаURI) Экспорт + + СтрокаURI = СокрЛП(СтрокаURI); + + // схема + Схема = ""; + Позиция = СтрНайти(СтрокаURI, "://"); + Если Позиция > 0 Тогда + Схема = НРег(Лев(СтрокаURI, Позиция - 1)); + СтрокаURI = Сред(СтрокаURI, Позиция + 3); + КонецЕсли; + + // Строка соединения и путь на сервере. + СтрокаСоединения = СтрокаURI; + ПутьНаСервере = ""; + Позиция = СтрНайти(СтрокаСоединения, "/"); + Если Позиция > 0 Тогда + ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); + СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); + КонецЕсли; + + // Информация пользователя и имя сервера. + СтрокаАвторизации = ""; + ИмяСервера = СтрокаСоединения; + Позиция = СтрНайти(СтрокаСоединения, "@"); + Если Позиция > 0 Тогда + СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); + ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); + КонецЕсли; + + // логин и пароль + Логин = СтрокаАвторизации; + Пароль = ""; + Позиция = СтрНайти(СтрокаАвторизации, ":"); + Если Позиция > 0 Тогда + Логин = Лев(СтрокаАвторизации, Позиция - 1); + Пароль = Сред(СтрокаАвторизации, Позиция + 1); + КонецЕсли; + + // хост и порт + Хост = ИмяСервера; + Порт = ""; + Позиция = СтрНайти(ИмяСервера, ":"); + Если Позиция > 0 Тогда + Хост = Лев(ИмяСервера, Позиция - 1); + Порт = Сред(ИмяСервера, Позиция + 1); + Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Порт) Тогда + Порт = ""; + КонецЕсли; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Схема", Схема); + Результат.Вставить("Логин", Логин); + Результат.Вставить("Пароль", Пароль); + Результат.Вставить("ИмяСервера", ИмяСервера); + Результат.Вставить("Хост", Хост); + Результат.Вставить("Порт", ?(ПустаяСтрока(Порт), Неопределено, Число(Порт))); + Результат.Вставить("ПутьНаСервере", ПутьНаСервере); + + Возврат Результат; + +КонецФункции + +// Создает объект описания защищенного соединения OpenSSL. +// Параметры: +// СертификатКлиента - СертификатКлиентаФайл, +// СертификатКлиентаWindows, +// Неопределено - см ЗащищенноеСоединениеOpenSSL. +// СертификатыУдостоверяющихЦентров - СертификатыУдостоверяющихЦентровФайл, +// СертификатыУдостоверяющихЦентровWindows, +// СертификатыУдостоверяющихЦентровLinux, +// СертификатыУдостоверяющихЦентровОС, +// Неопределено - см. ЗащищенноеСоединениеOpenSSL. +// +// Возвращаемое значение: +// ЗащищенноеСоединениеOpenSSL - описание защищенного соединения. +// +Функция НовоеЗащищенноеСоединение(СертификатКлиента = Неопределено, СертификатыУдостоверяющихЦентров = Неопределено) Экспорт + +#Если ВебКлиент Тогда + Возврат Неопределено; +#ИначеЕсли МобильныйКлиент Тогда + Возврат Новый ЗащищенноеСоединениеOpenSSL; +#Иначе + Возврат Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента, СертификатыУдостоверяющихЦентров); +#КонецЕсли + +КонецФункции + +#КонецОбласти + +#Область ПараметрыУстройства + +// Возвращает строковое представление типа используемого устройства. +// +// Возвращаемое значение: +// Строка - Тип используемого устройства. +// +Функция ТипУстройства() Экспорт + + ИнформацияЭкрана = ПараметрыЭкранаУстройства(); + + DPI = ИнформацияЭкрана.DPI; + Высота = ИнформацияЭкрана.Высота; + Ширина = ИнформацияЭкрана.Ширина; + + РазмерЭкрана = Sqrt((Высота/DPI*Высота/DPI)+(Ширина/DPI*Ширина/DPI)); + Если РазмерЭкрана > 16 Тогда + Возврат "ПерсональныйКомпьютер"; + ИначеЕсли РазмерЭкрана >= ?(DPI > 310, 7.85, 9) Тогда + Возврат "Планшет"; + ИначеЕсли РазмерЭкрана >= 4.9 Тогда + Возврат "Фаблет"; + Иначе + Возврат "Телефон"; + КонецЕсли; + +КонецФункции + +// Возвращает параметры экрана используемого устройства. +// +// Возвращаемое значение: +// ПараметрыЭкрана - Структура - со свойствами: +// * Ширина - Число - Ширина экрана в пикселях. +// * Высота - Число - Высота экрана в пикселях. +// * DPI - Число - Плотность пикселей экрана. +// * Портрет - Булево - Если экран в портретной ориентации, тогда Истина, иначе - Ложь. +// +Функция ПараметрыЭкранаУстройства() Экспорт + + ПараметрыЭкрана = Новый Структура; + ИнформацияЭкрана = ПолучитьИнформациюЭкрановКлиента(); + + Ширина = ИнформацияЭкрана[0].Ширина; + Высота = ИнформацияЭкрана[0].Высота; + + ПараметрыЭкрана.Вставить("Ширина", Ширина); + ПараметрыЭкрана.Вставить("Высота", Высота); + ПараметрыЭкрана.Вставить("DPI", ИнформацияЭкрана[0].DPI); + ПараметрыЭкрана.Вставить("Портрет", Высота > Ширина); + + Возврат ПараметрыЭкрана; + +КонецФункции + +#КонецОбласти + +#Область Прочее + +// Снимает один элемент условного оформления, если это список значений. +// +// Параметры: +// УсловноеОформление - УсловноеОформление - условное оформление элемента формы; +// ИдентификаторПользовательскойНастройки - Строка - идентификатор настройки; +// Значение - Произвольный - значение, которое требуется удалить из списка оформления. +// +Процедура СнятьУсловноеОформлениеСпискаЗначений(УсловноеОформление, Знач ИдентификаторПользовательскойНастройки, + Знач Значение) Экспорт + + Для каждого ЭлементУсловногоОформления Из УсловноеОформление.Элементы Цикл + Если ЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Если ЭлементУсловногоОформления.Отбор.Элементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ЭлементСписокОтбора = ЭлементУсловногоОформления.Отбор.Элементы[0]; + Если ЭлементСписокОтбора.ПравоеЗначение = Неопределено Тогда + Возврат; + КонецЕсли; + ЭлементСписка = ЭлементСписокОтбора.ПравоеЗначение.НайтиПоЗначению(Значение); + Если ЭлементСписка <> Неопределено Тогда + ЭлементСписокОтбора.ПравоеЗначение.Удалить(ЭлементСписка); + КонецЕсли; + ЭлементСписокОтбора.ПравоеЗначение = ЭлементСписокОтбора.ПравоеЗначение; + Возврат; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Получает массив значений из отмеченных элементов списка значений. +// +// Параметры: +// Список - СписокЗначений - список значений из которого будет формироваться массив значений; +// +// Возвращаемое значение: +// Массив - массив значений из отмеченных элементов списка значений. +// +Функция ОтмеченныеЭлементы(Список) Экспорт + + // Возвращаемое значение функции. + Массив = Новый Массив; + + Для Каждого Элемент Из Список Цикл + + Если Элемент.Пометка Тогда + + Массив.Добавить(Элемент.Значение); + + КонецЕсли; + + КонецЦикла; + + Возврат Массив; +КонецФункции + +// Получает идентификатор (метод ПолучитьИдентификатор()) строки дерева значений для заданного значения поля строки +// дерева. +// Используется для позиционирования курсора в иерархических списках. +// +// Параметры: +// ИмяПоля - Строка - имя колонки дерева значений, по которому выполняется поиск. +// ИдентификаторСтроки - Число - полученный в результате поиска идентификатор строки дерева значений. +// КоллекцияЭлементовДерева - ДанныеФормыКоллекцияЭлементовДерева - коллекция, в которой следует выполнять поиск. +// КлючСтроки - Произвольный - искомое значение поля. +// ПрекратитьПоиск - Булево - признак прекращения поиска. +// +Процедура ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля(ИмяПоля, ИдентификаторСтроки, КоллекцияЭлементовДерева, КлючСтроки, ПрекратитьПоиск) Экспорт + + Для Каждого СтрокаДерева Из КоллекцияЭлементовДерева Цикл + + Если ПрекратитьПоиск Тогда + Возврат; + КонецЕсли; + + Если СтрокаДерева[ИмяПоля] = КлючСтроки Тогда + + ИдентификаторСтроки = СтрокаДерева.ПолучитьИдентификатор(); + + ПрекратитьПоиск = Истина; + + Возврат; + + КонецЕсли; + + КоллекцияЭлементов = СтрокаДерева.ПолучитьЭлементы(); + + Если КоллекцияЭлементов.Количество() > 0 Тогда + + ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля(ИмяПоля, ИдентификаторСтроки, КоллекцияЭлементов, КлючСтроки, ПрекратитьПоиск); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.РазностьМассивов +// Вычисляет разность массивов. Разностью массивов А и В является массив, содержащий +// все элементы массива А не существующие в массиве В. +// +// Параметры: +// Массив - Массив - массив элементов, из которого необходимо выполнить вычитание; +// МассивВычитания - Массив - массив элементов, который будет вычитаться. +// +// Возвращаемое значение: +// Массив - дополнение массива В до А. +// +Функция СократитьМассив(Массив, МассивВычитания) Экспорт + + Возврат РазностьМассивов(Массив, МассивВычитания); + +КонецФункции + +// АПК:547-выкл устаревший программный интерфейс может вызывать устаревшие процедуры и функции. + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.СообщитьПользователю или ОбщегоНазначения.СообщитьПользователю +// Формирует и выводит сообщение, которое может быть связано с элементом +// управления формы. +// +// Параметры: +// ТекстСообщенияПользователю - Строка - текст сообщения. +// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится. +// Поле - Строка - наименование реквизита формы. +// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). +// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина. +// +// Пример: +// +// 1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта: +// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "ПолеВРеквизитеФормыОбъект", +// "Объект"); +// +// Альтернативный вариант использования в форме объекта: +// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "Объект.ПолеВРеквизитеФормыОбъект"); +// +// 2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы: +// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "ИмяРеквизитаФормы"); +// +// 3. Для вывода сообщения связанного с объектом информационной базы: +// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ); +// +// 4. Для вывода сообщения по ссылке на объект информационной базы: +// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ); +// +// Случаи некорректного использования: +// 1. Передача одновременно параметров КлючДанных и ПутьКДанным. +// 2. Передача в параметре КлючДанных значения типа отличного от допустимых. +// 3. Установка ссылки без установки поля (и/или пути к данным). +// +Процедура СообщитьПользователю( + Знач ТекстСообщенияПользователю, + Знач КлючДанных = Неопределено, + Знач Поле = "", + Знач ПутьКДанным = "", + Отказ = Ложь) Экспорт + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщенияПользователю; + Сообщение.Поле = Поле; + + ЭтоОбъект = Ложь; + +#Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ МобильныйКлиент Тогда + Если КлючДанных <> Неопределено + И XMLТипЗнч(КлючДанных) <> Неопределено Тогда + ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; + ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0; + КонецЕсли; +#КонецЕсли + + Если ЭтоОбъект Тогда + Сообщение.УстановитьДанные(КлючДанных); + Иначе + Сообщение.КлючДанных = КлючДанных; + КонецЕсли; + + Если НЕ ПустаяСтрока(ПутьКДанным) Тогда + Сообщение.ПутьКДанным = ПутьКДанным; + КонецЕсли; + + Сообщение.Сообщить(); + + Отказ = Истина; + +КонецПроцедуры + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.СкопироватьРекурсивно или ОбщегоНазначения.СкопироватьРекурсивно +// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, +// с учетом типов дочерних элементов. При этом содержимое значений объектных типов +// (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. +// +// Параметры: +// Источник - Структура, Соответствие, Массив, СписокЗначений, ТаблицаЗначений - объект, который необходимо +// скопировать. +// +// Возвращаемое значение: +// Структура, Соответствие, Массив, СписокЗначений, ТаблицаЗначений - копия объекта, переданного в параметре Источник. +// +Функция СкопироватьРекурсивно(Источник) Экспорт + + Перем Приемник; + + ТипИсточника = ТипЗнч(Источник); + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если ТипИсточника = Тип("ТаблицаЗначений") Тогда + Возврат Источник.Скопировать(); + КонецЕсли; +#КонецЕсли + Если ТипИсточника = Тип("Структура") Тогда + Приемник = СкопироватьСтруктуру(Источник); + ИначеЕсли ТипИсточника = Тип("Соответствие") Тогда + Приемник = СкопироватьСоответствие(Источник); + ИначеЕсли ТипИсточника = Тип("Массив") Тогда + Приемник = СкопироватьМассив(Источник); + ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда + Приемник = СкопироватьСписокЗначений(Источник); + Иначе + Приемник = Источник; + КонецЕсли; + + Возврат Приемник; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.СкопироватьРекурсивно или ОбщегоНазначения.СкопироватьРекурсивно +// Создает копию значения типа Структура, рекурсивно, с учетом типов значений свойств. +// Если свойства структуры содержат значения объектных типов (СправочникОбъект, ДокументОбъект и т.п.), +// то их содержимое не копируются, а возвращаются ссылки на исходный объект. +// +// Параметры: +// СтруктураИсточник - Структура - копируемая структура. +// +// Возвращаемое значение: +// Структура - копия исходной структуры. +// +Функция СкопироватьСтруктуру(СтруктураИсточник) Экспорт + + СтруктураРезультат = Новый Структура; + + Для Каждого КлючИЗначение Из СтруктураИсточник Цикл + СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение)); + КонецЦикла; + + Возврат СтруктураРезультат; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.СкопироватьРекурсивно или ОбщегоНазначения.СкопироватьРекурсивно +// Создает копию значения типа Соответствие, рекурсивно, с учетом типов значений. +// Если значения соответствия содержат значения объектных типов (СправочникОбъект, ДокументОбъект и т.п.), +// то их содержимое не копируются, а возвращаются ссылки на исходный объект. +// +// Параметры: +// СоответствиеИсточник - Соответствие - соответствие, копию которого необходимо получить. +// +// Возвращаемое значение: +// Соответствие - копия исходного соответствия. +// +Функция СкопироватьСоответствие(СоответствиеИсточник) Экспорт + + СоответствиеРезультат = Новый Соответствие; + + Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл + СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение)); + КонецЦикла; + + Возврат СоответствиеРезультат; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.СкопироватьРекурсивно или ОбщегоНазначения.СкопироватьРекурсивно +// Создает копию значения типа Массив, рекурсивно, с учетом типов значений элементов массива. +// Если элементы массива содержат значения объектных типов (СправочникОбъект, ДокументОбъект и т.п.), +// то их содержимое не копируются, а возвращаются ссылки на исходный объект. +// +// Параметры: +// МассивИсточник - Массив - массив, копию которого необходимо получить. +// +// Возвращаемое значение: +// Массив - копия исходного массива. +// +Функция СкопироватьМассив(МассивИсточник) Экспорт + + МассивРезультат = Новый Массив; + + Для Каждого Элемент Из МассивИсточник Цикл + МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент)); + КонецЦикла; + + Возврат МассивРезультат; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.СкопироватьРекурсивно или ОбщегоНазначения.СкопироватьРекурсивно +// Создает копию значения типа СписокЗначений, рекурсивно, с учетом типов его значений. +// Если в списке значений есть значения объектных типов (СправочникОбъект, ДокументОбъект и т.п.), +// то их содержимое не копируются, а возвращаются ссылки на исходный объект. +// +// Параметры: +// СписокИсточник - СписокЗначений - список значений, копию которого необходимо получить. +// +// Возвращаемое значение: +// СписокЗначений - копия исходного списка значений. +// +Функция СкопироватьСписокЗначений(СписокИсточник) Экспорт + + СписокРезультат = Новый СписокЗначений; + + Для Каждого ЭлементСписка Из СписокИсточник Цикл + СписокРезультат.Добавить( + СкопироватьРекурсивно(ЭлементСписка.Значение), + ЭлементСписка.Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + КонецЦикла; + + Возврат СписокРезультат; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу +// Заполняет коллекцию-приемник значениями из коллекции-источник. +// В качестве коллекций источника и приемника могут выступать типы: +// ТаблицаЗначений; ДеревоЗначений; СписокЗначений и пр. +// +// Параметры: +// КоллекцияИсточник - ЛюбаяКоллекция - коллекция значений, которая является источником для заполнения данных; +// КоллекцияПриемник - ЛюбаяКоллекция - коллекция значений, которая является приемником для заполнения данных. +// +Процедура ЗаполнитьКоллекциюСвойств(КоллекцияИсточник, КоллекцияПриемник) Экспорт + + Для Каждого Элемент Из КоллекцияИсточник Цикл + + ЗаполнитьЗначенияСвойств(КоллекцияПриемник.Добавить(), Элемент); + + КонецЦикла; + +КонецПроцедуры + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.УстановитьВнешнееСоединениеСБазой +// или ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой +// Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель +// на это соединение. +// +// Параметры: +// Параметры - Структура - параметры для установки внешнего соединения с информационной базой. +// Свойства см. в функции +// ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения): +// +// * ВариантРаботыИнформационнойБазы - Число - Вариант работы информационной базы: 0 - файловый; 1 - +// клиент-серверный; +// * КаталогИнформационнойБазы - Строка - Каталог информационной базы для файлового режима работы; +// * ИмяСервера1СПредприятия - Строка - Имя сервера1С:Предприятия; +// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - Имя информационной базы на сервере1С:Предприятия; +// * АутентификацияОперационнойСистемы - Булево - Признак аутентификации операционной системы при создании +// внешнего подключения к информационной базе; +// * ИмяПользователя - Строка - Имя пользователя информационной базы; +// * ПарольПользователя - Строка - Пароль пользователя информационной базы. +// +// СтрокаСообщенияОбОшибке - Строка - если в процессе установки внешнего соединения возникает ошибка, +// то подробное описание ошибки помещается в этот параметр. +// ОшибкаПодключенияКомпоненты - Булево - (возвращаемый параметр) устанавливается Истина, если была ошибка при подключении. +// +// Возвращаемое значение: +// COMОбъект, Неопределенно - в случае успешной установки внешнего соединения возвращается указатель на COM-объект соединения; +// в случае ошибки возвращается Неопределенно. +// +Функция УстановитьВнешнееСоединение(Параметры, СтрокаСообщенияОбОшибке = "", ОшибкаПодключенияКомпоненты = Ложь) Экспорт + Результат = УстановитьВнешнееСоединениеСБазой(Параметры); + ОшибкаПодключенияКомпоненты = Результат.ОшибкаПодключенияКомпоненты; + СтрокаСообщенияОбОшибке = Результат.ПодробноеОписаниеОшибки; + + Возврат Результат.Соединение; +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.УстановитьВнешнееСоединениеСБазой +// или ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой +// Устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель +// на это соединение. +// +// Параметры: +// Параметры - Структура - параметры для установки внешнего соединения с информационной базой. +// Свойства см. в функции +// ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения): +// +// * ВариантРаботыИнформационнойБазы - Число - Вариант работы информационной базы: 0 - файловый; 1 - +// клиент-серверный; +// * КаталогИнформационнойБазы - Строка - Каталог информационной базы для файлового режима работы; +// * ИмяСервера1СПредприятия - Строка - Имя сервера1С:Предприятия; +// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - Имя информационной базы на сервере1С:Предприятия; +// * АутентификацияОперационнойСистемы - Булево - Признак аутентификации операционной системы при создании +// внешнего подключения к информационной базе; +// * ИмяПользователя - Строка - Имя пользователя информационной базы; +// * ПарольПользователя - Строка - Пароль пользователя информационной базы. +// +// Возвращаемое значение: +// Структура - информация о соединении: +// * Соединение - COMОбъект, Неопределено - указатель на COM-объект соединения или Неопределено в +// случае ошибки; +// * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; +// * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; +// * ОшибкаПодключенияКомпоненты - Булево - флаг ошибки подключения COM. +// +Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Соединение"); + Результат.Вставить("КраткоеОписаниеОшибки", ""); + Результат.Вставить("ПодробноеОписаниеОшибки", ""); + Результат.Вставить("ОшибкаПодключенияКомпоненты", Ложь); + + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + ПодключениеНедоступно = ОбщегоНазначения.ЭтоLinuxСервер(); + КраткоеОписаниеОшибки = НСтр("ru = 'Прямое подключение к информационной базе недоступно на сервере под управлением ОС Linux.'"); + #Иначе + ПодключениеНедоступно = ЭтоLinuxКлиент() Или ЭтоOSXКлиент() Или ЭтоМобильныйКлиент(); + КраткоеОписаниеОшибки = НСтр("ru = 'Прямое подключение к информационной базе доступно только на клиенте под управлением ОС Windows.'"); + #КонецЕсли + + Если ПодключениеНедоступно Тогда + Результат.Соединение = Неопределено; + Результат.КраткоеОписаниеОшибки = КраткоеОписаниеОшибки; + Результат.ПодробноеОписаниеОшибки = КраткоеОписаниеОшибки; + Возврат Результат; + КонецЕсли; + + #Если Не МобильныйКлиент Тогда + Попытка + COMConnector = Новый COMObject(ИмяCOMСоединителя()); // "V83.COMConnector" + Исключение + Информация = ИнформацияОбОшибке(); + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось подключится к другой программе: %1'"); + + Результат.ОшибкаПодключенияКомпоненты = Истина; + Результат.ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация)); + Результат.КраткоеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация)); + + Возврат Результат; + КонецПопытки; + + ФайловыйВариантРаботы = Параметры.ВариантРаботыИнформационнойБазы = 0; + + // Проверка корректности указания параметров. + ОшибкаПроверкиЗаполнения = Ложь; + Если ФайловыйВариантРаботы Тогда + + Если ПустаяСтрока(Параметры.КаталогИнформационнойБазы) Тогда + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задано месторасположение каталога информационной базы.'"); + ОшибкаПроверкиЗаполнения = Истина; + КонецЕсли; + + Иначе + + Если ПустаяСтрока(Параметры.ИмяСервера1СПредприятия) Или ПустаяСтрока(Параметры.ИмяИнформационнойБазыНаСервере1СПредприятия) Тогда + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не заданы обязательные параметры подключения: ""Имя сервера""; ""Имя информационной базы на сервере"".'"); + ОшибкаПроверкиЗаполнения = Истина; + КонецЕсли; + + КонецЕсли; + + Если ОшибкаПроверкиЗаполнения Тогда + + Результат.ПодробноеОписаниеОшибки = СтрокаСообщенияОбОшибке; + Результат.КраткоеОписаниеОшибки = СтрокаСообщенияОбОшибке; + Возврат Результат; + + КонецЕсли; + + // Формирование строки соединения. + ШаблонСтрокиСоединения = "[СтрокаБазы][СтрокаАутентификации]"; + + Если ФайловыйВариантРаботы Тогда + СтрокаБазы = "File = ""&КаталогИнформационнойБазы"""; + СтрокаБазы = СтрЗаменить(СтрокаБазы, "&КаталогИнформационнойБазы", Параметры.КаталогИнформационнойБазы); + Иначе + СтрокаБазы = "Srvr = ""&ИмяСервера1СПредприятия""; Ref = ""&ИмяИнформационнойБазыНаСервере1СПредприятия"""; + СтрокаБазы = СтрЗаменить(СтрокаБазы, "&ИмяСервера1СПредприятия", Параметры.ИмяСервера1СПредприятия); + СтрокаБазы = СтрЗаменить(СтрокаБазы, "&ИмяИнформационнойБазыНаСервере1СПредприятия", Параметры.ИмяИнформационнойБазыНаСервере1СПредприятия); + КонецЕсли; + + Если Параметры.АутентификацияОперационнойСистемы Тогда + СтрокаАутентификации = ""; + Иначе + + Если СтрНайти(Параметры.ИмяПользователя, """") Тогда + Параметры.ИмяПользователя = СтрЗаменить(Параметры.ИмяПользователя, """", """"""); + КонецЕсли; + + Если СтрНайти(Параметры.ПарольПользователя, """") Тогда + Параметры.ПарольПользователя = СтрЗаменить(Параметры.ПарольПользователя, """", """"""); + КонецЕсли; + + СтрокаАутентификации = "; Usr = ""&ИмяПользователя""; Pwd = ""&ПарольПользователя"""; + СтрокаАутентификации = СтрЗаменить(СтрокаАутентификации, "&ИмяПользователя", Параметры.ИмяПользователя); + СтрокаАутентификации = СтрЗаменить(СтрокаАутентификации, "&ПарольПользователя", Параметры.ПарольПользователя); + КонецЕсли; + + СтрокаСоединения = СтрЗаменить(ШаблонСтрокиСоединения, "[СтрокаБазы]", СтрокаБазы); + СтрокаСоединения = СтрЗаменить(СтрокаСоединения, "[СтрокаАутентификации]", СтрокаАутентификации); + + Попытка + Результат.Соединение = COMConnector.Connect(СтрокаСоединения); + Исключение + Информация = ИнформацияОбОшибке(); + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось подключиться к другой программе: %1'"); + + Результат.ОшибкаПодключенияКомпоненты = Истина; + Результат.ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация)); + Результат.КраткоеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация)); + КонецПопытки; + #КонецЕсли + + Возврат Результат; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер +// или ОбщегоНазначения.КлиентПодключенЧерезВебСервер +// Возвращает Истина, если клиентское приложение подключено к базе через веб-сервер. +// Если нет клиентского приложения, возвращается Ложь. +// +// Возвращаемое значение: +// Булево - Истина, если подключен. +// +Функция КлиентПодключенЧерезВебСервер() Экспорт + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + УстановитьПривилегированныйРежим(Истина); + + СтрокаСоединенияИнформационнойБазы = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("СтрокаСоединенияИнформационнойБазы"); + + Если СтрокаСоединенияИнформационнойБазы = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; +#Иначе + СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); +#КонецЕсли + + Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "WS=") = 1; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.ЭтоWindowsКлиент или ОбщегоНазначения.ЭтоWindowsКлиент +// Возвращает Истина, если клиентское приложение запущено под управлением ОС Windows. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоWindowsКлиент() Экспорт + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + УстановитьПривилегированныйРежим(Истина); + + ЭтоWindowsКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоWindowsКлиент"); + + Если ЭтоWindowsКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; +#Иначе + СистемнаяИнформация = Новый СистемнаяИнформация; + + ЭтоWindowsКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; +#КонецЕсли + + Возврат ЭтоWindowsКлиент; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.ЭтоOSXКлиент или ОбщегоНазначения.ЭтоOSXКлиент +// Возвращает Истина, если клиентское приложение запущено под управлением ОС X. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоOSXКлиент() Экспорт + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + УстановитьПривилегированныйРежим(Истина); + + ЭтоOSXКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоOSXКлиент"); + + Если ЭтоOSXКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; +#Иначе + СистемнаяИнформация = Новый СистемнаяИнформация; + + ЭтоOSXКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64; +#КонецЕсли + + Возврат ЭтоOSXКлиент; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.ЭтоLinuxКлиент или ОбщегоНазначения.ЭтоLinuxКлиент +// Возвращает Истина, если клиентское приложение запущено под управлением ОС Linux. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоLinuxКлиент() Экспорт + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + УстановитьПривилегированныйРежим(Истина); + + ЭтоLinuxКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоLinuxКлиент"); + + Если ЭтоLinuxКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; +#Иначе + СистемнаяИнформация = Новый СистемнаяИнформация; + + ЭтоLinuxКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; +#КонецЕсли + + Возврат ЭтоLinuxКлиент; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначения.ЭтоВебКлиент, либо инструкцию препроцессора ВебКлиент +// в клиентском коде. +// Возвращает Истина, если клиентское приложение является веб-клиентом. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоВебКлиент() Экспорт + +#Если ВебКлиент Тогда + Возврат Истина; +#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + УстановитьПривилегированныйРежим(Истина); + + ЭтоВебКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоВебКлиент"); + + Если ЭтоВебКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат ЭтоВебКлиент; +#Иначе + Возврат Ложь; +#КонецЕсли + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.ЭтоOSXКлиент с инструкцией препроцессора ВебКлиент, +// или на сервере (ОбщегоНазначения.ЭтоOSXКлиент И ОбщегоНазначения.ЭтоВебКлиент). +// Возвращает Истина, если это веб-клиент в ОС X. +// +// Возвращаемое значение: +// Булево - Истина, если сеанс запущен под веб-клиентом и в ОС X. +// +Функция ЭтоВебКлиентПодMacOS() Экспорт + +#Если ВебКлиент Тогда + Возврат ОбщегоНазначенияКлиент.ЭтоOSXКлиент(); +#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + Возврат ЭтоOSXКлиент() И ЭтоВебКлиент(); +#Иначе + Возврат Ложь; +#КонецЕсли + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначения.ЭтоМобильныйКлиент либо инструкцию препроцессора МобильныйКлиент +// в клиентском коде. +// Возвращает Истина, если клиентское приложение является мобильным клиентом. +// +// Возвращаемое значение: +// Булево - если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоМобильныйКлиент() Экспорт + +#Если МобильныйКлиент Тогда + Возврат Истина; +#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда + УстановитьПривилегированныйРежим(Истина); + + ЭтоМобильныйКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоМобильныйКлиент"); + + Если ЭтоМобильныйКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат ЭтоМобильныйКлиент; +#Иначе + Возврат Ложь; +#КонецЕсли + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.ОперативнаяПамятьДоступнаяКлиентскомуПриложению +// или ОбщегоНазначения.ОперативнаяПамятьДоступнаяКлиентскомуПриложению +// Возвращает объем оперативной памяти, доступной клиентскому приложению. +// +// Возвращаемое значение: +// Число - количество гигабайт оперативной памяти с точностью до десятых долей. +// Неопределено - нет клиентского приложения, то есть ТекущийРежимЗапуска() = Неопределено. +// +Функция ОперативнаяПамятьДоступнаяКлиентскомуПриложению() Экспорт + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + УстановитьПривилегированныйРежим(Истина); + ДоступныйОбъем = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ОперативнаяПамять"); +#Иначе + СистемнаяИнформация = Новый СистемнаяИнформация; + ДоступныйОбъем = Окр(СистемнаяИнформация.ОперативнаяПамять / 1024, 1); +#КонецЕсли + + Возврат ДоступныйОбъем; + +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.РежимОтладки или ОбщегоНазначения.РежимОтладки +// Возвращает Истина, если включен режим отладки. +// +// Возвращаемое значение: +// Булево - Истина, если включен режим отладки. +Функция РежимОтладки() Экспорт + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + ПараметрЗапускаПриложения = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); +#Иначе + ПараметрЗапускаПриложения = ПараметрЗапуска; +#КонецЕсли + + Возврат СтрНайти(ПараметрЗапускаПриложения, "РежимОтладки") > 0; +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.КодОсновногоЯзыка или ОбщегоНазначения.КодОсновногоЯзыка +// Возвращает код основного языка конфигурации, например "ru". +// +// Возвращаемое значение: +// Строка - код языка. +// +Функция КодОсновногоЯзыка() Экспорт + #Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ МобильныйКлиент Тогда + Возврат Метаданные.ОсновнойЯзык.КодЯзыка; + #Иначе + Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка"); + #КонецЕсли +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.ПредставлениеЛокальнойДатыСоСмещением +// или ОбщегоНазначения.ПредставлениеЛокальнойДатыСоСмещением +// Преобразует локальную дату к формату "YYYY-MM-DDThh:mm:ssTZD" согласно ISO 8601. +// +// Параметры: +// ЛокальнаяДата - Дата - дата в часовом поясе сеанса. +// +// Возвращаемое значение: +// Строка - представление даты. +// +Функция ПредставлениеЛокальнойДатыСоСмещением(ЛокальнаяДата) Экспорт + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Смещение = СмещениеСтандартногоВремени(ЧасовойПоясСеанса()); + #Иначе + Смещение = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().СмещениеСтандартногоВремени; + #КонецЕсли + ПредставлениеСмещения = "Z"; + Если Смещение > 0 Тогда + ПредставлениеСмещения = "+"; + ИначеЕсли Смещение < 0 Тогда + ПредставлениеСмещения = "-"; + Смещение = -Смещение; + КонецЕсли; + Если Смещение <> 0 Тогда + ПредставлениеСмещения = ПредставлениеСмещения + Формат('00010101' + Смещение, "ДФ=HH:mm"); + КонецЕсли; + + Возврат Формат(ЛокальнаяДата, "ДФ=yyyy-MM-ddTHH:mm:ss; ДП=0001-01-01T00:00:00") + ПредставлениеСмещения; +КонецФункции + +// Устарела. Следует использовать ОбщегоНазначенияКлиент.ПредопределенныйЭлемент +// или ОбщегоНазначения.ПредопределенныйЭлемент +// Получает ссылку предопределенного элемента по его полному имени. +// Предопределенные элементы могут содержаться только в следующих объектах: +// - Справочники; +// - Планы видов характеристик; +// - Планы счетов; +// - Планы видов расчета. +// После изменения состава предопределенных следует выполнить метод +// ОбновитьПовторноИспользуемыеЗначения(), который сбросит кэш ПовтИсп в текущем сеансе. +// +// Параметры: +// ПолноеИмяПредопределенного - Строка - Полный путь к предопределенному элементу, включая его имя. +// Формат аналогичен функции глобального контекста ПредопределенноеЗначение(). +// Например: +// "Справочник.ВидыКонтактнойИнформации.EmailПользователя" +// "ПланСчетов.Хозрасчетный.Материалы" +// "ПланВидовРасчета.Начисления.ОплатаПоОкладу". +// +// Возвращаемое значение: +// ЛюбаяСсылка - ссылка на предопределенный элемент. +// Неопределено - если предопределенный есть в метаданных, но не создан в ИБ. +// +Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного) Экспорт + + // Используется стандартная функция платформы для получения: + // - пустых ссылок; + // - значений перечислений; + // - точек маршрута бизнес-процессов. + Если ".ПУСТАЯССЫЛКА" = ВРег(Прав(ПолноеИмяПредопределенного, 13)) + Или "ПЕРЕЧИСЛЕНИЕ." = ВРег(Лев(ПолноеИмяПредопределенного, 13)) + Или "БИЗНЕСПРОЦЕСС." = ВРег(Лев(ПолноеИмяПредопределенного, 14)) Тогда + + Возврат ПредопределенноеЗначение(ПолноеИмяПредопределенного); + КонецЕсли; + + // Разбор полного имени предопределенного. + ЧастиПолногоИмени = СтрРазделить(ПолноеИмяПредопределенного, "."); + Если ЧастиПолногоИмени.Количество() <> 3 Тогда + ВызватьИсключение ОбщегоНазначенияСлужебныйКлиентСервер.ТекстОшибкиПредопределенноеЗначениеНеНайдено( + ПолноеИмяПредопределенного); + КонецЕсли; + + ПолноеИмяОбъектаМетаданных = ВРег(ЧастиПолногоИмени[0] + "." + ЧастиПолногоИмени[1]); + ИмяПредопределенного = ЧастиПолногоИмени[2]; + + // В зависимости от контекста выполняется обращение к разному кэшу. + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + ПредопределенныеЗначения = СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных); +#Иначе + ПредопределенныеЗначения = СтандартныеПодсистемыКлиентПовтИсп.СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных); +#КонецЕсли + + // Если ошибка в имени метаданных. + Если ПредопределенныеЗначения = Неопределено Тогда + ВызватьИсключение ОбщегоНазначенияСлужебныйКлиентСервер.ТекстОшибкиПредопределенноеЗначениеНеНайдено( + ПолноеИмяПредопределенного); + КонецЕсли; + + // Получение результата из кэша. + Результат = ПредопределенныеЗначения.Получить(ИмяПредопределенного); + + // Если предопределенного нет в метаданных. + Если Результат = Неопределено Тогда + ВызватьИсключение ОбщегоНазначенияСлужебныйКлиентСервер.ТекстОшибкиПредопределенноеЗначениеНеНайдено( + ПолноеИмяПредопределенного); + КонецЕсли; + + // Если предопределенный есть в метаданных, но не создан в ИБ. + Если Результат = Null Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Устарела. Следует использовать ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы или ФайловаяСистема.ПараметрыЗапускаПрограммы // Возвращает структуру параметров для см. процедуру ЗапуститьПрограмму. // // Возвращаемое значение: // ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. -// ДождатьсяЗавершения - Булево - Истина - дожидаться завершения запущенного приложения +// ДождатьсяЗавершения - Булево - Ложь - дожидаться завершения запущенного приложения // перед продолжением работы. -// ПолучитьПотокВывода - Булево - Истина - результат, направленный в поток stdout, +// ПолучитьПотокВывода - Булево - Ложь - результат, направленный в поток stdout, // если не указан ДождатьсяЗавершения - игнорируется. -// ПолучитьПотокОшибок - Булево - Истина - ошибки, направленные в поток stderr, +// ПолучитьПотокОшибок - Булево - Ложь - ошибки, направленные в поток stderr, // если не указан ДождатьсяЗавершения - игнорируется. -// ВыполнитьСНаивысшимиПравами - Булево - Истина - требуется запустить программу на исполнение +// ВыполнитьСНаивысшимиПравами - Булево - Ложь - требуется запустить программу на исполнение // с повышением привилегий системы: // - подтверждение UAC для Windows; // - интерактивным запросом c GUI sudo и перенаправлением @@ -3122,13 +3360,14 @@ Параметры.Вставить("ДождатьсяЗавершения", Ложь); Параметры.Вставить("ПолучитьПотокВывода", Ложь); Параметры.Вставить("ПолучитьПотокОшибок", Ложь); - Параметры.Вставить("ВыполнитьСНаивысшимиПравами", Ложь); // RunWithElevatedPermissions. + Параметры.Вставить("ВыполнитьСНаивысшимиПравами", Ложь); Параметры.Вставить("Кодировка", ""); Возврат Параметры; КонецФункции +// Устарела. Следует использовать ФайловаяСистемаКлиент.ЗапуститьПрограмму или ФайловаяСистема.ЗапуститьПрограмму // Запускает внешнюю программу в соответствии с параметрами запуска. // Не доступно в веб-клиенте. // @@ -3162,7 +3401,7 @@ ВызватьИсключение НСтр("ru = 'Запуск программ недоступен в веб-клиенте.'"); #Иначе - СтрокаКоманды = БезопаснаяСтрокаКоманды(КомандаЗапуска); + СтрокаКоманды = ОбщегоНазначенияСлужебныйКлиентСервер.БезопаснаяСтрокаКоманды(КомандаЗапуска); Если ПараметрыЗапускаПрограммы = Неопределено Тогда ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); @@ -3364,6 +3603,7 @@ КонецФункции +// Устарела. Следует использовать ПолучениеФайловИзИнтернета.ДиагностикаСоединения // Запускает диагностику сетевого ресурса. // Не доступно в веб-клиенте. // В модели сервиса функциональность ограничена получением описания ошибки. @@ -3525,44 +3765,7 @@ КонецФункции -// Создает объект описания защищенного соединения OpenSSL. -// Параметры: -// СертификатКлиента - СертификатКлиентаФайл, -// СертификатКлиентаWindows, -// Неопределено - см ЗащищенноеСоединениеOpenSSL. -// СертификатыУдостоверяющихЦентров - СертификатыУдостоверяющихЦентровФайл, -// СертификатыУдостоверяющихЦентровWindows, -// СертификатыУдостоверяющихЦентровLinux, -// СертификатыУдостоверяющихЦентровОС, -// Неопределено - см ЗащищенноеСоединениеOpenSSL. -// -// Возвращаемое значение: -// ЗащищенноеСоединениеOpenSSL - описание защищенного соединения. -// -Функция НовоеЗащищенноеСоединение(СертификатКлиента = Неопределено, СертификатыУдостоверяющихЦентров = Неопределено) Экспорт - - Возврат Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента, СертификатыУдостоверяющихЦентров); - -КонецФункции - -#Область УстаревшиеПроцедурыИФункции - -// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.РазностьМассивов -// Вычисляет разность массивов. Разностью массивов А и В является массив, содержащий -// все элементы массива А не существующие в массиве В. -// -// Параметры: -// Массив - Массив - массив элементов, из которого необходимо выполнить вычитание; -// МассивВычитания - Массив - массив элементов, который будет вычитаться. -// -// Возвращаемое значение: -// Массив - дополнение массива В до А. -// -Функция СократитьМассив(Массив, МассивВычитания) Экспорт - - Возврат РазностьМассивов(Массив, МассивВычитания); - -КонецФункции +// АПК:547-вкл #КонецОбласти @@ -3570,6 +3773,10 @@ #Область СлужебныеПроцедурыИФункции +#Область Данные + +#Область СпискиЗначенийИдентичны + // Выполняет поиск элемента в коллекции: списке значений или массиве. // Функция НайтиВСписке(Список, Элемент) @@ -3592,6 +3799,148 @@ КонецФункции +#КонецОбласти + +#Область ПроверитьПараметр + +Функция ЗначениеОжидаемогоТипа(Значение, ОжидаемыеТипы) + + ТипЗначения = ТипЗнч(Значение); + + Если ТипЗнч(ОжидаемыеТипы) = Тип("ОписаниеТипов") Тогда + + Возврат ОжидаемыеТипы.Типы().Найти(ТипЗначения) <> Неопределено; + + ИначеЕсли ТипЗнч(ОжидаемыеТипы) = Тип("Тип") Тогда + + Возврат ТипЗначения = ОжидаемыеТипы; + + ИначеЕсли ТипЗнч(ОжидаемыеТипы) = Тип("Массив") + Или ТипЗнч(ОжидаемыеТипы) = Тип("ФиксированныйМассив") Тогда + + Возврат ОжидаемыеТипы.Найти(ТипЗначения) <> Неопределено; + + ИначеЕсли ТипЗнч(ОжидаемыеТипы) = Тип("Соответствие") + Или ТипЗнч(ОжидаемыеТипы) = Тип("ФиксированноеСоответствие") Тогда + + Возврат ОжидаемыеТипы.Получить(ТипЗначения) <> Неопределено; + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Функция ПредставлениеТипов(ОжидаемыеТипы) + + Если ТипЗнч(ОжидаемыеТипы) = Тип("Массив") + Или ТипЗнч(ОжидаемыеТипы) = Тип("ФиксированныйМассив") + Или ТипЗнч(ОжидаемыеТипы) = Тип("Соответствие") + Или ТипЗнч(ОжидаемыеТипы) = Тип("ФиксированноеСоответствие") Тогда + + Результат = ""; + Индекс = 0; + Для Каждого Элемент Из ОжидаемыеТипы Цикл + + Если ТипЗнч(ОжидаемыеТипы) = Тип("Соответствие") + Или ТипЗнч(ОжидаемыеТипы) = Тип("ФиксированноеСоответствие") Тогда + + Тип = Элемент.Ключ; + Иначе + Тип = Элемент; + КонецЕсли; + + Если Не ПустаяСтрока(Результат) Тогда + Результат = Результат + ", "; + КонецЕсли; + + Результат = Результат + ПредставлениеТипа(Тип); + Индекс = Индекс + 1; + Если Индекс > 10 Тогда + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1,... (всего %2 типов)'"), + Результат, + ОжидаемыеТипы.Количество()); + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + + Иначе + Возврат ПредставлениеТипа(ОжидаемыеТипы); + КонецЕсли; + +КонецФункции + +Функция ПредставлениеТипа(Тип) + + Если Тип = Неопределено Тогда + + Возврат "Неопределено"; + + ИначеЕсли ТипЗнч(Тип) = Тип("ОписаниеТипов") Тогда + + ТипСтрокой = Строка(Тип); + Возврат + ?(СтрДлина(ТипСтрокой) > 150, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1,... (всего %2 типов)'"), + Лев(ТипСтрокой, 150), + Тип.Типы().Количество()), + ТипСтрокой); + + Иначе + + ТипСтрокой = Строка(Тип); + Возврат + ?(СтрДлина(ТипСтрокой) > 150, + Лев(ТипСтрокой, 150) + "...", + ТипСтрокой); + + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область РаботаСАдресамиЭлектроннойПочты + +#Область АдресаЭлектроннойПочтыИзСтроки + +Функция ЗаменитьСимволыВСтрокеНаПробелы(Строка, ЗаменяемыеСимволы) + + Результат = Строка; + Для Позиция = 1 По СтрДлина(Символы) Цикл + Результат = СтрЗаменить(Результат, Сред(ЗаменяемыеСимволы, Позиция, 1), " "); + КонецЦикла; + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область АдресЭлектроннойПочтыСоответствуетТребованиям + +Функция ЕстьСимволыВНачалеВКонце(Строка, ПроверяемыеСимволы) + + Для Позиция = 1 По СтрДлина(ПроверяемыеСимволы) Цикл + Символ = Сред(ПроверяемыеСимволы, Позиция, 1); + СимволНайден = (Лев(Строка,1) = Символ) Или (Прав(Строка,1) = Символ); + Если СимволНайден Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область РазобратьСтрокуСПочтовымиАдресами + // Проверяет, что почтовый адрес не содержит символов обрамления // если символы обрамления вставлены правильно убирает их. Функция ПроверитьИПодготовитьПочтовыйАдрес(Знач ПолноеИмяАдресата, Знач ПочтовыйАдрес) @@ -3645,9 +3994,10 @@ // Сдвигает маркер позиции пока встречается символ Символ // возвращает номер позиции в строке, на которое установился маркер. // -Функция ПропуститьПробелы(Знач Строка, - Знач ТекущийИндекс, - Знач ПропускаемыйСимвол) +Функция ПропуститьПробелы( + Знач Строка, + Знач ТекущийИндекс, + Знач ПропускаемыйСимвол) // Убираем лишние пробелы если они есть. Пока ТекущийИндекс < СтрДлина(Строка) Цикл @@ -3661,6 +4011,27 @@ КонецФункции +#КонецОбласти + +Функция СтрокаСодержитТолькоДопустимыеСимволы(Строка, ДопустимыеСимволы) + МассивСимволов = Новый Массив; + Для Позиция = 1 По СтрДлина(ДопустимыеСимволы) Цикл + МассивСимволов.Добавить(Сред(ДопустимыеСимволы,Позиция,1)); + КонецЦикла; + + Для Позиция = 1 По СтрДлина(Строка) Цикл + Если МассивСимволов.Найти(Сред(Строка, Позиция, 1)) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции + +#КонецОбласти + +#Область ДинамическийСписок + Процедура НайтиРекурсивно(КоллекцияЭлементов, МассивЭлементов, СпособПоиска, ЗначениеПоиска) Для каждого ЭлементОтбора Из КоллекцияЭлементов Цикл @@ -3690,89 +4061,11 @@ КонецПроцедуры -Функция ЗаменитьСимволыВСтрокеНаПробелы(Строка, ЗаменяемыеСимволы) - Результат = Строка; - Для Позиция = 1 По СтрДлина(Символы) Цикл - Результат = СтрЗаменить(Результат, Сред(ЗаменяемыеСимволы, Позиция, 1), " "); - КонецЦикла; - Возврат Результат; -КонецФункции +#КонецОбласти -Функция ЕстьСимволыВНачалеВКонце(Строка, ПроверяемыеСимволы) - Для Позиция = 1 По СтрДлина(ПроверяемыеСимволы) Цикл - Символ = Сред(ПроверяемыеСимволы, Позиция, 1); - СимволНайден = (Лев(Строка,1) = Символ) Или (Прав(Строка,1) = Символ); - Если СимволНайден Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; -КонецФункции +#Область Математика -Функция СтрокаСодержитТолькоДопустимыеСимволы(Строка, ДопустимыеСимволы) - МассивСимволов = Новый Массив; - Для Позиция = 1 По СтрДлина(ДопустимыеСимволы) Цикл - МассивСимволов.Добавить(Сред(ДопустимыеСимволы,Позиция,1)); - КонецЦикла; - - Для Позиция = 1 По СтрДлина(Строка) Цикл - Если МассивСимволов.Найти(Сред(Строка, Позиция, 1)) = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Возврат Истина; -КонецФункции - -Функция ЗначениеОжидаемогоТипа(Значение, ОжидаемыеТипы) - ТипЗначения = ТипЗнч(Значение); - Если ТипЗнч(ОжидаемыеТипы) = Тип("ОписаниеТипов") Тогда - Возврат ОжидаемыеТипы.Типы().Найти(ТипЗначения) <> Неопределено; - ИначеЕсли ТипЗнч(ОжидаемыеТипы) = Тип("Тип") Тогда - Возврат ТипЗначения = ОжидаемыеТипы; - ИначеЕсли ТипЗнч(ОжидаемыеТипы) = Тип("Массив") Или ТипЗнч(ОжидаемыеТипы) = Тип("ФиксированныйМассив") Тогда - Возврат ОжидаемыеТипы.Найти(ТипЗначения) <> Неопределено; - ИначеЕсли ТипЗнч(ОжидаемыеТипы) = Тип("Соответствие") Или ТипЗнч(ОжидаемыеТипы) = Тип("ФиксированноеСоответствие") Тогда - Возврат ОжидаемыеТипы.Получить(ТипЗначения) <> Неопределено; - КонецЕсли; - Возврат Неопределено; -КонецФункции - -Функция ПредставлениеТипов(ОжидаемыеТипы) - Если ТипЗнч(ОжидаемыеТипы) = Тип("Массив") Тогда - Результат = ""; - Индекс = 0; - Для Каждого Тип Из ОжидаемыеТипы Цикл - Если Не ПустаяСтрока(Результат) Тогда - Результат = Результат + ", "; - КонецЕсли; - Результат = Результат + ПредставлениеТипа(Тип); - Индекс = Индекс + 1; - Если Индекс > 10 Тогда - Результат = Результат + ",... " - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='(всего %1 типов)'"), ОжидаемыеТипы.Количество()); - Прервать; - КонецЕсли; - КонецЦикла; - Возврат Результат; - Иначе - Возврат ПредставлениеТипа(ОжидаемыеТипы); - КонецЕсли; -КонецФункции - -Функция ПредставлениеТипа(Тип) - Если Тип = Неопределено Тогда - Возврат "Неопределено"; - ИначеЕсли ТипЗнч(Тип) = Тип("ОписаниеТипов") Тогда - ТипСтрокой = Строка(Тип); - Возврат ?(СтрДлина(ТипСтрокой) > 150, Лев(ТипСтрокой, 150) + "..." - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='(всего %1 типов)'"), Тип.Типы().Количество()), - ТипСтрокой); - Иначе - ТипСтрокой = Строка(Тип); - Возврат ?(СтрДлина(ТипСтрокой) > 150, Лев(ТипСтрокой, 150) + "...", ТипСтрокой); - КонецЕсли; -КонецФункции +#Область РаспределитьСуммуПропорциональноКоэффициентам Функция МаксимальноеЗначениеВМассиве(Массив) @@ -3790,113 +4083,15 @@ КонецФункции -Функция БезопаснаяСтрокаКоманды(КомандаЗапуска) Экспорт - - Результат = ""; - - Если ТипЗнч(КомандаЗапуска) = Тип("Строка") Тогда - Если СодержитНебезопасныеДействия(КомандаЗапуска) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недопустимая строка команды - |%1 - |по причине: - |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), - КомандаЗапуска); - КонецЕсли; - - Результат = КомандаЗапуска; - ИначеЕсли ТипЗнч(КомандаЗапуска) = Тип("Массив") Тогда - Если КомандаЗапуска.Количество() > 0 Тогда - Если СодержитНебезопасныеДействия(КомандаЗапуска[0]) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недопустимая команда или путь к исполняемому файлу - |%1 - |по причине: - |Команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), - КомандаЗапуска[0]); - КонецЕсли; - Результат = МассивВСтрокуКоманды(КомандаЗапуска); - Иначе - ВызватьИсключение - НСтр("ru = 'Ожидался что в первый элемент КомандаЗапуска будет командой или путем к исполняемому файлу.'"); - КонецЕсли; - Иначе - ВызватьИсключение - НСтр("ru = 'Ожидался что значение КомандаЗапуска будет <Строка> или <Массив>'"); - КонецЕсли; - - Возврат Результат - -КонецФункции +#КонецОбласти -Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды) - - СтрокаКоманды = СтрЗаменить(СтрокаКоманды, "$DISPLAY", ""); - СтрокаКоманды = СтрЗаменить(СтрокаКоманды, "$XAUTHORITY", ""); - - Возврат СтрНайти(СтрокаКоманды, "$") <> 0 - Или СтрНайти(СтрокаКоманды, "`") <> 0 - Или СтрНайти(СтрокаКоманды, "|") <> 0 - Или СтрНайти(СтрокаКоманды, ";") <> 0 - Или СтрНайти(СтрокаКоманды, "&") <> 0; - -КонецФункции +#КонецОбласти -Функция МассивВСтрокуКоманды(КомандаЗапуска) - - Результат = Новый Массив; - НужныКавычки = Ложь; - Для Каждого Аргумент Из КомандаЗапуска Цикл - - Если Результат.Количество() > 0 Тогда - Результат.Добавить(" ") - КонецЕсли; - - НужныКавычки = Аргумент = Неопределено - Или ПустаяСтрока(Аргумент) - Или СтрНайти(Аргумент, " ") - Или СтрНайти(Аргумент, Символы.Таб) - Или СтрНайти(Аргумент, "&") - Или СтрНайти(Аргумент, "(") - Или СтрНайти(Аргумент, ")") - Или СтрНайти(Аргумент, "[") - Или СтрНайти(Аргумент, "]") - Или СтрНайти(Аргумент, "{") - Или СтрНайти(Аргумент, "}") - Или СтрНайти(Аргумент, "^") - Или СтрНайти(Аргумент, "=") - Или СтрНайти(Аргумент, ";") - Или СтрНайти(Аргумент, "!") - Или СтрНайти(Аргумент, "'") - Или СтрНайти(Аргумент, "+") - Или СтрНайти(Аргумент, ",") - Или СтрНайти(Аргумент, "`") - Или СтрНайти(Аргумент, "~") - Или СтрНайти(Аргумент, "$") - Или СтрНайти(Аргумент, "|"); - - Если НужныКавычки Тогда - Результат.Добавить(""""); - КонецЕсли; - - Результат.Добавить(СтрЗаменить(Аргумент, """", """""")); - - Если НужныКавычки Тогда - Результат.Добавить(""""); - КонецЕсли; - - КонецЦикла; - - Возврат СтрСоединить(Результат); - -КонецФункции +#Область УстаревшиеПроцедурыИФункции -Функция ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного) - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Предопределенное значение ""%1"" не найдено.'"), ПолноеИмяПредопределенного); - -КонецФункции +// АПК:223-выкл код сохранен для обратной совместимости, используется в устаревшем программном интерфейсе. + +#Область ЗапуститьПрограмму #Если Не ВебКлиент Тогда @@ -3929,6 +4124,9 @@ Попытка УдалитьФайлы(ПолноеИмяФайла); Исключение + + // АПК:547-выкл код сохранен для обратной совместимости, используется в устаревшем программном интерфейсе. + #Если Сервер Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Базовая функциональность'", КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,, @@ -3938,12 +4136,25 @@ ПолноеИмяФайла, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()))); #КонецЕсли + + // АПК:547-вкл + КонецПопытки; КонецПроцедуры +#КонецЕсли + +#КонецОбласти + +#Область ДиагностикаСоединения + +#Если Не ВебКлиент Тогда + Функция ПредставлениеМестаДиагностики() + // АПК:547-выкл код сохранен для обратной совместимости, используется в устаревшем программном интерфейсе. + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат НСтр("ru = 'Подключение проводится на сервере 1С:Предприятия в интернете.'"); @@ -3966,6 +4177,8 @@ НСтр("ru = 'Подключение проводится на компьютере (клиенте) <%1>.'"), ИмяКомпьютера()); #КонецЕсли + // АПК:547-вкл + КонецФункции Функция ПроверитьДоступностьСервера(АдресСервера) @@ -3995,14 +4208,14 @@ ЖурналДоступности = Результат.ПотокВывода + Результат.ПотокОшибок; Если ЭтоWindows Тогда - ФактНедоступности = (СтрНайти(ЖурналДоступности, "Заданный узел недоступен") > 0) - Или (СтрНайти(ЖурналДоступности, "Destination host unreachable") > 0); + ФактНедоступности = (СтрНайти(ЖурналДоступности, "Заданный узел недоступен") > 0) // не локализуется. + Или (СтрНайти(ЖурналДоступности, "Destination host unreachable") > 0); // не локализуется. - БезПотерь = (СтрНайти(ЖурналДоступности, "(0% потерь)") > 0) - Или (СтрНайти(ЖурналДоступности, "(0% loss)") > 0); + БезПотерь = (СтрНайти(ЖурналДоступности, "(0% потерь)") > 0) // не локализуется. + Или (СтрНайти(ЖурналДоступности, "(0% loss)") > 0); // не локализуется. Иначе - ФактНедоступности = (СтрНайти(ЖурналДоступности, "Destination Host Unreachable") > 0); - БезПотерь = (СтрНайти(ЖурналДоступности, "0% packet loss") > 0) + ФактНедоступности = (СтрНайти(ЖурналДоступности, "Destination Host Unreachable") > 0); // не локализуется. + БезПотерь = (СтрНайти(ЖурналДоступности, "0% packet loss") > 0) // не локализуется. КонецЕсли; Доступен = Не ФактНедоступности И БезПотерь; @@ -4060,3 +4273,9 @@ #КонецЕсли #КонецОбласти + +// АПК:223-вкл + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl index 48040ed34..6190e0e15 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Позволяет настроить общие параметры подсистемы. @@ -7,7 +15,7 @@ // * ИмяФормыПерсональныхНастроек - Строка - имя формы для редактирования персональных настроек. // Ранее определялись в // ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек. -// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - по умолчанию Истина. Если установить Ложь, то +// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - по умолчанию Истина. Если установить в Ложь, то // подтверждение при завершении работы программы не // будет запрашиваться, если явно не разрешить в // персональных настройках программы. @@ -27,7 +35,7 @@ // Например, "8.3.4.365". // Ранее определялись в // ОбщегоНазначенияПереопределяемый.ПолучитьМинимальноНеобходимуюВерсиюПлатформы. -// * РаботаВПрограммеЗапрещена - Булево - Начальное значение Ложь. +// * РаботаВПрограммеЗапрещена - Булево - начальное значение Ложь. // Процедура ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры) Экспорт @@ -39,7 +47,7 @@ // Вызывается для инициализации параметров сеанса из обработчика события модуля сеанса УстановкаПараметровСеанса // (подробнее о нем см. синтакс-помощник). // -// В указанных модулях должна быть размещена процедура обработчика, в которую передаются параметры +// В указанных модулях должна быть размещена процедура обработчика, в которую передаются параметры: // ИмяПараметра - Строка - имя параметра сеанса, который требуется установить. // УстановленныеПараметры - Массив - имена параметров, которые уже установлены. // @@ -126,17 +134,17 @@ // и должны скрываться от пользователя при удалении, анализе мест использования или запретов редактирования ключевых реквизитов. // Список таких "техногенных" объектов нужно перечислить в этой процедуре. // -// При этом, для избежания появления появления ссылок на несуществующие объекты +// При этом для избежания появления ссылок на несуществующие объекты // рекомендуется предусмотреть процедуру очистки указанных объектов метаданных. // * Для измерений регистров сведений - с помощью установки флажка "Ведущее", // тогда запись регистра сведений будет удалена вместе с удалением ссылки, указанной в измерении. // * Для других реквизитов указанных объектов - с помощью подписки на событие ПередУдалением всех типов объектов // метаданных, которые могут быть записаны в реквизиты указанных объектов метаданных. // В обработчике необходимо найти "техногенные" объекты, в реквизитах которых указана ссылка удаляемого объекта, -// и выбрать как именно очищать ссылку: очищать значение реквизита, удалять строку таблицы или удалять весь объект. +// и выбрать, как именно очищать ссылку: очищать значение реквизита, удалять строку таблицы или удалять весь объект. // Подробнее см. в документации к подсистеме "Удаление помеченных объектов". // -// При исключении регистров допустимо исключать только Измерения, +// При исключении регистров допустимо исключать только Измерения. // При необходимости исключить из поиска значения в ресурсах // или в реквизитах регистров требуется исключить регистр целиком. // @@ -204,7 +212,7 @@ // Параметры: // СтандартнаяОбработка - Булево - начальное значение Истина; если установить Ложь, // то стандартная загрузка приоритетных данных с помощью подсистемы -// ОбменДанными будет пропущена (тоже будет и в случае, +// ОбменДанными будет пропущена (так же будет и в том случае, // если подсистемы ОбменДанными нет в конфигурации). // Процедура ПередЗагрузкойПриоритетныхДанныхВПодчиненномРИБУзле(СтандартнаяОбработка) Экспорт @@ -258,9 +266,9 @@ // // Параметры: // Источник - ПланОбменаОбъект - узел, для которого выполняется обмен. -// ЭлементДанных - Произвольный - см. описание одноименного обработчика в синтаксис-помощнике. -// ОтправкаЭлемента - ОтправкаЭлементаДанных - см. описание одноименного обработчика в синтаксис-помощнике. -// СозданиеНачальногоОбраза - Булево - см. описание одноименного обработчика в синтаксис-помощнике. +// ЭлементДанных - Произвольный - см. описание одноименного обработчика в синтакс-помощнике. +// ОтправкаЭлемента - ОтправкаЭлементаДанных - см. описание одноименного обработчика в синтакс-помощнике. +// СозданиеНачальногоОбраза - Булево - см. описание одноименного обработчика в синтакс-помощнике. // Процедура ПриОтправкеДанныхПодчиненному(Источник, ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза) Экспорт @@ -272,8 +280,8 @@ // // Параметры: // Источник - ПланОбменаОбъект - узел, для которого выполняется обмен. -// ЭлементДанных - Произвольный - см. описание одноименного обработчика в синтаксис-помощнике. -// ОтправкаЭлемента - ОтправкаЭлементаДанных - см. описание одноименного обработчика в синтаксис-помощнике. +// ЭлементДанных - Произвольный - см. описание одноименного обработчика в синтакс-помощнике. +// ОтправкаЭлемента - ОтправкаЭлементаДанных - см. описание одноименного обработчика в синтакс-помощнике. // Процедура ПриОтправкеДанныхГлавному(Источник, ЭлементДанных, ОтправкаЭлемента) Экспорт @@ -285,9 +293,9 @@ // // Параметры: // Источник - ПланОбменаОбъект - узел, для которого выполняется обмен. -// ЭлементДанных - Произвольный - см. описание одноименного обработчика в синтаксис-помощнике. -// ПолучениеЭлемента - ПолучениеЭлементаДанных - см. описание одноименного обработчика в синтаксис-помощнике. -// ОтправкаНазад - Булево - см. описание одноименного обработчика в синтаксис-помощнике. +// ЭлементДанных - Произвольный - см. описание одноименного обработчика в синтакс-помощнике. +// ПолучениеЭлемента - ПолучениеЭлементаДанных - см. описание одноименного обработчика в синтакс-помощнике. +// ОтправкаНазад - Булево - см. описание одноименного обработчика в синтакс-помощнике. // Процедура ПриПолученииДанныхОтПодчиненного(Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт @@ -299,9 +307,9 @@ // // Параметры: // Источник - ПланОбменаОбъект - узел, для которого выполняется обмен. -// ЭлементДанных - Произвольный - см. описание одноименного обработчика в синтаксис-помощнике. -// ПолучениеЭлемента - ПолучениеЭлементаДанных - см. описание одноименного обработчика в синтаксис-помощнике. -// ОтправкаНазад - Булево - см. описание одноименного обработчика в синтаксис-помощнике. +// ЭлементДанных - Произвольный - см. описание одноименного обработчика в синтакс-помощнике. +// ПолучениеЭлемента - ПолучениеЭлементаДанных - см. описание одноименного обработчика в синтакс-помощнике. +// ОтправкаНазад - Булево - см. описание одноименного обработчика в синтакс-помощнике. // Процедура ПриПолученииДанныхОтГлавного(Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl index 038faf5cb..84856e820 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область УстаревшиеПроцедурыИФункции @@ -194,7 +202,7 @@ Попытка УдалитьФайлы(ИмяФайлаПреобразования); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение XSL'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение XSL'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -308,98 +316,4 @@ #КонецОбласти -#КонецОбласти - -#Область СлужебныйПрограммныйИнтерфейс - -// Возвращает Истина, если программа работает в режиме автономного рабочего места. -Функция ЭтоАвтономноеРабочееМесто() Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Возврат Ложь; - КонецЕсли; - - МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - - Возврат МодульОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто(); - -КонецФункции - -// Доступность объектов метаданных по функциональным опциям. -Функция ДоступностьОбъектовПоОпциям() Экспорт - - Параметры = Новый Структура(ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса()); - - ДоступностьОбъектов = Новый Соответствие; - Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл - Значение = -1; - Для Каждого Элемент Из ФункциональнаяОпция.Состав Цикл - Если Элемент.Объект = Неопределено Тогда - Продолжить; - КонецЕсли; - Если Значение = -1 Тогда - Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Параметры); - КонецЕсли; - ПолноеИмя = Элемент.Объект.ПолноеИмя(); - Если Значение = Истина Тогда - ДоступностьОбъектов.Вставить(ПолноеИмя, Истина); - Иначе - Если ДоступностьОбъектов[ПолноеИмя] = Неопределено Тогда - ДоступностьОбъектов.Вставить(ПолноеИмя, Ложь); - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЦикла; - Возврат Новый ФиксированноеСоответствие(ДоступностьОбъектов); - -КонецФункции - -#Область УстаревшиеПроцедурыИФункции - -// Устарела. Необходимо использовать РаботаВМоделиСервиса.РазделенныеОбъектыМетаданных. -// Возвращает список полных имен всех объектов метаданных, использующихся в общем реквизите-разделителе, -// имя которого передано в качестве значения параметра Разделитель, и значения свойств объекта метаданных, -// которые могут потребоваться для дальнейшей его обработки в универсальных алгоритмах. -// Для последовательностей и журналов документов определяет разделенность по входящим документам: любому из. -// -// Параметры: -// Разделитель - Строка, имя общего реквизита. -// -// Возвращаемое значение: -// ФиксированноеСоответствие, -// Ключ - Строка, полное имя объекта метаданных, -// Значение - ФиксированнаяСтруктура, -// Имя - Строка, имя объекта метаданных, -// Разделитель - Строка, имя разделителя, которым разделен объект метаданных, -// УсловноеРазделение - Строка, полное имя объекта метаданных, выступающего в качестве условия использования -// разделения объекта метаданных данным разделителем. -// -Функция РазделенныеОбъектыМетаданных(Знач Разделитель) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - Результат = МодульРаботаВМоделиСервиса.РазделенныеОбъектыМетаданных(Разделитель); - Иначе - Результат = Новый ФиксированноеСоответствие(Новый Соответствие); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -#КонецОбласти - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Параметры, применяемых к элементам командного интерфейса, связанным с параметрическими функциональными опциями. -Функция ОпцииИнтерфейса() Экспорт - - ОпцииИнтерфейса = Новый Структура; - ОбщегоНазначенияПереопределяемый.ПриОпределенииПараметровФункциональныхОпцийИнтерфейса(ОпцииИнтерфейса); - Возврат Новый ФиксированнаяСтруктура(ОпцииИнтерфейса); - -КонецФункции - -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl index 7d4c864ef..1b3424c91 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl @@ -1,7 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// Клиентские процедуры и функции общего назначения -// -//////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -10,6 +13,9 @@ // Параметры: // Строка - Строка - навигационная ссылка. // +// Возвращаемое значение: +// Булево - результат проверки. +// Функция ЭтоНавигационнаяСсылка(Строка) Экспорт Возврат СтрНачинаетсяС(Строка, "e1c:") @@ -17,6 +23,29 @@ КонецФункции +// Конвертирует параметры запуска текущего сеанса в передаваемые параметры в скрипт +// Например, на вход программа может быть запущена с ключем: +// /C "ПараметрыЗапускаИзВнешнейОперации=/TestClient -TPort 48050 /C РежимОтладки;РежимОтладки" +// Пробросит в скрипт следует "/TestClient -TPort 48050 /C РежимОтладки" +// +// Возвращаемое значение: +// Строка - значение параметра. +// +Функция ПараметрыЗапускаПредприятияИзСкрипта() Экспорт + + Перем ЗначениеПараметра; + + ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(ПараметрЗапуска); + Если Не ПараметрыЗапуска.Свойство("ПараметрыЗапускаИзВнешнейОперации", ЗначениеПараметра) Тогда + ЗначениеПараметра = ""; + КонецЕсли; + + Возврат ЗначениеПараметра; + +КонецФункции + +#Область ВнешниеКомпоненты + // Параметры: // Контекст - Структура - контекст процедуры: // * Оповещение - ОписаниеОповещения - . @@ -97,8 +126,6 @@ // Продолжение процедуры ПодключитьКомпоненту. Процедура ПодключитьКомпонентуОповеститьОПодключении(ПодключаемыйМодуль, Контекст) Экспорт - Оповещение = Контекст.Оповещение; - Результат = РезультатПодключенияКомпоненты(); Результат.Подключено = Истина; Результат.ПодключаемыйМодуль = ПодключаемыйМодуль; @@ -174,8 +201,267 @@ #КонецОбласти +#Область ТабличныйДокумент + +//////////////////////////////////////////////////////////////////////////////// +// Функции для работы с табличными документами. + +// Формирует описание выделенных областей табличного документа. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент - документ, значения ячеек которого участвуют в расчете. +// +// Возвращаемое значение: +// Структура - содержит: +// * ВыделенныеОбласти - Массив - содержит структуры со свойствами: +// * Верх - Число - Номер строки верхней границы области. +// * Низ - Число - Номер строки нижней границы области. +// * Лево - Число - Номер колонки верхней границы области. +// * Право - Число - Номер колонки нижней границы области. +// * ТипОбласти - ТипОбластиЯчеекТабличногоДокумента - Колонки, Прямоугольник, Строки, Таблица. +// * РассчитатьНаСервере - Булево - признак того, что расчет должен выполняться на сервере. +// +Функция ПараметрыРасчетаПоказателейЯчеек(ТабличныйДокумент) Экспорт + ПараметрыРасчетаПоказателей = Новый Структура; + ПараметрыРасчетаПоказателей.Вставить("ВыделенныеОбласти", Новый Массив); + ПараметрыРасчетаПоказателей.Вставить("РассчитатьНаСервере", Ложь); + + ВыделенныеОбласти = ПараметрыРасчетаПоказателей.ВыделенныеОбласти; + Для Каждого ВыделеннаяОбласть Из ТабличныйДокумент.ВыделенныеОбласти Цикл + Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда + Продолжить; + КонецЕсли; + ГраницыОбласти = Новый Структура("Верх, Низ, Лево, Право, ТипОбласти"); + ЗаполнитьЗначенияСвойств(ГраницыОбласти, ВыделеннаяОбласть); + ВыделенныеОбласти.Добавить(ГраницыОбласти); + КонецЦикла; + + ВыделеноВсе = Ложь; + Если ВыделенныеОбласти.Количество() = 1 Тогда + ВыделеннаяОбласть = ВыделенныеОбласти[0]; + ВыделеноВсе = Не Булево( + ВыделеннаяОбласть.Верх + + ВыделеннаяОбласть.Низ + + ВыделеннаяОбласть.Лево + + ВыделеннаяОбласть.Право); + КонецЕсли; + + ПараметрыРасчетаПоказателей.РассчитатьНаСервере = (ВыделеноВсе Или ВыделенныеОбласти.Количество() >= 100); + + Возврат ПараметрыРасчетаПоказателей; +КонецФункции + +#КонецОбласти + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции +#Область Данные + +#Область СкопироватьРекурсивно + +Функция СкопироватьСтруктуру(СтруктураИсточник, ФиксироватьДанные) Экспорт + + СтруктураРезультат = Новый Структура; + + Для Каждого КлючИЗначение Из СтруктураИсточник Цикл + СтруктураРезультат.Вставить(КлючИЗначение.Ключ, + ОбщегоНазначенияКлиент.СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СтруктураИсточник) = Тип("ФиксированнаяСтруктура") Тогда + Возврат Новый ФиксированнаяСтруктура(СтруктураИсточник); + КонецЕсли; + + Возврат СтруктураРезультат; + +КонецФункции + +Функция СкопироватьСоответствие(СоответствиеИсточник, ФиксироватьДанные) Экспорт + + СоответствиеРезультат = Новый Соответствие; + + Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл + СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, + ОбщегоНазначенияКлиент.СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СоответствиеИсточник) = Тип("ФиксированноеСоответствие") Тогда + Возврат Новый ФиксированноеСоответствие(СоответствиеИсточник); + КонецЕсли; + + Возврат СоответствиеРезультат; + +КонецФункции + +Функция СкопироватьМассив(МассивИсточник, ФиксироватьДанные) Экспорт + + МассивРезультат = Новый Массив; + + Для Каждого Элемент Из МассивИсточник Цикл + МассивРезультат.Добавить(ОбщегоНазначенияКлиент.СкопироватьРекурсивно(Элемент, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(МассивИсточник) = Тип("ФиксированныйМассив") Тогда + Возврат Новый ФиксированныйМассив(МассивИсточник); + КонецЕсли; + + Возврат МассивРезультат; + +КонецФункции + +Функция СкопироватьСписокЗначений(СписокИсточник, ФиксироватьДанные) Экспорт + + СписокРезультат = Новый СписокЗначений; + + Для Каждого ЭлементСписка Из СписокИсточник Цикл + СписокРезультат.Добавить( + ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ЭлементСписка.Значение, ФиксироватьДанные), + ЭлементСписка.Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + КонецЦикла; + + Возврат СписокРезультат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область Формы + +Функция ИмяОбъектаМетаданных(Тип) Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.ИменаОбъектовМетаданных"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Новый Соответствие); + КонецЕсли; + ИменаОбъектовМетаданных = ПараметрыПриложения[ИмяПараметра]; + + Результат = ИменаОбъектовМетаданных[Тип]; + Если Результат = Неопределено Тогда + Результат = СтандартныеПодсистемыВызовСервера.ИмяОбъектаМетаданных(Тип); + ИменаОбъектовМетаданных.Вставить(Тип, Результат); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ПодтвердитьЗакрытиеФормы() Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено); + КонецЕсли; + + Параметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"]; + Если Параметры = Неопределено Тогда + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеФормыЗавершение", ЭтотОбъект, Параметры); + Если ПустаяСтрока(Параметры.ТекстПредупреждения) Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Иначе + ТекстВопроса = Параметры.ТекстПредупреждения; + КонецЕсли; + + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена, , + КодВозвратаДиалога.Нет); + +КонецПроцедуры + +Процедура ПодтвердитьЗакрытиеФормыЗавершение(Ответ, Параметры) Экспорт + + ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено; + + Если Ответ = КодВозвратаДиалога.Да Тогда + ВыполнитьОбработкуОповещения(Параметры.ОповещениеСохранитьИЗакрыть); + + ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда + Форма = Параметры.ОповещениеСохранитьИЗакрыть.Модуль; + Форма.Модифицированность = Ложь; + Форма.Закрыть(); + Иначе + Форма = Параметры.ОповещениеСохранитьИЗакрыть.Модуль; + Форма.Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + +Процедура ПодтвердитьЗакрытиеПроизвольнойФормы() Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено); + КонецЕсли; + + Параметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"]; + Если Параметры = Неопределено Тогда + Возврат; + КонецЕсли; + ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено; + РежимВопроса = РежимДиалогаВопрос.ДаНет; + + Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеПроизвольнойФормыЗавершение", ЭтотОбъект, Параметры); + + ПоказатьВопрос(Оповещение, Параметры.ТекстПредупреждения, РежимВопроса); + +КонецПроцедуры + +Процедура ПодтвердитьЗакрытиеПроизвольнойФормыЗавершение(Ответ, Параметры) Экспорт + + Форма = Параметры.Форма; + Если Ответ = КодВозвратаДиалога.Да + Или Ответ = КодВозвратаДиалога.ОК Тогда + Форма[Параметры.ИмяРеквизитаЗакрытьФормуБезПодтверждения] = Истина; + Если Параметры.ОписаниеОповещенияЗакрыть <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Параметры.ОписаниеОповещенияЗакрыть); + КонецЕсли; + Форма.Закрыть(); + Иначе + Форма[Параметры.ИмяРеквизитаЗакрытьФормуБезПодтверждения] = Ложь; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ФормыРедактирования + +Процедура КомментарийЗавершениеВвода(Знач ВведенныйТекст, Знач ДополнительныеПараметры) Экспорт + + Если ВведенныйТекст = Неопределено Тогда + Возврат; + КонецЕсли; + + РеквизитФормы = ДополнительныеПараметры.ФормаВладелец; + + ПутьКРеквизитуФормы = СтрРазделить(ДополнительныеПараметры.ИмяРеквизита, "."); + // Если реквизит вида "Объект.Комментарий" и т.п. + Если ПутьКРеквизитуФормы.Количество() > 1 Тогда + Для Индекс = 0 По ПутьКРеквизитуФормы.Количество() - 2 Цикл + РеквизитФормы = РеквизитФормы[ПутьКРеквизитуФормы[Индекс]]; + КонецЦикла; + КонецЕсли; + + РеквизитФормы[ПутьКРеквизитуФормы[ПутьКРеквизитуФормы.Количество() - 1]] = ВведенныйТекст; + ДополнительныеПараметры.ФормаВладелец.Модифицированность = Истина; + +КонецПроцедуры + +#КонецОбласти + #Область ВнешниеКомпоненты #Область ПодключениеВнешнейКомпоненты @@ -561,574 +847,109 @@ #КонецОбласти -#Область ОткрытьПроводник +#Область ВнешнееСоединение -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. -Процедура ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель. +Процедура ЗарегистрироватьCOMСоединительПриПроверкеРегистрации(Результат, Контекст) Экспорт - ФайлИнфо = Контекст.ФайлИнфо; + ПриложениеЗапущено = Результат.ПриложениеЗапущено; + ОписаниеОшибки = Результат.ОписаниеОшибки; + КодВозврата = Результат.КодВозврата; + ВыполнитьПерезагрузкуСеанса = Контекст.ВыполнитьПерезагрузкуСеанса; - Если РасширениеПодключено Тогда - Оповещение = Новый ОписаниеОповещения( - "ОткрытьПроводникПослеПроверкиСуществования", ЭтотОбъект, Контекст, - "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); - ФайлИнфо.НачатьПроверкуСуществования(Оповещение); - Иначе - ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие папки не возможно.'"); - ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. -Процедура ОткрытьПроводникПослеПроверкиСуществования(Существует, Контекст) Экспорт - - ФайлИнфо = Контекст.ФайлИнфо; - - Если Существует Тогда - Оповещение = Новый ОписаниеОповещения( - "ОткрытьПроводникПослеПроверкиЭтоФайл", ЭтотОбъект, Контекст, - "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); - ФайлИнфо.НачатьПроверкуЭтоФайл(Оповещение); - Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдена папка, которую требуется открыть в проводнике: - |""%1""'"), - ФайлИнфо.ПолноеИмя); - ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. -Процедура ОткрытьПроводникПослеПроверкиЭтоФайл(ЭтоФайл, Контекст) Экспорт - - ФайлИнфо = Контекст.ФайлИнфо; - - Оповещение = Новый ОписаниеОповещения(,,, "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); - Если ЭтоФайл Тогда - Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - НачатьЗапускПриложения(Оповещение, "explorer.exe /select, """ + ФайлИнфо.ПолноеИмя + """"); - Иначе // Это Linux или MacOS. - НачатьЗапускПриложения(Оповещение, "file:///" + ФайлИнфо.Путь); - КонецЕсли; - Иначе // Это каталог. - НачатьЗапускПриложения(Оповещение, "file:///" + ФайлИнфо.ПолноеИмя); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. -Процедура ОткрытьПроводникПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - ОткрытьПроводникОповеститьОбОшибке("", Контекст); - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. -Процедура ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст) - - Если Не ПустаяСтрока(ОписаниеОшибки) Тогда - ПоказатьПредупреждение(, ОписаниеОшибки); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область ОткрытьФайлВПрограммеПросмотра - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. -Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт - - ФайлИнфо = Контекст.ФайлИнфо; - - Если РасширениеПодключено Тогда - Оповещение = Новый ОписаниеОповещения( - "ОткрытьФайлВПрограммеПросмотраПослеПроверкиСуществования", ЭтотОбъект, Контекст, - "ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки", ЭтотОбъект); - ФайлИнфо.НачатьПроверкуСуществования(Оповещение); - Иначе - ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие файла невозможно.'"); - ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. -Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиСуществования(Существует, Контекст) Экспорт - - ФайлИнфо = Контекст.ФайлИнфо; - - Если Существует Тогда - Оповещение = Новый ОписаниеОповещения( - "ОткрытьФайлВПрограммеПросмотраПослеПроверкиЭтоФайл", ЭтотОбъект, Контекст, - "ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки", ЭтотОбъект); - ФайлИнфо.НачатьПроверкуЭтоФайл(Оповещение); - Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден файл, который требуется открыть: - |%1'"), - ФайлИнфо.ПолноеИмя); - ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. -Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиЭтоФайл(ЭтоФайл, Контекст) Экспорт - - ФайлИнфо = Контекст.ФайлИнфо; - - Если ЭтоФайл Тогда + Если ПриложениеЗапущено Тогда - Если ПустаяСтрока(ФайлИнфо.Расширение) Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Имя файла не содержит расширения: - |%1'"), - ФайлИнфо.ПолноеИмя); - ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); - Возврат; - КонецЕсли; - - Если ЭтоРасширениеИсполняемогоФайла(ФайлИнфо.Расширение) Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Исполняемые файлы открывать запрещено: - |%1'"), - ФайлИнфо.ПолноеИмя); - ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); - Возврат; - КонецЕсли; - - Оповещение = Контекст.Оповещение; - ДождатьсяЗавершения = (Оповещение <> Неопределено); - - Оповещение = Новый ОписаниеОповещения( - "ОткрытьФайлВПрограммеПросмотраПослеЗапускаПриложения", ЭтотОбъект, Контекст, - "ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки", ЭтотОбъект); - НачатьЗапускПриложения(Оповещение, ФайлИнфо.ПолноеИмя,, ДождатьсяЗавершения); - - Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден файл, который требуется открыть: - |%1'"), - ФайлИнфо.ПолноеИмя); - ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. -Процедура ОткрытьФайлВПрограммеПросмотраПослеЗапускаПриложения(КодВозврата, Контекст) Экспорт - - Оповещение = Контекст.Оповещение; - - Если Оповещение <> Неопределено Тогда - ПриложениеЗапущено = (КодВозврата = 0); - ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. -Процедура ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке("", Контекст); - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. -Процедура ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст) - - Оповещение = Контекст.Оповещение; - - Если Оповещение = Неопределено Тогда - Если Не ПустаяСтрока(ОписаниеОшибки) Тогда - ПоказатьПредупреждение(, ОписаниеОшибки); - КонецЕсли; - Иначе - ПриложениеЗапущено = Ложь; - ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); - КонецЕсли; - -КонецПроцедуры - -// Параметры: -// Расширение - Строка - свойство Расширение объекта Файл. -// -Функция ЭтоРасширениеИсполняемогоФайла(Знач Расширение) - - Расширение = ВРег(Расширение); - - // Windows - Возврат Расширение = ".BAT" // Batch File - Или Расширение = ".BIN" // Binary Executable - Или Расширение = ".CMD" // Command Script - Или Расширение = ".COM" // Приложение MS-DOS - Или Расширение = ".CPL" // Control Panel Extension - Или Расширение = ".EXE" // Исполняемый файл - Или Расширение = ".GADGET" // Binary Executable - Или Расширение = ".HTA" // HTML Application - Или Расширение = ".INF1" // Setup Information File - Или Расширение = ".INS" // Internet Communication Settings - Или Расширение = ".INX" // InstallShield Compiled Script - Или Расширение = ".ISU" // InstallShield Uninstaller Script - Или Расширение = ".JOB" // Windows Task Scheduler Job File - Или Расширение = ".LNK" // File Shortcut - Или Расширение = ".MSC" // Microsoft Common Console Document - Или Расширение = ".MSI" // Windows Installer Package - Или Расширение = ".MSP" // Windows Installer Patch - Или Расширение = ".MST" // Windows Installer Setup Transform File - Или Расширение = ".OTM" // Макрос Microsoft Outlook - Или Расширение = ".PAF" // Portable Application Installer File - Или Расширение = ".PIF" // Program Information File - Или Расширение = ".PS1" // Windows PowerShell Cmdlet - Или Расширение = ".REG" // Registry Data File - Или Расширение = ".RGS" // Registry Script - Или Расширение = ".SCT" // Windows Scriptlet - Или Расширение = ".SHB" // Windows Document Shortcut - Или Расширение = ".SHS" // Shell Scrap Object - Или Расширение = ".U3P" // U3 Smart Application - Или Расширение = ".VB" // VBScript File - Или Расширение = ".VBE" // VBScript Encoded Script - Или Расширение = ".VBS" // VBScript File - Или Расширение = ".VBSCRIPT" // Visual Basic Script - Или Расширение = ".WS" // Windows Script - Или Расширение = ".WSF" // Windows Script - // Linux - Или Расширение = ".CSH" // C Shell Script - Или Расширение = ".KSH" // Unix Korn Shell Script - Или Расширение = ".OUT" // Исполняемый файл - Или Расширение = ".RUN" // Исполняемый файл - Или Расширение = ".SH" // Shell Script - // MacOS - Или Расширение = ".ACTION" // Automator Action - Или Расширение = ".APP" // Исполняемый файл - Или Расширение = ".COMMAND" // Terminal Command - Или Расширение = ".OSX" // Исполняемый файл - Или Расширение = ".WORKFLOW" // Automator Workflow - // Прочие - Или Расширение = ".AIR" // Установочный пакет Adobe AIR - Или Расширение = ".COFFIE" // Сценарий CoffeeScript (JavaScript) - Или Расширение = ".JAR" // Архив Java - Или Расширение = ".JS" // JScript File - Или Расширение = ".JSE" // JScript Encoded File - Или Расширение = ".PLX" // Исполняемый файл Perl - Или Расширение = ".PYC" // Компилированный файл Python - Или Расширение = ".PYO"; // Оптимизированный код Python - -КонецФункции - -#КонецОбласти - -#Область ОткрытьНавигационнуюСсылку - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. -Процедура ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт - - НавигационнаяСсылка = Контекст.НавигационнаяСсылка; - - Если РасширениеПодключено Тогда - - Оповещение = Контекст.Оповещение; - ДождатьсяЗавершения = (Оповещение <> Неопределено); - - Оповещение = Новый ОписаниеОповещения("ОткрытьНавигационнуюСсылкуПослеЗапускаПриложения", ЭтотОбъект, Контекст, - "ОткрытьНавигационнуюСсылкуПриОбработкеОшибки", ЭтотОбъект); - НачатьЗапускПриложения(Оповещение, НавигационнаяСсылка,, ДождатьсяЗавершения); - - Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Расширение для работы с файлами не установлено, переход по ссылке ""%1"" невозможен.'"), - НавигационнаяСсылка); - ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. -Процедура ОткрытьНавигационнуюСсылкуПослеЗапускаПриложения(КодВозврата, Контекст) Экспорт - - Оповещение = Контекст.Оповещение; - - Если Оповещение <> Неопределено Тогда - ПриложениеЗапущено = (КодВозврата = 0 Или КодВозврата = Неопределено); - ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. -Процедура ОткрытьНавигационнуюСсылкуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - ОткрытьНавигационнуюСсылкуОповеститьОбОшибке("", Контекст); - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. -Процедура ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст) Экспорт - - Оповещение = Контекст.Оповещение; - - Если Оповещение = Неопределено Тогда - Если Не ПустаяСтрока(ОписаниеОшибки) Тогда - ПоказатьПредупреждение(, ОписаниеОшибки); - КонецЕсли; - Иначе - ПриложениеЗапущено = Ложь; - ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); - КонецЕсли; - -КонецПроцедуры - -// Проверяет, является ли переданная строка веб ссылкой. -// -// Параметры: -// Строка - Строка - переданная ссылка. -// -Функция ЭтоВебСсылка(Строка) Экспорт - - Возврат СтрНачинаетсяС(Строка, "http://") // обычное соединение. - Или СтрНачинаетсяС(Строка, "https://");// защищенное соединение. - -КонецФункции - -// Проверяет, является ли переданная строка ссылкой на встроенную справку. -// -// Параметры: -// Строка - Строка - переданная ссылка. -// -Функция ЭтоСсылкаНаСправку(Строка) Экспорт - - Возврат СтрНачинаетсяС(Строка, "v8help://"); - -КонецФункции - -// Проверяет, является ли переданная строка допустимой ссылкой по белому списку протоколов. -// -// Параметры: -// Строка - Строка - переданная ссылка. -// -Функция ЭтоДопустимаяСсылка(Строка) Экспорт - - Возврат СтрНачинаетсяС(Строка, "e1cib/") - Или СтрНачинаетсяС(Строка, "http:") - Или СтрНачинаетсяС(Строка, "https:") - Или СтрНачинаетсяС(Строка, "e1c:") - Или СтрНачинаетсяС(Строка, "v8help:") - Или СтрНачинаетсяС(Строка, "mailto:") - Или СтрНачинаетсяС(Строка, "tel:") - Или СтрНачинаетсяС(Строка, "skype:"); - -КонецФункции - -#КонецОбласти - -#Область ЗапуститьПрограмму - -// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. -Процедура ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт - - Если РасширениеПодключено Тогда - - СтрокаКоманды = Контекст.СтрокаКоманды; - ТекущийКаталог = Контекст.ТекущийКаталог; - Оповещение = Контекст.Оповещение; - - ДождатьсяЗавершения = (Оповещение <> Неопределено); - - Оповещение = Новый ОписаниеОповещения( - "ЗапуститьПрограммуПослеЗапускаПриложения", ЭтотОбъект, Контекст, - "ЗапуститьПрограммуПриОбработкеОшибки", ЭтотОбъект); - НачатьЗапускПриложения(Оповещение, СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); - - Иначе - ОписаниеОшибки = - НСтр("ru = 'Расширение для работы с файлами не установлено, запуск программы невозможен.'"); - ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. -Процедура ЗапуститьПрограммуПослеЗапускаПриложения(КодВозврата, Контекст) Экспорт - - Оповещение = Контекст.Оповещение; - - ДождатьсяЗавершения = (Оповещение <> Неопределено); - - Если ДождатьсяЗавершения Тогда - - Если КодВозврата = Неопределено Тогда - ОписаниеОшибки = - НСтр("ru = 'Произошла неизвестная ошибка при запуске программы.'"); - ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + Если ВыполнитьПерезагрузкуСеанса Тогда + + Оповещение = Новый ОписаниеОповещения("ЗарегистрироватьCOMСоединительПриПроверкеОтветаОПерезапускеСеанса", + ОбщегоНазначенияСлужебныйКлиент, Контекст); + + ТекстВопроса = + НСтр("ru = 'Для завершения перерегистрации компоненты comcntr необходимо перезапустить программу. + |Перезапустить сейчас?'"); + + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Иначе - Результат = РезультатЗапускаПрограммы(); - Результат.ПриложениеЗапущено = Истина; - Результат.КодВозврата = КодВозврата; + + Оповещение = Контекст.Оповещение; + + Зарегистрировано = Истина; + ВыполнитьОбработкуОповещения(Оповещение, Зарегистрировано); - ВыполнитьОбработкуОповещения(Оповещение, Результат); - КонецЕсли; - КонецЕсли - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. -Процедура ЗапуститьПрограммуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. -Процедура ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст) - - Оповещение = Контекст.Оповещение; - - Если Оповещение = Неопределено Тогда - Если Не ПустаяСтрока(ОписаниеОшибки) Тогда - ПоказатьПредупреждение(, ОписаниеОшибки); КонецЕсли; + Иначе - Результат = РезультатЗапускаПрограммы(); - Результат.ОписаниеОшибки = ОписаниеОшибки; - ВыполнитьОбработкуОповещения(Оповещение, Результат); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при регистрации компоненты comcntr. + |Код ошибки regsvr32: %1'"), + КодВозврата); + + Если КодВозврата = 5 Тогда + ТекстСообщения = ТекстСообщения + " " + НСтр("ru = 'Недостаточно прав доступа.'"); + Иначе + ТекстСообщения = ТекстСообщения + Символы.ПС + ОписаниеОшибки; + КонецЕсли; + + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( + НСтр("ru = 'Регистрация компоненты comcntr'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), + "Ошибка", + ТекстСообщения,, + Истина); + + Оповещение = Новый ОписаниеОповещения("ЗарегистрироватьCOMСоединительОповеститьОбОшибке", + ОбщегоНазначенияСлужебныйКлиент, Контекст); + + ПоказатьПредупреждение(Оповещение, ТекстСообщения); + КонецЕсли; КонецПроцедуры -// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. -Функция РезультатЗапускаПрограммы() +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель. +Процедура ЗарегистрироватьCOMСоединительПриПроверкеОтветаОПерезапускеСеанса(Ответ, Контекст) Экспорт - Результат = Новый Структура; - Результат.Вставить("ПриложениеЗапущено", Ложь); - Результат.Вставить("ОписаниеОшибки", ""); - Результат.Вставить("КодВозврата", -13); - - Возврат Результат; - -КонецФункции - -#КонецОбласти - -#Область СоздатьВременныйКаталог - -// Продолжение процедуры ОбщегоНазначенияКлиент.СоздатьВременныйКаталог. -Процедура СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт - - Если РасширениеПодключено Тогда - - Оповещение = Новый ОписаниеОповещения( - "СоздатьВременныйКаталогПослеПолученияВременногоКаталога", ЭтотОбъект, Контекст, - "СоздатьВременныйКаталогПриОбработкеОшибки", ЭтотОбъект); - - НачатьПолучениеКаталогаВременныхФайлов(Оповещение); - - Иначе - ОписаниеОшибки = - НСтр("ru = 'Расширение для работы с файлами не установлено, создание временного каталога невозможно.'"); - СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст); + Если Ответ = КодВозвратаДиалога.Да Тогда + ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); + ЗавершитьРаботуСистемы(Истина, Истина); + Иначе + ЗарегистрироватьCOMСоединительОповеститьОбОшибке(Контекст); КонецЕсли; - + КонецПроцедуры -// Продолжение процедуры ОбщегоНазначенияКлиент.СоздатьВременныйКаталог. -Процедура СоздатьВременныйКаталогПослеПолученияВременногоКаталога(ИмяКаталогаВременныхФайлов, Контекст) Экспорт +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель. +Процедура ЗарегистрироватьCOMСоединительОповеститьОбОшибке(Контекст) Экспорт Оповещение = Контекст.Оповещение; - Расширение = Контекст.Расширение; - ИмяКаталога = "v8_" + Строка(Новый УникальныйИдентификатор); - - Если Не ПустаяСтрока(Расширение) Тогда - ИмяКаталога = ИмяКаталога + "." + Расширение; + Если Оповещение <> Неопределено Тогда + Зарегистрировано = Ложь; + ВыполнитьОбработкуОповещения(Оповещение, Зарегистрировано); КонецЕсли; - НачатьСозданиеКаталога(Оповещение, ИмяКаталогаВременныхФайлов + ИмяКаталога); - КонецПроцедуры -// Продолжение процедуры ОбщегоНазначенияКлиент.СоздатьВременныйКаталог. -Процедура СоздатьВременныйКаталогПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель. +Функция ЗарегистрироватьCOMСоединительДоступнаРегистрация() Экспорт - СтандартнаяОбработка = Ложь; - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст); - -КонецПроцедуры - -// Продолжение процедуры ОбщегоНазначенияКлиент.СоздатьВременныйКаталог. -Процедура СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст) - - ПоказатьПредупреждение(, ОписаниеОшибки); - ИмяКаталога = ""; - ВыполнитьОбработкуОповещения(Контекст.Оповещение, ИмяКаталога); - -КонецПроцедуры - -#КонецОбласти - -#Область Прочее - -Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиПриУстановкеРасширения(Подключено, ДополнительныеПараметры) Экспорт - - // Если расширение и так уже подключено, незачем про него спрашивать. - Если Подключено Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияЗавершение, "ПодключениеНеТребуется"); - Возврат; - КонецЕсли; - - // В веб клиенте под MacOS расширение не доступно. - СистемнаяИнформация = Новый СистемнаяИнформация; - ЭтоMacКлиент = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86 - Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64); - Если ЭтоMacКлиент Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияЗавершение); - Возврат; - КонецЕсли; - - ИмяПараметра = "СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"; - ПервоеОбращениеЗаСеанс = ПараметрыПриложения[ИмяПараметра] = Неопределено; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, ОбщегоНазначенияКлиент.ПредлагатьУстановкуРасширенияРаботыСФайлами()); - КонецЕсли; - ПредлагатьУстановкуРасширенияРаботыСФайлами = ПараметрыПриложения[ИмяПараметра] Или ПервоеОбращениеЗаСеанс; - - Если ДополнительныеПараметры.ВозможноПродолжениеБезУстановки И Не ПредлагатьУстановкуРасширенияРаботыСФайлами Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещенияЗавершение); - Возврат; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТекстПредложения", ДополнительныеПараметры.ТекстПредложения); - ПараметрыФормы.Вставить("ВозможноПродолжениеБезУстановки", ДополнительныеПараметры.ВозможноПродолжениеБезУстановки); - ОткрытьФорму("ОбщаяФорма.ВопросОбУстановкеРасширенияРаботыСФайлами", ПараметрыФормы,,,,,ДополнительныеПараметры.ОписаниеОповещенияЗавершение); - -КонецПроцедуры - -Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиЗавершение(Действие, ОповещениеОЗакрытии) Экспорт - - РасширениеПодключено = (Действие = "РасширениеПодключено" Или Действие = "ПодключениеНеТребуется"); -#Если ВебКлиент Тогда - Если Действие = "БольшеНеПредлагать" - Или Действие = "РасширениеПодключено" Тогда - СистемнаяИнформация = Новый СистемнаяИнформация(); - ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; - ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"] = Ложь; - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( - "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, Ложь); - КонецЕсли; +#Если ВебКлиент Или МобильныйКлиент Тогда + Возврат Ложь; +#Иначе + ПараметрыРаботыКлиентаПриЗапуске = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + Возврат Не ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() + И Не ПараметрыРаботыКлиентаПриЗапуске.ЭтоБазоваяВерсияКонфигурации + И Не ПараметрыРаботыКлиентаПриЗапуске.ЭтоУчебнаяПлатформа; #КонецЕсли - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, РасширениеПодключено); - -КонецПроцедуры +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +#Область РасширениеДляРаботыСФайлами Процедура ПроверитьРасширениеРаботыСФайламиПодключеноЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт @@ -1145,131 +966,7 @@ КонецПроцедуры -Процедура КомментарийЗавершениеВвода(Знач ВведенныйТекст, Знач ДополнительныеПараметры) Экспорт - - Если ВведенныйТекст = Неопределено Тогда - Возврат; - КонецЕсли; - - РеквизитФормы = ДополнительныеПараметры.ФормаВладелец; - - ПутьКРеквизитуФормы = СтрРазделить(ДополнительныеПараметры.ИмяРеквизита, "."); - // Если реквизит вида "Объект.Комментарий" и т.п. - Если ПутьКРеквизитуФормы.Количество() > 1 Тогда - Для Индекс = 0 По ПутьКРеквизитуФормы.Количество() - 2 Цикл - РеквизитФормы = РеквизитФормы[ПутьКРеквизитуФормы[Индекс]]; - КонецЦикла; - КонецЕсли; - - РеквизитФормы[ПутьКРеквизитуФормы[ПутьКРеквизитуФормы.Количество() - 1]] = ВведенныйТекст; - ДополнительныеПараметры.ФормаВладелец.Модифицированность = Истина; - -КонецПроцедуры - -Процедура ЗарегистрироватьCOMСоединительЗавершение(Ответ, Параметры) Экспорт - - Если Ответ = КодВозвратаДиалога.Да Тогда - ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); - ЗавершитьРаботуСистемы(Истина, Истина); - КонецЕсли; - -КонецПроцедуры - -Процедура ПодтвердитьЗакрытиеФормы() Экспорт - - ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено); - КонецЕсли; - - Параметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"]; - Если Параметры = Неопределено Тогда - Возврат; - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеФормыЗавершение", ЭтотОбъект, Параметры); - Если ПустаяСтрока(Параметры.ТекстПредупреждения) Тогда - ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); - Иначе - ТекстВопроса = Параметры.ТекстПредупреждения; - КонецЕсли; - - ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена, , - КодВозвратаДиалога.Нет); - -КонецПроцедуры - -Процедура ПодтвердитьЗакрытиеФормыЗавершение(Ответ, Параметры) Экспорт - - ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено; - - Если Ответ = КодВозвратаДиалога.Да Тогда - ВыполнитьОбработкуОповещения(Параметры.ОповещениеСохранитьИЗакрыть); - - ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда - Форма = Параметры.ОповещениеСохранитьИЗакрыть.Модуль; - Форма.Модифицированность = Ложь; - Форма.Закрыть(); - Иначе - Форма = Параметры.ОповещениеСохранитьИЗакрыть.Модуль; - Форма.Модифицированность = Истина; - КонецЕсли; - -КонецПроцедуры - -Процедура ПодтвердитьЗакрытиеПроизвольнойФормы() Экспорт - - ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено); - КонецЕсли; - - Параметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"]; - Если Параметры = Неопределено Тогда - Возврат; - КонецЕсли; - ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено; - РежимВопроса = РежимДиалогаВопрос.ДаНет; - - Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеПроизвольнойФормыЗавершение", ЭтотОбъект, Параметры); - - ПоказатьВопрос(Оповещение, Параметры.ТекстПредупреждения, РежимВопроса); - -КонецПроцедуры - -Процедура ПодтвердитьЗакрытиеПроизвольнойФормыЗавершение(Ответ, Параметры) Экспорт - - Форма = Параметры.Форма; - Если Ответ = КодВозвратаДиалога.Да - Или Ответ = КодВозвратаДиалога.ОК Тогда - Форма[Параметры.ИмяРеквизитаЗакрытьФормуБезПодтверждения] = Истина; - Если Параметры.ОписаниеОповещенияЗакрыть <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Параметры.ОписаниеОповещенияЗакрыть); - КонецЕсли; - Форма.Закрыть(); - Иначе - Форма[Параметры.ИмяРеквизитаЗакрытьФормуБезПодтверждения] = Ложь; - КонецЕсли; - -КонецПроцедуры - -Функция ИмяОбъектаМетаданных(Тип) Экспорт - - ИмяПараметра = "СтандартныеПодсистемы.ИменаОбъектовМетаданных"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, Новый Соответствие); - КонецЕсли; - ИменаОбъектовМетаданных = ПараметрыПриложения[ИмяПараметра]; - - Результат = ИменаОбъектовМетаданных[Тип]; - Если Результат = Неопределено Тогда - Результат = СтандартныеПодсистемыВызовСервера.ИмяОбъектаМетаданных(Тип); - ИменаОбъектовМетаданных.Вставить(Тип, Результат); - КонецЕсли; - - Возврат Результат; - -КонецФункции +#КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl new file mode 100644 index 000000000..80576d700 --- /dev/null +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl @@ -0,0 +1,540 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ЗапускВнешнихПриложений + +Функция БезопаснаяСтрокаКоманды(КомандаЗапуска) Экспорт + + Результат = ""; + + Если ТипЗнч(КомандаЗапуска) = Тип("Строка") Тогда + + Если СодержитНебезопасныеДействия(КомандаЗапуска) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось запустить программу + |по причине: + |Недопустимая строка команды + |%1 + |по причине: + |Строка команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), + КомандаЗапуска); + КонецЕсли; + + Результат = КомандаЗапуска; + + ИначеЕсли ТипЗнч(КомандаЗапуска) = Тип("Массив") Тогда + + Если КомандаЗапуска.Количество() > 0 Тогда + + Если СодержитНебезопасныеДействия(КомандаЗапуска[0]) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось запустить программу + |по причине: + |Недопустимая команда или путь к исполняемому файлу + |%1 + |по причине: + |Команды не должна содержать символы: ""$"", ""`"", ""|"", "";"", ""&"".'"), + КомандаЗапуска[0]); + КонецЕсли; + + Результат = МассивВСтрокуКоманды(КомандаЗапуска); + + Иначе + ВызватьИсключение + НСтр("ru = 'Ожидалось, что первый элемент массива КомандаЗапуска будет командой или путем к исполняемому файлу.'"); + КонецЕсли; + + Иначе + ВызватьИсключение + НСтр("ru = 'Ожидалось, что значение КомандаЗапуска будет <Строка> или <Массив>'"); + КонецЕсли; + + Возврат Результат + +КонецФункции + +#КонецОбласти + +#Область ТабличныйДокумент + +//////////////////////////////////////////////////////////////////////////////// +// Функции для работы с табличными документами. + +// Рассчитывает показатели числовых ячеек в табличном документе. +// +// Параметры: +// ПараметрыРасчета - структура - см. также ОбщегоНазначенияСлужебныйКлиент.ПараметрыРасчетаПоказателейЯчеек. +// +// Возвращаемое значение: +// Структура - результаты расчета выделенных ячеек. +// * Количество - Число - Количество выделенных ячеек. +// * КоличествоЧисловых - Число - Количество числовых ячеек. +// * Сумма - Число - Сумма выделенных ячеек с числами. +// * Среднее - Число - Сумма выделенных ячеек с числами. +// * Минимум - Число - Сумма выделенных ячеек с числами. +// * Максимум - Число - Максимум выделенных ячеек с числами. +// +Функция РасчетныеПоказателиЯчеек(Знач ТабличныйДокумент, ВыделенныеОбласти) Экспорт + РасчетныеПоказатели = Новый Структура; + РасчетныеПоказатели.Вставить("Количество", 0); + РасчетныеПоказатели.Вставить("КоличествоНеПустых", 0); + РасчетныеПоказатели.Вставить("КоличествоЧисловых", 0); + РасчетныеПоказатели.Вставить("Сумма", 0); + РасчетныеПоказатели.Вставить("Среднее", 0); + РасчетныеПоказатели.Вставить("Минимум", 0); + РасчетныеПоказатели.Вставить("Максимум", 0); + + Если ВыделенныеОбласти = Неопределено Тогда + ВыделенныеОбласти = ТабличныйДокумент.ВыделенныеОбласти; + КонецЕсли; + + ПроверенныеЯчейки = Новый Соответствие; + + Для Каждого ВыделеннаяОбласть Из ВыделенныеОбласти Цикл + Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") + И ТипЗнч(ВыделеннаяОбласть) <> Тип("Структура") Тогда + Продолжить; + КонецЕсли; + + ВыделеннаяОбластьВерх = ВыделеннаяОбласть.Верх; + ВыделеннаяОбластьНиз = ВыделеннаяОбласть.Низ; + ВыделеннаяОбластьЛево = ВыделеннаяОбласть.Лево; + ВыделеннаяОбластьПраво = ВыделеннаяОбласть.Право; + + Если ВыделеннаяОбластьВерх = 0 Тогда + ВыделеннаяОбластьВерх = 1; + КонецЕсли; + + Если ВыделеннаяОбластьНиз = 0 Тогда + ВыделеннаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы; + КонецЕсли; + + Если ВыделеннаяОбластьЛево = 0 Тогда + ВыделеннаяОбластьЛево = 1; + КонецЕсли; + + Если ВыделеннаяОбластьПраво = 0 Тогда + ВыделеннаяОбластьПраво = ТабличныйДокумент.ШиринаТаблицы; + КонецЕсли; + + Если ВыделеннаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Колонки Тогда + ВыделеннаяОбластьВерх = ВыделеннаяОбласть.Низ; + ВыделеннаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы; + КонецЕсли; + + ВыделеннаяОбластьВысота = ВыделеннаяОбластьНиз - ВыделеннаяОбластьВерх + 1; + ВыделеннаяОбластьШирина = ВыделеннаяОбластьПраво - ВыделеннаяОбластьЛево + 1; + + РасчетныеПоказатели.Количество = РасчетныеПоказатели.Количество + ВыделеннаяОбластьШирина * ВыделеннаяОбластьВысота; + + Для НомерКолонки = ВыделеннаяОбластьЛево По ВыделеннаяОбластьПраво Цикл + Для НомерСтроки = ВыделеннаяОбластьВерх По ВыделеннаяОбластьНиз Цикл + Ячейка = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + Если ПроверенныеЯчейки.Получить(Ячейка.Имя) = Неопределено Тогда + ПроверенныеЯчейки.Вставить(Ячейка.Имя, Истина); + Иначе + Продолжить; + КонецЕсли; + + Если Ячейка.Видимость = Истина Тогда + Если Ячейка.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Колонки + И Ячейка.СодержитЗначение И ТипЗнч(Ячейка.Значение) = Тип("Число") Тогда + Число = Ячейка.Значение; + ИначеЕсли ЗначениеЗаполнено(Ячейка.Текст) Тогда + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + + ТекстЯчейки = Ячейка.Текст; + Если СтрНачинаетсяС(ТекстЯчейки, "(") + И СтрЗаканчиваетсяНа(ТекстЯчейки, ")") Тогда + + ТекстЯчейки = СтрЗаменить(ТекстЯчейки, "(", ""); + ТекстЯчейки = СтрЗаменить(ТекстЯчейки, ")", ""); + + Число = ОписаниеТипаЧисло.ПривестиЗначение(ТекстЯчейки); + Если Число > 0 Тогда + Число = -Число; + КонецЕсли; + Иначе + Число = ОписаниеТипаЧисло.ПривестиЗначение(ТекстЯчейки); + КонецЕсли; + Иначе + Продолжить; + КонецЕсли; + + РасчетныеПоказатели.КоличествоНеПустых = РасчетныеПоказатели.КоличествоНеПустых + 1; + Если ТипЗнч(Число) = Тип("Число") Тогда + РасчетныеПоказатели.КоличествоЧисловых = РасчетныеПоказатели.КоличествоЧисловых + 1; + РасчетныеПоказатели.Сумма = РасчетныеПоказатели.Сумма + Число; + Если РасчетныеПоказатели.КоличествоЧисловых = 1 Тогда + РасчетныеПоказатели.Минимум = Число; + РасчетныеПоказатели.Максимум = Число; + Иначе + РасчетныеПоказатели.Минимум = Мин(Число, РасчетныеПоказатели.Минимум); + РасчетныеПоказатели.Максимум = Макс(Число, РасчетныеПоказатели.Максимум); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Если РасчетныеПоказатели.КоличествоЧисловых > 0 Тогда + РасчетныеПоказатели.Среднее = РасчетныеПоказатели.Сумма / РасчетныеПоказатели.КоличествоЧисловых; + КонецЕсли; + + Возврат РасчетныеПоказатели; +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ОповещениеПользователя + +Процедура СообщитьПользователю( + Знач ТекстСообщенияПользователю, + Знач КлючДанных, + Знач Поле, + Знач ПутьКДанным = "", + Отказ = Ложь, + ЭтоОбъект = Ложь) Экспорт + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщенияПользователю; + Сообщение.Поле = Поле; + + Если ЭтоОбъект Тогда + Сообщение.УстановитьДанные(КлючДанных); + Иначе + Сообщение.КлючДанных = КлючДанных; + КонецЕсли; + + Если НЕ ПустаяСтрока(ПутьКДанным) Тогда + Сообщение.ПутьКДанным = ПутьКДанным; + КонецЕсли; + + Сообщение.Сообщить(); + + Отказ = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ДанныеВБазе + +#Область ПредопределенныйЭлемент + +Функция ИспользоватьСтандартнуюФункциюПолученияПредопределенного(ПолноеИмяПредопределенного) Экспорт + + // Используется стандартная функция платформы для получения: + // - пустых ссылок; + // - значений перечислений; + // - точек маршрута бизнес-процессов. + + Возврат ".ПУСТАЯССЫЛКА" = ВРег(Прав(ПолноеИмяПредопределенного, 13)) + Или "ПЕРЕЧИСЛЕНИЕ." = ВРег(Лев(ПолноеИмяПредопределенного, 13)) + Или "БИЗНЕСПРОЦЕСС." = ВРег(Лев(ПолноеИмяПредопределенного, 14)); + +КонецФункции + +Функция ИмяПредопределенногоПоПолям(ПолноеИмяПредопределенного) Экспорт + + ЧастиПолногоИмени = СтрРазделить(ПолноеИмяПредопределенного, "."); + Если ЧастиПолногоИмени.Количество() <> 3 Тогда + ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); + КонецЕсли; + + ПолноеИмяОбъектаМетаданных = ВРег(ЧастиПолногоИмени[0] + "." + ЧастиПолногоИмени[1]); + ИмяПредопределенного = ЧастиПолногоИмени[2]; + + Результат = Новый Структура; + Результат.Вставить("ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); + Результат.Вставить("ИмяПредопределенного", ИмяПредопределенного); + + Возврат Результат; + +КонецФункции + +Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного, ПоляПредопределенного, ПредопределенныеЗначения) Экспорт + + // Если ошибка в имени метаданных. + Если ПредопределенныеЗначения = Неопределено Тогда + ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); + КонецЕсли; + + // Получение результата из кэша. + Результат = ПредопределенныеЗначения.Получить(ПоляПредопределенного.ИмяПредопределенного); + + // Если предопределенного нет в метаданных. + Если Результат = Неопределено Тогда + ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); + КонецЕсли; + + // Если предопределенный есть в метаданных, но не создан в ИБ. + Если Результат = Null Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного) Экспорт + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Предопределенное значение ""%1"" не найдено.'"), ПолноеИмяПредопределенного); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область Даты + +Функция ПредставлениеЛокальнойДатыСоСмещением(ЛокальнаяДата, Смещение) Экспорт + + ПредставлениеСмещения = "Z"; + + Если Смещение > 0 Тогда + ПредставлениеСмещения = "+"; + ИначеЕсли Смещение < 0 Тогда + ПредставлениеСмещения = "-"; + Смещение = -Смещение; + КонецЕсли; + + Если Смещение <> 0 Тогда + ПредставлениеСмещения = ПредставлениеСмещения + Формат('00010101' + Смещение, "ДФ=HH:mm"); + КонецЕсли; + + Возврат Формат(ЛокальнаяДата, "ДФ=yyyy-MM-ddTHH:mm:ss; ДП=0001-01-01T00:00:00") + ПредставлениеСмещения; + +КонецФункции + +#КонецОбласти + +#Область ВнешнееСоединение + +Функция УстановитьВнешнееСоединениеСБазой(Параметры, ПодключениеНедоступно, КраткоеОписаниеОшибки) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Соединение"); + Результат.Вставить("КраткоеОписаниеОшибки", ""); + Результат.Вставить("ПодробноеОписаниеОшибки", ""); + Результат.Вставить("ОшибкаПодключенияКомпоненты", Ложь); + +#Если МобильныйКлиент Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Подключение к другой программе не доступно в мобильном клиенте.'"); + + Результат.ОшибкаПодключенияКомпоненты = Истина; + Результат.ПодробноеОписаниеОшибки = СтрокаСообщенияОбОшибке; + Результат.КраткоеОписаниеОшибки = СтрокаСообщенияОбОшибке; + + Возврат Результат; + +#Иначе + + Если ПодключениеНедоступно Тогда + Результат.Соединение = Неопределено; + Результат.КраткоеОписаниеОшибки = КраткоеОписаниеОшибки; + Результат.ПодробноеОписаниеОшибки = КраткоеОписаниеОшибки; + Возврат Результат; + КонецЕсли; + + Попытка + COMConnector = Новый COMObject(ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); // "V83.COMConnector" + Исключение + Информация = ИнформацияОбОшибке(); + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось подключится к другой программе: %1'"); + + Результат.ОшибкаПодключенияКомпоненты = Истина; + Результат.ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация)); + Результат.КраткоеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация)); + + Возврат Результат; + КонецПопытки; + + ФайловыйВариантРаботы = Параметры.ВариантРаботыИнформационнойБазы = 0; + + // Проверка корректности указания параметров. + ОшибкаПроверкиЗаполнения = Ложь; + Если ФайловыйВариантРаботы Тогда + + Если ПустаяСтрока(Параметры.КаталогИнформационнойБазы) Тогда + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задано месторасположение каталога информационной базы.'"); + ОшибкаПроверкиЗаполнения = Истина; + КонецЕсли; + + Иначе + + Если ПустаяСтрока(Параметры.ИмяСервера1СПредприятия) Или ПустаяСтрока(Параметры.ИмяИнформационнойБазыНаСервере1СПредприятия) Тогда + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не заданы обязательные параметры подключения: ""Имя сервера""; ""Имя информационной базы на сервере"".'"); + ОшибкаПроверкиЗаполнения = Истина; + КонецЕсли; + + КонецЕсли; + + Если ОшибкаПроверкиЗаполнения Тогда + + Результат.ПодробноеОписаниеОшибки = СтрокаСообщенияОбОшибке; + Результат.КраткоеОписаниеОшибки = СтрокаСообщенияОбОшибке; + Возврат Результат; + + КонецЕсли; + + // Формирование строки соединения. + ШаблонСтрокиСоединения = "[СтрокаБазы][СтрокаАутентификации]"; + + Если ФайловыйВариантРаботы Тогда + СтрокаБазы = "File = ""&КаталогИнформационнойБазы"""; + СтрокаБазы = СтрЗаменить(СтрокаБазы, "&КаталогИнформационнойБазы", Параметры.КаталогИнформационнойБазы); + Иначе + СтрокаБазы = "Srvr = ""&ИмяСервера1СПредприятия""; Ref = ""&ИмяИнформационнойБазыНаСервере1СПредприятия"""; + СтрокаБазы = СтрЗаменить(СтрокаБазы, "&ИмяСервера1СПредприятия", Параметры.ИмяСервера1СПредприятия); + СтрокаБазы = СтрЗаменить(СтрокаБазы, "&ИмяИнформационнойБазыНаСервере1СПредприятия", Параметры.ИмяИнформационнойБазыНаСервере1СПредприятия); + КонецЕсли; + + Если Параметры.АутентификацияОперационнойСистемы Тогда + СтрокаАутентификации = ""; + Иначе + + Если СтрНайти(Параметры.ИмяПользователя, """") Тогда + Параметры.ИмяПользователя = СтрЗаменить(Параметры.ИмяПользователя, """", """"""); + КонецЕсли; + + Если СтрНайти(Параметры.ПарольПользователя, """") Тогда + Параметры.ПарольПользователя = СтрЗаменить(Параметры.ПарольПользователя, """", """"""); + КонецЕсли; + + СтрокаАутентификации = "; Usr = ""&ИмяПользователя""; Pwd = ""&ПарольПользователя"""; + СтрокаАутентификации = СтрЗаменить(СтрокаАутентификации, "&ИмяПользователя", Параметры.ИмяПользователя); + СтрокаАутентификации = СтрЗаменить(СтрокаАутентификации, "&ПарольПользователя", Параметры.ПарольПользователя); + КонецЕсли; + + СтрокаСоединения = СтрЗаменить(ШаблонСтрокиСоединения, "[СтрокаБазы]", СтрокаБазы); + СтрокаСоединения = СтрЗаменить(СтрокаСоединения, "[СтрокаАутентификации]", СтрокаАутентификации); + + Попытка + Результат.Соединение = COMConnector.Connect(СтрокаСоединения); + Исключение + Информация = ИнформацияОбОшибке(); + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось подключиться к другой программе: %1'"); + + Результат.ОшибкаПодключенияКомпоненты = Истина; + Результат.ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ПодробноеПредставлениеОшибки(Информация)); + Результат.КраткоеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, КраткоеПредставлениеОшибки(Информация)); + КонецПопытки; + + Возврат Результат; + +#КонецЕсли + +КонецФункции + +#КонецОбласти + +#Область ЗапускВнешнихПриложений + +#Область БезопаснаяСтрокаКоманды + +Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды) + + Возврат СтрНайти(СтрокаКоманды, "$") <> 0 + Или СтрНайти(СтрокаКоманды, "`") <> 0 + Или СтрНайти(СтрокаКоманды, "|") <> 0 + Или СтрНайти(СтрокаКоманды, ";") <> 0 + Или СтрНайти(СтрокаКоманды, "&") <> 0; + +КонецФункции + +Функция МассивВСтрокуКоманды(КомандаЗапуска) + + Результат = Новый Массив; + НужныКавычки = Ложь; + Для Каждого Аргумент Из КомандаЗапуска Цикл + + Если Результат.Количество() > 0 Тогда + Результат.Добавить(" ") + КонецЕсли; + + НужныКавычки = Аргумент = Неопределено + Или ПустаяСтрока(Аргумент) + Или СтрНайти(Аргумент, " ") + Или СтрНайти(Аргумент, Символы.Таб) + Или СтрНайти(Аргумент, "&") + Или СтрНайти(Аргумент, "(") + Или СтрНайти(Аргумент, ")") + Или СтрНайти(Аргумент, "[") + Или СтрНайти(Аргумент, "]") + Или СтрНайти(Аргумент, "{") + Или СтрНайти(Аргумент, "}") + Или СтрНайти(Аргумент, "^") + Или СтрНайти(Аргумент, "=") + Или СтрНайти(Аргумент, ";") + Или СтрНайти(Аргумент, "!") + Или СтрНайти(Аргумент, "'") + Или СтрНайти(Аргумент, "+") + Или СтрНайти(Аргумент, ",") + Или СтрНайти(Аргумент, "`") + Или СтрНайти(Аргумент, "~") + Или СтрНайти(Аргумент, "$") + Или СтрНайти(Аргумент, "|"); + + Если НужныКавычки Тогда + Результат.Добавить(""""); + КонецЕсли; + + Результат.Добавить(СтрЗаменить(Аргумент, """", """""")); + + Если НужныКавычки Тогда + Результат.Добавить(""""); + КонецЕсли; + + КонецЦикла; + + Возврат СтрСоединить(Результат); + +КонецФункции + +#КонецОбласти + +Функция НовыйФайлЗапускаКомандыWindows(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодировкаИсполнения) Экспорт + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.ДобавитьСтроку("@echo off"); + + Если ВРег(КодировкаИсполнения) = "OEM" Тогда + ТекстовыйДокумент.ДобавитьСтроку("chcp 437"); + КонецЕсли; + + Если ВРег(КодировкаИсполнения) = "UTF8" Тогда + ТекстовыйДокумент.ДобавитьСтроку("chcp 65001"); + КонецЕсли; + + Если Не ПустаяСтрока(ТекущийКаталог) Тогда + ТекстовыйДокумент.ДобавитьСтроку("cd /D """ + ТекущийКаталог + """"); + КонецЕсли; + ТекстовыйДокумент.ДобавитьСтроку("cmd /S /C "" " + СтрокаКоманды + " """); + + Если Не ДождатьсяЗавершения Тогда + + КонецЕсли; + + Возврат ТекстовыйДокумент; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/ОбщегоНазначенияСлужебныйКлиентСервер.mdo b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/ОбщегоНазначенияСлужебныйКлиентСервер.mdo new file mode 100644 index 000000000..909a7822f --- /dev/null +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/ОбщегоНазначенияСлужебныйКлиентСервер.mdo @@ -0,0 +1,13 @@ + + + ОбщегоНазначенияСлужебныйКлиентСервер + + ru + Общего назначения служебный клиент сервер + + Клиентские и серверные процедуры общего назначения + true + true + true + true + diff --git a/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl index bce311f3b..92a6ce0db 100644 --- a/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl b/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl index 055a8d316..f1f6ee007 100644 --- a/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl +++ b/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl index 5272ffd3c..faf678619 100644 --- a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Отправляет SMS через настроенного поставщика услуги, возвращает идентификатор сообщения. @@ -61,7 +69,7 @@ Если Не ЗначениеЗаполнено(Результат.ОписаниеОшибки) И Не ЗначениеЗаполнено(Результат.ОтправленныеСообщения) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при выходе из процедуры ОтправкаSMSПереопределяемый.ОтправитьSMS: |Не заполнены выходные параметры ОписаниеОшибки и ОтправленныеСообщения (провайдер: %1). - |Ожидается заполнение по меньшей мере одного из этих параметров.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |Ожидается заполнение по меньшей мере одного из этих параметров.'", ОбщегоНазначения.КодОсновногоЯзыка()), НастройкиОтправкиSMS.Провайдер); КонецЕсли; @@ -112,7 +120,6 @@ Возврат "НеОтправлялось"; КонецЕсли; - НастройкиОтправкиSMS = ОтправкаSMSПовтИсп.НастройкиОтправкиSMS(); Результат = ОтправкаSMSПовтИсп.СтатусДоставки(ИдентификаторСообщения); Возврат Результат; @@ -142,7 +149,7 @@ // Проверяет возможность отправки SMS для текущего пользователя. // // Возвращаемое значение: -// Булево - Истина, если отправка SMS настроена, и у текущего пользователя достаточно прав для отправки SMS. +// Булево - Истина, если отправка SMS настроена и у текущего пользователя достаточно прав для отправки SMS. // Функция ДоступнаОтправкаSMS() Экспорт Возврат ПравоДоступа("Просмотр", Метаданные.ОбщиеФормы.ОтправкаSMS) И НастройкаОтправкиSMSВыполнена() Или Пользователи.ЭтоПолноправныйПользователь(); diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl index 5b94a2136..7fb8cfdb1 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму для отправки нового SMS. @@ -13,23 +21,19 @@ СтандартнаяОбработка = Истина; ОтправкаSMSКлиентПереопределяемый.ПриОтправкеSMS(НомераПолучателей, Текст, ДополнительныеПараметры, СтандартнаяОбработка); Если СтандартнаяОбработка Тогда + ПараметрыОтправки = Новый Структура("НомераПолучателей, Текст, ДополнительныеПараметры"); - ПараметрыОтправки.НомераПолучателей = НомераПолучателей; - ПараметрыОтправки.Текст = Текст; - Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда - ПараметрыОтправки.ДополнительныеПараметры = ДополнительныеПараметры; - Иначе - ПараметрыОтправки.ДополнительныеПараметры = Новый Структура; - КонецЕсли; - Если НЕ ПараметрыОтправки.ДополнительныеПараметры.Свойство("ПеревестиВТранслит") Тогда + ПараметрыОтправки.НомераПолучателей = НомераПолучателей; + ПараметрыОтправки.Текст = Текст; + ПараметрыОтправки.ДополнительныеПараметры = ?(ТипЗнч(ДополнительныеПараметры) = Тип("Структура"), ДополнительныеПараметры, Новый Структура); + + Если Не ПараметрыОтправки.ДополнительныеПараметры.Свойство("ПеревестиВТранслит") Тогда ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПеревестиВТранслит", Ложь); КонецЕсли; - Если НЕ ПараметрыОтправки.ДополнительныеПараметры.Свойство("ИсточникКонтактнойИнформации") Тогда - ПараметрыОтправки.ДополнительныеПараметры.Вставить("ИсточникКонтактнойИнформации", ""); - КонецЕсли; - + ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьНовоеSMSПроверкаНастроекВыполнена", ЭтотОбъект, ПараметрыОтправки); ПроверитьНаличиеНастроекДляОтправкиSMS(ОписаниеОповещения); + КонецЕсли; КонецПроцедуры @@ -78,29 +82,10 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") И ПараметрыРаботыКлиента.ИспользоватьПрочиеВзаимодействия Тогда - Адресаты = Новый Массив; - ИсточникКонтактнойИнформации = ?(ПараметрыОтправки.ДополнительныеПараметры.Свойство("ИсточникКонтактнойИнформации"), ПараметрыОтправки.ДополнительныеПараметры.ИсточникКонтактнойИнформации, ""); Предмет = ?(ПараметрыОтправки.ДополнительныеПараметры.Свойство("Предмет"), ПараметрыОтправки.ДополнительныеПараметры.Предмет, Неопределено); - Для каждого ЭлементМассива Из ПараметрыОтправки.НомераПолучателей Цикл - - Если ТипЗнч(ЭлементМассива) = Тип("Строка") Тогда - НомерТелефона = ЭлементМассива; - Представление = ЭлементМассива; - ИсточникКонтактнойИнформации = ИсточникКонтактнойИнформации; - Иначе - НомерТелефона = ЭлементМассива.НомерТелефона; - Представление = ЭлементМассива.Представление; - ИсточникКонтактнойИнформации = ЭлементМассива.ИсточникКонтактнойИнформации; - КонецЕсли; - - Адресаты.Добавить(Новый Структура("Телефон, Представление, ИсточникКонтактнойИнформации", - НомерТелефона, Представление, ИсточникКонтактнойИнформации)); - - КонецЦикла; - МодульВзаимодействияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВзаимодействияКлиент"); - МодульВзаимодействияКлиент.ОткрытьФормуОтправкиSMS(Адресаты, ПараметрыОтправки.Текст, Предмет, ПараметрыОтправки.ДополнительныеПараметры.ПеревестиВТранслит); + МодульВзаимодействияКлиент.ОткрытьФормуОтправкиSMS(ПараметрыОтправки.НомераПолучателей, ПараметрыОтправки.Текст, Предмет, ПараметрыОтправки.ДополнительныеПараметры.ПеревестиВТранслит); Иначе ОткрытьФорму("ОбщаяФорма.ОтправкаSMS", ПараметрыОтправки); КонецЕсли; diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl index 218434734..26e9ec6c5 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму для отправки нового SMS. diff --git a/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl index 926837f1e..0277f1c18 100644 --- a/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Отправляет SMS через настроенного поставщика услуги. diff --git a/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl index 8bd634d7c..14b26c285 100644 --- a/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Функция СтатусДоставки(ИдентификаторСообщения) Экспорт diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl index 25e2d69c1..f88c06a60 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезGSMINFORM/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Отправляет SMS через GSM-INFORM. @@ -67,7 +75,7 @@ "ru = 'Не удалось отправить SMS: |%1 (код ошибки: %2)'"), ОписаниеОшибкиОтправки(ОтветСервера["error_no"]), ОтветСервера["error_no"]); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки); КонецЕсли; @@ -127,7 +135,7 @@ Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( "ru = 'Не удалось получить статус доставки SMS (id: ""%3""): |%1 (код ошибки: %2)'"), ОписаниеОшибки, КодОшибки, ИдентификаторСообщения); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Комментарий); КонецЕсли; @@ -196,11 +204,11 @@ Попытка Соединение = Новый HTTPСоединение("gsm-inform.ru",,,, - ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), + ПолучениеФайловИзИнтернета.ПолучитьПрокси("http"), 60); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl index 4fb4d70fb..a7033ec18 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMS4B/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Отправляет SMS через SMS4B. @@ -39,7 +47,7 @@ Результат.ОписаниеОшибки = СокрП(Результат.ОписаниеОшибки); Если Не ПустаяСтрока(Результат.ОписаниеОшибки) Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки); КонецЕсли; @@ -77,7 +85,7 @@ ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( "ru = 'Не удалось получить статус доставки SMS (id: ""%3""): |%1 (код ошибки: %2)'"), ОписаниеОшибкиПолученияСтатуса(КодСостояния), КодСостояния, ИдентификаторСообщения); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки); КонецЕсли; @@ -168,13 +176,13 @@ Попытка Соединение = Новый HTTPСоединение("sms4b.ru",,,, - ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"), + ПолучениеФайловИзИнтернета.ПолучитьПрокси("https"), 60, ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение()); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl index 92068a5d2..8f9c158f5 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSRU/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Отправляет SMS через SMS.RU. @@ -65,7 +73,7 @@ КонецЦикла; Иначе Результат.ОписаниеОшибки = ОписаниеОшибкиОтправки(ОтветСервера); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки); КонецЕсли; @@ -103,7 +111,7 @@ ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( "ru = 'Не удалось получить статус доставки SMS (id: ""%3""): |%1 (код ошибки: %2)'"), ОписаниеОшибкиПолученияСтатуса(КодСостояния), КодСостояния, ИдентификаторСообщения); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки); КонецЕсли; @@ -177,12 +185,12 @@ HTTPОтвет = Неопределено; Попытка - Соединение = Новый HTTPСоединение("sms.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"), + Соединение = Новый HTTPСоединение("sms.ru", , , , ПолучениеФайловИзИнтернета.ПолучитьПрокси("https"), 60, ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение()); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl index a9e028ea2..4d3be414a 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Отправляет SMS через SMS-ЦЕНТР. @@ -56,7 +64,7 @@ "ru = 'Не удалось отправить SMS: |%1 (код ошибки: %2)'"), ОписаниеОшибкиОтправки(ОтветСервера["error_code"]), ОтветСервера["error_code"]); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки); Иначе ИдентификаторСообщения = ОтветСервера["id"]; @@ -112,7 +120,7 @@ ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( "ru = 'Не удалось получить статус доставки SMS (id: ""%3""): |%1 (код ошибки: %2)'"), ОписаниеОшибкиПолученияСтатуса(ОтветСервера["error_code"]), ОтветСервера["error_code"], ИдентификаторСообщения); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки); Возврат "Ошибка"; КонецЕсли; @@ -179,11 +187,11 @@ HTTPОтвет = Неопределено; Попытка - Соединение = Новый HTTPСоединение("smsc.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"), + Соединение = Новый HTTPСоединение("smsc.ru", , , , ПолучениеФайловИзИнтернета.ПолучитьПрокси("https"), 60, ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение()); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Неопределено; КонецПопытки; @@ -192,7 +200,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Запрос ""%1"" не выполнен. Код состояния: %2.'"), ИмяМетода, HTTPОтвет.КодСостояния) + Символы.ПС + HTTPОтвет.ПолучитьТелоКакСтроку(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); Возврат Неопределено; КонецЕсли; diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl index 492e47447..ffa774cf9 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Отправляет SMS через Билайн. @@ -149,11 +157,11 @@ Попытка Соединение = Новый HTTPСоединение("beeline.amega-inform.ru",,,, - ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), + ПолучениеФайловИзИнтернета.ПолучитьПрокси("http"), 60); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl index 433554ebe..452088d56 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Отправляет SMS через МТС. @@ -211,7 +219,7 @@ Процедура ОбработатьИсключение(ИнформацияОбОшибке, ТекстОшибки = Неопределено, ВыполнятьДиагностику = Ложь, ВебСервис = Неопределено) ЗаписьЖурналаРегистрации( - НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -223,7 +231,7 @@ Если ВыполнятьДиагностику Тогда АдресТочкиПодключения = ВебСервис.ТочкаПодключения.Местоположение; - РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(АдресТочкиПодключения); + РезультатДиагностики = ПолучениеФайловИзИнтернета.ДиагностикаСоединения(АдресТочкиПодключения); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl index a1752e1da..3b491966e 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезСМСУслуги/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Отправляет SMS через СМС-Услуги. @@ -67,7 +75,7 @@ Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( "ru = 'Не удалось отправить SMS: |%1 (код ошибки: %2)'"), ОтветСервера.descr, КодРезультата); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки); КонецЕсли; @@ -125,7 +133,7 @@ ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( "ru = 'Не удалось получить статус доставки SMS (smsid: ""%3""): |%1 (код ошибки: %2)'"), ОтветСервера.descr, КодРезультата, ИдентификаторСообщения); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки); Возврат "Ошибка"; КонецЕсли; @@ -160,11 +168,11 @@ Попытка Соединение = Новый HTTPСоединение("lcab.sms-uslugi.ru",,,, - ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), + ПолучениеФайловИзИнтернета.ПолучитьПрокси("http"), 60); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; diff --git a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl index 874672169..b30757a9f 100644 --- a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаПереопределяемый/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl index 907222dbb..d23f2d4e6 100644 --- a/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетОДвиженияхДокументаСлужебныйКлиент/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -14,7 +21,8 @@ Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ДвиженияДокумента" Тогда - Если ТипЗнч(Область.Расшифровка) = Тип("Структура") Тогда + Если Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Прямоугольник + И ТипЗнч(Область.Расшифровка) = Тип("Структура") Тогда ОткрытьФормуРегистраИзОтчетаОДвижениях(ФормаОтчета, Область.Расшифровка, СтандартнаяОбработка); КонецЕсли; diff --git a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl index 47f676326..595474fe2 100644 --- a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Запускает процесс формирования отчета в форме отчета. @@ -23,534 +31,277 @@ //////////////////////////////////////////////////////////////////////////////// // Методы работы с СКД из формы отчета. -Функция ПараметрыВыбораОтбора(Форма, Элемент) Экспорт - ИдентификаторЭлемента = Прав(Элемент.Имя, 32); - - ЭлементКД = Форма.НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ЭлементКД = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - ДополнительныеНастройки = Форма.НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - Если ДополнительныеНастройки = Неопределено Тогда - Возврат Неопределено; +Процедура ОбновитьСвойстваНастройки(Форма, КомпоновщикНастроек, ЭлементПользовательскойНастройки) Экспорт + Свойства = "Использование"; + Если ТипЗнч(ЭлементПользовательскойНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Свойства = Свойства + ", Значение"; + ИначеЕсли ТипЗнч(ЭлементПользовательскойНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Свойства = Свойства + ", ВидСравнения, ПравоеЗначение"; КонецЕсли; - Результат = Новый Структура("Представление, ЗначенияДляВыбора, ЗначенияДляВыбораЗаполнены, БыстрыйВыбор, - |ОграничиватьВыборУказаннымиЗначениями, ОписаниеТипов, ВводСписком"); - ЗаполнитьЗначенияСвойств(Результат, ДополнительныеНастройки); + ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( + КомпоновщикНастроек.Настройки, + ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,, + КомпоновщикНастроек.ПользовательскиеНастройки); - Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Значение = ЭлементКД.ПравоеЗначение; - Условие = ЭлементКД.ВидСравнения; + Если ЭлементНастройки <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЭлементНастройки, ЭлементПользовательскойНастройки, Свойства); + КонецЕсли; + + // Завершение синхронизации: + // * В пользовательских настройках, в зависимости от типа, не заполнены свойства: + // ** ЛевоеЗначение, Представление, Отбор, Оформление, Поля, РежимОтображения. + ЗаполнитьЗначенияСвойств(ЭлементПользовательскойНастройки, ЭлементНастройки); + + Форма.ВариантМодифицирован = Ложь; +КонецПроцедуры + +Функция ТипЗначенияОграниченныйСвязьюПоТипу(Настройки, ПользовательскиеНастройки, ЭлементНастройки, ОписаниеЭлементаНастройки, ТипЗначения = Неопределено) Экспорт + Если ОписаниеЭлементаНастройки = Неопределено Тогда + Возврат ?(ТипЗначения = Неопределено, Новый ОписаниеТипов("Неопределено"), ТипЗначения); + КонецЕсли; + + Если ТипЗначения = Неопределено Тогда + ТипЗначения = ОписаниеЭлементаНастройки.ТипЗначения; + КонецЕсли; + + СвязьПоТипу = ОписаниеЭлементаНастройки.СвязьПоТипу; + + СвязанныйЭлементНастройки = ЭлементНастройкиПоПолю(Настройки, ПользовательскиеНастройки, СвязьПоТипу.Поле); + Если СвязанныйЭлементНастройки = Неопределено Тогда + Возврат ТипЗначения; + КонецЕсли; + + ДопустимыеВидыСравнения = Новый Массив; + ДопустимыеВидыСравнения.Добавить(ВидСравненияКомпоновкиДанных.Равно); + ДопустимыеВидыСравнения.Добавить(ВидСравненияКомпоновкиДанных.ВИерархии); + + Если ТипЗнч(СвязанныйЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") + И (Не СвязанныйЭлементНастройки.Использование + Или ДопустимыеВидыСравнения.Найти(СвязанныйЭлементНастройки.ВидСравнения) = Неопределено) Тогда + Возврат ТипЗначения; + КонецЕсли; + + ОписаниеСвязанногоЭлементаНастройки = ОтчетыКлиентСервер.НайтиДоступнуюНастройку(Настройки, СвязанныйЭлементНастройки); + Если ОписаниеСвязанногоЭлементаНастройки = Неопределено Тогда + Возврат ТипЗначения; + КонецЕсли; + + Если ТипЗнч(СвязанныйЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + И (ОписаниеСвязанногоЭлементаНастройки.Использование <> ИспользованиеПараметраКомпоновкиДанных.Всегда + Или Не СвязанныйЭлементНастройки.Использование) Тогда + Возврат ТипЗначения; + КонецЕсли; + + Если ТипЗнч(СвязанныйЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЗначениеСвязанногоЭлементаНастройки = СвязанныйЭлементНастройки.Значение; + ИначеЕсли ТипЗнч(СвязанныйЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЗначениеСвязанногоЭлементаНастройки = СвязанныйЭлементНастройки.ПравоеЗначение; + КонецЕсли; + + ТипСубконто = ВариантыОтчетовВызовСервера.ТипСубконто(ЗначениеСвязанногоЭлементаНастройки, СвязьПоТипу.ЭлементСвязи); + Если ТипЗнч(ТипСубконто) = Тип("ОписаниеТипов") Тогда + СвязанныеТипы = ТипСубконто.Типы(); Иначе - Значение = ЭлементКД.Значение; - Условие = ?(Результат.ВводСписком, ВидСравненияКомпоновкиДанных.ВСписке, ВидСравненияКомпоновкиДанных.Равно); + СвязанныеТипы = ОписаниеСвязанногоЭлементаНастройки.ТипЗначения.Типы(); КонецЕсли; - ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуИспользованиеГруппИЭлементов(Условие, ДополнительныеНастройки.ВыборГруппИЭлементов); - - // Стандартные параметры формы. - Результат.Вставить("ЗакрыватьПриВыборе", Истина); - Результат.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); - Результат.Вставить("Отбор", Новый Структура); - // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка). - Результат.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); - Результат.Вставить("МножественныйВыбор", Ложь); - Результат.Вставить("РежимВыбора", Истина); - // Предполагаемые реквизиты. - Результат.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - Результат.Вставить("РазрешитьНачалоПеретаскивания", Ложь); - - Результат.Вставить("ПутьКФорме", ДополнительныеНастройки.ФормаВыбора); - - Результат.Вставить("Значение", Значение); - Результат.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(Значение)); - Результат.Вставить("ПараметрыВыбора", Новый Массив); - Результат.Вставить("КлючУникальности", ИдентификаторЭлемента); - - // Фиксированные параметры выбора и связи от скрытых ведущих (предопределенные в текущем контексте). - Для Каждого ПараметрВыбора Из ДополнительныеНастройки.ПараметрыВыбора Цикл - Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда - Продолжить; - КонецЕсли; - Если Результат.ВводСписком Тогда - Результат.ПараметрыВыбора.Добавить(ПараметрВыбора); - Иначе - Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда - Результат.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); - Иначе - Результат.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); - КонецЕсли; + ВычитаемыеТипы = ТипЗначения.Типы(); + Индекс = ВычитаемыеТипы.ВГраница(); + Пока Индекс >= 0 Цикл + Если СвязанныеТипы.Найти(ВычитаемыеТипы[Индекс]) <> Неопределено Тогда + ВычитаемыеТипы.Удалить(Индекс); КонецЕсли; + Индекс = Индекс - 1; КонецЦикла; - // Динамические связи от ведущих. - Связи = Форма.ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); - Для Каждого Связь Из Связи Цикл - Если Не ЗначениеЗаполнено(Связь.ВедущийИдентификаторВФорме) Тогда - Продолжить; - КонецЕсли; - ВедущийНастройкаКД = Форма.НайтиПользовательскуюНастройкуЭлемента(Связь.ВедущийИдентификаторВФорме); - Если Не ВедущийНастройкаКД.Использование Тогда - Продолжить; - КонецЕсли; - Если ТипЗнч(ВедущийНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ЗначениеВедущего = ВедущийНастройкаКД.ПравоеЗначение; - УсловиеВедущего = ВедущийНастройкаКД.ВидСравнения; - Иначе - ЗначениеВедущего = ВедущийНастройкаКД.Значение; - ДополнительноВедущего = Форма.НайтиДополнительныеНастройкиЭлемента(Связь.ВедущийИдентификаторВФорме); - Если ДополнительноВедущего.ВводСписком Тогда - УсловиеВедущего = ВидСравненияКомпоновкиДанных.ВСписке; - Иначе - УсловиеВедущего = ВидСравненияКомпоновкиДанных.Равно; - КонецЕсли; - КонецЕсли; - Если Не ЗначениеЗаполнено(ЗначениеВедущего) Тогда - Продолжить; - КонецЕсли; - ТипЗначенияВедущего = ТипЗнч(ЗначениеВедущего); - - Если Связь.ТипСвязи = "ПоТипу" Тогда - Если УсловиеВедущего <> ВидСравненияКомпоновкиДанных.Равно - И УсловиеВедущего <> ВидСравненияКомпоновкиДанных.ВИерархии Тогда - Продолжить; - КонецЕсли; - Если ТипЗнч(Связь.ПодчиненныйИмяПараметра) = Тип("Число") И Связь.ПодчиненныйИмяПараметра > 0 Тогда - ТипСубконто = ВариантыОтчетовВызовСервера.ТипСубконто(ЗначениеВедущего, Связь.ПодчиненныйИмяПараметра); - Если ТипЗнч(ТипСубконто) = Тип("ОписаниеТипов") Тогда - ФильтрПоТипам = ТипСубконто.Типы(); - Иначе - Продолжить; - КонецЕсли; - Иначе - ФильтрПоТипам = Новый Массив; - ФильтрПоТипам.Добавить(ТипЗначенияВедущего); - КонецЕсли; - ВычитаемыеТипы = Результат.ОписаниеТипов.Типы(); - ОписанияТиповПересекаются = Ложь; - Для Каждого ТипКоторыйНадоОставить Из ФильтрПоТипам Цикл - Индекс = ВычитаемыеТипы.Найти(ТипКоторыйНадоОставить); - Если Индекс <> Неопределено Тогда - ВычитаемыеТипы.Удалить(Индекс); - ОписанияТиповПересекаются = Истина; - КонецЕсли; - КонецЦикла; - Если ОписанияТиповПересекаются Тогда - Результат.ОписаниеТипов = Новый ОписаниеТипов(Результат.ОписаниеТипов, , ВычитаемыеТипы); - КонецЕсли; - ИначеЕсли Связь.ТипСвязи = "ПоМетаданным" Или Связь.ТипСвязи = "ПараметровВыбора" Тогда - Если Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда - Продолжить; - КонецЕсли; - Если Связь.ТипСвязи = "ПоМетаданным" И Не Связь.ВедущийТип.СодержитТип(ТипЗначенияВедущего) Тогда - Продолжить; - КонецЕсли; - Если Результат.ВводСписком Тогда - Результат.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, ЗначениеВедущего)); - Иначе - Если ВРег(Лев(Связь.ПодчиненныйИмяПараметра, 6)) = ВРег("Отбор.") Тогда - Результат.Отбор.Вставить(Сред(Связь.ПодчиненныйИмяПараметра, 7), ЗначениеВедущего); - Иначе - Результат.Вставить(Связь.ПодчиненныйИмяПараметра, ЗначениеВедущего); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат Результат; + Возврат Новый ОписаниеТипов(ТипЗначения,, ВычитаемыеТипы); КонецФункции -Процедура СписокКомпоновщикаНачалоВыбора(Форма, Элемент, ДанныеВыбора, СтандартнаяОбработка) Экспорт - СтандартнаяОбработка = Ложь; +Функция ЭлементНастройкиПоПолю(Настройки, ПользовательскиеНастройки, Поле) + ЭлементНастройки = Неопределено; - ПараметрыВыбора = ПараметрыВыбораОтбора(Форма, Элемент); - Если ПараметрыВыбора = Неопределено Тогда - Возврат; - КонецЕсли; - - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("Форма", Форма); - ПараметрыОбработчика.Вставить("ИдентификаторЭлемента", Прав(Элемент.Имя, 32)); - Обработчик = Новый ОписаниеОповещения("СписокКомпоновщикаЗавершениеВыбора", ЭтотОбъект, ПараметрыОбработчика); - - Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыВыбора, ЭтотОбъект, , , , Обработчик, Блокировать); -КонецПроцедуры - -Процедура СписокКомпоновщикаЗавершениеВыбора(РезультатВыбора, ПараметрыОбработчика) Экспорт - Если ТипЗнч(РезультатВыбора) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - Форма = ПараметрыОбработчика.Форма; - - ИдентификаторЭлемента = ПараметрыОбработчика.ИдентификаторЭлемента; - - ПользовательскаяНастройкаКД = Форма.НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - ДополнительныеНастройки = Форма.НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - - // Загрузка выбранных значений в 2 списка. - СписокЗначенийВСКД = Новый СписокЗначений; - ЗаполнятьЗначенияДляВыбора = Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями - Или Не ДополнительныеНастройки.ЗначенияДляВыбораЗаполнены; - Если ЗаполнятьЗначенияДляВыбора Тогда - ЗначенияДляВыбора = Новый СписокЗначений; - КонецЕсли; - Для Каждого ЭлементСпискаВФорме Из РезультатВыбора Цикл - ЗначениеВФорме = ЭлементСпискаВФорме.Значение; - Если ЗаполнятьЗначенияДляВыбора И ЗначенияДляВыбора.НайтиПоЗначению(ЗначениеВФорме) = Неопределено Тогда - ЗаполнитьЗначенияСвойств(ЗначенияДляВыбора.Добавить(), ЭлементСпискаВФорме, "Значение, Представление"); - КонецЕсли; - Если ЭлементСпискаВФорме.Пометка Тогда - ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВСКД, ЗначениеВФорме, ЭлементСпискаВФорме.Представление, Истина); + ЭлементыНастроек = Настройки.ПараметрыДанных.Элементы; + Для Каждого Элемент Из ЭлементыНастроек Цикл + ЭлементПользовательский = ПользовательскиеНастройки.Найти(Элемент.ИдентификаторПользовательскойНастройки); + ЭлементАнализируемый = ?(ЭлементПользовательский = Неопределено, Элемент, ЭлементПользовательский); + + Поля = Новый Массив; + Поля.Добавить(Новый ПолеКомпоновкиДанных(Строка(Элемент.Параметр))); + Поля.Добавить(Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(Элемент.Параметр))); + + Если ЭлементАнализируемый.Использование + И (Поля[0] = Поле Или Поля[1] = Поле) Тогда + ЭлементНастройки = ЭлементАнализируемый; + Прервать; КонецЕсли; КонецЦикла; - Если ЗаполнятьЗначенияДляВыбора Тогда - ДополнительныеНастройки.ЗначенияДляВыбора = ЗначенияДляВыбора; - ДополнительныеНастройки.ЗначенияДляВыбораЗаполнены = Истина; - КонецЕсли; - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.ПравоеЗначение = СписокЗначенийВСКД; - Иначе - ПользовательскаяНастройкаКД.Значение = СписокЗначенийВСКД; + + Если ЭлементНастройки <> Неопределено Тогда + Возврат ЭлементНастройки; КонецЕсли; - // Включение флажка Использование. - ПользовательскаяНастройкаКД.Использование = Истина; - - Форма.ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -Процедура ИзменитьВидСравнения(Форма, ИдентификаторЭлемента, ОбработчикРезультата) Экспорт - ПользовательскаяНастройкаКД = Форма.НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ПользовательскаяНастройкаКД = Неопределено Тогда - Возврат; - КонецЕсли; - ДополнительныеНастройки = Форма.НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); - Если ДополнительныеНастройки = Неопределено Тогда - Возврат; - КонецЕсли; - - ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(ДополнительныеНастройки.ОписаниеТипов, Ложь); - - Список = Новый СписокЗначений; - - Если ИнформацияОТипах.ОграниченнойДлины Тогда + ЭлементыНастроек = Настройки.Отбор.Элементы; + Для Каждого Элемент Из ЭлементыНастроек Цикл + ЭлементПользовательский = ПользовательскиеНастройки.Найти(Элемент.ИдентификаторПользовательскойНастройки); + ЭлементАнализируемый = ?(ЭлементПользовательский = Неопределено, Элемент, ЭлементПользовательский); - Список.Добавить(ВидСравненияКомпоновкиДанных.Равно); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеРавно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); - - Если ИнформацияОТипах.СодержитОбъектныеТипы Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); // НСтр("ru = 'В списке включая подчиненные'") - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); // НСтр("ru = 'Не в списке включая подчиненные'"). - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВИерархии); // НСтр("ru = 'В группе'") - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВИерархии); // НСтр("ru = 'Не в группе'") - + Если ЭлементАнализируемый.Использование И Элемент.ЛевоеЗначение = Поле Тогда + ЭлементНастройки = ЭлементАнализируемый; + Прервать; КонецЕсли; - - Если ИнформацияОТипах.КоличествоПримитивныхТипов > 0 Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Меньше); - Список.Добавить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.Больше); - Список.Добавить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно); - - КонецЕсли; - - КонецЕсли; + КонецЦикла; - Если ИнформацияОТипах.СодержитТипСтрока Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Содержит); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеСодержит); - - Список.Добавить(ВидСравненияКомпоновкиДанных.Подобно); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеПодобно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.НачинаетсяС); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеНачинаетсяС); - - КонецЕсли; - - Если ИнформацияОТипах.ОграниченнойДлины Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Заполнено); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеЗаполнено); - - КонецЕсли; - - ТекущийЭлемент = Список.НайтиПоЗначению(ПользовательскаяНастройкаКД.ВидСравнения); - - Контекст = Новый Структура; - Контекст.Вставить("Форма", Форма); - Контекст.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - Контекст.Вставить("ОбработчикРезультата", ОбработчикРезультата); - - Обработчик = Новый ОписаниеОповещения("ИзменитьВидСравненияЗавершение", ЭтотОбъект, Контекст); - ФормаЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Условие отбора поля ""%1""'"), ДополнительныеНастройки.Представление); - - Список.ПоказатьВыборЭлемента(Обработчик, ФормаЗаголовок, ТекущийЭлемент); -КонецПроцедуры + Возврат ЭлементНастройки; +КонецФункции -Процедура ИзменитьВидСравненияЗавершение(ЭлементСписка, Контекст) Экспорт - Если ЭлементСписка = Неопределено Тогда - Результат = Неопределено; +Функция СведенияОЭлементеНастройки(КомпоновщикНастроек, Идентификатор) Экспорт + Настройки = КомпоновщикНастроек.Настройки; + ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки; + + Если ТипЗнч(Идентификатор) = Тип("Число") Тогда + Индекс = Идентификатор; Иначе - Результат = ЭлементСписка.Значение; - ПользовательскаяНастройкаКД = Контекст.Форма.НайтиПользовательскуюНастройкуЭлемента(Контекст.ИдентификаторЭлемента); - ПользовательскаяНастройкаКД.ВидСравнения = Результат; + Индекс = ОтчетыКлиентСервер.ИндексЭлементаНастройкиПоПути(Идентификатор); КонецЕсли; - Если Контекст.ОбработчикРезультата <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Контекст.ОбработчикРезультата, Результат); - КонецЕсли; -КонецПроцедуры + ЭлементПользовательскойНастройки = ПользовательскиеНастройки.Элементы[Индекс]; + + ИерархияНастроек = Новый Массив; + Элемент = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( + Настройки, + ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки, + ИерархияНастроек, + ПользовательскиеНастройки); + + Настройки = ?(ИерархияНастроек.Количество() > 0, ИерархияНастроек[ИерархияНастроек.ВГраница()], Настройки); + Описание = ОтчетыКлиентСервер.НайтиДоступнуюНастройку(Настройки, Элемент); + + Сведения = Новый Структура; + Сведения.Вставить("Настройки", Настройки); + Сведения.Вставить("Индекс", Индекс); + Сведения.Вставить("ЭлементПользовательскойНастройки", ЭлементПользовательскойНастройки); + Сведения.Вставить("Элемент", Элемент); + Сведения.Вставить("Описание", Описание); + + Возврат Сведения; +КонецФункции -Процедура ЗначениеКомпоновщикаНачалоВыбора(Форма, Элемент, ЗначенияДляВыбора, СтандартнаяОбработка) Экспорт - СтандартнаяОбработка = Ложь; - - ПараметрыВыбора = ПараметрыВыбораОтбора(Форма, Элемент); - Если ПараметрыВыбора = Неопределено Тогда - Возврат; - КонецЕсли; - - ПараметрыВыбора.Вставить("МножественныйВыбор", Ложь); - - Контекст = Новый Структура; - Контекст.Вставить("Элемент", Элемент); - Контекст.Вставить("Форма", Форма); - Контекст.Вставить("Идентификатор", Прав(Элемент.Имя, 32)); - Контекст.Вставить("ПараметрыВыбора", ПараметрыВыбора); - - // Полное имя формы выбора. - // Свойство "ФормаВыбора" недоступно на клиенте даже для чтения, - // поэтому для хранения предустановленных имен форм выбора используется коллекция БыстрыйПоискИменОбъектовМетаданных. - Если ЗначениеЗаполнено(ПараметрыВыбора.ПутьКФорме) Тогда - Обработчик = Новый ОписаниеОповещения("ЗначениеКомпоновщикаЗавершениеВыбора", ЭтотОбъект, Контекст); - ОткрытьФорму( - ПараметрыВыбора.ПутьКФорме, - ПараметрыВыбора, - Контекст.Форма, - , - , - , - Обработчик, - РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - Иначе - // Выбор типа из списка. - Обработчик = Новый ОписаниеОповещения("ЗначениеКомпоновщикаПоказатьВыборСсылкиПослеВыбораТипа", ЭтотОбъект, Контекст); - СписокВыбора = Новый СписокЗначений; - СписокВыбора.ЗагрузитьЗначения(ПараметрыВыбора.ОписаниеТипов.Типы()); - Если СписокВыбора.Количество() = 1 Тогда // Один тип - выбор не требуется. - ВыполнитьОбработкуОповещения(Обработчик, СписокВыбора[0]); - Иначе - Форма.ПоказатьВыборИзМеню(Обработчик, СписокВыбора); +// Определяет значения типа ИспользованиеГруппИЭлементов в зависимости от вида сравнения (приоритетно) или исходного значения. +// +// Параметры: +// Условие - ВидСравненияКомпоновкиДанных, Неопределено - текущее значение вида сравнения. +// ИсходноеЗначение - ИспользованиеГруппИЭлементов, ГруппыИЭлементы - текущее значение свойства +// ВыборГруппИЭлементов. +// +// Возвращаемое значение: +// ИспользованиеГруппИЭлементов - значение перечисления ИспользованиеГруппИЭлементов. +// +Функция ЗначениеТипаИспользованиеГруппИЭлементов(ИсходноеЗначение, Условие = Неопределено) Экспорт + Если Условие <> Неопределено Тогда + Если Условие = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии + Или Условие = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + Если ИсходноеЗначение = ГруппыИЭлементы.Группы + Или ИсходноеЗначение = ИспользованиеГруппИЭлементов.Группы Тогда + Возврат ИспользованиеГруппИЭлементов.Группы; + Иначе + Возврат ИспользованиеГруппИЭлементов.ГруппыИЭлементы; + КонецЕсли; + ИначеЕсли Условие = ВидСравненияКомпоновкиДанных.ВИерархии + Или Условие = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда + Возврат ИспользованиеГруппИЭлементов.Группы; КонецЕсли; КонецЕсли; -КонецПроцедуры + + Если ТипЗнч(ИсходноеЗначение) = Тип("ИспользованиеГруппИЭлементов") Тогда + Возврат ИсходноеЗначение; + ИначеЕсли ИсходноеЗначение = ГруппыИЭлементы.Элементы Тогда + Возврат ИспользованиеГруппИЭлементов.Элементы; + ИначеЕсли ИсходноеЗначение = ГруппыИЭлементы.ГруппыИЭлементы Тогда + Возврат ИспользованиеГруппИЭлементов.ГруппыИЭлементы; + ИначеЕсли ИсходноеЗначение = ГруппыИЭлементы.Группы Тогда + Возврат ИспользованиеГруппИЭлементов.Группы; + КонецЕсли; + + Возврат Неопределено; +КонецФункции -Процедура ЗначениеКомпоновщикаПоказатьВыборСсылкиПослеВыбораТипа(ПутьКФормеИлиЭлементСписка, Контекст) Экспорт - Если ТипЗнч(ПутьКФормеИлиЭлементСписка) <> Тип("ЭлементСпискаЗначений") Тогда - Возврат; - КонецЕсли; - - Обработчик = Новый ОписаниеОповещения("ЗначениеКомпоновщикаЗавершениеВыбора", ЭтотОбъект, Контекст); - ПараметрыВыбора = Контекст.ПараметрыВыбора; - - Тип = ПутьКФормеИлиЭлементСписка.Значение; - ПараметрыВыбораТипа = ВариантыОтчетовВызовСервера.ПараметрыВыбораТипа(Тип, ПараметрыВыбора); - Если ПараметрыВыбораТипа = Неопределено Тогда - ВыбратьЗначениеПримитивногоТипа( - Контекст.Форма, - Тип, - ПараметрыВыбора.ОписаниеТипов, - ПараметрыВыбора.Значение, - ПараметрыВыбора.Представление, - Обработчик); - ИначеЕсли ПараметрыВыбораТипа.БыстрыйВыбор Тогда - Контекст.Форма.ПоказатьВыборИзМеню(Обработчик, ПараметрыВыбораТипа.ЗначенияДляВыбора); - Иначе - ОткрытьФорму( - ПараметрыВыбораТипа.ПутьКФорме, - ПараметрыВыбора, - Контекст.Форма, - , - , - , - Обработчик, - РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - КонецЕсли; - -КонецПроцедуры +#Область ПериодОтчета -Процедура ЗначениеКомпоновщикаЗавершениеВыбора(СсылкаИлиЭлементСписка, Контекст) Экспорт - Если ТипЗнч(СсылкаИлиЭлементСписка) = Тип("ЭлементСпискаЗначений") Тогда - Ссылка = СсылкаИлиЭлементСписка.Значение; - Иначе - Ссылка = СсылкаИлиЭлементСписка; - КонецЕсли; - Если Не Контекст.ПараметрыВыбора.ОписаниеТипов.СодержитТип(ТипЗнч(Ссылка)) Или Не ЗначениеЗаполнено(Ссылка) Тогда - Возврат; - КонецЕсли; - - Форма = Контекст.Форма; - - ЭлементКД = Форма.НайтиПользовательскуюНастройкуЭлемента(Контекст.Идентификатор); - - Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ЭлементКД.ПравоеЗначение = Ссылка; - Иначе - ЭлементКД.Значение = Ссылка; - КонецЕсли; - - ЭлементКД.Использование = Истина; // Включение флажка. - - ОтразитьИзмененияВПодчиненных(Форма, Контекст.Идентификатор, ЭлементКД); - - Форма.ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -Процедура ВыбратьПериод(Форма, КнопкаВыбораИмя) Экспорт - ЗначениеИмя = СтрЗаменить(КнопкаВыбораИмя, "_КнопкаВыбора_", "_Значение_"); - ИдентификаторЭлемента = Прав(КнопкаВыбораИмя, 32); - - Значение = Форма[ЗначениеИмя]; - - Контекст = Новый Структура; - Контекст.Вставить("Форма", Форма); - Контекст.Вставить("ЗначениеИмя", ЗначениеИмя); - Контекст.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - Обработчик = Новый ОписаниеОповещения("ВыбратьПериодЗавершение", ЭтотОбъект, Контекст); - - СтандартнаяОбработка = Истина; - ОтчетыКлиентПереопределяемый.ПриНажатииКнопкиВыбораПериода(Форма, Значение, СтандартнаяОбработка, Обработчик); - Если Не СтандартнаяОбработка Тогда - Возврат; - КонецЕсли; +// Вызывает диалог редактирования стандартного периода. +// +// Параметры: +// Форма - УправляемаяФорма - форма отчета или форма настроек отчета. +// ИмяКоманды - Строка - имя команды выбора периода, содержащее путь к значению периода. +// +Процедура ВыбратьПериод(Форма, ИмяКоманды) Экспорт + Путь = СтрЗаменить(ИмяКоманды, "ВыбратьПериод", "Период"); + Контекст = Новый Структура("Форма, Путь", Форма, Путь); Диалог = Новый ДиалогРедактированияСтандартногоПериода; - Диалог.Период = Значение; - Диалог.Показать(Обработчик); + Диалог.Период = Форма[Путь]; + Диалог.Показать(Новый ОписаниеОповещения("ВыбратьПериодЗавершение", ЭтотОбъект, Контекст)); КонецПроцедуры -Процедура ВыбратьПериодЗавершение(Период, Контекст) Экспорт - Если ТипЗнч(Период) <> Тип("СтандартныйПериод") Тогда +// Обработчик редактирования стандартного периода. +// +// Параметры: +// ВыбранныйПериод - СтандартныйПериод - значение, возвращенное диалогом. +// Контекст - Структура - содержит форму отчета (настроек) и путь к значению периода. +// +Процедура ВыбратьПериодЗавершение(ВыбранныйПериод, Контекст) Экспорт + Если ВыбранныйПериод = Неопределено Тогда Возврат; КонецЕсли; - Контекст.Форма[Контекст.ЗначениеИмя] = Период; - - ЭлементКД = Контекст.Форма.НайтиПользовательскуюНастройкуЭлемента(Контекст.ИдентификаторЭлемента); - Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ЭлементКД.ПравоеЗначение = Период; - ИначеЕсли ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ЭлементКД.Значение = Период; - КонецЕсли; - ЭлементКД.Использование = Истина; - - Контекст.Форма.ПользовательскиеНастройкиМодифицированы = Истина; + Контекст.Форма[Контекст.Путь] = ВыбранныйПериод; + УстановитьПериод(Контекст.Форма, Контекст.Путь); КонецПроцедуры -Процедура ВыбратьЗначениеПримитивногоТипа(Форма, ТипЗначения, ОписаниеТипов, ТекущееЗначение, ПредставлениеПоля, Обработчик) Экспорт - СписокВыбора = Новый СписокЗначений; - Если ТипЗначения = Тип("ВидДвиженияБухгалтерии") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокВыбора, ВидДвиженияБухгалтерии); - ИначеЕсли ТипЗначения = Тип("ВидДвиженияНакопления") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокВыбора, ВидДвиженияНакопления); - ИначеЕсли ТипЗначения = Тип("ВидПериодаРегистраРасчета") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокВыбора, ВидПериодаРегистраРасчета); - ИначеЕсли ТипЗначения = Тип("ВидСчета") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокВыбора, ВидСчета); - ИначеЕсли ТипЗначения = Тип("ВидТочкиМаршрутаБизнесПроцесса") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокВыбора, ВидТочкиМаршрутаБизнесПроцесса); - ИначеЕсли ТипЗначения = Тип("Число") Тогда - ПоказатьВводЧисла( - Обработчик, - ТекущееЗначение, - ПредставлениеПоля, - ОписаниеТипов.КвалификаторыЧисла.Разрядность, - ОписаниеТипов.КвалификаторыЧисла.РазрядностьДробнойЧасти); - Возврат; - ИначеЕсли ТипЗначения = Тип("Строка") Тогда - ПоказатьВводСтроки( - Обработчик, - ТекущееЗначение, - ПредставлениеПоля, - ОписаниеТипов.КвалификаторыСтроки.Длина, - ОписаниеТипов.КвалификаторыСтроки.Длина = 0 Или ОписаниеТипов.КвалификаторыСтроки.Длина > 100); - Возврат; - ИначеЕсли ТипЗначения = Тип("Дата") Тогда - ПоказатьВводДаты( - Обработчик, - ТекущееЗначение, - ПредставлениеПоля, - ОписаниеТипов.КвалификаторыДаты.ЧастиДаты); - Возврат; - Иначе - ПоказатьВводЗначения( - Обработчик, - ТекущееЗначение, - ПредставлениеПоля, - ОписаниеТипов); - Возврат; - КонецЕсли; - Форма.ПоказатьВыборИзМеню(Обработчик, СписокВыбора); -КонецПроцедуры - -Процедура ОтразитьИзмененияВПодчиненных(Форма, ИдентификаторЭлемента, НастройкаКомпоновкиДанныхВедущего) Экспорт +// Инициализирует значение элемента настройки периода. +// +Процедура УстановитьПериод(Форма, Знач Путь) Экспорт + КомпоновщикНастроек = Форма.Отчет.КомпоновщикНастроек; - // Очистка значений при изменении значения. - Найденные = Форма.ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ВедущийИдентификаторВФорме", ИдентификаторЭлемента)); - Для Каждого Связь Из Найденные Цикл - Если Не ЗначениеЗаполнено(Связь.ПодчиненныйИдентификаторВФорме) Тогда - Продолжить; - КонецЕсли; - Если Связь.ТипСвязи = "ПараметровВыбора" Тогда - Если Связь.ПодчиненныйДействие = РежимИзмененияСвязанногоЗначения.Очищать Тогда - ОчиститьЗначениеПодчиненного(Форма, НастройкаКомпоновкиДанныхВедущего, Связь.ПодчиненныйИдентификаторВФорме); - КонецЕсли; - Иначе - Продолжить; - КонецЕсли; + Свойства = СтрРазделить("ДатаНачала, ДатаОкончания", ", ", Ложь); + Для Каждого Свойство Из Свойства Цикл + Путь = СтрЗаменить(Путь, Свойство, ""); КонецЦикла; + Индекс = Форма.ПутьКДаннымЭлементов.ПоИмени[Путь]; + ЭлементПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс]; + ЭлементПользовательскойНастройки.Использование = Истина; + + Если ТипЗнч(ЭлементПользовательскойНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЭлементПользовательскойНастройки.Значение = Форма[Путь]; + Свойства = "Использование, Значение"; + Иначе // Элемент отбора. + ЭлементПользовательскойНастройки.ПравоеЗначение = Форма[Путь]; + Свойства = "Использование, ПравоеЗначение"; + КонецЕсли; + + ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( + КомпоновщикНастроек.Настройки, + ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,, + КомпоновщикНастроек.ПользовательскиеНастройки); + + ЗаполнитьЗначенияСвойств(ЭлементНастройки, ЭлементПользовательскойНастройки, Свойства); КонецПроцедуры -Процедура ОчиститьЗначениеПодчиненного(Форма, НастройкаКомпоновкиДанныхВедущего, ИдентификаторПодчиненногоВФорме) - ПодчиненныйНастройкаКД = Форма.НайтиПользовательскуюНастройкуЭлемента(ИдентификаторПодчиненногоВФорме); - ПодчиненныйДополнительно = Форма.НайтиДополнительныеНастройкиЭлемента(ИдентификаторПодчиненногоВФорме); - Если ПодчиненныйДополнительно = Неопределено Или ПодчиненныйНастройкаКД = Неопределено Тогда - Возврат; +#КонецОбласти + +#Область Прочее + +Функция ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипКоллекции) Экспорт + Если ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + Или ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") + Или ТипКоллекции = Тип("КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных") Тогда + Возврат Ложь; + Иначе + Возврат Истина; КонецЕсли; - - Если НастройкаКомпоновкиДанныхВедущего.Использование Тогда - Если ПодчиненныйДополнительно.ВводСписком Тогда - Если ТипЗнч(ПодчиненныйНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПодчиненныйНастройкаКД.Значение = Новый СписокЗначений; - ИначеЕсли ТипЗнч(ПодчиненныйНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ПодчиненныйНастройкаКД.ПравоеЗначение = Новый СписокЗначений; - КонецЕсли; - Иначе - Если ТипЗнч(ПодчиненныйНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПодчиненныйНастройкаКД.Значение = Неопределено; - ИначеЕсли ТипЗнч(ПодчиненныйНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ПодчиненныйНастройкаКД.ПравоеЗначение = Неопределено; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если ПодчиненныйДополнительно.БыстрыйВыбор - И Не ПодчиненныйДополнительно.ОграничиватьВыборУказаннымиЗначениями Тогда - ПодчиненныйДополнительно.ЗначенияДляВыбораЗаполнены = Ложь; - ПодчиненныйДополнительно.ЗначенияДляВыбора.Очистить(); - КонецЕсли; -КонецПроцедуры +КонецФункции + +#КонецОбласти #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl index 233aa0bb3..5b98a9c60 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl @@ -1,22 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс -// Возникает перед началом формирования отчета. +// Возникает после окончания формирования отчета: после завершения фонового задания. +// Позволяет переопределить обработку результата формирования отчета. // // Параметры: -// ФормаОтчета - УправляемаяФорма - Форма отчета. -// Отказ - Булево - Если установить в значение Истина, то процесс формирования отчета будет остановлен. -// Для перезапуска процесса формирования -// рекомендуется использовать процедуру ОтчетыКлиент.СформироватьОтчет(). -// -Процедура ПередФормированием(ФормаОтчета, Отказ) Экспорт - -КонецПроцедуры - -// Возникает после окончания формирования отчета. -// -// Параметры: -// ФормаОтчета - УправляемаяФорма - Форма отчета. -// ОтчетСформирован - Булево - Истина если отчет был успешно сформирован. +// ФормаОтчета - УправляемаяФорма - Форма отчета. +// ОтчетСформирован - Булево - Истина если отчет был успешно сформирован. // Процедура ПослеФормирования(ФормаОтчета, ОтчетСформирован) Экспорт diff --git a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl index 91ce1c88b..aa2a7a94a 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl @@ -1,9 +1,22 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс -// Настройки формы отчета по умолчанию. +// Дополнительные настройки отчета по умолчанию, определяющие: +// * Признак формирования отчета при открытии; +// * Подключаемые обработчики событий; +// * Настройки печати; +// * Использование функции расчетных показателей; +// * Права. // // Возвращаемое значение: -// Структура - Настройки формы отчета: +// Структура - Настройки (дополнительные свойства) отчета, хранящиеся в данных формы: // // * ФормироватьСразу - Булево - Значение по умолчанию для флажка "Формировать сразу". // Когда флажок включен, то отчет будет формироваться: @@ -53,6 +66,33 @@ // // Возврат НастройкиЭлементовУправления; // +// * ЗагрузитьНастройкиПриИзмененииПараметров - Массив - коллекция параметров компоновки данных, +// изменение которых, приводит к переформированию +// Схемы компоновки данных. +// +// // Пример: +// // 1. Инициализация: +// // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт +// // Настройки.ЗагрузитьНастройкиПриИзмененииПараметров = Отчеты.УниверсальныйОтчет.ЗагрузитьНастройкиПриИзмененииПараметров(); +// // КонецПроцедуры +// +// // Функция ЗагрузитьНастройкиПриИзмененииПараметров() Экспорт +// // Параметры = Новый Массив; +// // Параметры.Добавить(Новый ПараметрКомпоновкиДанных("ТипОбъектаМетаданных")); +// // Параметры.Добавить(Новый ПараметрКомпоновкиДанных("ИмяОбъектаМетаданных")); +// // Параметры.Добавить(Новый ПараметрКомпоновкиДанных("ИмяТаблицы")); +// // +// // Возврат Параметры; +// // КонецФункции +// +// // 2. Использование: +// // Процедура Подключаемый_ЭлементНастройки_ПриИзменении(Элемент) +// // ... +// // Если ТипЗнч(ЭлементПользовательскойНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") +// // И НастройкиОтчета.ЗагрузитьНастройкиПриИзмененииПараметров.Найти(ЭлементПользовательскойНастройки.Параметр) <> Неопределено Тогда +// // // Вызов метода переформирования Схемы компоновки данных... +// // КонецЕсли; +// // * СкрытьКомандыРассылки - Булево - Флаг, позволяющий скрыть команды рассылок, у тех отчетов, // для которых рассылка не имеет смысла. // Истина - команды рассылок будут скрыты, @@ -293,15 +333,19 @@ // // Обработка события. // КонецПроцедуры // -Функция ПолучитьНастройкиОтчетаПоУмолчанию() Экспорт +Функция НастройкиОтчетаПоУмолчанию() Экспорт Настройки = Новый Структура; Настройки.Вставить("ФормироватьСразу", Ложь); Настройки.Вставить("ВыводитьСуммуВыделенныхЯчеек", Истина); Настройки.Вставить("РазрешеноИзменятьСтруктуру", Истина); Настройки.Вставить("РазрешеноИзменятьВарианты", Истина); Настройки.Вставить("РазрешеноВыбиратьИНастраиватьВариантыБезСохранения", Ложь); - Настройки.Вставить("ПараметрыРасположенияЭлементовУправления" , Неопределено); - Настройки.Вставить("СкрытьКомандыРассылки" , Ложь); + Настройки.Вставить("ПараметрыРасположенияЭлементовУправления", Неопределено); + Настройки.Вставить("СкрытьКомандыРассылки", Ложь); + Настройки.Вставить("РазрешеноЗагружатьСхему", Ложь); + Настройки.Вставить("РазрешеноРедактироватьСхему", Ложь); + Настройки.Вставить("РазрешеноВосстанавливатьСтандартнуюСхему", Ложь); + Настройки.Вставить("ЗагрузитьНастройкиПриИзмененииПараметров", Новый Массив); Печать = Новый Структура; Печать.Вставить("ПолеСверху", 10); @@ -325,12 +369,27 @@ События.Вставить("ПриОпределенииПараметровВыбора", Ложь); События.Вставить("ПриОпределенииИспользуемыхТаблиц", Ложь); События.Вставить("ДополнитьСвязиОбъектовМетаданных", Ложь); + События.Вставить("ПриОпределенииСвойствЭлементовФормыНастроек", Ложь); Настройки.Вставить("События", События); Возврат Настройки; КонецФункции +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию. +// Настройки формы отчета по умолчанию. +// +// Возвращаемое значение: +// Структура - Настройки формы отчета: +// +Функция ПолучитьНастройкиОтчетаПоУмолчанию() Экспорт + Возврат НастройкиОтчетаПоУмолчанию(); +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -360,9 +419,22 @@ // // Параметры: // Настройки - НастройкиКомпоновкиДанных - Коллекции настроек. -// ИдентификаторПользовательскойНастройки - Строка - +// Идентификатор - Строка - Идентификатор пользовательской настройки. +// Иерархия - Массив - Коллекция настроек структуры компоновки данных. +// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - Коллекция пользовательских настроек. // -Функция ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки, ИдентификаторПользовательскойНастройки, Иерархия = Неопределено) Экспорт +Функция ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки, Идентификатор, Иерархия = Неопределено, ПользовательскиеНастройки = Неопределено) Экспорт + Если ПользовательскиеНастройки <> Неопределено + И ДоступенПоискНастройкиПоИдентификатору() Тогда + + НайденныеЭлементы = + ПользовательскиеНастройки.ПолучитьОсновныеНастройкиПоИдентификаторуПользовательскойНастройки(Идентификатор); + + Если НайденныеЭлементы.Количество() > 0 Тогда + Возврат НайденныеЭлементы[0]; + КонецЕсли; + КонецЕсли; + Если Иерархия <> Неопределено Тогда Иерархия.Добавить(Настройки); КонецЕсли; @@ -371,20 +443,20 @@ Если ТипНастройки <> Тип("НастройкиКомпоновкиДанных") Тогда - Если Настройки.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Если Настройки.ИдентификаторПользовательскойНастройки = Идентификатор Тогда Возврат Настройки; ИначеЕсли ТипНастройки = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - Возврат ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Настройки, ИдентификаторПользовательскойНастройки, Иерархия); + Возврат ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Настройки, Идентификатор, Иерархия); ИначеЕсли ТипНастройки = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") ИЛИ ТипНастройки = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") ИЛИ ТипНастройки = Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") Тогда Для Каждого ВложенныйЭлемент Из Настройки Цикл - РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(ВложенныйЭлемент, ИдентификаторПользовательскойНастройки, Иерархия); + РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(ВложенныйЭлемент, Идентификатор, Иерархия); Если РезультатПоиска <> Неопределено Тогда Возврат РезультатПоиска; КонецЕсли; @@ -400,66 +472,66 @@ КонецЕсли; - Если Настройки.Выбор.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Если Настройки.Выбор.ИдентификаторПользовательскойНастройки = Идентификатор Тогда Возврат Настройки.Выбор; - ИначеЕсли Настройки.УсловноеОформление.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + ИначеЕсли Настройки.УсловноеОформление.ИдентификаторПользовательскойНастройки = Идентификатор Тогда Возврат Настройки.УсловноеОформление; КонецЕсли; Если ТипНастройки <> Тип("ТаблицаКомпоновкиДанных") И ТипНастройки <> Тип("ДиаграммаКомпоновкиДанных") Тогда - Если Настройки.Отбор.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Если Настройки.Отбор.ИдентификаторПользовательскойНастройки = Идентификатор Тогда Возврат Настройки.Отбор; - ИначеЕсли Настройки.Порядок.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + ИначеЕсли Настройки.Порядок.ИдентификаторПользовательскойНастройки = Идентификатор Тогда Возврат Настройки.Порядок; КонецЕсли; КонецЕсли; Если ТипНастройки = Тип("НастройкиКомпоновкиДанных") Тогда - РезультатПоиска = НайтиЭлементНастройки(Настройки.ПараметрыДанных, ИдентификаторПользовательскойНастройки); + РезультатПоиска = НайтиЭлементНастройки(Настройки.ПараметрыДанных, Идентификатор); Если РезультатПоиска <> Неопределено Тогда Возврат РезультатПоиска; КонецЕсли; КонецЕсли; Если ТипНастройки <> Тип("ТаблицаКомпоновкиДанных") И ТипНастройки <> Тип("ДиаграммаКомпоновкиДанных") Тогда - РезультатПоиска = НайтиЭлементНастройки(Настройки.Отбор, ИдентификаторПользовательскойНастройки); + РезультатПоиска = НайтиЭлементНастройки(Настройки.Отбор, Идентификатор); Если РезультатПоиска <> Неопределено Тогда Возврат РезультатПоиска; КонецЕсли; КонецЕсли; - РезультатПоиска = НайтиЭлементНастройки(Настройки.УсловноеОформление, ИдентификаторПользовательскойНастройки); + РезультатПоиска = НайтиЭлементНастройки(Настройки.УсловноеОформление, Идентификатор); Если РезультатПоиска <> Неопределено Тогда Возврат РезультатПоиска; КонецЕсли; Если ТипНастройки = Тип("ТаблицаКомпоновкиДанных") Тогда - РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Строки, ИдентификаторПользовательскойНастройки, Иерархия); + РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Строки, Идентификатор, Иерархия); Если РезультатПоиска <> Неопределено Тогда Возврат РезультатПоиска; КонецЕсли; - РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Колонки, ИдентификаторПользовательскойНастройки, Иерархия); + РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Колонки, Идентификатор, Иерархия); Если РезультатПоиска <> Неопределено Тогда Возврат РезультатПоиска; КонецЕсли; ИначеЕсли ТипНастройки = Тип("ДиаграммаКомпоновкиДанных") Тогда - РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Точки, ИдентификаторПользовательскойНастройки, Иерархия); + РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Точки, Идентификатор, Иерархия); Если РезультатПоиска <> Неопределено Тогда Возврат РезультатПоиска; КонецЕсли; - РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Серии, ИдентификаторПользовательскойНастройки, Иерархия); + РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Серии, Идентификатор, Иерархия); Если РезультатПоиска <> Неопределено Тогда Возврат РезультатПоиска; КонецЕсли; Иначе - РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Структура, ИдентификаторПользовательскойНастройки, Иерархия); + РезультатПоиска = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Структура, Идентификатор, Иерархия); Если РезультатПоиска <> Неопределено Тогда Возврат РезультатПоиска; КонецЕсли; @@ -470,28 +542,6 @@ Иерархия.Удалить(Иерархия.ВГраница()); КонецЕсли; - Возврат Неопределено; - -КонецФункции - -// Находит пользовательскую настройку по ее идентификатору. -// -// Параметры: -// ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных - Коллекция пользовательских настроек. -// Идентификатор - Строка - Идентификатор настройки, которую нужно найти. -// -// Возвращаемое значение: -// Неопределено - Когда настройка не найдена. -// ЭлементОтбораКомпоновкиДанных, ЗначениеПараметраНастроекКомпоновкиДанных -// и прочие типы элементов из КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных - Пользовательская настройка. -// -Функция НайтиПользовательскуюНастройку(ПользовательскиеНастройкиКД, Идентификатор) Экспорт - Для Каждого ПользовательскаяНастройка Из ПользовательскиеНастройкиКД.Элементы Цикл - Если ПользовательскаяНастройка.ИдентификаторПользовательскойНастройки = Идентификатор Тогда - Возврат ПользовательскаяНастройка; - КонецЕсли; - КонецЦикла; - Возврат Неопределено; КонецФункции @@ -520,32 +570,6 @@ Возврат Неопределено; КонецФункции -// Находит пользовательскую настройку по имени параметра. -// Если пользовательская настройка не найдена (например, -// если параметр не выведен в пользовательские настройки), -// то получает общую настройку параметра. -// -// Параметры: -// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Компоновщик настроек. -// ИмяПараметра - Строка - Имя параметра. -// -// Возвращаемое значение: -// ЗначениеПараметраНастроекКомпоновкиДанных - Пользовательская настройка параметра. -// Неопределено - Если параметр не найден. -// -Функция ПолучитьПараметр(КомпоновщикНастроекКД, ИмяПараметра) Экспорт - ПараметрКД = Новый ПараметрКомпоновкиДанных(ИмяПараметра); - - Для Каждого ПользовательскаяНастройка Из КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы Цикл - Если ТипЗнч(ПользовательскаяНастройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") - И ПользовательскаяНастройка.Параметр = ПараметрКД Тогда - Возврат ПользовательскаяНастройка; - КонецЕсли; - КонецЦикла; - - Возврат КомпоновщикНастроекКД.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКД); -КонецФункции - // Находит параметры и отборы по значению. // // Параметры: @@ -581,72 +605,20 @@ Возврат Результат; КонецФункции -// Возвращает вид периода. -Функция ПолучитьВидПериода(НачалоПериода, КонецПериода, ДоступныеПериоды = Неопределено) Экспорт - - ВидПериода = Неопределено; - Если НачалоПериода = НачалоДня(НачалоПериода) - И КонецПериода = КонецДня(КонецПериода) Тогда - - РазностьДней = (КонецПериода - НачалоПериода + 1) / (60*60*24); - Если РазностьДней = 1 Тогда - - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День"); - - ИначеЕсли РазностьДней = 7 Тогда - - Если НачалоПериода = НачалоНедели(НачалоПериода) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя"); - КонецЕсли; - - ИначеЕсли РазностьДней <= 11 Тогда - - Если (День(НачалоПериода) = 1 И День(КонецПериода) = 10) - ИЛИ (День(НачалоПериода) = 11 И День(КонецПериода) = 20) - ИЛИ (День(НачалоПериода) = 21 И КонецПериода = КонецМесяца(НачалоПериода)) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада"); - КонецЕсли; - - ИначеЕсли РазностьДней <= 31 Тогда - - Если НачалоПериода = НачалоМесяца(НачалоПериода) И КонецПериода = КонецМесяца(НачалоПериода) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц"); - КонецЕсли; - - ИначеЕсли РазностьДней <= 92 Тогда - - Если НачалоПериода = НачалоКвартала(НачалоПериода) И КонецПериода = КонецКвартала(НачалоПериода) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал"); - КонецЕсли; - - ИначеЕсли РазностьДней <= 190 Тогда - - Если Месяц(НачалоПериода) + 5 = Месяц(КонецПериода) - И НачалоПериода = НачалоМесяца(НачалоПериода) - И КонецПериода = КонецМесяца(КонецПериода) - И (НачалоПериода = НачалоГода(НачалоПериода) ИЛИ КонецПериода = КонецГода(НачалоПериода)) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие"); - КонецЕсли; - - ИначеЕсли РазностьДней <= 366 Тогда - - Если НачалоПериода = НачалоГода(НачалоПериода) И КонецПериода = КонецГода(НачалоПериода) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год"); - КонецЕсли; - +Функция ИндексЭлементаНастройкиПоПути(Знач Путь, СвойствоЭлемента = Неопределено) Экспорт + ДоступныеСвойства = СтрРазделить("Использование, Значение, Список", ", ", Ложь); + Для Каждого СвойствоЭлемента Из ДоступныеСвойства Цикл + Если СтрЗаканчиваетсяНа(Путь, СвойствоЭлемента) Тогда + Прервать; КонецЕсли; - КонецЕсли; + КонецЦикла; - Если ВидПериода = Неопределено Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); - КонецЕсли; + ОписаниеИндекса = Новый ОписаниеТипов("Число"); - Если ДоступныеПериоды <> Неопределено И ДоступныеПериоды.НайтиПоЗначению(ВидПериода) = Неопределено Тогда - ВидПериода = ДоступныеПериоды[0].Значение; - КонецЕсли; - - Возврат ВидПериода; + ИндексЭлемента = СтрЗаменить(Путь, "КомпоновщикНастроекПользовательскиеНастройкиЭлемент", ""); + ИндексЭлемента = СтрЗаменить(ИндексЭлемента, СвойствоЭлемента, ""); + Возврат ОписаниеИндекса.ПривестиЗначение(ИндексЭлемента); КонецФункции #КонецОбласти @@ -822,215 +794,88 @@ Возврат Неопределено; КонецФункции -// Добавляет выбранное поле компоновки данных. +// Определяет значения типа ГруппыИЭлементы в зависимости от вида сравнения (приоритетно) или исходного значения. // // Параметры: -// Куда - КомпоновщикНастроекКомпоновкиДанных, НастройкиКомпоновкиДанных, ВыбранныеПоляКомпоновкиДанных - -// Коллекция в которую требуется добавить выбранное поле. -// ИмяИлиПолеКД - Строка, ПолеКомпоновкиДанных - Имя поля. -// Заголовок - Строка - Необязательный. Представление поля. +// Условие - ВидСравненияКомпоновкиДанных, Неопределено - текущее значение вида сравнения. +// ИсходноеЗначение - ИспользованиеГруппИЭлементов, ГруппыИЭлементы - текущее значение свойства +// ВыборГруппИЭлементов. // // Возвращаемое значение: -// ВыбранноеПолеКомпоновкиДанных - Добавленное выбранное поле. +// ГруппыИЭлементы - значение перечисления ГруппыИЭлементы. // -Функция ДобавитьВыбранноеПоле(Куда, ИмяИлиПолеКД, Заголовок = "") Экспорт - - Если ТипЗнч(Куда) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда - ВыбранныеПоляКД = Куда.Настройки.Выбор; - ИначеЕсли ТипЗнч(Куда) = Тип("НастройкиКомпоновкиДанных") Тогда - ВыбранныеПоляКД = Куда.Выбор; - Иначе - ВыбранныеПоляКД = Куда; - КонецЕсли; - - Если ТипЗнч(ИмяИлиПолеКД) = Тип("Строка") Тогда - ПолеКД = Новый ПолеКомпоновкиДанных(ИмяИлиПолеКД); - Иначе - ПолеКД = ИмяИлиПолеКД; - КонецЕсли; - - ВыбранноеПолеКД = ВыбранныеПоляКД.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); - ВыбранноеПолеКД.Поле = ПолеКД; - Если Заголовок <> "" Тогда - ВыбранноеПолеКД.Заголовок = Заголовок; - КонецЕсли; - - Возврат ВыбранноеПолеКД; - -КонецФункции - -// Приводит значение типа ИспользованиеГруппИЭлементов к типу ГруппыИЭлементы. -// Для других типов возвращает значение Авто. -// -Функция ПривестиЗначениеКТипуГруппыИЭлементы(ИсходноеЗначение, ЗначениеПоУмолчанию = Неопределено) Экспорт - Тип = ТипЗнч(ИсходноеЗначение); - Если Тип = Тип("ГруппыИЭлементы") Тогда - Возврат ИсходноеЗначение; - ИначеЕсли Тип = Тип("ИспользованиеГруппИЭлементов") Тогда - Если ИсходноеЗначение = ИспользованиеГруппИЭлементов.Элементы Тогда - Возврат ГруппыИЭлементы.Элементы; - ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.ГруппыИЭлементы Тогда - Возврат ГруппыИЭлементы.ГруппыИЭлементы; - ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.Группы Тогда - Возврат ГруппыИЭлементы.Группы; - КонецЕсли; - ИначеЕсли Тип = Тип("ВидСравненияКомпоновкиДанных") Тогда - Если ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВСписке - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВСписке - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - // Виды сравнения ВСпискеПоИерархии (В группе из списка) и НеВСпискеПоИерархии (Не в группе из списка) - // следует понимать как "В списке или в группах" и "Не в списке и не в группах". - // - Тогда более понятно почему для них используется "ГруппыИЭлементы", а не "Группы". - Возврат ГруппыИЭлементы.ГруппыИЭлементы; - ИначеЕсли ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВИерархии - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда +Функция ЗначениеТипаГруппыИЭлементы(ИсходноеЗначение, Условие = Неопределено) Экспорт + Если Условие <> Неопределено Тогда + Если Условие = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии + Или Условие = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + Если ИсходноеЗначение = ГруппыИЭлементы.Группы + Или ИсходноеЗначение = ИспользованиеГруппИЭлементов.Группы Тогда + Возврат ГруппыИЭлементы.Группы; + Иначе + Возврат ГруппыИЭлементы.ГруппыИЭлементы; + КонецЕсли; + ИначеЕсли Условие = ВидСравненияКомпоновкиДанных.ВИерархии + Или Условие = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда Возврат ГруппыИЭлементы.Группы; КонецЕсли; КонецЕсли; - Возврат ?(ЗначениеПоУмолчанию = Неопределено, ГруппыИЭлементы.Авто, ЗначениеПоУмолчанию); -КонецФункции - -// Приводит значение типа ГруппыИЭлементы к типу ИспользованиеГруппИЭлементов. -// Для значения Авто и других типов возвращает значение Неопределено. -// -Функция ПривестиЗначениеКТипуИспользованиеГруппИЭлементов(ИсходноеЗначение, ЗначениеПоУмолчанию = Неопределено) Экспорт - Тип = ТипЗнч(ИсходноеЗначение); - Если Тип = Тип("ГруппыИЭлементы") Тогда - Если ИсходноеЗначение = ГруппыИЭлементы.Элементы Тогда - Возврат ИспользованиеГруппИЭлементов.Элементы; - ИначеЕсли ИсходноеЗначение = ГруппыИЭлементы.ГруппыИЭлементы Тогда - Возврат ИспользованиеГруппИЭлементов.ГруппыИЭлементы; - ИначеЕсли ИсходноеЗначение = ГруппыИЭлементы.Группы Тогда - Возврат ИспользованиеГруппИЭлементов.Группы; - ИначеЕсли ТипЗнч(ИсходноеЗначение) = Тип("ИспользованиеГруппИЭлементов") Тогда - Возврат ИсходноеЗначение; - КонецЕсли; - ИначеЕсли Тип = Тип("ИспользованиеГруппИЭлементов") Тогда + + Если ТипЗнч(ИсходноеЗначение) = Тип("ГруппыИЭлементы") Тогда Возврат ИсходноеЗначение; - ИначеЕсли Тип = Тип("ВидСравненияКомпоновкиДанных") Тогда - Если ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВСписке - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВСписке - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - // Виды сравнения ВСпискеПоИерархии (В группе из списка) и НеВСпискеПоИерархии (Не в группе из списка) - // следует понимать как "В списке или в группах" и "Не в списке и не в группах". - // - Тогда более понятно почему для них используется "ГруппыИЭлементы", а не "Группы". - Возврат ИспользованиеГруппИЭлементов.ГруппыИЭлементы; - ИначеЕсли ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВИерархии - Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда - Возврат ИспользованиеГруппИЭлементов.Группы; - КонецЕсли; + ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.Элементы Тогда + Возврат ГруппыИЭлементы.Элементы; + ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.ГруппыИЭлементы Тогда + Возврат ГруппыИЭлементы.ГруппыИЭлементы; + ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.Группы Тогда + Возврат ГруппыИЭлементы.Группы; КонецЕсли; - Если ЗначениеПоУмолчанию <> Неопределено Тогда - Возврат ПривестиЗначениеКТипуИспользованиеГруппИЭлементов(ЗначениеПоУмолчанию, Неопределено); - КонецЕсли; - Возврат Неопределено; -КонецФункции - -// Определяет полный путь к элементу компоновки данных. -// -// Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных - Корневой узел настроек, от которого строится полный путь. -// ЭлементКД - Произвольный - Узел настроек, к которому строится полный путь. -// -// Возвращаемое значение: -// Строка - полный путь к элементу. Может использоваться в функции НайтиЭлементПоПолномуПути(). -// Неопределено - если не удалось построить полный путь. -// -Функция ПолныйПутьКЭлементу(Знач НастройкиКД, Знач ЭлементКД) Экспорт - Результат = Новый Массив; - РодительКД = ЭлементКД; - Пока РодительКД <> Неопределено И РодительКД <> НастройкиКД Цикл - ЭлементКД = РодительКД; - РодительКД = РодительКД.Родитель; - ТипРодителя = ТипЗнч(РодительКД); - Если ТипРодителя = Тип("ТаблицаКомпоновкиДанных") Тогда - Индекс = РодительКД.Строки.Индекс(ЭлементКД); - Если Индекс = -1 Тогда - Индекс = РодительКД.Колонки.Индекс(ЭлементКД); - ИмяКоллекции = "Колонки"; - Иначе - ИмяКоллекции = "Строки"; - КонецЕсли; - ИначеЕсли ТипРодителя = Тип("ДиаграммаКомпоновкиДанных") Тогда - Индекс = РодительКД.Серии.Индекс(ЭлементКД); - Если Индекс = -1 Тогда - Индекс = РодительКД.Точки.Индекс(ЭлементКД); - ИмяКоллекции = "Точки"; - Иначе - ИмяКоллекции = "Серии"; - КонецЕсли; - ИначеЕсли ТипРодителя = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - ИмяКоллекции = "Настройки"; - Индекс = Неопределено; - Иначе - ИмяКоллекции = "Структура"; - Индекс = РодительКД.Структура.Индекс(ЭлементКД); - КонецЕсли; - Если Индекс = -1 Тогда - Возврат Неопределено; - КонецЕсли; - Если Индекс <> Неопределено Тогда - Результат.Вставить(0, Индекс); - КонецЕсли; - Результат.Вставить(0, ИмяКоллекции); - КонецЦикла; - Возврат СтрСоединить(Результат, "/"); -КонецФункции - -// Находит элемент компоновки данных по полному пути. -// -// Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных - Корневой узел настроек, в который вложен искомый элемент. -// ПолныйПутьКЭлементу - Строка - полный путь к элементу. Может быть получена в функции ПолныйПутьКЭлементу(). -// -// Возвращаемое значение: -// ЭлементКД - Произвольный - Найденный узел настроек. -// -Функция НайтиЭлементПоПолномуПути(Знач НастройкиКД, Знач ПолныйПутьКЭлементу) Экспорт - МассивИндексов = СтрРазделить(ПолныйПутьКЭлементу, "/", Ложь); - ЭлементКД = НастройкиКД; - Для Каждого Индекс Из МассивИндексов Цикл - Если Индекс = "Строки" Тогда - ЭлементКД = ЭлементКД.Строки; - ИначеЕсли Индекс = "Колонки" Тогда - ЭлементКД = ЭлементКД.Колонки; - ИначеЕсли Индекс = "Серии" Тогда - ЭлементКД = ЭлементКД.Серии; - ИначеЕсли Индекс = "Точки" Тогда - ЭлементКД = ЭлементКД.Точки; - ИначеЕсли Индекс = "Структура" Тогда - ЭлементКД = ЭлементКД.Структура; - ИначеЕсли Индекс = "Настройки" Тогда - ЭлементКД = ЭлементКД.Настройки; - Иначе - ЭлементКД = ЭлементКД[Число(Индекс)]; - КонецЕсли; - КонецЦикла; - Возврат ЭлементКД; + + Возврат ГруппыИЭлементы.Авто; КонецФункции // Загружает новые настройки в компоновщик без сброса пользовательских настроек. // // Параметры: -// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Куда надо загрузить настройки. -// НастройкиКД - НастройкиКомпоновкиДанных - Загружаемые настройки варианта. -// ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - Необязательный. -// Загружаемые пользовательские настройки. Если не указан, то пользовательские настройки не загружаются. +// КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - Куда надо загрузить настройки. +// Настройки - НастройкиКомпоновкиДанных - Загружаемые настройки варианта. +// ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - Загружаемые пользовательские настройки. +// Если не указан, то пользовательские настройки не загружаются. +// ФиксированныеНастройки - НастройкиКомпоновкиДанных, Неопределено - Загружаемые фиксированные настройки. +// Если не указан, то фиксированные настройки не загружаются. // -Функция ЗагрузитьНастройки(КомпоновщикНастроекКД, НастройкиКД, ПользовательскиеНастройкиКД = Неопределено) Экспорт - НастройкиЗагружены = (ТипЗнч(НастройкиКД) = Тип("НастройкиКомпоновкиДанных") И НастройкиКД <> КомпоновщикНастроекКД.Настройки); +Функция ЗагрузитьНастройки(КомпоновщикНастроек, Настройки, ПользовательскиеНастройки = Неопределено, ФиксированныеНастройки = Неопределено) Экспорт + НастройкиЗагружены = (ТипЗнч(Настройки) = Тип("НастройкиКомпоновкиДанных") + И Настройки <> КомпоновщикНастроек.Настройки); + Если НастройкиЗагружены Тогда - Если ТипЗнч(ПользовательскиеНастройкиКД) <> Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда - ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + Если ТипЗнч(ПользовательскиеНастройки) <> Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда + ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки; КонецЕсли; - КомпоновщикНастроекКД.ЗагрузитьНастройки(НастройкиКД); + + Если ТипЗнч(ФиксированныеНастройки) <> Тип("НастройкиКомпоновкиДанных") Тогда + ФиксированныеНастройки = КомпоновщикНастроек.ФиксированныеНастройки; + КонецЕсли; + + ДоступныеЗначения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + КомпоновщикНастроек.Настройки.ДополнительныеСвойства, "ДоступныеЗначения"); + + Если ДоступныеЗначения <> Неопределено Тогда + Настройки.ДополнительныеСвойства.Вставить("ДоступныеЗначения", ДоступныеЗначения); + КонецЕсли; + + КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); КонецЕсли; - Если ТипЗнч(ПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") - И ПользовательскиеНастройкиКД <> КомпоновщикНастроекКД.ПользовательскиеНастройки Тогда - КомпоновщикНастроекКД.ЗагрузитьПользовательскиеНастройки(ПользовательскиеНастройкиКД); + + Если ТипЗнч(ПользовательскиеНастройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") + И ПользовательскиеНастройки <> КомпоновщикНастроек.ПользовательскиеНастройки Тогда + КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПользовательскиеНастройки); КонецЕсли; + + Если ТипЗнч(ФиксированныеНастройки) = Тип("НастройкиКомпоновкиДанных") + И ФиксированныеНастройки <> КомпоновщикНастроек.ФиксированныеНастройки Тогда + КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(ФиксированныеНастройки); + КонецЕсли; + Возврат НастройкиЗагружены; КонецФункции @@ -1041,29 +886,29 @@ Функция НайтиЭлементНастройки(ЭлементНастройки, ИдентификаторПользовательскойНастройки) // Поиск элемента с заданным значением свойства ИдентификаторПользовательскойНастройки (ИПН). - МассивГрупп = Новый Массив; - МассивГрупп.Добавить(ЭлементНастройки.Элементы); + Группы = Новый Массив; + Группы.Добавить(ЭлементНастройки.Элементы); + Индекс = 0; - Пока МассивГрупп.Количество() > 0 Цикл - - КоллекцияЭлементов = МассивГрупп.Получить(0); - МассивГрупп.Удалить(0); + Пока Индекс < Группы.Количество() Цикл + КоллекцияЭлементов = Группы[Индекс]; + Индекс = Индекс + 1; Для Каждого ПодчиненныйЭлемент Из КоллекцияЭлементов Цикл Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда // Не содержит ИПН; Коллекция вложенных элементов не содержит ИПН. ИначеЕсли ТипЗнч(ПодчиненныйЭлемент) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда // Не содержит ИПН; Коллекция вложенных элементов может содержать ИПН. - МассивГрупп.Добавить(ПодчиненныйЭлемент.ЗначенияВложенныхПараметров); + Группы.Добавить(ПодчиненныйЭлемент.ЗначенияВложенныхПараметров); ИначеЕсли ПодчиненныйЭлемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда // Найден нужный элемент. Возврат ПодчиненныйЭлемент; Иначе // Содержит ИПН; Коллекция вложенных элементов может содержать ИПН. Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - МассивГрупп.Добавить(ПодчиненныйЭлемент.Элементы); + Группы.Добавить(ПодчиненныйЭлемент.Элементы); ИначеЕсли ТипЗнч(ПодчиненныйЭлемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - МассивГрупп.Добавить(ПодчиненныйЭлемент.ЗначенияВложенныхПараметров); + Группы.Добавить(ПодчиненныйЭлемент.ЗначенияВложенныхПараметров); КонецЕсли; КонецЕсли; КонецЦикла; @@ -1073,159 +918,44 @@ Возврат Неопределено; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для работы с механизмом периодичности. - -// Возвращает дату начала периода. -Функция НачалоПериодаОтчета(ВидПериода, ДатаПериода) Экспорт - НачалоПериода = ДатаПериода; +Функция ЗначенияЭлементовНастроек(Настройки, ПользовательскиеНастройки, Поле) + Значения = Новый СписокЗначений; - Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод") Тогда - // Действие не требуется - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год") Тогда - НачалоПериода = НачалоГода(ДатаПериода); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие") Тогда - Если Месяц(ДатаПериода) >= 7 Тогда - НачалоПериода = Дата(Год(ДатаПериода), 7, 1); - Иначе - НачалоПериода = Дата(Год(ДатаПериода), 1, 1); + ЭлементыНастроек = Настройки.ПараметрыДанных.Элементы; + Для Каждого Элемент Из ЭлементыНастроек Цикл + ЭлементПользовательский = ПользовательскиеНастройки.Найти(Элемент.ИдентификаторПользовательскойНастройки); + ЭлементАнализируемый = ?(ЭлементПользовательский = Неопределено, Элемент, ЭлементПользовательский); + + Поля = Новый Массив; + Поля.Добавить(Новый ПолеКомпоновкиДанных(Строка(Элемент.Параметр))); + Поля.Добавить(Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(Элемент.Параметр))); + + Если ЭлементАнализируемый.Использование + И (Поля[0] = Поле Или Поля[1] = Поле) Тогда + + Если ТипЗнч(ЭлементАнализируемый.Значение) = Тип("СписокЗначений") Тогда + ДополнитьСписок(Значения, ЭлементАнализируемый.Значение, Ложь, Истина); + Иначе + Значения.Добавить(ЭлементАнализируемый.Значение); + КонецЕсли; КонецЕсли; - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал") Тогда - НачалоПериода = НачалоКвартала(ДатаПериода); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц") Тогда - НачалоПериода = НачалоМесяца(ДатаПериода); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада") Тогда - Если День(ДатаПериода) <= 10 Тогда - НачалоПериода = Дата(Год(ДатаПериода), Месяц(ДатаПериода), 1); - ИначеЕсли День(ДатаПериода) <= 20 Тогда - НачалоПериода = Дата(Год(ДатаПериода), Месяц(ДатаПериода), 11); - Иначе - НачалоПериода = Дата(Год(ДатаПериода), Месяц(ДатаПериода), 21); + КонецЦикла; + + ЭлементыНастроек = Настройки.Отбор.Элементы; + Для Каждого Элемент Из ЭлементыНастроек Цикл + ЭлементПользовательский = ПользовательскиеНастройки.Найти(Элемент.ИдентификаторПользовательскойНастройки); + ЭлементАнализируемый = ?(ЭлементПользовательский = Неопределено, Элемент, ЭлементПользовательский); + + Если ЭлементАнализируемый.Использование И Элемент.ЛевоеЗначение = Поле Тогда + Если ТипЗнч(ЭлементАнализируемый.ПравоеЗначение) = Тип("СписокЗначений") Тогда + ДополнитьСписок(Значения, ЭлементАнализируемый.ПравоеЗначение, Ложь, Истина); + Иначе + Значения.Добавить(ЭлементАнализируемый.ПравоеЗначение); + КонецЕсли; КонецЕсли; - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя") Тогда - НачалоПериода = НачалоНедели(ДатаПериода); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День") Тогда - НачалоПериода = НачалоДня(ДатаПериода); - КонецЕсли; - - Возврат НачалоПериода; - -КонецФункции - -// Возвращает дату окончания периода. -Функция КонецПериодаОтчета(ВидПериода, ДатаПериода) Экспорт - КонецПериода = ДатаПериода; - - Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод") Тогда - // Действие не требуется - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год") Тогда - КонецПериода = КонецГода(ДатаПериода); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие") Тогда - Если Месяц(ДатаПериода) >= 7 Тогда - КонецПериода = КонецГода(ДатаПериода); - Иначе - КонецПериода = КонецДня(Дата(Год(ДатаПериода), 6, 30)); - КонецЕсли; - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал") Тогда - КонецПериода = КонецКвартала(ДатаПериода); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц") Тогда - КонецПериода = КонецМесяца(ДатаПериода); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада") Тогда - Если День(ДатаПериода) <= 10 Тогда - КонецПериода = КонецДня(Дата(Год(ДатаПериода), Месяц(ДатаПериода), 10)); - ИначеЕсли День(ДатаПериода) <= 20 Тогда - КонецПериода = КонецДня(Дата(Год(ДатаПериода), Месяц(ДатаПериода), 20)); - Иначе - КонецПериода = КонецМесяца(ДатаПериода); - КонецЕсли; - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя") Тогда - КонецПериода = КонецНедели(ДатаПериода); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День") Тогда - КонецПериода = КонецДня(ДатаПериода); - КонецЕсли; - - Возврат КонецПериода; - -КонецФункции - -// Возвращает вид периода. В отличии от функции ПолучитьВидПериода на вход принимает СтандартныйПериод. -Функция ПолучитьВидСтандартногоПериода(СтандартныйПериод, ДоступныеПериоды = Неопределено) Экспорт - - Если СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод Тогда - - Возврат ПолучитьВидПериода(СтандартныйПериод.ДатаНачала, СтандартныйПериод.ДатаОкончания, ДоступныеПериоды); - - ИначеЕсли СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ЭтотГод - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлыйГод - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующийГод - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СНачалаЭтогоГода - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоГода - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлыйГодДоТакойЖеДаты - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующийГодДоТакойЖеДаты Тогда - - Возврат ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год"); - - ИначеЕсли СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ЭтоПолугодие - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлоеПолугодие - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующееПолугодие - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СНачалаЭтогоПолугодия - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоПолугодия - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлоеПолугодиеДоТакойЖеДаты - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующееПолугодиеДоТакойЖеДаты Тогда - - Возврат ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие"); - - ИначеЕсли СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ЭтотКвартал - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлыйКвартал - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующийКвартал - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СНачалаЭтогоКвартала - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоКвартала - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлыйКварталДоТакойЖеДаты - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующийКварталДоТакойЖеДаты Тогда - - Возврат ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал"); - - ИначеЕсли СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ЭтотМесяц - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлыйМесяц - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующийМесяц - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.Месяц - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СНачалаЭтогоМесяца - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоМесяца - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлыйМесяцДоТакойЖеДаты - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующийМесяцДоТакойЖеДаты Тогда - - Возврат ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц"); - - ИначеЕсли СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ЭтаДекада - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлаяДекада - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующаяДекада - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СНачалаЭтойДекады - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ДоКонцаЭтойДекады - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлаяДекадаДоТакогоЖеНомераДня - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующаяДекадаДоТакогоЖеНомераДня Тогда - - Возврат ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада"); - - ИначеЕсли СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ЭтаНеделя - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлаяНеделя - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующаяНеделя - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СНачалаЭтойНедели - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ДоКонцаЭтойНедели - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.Последние7Дней - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.Следующие7Дней - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПрошлаяНеделяДоТакогоЖеДняНедели - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.СледующаяНеделяДоТакогоЖеДняНедели Тогда - - Возврат ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя"); - - ИначеЕсли СтандартныйПериод.Вариант = ВариантСтандартногоПериода.Сегодня - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.Вчера - Или СтандартныйПериод.Вариант = ВариантСтандартногоПериода.Завтра Тогда - - Возврат ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День"); - - КонецЕсли; + КонецЦикла; + Возврат Значения; КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -1659,12 +1389,6 @@ ИначеЕсли ТипЭлемента <> Тип("ДанныеФормыЭлементДерева") Тогда -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Если ТипЭлемента = Тип("СтрокаДереваЗначений") Тогда - Возврат Результат; - КонецЕсли; -#КонецЕсли - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Копирование элементов ""%1"" не поддерживается'"), ТипЭлемента); @@ -1687,13 +1411,7 @@ КонецЕсли; ЭтоДанныеФормыЭлементДерева = ТипЗнч(ЧемЗаполнить) = Тип("ДанныеФормыЭлементДерева"); -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ЭтоДеревоЗначений = ТипЗнч(ЧемЗаполнить) = Тип("СтрокаДереваЗначений"); -#Иначе - ЭтоДеревоЗначений = Ложь; -#КонецЕсли - Если ЭтоДанныеФормыЭлементДерева Или ЭтоДеревоЗначений Тогда - + Если ЭтоДанныеФормыЭлементДерева Тогда Соответствие.Вставить(ЧемЗаполнить, ЧтоЗаполнить); КоллекцияВложенных = ?(ЭтоДанныеФормыЭлементДерева, ЧемЗаполнить.ПолучитьЭлементы(), ЧемЗаполнить.Строки); @@ -1924,16 +1642,6 @@ Возврат ЧтоЗаполнить; КонецФункции -Функция ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипКоллекции) Экспорт - Если ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") - Или ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") - Или ТипКоллекции = Тип("КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных") Тогда - Возврат Ложь; - Иначе - Возврат Истина; - КонецЕсли; -КонецФункции - Функция ДобавитьУникальноеЗначениеВСписок(СписокЗначений, Значение, Представление, Использование) Экспорт Если Не ЗначениеЗаполнено(Значение) И Не ЗначениеЗаполнено(Представление) Тогда Возврат Неопределено; @@ -1954,35 +1662,32 @@ Возврат ЭлементСписка; КонецФункции -Функция ЗначенияСписком(Значения) Экспорт +Функция ЗначенияСписком(Значения, ТолькоЗаполненные = Ложь) Экспорт Если ТипЗнч(Значения) = Тип("СписокЗначений") Тогда - Возврат Значения; + Список = Значения; Иначе - СписокЗначений = Новый СписокЗначений; + Список = Новый СписокЗначений; Если ТипЗнч(Значения) = Тип("Массив") Тогда - СписокЗначений.ЗагрузитьЗначения(Значения); + Список.ЗагрузитьЗначения(Значения); ИначеЕсли Значения <> Неопределено Тогда - СписокЗначений.Добавить(Значения); + Список.Добавить(Значения); КонецЕсли; - Возврат СписокЗначений; - КонецЕсли; -КонецФункции - -Функция ОписанияТиповСовпадают(ОписаниеТипов1, ОписаниеТипов2) - Если ОписаниеТипов1 = Неопределено Или ОписаниеТипов2 = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - Если ОписаниеТипов1 = ОписаниеТипов2 Или Строка(ОписаниеТипов1) = Строка(ОписаниеТипов2) Тогда - Возврат Истина; КонецЕсли; - #Если Сервер Тогда - Если ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов1) = ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов2) Тогда - Возврат Истина; - КонецЕсли; - #КонецЕсли + Если Не ТолькоЗаполненные Тогда + Возврат Список; + КонецЕсли; - Возврат Ложь; + Индекс = Список.Количество() - 1; + Пока Индекс >= 0 Цикл + Элемент = Список[Индекс]; + Если Не ЗначениеЗаполнено(Элемент.Значение) Тогда + Список.Удалить(Элемент); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + + Возврат Список; КонецФункции Функция ДополнитьСписок(СписокПриемник, СписокИсточник, КонтролироватьТип = Неопределено, ДобавлятьНовые = Истина) Экспорт @@ -2000,7 +1705,7 @@ Результат.Вставить("Пропущено", 0); Если КонтролироватьТип = Неопределено Тогда - КонтролироватьТип = Не ОписанияТиповСовпадают(СписокПриемник.ТипЗначения, СписокИсточник.ТипЗначения); + КонтролироватьТип = (СписокПриемник.ТипЗначения <> СписокИсточник.ТипЗначения); КонецЕсли; Если КонтролироватьТип Тогда ОписаниеТиповПриемника = СписокПриемник.ТипЗначения; @@ -2032,107 +1737,6 @@ Возврат Результат; КонецФункции -Функция ЗначениеВМассив(Значение) Экспорт - Если ТипЗнч(Значение) = Тип("Массив") Тогда - Возврат Значение; - Иначе - Массив = Новый Массив; - Массив.Добавить(Значение); - Возврат Массив; - КонецЕсли; -КонецФункции - -Функция АнализТипов(ИсходноеОписаниеТипов, ПривестиКФорме) Экспорт - Результат = Новый Структура; - Результат.Вставить("СодержитТипТип", Ложь); - Результат.Вставить("СодержитТипДата", Ложь); - Результат.Вставить("СодержитТипБулево", Ложь); - Результат.Вставить("СодержитТипСтрока", Ложь); - Результат.Вставить("СодержитТипЧисло", Ложь); - Результат.Вставить("СодержитТипПериод", Ложь); - Результат.Вставить("СодержитТипУИД", Ложь); - Результат.Вставить("СодержитТипХранилище", Ложь); - Результат.Вставить("СодержитОбъектныеТипы", Ложь); - Результат.Вставить("ОграниченнойДлины", Истина); - - Результат.Вставить("КоличествоТипов", 0); - Результат.Вставить("КоличествоПримитивныхТипов", 0); - Результат.Вставить("ОбъектныеТипы", Новый Массив); - - Если ПривестиКФорме Тогда - ДобавляемыеТипы = Новый Массив; - ВычитаемыеТипы = Новый Массив; - Результат.Вставить("ОписаниеТиповИсходное", ИсходноеОписаниеТипов); - Результат.Вставить("ОписаниеТиповДляФормы", ИсходноеОписаниеТипов); - КонецЕсли; - - Если ИсходноеОписаниеТипов = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - МассивТипов = ИсходноеОписаниеТипов.Типы(); - Для Каждого Тип Из МассивТипов Цикл - Если Тип = Тип("ПолеКомпоновкиДанных") Тогда - Если ПривестиКФорме Тогда - ВычитаемыеТипы.Добавить(Тип); - КонецЕсли; - Продолжить; - КонецЕсли; -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - МетаданныеНастройки = Метаданные.НайтиПоТипу(Тип); - Если МетаданныеНастройки <> Неопределено И Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеНастройки) Тогда - Если ПривестиКФорме Тогда - ВычитаемыеТипы.Добавить(Тип); - КонецЕсли; - Продолжить; - КонецЕсли; -#КонецЕсли - - Результат.КоличествоТипов = Результат.КоличествоТипов + 1; - - Если Тип = Тип("Тип") Тогда - Результат.СодержитТипТип = Истина; - ИначеЕсли Тип = Тип("Дата") Тогда - Результат.СодержитТипДата = Истина; - Результат.КоличествоПримитивныхТипов = Результат.КоличествоПримитивныхТипов + 1; - ИначеЕсли Тип = Тип("Булево") Тогда - Результат.СодержитТипБулево = Истина; - Результат.КоличествоПримитивныхТипов = Результат.КоличествоПримитивныхТипов + 1; - ИначеЕсли Тип = Тип("Число") Тогда - Результат.СодержитТипЧисло = Истина; - Результат.КоличествоПримитивныхТипов = Результат.КоличествоПримитивныхТипов + 1; - ИначеЕсли Тип = Тип("СтандартныйПериод") Тогда - Результат.СодержитТипПериод = Истина; - ИначеЕсли Тип = Тип("Строка") Тогда - Результат.СодержитТипСтрока = Истина; - Результат.КоличествоПримитивныхТипов = Результат.КоличествоПримитивныхТипов + 1; - Если ИсходноеОписаниеТипов.КвалификаторыСтроки.Длина = 0 - И ИсходноеОписаниеТипов.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Переменная Тогда - Результат.ОграниченнойДлины = Ложь; - КонецЕсли; - ИначеЕсли Тип = Тип("УникальныйИдентификатор") Тогда - Результат.СодержитТипУИД = Истина; - ИначеЕсли Тип = Тип("ХранилищеЗначения") Тогда - Результат.СодержитТипХранилище = Истина; - Иначе - Результат.СодержитОбъектныеТипы = Истина; - Результат.ОбъектныеТипы.Добавить(Тип); - КонецЕсли; - - КонецЦикла; - - Если ПривестиКФорме - И (ДобавляемыеТипы.Количество() > 0 Или ВычитаемыеТипы.Количество() > 0) Тогда - Результат.ОписаниеТиповДляФормы = Новый ОписаниеТипов(ИсходноеОписаниеТипов, ДобавляемыеТипы, ВычитаемыеТипы); - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция ПривестиИдентификаторКИмени(Идентификатор) Экспорт - Возврат СтрЗаменить(СтрЗаменить(Строка(Идентификатор), "-", ""), ".", "_"); -КонецФункции - Функция СтрЛевДоСимвола(Строка, Разделитель, Остаток = Неопределено) Позиция = СтрНайти(Строка, Разделитель); Если Позиция = 0 Тогда @@ -2145,64 +1749,6 @@ Возврат СтрокаДоТочки; КонецФункции -Функция СписокВыбораВидовСравнения(ОписаниеТипов) Экспорт - ИнформацияОТипах = АнализТипов(ОписаниеТипов, Ложь); - - Список = Новый СписокЗначений; - - Если ИнформацияОТипах.ОграниченнойДлины Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Равно); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеРавно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); - - Если ИнформацияОТипах.СодержитОбъектныеТипы Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); // НСтр("ru = 'В списке включая подчиненные'") - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); // НСтр("ru = 'Не в списке включая подчиненные'"). - - Список.Добавить(ВидСравненияКомпоновкиДанных.ВИерархии); // НСтр("ru = 'В группе'") - Список.Добавить(ВидСравненияКомпоновкиДанных.НеВИерархии); // НСтр("ru = 'Не в группе'") - - КонецЕсли; - - Если ИнформацияОТипах.КоличествоПримитивныхТипов > 0 Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Меньше); - Список.Добавить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.Больше); - Список.Добавить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно); - - КонецЕсли; - - КонецЕсли; - - Если ИнформацияОТипах.СодержитТипСтрока Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Содержит); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеСодержит); - - Список.Добавить(ВидСравненияКомпоновкиДанных.Подобно); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеПодобно); - - Список.Добавить(ВидСравненияКомпоновкиДанных.НачинаетсяС); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеНачинаетсяС); - - КонецЕсли; - - Если ИнформацияОТипах.ОграниченнойДлины Тогда - - Список.Добавить(ВидСравненияКомпоновкиДанных.Заполнено); - Список.Добавить(ВидСравненияКомпоновкиДанных.НеЗаполнено); - - КонецЕсли; - - Возврат Список; -КонецФункции - Функция НайтиСтрокиТаблицы(ТаблицаРеквизит, ДанныеСтроки) Экспорт Если ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыКоллекция") Тогда // Таблица значений. Возврат ТаблицаРеквизит.НайтиСтроки(ДанныеСтроки); @@ -2300,4 +1846,67 @@ Возврат Результат; КонецФункции +Функция УсловиеЭлементаНастройки(Элемент, Описание) Экспорт + Условие = ВидСравненияКомпоновкиДанных.Равно; + + Если ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Условие = Элемент.ВидСравнения; + ИначеЕсли ТипЗнч(Элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + И Описание.ДоступенСписокЗначений Тогда + Условие = ВидСравненияКомпоновкиДанных.ВСписке; + КонецЕсли; + + Возврат Условие; +КонецФункции + +Функция ЭтоВидСравненияСписка(ВидСравнения) Экспорт + ВидыСравнений = Новый Массив; + ВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); + ВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); + ВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); + ВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); + + Возврат ВидыСравнений.Найти(ВидСравнения) <> Неопределено; +КонецФункции + +Функция ПараметрыВыбора(Настройки, ПользовательскиеНастройки, ЭлементНастройки) Экспорт + ПараметрыВыбора = Новый Массив; + + ОписаниеЭлементаНастройки = НайтиДоступнуюНастройку(Настройки, ЭлементНастройки); + Если ОписаниеЭлементаНастройки = Неопределено Тогда + Возврат Новый ФиксированныйМассив(ПараметрыВыбора); + КонецЕсли; + + Параметры = ОписаниеЭлементаНастройки.ПолучитьПараметрыВыбора(); + Для Каждого Параметр Из Параметры Цикл + Если ЗначениеЗаполнено(Параметр.Имя) Тогда + ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Параметр.Имя, Параметр.Значение)); + КонецЕсли; + КонецЦикла; + + Параметры = ОписаниеЭлементаНастройки.ПолучитьСвязиПараметровВыбора(); + Для Каждого Параметр Из Параметры Цикл + Если Не ЗначениеЗаполнено(Параметр.Имя) Тогда + Продолжить; + КонецЕсли; + + Значения = ЗначенияЭлементовНастроек(Настройки, ПользовательскиеНастройки, Параметр.Поле); + Если Значения.Количество() > 0 Тогда + ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Параметр.Имя, Значения)); + КонецЕсли; + КонецЦикла; + + Возврат Новый ФиксированныйМассив(ПараметрыВыбора); +КонецФункции + +Функция ДоступенПоискНастройкиПоИдентификатору() + СистемнаяИнформация = Новый СистемнаяИнформация; + СтруктураВерсии = СтрРазделить(СистемнаяИнформация.ВерсияПриложения, "."); + + ОписаниеЧисла = Новый ОписаниеТипов("Число"); + ВерсияПриложения = ОписаниеЧисла.ПривестиЗначение(СтруктураВерсии[2]); + + Возврат (ВерсияПриложения > 12); +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl index 7a697f0e9..ccf4e623a 100644 --- a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // В данной процедуре следует описать дополнительные зависимости объектов метаданных @@ -19,19 +27,21 @@ // для указания дополнительных параметров выбора. // // Параметры: -// Форма - УправляемаяФорма, Неопределено - Форма отчета. -// СвойстваНастройки - Структура - Описание настройки отчета, которая будет выведена в форме отчета. -// * ПолеКД - ПолеКомпоновкиДанных - Выводимая настройка. -// * ОписаниеТипов - ОписаниеТипов - Тип выводимой настройки. -// * ЗначенияДляВыбора - СписокЗначений - Указать объекты, которые будут предложены пользователю в списке выбора. -// Дополняет список объектов, уже выбранных пользователем ранее. -// При этом не следует присваивать в этот параметр новый список значений. -// * ЗапросЗначенийВыбора - Запрос - Указать запрос для выборки объектов, которыми необходимо дополнить -// ЗначенияДляВыбора. Первой колонкой (с индексом 0) должен выбираться объект, -// который следует добавить в ЗначенияДляВыбора.Значение. -// Для отключения автозаполнения в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку. -// * ОграничиватьВыборУказаннымиЗначениями - Булево - Указать Истина, чтобы ограничить выбор пользователя -// значениями, указанными в ЗначенияДляВыбора (его конечным состоянием). +// Форма - УправляемаяФорма, Неопределено - Форма отчета. +// СвойстваНастройки - Структура - Описание настройки отчета, которая будет выведена в форме отчета. +// * ПолеКД - ПолеКомпоновкиДанных - Выводимая настройка. +// * ОписаниеТипов - ОписаниеТипов - Тип выводимой настройки. +// * ЗначенияДляВыбора - СписокЗначений - Указать объекты, которые будут предложены пользователю в списке выбора. +// Дополняет список объектов, уже выбранных пользователем ранее. +// При этом не следует присваивать в этот параметр новый список значений. +// * ЗапросЗначенийВыбора - Запрос - Указать запрос для выборки объектов, которыми необходимо дополнить +// ЗначенияДляВыбора. Первой колонкой (с индексом 0) должен выбираться объект, +// который следует добавить в ЗначенияДляВыбора.Значение. +// Для отключения автозаполнения в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку. +// * ОграничиватьВыборУказаннымиЗначениями - Булево - Указать Истина, чтобы ограничить выбор пользователя +// значениями, указанными в ЗначенияДляВыбора (его конечным состоянием). +// * Тип - Строка - Краткий идентификатор типа свойства настроек компоновщика настроек компоновки данных. +// См. ОтчетыСервер.ТипНастройкиСтрокой. // // Пример: // 1. Для всех настроек типа СправочникСсылка.Пользователи скрыть и не разрешать выбирать помеченных на удаление, diff --git a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl index 0ffdbecd1..7077c5090 100644 --- a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl @@ -1,24 +1,43 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс -// Инициализирует компоновщик на основании схемы и загружает новые настройки. -// Для вызова из обработчика события ПередЗагрузкойНастроекВКомпоновщик формы отчета, расположенного в модуле -// объекта отчета. +// Устанавливает отчету переданную схему и на основании нее, инициализирует компоновщик настроек. +// Если контекстом является форма отчета (настроек), то обновляет основной реквизит формы - Отчет. +// В результате, контекст объекта и формы отчета синхронизируются. +// Вызывается например, из обработчика ПередЗагрузкойНастроекВКомпоновщик объекта универсального отчета +// для установки схемы, программно сформированной на основании другого объекта метаданных. // // Параметры: -// ОтчетОбъект - ОтчетОбъект, ВнешнийОтчетОбъект - отчет, для которого необходимо подключить схему. -// Контекст - УправляемаяФорма - форма отчета или форма настройки отчета. -// Передается "как есть" из одноименного параметра события -// ПередЗагрузкойНастроекВКомпоновщик. -// - Структура - параметры отчета. См. ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки. -// СхемаКД - СхемаКомпоновкиДанных - схема, которую необходимо подключить. -// КлючСхемы - Строка - идентификатор новой схемы, который будет записан в дополнительные свойства -// пользовательских настроек. +// Отчет - ОтчетОбъект, ВнешнийОтчетОбъект - отчет, которому необходимо установить схему. +// Контекст - УправляемаяФорма - форма отчета или форма настройки отчета. +// Передается "как есть" из одноименного параметра события +// ПередЗагрузкойНастроекВКомпоновщик. +// - Структура - параметры отчета: см. ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки. +// Схема - СхемаКомпоновкиДанных - схема, которую необходимо установить отчету. +// КлючСхемы - Строка - идентификатор новой схемы, который будет записан в дополнительные свойства +// пользовательских настроек. // -Процедура ПодключитьСхему(ОтчетОбъект, Контекст, СхемаКД, КлючСхемы) Экспорт - СобытиеИзФормыОтчета = (ТипЗнч(Контекст) = Тип("УправляемаяФорма")); +// Пример: +// // В обработчике объекта отчета ПередЗагрузкойНастроекВКомпоновщик компоновщик настроек +// // инициализируется на основании схемы из общих макетов: +// Если КлючСхемы <> "1" Тогда +// КлючСхемы = "1"; +// Схема = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки"); +// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, Схема, КлючСхемы); +// КонецЕсли; +// +Процедура ПодключитьСхему(Отчет, Контекст, Схема, КлючСхемы) Экспорт + СобытиеФормы = (ТипЗнч(Контекст) = Тип("УправляемаяФорма")); - ОтчетОбъект.СхемаКомпоновкиДанных = СхемаКД; - Если СобытиеИзФормыОтчета Тогда + Отчет.СхемаКомпоновкиДанных = Схема; + Если СобытиеФормы Тогда НастройкиОтчета = Контекст.НастройкиОтчета; АдресСхемы = НастройкиОтчета.АдресСхемы; НастройкиОтчета.Вставить("СхемаМодифицирована", Истина); @@ -28,25 +47,57 @@ ИдентификаторФормы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "ИдентификаторФормы"); Если ТипЗнч(ИдентификаторФормы) = Тип("УникальныйИдентификатор") Тогда АдресСхемыЗаполнен = Истина; - Контекст.АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКД, ИдентификаторФормы); + Контекст.АдресСхемы = ПоместитьВоВременноеХранилище(Схема, ИдентификаторФормы); КонецЕсли; КонецЕсли; Если АдресСхемыЗаполнен Тогда АдресСхемы = Контекст.АдресСхемы; Иначе - АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКД); + АдресСхемы = ПоместитьВоВременноеХранилище(Схема); КонецЕсли; Контекст.СхемаМодифицирована = Истина; КонецЕсли; - ПоместитьВоВременноеХранилище(СхемаКД, АдресСхемы); + ПоместитьВоВременноеХранилище(Схема, АдресСхемы); - ОтчетОбъект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); + ВариантОтчета = ?(СобытиеФормы, НастройкиОтчета.ВариантСсылка, Неопределено); + ИнициализироватьКомпоновщикНастроек(Отчет.КомпоновщикНастроек, АдресСхемы, Отчет, ВариантОтчета); - Если СобытиеИзФормыОтчета Тогда - ЗначениеВДанныеФормы(ОтчетОбъект, Контекст.Отчет); + Если СобытиеФормы Тогда + ЗначениеВДанныеФормы(Отчет, Контекст.Отчет); КонецЕсли; КонецПроцедуры +// Инициализирует компоновщик настроек компоновки данных, с обработкой исключения. +// +// Параметры: +// КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - компоновщик настроек, который необходимо инициализировать. +// Схема - СхемаКомпоновкиДанных, URL - см. синтакс-помощник: ИсточникДоступныхНастроекКомпоновкиДанных. +// Отчет - ОтчетОбъект, Неопределено - отчет, чей компоновщик инициализируется. +// ВариантОтчета - СправочникСсылка.ВариантыОтчета, Неопределено - хранилище варианта отчета. +// +Процедура ИнициализироватьКомпоновщикНастроек(КомпоновщикНастроек, Схема, Отчет = Неопределено, ВариантОтчета = Неопределено) Экспорт + Попытка + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема)); + Исключение + ИмяСобытия = НСтр("ru = 'Ошибка инициализации компоновщика настроек компоновки данных.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + ОбъектМетаданных = Неопределено; + Если Отчет <> Неопределено Тогда + ОбъектМетаданных = Отчет.Метаданные(); + ИначеЕсли ВариантОтчета <> Неопределено Тогда + ОбъектМетаданных = ВариантОтчета.Метаданные(); + КонецЕсли; + + Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации( + ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, ОбъектМетаданных, ВариантОтчета, Комментарий); + + ВызватьИсключение; + КонецПопытки; +КонецПроцедуры + // Выводит команду в форму отчета в виде кнопки в указанную группу. // Также регистрирует команду, защищая ее от удаления при перерисовке формы. // Для вызова из события ПриСозданииНаСервере формы отчета. @@ -77,12 +128,14 @@ СуффиксПодгруппы = "") Экспорт ПередЧемВставить = Неопределено; + ГруппаЕще = Неопределено; Если ТипГруппы = "Главное" Тогда Группа = ФормаОтчета.Элементы.ГруппаГлавное; ИначеЕсли ТипГруппы = "Настройки" Тогда Группа = ФормаОтчета.Элементы.ГруппаНастройкиОтчета; ИначеЕсли ТипГруппы = "РаботаСТабличнымДокументом" Тогда Группа = ФормаОтчета.Элементы.ГруппаРаботаВТаблице; + ГруппаЕще = ФормаОтчета.Элементы.ГруппаРаботаВТаблицеЕще; ИначеЕсли ТипГруппы = "Интеграция" Тогда Группа = ФормаОтчета.Элементы.ГруппаВывод; ИначеЕсли ТипГруппы = "ПодменюОтправить" Тогда @@ -120,7 +173,6 @@ КонецЕсли; Для Каждого Команда Из Команды Цикл - Обработчик = ?(СтрЧислоВхождений(Команда.Действие, ".") = 0, "", Команда.Действие); ФормаОтчета.ПостоянныеКоманды.Добавить(Команда.Имя, Обработчик); Команда.Действие = "Подключаемый_Команда"; @@ -129,8 +181,14 @@ Кнопка.ИмяКоманды = Команда.Имя; Кнопка.ТолькоВоВсехДействиях = ТолькоВоВсехДействиях; + Если ГруппаЕще = Неопределено Тогда + Продолжить; + КонецЕсли; + + Кнопка = ФормаОтчета.Элементы.Вставить(Команда.Имя + "Еще", Тип("КнопкаФормы"), ГруппаЕще); + Кнопка.ИмяКоманды = Команда.Имя; + Кнопка.ТолькоВоВсехДействиях = Истина; КонецЦикла; - КонецПроцедуры // Оформляет ячейку в виде гиперссылки и заполняет поля адреса и представления ссылки. @@ -239,30 +297,151 @@ Возврат Истина; КонецФункции +// Конструктор свойств группы элементов формы пользовательских настроек. +// +// Возвращаемое значение: +// Структура - содержит значения свойств группы: +// * Отображение - ОтображениеОбычнойГруппы - см. Синтакс-помощник - ОтображениеОбычнойГруппы. +// * Группировка - ГруппировкаПодчиненныхЭлементовФормы - значения определяют количество +// групп-колонок элементов: +// ** Вертикальная - ГруппировкаПодчиненныхЭлементовФормы - эквивалентно 1-ой колонке; +// ** ГоризонтальнаяЕслиВозможно - ГруппировкаПодчиненныхЭлементовФормы - эквивалентно 2-м колонкам; +// ** ГоризонтальнаяВсегда - ГруппировкаПодчиненныхЭлементовФормы - количество колонок равно количеству элементов +// в группе. +// +Функция СвойстваГруппыЭлементовФормы() Экспорт + СвойстваГруппы = Новый Структура; + СвойстваГруппы.Вставить("Отображение", ОтображениеОбычнойГруппы.Нет); + СвойстваГруппы.Вставить("Группировка", ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно); + + Возврат СвойстваГруппы; +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс -// Формирует описание периода для целей сбора статистики. -// Получаемая информация не содержит конкретных дат, поэтому может считаться анонимной. -// -// Параметры: -// Период - СтандартныйПериод - анализируемый период. -// -// Возвращаемое значение: -// Структура - описание периода: -// * ВидПериода - Строка - Классификация периода. Например: "Год", "СНачалаГода" или "ДоКонцаГода". -// * СдвигПериода - Число - Количество шагов, необходимых для получения периода относительно текущей даты. -// Размер шага определяется видом периода. -// -Функция АнализПериода(Период) Экспорт - Если Период.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод Тогда - Возврат АнализПроизвольногоПериода(Период.ДатаНачала, Период.ДатаОкончания); - Иначе - Возврат АнализСтандартногоПериода(Период.Вариант); +Процедура ОбновитьЭлементыФормыНастроек(Форма, УзелИерархииЭлементов) Экспорт + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Форма.СоздатьЭлементыФормыПользовательскихНастроек(УзелИерархииЭлементов); + Возврат; КонецЕсли; + + Элементы = Форма.Элементы; + + ВидыСтилизованныхЭлементов = СтрРазделить("Период, Список, Флажок", ", ", Ложь); + ИменаРеквизитов = ИменаРеквизитовЭлементовНастроек(Форма, ВидыСтилизованныхЭлементов); + + ПодготовитьФормуКПерегруппировкеЭлементов(Форма, УзелИерархииЭлементов, ИменаРеквизитов, ВидыСтилизованныхЭлементов); + + ВременнаяГруппа = Элементы.Добавить("Временная", Тип("ГруппаФормы")); + ВременнаяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + + Режим = РежимОтображенияНастроекКомпоновкиДанных.БыстрыйДоступ; + Если Форма.ТипФормыОтчета = ТипФормыОтчета.Настройка Тогда + Режим = РежимОтображенияНастроекКомпоновкиДанных.Все; + КонецЕсли; + + Форма.СоздатьЭлементыФормыПользовательскихНастроек(ВременнаяГруппа, Режим, 1); + + СвойстваЭлементов = СвойстваЭлементовФормыНастроек( + Форма.ТипФормыОтчета, Форма.Отчет.КомпоновщикНастроек, Форма.НастройкиОтчета); + + ПерегруппироватьЭлементыФормыНастроек( + Форма, УзелИерархииЭлементов, СвойстваЭлементов, ИменаРеквизитов, ВидыСтилизованныхЭлементов); + + Элементы.Удалить(ВременнаяГруппа); +КонецПроцедуры + +Функция ДоступныеНастройки(ПараметрыЗагрузки, НастройкиОтчета) Экспорт + Настройки = Неопределено; + ПользовательскиеНастройки = Неопределено; + ФиксированныеНастройки = Неопределено; + + Если ПараметрыЗагрузки.Свойство("КомпоновщикНастроекКД") Тогда + Настройки = ПараметрыЗагрузки.КомпоновщикНастроекКД.Настройки; + ПользовательскиеНастройки = ПараметрыЗагрузки.КомпоновщикНастроекКД.ПользовательскиеНастройки; + ФиксированныеНастройки = ПараметрыЗагрузки.КомпоновщикНастроекКД.ФиксированныеНастройки; + Иначе + Если ПараметрыЗагрузки.Свойство("НастройкиКД") Тогда + Настройки = ПараметрыЗагрузки.НастройкиКД; + КонецЕсли; + Если ПараметрыЗагрузки.Свойство("ПользовательскиеНастройкиКД") Тогда + ПользовательскиеНастройки = ПараметрыЗагрузки.ПользовательскиеНастройкиКД; + КонецЕсли; + КонецЕсли; + + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + НастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеНастройкиXML"); + Если ТипЗнч(НастройкиXML) = Тип("Строка") Тогда + Попытка + Настройки = ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкиXML); + Исключение + Настройки = Неопределено; + КонецПопытки; + НастройкиОтчета.НовыеНастройкиXML = Неопределено; + КонецЕсли; + + ПользовательскиеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеПользовательскиеНастройкиXML"); + Если ТипЗнч(ПользовательскиеНастройкиXML) = Тип("Строка") Тогда + Попытка + ПользовательскиеНастройки = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПользовательскиеНастройкиXML); + Исключение + ПользовательскиеНастройки = Неопределено; + КонецПопытки; + НастройкиОтчета.НовыеПользовательскиеНастройкиXML = Неопределено; + КонецЕсли; + КонецЕсли; + + Возврат Новый Структура("Настройки, ПользовательскиеНастройки, ФиксированныеНастройки", + Настройки, ПользовательскиеНастройки, ФиксированныеНастройки); КонецФункции +Процедура УстановитьДоступныеЗначения(Отчет, Форма) Экспорт + КомпоновщикНастроек = Форма.Отчет.КомпоновщикНастроек; + + ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки; + Для Каждого ЭлементПользовательскойНастройки Из ПользовательскиеНастройки.Элементы Цикл + Если ТипЗнч(ЭлементПользовательскойНастройки) <> Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + И ТипЗнч(ЭлементПользовательскойНастройки) <> Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( + КомпоновщикНастроек.Настройки, + ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,, + ПользовательскиеНастройки); + + ОписаниеНастройки = ОтчетыКлиентСервер.НайтиДоступнуюНастройку(КомпоновщикНастроек.Настройки, ЭлементНастройки); + + СвойстваНастройки = СвойстваЭлементаПользовательскихНастроек( + КомпоновщикНастроек, ЭлементПользовательскойНастройки, ЭлементНастройки, ОписаниеНастройки); + + // Механизмы расширения. + // Глобальные настройки вывода типов. + ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(Неопределено, СвойстваНастройки); + // Локальное переопределение для отчета. + Если Форма.НастройкиОтчета.События.ПриОпределенииПараметровВыбора Тогда + Отчет.ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки); + КонецЕсли; + + // Автоматическое заполнение. + Если СвойстваНастройки.ЗапросЗначенийВыбора.Текст <> "" Тогда + ДобавляемыеЗначения = СвойстваНастройки.ЗапросЗначенийВыбора.Выполнить().Выгрузить().ВыгрузитьКолонку(0); + Для Каждого Элемент Из ДобавляемыеЗначения Цикл + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок( + СвойстваНастройки.ЗначенияДляВыбора, Элемент, Неопределено, Ложь); + КонецЦикла; + СвойстваНастройки.ЗначенияДляВыбора.СортироватьПоПредставлению(НаправлениеСортировки.Возр); + КонецЕсли; + + Если ТипЗнч(СвойстваНастройки.ЗначенияДляВыбора) = Тип("СписокЗначений") + И СвойстваНастройки.ЗначенияДляВыбора.Количество() > 0 Тогда + ОписаниеНастройки.ДоступныеЗначения = СвойстваНастройки.ЗначенияДляВыбора; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -271,8 +450,101 @@ // Анализ // Возвращает информацию о настройках компоновщика. -// После завершения работы с настройками следует вызвать ОчиститьРасширеннуюИнформациюОНастройках -// для очистки от цикличных ссылок для корректного освобождение памяти. +// После завершения работы с настройками следует вызвать ОчиститьРасширеннуюИнформациюОНастройках +// для очистки от цикличных ссылок для корректного освобождение памяти. +// +// Вызовы (6): +// 1. ОбщийМодуль.ВариантыОтчетов.УменьшитьКоличествоБыстрыхНастроек() +// * Используется только свойство ПользовательскиеНастройки; +// * Является параметром вызываемого метода ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(). +// 2. ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета.ПриСозданииНаСервере() +// * Используется только свойство ПользовательскиеНастройки; +// * Является параметром вызываемого метода ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(). +// 3. ОбщаяФорма.ФормаНастроекОтчета: +// 3.1. БыстрыеНастройкиЗаполнить() +// * Используется наиболее полно. +// 3.2. ОчиститьНастройкиОтНесуществующихПолейНаСервере() +// * Используются свойства: ДеревоВарианта, НастройкиВарианта. +// 4. ОбщаяФорма.ФормаОтчета.БыстрыеНастройкиЗаполнить() +// * Используются свойства: СоответствиеИменОбъектовМетаданных, Связи, ПользовательскиеНастройки. +// 5. Отчет.БыстрыеНастройкиОтчетов.МодульОбъекта.ПроанализироватьПользовательскиеНастройки() +// * Используется только свойство ПользовательскиеНастройки; +// +// Параметры: +// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Отчет.КомпоновщикНастроек. +// Свойство отчета. +// НастройкиОтчета - Структура - см. ВариантыОтчетов.НастройкиФормыОтчета(). +// Содержит свойства отчета. Хранится в реквизите формы (отчета, настроек). +// ОтчетОбъектИлиПолноеИмя - ОтчетОбъект, Строка - объект компонуемого отчета или его полное имя метаданных. +// УсловияВывода - Структура, Неопределено - дополнительные признаки: +// * ТолькоПользовательские - Булево. +// * ТолькоБыстрые - Булево. +// * ИдентификаторТекущегоУзлаКД - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор текущей настройки. +// +// Возвращаемое значение: +// Структура - содержит: +// * ТолькоПользовательские - Булево. +// * ТолькоБыстрые - Булево. +// * ИдентификаторТекущегоУзлаКД - ИдентификаторКомпоновкиДанных, Неопределено - идентификатор текущей настройки. +// * НастройкиКД - НастройкиКомпоновкиДанных - см. Синтакс-помощник: КомпоновщикНастроекКомпоновкиДанных.Настройки. +// * НастройкиОтчета - Структура - см. ВариантыОтчетов.НастройкиФормыОтчета(). +// * ОтчетОбъектИлиПолноеИмя - ОтчетОбъект, Строка - объект компонуемого отчета или его полное имя метаданных. +// * ДеревоВарианта - ДеревоЗначений - см. ОтчетыСервер.ДеревоВарианта(). +// Хранит свойства и признаки настройки компоновки данных и всей иерархии ее структуры. +// * НастройкиВарианта - ДеревоЗначений - см. ОтчетыСервер.ТаблицаНастроекВарианта(). +// Хранит ссылку на каждую строку раннее инициализированного дерева ДеревоВарианта, +// а также свойства и признаки соответствующих коллекций настроек: Отбор, Порядок и т.д. +// * ПользовательскиеНастройки - ТаблицыЗначений - см. ОтчетыСервер.ТаблицаПользовательскихНастроек(). +// Хранит ссылку на каждую строку раннее инициализированного дерева +// ДеревоВарианта, а также свойства и признаки по каждой из пользовательских +// настроек. +// * ОтключаемыеСвязи - Массив: +// * ПоТипу - ТаблицыЗначений - см. ОтчетыСервер.ТаблицаСвязейПоТипу(). +// Хранит ссылку на строку дерева раннее инициализированного свойства ДеревоВарианта, +// а также значения свойств параметра редактирования СвязьПоТипу +// доступных полей отбора и параметров данных настроек компоновки данных. +// * ПараметровВыбора - ТаблицыЗначений - см. ОтчетыСервер.ТаблицаСвязейПараметровВыбора(). +// Хранит ссылку на строку дерева раннее инициализированного +// свойства ДеревоВарианта, а также значения свойств параметра +// редактирования СвязиПараметровВыбора доступных полей отбора и +// параметров данных настроек компоновки данных. +// * ОбъектовМетаданных - ТаблицыЗначений - см. ОтчетыСервер.ТаблицаСвязейОбъектовМетаданных(). +// * ДополнительныеНастройкиЭлементов - Соответствие - хранится в КомпоновщикНастроекКомпоновкиДанных.ПользовательскиеНастройки.ДополнительныеСвойства, +// по ключу ЭлементыФормы: +// * Ключ - Строка - производная от универсального идентификатора +// пользовательской настройки - составная часть элемента +// управления, ссылающегося на пользовательскую настройку. +// * Значение - Структура - свойства пользовательских настроек. +// * СоответствиеИменОбъектовМетаданных - Соответствие - содержит: +// * Ключ - Тип - ссылочный тип. +// * Значение - Строка - полное имя объекта метаданных +// соответствующего текущему ключу. +// * Поиск - Структура - содержит: +// * НастройкиВариантаПоПолюКД - Соответствие: +// * Ключ - ПолеКомпоновкиДанных. +// * Значение - СтрокаДереваЗначений - ссылка на строку дерева +// раннее инициализированного свойства ДеревоВарианта. +// * ПользовательскиеНастройки - Соответствие. +// * Ключ - Строка - производная от универсального идентификатора +// пользовательской настройки - составная часть элемента +// управления, ссылающегося на пользовательскую настройку. +// * Значение - СтрокаТаблицыЗначений - ссылка на строку таблицы +// значений раннее инициализированного свойства ПользовательскиеНастройки. +// * ЕстьБыстрыеНастройки - Булево - Истина, если хотя бы для одной из пользовательских настроек +// РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ +// или РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто. +// * ЕстьОбычныеНастройки - Булево - Истина, если хотя бы для одной из пользовательских настроек +// РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный. +// * ЕстьНесуществующиеПоля - Булево - признак того, что поле отсутствует в доступных полях. +// * ЕстьВложенныеОтчеты - Булево - признак того, что тип хотя бы одного из элементов настроек - НастройкиВложенногоОбъектаКомпоновкиДанных. +// * ЕстьВложенноеОформление - Булево - см. Синтакс-помощник - НастройкиКомпоновкиДанных.НаличиеУсловногоОформленияУЭлемента(). +// * ЕстьВложенныеПоля - Булево - см. Синтакс-помощник - НастройкиКомпоновкиДанных.НаличиеВыбораУЭлемента(). +// * ЕстьВложенныеСортировки - Булево - см. Синтакс-помощник - НастройкиКомпоновкиДанных.НаличиеПорядкаУЭлемента(). +// * СвойстваГруппЭлементов - Структура - см. ОтчетыСервер.СвойстваГруппыЭлементовФормы() - +// настройки группы элементов быстрых (выводимых на форму) настроек по умолчанию. +// * ГруппыЭлементов - Соответствие - коллекция для установки частных свойств групп элементов быстрых настроек. +// * ДеревоВариантаКорневаяСтрока - СтрокаДереваЗначений - ссылка на строку раннее инициализированного +// дерева ДеревоВарианта, соответствующую текущему элементу настройки. // Функция РасширеннаяИнформацияОНастройках(КомпоновщикНастроекКД, НастройкиОтчета, ОтчетОбъектИлиПолноеИмя, УсловияВывода = Неопределено) Экспорт НастройкиКД = КомпоновщикНастроекКД.Настройки; @@ -320,6 +592,11 @@ Информация.Вставить("ЕстьВложенныеПоля", Ложь); Информация.Вставить("ЕстьВложенныеСортировки", Ложь); + // Настройки группы элементов быстрых (выводимых на форму) настроек по умолчанию. + Информация.Вставить("СвойстваГруппЭлементов", СвойстваГруппыЭлементовФормы()); + // Коллекция для установки частных свойств групп элементов быстрых настроек. + Информация.Вставить("ГруппыЭлементов", Новый Соответствие); + Для Каждого ПользовательскаяНастройкаКД Из ПользовательскиеНастройкиКД.Элементы Цикл СвойстваНастройки = Информация.ПользовательскиеНастройки.Добавить(); СвойстваНастройки.ПользовательскаяНастройкаКД = ПользовательскаяНастройкаКД; @@ -328,6 +605,9 @@ СвойстваНастройки.ИдентификаторКД = ПользовательскиеНастройкиКД.ПолучитьИдентификаторПоОбъекту(ПользовательскаяНастройкаКД); СвойстваНастройки.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ПользовательскаяНастройкаКД)); Информация.Поиск.ПользовательскиеНастройки.Вставить(СвойстваНастройки.Идентификатор, СвойстваНастройки); + + // Положение заголовка по умолчанию. + СвойстваНастройки.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; КонецЦикла; СтрокаДерева = ЗарегистрироватьУзелДереваВарианта(Информация, НастройкиКД, НастройкиКД, Информация.ДеревоВарианта.Строки, "Отчет"); @@ -360,7 +640,7 @@ // Очистить дерево значений от циклических ссылок для освобождения памяти. // -Процедура ОчиститьДеревоЗначений(Знач Дерево) Экспорт +Процедура ОчиститьДеревоЗначений(Знач Дерево) СтрокиДерева = Дерево.Строки; ОчищаемыеКолонки = Новый Массив; @@ -688,6 +968,11 @@ Результат.Колонки.Добавить("ВыводитьФлажок", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("ВыводитьТолькоФлажок", Новый ОписаниеТипов("Булево")); + // Имя группы элементов, которой будет подчинена быстрая настройка. + Результат.Колонки.Добавить("ГруппаЭлементов", Новый ОписаниеТипов("Строка")); + // Свойство, определяющее поведение заголовка элемента быстрой настройки. + Результат.Колонки.Добавить("ПоложениеЗаголовка", Новый ОписаниеТипов("ПоложениеЗаголовкаЭлементаФормы")); + Результат.Колонки.Добавить("ТипЭлементов", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("ВыборГруппИЭлементов"); @@ -709,14 +994,14 @@ КонецФункции Функция ТаблицаСвязейПараметровВыбора() - ТаблицаСвязейПараметровВыбора = Новый ТаблицаЗначений; - ТаблицаСвязейПараметровВыбора.Колонки.Добавить("Ведущий"); - ТаблицаСвязейПараметровВыбора.Колонки.Добавить("ВедущийПолеКД"); - ТаблицаСвязейПараметровВыбора.Колонки.Добавить("Подчиненный"); - ТаблицаСвязейПараметровВыбора.Колонки.Добавить("ПодчиненныйИмяПараметра"); - ТаблицаСвязейПараметровВыбора.Колонки.Добавить("Действие"); + ТаблицаСвязей = Новый ТаблицаЗначений; + ТаблицаСвязей.Колонки.Добавить("Ведущий"); + ТаблицаСвязей.Колонки.Добавить("ВедущийПолеКД"); + ТаблицаСвязей.Колонки.Добавить("Подчиненный"); + ТаблицаСвязей.Колонки.Добавить("ПодчиненныйИмяПараметра"); + ТаблицаСвязей.Колонки.Добавить("Действие"); - Возврат ТаблицаСвязейПараметровВыбора; + Возврат ТаблицаСвязей; КонецФункции Функция ТаблицаСвязейОбъектовМетаданных(НастройкиОтчета, ОтчетОбъектИлиПолноеИмя) @@ -1005,7 +1290,7 @@ КонецЕсли; НастройкаВарианта.Идентификатор = Идентификатор + НастройкаВарианта.ИмяКоллекции + "_" + Строка(НастройкаВарианта.ИдентификаторКД); КонецЕсли; - НастройкаВарианта.ИдентификаторЭлемента = ОтчетыКлиентСервер.ПривестиИдентификаторКИмени(НастройкаВарианта.Идентификатор); + НастройкаВарианта.ИдентификаторЭлемента = ПривестиИдентификаторКИмени(НастройкаВарианта.Идентификатор); Если НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда НастройкаВарианта.ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(ЭлементКД.Параметр)); @@ -1064,7 +1349,7 @@ Или НастройкаВарианта.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда НастройкаВарианта.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; Иначе - НастройкаВарианта.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы(ДоступнаяНастройкаКД.ВыборГруппИЭлементов); + НастройкаВарианта.ВыборГруппИЭлементов = ПривестиЗначениеКТипуГруппыИЭлементы(ДоступнаяНастройкаКД.ВыборГруппИЭлементов); КонецЕсли; НастройкаВарианта.ОписаниеТипов = ДоступнаяНастройкаКД.ТипЗначения; @@ -1092,7 +1377,7 @@ НастройкаВарианта.ЗапросЗначенийВыбора = Новый Запрос; НастройкаВарианта.ЗначенияДляВыбора = Новый СписокЗначений; - ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(НастройкаВарианта.ОписаниеТипов, Истина); + ИнформацияОТипах = РасширенноеОписаниеТипов(НастройкаВарианта.ОписаниеТипов, Истина); ИнформацияОТипах.Вставить("СодержитСсылочныеТипы", Ложь); ИнформацияОТипах.Вставить("КоличествоСБыстрымВыбором", 0); ВсеТипыСБыстрымВыбором = ИнформацияОТипах.КоличествоТипов < 10 @@ -1180,7 +1465,7 @@ КонецЕсли; СтрокаСвязиПараметров = Информация.Связи.ПараметровВыбора.Добавить(); СтрокаСвязиПараметров.Подчиненный = НастройкаВарианта; - СтрокаСвязиПараметров.ПодчиненныйИмяПараметра = СтрокаСвязи.Имя; + СтрокаСвязиПараметров.ПодчиненныйИмяПараметра = СтрЗаменить(СтрокаСвязи.Имя, "@", ""); СтрокаСвязиПараметров.ВедущийПолеКД = СтрокаСвязи.Поле; СтрокаСвязиПараметров.Действие = СтрокаСвязи.ИзменениеЗначения; КонецЦикла; @@ -1388,6 +1673,90 @@ КонецЦикла; КонецПроцедуры +// Определяет свойства параметров вывода, влияющих на отображение заголовка, параметров данных и отборов: +// * Выводить заголовок; +// * Заголовок; +// * Выводить параметры данных; +// * Выводить отбор; +// +// Параметры: +// Контекст - Структура - сведения о варианте отчета и о идентификаторе его метаданных. +// Настройки - НастройкиКомпоновкиДанных - настройки, чьи параметры вывода устанавливаются. +// +Процедура ИнициализироватьПредопределенныеПараметрыВывода(Контекст, Настройки) Экспорт + Если Настройки = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыВывода = Настройки.ПараметрыВывода.Элементы; + + // Параметр Заголовок всегда доступен и только в форме настроек отчета. + Объект = ПараметрыВывода.Найти("TITLE"); + Объект.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; + Объект.ИдентификаторПользовательскойНастройки = ""; + + УстановитьЗаголовокОтчетаПоУмолчанию(Объект, Контекст); + + // Параметр ВыводитьЗаголовок всегда недоступный. Свойства зависят от параметра Заголовок. + СвязанныйОбъект = ПараметрыВывода.Найти("TITLEOUTPUT"); + СвязанныйОбъект.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + СвязанныйОбъект.ИдентификаторПользовательскойНастройки = ""; + СвязанныйОбъект.Использование = Истина; + + Если Объект.Использование Тогда + СвязанныйОбъект.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто; + Иначе + СвязанныйОбъект.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить; + КонецЕсли; + + // Параметр ВыводитьПараметры всегда доступен и только в форме настроек отчета. + Объект = ПараметрыВывода.Найти("DATAPARAMETERSOUTPUT"); + Объект.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; + Объект.ИдентификаторПользовательскойНастройки = ""; + Объект.Использование = Истина; + + Если Объект.Значение <> ТипВыводаТекстаКомпоновкиДанных.НеВыводить Тогда + Объект.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто; + КонецЕсли; + + // Параметр ВыводитьОтбор всегда недоступный. Значения свойств те же, что и у параметра ВыводитьПараметрыДанных. + СвязанныйОбъект = ПараметрыВывода.Найти("FILTEROUTPUT"); + ЗаполнитьЗначенияСвойств(СвязанныйОбъект, Объект, "Использование, Значение"); + СвязанныйОбъект.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + СвязанныйОбъект.ИдентификаторПользовательскойНастройки = ""; +КонецПроцедуры + +Процедура УстановитьЗаголовокОтчетаПоУмолчанию(Заголовок, Контекст) + Если ЗначениеЗаполнено(Заголовок.Значение) Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "Внешний", Ложь) Тогда + Заголовок.Значение = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "Наименование", ""); + Возврат; + КонецЕсли; + + Вариант = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "ВариантСсылка"); + Если ЗначениеЗаполнено(Вариант) Тогда + Заголовок.Значение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Вариант, "Наименование"); + КонецЕсли; + + Если ЗначениеЗаполнено(Заголовок.Значение) + И Заголовок.Значение <> "Основной" Тогда + Возврат; + КонецЕсли; + + ИдентификаторОтчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "ОтчетСсылка"); + Если ИдентификаторОтчета = Неопределено Тогда + Возврат; + КонецЕсли; + + МетаданныеОтчета = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИдентификаторОтчета); + Если МетаданныеОтчета <> Неопределено Тогда + Заголовок.Значение = МетаданныеОтчета.Синоним; + КонецЕсли; +КонецПроцедуры + Процедура УстановитьФиксированныеОтборы(СтруктураОтборов, НастройкиКД, НастройкиОтчета) Экспорт Если ТипЗнч(НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Или СтруктураОтборов = Неопределено @@ -1439,7 +1808,7 @@ Если Не ЗначениеЗаполнено(СвойстваНастройки.Идентификатор) Тогда Возврат СвойстваНастройки; КонецЕсли; - СвойстваНастройки.ИдентификаторЭлемента = ОтчетыКлиентСервер.ПривестиИдентификаторКИмени(СвойстваНастройки.Идентификатор); + СвойстваНастройки.ИдентификаторЭлемента = ПривестиИдентификаторКИмени(СвойстваНастройки.Идентификатор); Если НастройкаВарианта <> Неопределено Тогда Если НастройкаВарианта.Владелец <> Неопределено Тогда @@ -1728,648 +2097,1664 @@ КонецПроцедуры +// Собирает статистику по количеству пользовательских настроек в разрезе режимов отображения. +// +// Параметры: +// КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - актуальный компоновщик. +// +// Возвращаемое значение: +// Структура - количество пользовательских настроек в разрезе режимов отображения: +// - БыстрогоДоступа - количество настроек с режимом отображения БыстрыйДоступ или Авто; +// - Обычных - количество настроек с режимом отображения Обычный; +// - Итог - общее количество доступных настроек. +// +Функция КоличествоДоступныхНастроек(КомпоновщикНастроек) Экспорт + ДоступныеНастройки = Новый Структура; + ДоступныеНастройки.Вставить("БыстрогоДоступа", 0); + ДоступныеНастройки.Вставить("Обычных", 0); + ДоступныеНастройки.Вставить("Итог", 0); + + ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки; + Для Каждого ЭлементПользовательскойНастройки Из ПользовательскиеНастройки.Элементы Цикл + ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору( + КомпоновщикНастроек.Настройки, + ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,, + ПользовательскиеНастройки); + + РежимОтображения = ?(ЭлементНастройки = Неопределено, + ЭлементПользовательскойНастройки.РежимОтображения, ЭлементНастройки.РежимОтображения); + + Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто + Или РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + ДоступныеНастройки.БыстрогоДоступа = ДоступныеНастройки.БыстрогоДоступа + 1; + ИначеЕсли РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда + ДоступныеНастройки.Обычных = ДоступныеНастройки.Обычных + 1; + КонецЕсли; + КонецЦикла; + + ДоступныеНастройки.Итог = ДоступныеНастройки.БыстрогоДоступа + ДоступныеНастройки.Обычных; + + Возврат ДоступныеНастройки; +КонецФункции + +Функция СвойстваЭлементаПользовательскихНастроек(КомпоновщикНастроек, ЭлементПользовательскойНастройки, ЭлементНастройки, ОписаниеНастройки) + Свойства = ПалитраСвойствЭлементаПользовательскихНастроек(); + + Свойства.ПользовательскаяНастройкаКД = ЭлементПользовательскойНастройки; + Свойства.ЭлементКД = ЭлементНастройки; + Свойства.ДоступнаяНастройкаКД = ОписаниеНастройки; + + Свойства.Идентификатор = ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки; + Свойства.ИдентификаторКД = КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьИдентификаторПоОбъекту( + ЭлементПользовательскойНастройки); + Свойства.ИдентификаторЭлемента = СтрЗаменить( + ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки, "-", ""); + + ТипЭлементаНастройки = ТипЗнч(ЭлементНастройки); + Если ТипЭлементаНастройки = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Свойства.ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(ЭлементНастройки.Параметр)); + Свойства.Значение = ЭлементНастройки.Значение; + ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Свойства.ПолеКД = ЭлементНастройки.ЛевоеЗначение; + Свойства.Значение = ЭлементНастройки.ПравоеЗначение; + КонецЕсли; + + Свойства.Тип = ТипНастройкиСтрокой(ТипЭлементаНастройки); + + Если ОписаниеНастройки = Неопределено Тогда + Возврат Свойства; + КонецЕсли; + + Свойства.ОписаниеТипов = ОписаниеНастройки.ТипЗначения; + + Если ОписаниеНастройки.ДоступныеЗначения <> Неопределено Тогда + Свойства.ЗначенияДляВыбора = ОписаниеНастройки.ДоступныеЗначения; + КонецЕсли; + + Возврат Свойства; +КонецФункции + +Функция ПалитраСвойствЭлементаПользовательскихНастроек() + Свойства = Новый Структура; + Свойства.Вставить("БыстрыйВыбор", Ложь); + Свойства.Вставить("ВводСписком", Ложь); + Свойства.Вставить("ВидСравнения", ВидСравненияКомпоновкиДанных.Равно); + Свойства.Вставить("Владелец", Неопределено); + Свойства.Вставить("ВыборГруппИЭлементов", ГруппыИЭлементы.Авто); + Свойства.Вставить("ВыводРазрешен", Истина); + Свойства.Вставить("ВыводитьВГруппеОсновныхНастроек", Ложь); + Свойства.Вставить("ВыводитьТолькоФлажок", Ложь); + Свойства.Вставить("ВыводитьФлажок", Истина); + Свойства.Вставить("Глобальная", Истина); + Свойства.Вставить("ДоступнаяНастройкаКД", Неопределено); + Свойства.Вставить("ЗапросЗначенийВыбора", Новый Запрос); + Свойства.Вставить("Значение", Неопределено); + Свойства.Вставить("ЗначенияДляВыбора", Новый СписокЗначений); + Свойства.Вставить("Идентификатор", ""); + Свойства.Вставить("ИдентификаторКД", Неопределено); + Свойства.Вставить("ИдентификаторЭлемента", ""); + Свойства.Вставить("ИмяКоллекции", ""); + Свойства.Вставить("ИнформацияОТипах", Новый Структура); + Свойства.Вставить("ОграничениеТипа", Неопределено); + Свойства.Вставить("ОграничиватьВыборУказаннымиЗначениями", Ложь); + Свойства.Вставить("ОписаниеТипов", Новый ОписаниеТипов("Неопределено")); + Свойства.Вставить("ОтмеченныеЗначения", Неопределено); + Свойства.Вставить("ПараметрыВыбора", Новый Массив); + Свойства.Вставить("Подтип", ""); + Свойства.Вставить("ПолеКД", Неопределено); + Свойства.Вставить("ПользовательскаяНастройка", Неопределено); + Свойства.Вставить("ПользовательскаяНастройкаКД", Неопределено); + Свойства.Вставить("Представление", ""); + Свойства.Вставить("ПредставлениеПоУмолчанию", ""); + Свойства.Вставить("Родитель", Неопределено); + Свойства.Вставить("СвязиПараметровВыбора", Новый Массив); + Свойства.Вставить("СвязиПоМетаданным", Новый Массив); + Свойства.Вставить("СвязьПоТипу", Неопределено); + Свойства.Вставить("СобытиеПриИзменении", Ложь); + Свойства.Вставить("Состояние", ""); + Свойства.Вставить("СписокЗначенийПереопределен", Ложь); + Свойства.Вставить("СтрокаДерева", Неопределено); + Свойства.Вставить("Строки", Неопределено); + Свойства.Вставить("Тип", ""); + Свойства.Вставить("ФормаВыбора", ""); + Свойства.Вставить("Ширина", 0); + Свойства.Вставить("ЭлементКД", Неопределено); + + Возврат Свойства; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные -Функция ОписанияТиповСовпадают(ОписаниеТипов1, ОписаниеТипов2) Экспорт - Если ОписаниеТипов1 = Неопределено Или ОписаниеТипов2 = Неопределено Тогда - Возврат Ложь; +// Создает и возвращает экземпляр отчета по полному имени объекта метаданных. +// +// Параметры: +// ПолноеИмя - Строка - полное имя объекта метаданных. Пример: "Отчет.БизнесПроцессы". +// +// Возвращаемое значение: +// ОтчетОбъект - экземпляр отчета. +// +Функция ОтчетОбъект(Идентификатор) Экспорт + ПолноеИмя = Идентификатор; + + Если ТипЗнч(Идентификатор) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + ПолноеИмя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Идентификатор, "ПолноеИмя"); КонецЕсли; - Возврат ОписаниеТипов1 = ОписаниеТипов2 - Или ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов1) = ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов2); -КонецФункции - -Функция ОтчетОбъект(ОтчетОбъектИлиПолноеИмя) Экспорт - Если ТипЗнч(ОтчетОбъектИлиПолноеИмя) = Тип("Строка") Тогда - ОтчетОбъектИлиПолноеИмя = ОбщегоНазначения.ОбъектПоПолномуИмени(ОтчетОбъектИлиПолноеИмя); + ОписаниеОбъекта = СтрРазделить(ПолноеИмя, "."); + + Если ОписаниеОбъекта.Количество() >= 2 Тогда + Вид = ВРег(ОписаниеОбъекта[0]); + Имя = ОписаниеОбъекта[1]; + Иначе + ВызватьИсключение СтрЗаменить(НСтр("ru = 'Некорректное полное имя отчета ""%1"".'"), "%1", ПолноеИмя); + КонецЕсли; + + Если Вид = "ОТЧЕТ" Тогда + Возврат Отчеты[Имя].Создать(); + ИначеЕсли Вид = "ВНЕШНИЙОТЧЕТ" Тогда + Возврат ВнешниеОтчеты.Создать(Имя); // АПК:553 Для внешних отчетов, не подключенных к подсистеме "Дополнительные отчеты и обработки". Вызов безопасен, так как проверки безопасности для внешнего отчета выполнены ранее при подключении. + Иначе + ВызватьИсключение СтрЗаменить(НСтр("ru = '""%1"" не является отчетом.'"), "%1", ПолноеИмя); КонецЕсли; - Возврат ОтчетОбъектИлиПолноеИмя; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Вывод +// Обновление элементов формы пользовательских настроек -Процедура ВывестиЭлементыНастройки(Форма, Элементы, СвойстваНастройки, ГруппаВывода, Прочее) Экспорт - ЭлементВывода = Новый Структура("Размер, ИмяЭлемента1, ИмяЭлемента2"); - ЭлементВывода.Размер = 1; +Функция СвойстваЭлементовФормыНастроек(ТипФормы, КомпоновщикНастроек, ДополнительныеПараметры) + #Область ПодготовкаСтруктуры - ШаблонИмениЭлемента = СвойстваНастройки.Тип + "_%1_" + СвойстваНастройки.ИдентификаторЭлемента; + СвойстваЭлементов = Новый Структура("Группы, Поля"); + СвойстваЭлементов.Группы = Новый Структура; - // Группа требуется для вывода некоторых типов полей. - Если СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" - Или СвойстваНастройки.ТипЭлементов = "СписокСПодбором" Тогда - ГруппаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Группа"); - - Группа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.НеОтсортированное); - Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; - Группа.Отображение = ОтображениеОбычнойГруппы.Нет; - Группа.Заголовок = СвойстваНастройки.Представление; - Группа.ОтображатьЗаголовок = Ложь; + ОписаниеСтроки = Новый ОписаниеТипов("Строка"); + ОписаниеЧисла = Новый ОписаниеТипов("Число"); + + Поля = Новый ТаблицаЗначений; + Поля.Колонки.Добавить("ИндексНастройки", ОписаниеЧисла); + Поля.Колонки.Добавить("ИдентификаторНастройки", ОписаниеСтроки); + Поля.Колонки.Добавить("Настройки"); + Поля.Колонки.Добавить("ЭлементНастройки"); + Поля.Колонки.Добавить("ОписаниеНастройки"); + Поля.Колонки.Добавить("Представление", ОписаниеСтроки); + Поля.Колонки.Добавить("ИдентификаторГруппы", ОписаниеСтроки); + Поля.Колонки.Добавить("ПоложениеЗаголовка", Новый ОписаниеТипов("ПоложениеЗаголовкаЭлементаФормы")); + Поля.Колонки.Добавить("РастягиватьПоГоризонтали"); + Поля.Колонки.Добавить("Ширина", ОписаниеЧисла); + + ДоступныеРежимы = Новый Массив; + ДоступныеРежимы.Добавить(РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + Если ТипФормы = ТипФормыОтчета.Настройка Тогда + ДоступныеРежимы.Добавить(РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); КонецЕсли; - // Условие. - ВыводитьУсловие = (СвойстваНастройки.Тип = "ЭлементОтбора" - И СвойстваНастройки.ТипЭлементов <> "СтандартныйПериод" - И СвойстваНастройки.ТипЭлементов <> "ТолькоФлажокЗначения" - И Не СвойстваНастройки.ВыводитьТолькоФлажок); + НедоступныеЭлементыСтруктуры = Новый Соответствие; + НедоступныеЭлементыСтруктуры.Вставить(Тип("ГруппировкаКомпоновкиДанных"), ТипФормыОтчета.Настройка); + НедоступныеЭлементыСтруктуры.Вставить(Тип("ГруппировкаТаблицыКомпоновкиДанных"), ТипФормыОтчета.Настройка); + НедоступныеЭлементыСтруктуры.Вставить(Тип("ГруппировкаДиаграммыКомпоновкиДанных"), ТипФормыОтчета.Настройка); + НедоступныеЭлементыСтруктуры.Вставить(Тип("ТаблицаКомпоновкиДанных"), ТипФормыОтчета.Настройка); + НедоступныеЭлементыСтруктуры.Вставить(Тип("ДиаграммаКомпоновкиДанных"), ТипФормыОтчета.Настройка); - Если ВыводитьУсловие Тогда - Прочее.ЕстьОтборыСУсловиями = Истина; - - КомандаВидСравненияИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВидСравнения"); - КомандаВидСравнения = Форма.Команды.Добавить(КомандаВидСравненияИмя); - КомандаВидСравнения.Действие = "Подключаемый_ИзменитьВидСравнения"; - КомандаВидСравнения.Заголовок = НСтр("ru = 'Изменить условие отбора...'"); - КомандаВидСравнения.Подсказка = КомандаВидСравнения.Заголовок; // Для платформы. - КомандаВидСравнения.Отображение = ОтображениеКнопки.Текст; - КомандаВидСравнения.Картинка = БиблиотекаКартинок.ВидСравнения; - КонецЕсли; + СинхронизируемыеСвойства = Новый Соответствие; + СинхронизируемыеСвойства.Вставить(Тип("ЭлементОтбораКомпоновкиДанных"), "ЛевоеЗначение, Представление"); + СинхронизируемыеСвойства.Вставить(Тип("ЭлементУсловногоОформленияКомпоновкиДанных"), "Представление"); - // Флажок использования. - Если СвойстваНастройки.ВыводитьФлажок Тогда - ФлажокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Использование"); + #КонецОбласти + + #Область ЗаполнениеСтруктуры + + Сведения = СведенияОПользовательскихНастройках(КомпоновщикНастроек.Настройки); + ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки; + Для Каждого ЭлементПользовательскойНастройки Из ПользовательскиеНастройки.Элементы Цикл + НайденныеСведения = Сведения[ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки]; + ЭлементНастройки = НайденныеСведения.ЭлементНастройки; - Если СвойстваНастройки.ТипЭлементов = "СписокСПодбором" Тогда - ГруппаДляФлажка = Группа; - ЭлементВывода.ИмяЭлемента1 = ГруппаИмя; - Иначе - ГруппаДляФлажка = Элементы.НеОтсортированное; - ЭлементВывода.ИмяЭлемента1 = ФлажокИмя; + Если ЭлементНастройки = Неопределено + Или НедоступныеЭлементыСтруктуры.Получить(ТипЗнч(ЭлементНастройки)) = ТипФормы + Или ДоступныеРежимы.Найти(ЭлементНастройки.РежимОтображения) = Неопределено Тогда + Продолжить; КонецЕсли; - ЗаголовокФлажка = СвойстваНастройки.Представление; - Если ВыводитьУсловие - И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.Равно - И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.ВСписке - И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии - И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.Содержит - И СвойстваНастройки.ТипЭлементов <> "УсловиеВРежимеПросмотра" Тогда - ЗаголовокФлажка = ЗаголовокФлажка + " (" + НРег(Строка(СвойстваНастройки.ВидСравнения)) + ")"; - КонецЕсли; - Если Не СвойстваНастройки.ВыводитьТолькоФлажок Тогда - ЗаголовокФлажка = ЗаголовокФлажка + ":"; + ТипЭлемента = ТипЗнч(ЭлементНастройки); + Если ТипЭлемента = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") + И Не ЗначениеЗаполнено(ЭлементНастройки.Представление) Тогда + ЭлементНастройки.Представление = ОтчетыКлиентСервер.ПредставлениеЭлементаУсловногоОформления( + ЭлементНастройки, Неопределено, ""); КонецЕсли; - Флажок = Элементы.Добавить(ФлажокИмя, Тип("ПолеФормы"), ГруппаДляФлажка); - Флажок.Вид = ВидПоляФормы.ПолеФлажка; - Флажок.Заголовок = ЗаголовокФлажка; - Если СтрДлина(ЗаголовокФлажка) > 40 Тогда // Если заголовок существенно длиннее остальных заголовков, переносим его. - Флажок.ВысотаЗаголовка = 2; - КонецЕсли; - Флажок.ПутьКДанным = Прочее.ПутьККомпоновщику + ".ПользовательскиеНастройки[" + СвойстваНастройки.ИндексВКоллекции + "].Использование"; - Флажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; - Флажок.УстановитьДействие("ПриИзменении", "Подключаемый_ФлажокИспользование_ПриИзменении"); - - Если ВыводитьУсловие Тогда - КнопкаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВидСравнения_Использование"); - КнопкаВидСравнения = Элементы.Добавить(КнопкаИмя, Тип("КнопкаФормы"), Флажок.КонтекстноеМеню); - КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; - КонецЕсли; - КонецЕсли; - - Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" - Или СвойстваНастройки.Тип = "ЭлементОтбора" Тогда - - Если СвойстваНастройки.ВводСписком Тогда - СвойстваНастройки.ОтмеченныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(СвойстваНастройки.Значение); + Свойства = СинхронизируемыеСвойства[ТипЭлемента]; + Если Свойства <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЭлементПользовательскойНастройки, ЭлементНастройки, Свойства); КонецЕсли; - // Сохранение параметров выбора настройки в дополнительных свойствах пользовательских настроек. - НастройкиЭлемента = Новый Структура("Представление, ВыводитьФлажок, - |ВводСписком, ОписаниеТипов, ПараметрыВыбора, ЗначенияДляВыбора, ЗначенияДляВыбораЗаполнены, - |БыстрыйВыбор, ОграничиватьВыборУказаннымиЗначениями, ВыборГруппИЭлементов, ФормаВыбора"); - НастройкиЭлемента.ФормаВыбора = СвойстваНастройки.ДоступнаяНастройкаКД.ФормаВыбора; - НастройкиЭлемента.ЗначенияДляВыбораЗаполнены = Ложь; - ЗаполнитьЗначенияСвойств(НастройкиЭлемента, СвойстваНастройки); - Прочее.ДополнительныеНастройкиЭлементов.Вставить(СвойстваНастройки.ИдентификаторЭлемента, НастройкиЭлемента); - КонецЕсли; - - // Поля для значений. - Если СвойстваНастройки.ТипЭлементов <> "" Тогда + Поле = Поля.Добавить(); + Поле.ИдентификаторНастройки = ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки; + Поле.ИндексНастройки = ПользовательскиеНастройки.Элементы.Индекс(ЭлементПользовательскойНастройки); + Поле.Настройки = НайденныеСведения.Настройки; + Поле.ЭлементНастройки = ЭлементНастройки; + Поле.ОписаниеНастройки = НайденныеСведения.ОписаниеНастройки; + Поле.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; - ИнформацияОТипах = СвойстваНастройки.ИнформацияОТипах; - - //////////////////////////////////////////////////////////////////////////////// - // ВЫВОД. - - ЗначениеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Значение"); - - Если СвойстваНастройки.ТипЭлементов = "ТолькоФлажокЗначения" Тогда - - БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ЗначениеИмя, СвойстваНастройки.ОписаниеТипов); - - ЭлементВывода.ИмяЭлемента1 = ЗначениеИмя; - - ПолеФлажка = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); - ПолеФлажка.Вид = ВидПоляФормы.ПолеФлажка; - ПолеФлажка.Заголовок = СвойстваНастройки.Представление; - Если СтрДлина(СвойстваНастройки.Представление) > 40 Тогда // Если заголовок существенно длиннее остальных заголовков, переносим его. - ПолеФлажка.ВысотаЗаголовка = 2; + Если НедоступныеЭлементыСтруктуры.Получить(ТипЗнч(ЭлементНастройки)) <> Неопределено Тогда + Представление = ЭлементНастройки.ПараметрыВывода.Элементы.Найти("TITLE"); + Если Представление <> Неопределено + И ЗначениеЗаполнено(Представление.Значение) Тогда + Поле.Представление = Представление.Значение; КонецЕсли; - ПолеФлажка.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; - ПолеФлажка.УстановитьДействие("ПриИзменении", "Подключаемый_ФлажокЗначения_ПриИзменении"); - - Если ВыводитьУсловие Тогда - КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ПолеФлажка.КонтекстноеМеню); - КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; - КонецЕсли; - - Прочее.ДобавленныеПоляВвода.Вставить(ЗначениеИмя, СвойстваНастройки.Значение); - - ИначеЕсли СвойстваНастройки.ТипЭлементов = "УсловиеВРежимеПросмотра" Тогда - - ЭлементВывода.ИмяЭлемента2 = ЗначениеИмя; - - ПолеВвода = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); - ПолеВвода.Вид = ВидПоляФормы.ПолеВвода; - ПолеВвода.Заголовок = СвойстваНастройки.Представление; - ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - ПолеВвода.ТолькоПросмотр = Истина; - ПолеВвода.ПутьКДанным = Прочее.ПутьККомпоновщику + ".ПользовательскиеНастройки[" + СвойстваНастройки.ИндексВКоллекции + "].ВидСравнения"; - ПолеВвода.УстановитьДействие("НачалоВыбора", "Подключаемый_ВидСравнения_НачалоВыбора"); - - Если ВыводитьУсловие Тогда - КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ПолеВвода.КонтекстноеМеню); - КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; - КонецЕсли; - - ИначеЕсли СвойстваНастройки.ТипЭлементов = "СвязьСКомпоновщиком" Тогда - - Прочее.ИменаОсновныхРеквизитовФормы.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ЗначениеИмя); - Прочее.ИменаЭлементовДляУстановкиСвязей.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ЗначениеИмя); - - ЭлементВывода.ИмяЭлемента2 = ЗначениеИмя; - - ПолеВвода = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); - ПолеВвода.Вид = ВидПоляФормы.ПолеВвода; - ПолеВвода.Заголовок = СвойстваНастройки.Представление; - ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - Если СтрДлина(СвойстваНастройки.Представление) > 40 Тогда // Если заголовок существенно длиннее остальных заголовков, переносим его. - ПолеВвода.ВысотаЗаголовка = 2; - КонецЕсли; - - // Связь с СКД. - ПолеВвода.ПутьКДанным = Прочее.ПутьККомпоновщику + ".ПользовательскиеНастройки[" + СвойстваНастройки.ИндексВКоллекции + "].Значение"; - - Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" - Или СвойстваНастройки.Тип = "ЭлементОтбора" Тогда - - ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ПолеВвода_ПриИзменении"); - - Если СвойстваНастройки.ВводСписком Тогда - ПолеВвода.УстановитьДействие("НачалоВыбора", "Подключаемый_СписокКомпоновщика_НачалоВыбора"); - КонецЕсли; - - ПолеВвода.БыстрыйВыбор = СвойстваНастройки.БыстрыйВыбор; - ЗаполнитьЗначенияСвойств(ПолеВвода, СвойстваНастройки.ДоступнаяНастройкаКД, "Маска, ФормаВыбора, ФорматРедактирования"); - - ВывозитьКнопкуОчистки = Истина; - Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда - ПолеВвода.АвтоОтметкаНезаполненного = СвойстваНастройки.ДоступнаяНастройкаКД.ЗапрещатьНезаполненныеЗначения; - ВывозитьКнопкуОчистки = СвойстваНастройки.ДоступнаяНастройкаКД.Использование <> ИспользованиеПараметраКомпоновкиДанных.Всегда; - КонецЕсли; - - ПолеВвода.ВыборГруппИЭлементов = СвойстваНастройки.ВыборГруппИЭлементов; - - // Поля ввода следующих типов не растягиваются по горизонтали и не имеют кнопки очистки: - // Дата, Булево, Число, Тип. - ПолеВвода.КнопкаОткрытия = Ложь; - ПолеВвода.КнопкаРегулирования = Ложь; - ПолеВвода.КнопкаОчистки = ИнформацияОТипах.СодержитОбъектныеТипы И ВывозитьКнопкуОчистки; - ПолеВвода.РастягиватьПоГоризонтали = ИнформацияОТипах.СодержитОбъектныеТипы; - - Если Не СвойстваНастройки.ВводСписком Тогда - Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями - И СвойстваНастройки.ЗначенияДляВыбора.Количество() > 0 Тогда - Для Каждого ЭлементСпискаВФорме Из СвойстваНастройки.ЗначенияДляВыбора Цикл - ЗаполнитьЗначенияСвойств(ПолеВвода.СписокВыбора.Добавить(), ЭлементСпискаВФорме); - КонецЦикла; - ПолеВвода.РежимВыбораИзСписка = Истина; - ПолеВвода.КнопкаСоздания = Ложь; - ПолеВвода.КнопкаВыбора = Ложь; - ПолеВвода.КнопкаВыпадающегоСписка = Истина; - ПолеВвода.РастягиватьПоГоризонтали = Истина; - ИначеЕсли СвойстваНастройки.НастройкаВарианта.СвязиПараметровВыбора.Количество() > 0 - Или СвойстваНастройки.НастройкаВарианта.СвязиПоМетаданным.Количество() > 0 Тогда - // Когда есть отключаемые связи "ПоМетаданным" или "ПараметровВыбора" от подчиненного, - // тогда для выбора используется прикладная логика. - ПолеВвода.УстановитьДействие("НачалоВыбора", "Подключаемый_ЗначениеКомпоновщика_НачалоВыбора"); - КонецЕсли; - // Для платформы (переопределение доступных значений на клиенте). - Если СвойстваНастройки.НастройкаВарианта.СписокЗначенийПереопределен Тогда - РезультатКлиента = Прочее.ПараметрыЗаполнения.Результат; - СвоиСпискиВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатКлиента, "СвоиСпискиВыбора"); - Если СвоиСпискиВыбора = Неопределено Тогда - СвоиСпискиВыбора = Новый Массив; - РезультатКлиента.Вставить("СвоиСпискиВыбора", СвоиСпискиВыбора); - КонецЕсли; - Если СвоиСпискиВыбора.Найти(СвойстваНастройки.ИдентификаторЭлемента) = Неопределено Тогда - СвоиСпискиВыбора.Добавить(СвойстваНастройки.ИдентификаторЭлемента); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - // Увеличение размера поля типа 'Дата' чтобы вмещались варианты выбора 'СтандартнаяДатаНачала'. - Если ПолеВвода.РастягиватьПоГоризонтали = Ложь И ИнформацияОТипах.СодержитТипДата И ИнформацияОТипах.КоличествоТипов = 1 Тогда - ПолеВвода.РастягиватьПоГоризонтали = Истина; - ПолеВвода.АвтоМаксимальнаяШирина = Ложь; - ПолеВвода.МаксимальнаяШирина = 25; - КонецЕсли; - - // Условие. - Если ВыводитьУсловие Тогда - КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ПолеВвода.КонтекстноеМеню); - КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; - КонецЕсли; - - КонецЕсли; - - ИначеЕсли СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" Тогда - - Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; - - ЭлементВывода.Размер = 1; - ЭлементВывода.ИмяЭлемента2 = ГруппаИмя; - - ПериодНачалоИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Начало"); - ПериодОкончаниеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Окончание"); - ТиреИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Тире"); - КнопкаВыбораИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "КнопкаВыбора"); - - // Реквизиты. - БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ЗначениеИмя, "СтандартныйПериод"); - - // Начало произвольного периода. - ПериодНачало = Элементы.Добавить(ПериодНачалоИмя, Тип("ПолеФормы"), Группа); - ПериодНачало.Вид = ВидПоляФормы.ПолеВвода; - ПериодНачало.Ширина = 9; - ПериодНачало.РастягиватьПоГоризонтали = Ложь; - ПериодНачало.КнопкаВыбора = Истина; - ПериодНачало.КнопкаОткрытия = Ложь; - ПериодНачало.КнопкаОчистки = Ложь; - ПериодНачало.КнопкаРегулирования = Ложь; - ПериодНачало.РедактированиеТекста = Истина; - ПериодНачало.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - ПериодНачало.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении"); - - Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда - ПериодНачало.АвтоОтметкаНезаполненного = СвойстваНастройки.ДоступнаяНастройкаКД.ЗапрещатьНезаполненныеЗначения; - КонецЕсли; - - Тире = Элементы.Добавить(ТиреИмя, Тип("ДекорацияФормы"), Группа); - Тире.Вид = ВидДекорацииФормы.Надпись; - Тире.Заголовок = Символ(8211); // Среднее тире (en dash). - - // Окончание произвольного периода. - ПериодОкончание = Элементы.Добавить(ПериодОкончаниеИмя, Тип("ПолеФормы"), Группа); - ПериодОкончание.Вид = ВидПоляФормы.ПолеВвода; - ЗаполнитьЗначенияСвойств(ПериодОкончание, ПериодНачало, "РастягиватьПоГоризонтали, Ширина, ПоложениеЗаголовка, - |РедактированиеТекста, КнопкаВыбора, КнопкаОткрытия, КнопкаОчистки, КнопкаРегулирования, АвтоОтметкаНезаполненного"); - ПериодОкончание.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении"); - - // Кнопка выбора. - КомандаВыбора = Форма.Команды.Добавить(КнопкаВыбораИмя); - КомандаВыбора.Действие = "Подключаемый_ВыбратьПериод"; - КомандаВыбора.Заголовок = НСтр("ru = 'Выбрать период...'"); - КомандаВыбора.Подсказка = КомандаВыбора.Заголовок; // Для платформы. - КомандаВыбора.Отображение = ОтображениеКнопки.Картинка; - КомандаВыбора.Картинка = БиблиотекаКартинок.Выбрать; - - КнопкаВыбора = Элементы.Добавить(КнопкаВыбораИмя, Тип("КнопкаФормы"), Группа); - КнопкаВыбора.ИмяКоманды = КнопкаВыбораИмя; - - Дополнительно = Новый Структура; - Дополнительно.Вставить("ЗначениеИмя", ЗначениеИмя); - Дополнительно.Вставить("ПериодНачалоИмя", ПериодНачалоИмя); - Дополнительно.Вставить("ПериодОкончаниеИмя", ПериодОкончаниеИмя); - СвойстваНастройки.Дополнительно = Дополнительно; - Прочее.ДобавленныеСтандартныеПериоды.Добавить(СвойстваНастройки); - - ИначеЕсли СвойстваНастройки.ТипЭлементов = "СписокСПодбором" Тогда - - Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; - - ЭлементВывода.Размер = 5; - ЭлементВывода.ИмяЭлемента1 = ГруппаИмя; - - ГруппаЗаголовокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ГруппаЗаголовка"); - ДекорацияИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Декорация"); - ТаблицаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "СписокЗначений"); - ГруппаКолонокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ГруппаКолонок"); - КолонкаИспользованиеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Колонка_Использование"); - КолонкаЗначениеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Колонка_Значение"); - КнопкаПодборИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Подбор"); - КнопкаВставитьИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВставитьИзБуфера"); - - Прочее.ИменаОсновныхРеквизитовФормы.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ТаблицаИмя); - Прочее.ИменаЭлементовДляУстановкиСвязей.Вставить(СвойстваНастройки.ИдентификаторЭлемента, КолонкаЗначениеИмя); - - Если Не СвойстваНастройки.ВыводитьФлажок Или Не СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - - // Группа-строка для заголовка и командной панели таблицы. - ГруппаЗаголовокТаблицы = Элементы.Добавить(ГруппаЗаголовокИмя, Тип("ГруппаФормы"), Группа); - ГруппаЗаголовокТаблицы.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаЗаголовокТаблицы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; - ГруппаЗаголовокТаблицы.Отображение = ОтображениеОбычнойГруппы.Нет; - ГруппаЗаголовокТаблицы.ОтображатьЗаголовок = Ложь; - - // Флажок уже создан. - Если СвойстваНастройки.ВыводитьФлажок Тогда - Элементы.Переместить(Флажок, ГруппаЗаголовокТаблицы); - КонецЕсли; - - // Заголовок / Пустая декорация. - ПустаяДекорация = Элементы.Добавить(ДекорацияИмя, Тип("ДекорацияФормы"), ГруппаЗаголовокТаблицы); - ПустаяДекорация.Вид = ВидДекорацииФормы.Надпись; - ПустаяДекорация.Заголовок = ?(СвойстваНастройки.ВыводитьФлажок, " ", СвойстваНастройки.Представление + ":"); - ПустаяДекорация.АвтоМаксимальнаяШирина = Ложь; - ПустаяДекорация.РастягиватьПоГоризонтали = Истина; - - // Кнопки. - Если Не СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - Если ИнформацияОТипах.СодержитСсылочныеТипы Тогда - КомандаПодбор = Форма.Команды.Добавить(КнопкаПодборИмя); - КомандаПодбор.Действие = "Подключаемый_СписокСПодбором_Подбор"; - КомандаПодбор.Заголовок = НСтр("ru = 'Подбор'"); - Иначе - КомандаПодбор = Форма.Команды.Добавить(КнопкаПодборИмя); - КомандаПодбор.Действие = "Подключаемый_СписокСПодбором_Добавить"; - КомандаПодбор.Заголовок = НСтр("ru = 'Добавить'"); - КомандаПодбор.Картинка = БиблиотекаКартинок.СоздатьЭлементСписка; - КонецЕсли; - - КнопкаПодбор = Элементы.Добавить(КнопкаПодборИмя, Тип("КнопкаФормы"), ГруппаЗаголовокТаблицы); - КнопкаПодбор.ИмяКоманды = КнопкаПодборИмя; - КнопкаПодбор.Вид = ВидКнопкиФормы.Гиперссылка; - КнопкаПодбор.Отображение = ОтображениеКнопки.Текст; - - Если СвойстваНастройки.ИнформацияОТипах.СодержитСсылочныеТипы И Прочее.ЕстьЗагрузкаДанныхИзФайла Тогда - КомандаВставить = Форма.Команды.Добавить(КнопкаВставитьИмя); - КомандаВставить.Действие = "Подключаемый_СписокСПодбором_ВставитьИзБуфера"; - КомандаВставить.Заголовок = НСтр("ru = 'Вставить из буфера обмена...'"); - КомандаВставить.Подсказка = КомандаВставить.Заголовок; // Для платформы. - КомандаВставить.Картинка = БиблиотекаКартинок.ВставитьИзБуфераОбмена; - - КнопкаВставить = Элементы.Добавить(КнопкаВставитьИмя, Тип("КнопкаФормы"), ГруппаЗаголовокТаблицы); - КнопкаВставить.ИмяКоманды = КнопкаВставитьИмя; - КнопкаВставить.Вид = ВидКнопкиФормы.Гиперссылка; - КнопкаВставить.Отображение = ОтображениеКнопки.Картинка; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - // Реквизит. - БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ТаблицаИмя, "СписокЗначений"); - - // Группа с отступом и таблицей. - ГруппаСОтступом = Элементы.Добавить(ГруппаИмя + "Отступ", Тип("ГруппаФормы"), Группа); - ГруппаСОтступом.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаСОтступом.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; - ГруппаСОтступом.Отображение = ОтображениеОбычнойГруппы.Нет; - ГруппаСОтступом.Заголовок = СвойстваНастройки.Представление; - ГруппаСОтступом.ОтображатьЗаголовок = Ложь; - - // Декорация отступа. - ПустаяДекорация = Элементы.Добавить(ДекорацияИмя + "Отступ", Тип("ДекорацияФормы"), ГруппаСОтступом); - ПустаяДекорация.Вид = ВидДекорацииФормы.Надпись; - ПустаяДекорация.Заголовок = " "; - ПустаяДекорация.РастягиватьПоГоризонтали = Ложь; - - // Таблица. - ТаблицаФормы = Элементы.Добавить(ТаблицаИмя, Тип("ТаблицаФормы"), ГруппаСОтступом); - ТаблицаФормы.Отображение = ОтображениеТаблицы.Список; - ТаблицаФормы.Заголовок = СвойстваНастройки.Представление; - ТаблицаФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - ТаблицаФормы.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; - ТаблицаФормы.ВертикальныеЛинии = Ложь; - ТаблицаФормы.ГоризонтальныеЛинии = Ложь; - ТаблицаФормы.Шапка = Ложь; - ТаблицаФормы.Подвал = Ложь; - ТаблицаФормы.ИзменятьПорядокСтрок = Не СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями; - ТаблицаФормы.ИзменятьСоставСтрок = Не СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями; - ТаблицаФормы.РастягиватьПоГоризонтали = Истина; - ТаблицаФормы.РастягиватьПоВертикали = Истина; - ТаблицаФормы.Высота = 3; - - Если СвойстваНастройки.ВыводитьФлажок Тогда - Если Не СвойстваНастройки.ПользовательскаяНастройкаКД.Использование Тогда - ТаблицаФормы.ЦветТекста = Форма.ЦветНеактивныхЗначенийТаблицы; - КонецЕсли; - КонецЕсли; - - // Группа колонок "в ячейке". - ГруппаКолонок = Элементы.Добавить(ГруппаКолонокИмя, Тип("ГруппаФормы"), ТаблицаФормы); - ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок; - ГруппаКолонок.Группировка = ГруппировкаКолонок.ВЯчейке; - - // Колонка "Использование". - КолонкаИспользованиеЭлемент = Элементы.Добавить(КолонкаИспользованиеИмя, Тип("ПолеФормы"), ГруппаКолонок); - КолонкаИспользованиеЭлемент.Вид = ВидПоляФормы.ПолеФлажка; - - // Колонка "Значение". - КолонкаЗначениеЭлемент = Элементы.Добавить(КолонкаЗначениеИмя, Тип("ПолеФормы"), ГруппаКолонок); - КолонкаЗначениеЭлемент.Вид = ВидПоляФормы.ПолеВвода; - КолонкаЗначениеЭлемент.БыстрыйВыбор = СвойстваНастройки.БыстрыйВыбор; - - ЗаполнитьЗначенияСвойств(КолонкаЗначениеЭлемент, СвойстваНастройки.ДоступнаяНастройкаКД, "Маска, ФормаВыбора, ФорматРедактирования"); - - КолонкаЗначениеЭлемент.ВыборГруппИЭлементов = СвойстваНастройки.ВыборГруппИЭлементов; - - Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда - КолонкаЗначениеЭлемент.ТолькоПросмотр = Истина; - КонецЕсли; - - // Заполнение имен объектов метаданных в разрезах типов и идентификаторов элементов (для предустановленных). - // Используется при клике по кнопке "Подбор" для получения имени формы подбора. - Если ЗначениеЗаполнено(КолонкаЗначениеЭлемент.ФормаВыбора) Тогда - Прочее.СоответствиеИменОбъектовМетаданных.Вставить(СвойстваНастройки.ИдентификаторЭлемента, КолонкаЗначениеЭлемент.ФормаВыбора); - КонецЕсли; - - // Фиксированные параметры выбора. - Если СвойстваНастройки.ПараметрыВыбора.Количество() > 0 Тогда - КолонкаЗначениеЭлемент.ПараметрыВыбора = Новый ФиксированныйМассив(СвойстваНастройки.ПараметрыВыбора); - КонецЕсли; - - Если ВыводитьУсловие Тогда - КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ТаблицаФормы.КонтекстноеМеню); - КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; - КонецЕсли; - - Дополнительно = Новый Структура; - Дополнительно.Вставить("ТаблицаИмя", ТаблицаИмя); - Дополнительно.Вставить("ИмяКолонкиЗначение", КолонкаЗначениеИмя); - Дополнительно.Вставить("ИмяКолонкиИспользование", КолонкаИспользованиеИмя); - СвойстваНастройки.Дополнительно = Дополнительно; - Прочее.ДобавленныеСпискиЗначений.Добавить(СвойстваНастройки); - КонецЕсли; - КонецЕсли; - - Если ЭлементВывода.ИмяЭлемента1 = Неопределено Тогда - ЗаголовокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Заголовок"); - ПолеНадписи = Элементы.Добавить(ЗаголовокИмя, Тип("ДекорацияФормы"), Элементы.НеОтсортированное); - ПолеНадписи.Вид = ВидДекорацииФормы.Надпись; - ПолеНадписи.Заголовок = СвойстваНастройки.Представление + ":"; - ЭлементВывода.ИмяЭлемента1 = ЗаголовокИмя; - КонецЕсли; - - Если СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" Тогда - ГруппаВывода.Порядок.Вставить(0, ЭлементВывода); - Иначе - ГруппаВывода.Порядок.Добавить(ЭлементВывода); - КонецЕсли; - ГруппаВывода.Размер = ГруппаВывода.Размер + ЭлементВывода.Размер; - - ПараметрыРасположенияЭлементовУправления = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Форма.НастройкиОтчета, "ПараметрыРасположенияЭлементовУправления"); - - Если ПараметрыРасположенияЭлементовУправления <> Неопределено Тогда - - Для Каждого ПараметрРасположенияЭлементаУправления Из ПараметрыРасположенияЭлементовУправления Цикл - - КлючНастроек = ПараметрРасположенияЭлементаУправления.Ключ; - ЗначенияНастроек = ПараметрРасположенияЭлементаУправления.Значение; - - Настройки = Форма.Отчет.КомпоновщикНастроек.Настройки[КлючНастроек].Элементы; - - Для Каждого Настройка Из Настройки Цикл - - Для Каждого ЗначениеНастройки Из ЗначенияНастроек Цикл - - ЦелевойЭлемент = Неопределено; - - Если КлючНастроек = "Отбор" Тогда - ПолеСКД = Новый ПолеКомпоновкиДанных(ЗначениеНастройки.Поле); - Если ПолеСКД = Настройка.ЛевоеЗначение Тогда - ЦелевойЭлемент = Элементы.Найти("ЭлементОтбора_Значение_" + СтрЗаменить(Настройка.ИдентификаторПользовательскойНастройки, "-", "")); - КонецЕсли; - ИначеЕсли КлючНастроек = "ПараметрыДанных" Тогда - ПараметрСКД = Новый ПараметрКомпоновкиДанных(ЗначениеНастройки.Поле); - Если ПараметрСКД = Настройка.Параметр Тогда - ЦелевойЭлемент = Элементы.Найти("ЗначениеПараметраНастроек_Значение_" + СтрЗаменить(Настройка.ИдентификаторПользовательскойНастройки, "-", "")); - КонецЕсли; - КонецЕсли; - - Если ЦелевойЭлемент <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ЦелевойЭлемент, ЗначениеНастройки); - КонецЕсли; - - КонецЦикла; - - КонецЦикла; - - КонецЦикла; + Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда + Поле.ИдентификаторГруппы = "Дополнительно"; + КонецЕсли; + КонецЦикла; + + Если Поля.Найти("Дополнительно", "ИдентификаторГруппы") <> Неопределено Тогда + СвойстваЭлементов.Группы.Вставить("Дополнительно", СвойстваГруппыЭлементовФормы()); КонецЕсли; -КонецПроцедуры + Поля.Сортировать("ИндексНастройки"); + СвойстваЭлементов.Поля = Поля; + + Если ДополнительныеПараметры.События.ПриОпределенииСвойствЭлементовФормыНастроек Тогда + ОтчетОбъект(ДополнительныеПараметры.ПолноеИмя).ПриОпределенииСвойствЭлементовФормыНастроек( + ТипФормы, СвойстваЭлементов, ПользовательскиеНастройки.Элементы); + КонецЕсли; + + #КонецОбласти + + Возврат СвойстваЭлементов; +КонецФункции -Процедура БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, РеквизитПолноеИмя, ТипРеквизита) - Если ТипЗнч(ТипРеквизита) = Тип("ОписаниеТипов") Тогда - ТипыДобавляемого = ТипРеквизита; - ИначеЕсли ТипЗнч(ТипРеквизита) = Тип("Строка") Тогда - ТипыДобавляемого = Новый ОписаниеТипов(ТипРеквизита); - ИначеЕсли ТипЗнч(ТипРеквизита) = Тип("Массив") Тогда - ТипыДобавляемого = Новый ОписаниеТипов(ТипРеквизита); - ИначеЕсли ТипЗнч(ТипРеквизита) = Тип("Тип") Тогда - МассивТипов = Новый Массив; - МассивТипов.Добавить(ТипРеквизита); - ТипыДобавляемого = Новый ОписаниеТипов(МассивТипов); - Иначе +// Получение сведений об основных настройках, включенных в состав пользовательских. + +Функция СведенияОПользовательскихНастройках(Настройки) + Сведения = Новый Соответствие; + ПолучитьСведенияОГруппировке(Настройки, Сведения); + + Возврат Сведения; +КонецФункции + +Процедура ПолучитьСведенияОГруппировке(Группировка, Сведения) + ТипГруппировки = ТипЗнч(Группировка); + Если ТипГруппировки <> Тип("НастройкиКомпоновкиДанных") + И ТипГруппировки <> Тип("ГруппировкаКомпоновкиДанных") + И ТипГруппировки <> Тип("ГруппировкаТаблицыКомпоновкиДанных") + И ТипГруппировки <> Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда Возврат; КонецЕсли; - ТипыСуществующего = ПараметрыЗаполнения.Реквизиты.Существующие.Получить(РеквизитПолноеИмя); - Если ОписанияТиповСовпадают(ТипыСуществующего, ТипыДобавляемого) Тогда - ПараметрыЗаполнения.Реквизиты.Существующие.Удалить(РеквизитПолноеИмя); - Иначе - ПозицияТочки = СтрНайти(РеквизитПолноеИмя, "."); - Если ПозицияТочки = 0 Тогда - ПутьКРеквизиту = ""; - КраткоеИмяРеквизита = РеквизитПолноеИмя; - Иначе - ПутьКРеквизиту = Лев(РеквизитПолноеИмя, ПозицияТочки - 1); - КраткоеИмяРеквизита = Сред(РеквизитПолноеИмя, ПозицияТочки + 1); + Если ТипГруппировки <> Тип("НастройкиКомпоновкиДанных") + И ЗначениеЗаполнено(Группировка.ИдентификаторПользовательскойНастройки) Тогда + + ВидыСведений = ВидыСведений(); + ВидыСведений.Настройки = Группировка; + ВидыСведений.ЭлементНастройки = Группировка; + + Сведения.Вставить(Группировка.ИдентификаторПользовательскойНастройки, ВидыСведений); + КонецЕсли; + + ПолучитьСведенияОСвойствахЭлементаНастроек(Группировка, Сведения); +КонецПроцедуры + +Процедура ПолучитьСведенияОТаблице(Таблица, Сведения) + Если ТипЗнч(Таблица) <> Тип("ТаблицаКомпоновкиДанных") Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Таблица.ИдентификаторПользовательскойНастройки) Тогда + ВидыСведений = ВидыСведений(); + ВидыСведений.Настройки = Таблица; + ВидыСведений.ЭлементНастройки = Таблица; + + Сведения.Вставить(Таблица.ИдентификаторПользовательскойНастройки, ВидыСведений); + КонецЕсли; + + ПолучитьСведенияОСвойствахЭлементаНастроек(Таблица, Сведения); + ПолучитьСведенияОКоллекции(Таблица, Таблица.Строки, Сведения); + ПолучитьСведенияОКоллекции(Таблица, Таблица.Колонки, Сведения); +КонецПроцедуры + +Процедура ПолучитьСведенияОДиаграмме(Диаграмма, Сведения) + Если ТипЗнч(Диаграмма) <> Тип("ДиаграммаКомпоновкиДанных") Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Диаграмма.ИдентификаторПользовательскойНастройки) Тогда + ВидыСведений = ВидыСведений(); + ВидыСведений.Настройки = Диаграмма; + ВидыСведений.ЭлементНастройки = Диаграмма; + + Сведения.Вставить(Диаграмма.ИдентификаторПользовательскойНастройки, ВидыСведений); + КонецЕсли; + + ПолучитьСведенияОСвойствахЭлементаНастроек(Диаграмма, Сведения); + ПолучитьСведенияОКоллекции(Диаграмма, Диаграмма.Серии, Сведения); + ПолучитьСведенияОКоллекции(Диаграмма, Диаграмма.Точки, Сведения); +КонецПроцедуры + +Процедура ПолучитьСведенияОКоллекции(ЭлементНастроек, Коллекция, Сведения) + ТипКоллекции = ТипЗнч(Коллекция); + Если ТипКоллекции <> Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + И ТипКоллекции <> Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") + И ТипКоллекции <> Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Коллекция.ИдентификаторПользовательскойНастройки) Тогда + ВидыСведений = ВидыСведений(); + ВидыСведений.Настройки = ЭлементНастроек; + ВидыСведений.ЭлементНастройки = Коллекция; + + Сведения.Вставить(Коллекция.ИдентификаторПользовательскойНастройки, ВидыСведений); + КонецЕсли; + + Для Каждого Элемент Из Коллекция Цикл + Настройки = Элемент; + Если ТипЗнч(Элемент) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Настройки = Элемент.Настройки; + КонецЕсли; + + ПолучитьСведенияОГруппировке(Настройки, Сведения); + ПолучитьСведенияОТаблице(Настройки, Сведения); + ПолучитьСведенияОДиаграмме(Настройки, Сведения); + КонецЦикла; +КонецПроцедуры + +Процедура ПолучитьСведенияОСвойствахЭлементаНастроек(ЭлементНастроек, Сведения) + ИдентификаторыСвойств = СтрРазделить("Выбор, ПараметрыВывода, УсловноеОформление", ", ", Ложь); + ДоступныеСвойства = Новый Структура("Выбор, Отбор, Порядок, УсловноеОформление, Структура"); + + ТипЭлементаНастроек = ТипЗнч(ЭлементНастроек); + Если ТипЭлементаНастроек <> Тип("ТаблицаКомпоновкиДанных") + И ТипЭлементаНастроек <> Тип("ДиаграммаКомпоновкиДанных") Тогда + + ИдентификаторыСвойств.Добавить("Отбор"); + ИдентификаторыСвойств.Добавить("Порядок"); + ИдентификаторыСвойств.Добавить("Структура"); + + Если ТипЭлементаНастроек = Тип("НастройкиКомпоновкиДанных") Тогда + ИдентификаторыСвойств.Добавить("ПараметрыДанных"); + КонецЕсли; + КонецЕсли; + + Для Каждого Идентификатор Из ИдентификаторыСвойств Цикл + Свойство = ЭлементНастроек[Идентификатор]; + + Если ДоступныеСвойства.Свойство(Идентификатор) + И ЗначениеЗаполнено(Свойство.ИдентификаторПользовательскойНастройки) Тогда + + ВидыСведений = ВидыСведений(); + ВидыСведений.Настройки = ЭлементНастроек; + ВидыСведений.ЭлементНастройки = Свойство; + + Сведения.Вставить(Свойство.ИдентификаторПользовательскойНастройки, ВидыСведений); КонецЕсли; - ПараметрыЗаполнения.Реквизиты.Добавляемые.Добавить(Новый РеквизитФормы(КраткоеИмяРеквизита, ТипыДобавляемого, ПутьКРеквизиту)); - Если ТипыСуществующего <> Неопределено Тогда - ПараметрыЗаполнения.Реквизиты.Удаляемые.Добавить(РеквизитПолноеИмя); - ПараметрыЗаполнения.Реквизиты.Существующие.Удалить(РеквизитПолноеИмя); + ПолучитьСведенияОЭлементахСвойстваНастроек(ЭлементНастроек, Свойство, Идентификатор, Сведения); + ПолучитьСведенияОКоллекции(ЭлементНастроек, Свойство, Сведения); + КонецЦикла; +КонецПроцедуры + +Процедура ПолучитьСведенияОЭлементахСвойстваНастроек(Настройки, Свойство, ИдентификаторСвойства, Сведения) + СвойстваСЭлементами = Новый Структура("Отбор, ПараметрыДанных, ПараметрыВывода, УсловноеОформление"); + Если Не СвойстваСЭлементами.Свойство(ИдентификаторСвойства) Тогда + Возврат; + КонецЕсли; + + Для Каждого Элемент Из Свойство.Элементы Цикл + Если Не ЗначениеЗаполнено(Элемент.ИдентификаторПользовательскойНастройки) Тогда + Продолжить; КонецЕсли; + + Описание = Неопределено; + Если ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Описание = Свойство.ДоступныеПоляОтбора.НайтиПоле(Элемент.ЛевоеЗначение); + ИначеЕсли ТипЗнч(Элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Описание = Свойство.ДоступныеПараметры.НайтиПараметр(Элемент.Параметр); + КонецЕсли; + + ВидыСведений = ВидыСведений(); + ВидыСведений.Настройки = Настройки; + ВидыСведений.ЭлементНастройки = Элемент; + ВидыСведений.ОписаниеНастройки = Описание; + + Сведения.Вставить(Элемент.ИдентификаторПользовательскойНастройки, ВидыСведений); + КонецЦикла; +КонецПроцедуры + +Функция ВидыСведений() + Возврат Новый Структура("Настройки, ЭлементНастройки, ОписаниеНастройки"); +КонецФункции + +// Перегруппировка элементов формы, связанных с пользовательскими настройками. + +Функция ИменаРеквизитовЭлементовНастроек(Форма, ВидыЭлементов) + ИменаРеквизитовПредопределенных = Новый Структура; + ИменаРеквизитовСгенерированных = Новый Структура; + + Для Каждого ВидЭлемента Из ВидыЭлементов Цикл + ИменаРеквизитовПредопределенных.Вставить(ВидЭлемента, Новый Массив); + ИменаРеквизитовСгенерированных.Вставить(ВидЭлемента, Новый Массив); + КонецЦикла; + + Реквизиты = Форма.ПолучитьРеквизиты(); + Для Каждого Реквизит Из Реквизиты Цикл + Для Каждого ВидЭлемента Из ВидыЭлементов Цикл + Если СтрНачинаетсяС(Реквизит.Имя, ВидЭлемента) + И СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрЗаменить(Реквизит.Имя, ВидЭлемента, "")) Тогда + ИменаРеквизитовПредопределенных[ВидЭлемента].Добавить(Реквизит.Имя); + КонецЕсли; + + Если СтрНачинаетсяС(Реквизит.Имя, "КомпоновщикНастроекПользовательскиеНастройкиЭлемент") + И СтрЗаканчиваетсяНа(Реквизит.Имя, ВидЭлемента) Тогда + ИменаРеквизитовСгенерированных[ВидЭлемента].Добавить(Реквизит.Имя); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + ИменаРеквизитов = Новый Структура; + ИменаРеквизитов.Вставить("Предопределенных", ИменаРеквизитовПредопределенных); + ИменаРеквизитов.Вставить("Сгенерированных", ИменаРеквизитовСгенерированных); + + Возврат ИменаРеквизитов; +КонецФункции + +Процедура ПодготовитьФормуКПерегруппировкеЭлементов(Форма, УзелИерархииЭлементов, ИменаРеквизитов, ВидыСтилизованныхЭлементов) + Элементы = Форма.Элементы; + + // Перегруппировка предопределенных элементов формы. + СвойстваПредопределенныхЭлементов = СтрРазделить("Отступ, Подбор, ВставитьИзБуфера", ", ", Ложь); + СвойстваПредопределенныхЭлементов.Добавить(""); + + Для Каждого ВидЭлемента Из ВидыСтилизованныхЭлементов Цикл + ИменаПредопределенныхРеквизитов = ИменаРеквизитов.Предопределенных[ВидЭлемента]; + Для Каждого ИмяРеквизита Из ИменаПредопределенныхРеквизитов Цикл + Для Каждого Свойство Из СвойстваПредопределенныхЭлементов Цикл + НайденныйЭлемент = Элементы.Найти(ИмяРеквизита + Свойство); + Если НайденныйЭлемент <> Неопределено Тогда + Элементы.Переместить(НайденныйЭлемент, Элементы.ПредопределенныеЭлементыНастроек); + НайденныйЭлемент.Видимость = Ложь; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + // Удаление динамических элементов формы. + УзлыИерархииЭлементов = Новый Массив; + УзлыИерархииЭлементов.Добавить(УзелИерархииЭлементов); + + НайденныйУзел = Элементы.Найти("Дополнительно"); + Если НайденныйУзел <> Неопределено Тогда + УзлыИерархииЭлементов.Добавить(НайденныйУзел); + КонецЕсли; + + Исключения = Новый Массив; + + НайденныйУзел = Элементы.Найти("ПредопределенныеНастройки"); + Если НайденныйУзел <> Неопределено Тогда + Исключения.Добавить(НайденныйУзел); + КонецЕсли; + + Для Каждого ТекущийУзел Из УзлыИерархииЭлементов Цикл + ИерархияЭлементов = ТекущийУзел.ПодчиненныеЭлементы; + ИндексЭлемента = ИерархияЭлементов.Количество() - 1; + Пока ИндексЭлемента >= 0 Цикл + ЭлементИерархии = ИерархияЭлементов[ИндексЭлемента]; + Если Исключения.Найти(ЭлементИерархии) = Неопределено Тогда + Элементы.Удалить(ЭлементИерархии); + КонецЕсли; + ИндексЭлемента = ИндексЭлемента - 1; + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +Процедура ПерегруппироватьЭлементыФормыНастроек(Форма, Знач УзелИерархииЭлементов, СвойстваЭлементов, ИменаРеквизитов, ВидыСтилизованныхЭлементов) + ОписаниеНастроек = СвойстваЭлементов.Поля.Скопировать(, + "ИндексНастройки, ИдентификаторНастройки, Настройки, ЭлементНастройки, ОписаниеНастройки"); + + ЭлементыНастроек = ЭлементыФормыНастроек(Форма, ОписаниеНастроек, ИменаРеквизитов); + УстановитьСвойстваЭлементовФормыНастроек(Форма, ЭлементыНастроек, СвойстваЭлементов); + + Если Форма.ТипФормыОтчета <> ТипФормыОтчета.Настройка Тогда + ЭлементыНастроек.ЗаполнитьЗначения(Ложь, "ЭтоСписок"); + КонецЕсли; + + ВынестиСписокВОтдельнуюГруппу(ЭлементыНастроек, СвойстваЭлементов); + + ИдентификаторыГрупп = СвойстваЭлементов.Поля.Скопировать(); + ИдентификаторыГрупп.Свернуть("ИдентификаторГруппы"); + ИдентификаторыГрупп = ИдентификаторыГрупп.ВыгрузитьКолонку("ИдентификаторГруппы"); + + Элементы = Форма.Элементы; + + Если ИдентификаторыГрупп.Количество() = 1 Тогда + УзелИерархииЭлементов.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + Иначе + УзелИерархииЭлементов.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + КонецЕсли; + + НомерГруппы = 0; + Для Каждого ИдентификаторГруппы Из ИдентификаторыГрупп Цикл + НомерГруппы = НомерГруппы + 1; + + СвойстваГруппы = Неопределено; + Если Не ЗначениеЗаполнено(ИдентификаторГруппы) + Или Не СвойстваЭлементов.Группы.Свойство(ИдентификаторГруппы, СвойстваГруппы) Тогда + СвойстваГруппы = СвойстваГруппыЭлементовФормы(); + КонецЕсли; + + НайденныйУзелИерархии = Элементы.Найти(ИдентификаторГруппы); + Если НайденныйУзелИерархии <> Неопределено Тогда + УзелИерархииЭлементов = НайденныйУзелИерархии; + НомерГруппы = 1; + КонецЕсли; + + ИмяГруппы = УзелИерархииЭлементов.Имя + "Строка" + НомерГруппы; + Группа = ?(ИдентификаторыГрупп.Количество() = 1, УзелИерархииЭлементов, Элементы.Найти(ИмяГруппы)); + + Если Группа = Неопределено Тогда + Группа = ГруппаЭлементовФормыНастроек(Элементы, УзелИерархииЭлементов, ИмяГруппы); + Группа.Заголовок = "Строка " + НомерГруппы; + ЗаполнитьЗначенияСвойств(Группа, СвойстваГруппы,, "Группировка"); + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + КонецЕсли; + + ПоискПолейГруппы = Новый Структура("ИдентификаторГруппы", ИдентификаторГруппы); + СвойстваПолейГруппы = СвойстваЭлементов.Поля.НайтиСтроки(ПоискПолейГруппы); + ЭлементыНастроекГруппы = ЭлементыНастроекГруппы(ЭлементыНастроек, СвойстваПолейГруппы); + + ПодготовитьЭлементыФормыНастроекКРаспределению(ЭлементыНастроекГруппы, СвойстваГруппы.Группировка); + РаспределитьЭлементыФормыНастроек(Форма.Элементы, Группа, ЭлементыНастроекГруппы); + КонецЦикла; + + ВывестиСтилизованныеЭлементыФормыНастроек(Форма, ЭлементыНастроек, ОписаниеНастроек, ИменаРеквизитов, ВидыСтилизованныхЭлементов); +КонецПроцедуры + +// Поиск созданных системой элементов формы настроек и их подготовка к распределению + +Функция ЭлементыФормыНастроек(Форма, ОписаниеНастроек, ИменаРеквизитов) + Элементы = Форма.Элементы; + + ЭлементыНастроек = ПалитраКоллекцииЭлементовНастроек(); + НайтиЭлементыФормыНастроек(Форма, Элементы.Временная, ЭлементыНастроек, ОписаниеНастроек); + + СводныеСведения = ЭлементыНастроек.Скопировать(); + СводныеСведения.Свернуть("ИндексНастройки", "КонтрольнаяСумма"); + НеполныеЭлементы = СводныеСведения.НайтиСтроки(Новый Структура("КонтрольнаяСумма", 1)); + + Поиск = Новый Структура("ИндексНастройки, СвойствоНастройки"); + ОбщиеСвойства = "ЭтоПериод, ЭтоФлажок, ЭтоСписок, ТипЗначения, ФормаВыбора, ДоступныеЗначения"; + + Для Каждого Запись Из НеполныеЭлементы Цикл + Элемент = ЭлементыНастроек.Найти(Запись.ИндексНастройки, "ИндексНастройки"); + Элемент.Поле.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + + ИсходноеСвойство = "Значение"; + СвязанноеСвойство = "Использование"; + Если СтрЗаканчиваетсяНа(Элемент.Поле.Имя, СвязанноеСвойство) Тогда + ИсходноеСвойство = "Использование"; + СвязанноеСвойство = "Значение"; + КонецЕсли; + + ИмяДополнительногоЭлемента = СтрЗаменить(Элемент.Поле.Имя, Элемент.СвойствоНастройки, СвязанноеСвойство); + + ГруппаЭлемента = Элемент.Поле.Родитель; + Если Элементы.Найти(ИмяДополнительногоЭлемента) <> Неопределено + Или ГруппаЭлемента.ПодчиненныеЭлементы.Найти(ИмяДополнительногоЭлемента) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ДополнительныйЭлемент = Элементы.Добавить(ИмяДополнительногоЭлемента, Тип("ДекорацияФормы"), ГруппаЭлемента); + ДополнительныйЭлемент.Заголовок = Элемент.Поле.Заголовок; + ДополнительныйЭлемент.АвтоМаксимальнаяВысота = Ложь; + + ДополнительнаяЗапись = ЭлементыНастроек.Добавить(); + ДополнительнаяЗапись.Поле = ДополнительныйЭлемент; + ДополнительнаяЗапись.ИндексНастройки = Запись.ИндексНастройки; + ДополнительнаяЗапись.СвойствоНастройки = СвязанноеСвойство; + ДополнительнаяЗапись.КонтрольнаяСумма = 1; + + Поиск.ИндексНастройки = Запись.ИндексНастройки; + Поиск.СвойствоНастройки = ИсходноеСвойство; + СвязанныеЭлементы = ЭлементыНастроек.НайтиСтроки(Поиск); + ЗаполнитьЗначенияСвойств(ДополнительнаяЗапись, СвязанныеЭлементы[0], ОбщиеСвойства); + КонецЦикла; + + НайтиЗначенияКакФлажки(Форма, ЭлементыНастроек, ИменаРеквизитов); + + ЭлементыНастроек.Сортировать("ИндексНастройки"); + + Возврат ЭлементыНастроек; +КонецФункции + +Функция ПалитраКоллекцииЭлементовНастроек() + ОписаниеЧисла = Новый ОписаниеТипов("Число"); + ОписаниеСтроки = Новый ОписаниеТипов("Строка"); + ОписаниеПризнака = Новый ОписаниеТипов("Булево"); + + ЭлементыНастроек = Новый ТаблицаЗначений; + ЭлементыНастроек.Колонки.Добавить("Приоритет", ОписаниеЧисла); + ЭлементыНастроек.Колонки.Добавить("ИндексНастройки", ОписаниеЧисла); + ЭлементыНастроек.Колонки.Добавить("СвойствоНастройки", ОписаниеСтроки); + ЭлементыНастроек.Колонки.Добавить("Поле"); + ЭлементыНастроек.Колонки.Добавить("ЭтоПериод", ОписаниеПризнака); + ЭлементыНастроек.Колонки.Добавить("ЭтоСписок", ОписаниеПризнака); + ЭлементыНастроек.Колонки.Добавить("ЭтоФлажок", ОписаниеПризнака); + ЭлементыНастроек.Колонки.Добавить("ЭтоЗначениеКакФлажок", ОписаниеПризнака); + ЭлементыНастроек.Колонки.Добавить("ТипЗначения"); + ЭлементыНастроек.Колонки.Добавить("ФормаВыбора", ОписаниеСтроки); + ЭлементыНастроек.Колонки.Добавить("ДоступныеЗначения"); + ЭлементыНастроек.Колонки.Добавить("КонтрольнаяСумма", ОписаниеЧисла); + ЭлементыНастроек.Колонки.Добавить("НомерКолонки", ОписаниеЧисла); + ЭлементыНастроек.Колонки.Добавить("НомерГруппы", ОписаниеЧисла); + + Возврат ЭлементыНастроек; +КонецФункции + +Процедура НайтиЭлементыФормыНастроек(Форма, ГруппаЭлементов, ЭлементыНастроек, ОписаниеНастроек) + ОсновныеСвойства = Новый Структура("Использование, Значение"); + Для Каждого Элемент Из ГруппаЭлементов.ПодчиненныеЭлементы Цикл + Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда + НайтиЭлементыФормыНастроек(Форма, Элемент, ЭлементыНастроек, ОписаниеНастроек); + ИначеЕсли ТипЗнч(Элемент) = Тип("ПолеФормы") Тогда + СвойствоНастройки = Неопределено; + ИндексНастройки = ОтчетыКлиентСервер.ИндексЭлементаНастройкиПоПути(Элемент.Имя, СвойствоНастройки); + + ОписаниеНастройкиЭлемента = ОписаниеНастроек.Найти(ИндексНастройки, "ИндексНастройки"); + Если ОписаниеНастройкиЭлемента = Неопределено Тогда + Продолжить; + КонецЕсли; + + Запись = ЭлементыНастроек.Добавить(); + Запись.ИндексНастройки = ИндексНастройки; + Запись.СвойствоНастройки = СвойствоНастройки; + Запись.Поле = Элемент; + + ЭлементНастройки = ОписаниеНастройкиЭлемента.ЭлементНастройки; + ОписаниеНастройки = ОписаниеНастройкиЭлемента.ОписаниеНастройки; + + Если ОписаниеНастройки <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Запись, ОписаниеНастройки, "ТипЗначения, ФормаВыбора, ДоступныеЗначения"); + КонецЕсли; + + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Запись.ЭтоПериод = ТипЗнч(ЭлементНастройки.Значение) = Тип("СтандартныйПериод"); + Запись.ЭтоСписок = ОписаниеНастройки <> Неопределено И ОписаниеНастройки.ДоступенСписокЗначений; + ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Запись.ЭтоПериод = ТипЗнч(ЭлементНастройки.ПравоеЗначение) = Тип("СтандартныйПериод"); + Запись.ЭтоФлажок = ЗначениеЗаполнено(ЭлементНастройки.Представление); + Запись.ЭтоСписок = Не Запись.ЭтоФлажок + И ОтчетыКлиентСервер.ЭтоВидСравненияСписка(ЭлементНастройки.ВидСравнения); + КонецЕсли; + + Если ОсновныеСвойства.Свойство(Запись.СвойствоНастройки) Тогда + Запись.КонтрольнаяСумма = 1; + КонецЕсли; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +Процедура НайтиЗначенияКакФлажки(Форма, ЭлементыНастроек, ИменаРеквизитов) + Поиск = Новый Структура; + Поиск.Вставить("ТипЗначения", Новый ОписаниеТипов("Булево")); + НайденныеЭлементы = ЭлементыНастроек.Скопировать(Поиск); + НайденныеЭлементы.Свернуть("ИндексНастройки, ТипЗначения", "КонтрольнаяСумма"); + + НайденныеЭлементы = НайденныеЭлементы.НайтиСтроки(Новый Структура("КонтрольнаяСумма", 2)); + Если НайденныеЭлементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Поиск = Новый Структура("СвойствоНастройки, ИндексНастройки"); + Для Каждого Элемент Из НайденныеЭлементы Цикл + Поиск.СвойствоНастройки = "Использование"; + Поиск.ИндексНастройки = Элемент.ИндексНастройки; + + ЭлементФлажка = ЭлементыНастроек.НайтиСтроки(Поиск); + Если ЭлементФлажка.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ЭлементФлажка = ЭлементФлажка[0]; + Если ТипЗнч(ЭлементФлажка.Поле) <> Тип("ДекорацияФормы") Тогда + Продолжить; + КонецЕсли; + + Поиск.СвойствоНастройки = "Значение"; + + ЭлементЗначения = ЭлементыНастроек.НайтиСтроки(Поиск); + Если ЭлементЗначения.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ЭлементФлажка.СвойствоНастройки = "Значение"; + ЭлементФлажка.ЭтоФлажок = Истина; + ЭлементФлажка.ЭтоЗначениеКакФлажок = Истина; + + ЭлементЗначения = ЭлементЗначения[0]; + ЭлементЗначения.СвойствоНастройки = "Использование"; + ЭлементЗначения.ЭтоФлажок = Истина; + ЭлементЗначения.ЭтоЗначениеКакФлажок = Истина; + ЭлементЗначения.Поле.Видимость = Ложь; + КонецЦикла; +КонецПроцедуры + +Процедура УстановитьСвойстваЭлементовФормыНастроек(Форма, ЭлементыНастроек, СвойстваЭлементов) + КомпоновщикНастроек = Форма.Отчет.КомпоновщикНастроек; + + #Область УстановкаСвойствЭлементовИспользование + + Исключения = Новый Массив; + Исключения.Добавить(ВидСравненияКомпоновкиДанных.Равно); + Исключения.Добавить(ВидСравненияКомпоновкиДанных.Содержит); + Исключения.Добавить(ВидСравненияКомпоновкиДанных.Заполнено); + Исключения.Добавить(ВидСравненияКомпоновкиДанных.Подобно); + Исключения.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); + Исключения.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); + + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Новый Структура("СвойствоНастройки", "Использование")); + Для Каждого Элемент Из НайденныеЭлементы Цикл + Поле = Элемент.Поле; + СвойстваПоля = СвойстваЭлементов.Поля.Найти(Элемент.ИндексНастройки, "ИндексНастройки"); + + Если ЗначениеЗаполнено(СвойстваПоля.Представление) Тогда + Поле.Заголовок = СвойстваПоля.Представление; + КонецЕсли; + + Если ТипЗнч(Поле) = Тип("ПолеФормы") Тогда + Поле.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + Поле.УстановитьДействие("ПриИзменении", "Подключаемый_ЭлементНастройки_ПриИзменении"); + ИначеЕсли ТипЗнч(Поле) = Тип("ДекорацияФормы") Тогда + Поле.Видимость = (СвойстваПоля.ПоложениеЗаголовка <> ПоложениеЗаголовкаЭлементаФормы.Нет); + КонецЕсли; + + Если СтрДлина(Поле.Заголовок) > 40 Тогда + Поле.ВысотаЗаголовка = 2; + КонецЕсли; + + ЭлементНастройки = СвойстваПоля.ЭлементНастройки; + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Поле.Заголовок = Элемент.Поле.Заголовок + ":"; + ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Если Исключения.Найти(ЭлементНастройки.ВидСравнения) <> Неопределено Тогда + Поле.Заголовок = Элемент.Поле.Заголовок + ":"; + ИначеЕсли Не ЗначениеЗаполнено(ЭлементНастройки.Представление) Тогда + Поле.Заголовок = Элемент.Поле.Заголовок + " (" + НРег(ЭлементНастройки.ВидСравнения) + "):"; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + #КонецОбласти + + #Область УстановкаСвойствЭлементовЭлементыНастроек + + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Новый Структура("СвойствоНастройки", "ВидСравнения")); + Для Каждого Элемент Из НайденныеЭлементы Цикл + Элемент.Поле.Видимость = Ложь; + КонецЦикла; + + #КонецОбласти + + #Область УстановкаСвойствЭлементовЗначение + + ПараметрыПодбора = Новый Соответствие; + РасширенноеОписаниеТипов = Новый Соответствие; + + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Новый Структура("СвойствоНастройки", "Значение")); + Для Каждого Элемент Из НайденныеЭлементы Цикл + Поле = Элемент.Поле; + + Если ТипЗнч(Поле) = Тип("ДекорацияФормы") Тогда + Поле.Заголовок = " "; + + Поиск = Новый Структура("ИндексНастройки, СвойствоНастройки", Элемент.ИндексНастройки, "Использование"); + НайденныеСвязанныеЭлементы = ЭлементыНастроек.НайтиСтроки(Поиск); + + СвязанноеПоле = НайденныеСвязанныеЭлементы[0].Поле; + Если СтрЗаканчиваетсяНа(СвязанноеПоле.Заголовок, ":") Тогда + СвязанноеПоле.Заголовок = Лев(СвязанноеПоле.Заголовок, СтрДлина(СвязанноеПоле.Заголовок) - 1); + КонецЕсли; + Иначе // Поле ввода. + СвойстваПоля = СвойстваЭлементов.Поля.Найти(Элемент.ИндексНастройки, "ИндексНастройки"); + ЗаполнитьЗначенияСвойств(Поле, СвойстваПоля,, "ПоложениеЗаголовка"); + + Поле.УстановитьДействие("ПриИзменении", "Подключаемый_ЭлементНастройки_ПриИзменении"); + Если Элемент.ЭтоСписок Тогда + Поле.УстановитьДействие("НачалоВыбора", "Подключаемый_ЭлементНастройки_НачалоВыбора"); + КонецЕсли; + + Поле.ФормаВыбора = Элемент.ФормаВыбора; + Если ЗначениеЗаполнено(Поле.ФормаВыбора) Тогда + ПараметрыПодбора.Вставить(Элемент.ИндексНастройки, Поле.ФормаВыбора); + КонецЕсли; + + Результат = ОтчетыКлиентСервер.ДополнитьСписок( + Поле.СписокВыбора, Элемент.ДоступныеЗначения, Ложь, Истина); + Поле.РежимВыбораИзСписка = Не Элемент.ЭтоСписок И Результат <> Неопределено И Результат.Всего > 0; + + Если Элемент.ТипЗначения = Неопределено Тогда + Продолжить; + КонецЕсли; + + РасширенноеОписаниеТипа = РасширенноеОписаниеТипов(Элемент.ТипЗначения, Истина, ПараметрыПодбора); + РасширенноеОписаниеТипов.Вставить(Элемент.ИндексНастройки, РасширенноеОписаниеТипа); + + Поле.ДоступныеТипы = РасширенноеОписаниеТипа.ОписаниеТиповДляФормы; + Поле.ОграничениеТипа = РасширенноеОписаниеТипа.ОписаниеТиповДляФормы; + + Если СтрДлина(Поле.Заголовок) > 40 Тогда + Поле.ВысотаЗаголовка = 2; + КонецЕсли; + + Если Поле.РастягиватьПоГоризонтали = Неопределено Тогда + Поле.РастягиватьПоГоризонтали = Истина; + Поле.АвтоМаксимальнаяШирина = Ложь; + Поле.МаксимальнаяШирина = 40; + КонецЕсли; + + Если РасширенноеОписаниеТипа.КоличествоТипов = 1 Тогда + Если РасширенноеОписаниеТипа.СодержитТипЧисло Тогда + Поле.КнопкаВыбора = Истина; + Если Поле.РастягиватьПоГоризонтали = Истина Тогда + Поле.РастягиватьПоГоризонтали = Ложь; + КонецЕсли; + ИначеЕсли РасширенноеОписаниеТипа.СодержитТипДата Тогда + Поле.МаксимальнаяШирина = 25; + ИначеЕсли РасширенноеОписаниеТипа.СодержитТипБулево Тогда + Поле.МаксимальнаяШирина = 5; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ДополнительныеСвойства = КомпоновщикНастроек.Настройки.ДополнительныеСвойства; + ДополнительныеСвойства.Вставить("ПараметрыПодбора", ПараметрыПодбора); + ДополнительныеСвойства.Вставить("РасширенноеОписаниеТипов", РасширенноеОписаниеТипов); + + #КонецОбласти +КонецПроцедуры + +Процедура ВынестиСписокВОтдельнуюГруппу(ЭлементыНастроек, СвойстваЭлементов) + Поиск = Новый Структура("ЭтоСписок", Истина); + Статистика = ЭлементыНастроек.Скопировать(Поиск); + Статистика.Свернуть("ИндексНастройки"); + + Если Статистика.Количество() <> 1 Тогда + Возврат; + КонецЕсли; + + ИндексНастройки = ЭлементыНастроек.НайтиСтроки(Поиск)[0].ИндексНастройки; + СвойстваПоля = СвойстваЭлементов.Поля.Найти(ИндексНастройки, "ИндексНастройки"); + Если ЗначениеЗаполнено(СвойстваПоля.ИдентификаторГруппы) Тогда + Возврат; + КонецЕсли; + + ИдентификаторГруппы = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); + СвойстваПоля.ИдентификаторГруппы = ИдентификаторГруппы; + СвойстваЭлементов.Группы.Вставить(ИдентификаторГруппы, СвойстваГруппыЭлементовФормы()); +КонецПроцедуры + +Функция ЭлементыНастроекГруппы(ЭлементыНастроек, СвойстваПолейГруппы) + ЭлементыНастроекГруппы = ЭлементыНастроек.СкопироватьКолонки(); + + Поиск = Новый Структура("ИндексНастройки"); + Для Каждого Свойства Из СвойстваПолейГруппы Цикл + Поиск.ИндексНастройки = Свойства.ИндексНастройки; + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Поиск); + Для Каждого Элемент Из НайденныеЭлементы Цикл + ЗаполнитьЗначенияСвойств(ЭлементыНастроекГруппы.Добавить(), Элемент); + КонецЦикла; + КонецЦикла; + + Возврат ЭлементыНастроекГруппы; +КонецФункции + +// Распределение элементов формы настроек в иерархии + +Процедура ПодготовитьЭлементыФормыНастроекКРаспределению(ЭлементыНастроек, Группировка) + #Область ПередПодготовкой + + Статистика = ЭлементыНастроек.Скопировать(); + Статистика.Свернуть("ИндексНастройки"); + + КоличествоКолонок = 1; + Если Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно Тогда + КоличествоКолонок = Мин(2, Статистика.Количество()); + ИначеЕсли Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда Тогда + КоличествоКолонок = Статистика.Количество(); + КонецЕсли; + КоличествоКолонок = Макс(1, КоличествоКолонок); + + #КонецОбласти + + #Область УстановкаПриоритета + + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Новый Структура("ЭтоПериод", Истина)); + Для Каждого Элемент Из НайденныеЭлементы Цикл + Элемент.Приоритет = -1; + КонецЦикла; + + ЭлементыНастроек.Сортировать("Приоритет, ИндексНастройки"); + + #КонецОбласти + + #Область УстановкаНомеровКолонок + + Статистика = ЭлементыНастроек.Скопировать(); + Статистика.Свернуть("Приоритет, ИндексНастройки"); + + КоличествоЭлементов = Статистика.Количество(); + Индекс = 0; + ГраницаСвойств = КоличествоЭлементов - 1; + + Шаг = КоличествоЭлементов / КоличествоКолонок; + ГраницаРазрыва = ?(КоличествоЭлементов % КоличествоКолонок = 0, Шаг - 1, Цел(Шаг)); + Шаг = ?(ГраницаРазрыва = 0, 1, Цел(Шаг)); + + Поиск = Новый Структура("ИндексНастройки"); + Для НомерКолонки = 1 По КоличествоКолонок Цикл + Пока Индекс <= ГраницаРазрыва Цикл + Поиск.ИндексНастройки = Статистика[Индекс].ИндексНастройки; + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Поиск); + Для Каждого Элемент Из НайденныеЭлементы Цикл + Элемент.НомерКолонки = НомерКолонки; + КонецЦикла; + Индекс = Индекс + 1; + КонецЦикла; + + ГраницаРазрыва = ГраницаРазрыва + Шаг; + Если ГраницаРазрыва > ГраницаСвойств Тогда + ГраницаРазрыва = ГраницаСвойств; + КонецЕсли; + КонецЦикла; + + РаспределитьСпискиПоКолонкамПропорционально(ЭлементыНастроек, КоличествоКолонок); + + #КонецОбласти + + #Область УстановкаНомеровГрупп + + ВариантыПоиска = Новый Массив; + ВариантыПоиска.Добавить(Новый Структура("НомерГруппы, ЭтоФлажок, ЭтоСписок", 0, Ложь, Ложь)); + ВариантыПоиска.Добавить(Новый Структура("НомерГруппы, ЭтоФлажок, ЭтоСписок", 0, Истина, Ложь)); + ВариантыПоиска.Добавить(Новый Структура("НомерГруппы, ЭтоФлажок, ЭтоСписок", 0, Ложь, Истина)); + + НомерГруппы = 1; + Для Каждого Поиск Из ВариантыПоиска Цикл + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Поиск); + + ПредыдущийИндекс = Неопределено; + Для Каждого Элемент Из НайденныеЭлементы Цикл + Если Элемент.ЭтоФлажок Или Элемент.ЭтоСписок Тогда + Индекс = Элемент.ИндексНастройки; + Иначе + Индекс = ЭлементыНастроек.Индекс(Элемент); + КонецЕсли; + + Если ПредыдущийИндекс = Неопределено Тогда + ПредыдущийИндекс = Индекс; + КонецЕсли; + + Если ((Элемент.ЭтоФлажок Или Элемент.ЭтоСписок) И Индекс <> ПредыдущийИндекс) + Или (Не Элемент.ЭтоФлажок И Не Элемент.ЭтоСписок И Индекс > ПредыдущийИндекс + 1) Тогда + НомерГруппы = НомерГруппы + 1; + КонецЕсли; + + Элемент.НомерГруппы = НомерГруппы; + ПредыдущийИндекс = Индекс; + КонецЦикла; + + НомерГруппы = НомерГруппы + 1; + КонецЦикла; + + #КонецОбласти +КонецПроцедуры + +Процедура РаспределитьСпискиПоКолонкамПропорционально(ЭлементыНастроек, КоличествоКолонок) + Если КоличествоКолонок <> 2 + Или ЭлементыНастроек.Найти(Истина, "ЭтоСписок") = Неопределено Тогда + Возврат; + КонецЕсли; + + ОписаниеЧисла = Новый ОписаниеТипов("Число"); + + Статистика = ЭлементыНастроек.Скопировать(); + Статистика.Свернуть("ИндексНастройки, ЭтоСписок, НомерКолонки"); + Статистика.Колонки.Добавить("Списков", ОписаниеЧисла); + + Для Каждого Элемент Из Статистика Цикл + Элемент.Списков = Число(Элемент.ЭтоСписок); + КонецЦикла; + + Статистика.Свернуть("НомерКолонки", "Списков"); + + Списков = Статистика.Итог("Списков"); + Если Списков = 1 Тогда + Возврат; + КонецЕсли; + + Статистика.Сортировать("Списков"); + + Среднее = Окр(Списков / Статистика.Количество(), 0, РежимОкругления.Окр15как10); + Приемник = Статистика[0]; + Источник = Статистика[Статистика.Количество() - 1]; + + Отклонение = Среднее - Приемник.Списков; + Если Отклонение = 0 Тогда + Возврат; + КонецЕсли; + + Поиск = Новый Структура("ЭтоСписок, НомерКолонки", Истина, Источник.НомерКолонки); + ЭлементыИсточника = ЭлементыНастроек.Скопировать(Поиск); + ЭлементыИсточника.Свернуть("ИндексНастройки"); + Если Приемник.НомерКолонки > Источник.НомерКолонки Тогда + ЭлементыИсточника.Сортировать("ИндексНастройки Убыв"); + КонецЕсли; + + Отклонение = Мин(Отклонение, ЭлементыИсточника.Количество()); + Поиск = Новый Структура("ИндексНастройки"); + + Индекс = 0; + Пока Отклонение > 0 Цикл + Поиск.ИндексНастройки = ЭлементыИсточника[Индекс].ИндексНастройки; + СвязанныеЭлементы = ЭлементыНастроек.НайтиСтроки(Поиск); + Для Каждого Элемент Из СвязанныеЭлементы Цикл + Элемент.НомерКолонки = Приемник.НомерКолонки; + КонецЦикла; + + Индекс = Индекс + 1; + Отклонение = Отклонение - 1; + КонецЦикла; +КонецПроцедуры + +Процедура РаспределитьЭлементыФормыНастроек(Элементы, Знач Группа, ЭлементыНастроек) + КоличествоКолонок = 0; + Если ЭлементыНастроек.Количество() > 0 Тогда + КоличествоКолонок = ЭлементыНастроек[ЭлементыНастроек.Количество() - 1].НомерКолонки; + КонецЕсли; + + Для НомерКолонки = 1 По КоличествоКолонок Цикл + ПризнакиЭлементов = ЭлементыНастроек.Скопировать(Новый Структура("НомерКолонки", НомерКолонки)); + ПризнакиЭлементов.Свернуть("ЭтоФлажок, ЭтоСписок, НомерГруппы"); + + ТолькоПоляВвода = ПризнакиЭлементов.Найти(Истина, "ЭтоФлажок") = Неопределено + И ПризнакиЭлементов.Найти(Истина, "ЭтоСписок") = Неопределено; + + ИмяКолонки = Группа.Имя + "Колонка" + НомерКолонки; + Колонка = ?(КоличествоКолонок = 1, Группа, Элементы.Найти(ИмяКолонки)); + Если Колонка = Неопределено Тогда + Колонка = ГруппаЭлементовФормыНастроек(Элементы, Группа, ИмяКолонки); + Колонка.Заголовок = "Колонка " + НомерКолонки; + + Если ТолькоПоляВвода Тогда + Колонка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + КонецЕсли; + КонецЕсли; + + Если ТолькоПоляВвода Тогда + РаспределитьЭлементыФормыНастроекПоСвойствам(Элементы, Колонка, ЭлементыНастроек, НомерКолонки); + Продолжить; + КонецЕсли; + + НомерСтроки = 0; + Для Каждого Признаки Из ПризнакиЭлементов Цикл + НомерСтроки = НомерСтроки + 1; + Родитель = ИерархияЭлементовФормыНастроек(Элементы, Колонка, Признаки, НомерСтроки, НомерКолонки); + + РаспределитьЭлементыФормыНастроекПоСвойствам(Элементы, Родитель, ЭлементыНастроек, НомерКолонки, Признаки.НомерГруппы); + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +Процедура РаспределитьЭлементыФормыНастроекПоСвойствам(Элементы, Родитель, ЭлементыНастроек, НомерКолонки, НомерГруппы = Неопределено) + СвойстваНастроек = СтрРазделить("Использование, ВидСравнения, Значение", ", ", Ложь); + Для Каждого СвойствоНастройки Из СвойстваНастроек Цикл + ИмяГруппы = Родитель.Имя + СвойствоНастройки; + Группа = ГруппаЭлементовФормыНастроек(Элементы, Родитель, ИмяГруппы); + Группа.Заголовок = СвойствоНастройки; + Группа.Видимость = (СвойствоНастройки <> "ВидСравнения"); + + Поиск = Новый Структура("СвойствоНастройки, НомерКолонки", СвойствоНастройки, НомерКолонки); + Если НомерГруппы <> Неопределено Тогда + Поиск.Вставить("НомерГруппы", НомерГруппы); + КонецЕсли; + + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Поиск); + Для Каждого Элемент Из НайденныеЭлементы Цикл + Группа.Объединенная = СвойствоНастройки = "Использование" И Элемент.ЭтоСписок; + Элементы.Переместить(Элемент.Поле, Группа); + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +Функция ИерархияЭлементовФормыНастроек(Элементы, Родитель, Признаки, НомерСтроки, НомерКолонки) + ИмяСтроки = Родитель.Имя + "Строка" + НомерСтроки; + Строка = ГруппаЭлементовФормыНастроек(Элементы, Родитель, ИмяСтроки); + Строка.Заголовок = "Строка " + НомерКолонки + "." + НомерСтроки; + + Если Не Признаки.ЭтоСписок Тогда + Строка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + КонецЕсли; + + Если Признаки.ЭтоФлажок Или Признаки.ЭтоСписок Тогда + Возврат Строка; + КонецЕсли; + + ИмяКолонки = Строка.Имя + "Колонка1"; + Колонка = ГруппаЭлементовФормыНастроек(Элементы, Строка, ИмяКолонки); + Колонка.Заголовок = "Колонка " + НомерКолонки + "." + НомерСтроки + ".1"; + Колонка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + + Возврат Колонка; +КонецФункции + +Функция ГруппаЭлементовФормыНастроек(Элементы, Родитель, ИмяГруппы) + Группа = Элементы.Найти(ИмяГруппы); + Если Группа <> Неопределено Тогда + Возврат Группа; + КонецЕсли; + + Группа = Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), Родитель); + Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + Группа.ОтображатьЗаголовок = Ложь; + Группа.Отображение = ОтображениеОбычнойГруппы.Нет; + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + + Возврат Группа; +КонецФункции + +// Вывод стилизованных элементов формы настроек. + +Процедура ВывестиСтилизованныеЭлементыФормыНастроек(Форма, ЭлементыНастроек, ОписаниеНастроек, ИменаРеквизитов, ВидыЭлементов) + // Изменение реквизитов. + ПутьКДаннымЭлементов = Новый Структура("ПоИмени, ПоИндексу", Новый Соответствие, Новый Соответствие); + + РеквизитыДобавляемые = РеквизитыДобавляемыеЭлементовНастроек(ЭлементыНастроек, ВидыЭлементов, ИменаРеквизитов, ПутьКДаннымЭлементов); + РеквизитыУдаляемые = РеквизитыУдаляемыеЭлементовНастроек(ВидыЭлементов, ИменаРеквизитов, ПутьКДаннымЭлементов); + + Форма.ИзменитьРеквизиты(РеквизитыДобавляемые, РеквизитыУдаляемые); + УдалитьКомандыЭлементовНастроек(Форма, РеквизитыУдаляемые); + + Форма.ПутьКДаннымЭлементов = ПутьКДаннымЭлементов; + + // Изменение элементов. + ВывестиПериодыНастроек(Форма, ЭлементыНастроек, ИменаРеквизитов); + ВывестиСпискиНастроек(Форма, ЭлементыНастроек, ОписаниеНастроек, ИменаРеквизитов); + ВывестиЗначенияКакПоляФлажков(Форма, ЭлементыНастроек, ИменаРеквизитов); +КонецПроцедуры + +Функция РеквизитыДобавляемыеЭлементовНастроек(ЭлементыНастроек, ВидыЭлементов, ИменаРеквизитов, ПутьКДаннымЭлементов) + РеквизитыДобавляемые = Новый Массив; + + ТипыЭлементов = Новый Структура; + ТипыЭлементов.Вставить("Период", Новый ОписаниеТипов("СтандартныйПериод")); + ТипыЭлементов.Вставить("Список", Новый ОписаниеТипов("СписокЗначений")); + ТипыЭлементов.Вставить("Флажок", Новый ОписаниеТипов("Булево")); + + ПризнакиВидовЭлементов = Новый Структура("Период, Список, Флажок", "ЭтоПериод", "ЭтоСписок", "ЭтоЗначениеКакФлажок"); + СвойстваВидовЭлементов = Новый Структура("Период, Список, Флажок", "Значение", "Значение", "Использование"); + + Для Каждого ВидЭлемента Из ВидыЭлементов Цикл + Признак = ПризнакиВидовЭлементов[ВидЭлемента]; + + Сгенерированные = ИменаРеквизитов.Сгенерированных[ВидЭлемента]; + Предопределенные = ИменаРеквизитов.Предопределенных[ВидЭлемента]; + + ИндексПредопределенных = -1; + ГраницаПредопределенных = Предопределенные.ВГраница(); + + Поиск = Новый Структура; + Поиск.Вставить(Признак, Истина); + Поиск.Вставить("СвойствоНастройки", "Значение"); + + НайденныеЭлементы = ЭлементыНастроек.Скопировать(Поиск); + Для Каждого Элемент Из НайденныеЭлементы Цикл + Если ГраницаПредопределенных >= НайденныеЭлементы.Индекс(Элемент) Тогда + ИндексПредопределенных = ИндексПредопределенных + 1; + ПутьКДаннымЭлементов.ПоИмени.Вставить(Предопределенные[ИндексПредопределенных], Элемент.ИндексНастройки); + ПутьКДаннымЭлементов.ПоИндексу.Вставить(Элемент.ИндексНастройки, Предопределенные[ИндексПредопределенных]); + Продолжить; + КонецЕсли; + + ЗаголовокЭлемента = Элемент.Поле.Заголовок; + ШаблонИмениЭлемента = СтрЗаменить(Элемент.Поле.Имя, СвойстваВидовЭлементов[ВидЭлемента], "%1"); + + ИмяРеквизита = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, ВидЭлемента); + Если Сгенерированные.Найти(ИмяРеквизита) = Неопределено Тогда + ТипЭлемента = Элемент.ТипЗначения; + ТипыЭлементов.Свойство(ВидЭлемента, ТипЭлемента); + + РеквизитыДобавляемые.Добавить(Новый РеквизитФормы(ИмяРеквизита, ТипЭлемента,, ЗаголовокЭлемента)); + КонецЕсли; + + ПутьКДаннымЭлементов.ПоИмени.Вставить(ИмяРеквизита, Элемент.ИндексНастройки); + ПутьКДаннымЭлементов.ПоИндексу.Вставить(Элемент.ИндексНастройки, ИмяРеквизита); + КонецЦикла; + КонецЦикла; + + Возврат РеквизитыДобавляемые; +КонецФункции + +Функция РеквизитыУдаляемыеЭлементовНастроек(ВидыЭлементов, ИменаРеквизитов, ПутьКДаннымЭлементов) + РеквизитыУдаляемые = Новый Массив; + + Для Каждого ВидЭлемента Из ВидыЭлементов Цикл + Сгенерированные = ИменаРеквизитов.Сгенерированных[ВидЭлемента]; + Для Каждого ИмяРеквизита Из Сгенерированные Цикл + Если ПутьКДаннымЭлементов.ПоИмени[ИмяРеквизита] = Неопределено Тогда + РеквизитыУдаляемые.Добавить(ИмяРеквизита); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат РеквизитыУдаляемые; +КонецФункции + +Процедура УдалитьКомандыЭлементовНастроек(Форма, РеквизитыУдаляемые) + СуффиксыКоманд = СтрРазделить("ВыбратьПериод, Подбор, ВставитьИзБуфера", ", ", Ложь); + + Для Каждого ИмяРеквизита Из РеквизитыУдаляемые Цикл + Для Каждого Суффикс Из СуффиксыКоманд Цикл + Команда = Форма.Команды.Найти(ИмяРеквизита + Суффикс); + Если Команда <> Неопределено Тогда + Форма.Команды.Удалить(Команда); + КонецЕсли; + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +// Вывод периодов элементов формы настроек + +Процедура ВывестиПериодыНастроек(Форма, ЭлементыНастроек, ИменаРеквизитов) + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Новый Структура("ЭтоПериод, СвойствоНастройки", Истина, "Значение")); + Если НайденныеЭлементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Элементы = Форма.Элементы; + ИменаРеквизитовПредопределенных = ИменаРеквизитов.Предопределенных.Период; + + Для Каждого Элемент Из НайденныеЭлементы Цикл + СвязанныеЭлементы = ЭлементыНастроек.НайтиСтроки(Новый Структура("ИндексНастройки", Элемент.ИндексНастройки)); + Для Каждого СвязанныйЭлемент Из СвязанныеЭлементы Цикл + СвязанныйЭлемент.Поле.Видимость = (СвязанныйЭлемент.СвойствоНастройки = "Использование"); + КонецЦикла; + + ИнициализироватьПериод(Форма, Элемент.ИндексНастройки); + + Поле = Элемент.Поле; + Родитель = Поле.Родитель; + + СледующийЭлемент = Неопределено; + ИндексЭлемента = Родитель.ПодчиненныеЭлементы.Индекс(Поле); + Если Родитель.ПодчиненныеЭлементы.Количество() > ИндексЭлемента + 1 Тогда + СледующийЭлемент = Родитель.ПодчиненныеЭлементы.Получить(ИндексЭлемента + 1); + КонецЕсли; + + ИмяРеквизита = Форма.ПутьКДаннымЭлементов.ПоИндексу[Элемент.ИндексНастройки]; + Если ИменаРеквизитовПредопределенных.Найти(ИмяРеквизита) <> Неопределено Тогда + НайденныйЭлемент = Элементы.Найти(ИмяРеквизита); + Элементы.Переместить(НайденныйЭлемент, Родитель, СледующийЭлемент); + НайденныйЭлемент.Видимость = Истина; + Продолжить; + КонецЕсли; + + ШаблонИмениЭлемента = СтрЗаменить(Поле.Имя, "Значение", "%1%2"); + + Группа = ГруппаЭлементовПериода(Элементы, Родитель, СледующийЭлемент, ШаблонИмениЭлемента, Поле.Заголовок); + ДобавитьЭлементПериода(Элементы, Группа, ШаблонИмениЭлемента, "ДатаНачала", Поле.Заголовок); + + ИмяЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Разделитель"); + Разделитель = Элементы.Найти(ИмяЭлемента); + Если Разделитель = Неопределено Тогда + Разделитель = Элементы.Добавить(ИмяЭлемента, Тип("ДекорацияФормы"), Группа); + КонецЕсли; + Разделитель.Вид = ВидДекорацииФормы.Надпись; + Разделитель.Заголовок = Символ(8211); // Среднее тире (en dash). + + ДобавитьЭлементПериода(Элементы, Группа, ШаблонИмениЭлемента, "ДатаОкончания", Поле.Заголовок); + ДобавитьКомандуВыбораПериода(Форма, Группа, ШаблонИмениЭлемента); + КонецЦикла; +КонецПроцедуры + +Функция ГруппаЭлементовПериода(Элементы, Родитель, СледующийЭлемент, ШаблонИмени, Заголовок) + ИмяЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмени, "", "Период"); + + Группа = Элементы.Найти(ИмяЭлемента); + Если Группа = Неопределено Тогда + Группа = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), Родитель); + КонецЕсли; + Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + Группа.Отображение = ОтображениеОбычнойГруппы.Нет; + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + Группа.Заголовок = Заголовок; + Группа.ОтображатьЗаголовок = Ложь; + Группа.РазрешитьИзменениеСостава = Ложь; + + Если СледующийЭлемент <> Неопределено Тогда + Элементы.Переместить(Группа, Родитель, СледующийЭлемент); + КонецЕсли; + + Возврат Группа; +КонецФункции + +Процедура ДобавитьЭлементПериода(Элементы, Группа, ШаблонИмени, Свойство, ЗаголовокЭлементаНастройки) + ИмяЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмени, "", Свойство); + + ШаблонЗаголовка = "%1 (дата %2)"; + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗаголовка, ЗаголовокЭлементаНастройки, ?(СтрЗаканчиваетсяНа(Свойство, "Начала"), "начала", "окончания")); + + Элемент = Элементы.Найти(ИмяЭлемента); + Если Элемент = Неопределено Тогда + Элемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), Группа); + КонецЕсли; + Элемент.Вид = ВидПоляФормы.ПолеВвода; + Элемент.ПутьКДанным = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмени, "Период.", Свойство); + Элемент.Ширина = 9; + Элемент.РастягиватьПоГоризонтали = Ложь; + Элемент.КнопкаВыбора = Истина; + Элемент.КнопкаОткрытия = Ложь; + Элемент.КнопкаОчистки = Ложь; + Элемент.КнопкаРегулирования = Ложь; + Элемент.РедактированиеТекста = Истина; + Элемент.Заголовок = Заголовок; + Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_Период_ПриИзменении"); +КонецПроцедуры + +Процедура ДобавитьКомандуВыбораПериода(Форма, Группа, ШаблонИмени) + ИмяЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмени, "", "ВыбратьПериод"); + + Команда = Форма.Команды.Найти(ИмяЭлемента); + Если Команда = Неопределено Тогда + Команда = Форма.Команды.Добавить(ИмяЭлемента); + КонецЕсли; + Команда.Действие = "Подключаемый_ВыбратьПериод"; + Команда.Заголовок = НСтр("ru = 'Выбрать период...'"); + Команда.Подсказка = Команда.Заголовок; + Команда.Отображение = ОтображениеКнопки.Картинка; + Команда.Картинка = БиблиотекаКартинок.Выбрать; + + Кнопка = Форма.Элементы.Найти(ИмяЭлемента); + Если Кнопка = Неопределено Тогда + Кнопка = Форма.Элементы.Добавить(ИмяЭлемента, Тип("КнопкаФормы"), Группа); + КонецЕсли; + Кнопка.ИмяКоманды = ИмяЭлемента; +КонецПроцедуры + +Процедура ИнициализироватьПериод(Форма, Индекс) + ПользовательскиеНастройки = Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + ЭлементНастройки = ПользовательскиеНастройки.Элементы[Индекс]; + + Путь = Форма.ПутьКДаннымЭлементов.ПоИндексу[Индекс]; + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Форма[Путь] = ЭлементНастройки.Значение; + Иначе // Элемент отбора. + Форма[Путь] = ЭлементНастройки.ПравоеЗначение; КонецЕсли; КонецПроцедуры -Процедура ВывестиПоПорядку(Форма, ГруппаВывода, Родитель, КоличествоКолонок, ГибкаяБалансировка = Истина) Экспорт - Элементы = Форма.Элементы; - Если ГибкаяБалансировка Тогда - Если ГруппаВывода.Размер <= 7 Тогда - КоличествоКолонок = 1; +// Вывод списков элементов формы настроек + +Процедура ВывестиСпискиНастроек(Форма, ЭлементыНастроек, ОписаниеНастроек, ИменаРеквизитов) + Поиск = Новый Структура("ЭтоСписок, СвойствоНастройки", Истина, "Значение"); + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Поиск); + Если НайденныеЭлементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Элемент Из НайденныеЭлементы Цикл + Элемент.Поле.Видимость = Ложь; + Описание = ОписаниеНастроек.Найти(Элемент.ИндексНастройки, "ИндексНастройки"); + + ИмяСписка = Форма.ПутьКДаннымЭлементов.ПоИндексу[Элемент.ИндексНастройки]; + + ДобавитьЭлементыСписка(Форма, Элемент, Описание, ИмяСписка, ИменаРеквизитов); + ДобавитьКомандыСписка(Форма, Элемент, ЭлементыНастроек, ИмяСписка); + КонецЦикла; +КонецПроцедуры + +Процедура ДобавитьЭлементыСписка(Форма, ЭлементНастройки, ОписаниеЭлементаНастройки, ИмяСписка, ИменаРеквизитов) + Элементы = Форма.Элементы; + Поле = ЭлементНастройки.Поле; + + ИменаРеквизитовПредопределенных = ИменаРеквизитов.Предопределенных.Список; + + Если ИменаРеквизитовПредопределенных.Найти(ИмяСписка) = Неопределено Тогда + Список = Элементы.Добавить(ИмяСписка, Тип("ТаблицаФормы"), Поле.Родитель); + Список.ПутьКДанным = ИмяСписка; + Список.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; + Список.Высота = 3; + Список.УстановитьДействие("ПриИзменении", "Подключаемый_Список_ПриИзменении"); + Список.УстановитьДействие("ОбработкаВыбора", "Подключаемый_Список_ОбработкаВыбора"); + + ПоляСписка = Элементы.Добавить(Список.Имя + "Колонки", Тип("ГруппаФормы"), Список); + ПоляСписка.Вид = ВидГруппыФормы.ГруппаКолонок; + ПоляСписка.Группировка = ГруппировкаКолонок.ВЯчейке; + ПоляСписка.Заголовок = "Поля"; + ПоляСписка.ОтображатьЗаголовок = Ложь; + + ПолеПометки = Элементы.Добавить(ИмяСписка + "Пометка", Тип("ПолеФормы"), ПоляСписка); + ПолеПометки.Вид = ВидПоляФормы.ПолеФлажка; + ПолеПометки.ПутьКДанным = ИмяСписка + ".Пометка"; + + ПолеЗначения = Элементы.Добавить(ИмяСписка + "Значение", Тип("ПолеФормы"), ПоляСписка); + ПолеЗначения.Вид = ВидПоляФормы.ПолеВвода; + ПолеЗначения.ПутьКДанным = ИмяСписка + ".Значение"; + ПолеЗначения.УстановитьДействие("ПриИзменении", "Подключаемый_ЭлементСписка_ПриИзменении"); + ПолеЗначения.УстановитьДействие("НачалоВыбора", "Подключаемый_ЭлементСписка_НачалоВыбора"); + Иначе + Список = Элементы.Найти(ИмяСписка); + Список.Видимость = Истина; + + ПоляСписка = Элементы.Найти(Список.Имя + "Колонки"); + ПолеЗначения = Элементы.Найти(Список.Имя + "Значение"); + + Элементы.Переместить(Список, Поле.Родитель); + КонецЕсли; + + Список.Заголовок = Поле.Заголовок; + + Свойства = "ДоступныеТипы, ОграничениеТипа, АвтоОтметкаНезаполненного, СвязиПараметровВыбора, СвязьПоТипу"; + ЗаполнитьЗначенияСвойств(ПолеЗначения, Поле, Свойства); + + ОтчетыКлиентСервер.ДополнитьСписок(ПолеЗначения.СписокВыбора, Поле.СписокВыбора, Ложь, Истина); + + ПолеЗначения.БыстрыйВыбор = ОписаниеЭлементаНастройки.ОписаниеНастройки.БыстрыйВыбор; + + Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки( + ОписаниеЭлементаНастройки.ЭлементНастройки, ОписаниеЭлементаНастройки.ОписаниеНастройки); + ПолеЗначения.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы( + ОписаниеЭлементаНастройки.ОписаниеНастройки.ВыборГруппИЭлементов, Условие); + + ПолеЗначения.ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора( + ОписаниеЭлементаНастройки.Настройки, + Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы, + ОписаниеЭлементаНастройки.ЭлементНастройки); + + ИнициализироватьСписок(Форма, ЭлементНастройки.ИндексНастройки, ПолеЗначения, ОписаниеЭлементаНастройки.ЭлементНастройки); + + Если Поле.СписокВыбора.Количество() > 0 Тогда + Список.ИзменятьСоставСтрок = Ложь; + ПолеЗначения.ТолькоПросмотр = Истина; + КонецЕсли; +КонецПроцедуры + +Процедура ДобавитьКомандыСписка(Форма, ЭлементНастройки, ЭлементыНастроек, ИмяСписка) + Элементы = Форма.Элементы; + + Поиск = Новый Структура("СвойствоНастройки, ИндексНастройки", "Использование"); + Поиск.ИндексНастройки = ЭлементНастройки.ИндексНастройки; + + ПолеЗаголовка = ЭлементыНастроек.НайтиСтроки(Поиск)[0].Поле; + ГруппаЗаголовка = ПолеЗаголовка.Родитель; + ГруппаЗаголовка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + + ГруппаСписка = ГруппаЗаголовка.Родитель; + ГруппаСписка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; + + Если Не Элементы[ИмяСписка].ИзменятьСоставСтрок Тогда + Возврат; + КонецЕсли; + + ИмяЭлемента = ИмяСписка + "Отступ"; + Отступ = Элементы.Найти(ИмяЭлемента); + Если Отступ = Неопределено Тогда + Отступ = Элементы.Добавить(ИмяЭлемента, Тип("ДекорацияФормы"), ГруппаЗаголовка); + ИначеЕсли Отступ.Родитель <> ГруппаЗаголовка Тогда + Элементы.Переместить(Отступ, ГруппаЗаголовка); + КонецЕсли; + Отступ.Вид = ВидДекорацииФормы.Надпись; + Отступ.Заголовок = " "; + Отступ.РастягиватьПоГоризонтали = Истина; + Отступ.АвтоМаксимальнаяШирина = Ложь; + Отступ.Видимость = Истина; + + ИмяКоманды = ИмяСписка + "Подбор"; + ЗаголовокКоманды = НСтр("ru = 'Подбор'"); + ДобавитьКомандуСписка(Форма, ГруппаЗаголовка, ИмяКоманды, ЗаголовокКоманды, "Подключаемый_Список_Подбор"); + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла") Тогда + Возврат; + КонецЕсли; + + ИмяКоманды = ИмяСписка + "ВставитьИзБуфера"; + ЗаголовокКоманды = НСтр("ru = 'Вставить из буфера обмена...'"); + ДобавитьКомандуСписка(Форма, ГруппаЗаголовка, ИмяКоманды, ЗаголовокКоманды, + "Подключаемый_Список_ВставитьИзБуфера", БиблиотекаКартинок.ВставитьИзБуфераОбмена); +КонецПроцедуры + +Процедура ДобавитьКомандуСписка(Форма, Родитель, ИмяКоманды, Заголовок, Действие, Картинка = Неопределено) + Команда = Форма.Команды.Найти(ИмяКоманды); + Если Команда = Неопределено Тогда + Команда = Форма.Команды.Добавить(ИмяКоманды); + КонецЕсли; + Команда.Действие = Действие; + Команда.Заголовок = Заголовок; + Команда.Подсказка = Заголовок; + + Если Картинка = Неопределено Тогда + Команда.Отображение = ОтображениеКнопки.Текст; + Иначе + Команда.Отображение = ОтображениеКнопки.Картинка; + Команда.Картинка = БиблиотекаКартинок.ВставитьИзБуфераОбмена; + КонецЕсли; + + Кнопка = Форма.Элементы.Найти(ИмяКоманды); + Если Кнопка = Неопределено Тогда + Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Родитель); + ИначеЕсли Кнопка.Родитель <> Родитель Тогда + Форма.Элементы.Переместить(Кнопка, Родитель); + КонецЕсли; + Кнопка.ИмяКоманды = ИмяКоманды; + Кнопка.Вид = ВидКнопкиФормы.Гиперссылка; + Кнопка.Видимость = Истина; +КонецПроцедуры + +Процедура ИнициализироватьСписок(Форма, Индекс, Поле, ЭлементНастройки) + ПользовательскиеНастройки = Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + ЭлементНастройки = ПользовательскиеНастройки.Элементы[Индекс]; + + Путь = Форма.ПутьКДаннымЭлементов.ПоИндексу[Индекс]; + Список = Форма[Путь]; + Список.ТипЗначения = Поле.ДоступныеТипы; + Список.Очистить(); + + ИмяПоляЗначения = "ПравоеЗначение"; + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ИмяПоляЗначения = "Значение"; + КонецЕсли; + + ВыбранныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(ЭлементНастройки[ИмяПоляЗначения], Истина); + Если ВыбранныеЗначения.Количество() > 0 Тогда + ЭлементНастройки[ИмяПоляЗначения] = ВыбранныеЗначения; + Иначе + ВыбранныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(ЭлементНастройки[ИмяПоляЗначения], Истина); + Если ВыбранныеЗначения.Количество() > 0 Тогда + // При выполнении метода СоздатьЭлементыФормыПользовательскихНастроек() + // сбрасывается значение пользовательской настройки. + ЭлементНастройки[ИмяПоляЗначения] = ВыбранныеЗначения; КонецЕсли; КонецЕсли; - РодительИмя = Родитель.Имя; + ДоступныеЗначения = Новый СписокЗначений; + Если Поле.БыстрыйВыбор = Истина Тогда + ПараметрыСписка = Новый Структура("ПараметрыВыбора, ОписаниеТипов", Поле.ПараметрыВыбора, Поле.ДоступныеТипы); + ДоступныеЗначения = ЗначенияДляВыбора(ПараметрыСписка); + КонецЕсли; - НомерКолонки = 0; - ОсталосьКолонок = КоличествоКолонок + 1; - ОсталосьМестаВсего = ГруппаВывода.Размер; - ОсталосьМестаВКолонке = 0; + Если ДоступныеЗначения.Количество() = 0 Тогда + ДоступныеЗначения = Поле.СписокВыбора; + КонецЕсли; - Для Каждого ЭлементВывода Из ГруппаВывода.Порядок Цикл - Если ОсталосьКолонок > 0 - И ЭлементВывода.Размер > ОсталосьМестаВКолонке*4 Тогда // Текущий шаг больше оставшегося места. - НомерКолонки = НомерКолонки + 1; - ОсталосьКолонок = ОсталосьКолонок - 1; - ОсталосьМестаВКолонке = ОсталосьМестаВсего/ОсталосьКолонок; - - КолонкаВерхнегоУровня = Элементы.Добавить(РодительИмя + НомерКолонки, Тип("ГруппаФормы"), Элементы[РодительИмя]); - КолонкаВерхнегоУровня.Вид = ВидГруппыФормы.ОбычнаяГруппа; - КолонкаВерхнегоУровня.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; - КолонкаВерхнегоУровня.Отображение = ОтображениеОбычнойГруппы.Нет; - КолонкаВерхнегоУровня.ОтображатьЗаголовок = Ложь; - - НомерПодгруппы = 0; - ТекущаяГруппа1 = Неопределено; - ТекущаяГруппа2 = Неопределено; + ОтчетыКлиентСервер.ДополнитьСписок(Список, ДоступныеЗначения, Ложь, Истина); + ОтчетыКлиентСервер.ДополнитьСписок(Список, ВыбранныеЗначения, Ложь, Истина); + + Для Каждого ЭлементСписка Из Список Цикл + Если Не ЗначениеЗаполнено(ЭлементСписка.Значение) Тогда + Продолжить; КонецЕсли; - Если ЭлементВывода.ИмяЭлемента2 = Неопределено Тогда - // Вывод в одну колонку. - ТекущаяГруппа2 = Неопределено; - Элементы.Переместить(Элементы[ЭлементВывода.ИмяЭлемента1], КолонкаВерхнегоУровня); - Иначе - // Вывод в две колонки. - Если ТекущаяГруппа2 = Неопределено Тогда - НомерПодгруппы = НомерПодгруппы + 1; - - Колонки = Элементы.Добавить(РодительИмя + НомерКолонки + "_" + НомерПодгруппы, Тип("ГруппаФормы"), КолонкаВерхнегоУровня); - Колонки.Вид = ВидГруппыФормы.ОбычнаяГруппа; - Колонки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; - Колонки.Отображение = ОтображениеОбычнойГруппы.Нет; - Колонки.ОтображатьЗаголовок = Ложь; - - ТекущаяГруппа1 = Элементы.Добавить(РодительИмя + НомерКолонки + "_" + НомерПодгруппы + "_1", Тип("ГруппаФормы"), Колонки); - ТекущаяГруппа1.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ТекущаяГруппа1.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; - ТекущаяГруппа1.Отображение = ОтображениеОбычнойГруппы.Нет; - ТекущаяГруппа1.ОтображатьЗаголовок = Ложь; - ТекущаяГруппа1.Объединенная = Ложь; - - ТекущаяГруппа2 = Элементы.Добавить(РодительИмя + НомерКолонки + "_" + НомерПодгруппы + "_2", Тип("ГруппаФормы"), Колонки); - ТекущаяГруппа2.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ТекущаяГруппа2.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; - ТекущаяГруппа2.Отображение = ОтображениеОбычнойГруппы.Нет; - ТекущаяГруппа2.ОтображатьЗаголовок = Ложь; - ТекущаяГруппа2.Объединенная = Ложь; - КонецЕсли; - Элементы.Переместить(Элементы[ЭлементВывода.ИмяЭлемента1], ТекущаяГруппа1); - Элементы.Переместить(Элементы[ЭлементВывода.ИмяЭлемента2], ТекущаяГруппа2); + НайденныйЭлемент = ДоступныеЗначения.НайтиПоЗначению(ЭлементСписка.Значение); + Если НайденныйЭлемент <> Неопределено Тогда + ЭлементСписка.Представление = НайденныйЭлемент.Представление; КонецЕсли; - ОсталосьМестаВсего = ОсталосьМестаВсего - ЭлементВывода.Размер; - ОсталосьМестаВКолонке = ОсталосьМестаВКолонке - ЭлементВывода.Размер; + НайденныйЭлемент = ВыбранныеЗначения.НайтиПоЗначению(ЭлементСписка.Значение); + ЭлементСписка.Пометка = (НайденныйЭлемент <> Неопределено); КонецЦикла; + + ПолеСписка = Форма.Элементы[Путь]; + ПолеСписка.ЦветТекста = ?(ЭлементНастройки.Использование, Новый Цвет, ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); +КонецПроцедуры + +// Вывод значений как поля флажков. + +Процедура ВывестиЗначенияКакПоляФлажков(Форма, ЭлементыНастроек, ИменаРеквизитов) + Поиск = Новый Структура("ЭтоЗначениеКакФлажок, СвойствоНастройки", Истина, "Использование"); + НайденныеЭлементы = ЭлементыНастроек.НайтиСтроки(Поиск); + Если НайденныеЭлементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Элементы = Форма.Элементы; + ИменаРеквизитовПредопределенных = ИменаРеквизитов.Предопределенных.Флажок; + + Для Каждого Элемент Из НайденныеЭлементы Цикл + Поле = Элемент.Поле; + + ИмяРеквизита = Форма.ПутьКДаннымЭлементов.ПоИндексу[Элемент.ИндексНастройки]; + Если ИменаРеквизитовПредопределенных.Найти(ИмяРеквизита) = Неопределено Тогда + ПолеФлажка = Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Поле.Родитель); + ПолеФлажка.Вид = ВидПоляФормы.ПолеФлажка; + ПолеФлажка.ПутьКДанным = ИмяРеквизита; + ПолеФлажка.УстановитьДействие("ПриИзменении", "Подключаемый_ЭлементНастройки_ПриИзменении"); + Иначе + ПолеФлажка = Элементы.Найти(ИмяРеквизита); + Элементы.Переместить(ПолеФлажка, Поле.Родитель); + ПолеФлажка.Видимость = Истина; + КонецЕсли; + + ПолеФлажка.Заголовок = Поле.Заголовок; + ПолеФлажка.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + Элемент.Поле = ПолеФлажка; + + ИнициализироватьФлажок(Форма, Элемент.ИндексНастройки); + КонецЦикла; +КонецПроцедуры + +Процедура ИнициализироватьФлажок(Форма, Индекс) + ПользовательскиеНастройки = Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + ЭлементНастройки = ПользовательскиеНастройки.Элементы[Индекс]; + + Путь = Форма.ПутьКДаннымЭлементов.ПоИндексу[Индекс]; + Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Форма[Путь] = ЭлементНастройки.Значение; + Иначе // Элемент отбора. + Форма[Путь] = ЭлементНастройки.ПравоеЗначение; + КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -2442,404 +3827,6 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Период - -Функция АнализСтандартногоПериода(Знач Вариант) - Результат = Новый Структура("ВидПериода, СдвигПериода"); - - Если Вариант = ВариантСтандартногоПериода.ЭтотГод Тогда - Результат.ВидПериода = "Год"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйГод Тогда - Результат.ВидПериода = "Год"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийГод Тогда - Результат.ВидПериода = "Год"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтогоГода Тогда - Результат.ВидПериода = "СНачалаГода"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйГодДоТакойЖеДаты Тогда - Результат.ВидПериода = "СНачалаГода"; - Результат.СдвигПериода = -1 - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийГодДоТакойЖеДаты Тогда - Результат.ВидПериода = "СНачалаГода"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоГода Тогда - Результат.ВидПериода = "ДоКонцаГода"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ЭтоПолугодие Тогда - Результат.ВидПериода = "Полугодие"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлоеПолугодие Тогда - Результат.ВидПериода = "Полугодие"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующееПолугодие Тогда - Результат.ВидПериода = "Полугодие"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтогоПолугодия Тогда - Результат.ВидПериода = "СНачалаПолугодия"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлоеПолугодиеДоТакойЖеДаты Тогда - Результат.ВидПериода = "СНачалаПолугодия"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующееПолугодиеДоТакойЖеДаты Тогда - Результат.ВидПериода = "СНачалаПолугодия"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоПолугодия Тогда - Результат.ВидПериода = "ДоКонцаПолугодия"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ЭтотКвартал Тогда - Результат.ВидПериода = "Квартал"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйКвартал Тогда - Результат.ВидПериода = "Квартал"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийКвартал Тогда - Результат.ВидПериода = "Квартал"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтогоКвартала Тогда - Результат.ВидПериода = "СНачалаКвартала"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйКварталДоТакойЖеДаты Тогда - Результат.ВидПериода = "СНачалаКвартала"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийКварталДоТакойЖеДаты Тогда - Результат.ВидПериода = "СНачалаКвартала"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоКвартала Тогда - Результат.ВидПериода = "ДоКонцаКвартала"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ЭтотМесяц Тогда - Результат.ВидПериода = "Месяц"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйМесяц Тогда - Результат.ВидПериода = "Месяц"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийМесяц Тогда - Результат.ВидПериода = "Месяц"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.Месяц Тогда - Результат.ВидПериода = "ПоследнийМесяц"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтогоМесяца Тогда - Результат.ВидПериода = "СНачалаМесяца"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлыйМесяцДоТакойЖеДаты Тогда - Результат.ВидПериода = "СНачалаМесяца"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующийМесяцДоТакойЖеДаты Тогда - Результат.ВидПериода = "СНачалаМесяца"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтогоМесяца Тогда - Результат.ВидПериода = "ДоКонцаМесяца"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ЭтаДекада Тогда - Результат.ВидПериода = "Декада"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлаяДекада Тогда - Результат.ВидПериода = "Декада"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующаяДекада Тогда - Результат.ВидПериода = "Декада"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтойДекады Тогда - Результат.ВидПериода = "СНачалаДекады"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлаяДекадаДоТакогоЖеНомераДня Тогда - Результат.ВидПериода = "СНачалаДекады"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующаяДекадаДоТакогоЖеНомераДня Тогда - Результат.ВидПериода = "СНачалаДекады"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтойДекады Тогда - Результат.ВидПериода = "ДоКонцаДекады"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ЭтаНеделя Тогда - Результат.ВидПериода = "Неделя"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлаяНеделя Тогда - Результат.ВидПериода = "Неделя"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующаяНеделя Тогда - Результат.ВидПериода = "Неделя"; - Результат.СдвигПериода = 1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.Последние7Дней Тогда - Результат.ВидПериода = "Последние7Дней"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.Следующие7Дней Тогда - Результат.ВидПериода = "Следующие7Дней"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СНачалаЭтойНедели Тогда - Результат.ВидПериода = "СНачалаНедели"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ПрошлаяНеделяДоТакогоЖеДняНедели Тогда - Результат.ВидПериода = "СНачалаНедели"; - Результат.СдвигПериода = -1 - - ИначеЕсли Вариант = ВариантСтандартногоПериода.СледующаяНеделяДоТакогоЖеДняНедели Тогда - Результат.ВидПериода = "СНачалаНедели"; - Результат.СдвигПериода = 1 - - ИначеЕсли Вариант = ВариантСтандартногоПериода.ДоКонцаЭтойНедели Тогда - Результат.ВидПериода = "ДоКонцаНедели"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.Сегодня Тогда - Результат.ВидПериода = "День"; - Результат.СдвигПериода = 0; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.Вчера Тогда - Результат.ВидПериода = "День"; - Результат.СдвигПериода = -1; - - ИначеЕсли Вариант = ВариантСтандартногоПериода.Завтра Тогда - Результат.ВидПериода = "День"; - Результат.СдвигПериода = 1; - - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция АнализПроизвольногоПериода(Знач НачалоПериода, Знач КонецПериода) - Результат = Новый Структура("ВидПериода, СдвигПериода"); - - НачалоПериода = НачалоДня(НачалоПериода); - КонецПериода = НачалоДня(КонецПериода); - Сегодня = НачалоДня(ТекущаяДатаСеанса()); - ДнейВПериоде = (КонецПериода - НачалоПериода) / 86400 + 1; - КонецСдвигВДнях = (КонецПериода - Сегодня) / 86400; - - Если ДнейВПериоде = 1 Тогда - Результат.ВидПериода = "День"; - Результат.СдвигПериода = КонецСдвигВДнях; - Возврат Результат; - КонецЕсли; - - Если ДнейВПериоде <= 7 Тогда - НачалоДеньНедели = ДеньНедели(НачалоПериода); - КонецДеньНедели = ДеньНедели(КонецПериода); - ТекущийДеньНедели = ДеньНедели(Сегодня); - Если НачалоДеньНедели = 1 И КонецДеньНедели = 7 Тогда - Результат.ВидПериода = "Неделя"; - Результат.СдвигПериода = (НачалоНедели(КонецПериода) - НачалоНедели(Сегодня)) / 604800; - ИначеЕсли НачалоДеньНедели = 1 И КонецДеньНедели = ТекущийДеньНедели Тогда - Результат.ВидПериода = "СНачалаНедели"; - Результат.СдвигПериода = (НачалоНедели(КонецПериода) - НачалоНедели(Сегодня)) / 604800; - ИначеЕсли НачалоДеньНедели = ТекущийДеньНедели И КонецДеньНедели = 7 Тогда - Результат.ВидПериода = "ДоКонцаНедели"; - Результат.СдвигПериода = (НачалоНедели(КонецПериода) - НачалоНедели(Сегодня)) / 604800; - ИначеЕсли КонецДеньНедели = ТекущийДеньНедели И ДнейВПериоде = 7 Тогда - Результат.ВидПериода = "Последние7Дней"; - Результат.СдвигПериода = (НачалоНедели(КонецПериода) - НачалоНедели(Сегодня)) / 604800; - ИначеЕсли НачалоДеньНедели = ТекущийДеньНедели И ДнейВПериоде = 7 Тогда - Результат.ВидПериода = "Следующие7Дней"; - Результат.СдвигПериода = (НачалоНедели(НачалоПериода) - НачалоНедели(Сегодня)) / 604800; - КонецЕсли; - Если Результат.ВидПериода <> Неопределено Тогда - Возврат Результат; - КонецЕсли; - КонецЕсли; - - КонецНомерГода = Год(КонецПериода); - ТекущийНомерГода = Год(Сегодня); - - НачалоНомерМесяца = Месяц(НачалоПериода); - КонецНомерМесяца = Месяц(КонецПериода); - ТекущийНомерМесяца = Месяц(Сегодня); - - КонецСдвигВГодах = КонецНомерГода - ТекущийНомерГода; - КонецСдвигВМесяцах = КонецСдвигВГодах*12 + КонецНомерМесяца - ТекущийНомерМесяца; - - НачалоДеньМесяца = День(НачалоПериода); - КонецДеньМесяца = День(КонецПериода); - ТекущийДеньМесяца = День(Сегодня); - - КонецЭтоПоследнийДеньМесяца = КонецДеньМесяца >= 27 И КонецДеньМесяца = День(КонецМесяца(КонецПериода)); - - Если ДнейВПериоде <= 31 Тогда - Если НачалоДеньМесяца = 1 И КонецЭтоПоследнийДеньМесяца Тогда - Результат.ВидПериода = "Месяц"; - Результат.СдвигПериода = КонецСдвигВМесяцах; - Возврат Результат; - ИначеЕсли НачалоДеньМесяца = 1 И КонецДеньМесяца = ТекущийДеньМесяца Тогда - Результат.ВидПериода = "СНачалаМесяца"; - Результат.СдвигПериода = КонецСдвигВМесяцах; - Возврат Результат; - ИначеЕсли НачалоДеньМесяца = ТекущийДеньМесяца И КонецЭтоПоследнийДеньМесяца Тогда - Результат.ВидПериода = "ДоКонцаМесяца"; - Результат.СдвигПериода = КонецСдвигВМесяцах; - Возврат Результат; - ИначеЕсли КонецДеньМесяца = ТекущийДеньМесяца И НачалоПериода = ДобавитьМесяц(КонецПериода + 86400, -1) Тогда - Результат.ВидПериода = "ПоследнийМесяц"; - Результат.СдвигПериода = КонецСдвигВМесяцах; - Возврат Результат; - КонецЕсли; - КонецЕсли; - - Если ДнейВПериоде <= 93 Тогда // Легкая оптимизация вычислений. - НачалоНомерМесяцаВКвартале = (НачалоНомерМесяца-1)%3 + 1; - КонецНомерМесяцаВКвартале = (КонецНомерМесяца-1)%3 + 1; - - НачалоЭтоНачалоКвартала = (НачалоНомерМесяцаВКвартале = 1 И НачалоДеньМесяца = 1); - КонецЭтоКонецКвартала = (КонецНомерМесяцаВКвартале = 3 И КонецЭтоПоследнийДеньМесяца); - - Если НачалоЭтоНачалоКвартала Или КонецЭтоКонецКвартала Тогда // Легкая оптимизация вычислений. - - ТекущийНомерМесяцаВКвартале = (ТекущийНомерМесяца-1)%3 + 1; - - Если НачалоЭтоНачалоКвартала И КонецЭтоКонецКвартала Тогда - Результат.ВидПериода = "Квартал"; - ИначеЕсли НачалоЭтоНачалоКвартала - И КонецНомерМесяцаВКвартале = ТекущийНомерМесяцаВКвартале - И КонецДеньМесяца = ТекущийДеньМесяца Тогда - Результат.ВидПериода = "СНачалаКвартала"; - ИначеЕсли КонецЭтоКонецКвартала - И НачалоНомерМесяцаВКвартале = ТекущийНомерМесяцаВКвартале - И НачалоДеньМесяца = ТекущийДеньМесяца Тогда - Результат.ВидПериода = "ДоКонцаКвартала"; - КонецЕсли; - - Если Результат.ВидПериода <> Неопределено Тогда // Легкая оптимизация вычислений. - КонецНомерКварталаВГоду = Цел((КонецНомерМесяца-1)/3)+1; - ТекущийНомерКварталаВГоду = Цел((ТекущийНомерМесяца-1)/3)+1; - Результат.СдвигПериода = КонецСдвигВГодах*4 + КонецНомерКварталаВГоду - ТекущийНомерКварталаВГоду; - Возврат Результат; - КонецЕсли; - - КонецЕсли; - КонецЕсли; - - Если ДнейВПериоде <= 186 Тогда // Легкая оптимизация вычислений. - НачалоНомерМесяцаВПолугодии = (НачалоНомерМесяца-1)%6 + 1; - КонецНомерМесяцаВПолугодии = (КонецНомерМесяца-1)%6 + 1; - - НачалоЭтоНачалоПолугодия = (НачалоНомерМесяцаВПолугодии = 1 И НачалоДеньМесяца = 1); - КонецЭтоКонецПолугодия = (КонецНомерМесяцаВПолугодии = 6 И КонецЭтоПоследнийДеньМесяца); - - Если НачалоЭтоНачалоПолугодия Или КонецЭтоКонецПолугодия Тогда // Легкая оптимизация вычислений. - - ТекущийНомерМесяцаВПолугодии = (ТекущийНомерМесяца-1)%6 + 1; - - Если НачалоЭтоНачалоПолугодия И КонецЭтоКонецПолугодия Тогда - Результат.ВидПериода = "Полугодие"; - ИначеЕсли НачалоЭтоНачалоПолугодия - И КонецНомерМесяцаВПолугодии = ТекущийНомерМесяцаВПолугодии - И КонецДеньМесяца = ТекущийДеньМесяца Тогда - Результат.ВидПериода = "СНачалаПолугодия"; - ИначеЕсли КонецЭтоКонецПолугодия - И НачалоНомерМесяцаВПолугодии = ТекущийНомерМесяцаВПолугодии - И НачалоДеньМесяца = ТекущийДеньМесяца Тогда - Результат.ВидПериода = "ДоКонцаПолугодия"; - КонецЕсли; - - Если Результат.ВидПериода <> Неопределено Тогда // Легкая оптимизация вычислений. - КонецНомерПолугодияВГоду = ?(КонецНомерМесяца <= 6, 1, 2); - ТекущийНомерПолугодияВГоду = ?(ТекущийНомерМесяца <= 6, 1, 2); - Результат.СдвигПериода = КонецСдвигВГодах*2 + КонецНомерПолугодияВГоду - ТекущийНомерПолугодияВГоду; - Возврат Результат; - КонецЕсли; - - КонецЕсли; - КонецЕсли; - - Если ДнейВПериоде <= 366 Тогда // Легкая оптимизация вычислений. - - НачалоЭтоНачалоГода = (НачалоНомерМесяца = 1 И НачалоДеньМесяца = 1); - КонецЭтоКонецГода = (КонецНомерМесяца = 12 И КонецЭтоПоследнийДеньМесяца); - - Если НачалоЭтоНачалоГода Или КонецЭтоКонецГода Тогда // Легкая оптимизация вычислений. - - Если НачалоЭтоНачалоГода И КонецЭтоКонецГода Тогда - Результат.ВидПериода = "Год"; - Результат.СдвигПериода = КонецСдвигВГодах; - Возврат Результат; - ИначеЕсли НачалоЭтоНачалоГода - И КонецНомерМесяца = ТекущийНомерМесяца - И КонецДеньМесяца = ТекущийДеньМесяца Тогда - Результат.ВидПериода = "СНачалаГода"; - Результат.СдвигПериода = КонецСдвигВГодах; - Возврат Результат; - ИначеЕсли КонецЭтоКонецГода - И НачалоНомерМесяца = ТекущийНомерМесяца - И НачалоДеньМесяца = ТекущийДеньМесяца Тогда - Результат.ВидПериода = "ДоКонцаГода"; - Результат.СдвигПериода = КонецСдвигВГодах; - Возврат Результат; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если ДнейВПериоде <= 11 Тогда - НачалоЭтоНачалоДекады = (НачалоДеньМесяца = 1 Или НачалоДеньМесяца = 11 Или НачалоДеньМесяца = 21); - КонецЭтоКонецДекады = (КонецДеньМесяца = 10 Или КонецДеньМесяца = 20 Или КонецЭтоПоследнийДеньМесяца); - Если НачалоЭтоНачалоДекады И КонецЭтоКонецДекады Тогда - Результат.ВидПериода = "Декада"; - Иначе - НачалоДеньДекады = (НачалоДеньМесяца-1)%10 + 1; // % это остаток от деления. - КонецДеньДекады = (КонецДеньМесяца-1)%10 + 1; - ТекущийДеньДекады = (ТекущийДеньМесяца-1)%10 + 1; - Если НачалоЭтоНачалоДекады И КонецДеньДекады = ТекущийДеньДекады Тогда - Результат.ВидПериода = "СНачалаДекады"; - ИначеЕсли НачалоДеньДекады = ТекущийДеньДекады И КонецЭтоКонецДекады Тогда - Результат.ВидПериода = "ДоКонцаДекады"; - КонецЕсли; - КонецЕсли; - Если Результат.ВидПериода <> Неопределено Тогда - КонецНомерДекадыВМесяце = ?(КонецДеньМесяца <= 10, 1, ?(КонецДеньМесяца <= 20, 2, 3)); - ТекущийНомерДекадыВМесяце = ?(ТекущийДеньМесяца <= 10, 1, ?(ТекущийДеньМесяца <= 20, 2, 3)); - Результат.СдвигПериода = КонецСдвигВМесяцах*3 + КонецНомерДекадыВМесяце - ТекущийНомерДекадыВМесяце; - Возврат Результат; - КонецЕсли; - КонецЕсли; - - Возврат Результат; -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Отчет пустой @@ -2878,51 +3865,6 @@ //////////////////////////////////////////////////////////////////////////////// // Параметры выбора -Функция ПараметрыВыбораТипа(Знач Тип, Знач ПараметрыНастройки) Экспорт - ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); - Если ОбъектМетаданных = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Результат = Новый Структура("БыстрыйВыбор, ПутьКФорме, ЗначенияДляВыбора"); - - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Вид = ВРег(СтрРазделить(ПолноеИмя, ".")[0]); - - Если ПараметрыНастройки.БыстрыйВыбор = Истина Тогда - Результат.БыстрыйВыбор = Истина; - ИначеЕсли Вид = "ПЕРЕЧИСЛЕНИЕ" Тогда - Результат.БыстрыйВыбор = Истина; - ИначеЕсли Вид = "СПРАВОЧНИК" - Или Вид = "ПЛАНВИДОВРАСЧЕТА" - Или Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" - Или Вид = "ПЛАНОБМЕНА" - Или Вид = "ПЛАНСЧЕТОВ" Тогда - Результат.БыстрыйВыбор = (ОбъектМетаданных.СпособВыбора = Метаданные.СвойстваОбъектов.СпособВыбора.БыстрыйВыбор); - Иначе - Результат.БыстрыйВыбор = Ложь; - КонецЕсли; - - Если Результат.БыстрыйВыбор Тогда - Результат.ЗначенияДляВыбора = ЗначенияДляВыбора(ПараметрыНастройки, Тип); - Если Результат.ЗначенияДляВыбора.Количество() = 0 Тогда - Результат.БыстрыйВыбор = Ложь; - КонецЕсли; - КонецЕсли; - - Если ПараметрыНастройки.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда - Если Вид = "СПРАВОЧНИК" Или Вид = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда - Результат.ПутьКФорме = ПолноеИмя + ".ФормаВыбораГруппы"; - Иначе - Результат.ПутьКФорме = ПолноеИмя + ".ФормаВыбора"; - КонецЕсли; - Иначе - Результат.ПутьКФорме = ПолноеИмя + ".ФормаВыбора"; - КонецЕсли; - - Возврат Результат; -КонецФункции - Функция ЗначенияДляВыбора(ПараметрыНастройки, ТипИлиТипы = Неопределено) Экспорт ПараметрыПолученияДанныхВыбора = Новый Структура("Отбор, ВыборГруппИЭлементов"); ЗаполнитьЗначенияСвойств(ПараметрыПолученияДанныхВыбора, ПараметрыНастройки); @@ -2982,4 +3924,260 @@ КонецЦикла; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Схема компоновки данных + +// Добавляет выбранное поле компоновки данных. +// +// Параметры: +// Куда - КомпоновщикНастроекКомпоновкиДанных, НастройкиКомпоновкиДанных, ВыбранныеПоляКомпоновкиДанных - +// Коллекция в которую требуется добавить выбранное поле. +// ИмяИлиПолеКД - Строка, ПолеКомпоновкиДанных - Имя поля. +// Заголовок - Строка - Необязательный. Представление поля. +// +// Возвращаемое значение: +// ВыбранноеПолеКомпоновкиДанных - Добавленное выбранное поле. +// +Функция ДобавитьВыбранноеПоле(Куда, ИмяИлиПолеКД, Заголовок = "") Экспорт + + Если ТипЗнч(Куда) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + ВыбранныеПоляКД = Куда.Настройки.Выбор; + ИначеЕсли ТипЗнч(Куда) = Тип("НастройкиКомпоновкиДанных") Тогда + ВыбранныеПоляКД = Куда.Выбор; + Иначе + ВыбранныеПоляКД = Куда; + КонецЕсли; + + Если ТипЗнч(ИмяИлиПолеКД) = Тип("Строка") Тогда + ПолеКД = Новый ПолеКомпоновкиДанных(ИмяИлиПолеКД); + Иначе + ПолеКД = ИмяИлиПолеКД; + КонецЕсли; + + ВыбранноеПолеКД = ВыбранныеПоляКД.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПолеКД.Поле = ПолеКД; + Если Заголовок <> "" Тогда + ВыбранноеПолеКД.Заголовок = Заголовок; + КонецЕсли; + + Возврат ВыбранноеПолеКД; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Прочее + +Функция РасширенноеОписаниеТипов(ИсходноеОписаниеТипов, ПривестиКФорме, ПараметрыПодбора = Неопределено) Экспорт + Результат = Новый Структура; + Результат.Вставить("СодержитТипТип", Ложь); + Результат.Вставить("СодержитТипДата", Ложь); + Результат.Вставить("СодержитТипБулево", Ложь); + Результат.Вставить("СодержитТипСтрока", Ложь); + Результат.Вставить("СодержитТипЧисло", Ложь); + Результат.Вставить("СодержитТипПериод", Ложь); + Результат.Вставить("СодержитТипУИД", Ложь); + Результат.Вставить("СодержитТипХранилище", Ложь); + Результат.Вставить("СодержитОбъектныеТипы", Ложь); + Результат.Вставить("ОграниченнойДлины", Истина); + + Результат.Вставить("КоличествоТипов", 0); + Результат.Вставить("КоличествоПримитивныхТипов", 0); + Результат.Вставить("ОбъектныеТипы", Новый Массив); + + Если ПривестиКФорме Тогда + ДобавляемыеТипы = Новый Массив; + ВычитаемыеТипы = Новый Массив; + Результат.Вставить("ОписаниеТиповИсходное", ИсходноеОписаниеТипов); + Результат.Вставить("ОписаниеТиповДляФормы", ИсходноеОписаниеТипов); + КонецЕсли; + + Если ИсходноеОписаниеТипов = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + МассивТипов = ИсходноеОписаниеТипов.Типы(); + Для Каждого Тип Из МассивТипов Цикл + Если Тип = Тип("ПолеКомпоновкиДанных") Тогда + Если ПривестиКФорме Тогда + ВычитаемыеТипы.Добавить(Тип); + КонецЕсли; + Продолжить; + КонецЕсли; + + МетаданныеНастройки = Метаданные.НайтиПоТипу(Тип); + Если МетаданныеНастройки <> Неопределено Тогда + Если ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеНастройки) Тогда + Если ТипЗнч(ПараметрыПодбора) = Тип("Соответствие") Тогда + ПараметрыПодбора.Вставить(Тип, МетаданныеНастройки.ПолноеИмя() + ".ФормаВыбора"); + КонецЕсли; + Иначе // Объект недоступен. + Если ПривестиКФорме Тогда + ВычитаемыеТипы.Добавить(Тип); + КонецЕсли; + Продолжить; + КонецЕсли; + КонецЕсли; + + Результат.КоличествоТипов = Результат.КоличествоТипов + 1; + + Если Тип = Тип("Тип") Тогда + Результат.СодержитТипТип = Истина; + ИначеЕсли Тип = Тип("Дата") Тогда + Результат.СодержитТипДата = Истина; + Результат.КоличествоПримитивныхТипов = Результат.КоличествоПримитивныхТипов + 1; + ИначеЕсли Тип = Тип("Булево") Тогда + Результат.СодержитТипБулево = Истина; + Результат.КоличествоПримитивныхТипов = Результат.КоличествоПримитивныхТипов + 1; + ИначеЕсли Тип = Тип("Число") Тогда + Результат.СодержитТипЧисло = Истина; + Результат.КоличествоПримитивныхТипов = Результат.КоличествоПримитивныхТипов + 1; + ИначеЕсли Тип = Тип("СтандартныйПериод") Тогда + Результат.СодержитТипПериод = Истина; + ИначеЕсли Тип = Тип("Строка") Тогда + Результат.СодержитТипСтрока = Истина; + Результат.КоличествоПримитивныхТипов = Результат.КоличествоПримитивныхТипов + 1; + Если ИсходноеОписаниеТипов.КвалификаторыСтроки.Длина = 0 + И ИсходноеОписаниеТипов.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Переменная Тогда + Результат.ОграниченнойДлины = Ложь; + КонецЕсли; + ИначеЕсли Тип = Тип("УникальныйИдентификатор") Тогда + Результат.СодержитТипУИД = Истина; + ИначеЕсли Тип = Тип("ХранилищеЗначения") Тогда + Результат.СодержитТипХранилище = Истина; + Иначе + Результат.СодержитОбъектныеТипы = Истина; + Результат.ОбъектныеТипы.Добавить(Тип); + КонецЕсли; + + КонецЦикла; + + Если ПривестиКФорме + И (ДобавляемыеТипы.Количество() > 0 Или ВычитаемыеТипы.Количество() > 0) Тогда + Результат.ОписаниеТиповДляФормы = Новый ОписаниеТипов(ИсходноеОписаниеТипов, ДобавляемыеТипы, ВычитаемыеТипы); + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ТипНастройкиСтрокой(Тип) + Если Тип = Тип("НастройкиКомпоновкиДанных") Тогда + Возврат "Настройки"; + ИначеЕсли Тип = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Возврат "НастройкиВложенногоОбъекта"; + + ИначеЕсли Тип = Тип("ОтборКомпоновкиДанных") Тогда + Возврат "Отбор"; + ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Возврат "ЭлементОтбора"; + ИначеЕсли Тип = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + Возврат "ГруппаЭлементовОтбора"; + + ИначеЕсли Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Возврат "ЗначениеПараметраНастроек"; + + ИначеЕсли Тип = Тип("ГруппировкаКомпоновкиДанных") Тогда + Возврат "Группировка"; + ИначеЕсли Тип = Тип("ПоляГруппировкиКомпоновкиДанных") Тогда + Возврат "ПоляГруппировки"; + ИначеЕсли Тип = Тип("КоллекцияПолейГруппировкиКомпоновкиДанных") Тогда + Возврат "КоллекцияПолейГруппировки"; + ИначеЕсли Тип = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда + Возврат "ПолеГруппировки"; + ИначеЕсли Тип = Тип("АвтоПолеГруппировкиКомпоновкиДанных") Тогда + Возврат "АвтоПолеГруппировки"; + + ИначеЕсли Тип = Тип("ВыбранныеПоляКомпоновкиДанных") Тогда + Возврат "ВыбранныеПоля"; + ИначеЕсли Тип = Тип("ВыбранноеПолеКомпоновкиДанных") Тогда + Возврат "ВыбранноеПоле"; + ИначеЕсли Тип = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + Возврат "ГруппаВыбранныхПолей"; + ИначеЕсли Тип = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда + Возврат "АвтоВыбранноеПоле"; + + ИначеЕсли Тип = Тип("ПорядокКомпоновкиДанных") Тогда + Возврат "Порядок"; + ИначеЕсли Тип = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда + Возврат "ЭлементПорядка"; + ИначеЕсли Тип = Тип("АвтоЭлементПорядкаКомпоновкиДанных") Тогда + Возврат "АвтоЭлементПорядка"; + + ИначеЕсли Тип = Тип("УсловноеОформлениеКомпоновкиДанных") Тогда + Возврат "УсловноеОформление"; + ИначеЕсли Тип = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда + Возврат "ЭлементУсловногоОформления"; + + ИначеЕсли Тип = Тип("СтруктураНастроекКомпоновкиДанных") Тогда + Возврат "СтруктураНастроек"; + ИначеЕсли Тип = Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") Тогда + Возврат "КоллекцияЭлементовСтруктурыНастроек"; + + ИначеЕсли Тип = Тип("ТаблицаКомпоновкиДанных") Тогда + Возврат "Таблица"; + ИначеЕсли Тип = Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда + Возврат "ГруппировкаТаблицы"; + ИначеЕсли Тип = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда + Возврат "КоллекцияЭлементовСтруктурыТаблицы"; + + ИначеЕсли Тип = Тип("ДиаграммаКомпоновкиДанных") Тогда + Возврат "Диаграмма"; + ИначеЕсли Тип = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + Возврат "ГруппировкаДиаграммы"; + ИначеЕсли Тип = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда + Возврат "КоллекцияЭлементовСтруктурыДиаграммы"; + + ИначеЕсли Тип = Тип("ЗначенияПараметровДанныхКомпоновкиДанных") Тогда + Возврат "ЗначенияПараметровДанных"; + + Иначе + Возврат ""; + КонецЕсли; +КонецФункции + +Функция ЗначениеВМассив(Значение) Экспорт + Если ТипЗнч(Значение) = Тип("Массив") Тогда + Возврат Значение; + Иначе + Массив = Новый Массив; + Массив.Добавить(Значение); + Возврат Массив; + КонецЕсли; +КонецФункции + +Функция ПривестиИдентификаторКИмени(Идентификатор) Экспорт + Возврат СтрЗаменить(СтрЗаменить(Строка(Идентификатор), "-", ""), ".", "_"); +КонецФункции + +// Приводит значение типа ИспользованиеГруппИЭлементов к типу ГруппыИЭлементы. +// Для других типов возвращает значение Авто. +// +Функция ПривестиЗначениеКТипуГруппыИЭлементы(ИсходноеЗначение, ЗначениеПоУмолчанию = Неопределено) + Тип = ТипЗнч(ИсходноеЗначение); + Если Тип = Тип("ГруппыИЭлементы") Тогда + Возврат ИсходноеЗначение; + ИначеЕсли Тип = Тип("ИспользованиеГруппИЭлементов") Тогда + Если ИсходноеЗначение = ИспользованиеГруппИЭлементов.Элементы Тогда + Возврат ГруппыИЭлементы.Элементы; + ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.ГруппыИЭлементы Тогда + Возврат ГруппыИЭлементы.ГруппыИЭлементы; + ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.Группы Тогда + Возврат ГруппыИЭлементы.Группы; + КонецЕсли; + ИначеЕсли Тип = Тип("ВидСравненияКомпоновкиДанных") Тогда + Если ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВСписке + Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии + Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВСписке + Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + // Виды сравнения ВСпискеПоИерархии (В группе из списка) и НеВСпискеПоИерархии (Не в группе из списка) + // следует понимать как "В списке или в группах" и "Не в списке и не в группах". + // - Тогда более понятно почему для них используется "ГруппыИЭлементы", а не "Группы". + Возврат ГруппыИЭлементы.ГруппыИЭлементы; + ИначеЕсли ИсходноеЗначение = ВидСравненияКомпоновкиДанных.ВИерархии + Или ИсходноеЗначение = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда + Возврат ГруппыИЭлементы.Группы; + КонецЕсли; + КонецЕсли; + Возврат ?(ЗначениеПоУмолчанию = Неопределено, ГруппыИЭлементы.Авто, ЗначениеПоУмолчанию); +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl index cde09e66e..4ba9fbada 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Начинает замер времени ключевой операции. Закончить замер нужно явно вызовом @@ -27,8 +35,9 @@ // возвращаемая при начале замера функцией ОценкаПроизводительности.НачатьЗамерВремени. // ВесЗамера - Число - количественный показатель замера, например количество строк в документе. // Комментарий - Строка, Соответствие - произвольная информация замера. +// ВыполненСОшибкой - Булево - признак того, что замер не был выполнен до конца, // -Процедура ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, ВесЗамера = 1, Комментарий = Неопределено) Экспорт +Процедура ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, ВесЗамера = 1, Комментарий = Неопределено, ВыполненСОшибкой = Ложь) Экспорт Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда ВремяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах(); Длительность = (ВремяОкончания - ВремяНачала)/1000; @@ -42,6 +51,7 @@ ПараметрыЗамера.Вставить("Комментарий", Комментарий); ПараметрыЗамера.Вставить("Технологический", Ложь); ПараметрыЗамера.Вставить("Длительная", Ложь); + ПараметрыЗамера.Вставить("ВыполненСОшибкой", ВыполненСОшибкой); ЗафиксироватьДлительностьКлючевойОперации(ПараметрыЗамера); КонецЕсли; @@ -71,6 +81,7 @@ ПараметрыЗамера.Вставить("Комментарий", Комментарий); ПараметрыЗамера.Вставить("Технологический", Истина); ПараметрыЗамера.Вставить("Длительная", Ложь); + ПараметрыЗамера.Вставить("ВыполненСОшибкой", Ложь); ЗафиксироватьДлительностьКлючевойОперации(ПараметрыЗамера); КонецЕсли; @@ -122,7 +133,11 @@ Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); + Для Каждого КлючеваяОперация Из КлючевыеОперации Цикл + ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Имя", КлючеваяОперация.ИмяКлючевойОперации); + КонецЦикла; Блокировка.Заблокировать(); Для Каждого КлючеваяОперация Из КлючевыеОперации Цикл @@ -146,51 +161,6 @@ КонецПроцедуры -// Устанавливает ключевой операции признака ошибки. -// -// Параметры: -// КлючевыеОперации - Массив - ключевые операции, элемент массива - Структура("ИмяКлючевойОперации, Признак"). -// -Процедура УстановитьПризнакЗавершенияСОшибкой(КлючевыеОперации) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | КлючевыеОперации.Ссылка КАК Ссылка - |ИЗ - | Справочник.КлючевыеОперации КАК КлючевыеОперации - |ГДЕ - | КлючевыеОперации.Имя = &Имя - |УПОРЯДОЧИТЬ ПО - | Ссылка"; - - НачатьТранзакцию(); - Попытка - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); - Блокировка.Заблокировать(); - - Для Каждого КлючеваяОперация Из КлючевыеОперации Цикл - Запрос.УстановитьПараметр("Имя", КлючеваяОперация.ИмяКлючевойОперации); - РезультатЗапроса = Запрос.Выполнить(); - Если НЕ РезультатЗапроса.Пустой() Тогда - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - КлючеваяОперацияСсылка = Выборка.Ссылка; - КлючеваяОперацияОбъект = КлючеваяОперацияСсылка.ПолучитьОбъект(); - КлючеваяОперацияОбъект.ЗавершенаСОшибкой = КлючеваяОперация.Признак; - - КлючеваяОперацияОбъект.Записать(); - КонецЕсли; - КонецЦикла; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - // Изменяет ключевые операции. // // Параметры: @@ -216,7 +186,14 @@ Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); + Для Каждого КлючеваяОперация Из КлючевыеОперации Цикл + ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Имя", КлючеваяОперация.ИмяКлючевойОперацииСтарое); + ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Имя", КлючеваяОперация.ИмяКлючевойОперацииНовое); + КонецЦикла; Блокировка.Заблокировать(); Для Каждого КлючеваяОперация Из КлючевыеОперации Цикл @@ -411,6 +388,60 @@ КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Будет удалена в следующей редакции библиотеки. +// Устанавливает ключевой операции признака ошибки. +// +// Параметры: +// КлючевыеОперации - Массив - ключевые операции, элемент массива - Структура("ИмяКлючевойОперации, Признак"). +// +Процедура УстановитьПризнакЗавершенияСОшибкой(КлючевыеОперации) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | КлючевыеОперации.Ссылка КАК Ссылка + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.Имя = &Имя + |УПОРЯДОЧИТЬ ПО + | Ссылка"; + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + Для Каждого КлючеваяОперация Из КлючевыеОперации Цикл + ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Имя", КлючеваяОперация.ИмяКлючевойОперации); + КонецЦикла; + Блокировка.Заблокировать(); + + Для Каждого КлючеваяОперация Из КлючевыеОперации Цикл + Запрос.УстановитьПараметр("Имя", КлючеваяОперация.ИмяКлючевойОперации); + РезультатЗапроса = Запрос.Выполнить(); + Если НЕ РезультатЗапроса.Пустой() Тогда + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + КлючеваяОперацияСсылка = Выборка.Ссылка; + КлючеваяОперацияОбъект = КлючеваяОперацияСсылка.ПолучитьОбъект(); + КлючеваяОперацияОбъект.ЗавершенаСОшибкой = КлючеваяОперация.Признак; + + КлючеваяОперацияОбъект.Записать(); + КонецЕсли; + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -432,12 +463,12 @@ // Параметры: // ИмяКлючевойОперации - Строка - название ключевой операции. // ЦелевоеВремя - Число - целевое время ключевой операции. -// ВыполненаСОшибкой - Булево - признак выполнения ключевой операции. +// Длительная - Булево - признак фиксации удельного времени для замера ключевой операции. // // Возвращаемое значение: // СправочникСсылка.КлючевыеОперации. // -Функция СоздатьКлючевуюОперацию(ИмяКлючевойОперации, ЦелевоеВремя = 1, ВыполненаСОшибкой = Ложь, Длительная = Ложь) Экспорт +Функция СоздатьКлючевуюОперацию(ИмяКлючевойОперации, ЦелевоеВремя = 1, Длительная = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -474,7 +505,6 @@ НовыйЭлемент.Имя = ИмяКлючевойОперации; НовыйЭлемент.Наименование = Наименование; НовыйЭлемент.ЦелевоеВремя = ЦелевоеВремя; - НовыйЭлемент.ВыполненаСОшибкой = ВыполненаСОшибкой; НовыйЭлемент.Длительная = Длительная; НовыйЭлемент.Записать(); КлючеваяОперацияСсылка = НовыйЭлемент.Ссылка; @@ -581,13 +611,9 @@ Комментарий = Параметры.Комментарий; Технологический = Параметры.Технологический; Длительная = Параметры.Длительная; + ВыполненСОшибкой = Параметры.ВыполненСОшибкой; - Если ОценкаПроизводительностиСлужебный.ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность") Тогда - МодульОбщегоНазначенияКлиентСервер = ОценкаПроизводительностиСлужебный.ОбщийМодуль("ОбщегоНазначенияКлиентСервер"); - КодОсновногоЯзыка = МодульОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); - Иначе - КодОсновногоЯзыка = Метаданные.ОсновнойЯзык.КодЯзыка; - КонецЕсли; + КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); Если БезопасныйРежим() <> Ложь Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа подсистемы оценка производительности в безопасном режиме не поддерживается'", КодОсновногоЯзыка), @@ -606,7 +632,7 @@ УстановитьПривилегированныйРежим(Истина); Если ТипЗнч(КлючеваяОперация) = Тип("Строка") Тогда - КлючеваяОперацияСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперация, , Длительная); + КлючеваяОперацияСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперация, Длительная); Иначе КлючеваяОперацияСсылка = КлючеваяОперация; КонецЕсли; @@ -649,6 +675,9 @@ Запись.Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); Запись.ДатаЗаписиЛокальная = ТекущаяДатаСеанса(); Запись.Комментарий = Комментарий; + Если НЕ Технологический Тогда + Запись.ВыполненСОшибкой = ВыполненСОшибкой; + КонецЕсли; Запись.Записать(); @@ -671,16 +700,11 @@ Возврат; КонецЕсли; - Если ОценкаПроизводительностиСлужебный.ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность") Тогда - МодульОбщегоНазначенияКлиентСервер = ОценкаПроизводительностиСлужебный.ОбщийМодуль("ОбщегоНазначенияКлиентСервер"); - КодОсновногоЯзыка = МодульОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); - Иначе - КодОсновногоЯзыка = Метаданные.ОсновнойЯзык.КодЯзыка; - КонецЕсли; + КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); Если БезопасныйРежим() <> Ложь Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа подсистемы оценка производительности в безопасном режиме не поддерживается'", КодОсновногоЯзыка), - УровеньЖурналаРегистрации.Информация); + УровеньЖурналаРегистрации.Информация); Возврат; КонецЕсли; @@ -702,7 +726,7 @@ КонецЕсли; Если ТипЗнч(Замер.КлючеваяОперация) = Тип("Строка") Тогда - КлючеваяОперацияСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(Замер.КлючеваяОперация, , Замер.Длительная); + КлючеваяОперацияСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(Замер.КлючеваяОперация, Замер.Длительная); Иначе КлючеваяОперацияСсылка = Замер.КлючеваяОперация; КонецЕсли; @@ -751,7 +775,7 @@ ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось сохранить замеры производительности'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - КонецЕсли; + КонецЕсли; УстановитьПривилегированныйРежим(Ложь); @@ -959,7 +983,6 @@ КлючеваяОперация.Вставить("priority", Выборка.КлючеваяОперацияПриоритет); КлючеваяОперация.Вставить("targetValue", Выборка.КлючеваяОперация.ЦелевоеВремя); КлючеваяОперация.Вставить("minimalApdexValue", УровниПроизводительностиЧисло[Выборка.КлючеваяОперация.МинимальноДопустимыйУровень]); - КлючеваяОперация.Вставить("runningError", Выборка.ВыполненаСОшибкой); КлючеваяОперация.Вставить("long", Выборка.Длительная); ЗамерыСРазделением.Вставить(Выборка.КлючеваяОперация, КлючеваяОперация); @@ -982,6 +1005,7 @@ ЗамерСтруктура.Вставить("tSaveUTC", Выборка.ДатаЗаписи); ЗамерСтруктура.Вставить("sessionNumber", Выборка.НомерСеанса); ЗамерСтруктура.Вставить("comment", Выборка.Комментарий); + ЗамерСтруктура.Вставить("runningError", Выборка.ВыполненСОшибкой); КлючеваяОперацияЗамеры.Добавить(ЗамерСтруктура); @@ -1007,7 +1031,7 @@ // МассивыЗамеров - Структура со значением типа Массив. Процедура ВыгрузитьРезультаты(КаталогиЭкспорта, МассивыЗамеров, ТекДата, ПорядковыйНомерФайла) - ПространствоИмен = "www.v8.1c.ru/ssl/performace-assessment/apdexExport/1.0.0.3"; + ПространствоИмен = "www.v8.1c.ru/ssl/performace-assessment/apdexExport/1.0.0.4"; ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".xml"); ЗаписьXML = Новый ЗаписьXML; @@ -1018,7 +1042,7 @@ ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - ЗаписьXML.ЗаписатьАтрибут("version", ПространствоИмен, "1.0.0.3"); + ЗаписьXML.ЗаписатьАтрибут("version", ПространствоИмен, "1.0.0.4"); ЗаписьXML.ЗаписатьАтрибут("period", ПространствоИмен, Строка(Дата(1,1,1) + ТекДата/1000)); ТипКлючеваяОперация = ФабрикаXDTO.Тип(ПространствоИмен, "KeyOperation"); @@ -1036,8 +1060,7 @@ КлючеваяОперация.priority = КлючеваяОперацияЗамеры["priority"]; КлючеваяОперация.targetValue = КлючеваяОперацияЗамеры["targetValue"]; КлючеваяОперация.uid = КлючеваяОперацияЗамеры["uid"]; - КлючеваяОперация.runningError = КлючеваяОперацияЗамеры["runningError"]; - + Замеры = Комментарий.Значение["Замеры"]; Для Каждого Замер Из Замеры Цикл ЗамерXML = ФабрикаXDTO.Создать(ТипИзмерение); @@ -1047,6 +1070,7 @@ ЗамерXML.userName = Замер.userName; ЗамерXML.tSaveUTC = Замер.tSaveUTC; ЗамерXML.sessionNumber = Замер.sessionNumber; + ЗамерXML.runningError = Замер.runningError; КлючеваяОперация.measurement.Добавить(ЗамерXML); КонецЦикла; @@ -1091,7 +1115,7 @@ | КлючевыеОперации.Приоритет КАК КлючеваяОперацияПриоритет, | КлючевыеОперации.ЦелевоеВремя КАК КлючеваяОперацияЦелевоеВремя, | КлючевыеОперации.МинимальноДопустимыйУровень КАК МинимальноДопустимыйУровень, - | КлючевыеОперации.ВыполненаСОшибкой КАК ВыполненаСОшибкой, + | Замеры.ВыполненСОшибкой КАК ВыполненСОшибкой, | КлючевыеОперации.Длительная КАК Длительная |ИЗ | РегистрСведений.ЗамерыВремени КАК Замеры @@ -1124,7 +1148,7 @@ | КлючевыеОперации.Приоритет КАК КлючеваяОперацияПриоритет, | КлючевыеОперации.ЦелевоеВремя КАК КлючеваяОперацияЦелевоеВремя, | КлючевыеОперации.КлючеваяОперация.МинимальноДопустимыйУровень КАК МинимальноДопустимыйУровень, - | КлючевыеОперации.КлючеваяОперация.ВыполненаСОшибкой КАК ВыполненаСОшибкой, + | Замеры.ВыполненСОшибкой КАК ВыполненСОшибкой, | КлючевыеОперации.КлючеваяОперация.Длительная КАК Длительная |ИЗ | РегистрСведений.ЗамерыВремени КАК Замеры @@ -1247,32 +1271,26 @@ ПространствоИмен = ЧтениеXML.URIПространстваИмен; - ДатаФормированияФайла = ЧтениеXML.ЗначениеАтрибута("period", ПространствоИмен); - + // С версии 1.0.0.4 факт выполнения замера с ошибкой хранится в самом замере, а не в ключевой операции. + ПризнакОшибкиВЗамере = Метаданные.ПакетыXDTO.ApdexExport_1_0_0_4.ПространствоИмен = ПространствоИмен; + measurement = "measurement"; ТипКлючеваяОперация = ФабрикаXDTO.Тип(ПространствоИмен, "KeyOperation"); ЧтениеXML.Прочитать(); - ЭтотФайлПустой = Истина; Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл - ЭтотФайлПустой = Ложь; - КлючеваяОперация = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипКлючеваяОперация); - УникальныйИдентификаторКлючевойОперации = КлючеваяОперация.uid; - КлючеваяОперацияНаименование = КлючеваяОперация.name; КлючеваяОперацияИмя = КлючеваяОперация.nameFull; - Приоритет = КлючеваяОперация.priority; ЦелевоеВремя = КлючеваяОперация.targetValue; Комментарий = КлючеваяОперация.comment; - ВыполненаСОшибкой = КлючеваяОперация.runningError; Длительная = КлючеваяОперация.long; КлючеваяОперацияСсылка = СуществующиеКлючевыеОперации[КлючеваяОперацияИмя]; Если КлючеваяОперацияСсылка = Неопределено Тогда - КлючеваяОперацияСсылка = СоздатьКлючевуюОперацию(КлючеваяОперацияИмя, ЦелевоеВремя, ВыполненаСОшибкой, Длительная); + КлючеваяОперацияСсылка = СоздатьКлючевуюОперацию(КлючеваяОперацияИмя, ЦелевоеВремя, Длительная); СуществующиеКлючевыеОперации.Вставить(КлючеваяОперацияИмя, КлючеваяОперацияСсылка); КонецЕсли; @@ -1285,6 +1303,11 @@ Если МаксимальнаяДатаЗамера = Неопределено ИЛИ МаксимальнаяДатаЗамера < ДатаЗамера Тогда МаксимальнаяДатаЗамера = ДатаЗамера; КонецЕсли; + Если ПризнакОшибкиВЗамере Тогда + ВыполненСОшибкой = Замер.runningError; + Иначе + ВыполненСОшибкой = КлючеваяОперация.runningError; + КонецЕсли; СыройЗамерДляЗаписи = Новый Соответствие; СыройЗамерДляЗаписи.Вставить("КлючеваяОперация", КлючеваяОперацияСсылка); @@ -1295,6 +1318,7 @@ СыройЗамерДляЗаписи.Вставить("ДатаЗаписи", Замер.tSaveUTC); СыройЗамерДляЗаписи.Вставить("НомерСеанса", Замер.sessionNumber); СыройЗамерДляЗаписи.Вставить("Комментарий", Комментарий); + СыройЗамерДляЗаписи.Вставить("ВыполненСОшибкой", ВыполненСОшибкой); СырыеЗамерыДляЗаписи.Добавить(СыройЗамерДляЗаписи); diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl index c682ece7c..e248fe1a2 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Функция записи массива замеров @@ -55,14 +63,14 @@ КонецЕсли; КлючеваяОперация = ПараметрыЗамера["КлючеваяОперация"]; - ВыполненаСОшибкой = ПараметрыЗамера["ВыполненаСОшибкой"]; + ВыполненСОшибкой = ПараметрыЗамера["ВыполненаСОшибкой"]; Если НЕ ЗначениеЗаполнено(КлючеваяОперация) Тогда Продолжить; КонецЕсли; Если ТипЗнч(КлючеваяОперация) = Тип("Строка") Тогда - КлючеваяОперацияСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперация, ВыполненаСОшибкой); + КлючеваяОперацияСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперация); Иначе КлючеваяОперацияСсылка = КлючеваяОперация; КонецЕсли; @@ -85,6 +93,10 @@ НоваяЗапись.ДатаЗаписиНачалоЧаса = ДатаЗаписиНачалоЧаса; НоваяЗапись.ДатаОкончания = ПараметрыЗамера["ВремяОкончания"]; + Если НЕ ПараметрыЗамера["Технологический"] Тогда + НоваяЗапись.ВыполненСОшибкой = ВыполненСОшибкой; + КонецЕсли; + НоваяЗапись.Пользователь = Пользователь; НоваяЗапись.ДатаЗаписиЛокальная = ДатаЗаписиЛокальная; НоваяЗапись.Комментарий = КомментарийПоУмолчаниюСтрока; @@ -103,7 +115,7 @@ ДлительностьВложенногоЗамера = ДанныеЗамера["Длительность"]; КомментарийВложенногоЗамера = ДанныеЗамера["Комментарий"]; КлючеваяОперацияВложенногоШага = КлючеваяОперация + "." + ВложенныйЗамер.Ключ; - КлючеваяОперацияВложенногоШагаСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперацияВложенногоШага, ВыполненаСОшибкой, Истина); + КлючеваяОперацияВложенногоШагаСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперацияВложенногоШага, Истина); УдельноеВремя = ?(ВесВложенногоЗамера = 0, ДлительностьВложенногоЗамера, ДлительностьВложенногоЗамера / ВесВложенногоЗамера); УдельноеВремяОбщее = УдельноеВремяОбщее + УдельноеВремя; @@ -131,7 +143,7 @@ // Фиксация удельного времени ключевой операции. Если ВложенныеЗамеры.Количество() > 0 Тогда КлючеваяОперацияУдельная = КлючеваяОперация + ".Удельный"; - КлючеваяОперацияУдельнаяСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперацияУдельная, ВыполненаСОшибкой, Истина); + КлючеваяОперацияУдельнаяСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперацияУдельная, Истина); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.КлючеваяОперация = КлючеваяОперацияУдельнаяСсылка; НоваяЗапись.ДатаНачалаЗамера = ПараметрыЗамера["ВремяНачала"]; diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl index 332121577..b30fbd84a 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Функция определяет необходимость выполнения замеров. diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/Module.bsl index 4083ae32f..bbb5abcdf 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Процедура заканчивает замер времени выполнения ключевой операции. diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl index 2fc3481fe..1c9dbda56 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Начинает замер времени ключевой операции. @@ -7,19 +15,26 @@ // в случае завершения сеанса часть замеров может быть потеряна. // // Параметры: -// АвтоЗавершение - Булево - признак автоматического завершения замера. -// Истина - завершение замера будет выполнено автоматически -// через глобальный обработчик ожидания. -// Ложь - завершить замер необходимо явно вызовом процедуры -// ЗавершитьЗамерВремени. -// КлючеваяОперация - Строка - имя ключевой операции. Если Неопределено> то ключевую операцию -// необходимо указать явно вызовом процедуры -// УстановитьКлючевуюОперациюЗамера. +// КлючеваяОперация - Строка - имя ключевой операции. Если Неопределено, то ключевую операцию +// необходимо указать явно вызовом процедуры +// УстановитьКлючевуюОперациюЗамера. +// ФиксироватьСОшибкой - Булево - признак автоматической фиксации ошибки. +// Истина - при автоматическом завершении замера, он будет записан +// с признаком "Выполнен с ошибкой". В том месте кода, где ошибка явно +// не может возникнуть, необходимо либо явно завершить замер методом +// ЗавершитьЗамерВремени, либо снять признак ошибки с помощью метода +// УстановитьПризнакОшибкиЗамера. +// Ложь - замер будет считаться корректным при автоматическом завершении. +// АвтоЗавершение - Булево - признак автоматического завершения замера. +// Истина - завершение замера будет выполнено автоматически +// через глобальный обработчик ожидания. +// Ложь - завершить замер необходимо явно вызовом процедуры +// ЗавершитьЗамерВремени. // // Возвращаемое значение: // УникальныйИдентификатор - уникальный идентификатор замера, который позволяет идентифицировать замер. // -Функция НачатьЗамерВремени(АвтоЗавершение = Истина, КлючеваяОперация = Неопределено) Экспорт +Функция ЗамерВремени(КлючеваяОперация = Неопределено, ФиксироватьСОшибкой = Ложь, АвтоЗавершение = Истина) Экспорт УИДЗамера = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); @@ -29,7 +44,7 @@ Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); Параметры.Вставить("УИДЗамера", УИДЗамера); Параметры.Вставить("АвтоЗавершение", АвтоЗавершение); - Параметры.Вставить("ВыполненаСОшибкой", Ложь); + Параметры.Вставить("ВыполненаСОшибкой", ФиксироватьСОшибкой); НачатьЗамерВремениНаКлиентеСлужебный(Параметры); КонецЕсли; @@ -78,8 +93,10 @@ // // Параметры: // УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. +// ВыполненСОшибкой - Булево - признак того, что замер не был выполнен до конца, +// а выполнение ключевой операции завершилось с ошибкой. // -Процедура ЗавершитьЗамерВремени(УИДЗамера) Экспорт +Процедура ЗавершитьЗамерВремени(УИДЗамера, ВыполненСОшибкой = Ложь) Экспорт Если ВыполнятьЗамерыПроизводительности() Тогда ВремяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах(); @@ -90,6 +107,7 @@ Замеры = ОценкаПроизводительностиЗамерВремени["Замеры"]; Замер = Замеры[УИДЗамера]; Если Замер <> Неопределено Тогда + Замер["ВыполненаСОшибкой"] = ВыполненСОшибкой; ЗамерыЗавершенные = ПараметрыПриложения["СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"]["ЗамерыЗавершенные"]; ЗамерыЗавершенные.Вставить(УИДЗамера, Замер); Замеры.Удалить(УИДЗамера); @@ -218,6 +236,23 @@ // // Параметры: // КлючеваяОперация - Строка - имя ключевой операции. +// ФиксироватьСОшибкой - Булево - признак автоматической фиксации ошибки. +// Истина - при автоматическом завершении замера, он будет записан +// с признаком "Выполнен с ошибкой". В том месте кода, где ошибка явно +// не может возникнуть, необходимо либо явно завершить замер методом +// ЗавершитьЗамерВремени, либо снять признак ошибки с помощью метода +// УстановитьПризнакОшибкиЗамера +// Ложь - замер будет считаться корректны при автоматическом завершении. +// ЗавершитьЗамерВремени. +// АвтоЗавершение - Булево - признак автоматического завершения замера. +// Истина - завершение замера будет выполнено автоматически +// через глобальный обработчик ожидания. +// Ложь - завершить замер необходимо явно вызовом процедуры +// ЗавершитьЗамерВремени. +// ИмяПоследнегоШага - Строка - имя последнего шага ключевой операции. Целесообразно использовать, если +// замер запущен с автоматическим завершением. В противным случае последние +// действия, выполненные между ЗафиксироватьЗамерДлительнойОперации и +// срабатыванием обработчика ожидания будет записано под именем "Последний шаг". // // Возвращаемое значение: // ОписаниеЗамера - соответствие. @@ -227,7 +262,7 @@ // ВесЗамера - количество данных, обработанных в ходе выполнения действий. // ВложенныеЗамеры - коллекция замеров вложенных шагов. // -Функция НачатьЗамерДлительнойОперации(КлючеваяОперация) Экспорт +Функция НачатьЗамерДлительнойОперации(КлючеваяОперация, ФиксироватьСОшибкой = Ложь, АвтоЗавершение = Ложь, ИмяПоследнегоШага = "ПоследнийШаг") Экспорт УИДЗамера = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); Замер = Новый Соответствие; @@ -237,8 +272,8 @@ Параметры = Новый Структура; Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); Параметры.Вставить("УИДЗамера", УИДЗамера); - Параметры.Вставить("ВыполненаСОшибкой", Ложь); - Параметры.Вставить("АвтоЗавершение", Ложь); + Параметры.Вставить("ВыполненаСОшибкой", ФиксироватьСОшибкой); + Параметры.Вставить("АвтоЗавершение", АвтоЗавершение); НачатьЗамерВремениНаКлиентеСлужебный(Параметры); @@ -251,6 +286,7 @@ Замер.Вставить("ВложенныеЗамеры", Новый Соответствие); Замер.Вставить("УИДЗамера", УИДЗамера); Замер.Вставить("Клиентский", Истина); + Замер.Вставить("ИмяПоследнегоШага", ИмяПоследнегоШага); КонецЕсли; @@ -331,6 +367,50 @@ КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Будет удалена в следующей редакции библиотеки. +// Необходимо использовать процедуру +// ОценкаПроизводительностиКлиент.ЗамерВремени +// Начинает замер времени ключевой операции. +// Результат замера будет записан в регистр сведений ЗамерыВремени. +// Поскольку клиентские замеры хранятся в клиентском буфере и записываются с периодичностью, +// указанной в константе ОценкаПроизводительностиПериодЗаписи (по умолчанию, каждую минуту), +// в случае завершения сеанса часть замеров может быть потеряна. +// +// Параметры: +// АвтоЗавершение - Булево - признак автоматического завершения замера. +// Истина - завершение замера будет выполнено автоматически +// через глобальный обработчик ожидания. +// Ложь - завершить замер необходимо явно вызовом процедуры +// ЗавершитьЗамерВремени. +// КлючеваяОперация - Строка - имя ключевой операции. Если Неопределено> то ключевую операцию +// необходимо указать явно вызовом процедуры +// УстановитьКлючевуюОперациюЗамера. +// +// Возвращаемое значение: +// УникальныйИдентификатор - уникальный идентификатор замера, который позволяет идентифицировать замер. +// +Функция НачатьЗамерВремени(АвтоЗавершение = Истина, КлючеваяОперация = Неопределено) Экспорт + + УИДЗамера = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + + Если ВыполнятьЗамерыПроизводительности() Тогда + УИДЗамера = Новый УникальныйИдентификатор(); + Параметры = Новый Структура; + Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); + Параметры.Вставить("УИДЗамера", УИДЗамера); + Параметры.Вставить("АвтоЗавершение", АвтоЗавершение); + Параметры.Вставить("ВыполненаСОшибкой", Ложь); + + НачатьЗамерВремениНаКлиентеСлужебный(Параметры); + КонецЕсли; + + Возврат УИДЗамера; + +КонецФункции + +#КонецОбласти #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -494,6 +574,12 @@ Технологический = Ложь; КонецЕсли; + Если Параметры.Свойство("ВыполненаСОшибкой") Тогда + ВыполненаСОшибкой = Параметры.ВыполненаСОшибкой; + Иначе + ВыполненаСОшибкой = Ложь; + КонецЕсли; + Замеры = ПараметрыПриложения[ИмяПараметра]["Замеры"]; Замеры.Вставить(УИДЗамера, Новый Соответствие); Замер = Замеры[УИДЗамера]; @@ -501,6 +587,7 @@ Замер.Вставить("АвтоЗавершение", АвтоЗавершение); Замер.Вставить("ВремяНачала", ВремяНачала); Замер.Вставить("Комментарий", Комментарий); + Замер.Вставить("ВыполненаСОшибкой", ВыполненаСОшибкой); Замер.Вставить("Технологический", Технологический); Замер.Вставить("ВесЗамера", 1); @@ -534,7 +621,13 @@ Для Каждого Замер Из Замеры Цикл ЗамерЗначение = Замер.Значение; Если ЗамерЗначение["АвтоЗавершение"] Тогда - Если ЗамерЗначение["ВремяНачала"] <= ВремяПодключенияОбработчика И ЗамерЗначение["ВремяОкончания"] = Неопределено Тогда + Если ЗамерЗначение["ВремяНачала"] <= ВремяПодключенияОбработчика И ЗамерЗначение["ВремяОкончания"] = Неопределено Тогда + // Если есть вложенные замеры, зафиксируем последний шаг. + Если ЗамерЗначение["ВложенныеЗамеры"] <> Неопределено + И ЗамерЗначение["ВложенныеЗамеры"].Количество() Тогда + ЗафиксироватьЗамерДлительнойОперации(ЗамерЗначение, 1, ЗамерЗначение["ИмяПоследнегоШага"]); + КонецЕсли; + // Смещение даты клиента рассчитывается внутри процедуры ЗавершитьЗамерВремениСлужебный(Замер.Ключ, ВремяОкончания); Если ЗначениеЗаполнено(Замер.Значение["КлючеваяОперация"]) Тогда @@ -602,17 +695,4 @@ КонецПроцедуры -// Процедура изменяет уникальный идентификатор замера -// Необходима для обратной совместимости, не использовать -// Параметры: -// УИДЗамераСтарый - предыдущий УникальныйИдентификатор замера. -// УИДЗамераНовый - новый УникальныйИдентификатор замера. -Процедура ИзменитьУИДЗамера(УИДЗамераСтарый, УИДЗамераНовый) Экспорт - - ИмяПараметра = "СтандартныеПодсистемы.ОценкаПроизводительностиЗамерВремени"; - Замеры = ПараметрыПриложения[ИмяПараметра]["Замеры"]; - Замеры.Вставить(УИДЗамераНовый, Замеры[УИДЗамераСтарый]); - Замеры.Удалить(УИДЗамераСтарый); - -КонецПроцедуры #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index 8cac103a2..2ad7d3f5d 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -1,336 +1,13 @@ -#Область ПрограммныйИнтерфейс - -#Область УстаревшиеПроцедурыИФункции - -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать процедуру -// ОценкаПроизводительности.СоздатьКлючевыеОперации -// Создает ключевые операции в случае их отсутствия. -// -// Параметры: -// КлючевыеОперации - Массив - массив структур, описывающих ключевые операции. Поля структур, входящих в массив: -// * ИмяКлючевойОперации - Строка - имя ключевой операции. -// * ЦелевоеВремя - Число - целевое время ключевой операции. -// -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -Процедура СоздатьКлючевыеОперации(КлючевыеОперации) Экспорт - ОценкаПроизводительности.СоздатьКлючевыеОперации(КлючевыеОперации); -КонецПроцедуры - -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// ОценкаПроизводительности.ЗакончитьЗамерВремени -// -// Процедура завершает замер времени ключевой операции на сервере -// и записывает результат на сервере в <РегистрСведений.ЗамерыВремени> -// Вызывается только с сервера. -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. -// ВремяНачала - Число, Дата - время начала замера. Если число, то значение, возвращаемое функцией -// ТекущаяУниверсальнаяДатаВМиллисекундах, деленное на 1000. Если дата, то значение -// возвращаемое функцией ТекущаяУниверсальнаяДата. -// Комментарий - Строка - произвольная информация замера. -// -Процедура ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено) Экспорт - ОценкаПроизводительности.ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала * 1000, 1, Комментарий); -КонецПроцедуры - -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// ОценкаПроизводительности.ЗакончитьЗамерВремениТехнологическийНаСервере -// Процедура завершает замер времени технологической ключевой операции на сервере -// и записывает результат на сервере в <РегистрСведений.ЗамерыВремениТехнологические> -// Вызывается только с сервера. -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. -// ВремяНачала - Число, Дата - время начала замера. Если число, то значение, возвращаемое функцией -// ТекущаяУниверсальнаяДатаВМиллисекундах, деленное на 1000. Если дата, то значение -// возвращаемое функцией ТекущаяУниверсальнаяДата. -// Комментарий - Строка - произвольная информация замера. -// -Процедура ЗакончитьЗамерВремениТехнологический(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено) Экспорт - ОценкаПроизводительности.ЗакончитьЗамерВремениТехнологический(КлючеваяОперация, ВремяНачала * 1000, Комментарий); -КонецПроцедуры - -#Иначе - -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать ОценкаПроизводительностиКлиент.НачатьЗамерВремени. -// -// Активизирует замер времени выполнения ключевой операции. Для завершения замера необходимо -// явно вызвать в общем модуле <ОценкаПроизводительностиГлобальный> -// процедуру <Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера)>, необходимо передать точно такой же -// УИДЗамера, как и в данной функции. -// Результат замера будет записан в <РегистрСведений.ЗамерыВремени>. -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. -// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. -// Комментарий - Строка - произвольная информация замера. -// -// Возвращаемое значение: -// УникальныйИдентификатор - уникальный идентификатор замера. -// -Функция НачатьРучнойЗамерВремени(КлючеваяОперация, УИДЗамера = Неопределено, Комментарий = Неопределено) Экспорт - Если УИДЗамера = Неопределено Тогда - УИДЗамера = Новый УникальныйИдентификатор(); - КонецЕсли; - - Параметры = Новый Структура; - Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); - Параметры.Вставить("УИДЗамера", УИДЗамера); - Параметры.Вставить("Комментарий", Комментарий); - Параметры.Вставить("АвтоЗавершение", Ложь); - - НачатьЗамерВремениСлужебный(Параметры); - - Возврат УИДЗамера; -КонецФункции - -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени -// -// Процедура завершает ручной замер времени ключевой операции -// Вызывается только на клиенте. -// -// Параметры: -// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. -// -Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера) Экспорт - ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УИДЗамера); -КонецПроцедуры - -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// ОценкаПроизводительностиКлиент.НачатьЗамерВремениТехнологическийНаКлиенте -// Активизирует замер времени выполнения технологической ключевой операции с явным завершением времени -// длительности ключевой операции. Вызывается только с клиента. -// Для завершения замера необходимо вызвать в общем модуле <ОценкаПроизводительностиГлобальный> -// процедуру <Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера)>, необходимо передать точно такой же -// УИДЗамера, как и в данную процедуру. -// Результат замера будет записан в <РегистрСведений.ЗамерыВремениТехнологические>. -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. -// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. -// Комментарий - Строка - произвольная информация замера. -// -// Возвращаемое значение: -// УникальныйИдентификатор - уникальный идентификатор замера. -// -Функция НачатьРучнойЗамерВремениТехнологический(КлючеваяОперация, УИДЗамера = Неопределено, Комментарий = Неопределено) Экспорт - Если УИДЗамера = Неопределено Тогда - УИДЗамера = Новый УникальныйИдентификатор(); - КонецЕсли; - - Параметры = Новый Структура; - Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); - Параметры.Вставить("УИДЗамера", УИДЗамера); - Параметры.Вставить("Комментарий", Комментарий); - Параметры.Вставить("АвтоЗавершения", Ложь); - Параметры.Вставить("Технологический", Истина); - - НачатьЗамерВремениСлужебный(Параметры); -КонецФункции -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремениНаКлиенте -// Процедура завершает ручной технологический замер времени ключевой операции -// Вызывается только на клиенте. -// -// Параметры: -// УИДЗамера - УникальныйИдентификатор - уникальный идентификатор замера. -// -Процедура ЗакончитьРучнойЗамерВремениТехнологический(УИДЗамера) Экспорт - ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УИДЗамера); -КонецПроцедуры -#КонецЕсли - -// Устарела. Будет удалена в следующей редакции библиотеки. -// Необходимо использовать -// на сервере - ОценкаПроизводительности.НачатьЗамерВремени. -// на клиенте - ОценкаПроизводительностиКлиент.НачатьЗамерВремени. -// -// Активизирует замер времени выполнения ключевой операции. -// Может вызываться как с клиента, так и с сервера. -// Результат замера будет записан в <РегистрСведений.ЗамерыВремени>. -// -// В случае вызова с клиента, заканчивать замер не нужно, время завершения замера зафиксируется -// через глобальный обработчик ожидания <ЗакончитьЗамерВремениАвто>. -// Возвращает время начала замера. -// -// В случае вызова с сервера функция только возвращает время начала -// Закончить замер нужно явно вызовом процедуры -// <ОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено)> -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. При вызове с сервера аргумент игнорируется. -// -// Возвращаемое значение: -// Число - время начала с точностью до миллисекунд. -// -Функция НачатьЗамерВремени(КлючеваяОперация = Неопределено) Экспорт - - Параметры = Новый Структура; - Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); - - ВремяНачала = НачатьЗамерВремениСлужебный(Параметры); - - Возврат ВремяНачала; - -КонецФункции - -// Устарела. Будет удалена в следующей редакции библиотеки. -// НеобходимоИспользовать -// на сервере - ОценкаПроизводительности.НачатьЗамерВремени. -// на клиенте - ОценкаПроизводительностиКлиент.НачатьЗамерВремени. -// на клиенте - для установки комментария замера необходимо использовать -// процедуру ОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера. -// -// Активизирует замер времени выполнения ключевой операции с произвольным комментарием. -// Может вызываться как с клиента, так и с сервера. -// Результат замера будет записан в регистр сведений ЗамерыВремени. -// -// В случае вызова с клиента, заканчивать замер не нужно, время завершения замера зафиксируется -// через глобальный обработчик ожидания ЗакончитьЗамерВремениАвто. -// Возвращает время начала замера. -// -// В случае вызова с сервера функция только возвращает время начала -// закончить замер нужно явно вызовом процедуры общего -// модуля ОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени. -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. При вызове с сервера аргумент игнорируется. -// Комментарий - Строка - дополнительная информация при выполнении замера. -// При вызове с сервера аргумент игнорируется. -// -// Возвращаемое значение: -// Число - время начала с точностью до миллисекунд. -// -Функция НачатьЗамерВремениСКомментарием(КлючеваяОперация, Комментарий) Экспорт - - Параметры = Новый Структура; - Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); - Параметры.Вставить("Комментарий", Комментарий); - - ВремяНачала = НачатьЗамерВремениСлужебный(Параметры); - - Возврат ВремяНачала; - -КонецФункции - -// Устарела. Будет удалена в следующей редакции библиотеки. -// НеобходимоИспользовать -// на сервере - ОценкаПроизводительности.НачатьЗамерВремениНаСервере -// на клиенте - ОценкаПроизводительностиКлиент.НачатьЗамерВремениТехнологическийНаКлиенте -// Активизирует замер времени выполнения технологической ключевой операции. -// Может вызываться как с клиента, так и с сервера. -// Результат замера будет записан в <РегистрСведений.ЗамерыВремениТехнологические>. -// -// В случае вызова с клиента, заканчивать замер не нужно, время завершения замера зафиксируется -// через глобальный обработчик ожидания <ЗакончитьЗамерВремениАвто>. -// Возвращает время начала. -// -// В случае вызова с сервера функция только возвращает время начала -// Закончить замер нужно явно вызовом процедуры <ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено)>. -// -// Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, Строка - ключевая операция или -// имя ключевой операции. При вызове с сервера аргумент игнорируется. -// Комментарий - Строка - произвольная информация замера. -// -// Возвращаемое значение: -// Дата, Число - время начала с точностью до миллисекунд или секунд в зависимости от версии платформы. -// -Функция НачатьЗамерВремениТехнологический(КлючеваяОперация, Комментарий = Неопределено) Экспорт - Параметры = Новый Структура; - Параметры.Вставить("КлючеваяОперация", КлючеваяОперация); - Параметры.Вставить("Комментарий", Комментарий); - Параметры.Вставить("Технологический", Истина); - - ВремяНачала = НачатьЗамерВремениСлужебный(Параметры); - - Возврат ВремяНачала; -КонецФункции - -#КонецОбласти - -#КонецОбласти +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныеПроцедурыИФункции -Функция НачатьЗамерВремениСлужебный(Параметры) - Если Параметры.Свойство("КлючеваяОперация") Тогда - КлючеваяОперация = Параметры.КлючеваяОперация; - Иначе - КлючеваяОперация = Неопределено; - КонецЕсли; - - Если Параметры.Свойство("УИДЗамера") И Параметры.УИДЗамера <> Неопределено Тогда - УИДЗамераВходящий = Параметры.УИДЗамера; - Иначе - УИДЗамераВходящий = Неопределено; - КонецЕсли; - - Если Параметры.Свойство("Комментарий") Тогда - Комментарий = Параметры.Комментарий; - Иначе - Комментарий = Неопределено; - КонецЕсли; - - Если Параметры.Свойство("АвтоЗавершение") И Параметры.АвтоЗавершение <> Неопределено Тогда - АвтоЗавершение = Параметры.АвтоЗавершение; - Иначе - АвтоЗавершение = Истина; - КонецЕсли; - - Если Параметры.Свойство("Технологический") Тогда - Технологический = Параметры.Технологический; - Иначе - Технологический = Ложь; - КонецЕсли; - - ВремяНачала = 0; - Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Если Не ЗначениеЗаполнено(КлючеваяОперация) Тогда - // Считаем, что вызов пришел с сервера. Возвращаем начало замера - Возврат ОценкаПроизводительности.НачатьЗамерВремени()/1000; - КонецЕсли; - - #Иначе - - Если Не ЗначениеЗаполнено(КлючеваяОперация) Тогда - ВызватьИсключение НСтр("ru = 'Не указана ключевая операция.'"); - КонецЕсли; - - Если НЕ Технологический Тогда - УИДЗамера = ОценкаПроизводительностиКлиент.НачатьЗамерВремени(АвтоЗавершение, КлючеваяОперация); - Иначе - УИДЗамера = ОценкаПроизводительностиКлиент.НачатьЗамерВремениТехнологический(АвтоЗавершение, КлючеваяОперация); - КонецЕсли; - - ОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(УИДЗамера, Комментарий); - Если НЕ АвтоЗавершение И УИДЗамераВходящий <> Неопределено Тогда - ОценкаПроизводительностиКлиент.ИзменитьУИДЗамера(УИДЗамера, УИДЗамераВходящий); - КонецЕсли; - - #КонецЕсли - КонецЕсли; - - Возврат ТекущаяУниверсальнаяДатаВМиллисекундах()/1000; - -КонецФункции - // Получает имя дополнительного свойства не проверять приоритеты при записи ключевой операции. // // Возвращаемое значение: @@ -460,87 +137,6 @@ КонецФункции -// Формирует и выводит сообщение, которое может быть связано с элементом -// управления формы. -// -// Параметры -// ТекстСообщенияПользователю - Строка - текст сообщения. -// КлючДанных - ЛюбаяСсылка - на объект информационной базы. -// Ссылка на объект информационной базы, к которому это сообщение относится, -// или ключ записи. -// Поле - Строка - наименование реквизита формы. -// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). -// Отказ - Булево - Выходной параметр. -// Всегда устанавливается в значение Истина. -// -// Пример: -// -// 1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта: -// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( -// НСтр("ru = 'Сообщение об ошибке.'"), , -// "ПолеВРеквизитеФормыОбъект", -// "Объект"); -// -// Альтернативный вариант использования в форме объекта: -// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( -// НСтр("ru = 'Сообщение об ошибке.'"), , -// "Объект.ПолеВРеквизитеФормыОбъект"); -// -// 2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы: -// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( -// НСтр("ru = 'Сообщение об ошибке.'"), , -// "ИмяРеквизитаФормы"); -// -// 3. Для вывода сообщения связанного с объектом информационной базы. -// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( -// НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ); -// -// 4. Для вывода сообщения по ссылке на объект информационной базы. -// ОбщегоНазначенияКлиентСервер.СообщитьПользователю( -// НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ); -// -// Случаи некорректного использования: -// 1. Передача одновременно параметров КлючДанных и ПутьКДанным. -// 2. Передача в параметре КлючДанных значения типа отличного от допустимых. -// 3. Установка ссылки без установки поля (и/или пути к данным). -// -Процедура СообщитьПользователю( - Знач ТекстСообщенияПользователю, - Знач КлючДанных = Неопределено, - Знач Поле = "", - Знач ПутьКДанным = "", - Отказ = Ложь) Экспорт - - Сообщение = Новый СообщениеПользователю; - Сообщение.Текст = ТекстСообщенияПользователю; - Сообщение.Поле = Поле; - - ЭтоОбъект = Ложь; - -#Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ МобильныйКлиент Тогда - Если КлючДанных <> Неопределено - И XMLТипЗнч(КлючДанных) <> Неопределено Тогда - ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; - ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0; - КонецЕсли; -#КонецЕсли - - Если ЭтоОбъект Тогда - Сообщение.УстановитьДанные(КлючДанных); - Иначе - Сообщение.КлючДанных = КлючДанных; - КонецЕсли; - - Если НЕ ПустаяСтрока(ПутьКДанным) Тогда - Сообщение.ПутьКДанным = ПутьКДанным; - КонецЕсли; - - Сообщение.Сообщить(); - - Отказ = Истина; - -КонецПроцедуры - // Добавить элемент компоновки в контейнер элементов компоновки. // // Параметры: diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl index 4e18272b0..579ceeb50 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Функция возвращает ссылку на ключевую операцию по имени. @@ -11,7 +19,7 @@ // Возвращаемое значение: // СправочникСсылка.КлючевыеОперации // -Функция ПолучитьКлючевуюОперациюПоИмени(ИмяКлючевойОперации, ВыполненаСОшибкой = Ложь, Длительная = Ложь) Экспорт +Функция ПолучитьКлючевуюОперациюПоИмени(ИмяКлючевойОперации, Длительная = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -34,7 +42,7 @@ Запрос.УстановитьПараметр("ИмяХеш", ИмяХеш); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда - КлючеваяОперацияСсылка = ОценкаПроизводительности.СоздатьКлючевуюОперацию(ИмяКлючевойОперации, 1, ВыполненаСОшибкой, Длительная); + КлючеваяОперацияСсылка = ОценкаПроизводительности.СоздатьКлючевуюОперацию(ИмяКлючевойОперации, 1, Длительная); Иначе Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl index 8466ad6b8..d8783f3aa 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Получает N худших замеров производительности за период. @@ -375,7 +383,6 @@ БазоваяФункциональностьСуществует = ПодсистемаСуществует("СтандартныеПодсистемы.БазоваяФункциональность"); Если БазоваяФункциональностьСуществует Тогда МодульРаботаВБезопасномРежиме = ОбщийМодуль("РаботаВБезопасномРежиме"); - МодульОбщегоНазначения = ОбщийМодуль("ОбщегоНазначения"); Если Каталоги <> Неопределено Тогда Если Каталоги.Свойство("ВыполнятьЭкспортВЛокальныйКаталог") И Каталоги.ВыполнятьЭкспортВЛокальныйКаталог = Истина Тогда Если Каталоги.Свойство("ЛокальныйКаталогЭкспорта") И ЗначениеЗаполнено(Каталоги.ЛокальныйКаталогЭкспорта) Тогда @@ -411,6 +418,7 @@ Попытка Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Запрос = Новый Запрос; @@ -530,6 +538,81 @@ КонецФункции +// Формирует и выводит сообщение, которое может быть связано с элементом управления формы. +// +// Параметры: +// ТекстСообщенияПользователю - Строка - текст сообщения. +// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится. +// Поле - Строка - наименование реквизита формы. +// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). +// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина. +// +// Пример: +// +// 1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта: +// ОбщегоНазначенияКлиент.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "ПолеВРеквизитеФормыОбъект", +// "Объект"); +// +// Альтернативный вариант использования в форме объекта: +// ОбщегоНазначенияКлиент.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "Объект.ПолеВРеквизитеФормыОбъект"); +// +// 2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы: +// ОбщегоНазначенияКлиент.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "ИмяРеквизитаФормы"); +// +// 3. Для вывода сообщения связанного с объектом информационной базы: +// ОбщегоНазначенияКлиент.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ); +// +// 4. Для вывода сообщения по ссылке на объект информационной базы: +// ОбщегоНазначенияКлиент.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ); +// +// Случаи некорректного использования: +// 1. Передача одновременно параметров КлючДанных и ПутьКДанным. +// 2. Передача в параметре КлючДанных значения типа отличного от допустимых. +// 3. Установка ссылки без установки поля (и/или пути к данным). +// +Процедура СообщитьПользователю( + Знач ТекстСообщенияПользователю, + Знач КлючДанных = Неопределено, + Знач Поле = "", + Знач ПутьКДанным = "", + Отказ = Ложь) Экспорт + + ЭтоОбъект = Ложь; + + Если КлючДанных <> Неопределено + И XMLТипЗнч(КлючДанных) <> Неопределено Тогда + + ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; + ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0; + КонецЕсли; + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщенияПользователю; + Сообщение.Поле = Поле; + + Если ЭтоОбъект Тогда + Сообщение.УстановитьДанные(КлючДанных); + Иначе + Сообщение.КлючДанных = КлючДанных; + КонецЕсли; + + Если НЕ ПустаяСтрока(ПутьКДанным) Тогда + Сообщение.ПутьКДанным = ПутьКДанным; + КонецЕсли; + + Сообщение.Сообщить(); + + Отказ = Истина; + +КонецПроцедуры // Возвращает ссылку на общий модуль по имени. // diff --git a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl index be74af59c..cb663cad2 100644 --- a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl index 15bb7c109..9d419c483 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Формирует список шаблонов заданий очереди. diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl index aecd1ad4e..1642fdd08 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс @@ -477,7 +484,7 @@ ШаблонСообщения = НСтр("ru = 'На найден шаблон задания очереди с идентификатором %1'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Выборка.Шаблон); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий.Выполнение'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -583,7 +590,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Очередь регламентных заданий.Ошибка обработчика ошибок'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -651,7 +658,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Очередь регламентных заданий.Снятие заданий обработки ошибок'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -1057,7 +1064,7 @@ ИмяМетода); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1080,7 +1087,7 @@ ШаблонСообщения = НСтр("ru = 'По завершении выполнения обработчика %1 не была закрыта транзакция'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИмяМетода); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1094,7 +1101,7 @@ ИмяМетода); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1108,7 +1115,7 @@ ИмяМетода); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Выполнение'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1392,7 +1399,7 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИмяМетода, Выборка.ОбластьДанных, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации( НСтр("ru = 'Очередь заданий.Планирование'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения); @@ -1427,7 +1434,7 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Задание.Шаблон); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий.Планирование'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1460,7 +1467,7 @@ ИначеЕсли Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Выполняется Тогда ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено с ошибками'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Выборка.Идентификатор, + ОбщегоНазначения.КодОсновногоЯзыка()), Выборка.Идентификатор, НСтр("ru = 'Исполняющее задание было принудительно завершено'")); // Запланируем разовое задание для выполнения обработчика ошибок. @@ -1505,7 +1512,7 @@ ШаблонСообщения = НСтр("ru = 'Для шаблон заданий очереди %1 не найдено расписание'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Задание.Шаблон); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий.Планирование'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1564,7 +1571,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Очередь заданий.Планирование'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения); @@ -1637,7 +1644,7 @@ ИнформацияОбОшибкеВыполненияЗадания = Неопределено; Попытка ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Старт'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Ссылка); + ОбщегоНазначения.КодОсновногоЯзыка()), Ссылка); Если ЗначениеЗаполнено(Шаблон) Тогда ВыполнитьМетодКонфигурации(ИмяМетода); @@ -1648,7 +1655,7 @@ ВыполненоУспешно = Истина; ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено успешно'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Ссылка); + ОбщегоНазначения.КодОсновногоЯзыка()), Ссылка); Исключение @@ -1667,11 +1674,11 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, ИмяМетода, ПодробноеПредставлениеОшибки(ИнформацияОбОшибкеВыполненияЗадания)); ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено с ошибками'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Ссылка, + ОбщегоНазначения.КодОсновногоЯзыка()), Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибкеВыполненияЗадания)); ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий.Завершено с ошибками'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , ИсполняющееФоновоеЗадание, @@ -1776,7 +1783,7 @@ Попытка Блокировка = Новый БлокировкаДанных(); - БлокировкаСправочника = Блокировка.Добавить("Справочник.ОчередьЗаданий"); + Блокировка.Добавить("Справочник.ОчередьЗаданий"); Блокировка.Заблокировать(); ТекстЗапроса = @@ -1961,7 +1968,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Обновление очереди заданий'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения); diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl index 2d7a0fe8e..1222632a6 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Возвращает соответствие имен методов их псевдонимам (в верхнем регистре) diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl index 0ff121861..170bdeab2 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Вызывается при заполнении массива справочников, которые могут использоваться для @@ -229,7 +237,7 @@ Попытка Блокировка = Новый БлокировкаДанных(); - БлокировкаСправочника = Блокировка.Добавить("Справочник.ОчередьЗаданийОбластейДанных"); + Блокировка.Добавить("Справочник.ОчередьЗаданийОбластейДанных"); Блокировка.Заблокировать(); ТекстЗапроса = @@ -257,7 +265,7 @@ | УдалитьОчередьЗаданий.ОбластьДанных <> -1 | И УдалитьОчередьЗаданий.УдалитьРегламентноеЗадание = &ПустойИдентификатор"; Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ПустойИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.УстановитьПараметр("ПустойИдентификатор", ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл diff --git a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl index 5aed5d7fe..dd32fd594 100644 --- a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выводит подключенные команды в форме. @@ -282,7 +290,7 @@ ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Подключаемые команды'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Подключаемые команды'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.НайтиПоПолномуИмени(ПолноеИмя), ПолноеИмя, diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl index 97c4e744a..b6a8798d2 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Возвращает описание команды по имени элемента формы. diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl index 1a3f80e72..b53107dfb 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обработчик команды формы. @@ -49,7 +57,7 @@ Контекст.ТребуетсяРаботаСФайлами = Ложь; Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеУстановкиРасширенияРаботыСФайлами", ЭтотОбъект, Контекст); ТекстСообщения = НСтр("ru = 'Для продолжения необходимо установить расширение для веб-клиента 1С:Предприятие.'"); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик, ТекстСообщения, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Обработчик, ТекстСообщения); Возврат; КонецЕсли; @@ -181,7 +189,7 @@ ШаблонСообщения = НСтр("ru = 'Документ %1 не проведен: %2'"); НепроведенныеДокументы = Новый Массив; Для Каждого ИнформацияОДокументе Из ДанныеОНепроведенныхДокументах Цикл - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонСообщения, Строка(ИнформацияОДокументе.Ссылка), diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентПовтИсп/Module.bsl index 3ac4594c5..e961dd261 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Возвращает описание команды по имени элемента формы. diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl index a750896c9..15de1b008 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обновляет список команд в зависимости от текущего контекста. diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl index 9221e5b8f..862d63b0b 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // С помощью ПриОпределенииВидовПодключаемыхКоманд можно определить собственные виды подключаемых команд, diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыПовтИсп/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыПовтИсп/Module.bsl index a0576e556..b501f60d5 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Функция КэшФормы(Знач ИмяФормы, Знач ИсточникиЧерезЗапятую, Знач ЭтоФормаОбъекта) Экспорт @@ -40,13 +48,9 @@ Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл МассивПриемника = СоответствиеПриемник[КлючИЗначение.Ключ]; Если МассивПриемника = Неопределено Тогда - СоответствиеПриемник.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + СоответствиеПриемник[КлючИЗначение.Ключ] = КлючИЗначение.Значение; Иначе - Для Каждого Значение Из КлючИЗначение.Значение Цикл - Если МассивПриемника.Найти(Значение) = Неопределено Тогда - МассивПриемника.Добавить(Значение); - КонецЕсли; - КонецЦикла; + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивПриемника, КлючИЗначение.Значение, Истина); КонецЕсли; КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonModules/ПодсистемыКонфигурацииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПодсистемыКонфигурацииПереопределяемый/Module.bsl index c94b1cceb..27aff0250 100644 --- a/SSL/src/CommonModules/ПодсистемыКонфигурацииПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПодсистемыКонфигурацииПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определяет список модулей библиотек и конфигурации, которые предоставляют diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl index dd0184f5e..123704f9a 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Поиск дублей для указанного значения. @@ -169,9 +177,15 @@ // Производит замену ссылок во всех данных. // // Параметры: -// -// ПараметрыЗамены - Структура - со свойствами ПарыЗамен и Параметры, -// которые соответствуют одноименным параметрам ОбщегоНазначения.ЗаменитьСсылки. +// Параметры - Структура - где: +// * ПарыЗамен - Соответствие - Пары замен. +// * Ключ - ЛюбаяСсылка - Что ищем (дубль). +// * Значение - ЛюбаяСсылка - На что заменяем (оригинал). +// Ссылки сами на себя и пустые ссылки для поиска будут проигнорированы. +// * СпособУдаления - Строка - Необязательный. Что делать с дублем после успешной замены. +// "" - По умолчанию. Не предпринимать никаких действий. +// "Пометка" - Помечать на удаление. +// "Непосредственно" - Удалять непосредственно. // АдресРезультата - Строка - адрес временного хранилища, куда будет помещен результат замены - ТаблицаЗначений: // * Ссылка - ЛюбаяСсылка - Ссылка, которую заменяли. // * ОбъектОшибки - Произвольный - Объект - причина ошибки. @@ -185,9 +199,14 @@ // "ЗаменаЗапрещена" - метод ВозможностьЗаменыЭлементов вернул отказ. // * ТекстОшибки - Строка - Подробное описание ошибки. // -Процедура ЗаменитьСсылки(ПараметрыЗамены, Знач АдресРезультата) Экспорт +Процедура ЗаменитьСсылки(Параметры, Знач АдресРезультата) Экспорт - Результат = ОбщегоНазначения.ЗаменитьСсылки(ПараметрыЗамены.ПарыЗамен, ПараметрыЗамены.Параметры); + ПараметрыМетода = Новый Структура; + ПараметрыМетода.Вставить("СпособУдаления", Параметры.СпособУдаления); + ПараметрыМетода.Вставить("ВключатьБизнесЛогику", Истина); + ПараметрыМетода.Вставить("ЗаменаПарыВТранзакции", Ложь); + + Результат = ОбщегоНазначения.ЗаменитьСсылки(Параметры.ПарыЗамен, ПараметрыМетода); ПоместитьВоВременноеХранилище(Результат, АдресРезультата); КонецПроцедуры @@ -276,7 +295,7 @@ // Представление подсистемы. Используется при записи в журнал регистрации и в других местах. Функция НаименованиеПодсистемы(ДляПользователя) Экспорт - КодЯзыка = ?(ДляПользователя, ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(), ""); + КодЯзыка = ?(ДляПользователя, ОбщегоНазначения.КодОсновногоЯзыка(), ""); Возврат НСтр("ru = 'Поиск и удаление дублей'", КодЯзыка); КонецФункции diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl index 0c700d791..048f300ba 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму объединения элементов справочников, планов видов характеристик, видов расчетов и счетов. diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl index 1c0805453..e9954c762 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублейПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определить объекты, в модулях менеджеров которых предусмотрена возможность параметризации diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl index 905569ec6..92052c501 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl @@ -1,11 +1,89 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс -// Открывает форму управления полнотекстовым поиском и извлечения текстов. +// Обработчик события ОбработкаОповещения для формы, на которой требуется отобразить флажок использования поиска. // -Процедура ПоказатьУправлениеПолнотекстовымПоискомИИзвлечениемТекстов() Экспорт +// Параметры: +// ИмяСобытия - Строка - имя события, которое было получено обработчиком события на форме. +// ИспользоватьПолнотекстовыйПоиск - Число - Реквизит, в которое будет помещено значение. +// +// Пример: +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда +// МодульПолнотекстовыйПоискКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолнотекстовыйПоискКлиент"); +// МодульПолнотекстовыйПоискКлиент.ОбработкаОповещенияИзмененияФлажкаИспользоватьПоиск( +// ИмяСобытия, +// ИспользоватьПолнотекстовыйПоиск); +// КонецЕсли; +// +Процедура ОбработкаОповещенияИзмененияФлажкаИспользоватьПоиск(Знач ИмяСобытия, ИспользоватьПолнотекстовыйПоиск) Экспорт + + Если ИмяСобытия = "ИзменилсяРежимПолнотекстовогоПоиска" Тогда + ИспользоватьПолнотекстовыйПоиск = ПолнотекстовыйПоискСлужебныйВызовСервера.ЗначениеФлажкаИспользоватьПоиск(); + КонецЕсли; + +КонецПроцедуры + +// Обработчик события ПриИзменении для флажка, выполняющего переключение режима полнотекстового поиска. +// Флажок должен быть связан с реквизитом типа Число. +// +// Параметры: +// ЗначениеФлажкаИспользоватьПоиск - Число - новое значение флажка, которое требуется обработать. +// +// Пример: +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда +// МодульПолнотекстовыйПоискКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолнотекстовыйПоискКлиент"); +// МодульПолнотекстовыйПоискКлиент.ПриИзмененииФлажкаИспользоватьПоиск(ИспользоватьПолнотекстовыйПоиск); +// КонецЕсли; +// +Процедура ПриИзмененииФлажкаИспользоватьПоиск(ЗначениеФлажкаИспользоватьПоиск) Экспорт + + ИспользоватьПолнотекстовыйПоиск = (ЗначениеФлажкаИспользоватьПоиск = 1); + + Установлено = ПолнотекстовыйПоискСлужебныйВызовСервера.УстановитьРежимПолнотекстовогоПоиска( + ИспользоватьПолнотекстовыйПоиск); + + Если Не Установлено Тогда + ПолнотекстовыйПоискСлужебныйКлиент.ПоказатьПредупреждениеМонопольногоРежимаИзменения(); + КонецЕсли; + + Оповестить("ИзменилсяРежимПолнотекстовогоПоиска"); + +КонецПроцедуры + +// Открывает форму управления полнотекстовым поиском и извлечения текстов. +// Не забудьте команду, выполняющую вызов процедуры, +// установить зависимой от функциональной опции ИспользоватьПолнотекстовыйПоиск. +// +// Пример: +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда +// МодульПолнотекстовыйПоискКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолнотекстовыйПоискКлиент"); +// МодульПолнотекстовыйПоискКлиент.ПоказатьНастройку(); +// КонецЕсли; +// +Процедура ПоказатьНастройку() Экспорт ОткрытьФорму("Обработка.ПолнотекстовыйПоискВДанных.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов"); КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ПоказатьНастройку. +// Открывает форму управления полнотекстовым поиском и извлечения текстов. +// +Процедура ПоказатьУправлениеПолнотекстовымПоискомИИзвлечениемТекстов() Экспорт + + ПоказатьНастройку(); + +КонецПроцедуры + #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index dd857ed42..9becba857 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обновляет индекс полнотекстового поиска. @@ -22,13 +30,36 @@ // Функция ИндексПоискаАктуален() Экспорт - Возврат ( - // Операции не разрешены, - // или индекс полностью соответствует текущему состоянию информационной базы, - // или индекс обновлялся менее 5 минут назад. - Не ОперацииРазрешены() - Или ПолнотекстовыйПоиск.ИндексАктуален() - Или ТекущаяДата() < (ПолнотекстовыйПоиск.ДатаАктуальности() + 300)); // Исключение из правила ТекущаяДатаСеанса(). + Состояние = СостояниеПолнотекстовогоПоиска(); + Возврат Состояние = "ПоискРазрешен"; + +КонецФункции + +// Состояние флажка для формы настроек полнотекстового поиска. +// +// Возвращаемое значение: +// Число - 0 - не включен, 1 - включен - 2 ошибка настройки, рассинхронизация настроек. +// +// Пример: +// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда +// МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); +// ИспользоватьПолнотекстовыйПоиск = МодульПолнотекстовыйПоискСервер.ЗначениеФлажкаИспользоватьПоиск(); +// Иначе +// Элементы.ГруппаУправлениеПолнотекстовымПоиском.Видимость = Ложь; +// КонецЕсли; +// +Функция ЗначениеФлажкаИспользоватьПоиск() Экспорт + + Состояние = СостояниеПолнотекстовогоПоиска(); + Если Состояние = "ПоискЗапрещен" Тогда + Результат = 0; + ИначеЕсли Состояние = "ОшибкаНастройкиПоиска" Тогда + Результат = 2; + Иначе + Результат = 1; + КонецЕсли; + + Возврат Результат; КонецФункции @@ -36,14 +67,90 @@ #Область СлужебныйПрограммныйИнтерфейс -// Возвращает разрешены ли операции полнотекстового поиска: обновление индексов, очистка индексов, поиск. -Функция ОперацииРазрешены() Экспорт +// Возвращает текущее состояние полнотекстового поиска в зависимости от настроек и актуальности. +// Не выбрасывает исключений. +// +// Возвращаемое значение: +// Строка - варианты +// - "ПоискРазрешен" +// - "ПоискЗапрещен" +// - "ВыполняетсяОбновлениеИндекса" +// - "ВыполняетсяСлияниеИндекса" +// - "ТребуетсяОбновлениеИндекса" +// - "ОшибкаНастройкиПоиска" +// +Функция СостояниеПолнотекстовогоПоиска() Экспорт - Возврат (ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить); + Если ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск") Тогда + + Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда + + Если ТекущаяДата() < (ПолнотекстовыйПоиск.ДатаАктуальности() + 300) Тогда + Возврат "ПоискРазрешен"; + Иначе + Если ИндексПолнотекстовогоПоискаАктуален() Тогда + Возврат "ПоискРазрешен"; + ИначеЕсли ВыполняетсяФоновоеЗаданиеОбновлениеИндекса() Тогда + Возврат "ВыполняетсяОбновлениеИндекса"; + ИначеЕсли ВыполняетсяФоновоеЗаданиеСлияниеИндекса() Тогда + Возврат "ВыполняетсяСлияниеИндекса"; + Иначе + Возврат "ТребуетсяОбновлениеИндекса"; + КонецЕсли; + КонецЕсли; + + Иначе + // Рассинхронизация значения константы ИспользоватьПолнотекстовыйПоиск + // и установленного режима полнотекстового поиска в информационной базе. + Возврат "ОшибкаНастройкиПоиска"; + КонецЕсли; + + Иначе + Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда + // Рассинхронизация значения константы ИспользоватьПолнотекстовыйПоиск + // и установленного режима полнотекстового поиска в информационной базе. + Возврат "ОшибкаНастройкиПоиска"; + Иначе + Возврат "ПоискЗапрещен"; + КонецЕсли; + КонецЕсли; КонецФункции -Функция ИспользоватьПолнотекстовыйПоиск() Экспорт +// Выполнят установку порядка разделов поиска +// для события ПолнотекстовыйПоискСерверПереопределяемый.ПриПолученииРазделовПолнотекстовогоПоиска +// +// Параметры: +// РазделыПоиска - ДеревоЗначений - области поиска. Содержит колонки: +// ** Раздел - Строка - Представление раздела: подсистемы или объекта метаданных. +// ** Картинка - Картинка - Картинка раздела, рекомендуется только для корневых разделов. +// ** ОбъектМД - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Задается только для объектов метаданных, +// для разделов остается пустым. +// ПорядокРазделов - Массив - синонимы подсистем - разделов, чем выше индекс - тем ниже в списке будет раздел. +// +Процедура УстановитьПорядокРазделовПолнотекстовогоПоиска(РазделыПоиска, ПорядокРазделов) Экспорт + + КолонкаПорядка = РазделыПоиска.Колонки.Добавить("Порядок"); + + Для Индекс = 0 По ПорядокРазделов.ВГраница() Цикл + ИмяРаздела = ПорядокРазделов[Индекс]; + СтрокаРаздел = РазделыПоиска.Строки.Найти(ИмяРаздела, "Раздел"); + Если СтрокаРаздел <> Неопределено Тогда + СтрокаРаздел.Порядок = Индекс; + КонецЕсли; + КонецЦикла; + + РазделыПоиска.Строки.Сортировать("Порядок"); + РазделыПоиска.Колонки.Удалить(КолонкаПорядка); + +КонецПроцедуры + +// Объект метаданных с функциональной опцией использования полнотекстового поиска. +// +// Возвращаемое значение: +// ОбъектМетаданныхФункциональнаяОпция - метаданные функциональной опции +// +Функция ФункциональнаяОпцияИспользоватьПолнотекстовыйПоиск() Экспорт Возврат Метаданные.ФункциональныеОпции.ИспользоватьПолнотекстовыйПоиск; @@ -54,41 +161,68 @@ // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); - Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) - Или Не ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск") - Или МодульТекущиеДелаСервер.ДелоОтключено("ПолнотекстовыйПоискВДанных") Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда Возврат; КонецЕсли; - ДатаАктуальностиИндекса = ПолнотекстовыйПоиск.ДатаАктуальности(); - ТекущаяДата = ТекущаяДата(); // Исключение, должна использоваться ТекущаяДата(). - Если ДатаАктуальностиИндекса > ТекущаяДата Тогда - Интервал = НСтр("ru = 'менее одного дня'"); - Иначе - Интервал = ОбщегоНазначения.ИнтервалВремениСтрокой(ДатаАктуальностиИндекса, ТекущаяДата); + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + Если МодульТекущиеДелаСервер.ДелоОтключено("ПолнотекстовыйПоискВДанных") Тогда + Возврат; + КонецЕсли; + + Состояние = СостояниеПолнотекстовогоПоиска(); + Если Состояние = "ПоискЗапрещен" Тогда + Возврат; КонецЕсли; - ДнейСПоследнегоОбновления = Цел((ТекущаяДата - ДатаАктуальностиИндекса) / 60 / 60 / 24); Раздел = Метаданные.Подсистемы.Найти("Администрирование"); - Если Раздел <> Неопределено Тогда - Разделы = Новый Массив; - Разделы.Добавить(Раздел); - Иначе + Если Раздел = Неопределено Тогда Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Обработки.ПолнотекстовыйПоискВДанных.ПолноеИмя()); + Если Разделы.Количество() = 0 Тогда + Возврат; + Иначе + Раздел = Разделы[0]; + КонецЕсли; КонецЕсли; - Для каждого Раздел Из Разделы Цикл - ИдентификаторПолнотекстовыйПоиск = "ПолнотекстовыйПоискВДанных" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); - Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = ИдентификаторПолнотекстовыйПоиск; - Дело.ЕстьДела = (ДнейСПоследнегоОбновления >= 1 И Не ПолнотекстовыйПоиск.ИндексАктуален()); - Дело.Представление = НСтр("ru = 'Индекс полнотекстового поиска устарел'"); - Дело.Форма = "Обработка.ПолнотекстовыйПоискВДанных.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов"; - Дело.Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Последнее обновление %1 назад'"), Интервал); - Дело.Владелец = Раздел; - КонецЦикла; + // Ошибка настройки поиска + + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "ПолнотекстовыйПоискВДанныхОшибкаНастройкиПоиска"; + Дело.ЕстьДела = (Состояние = "ОшибкаНастройкиПоиска"); + Дело.Представление = НСтр("ru = 'Ошибка настройки полнотекстового поиска'"); + Дело.Форма = "Обработка.ПолнотекстовыйПоискВДанных.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов"; + Дело.Подсказка = + НСтр("ru = 'Рассинхронизация значения константы ИспользоватьПолнотекстовыйПоиск + |и установленного режима полнотекстового поиска в информационной базе. + |Попробуйте выключить полнотекстовый поиск и снова включить.'"); + Дело.Владелец = Раздел; + + // Требуется обновление индекса + + ДатаАктуальностиИндекса = ПолнотекстовыйПоиск.ДатаАктуальности(); + ТекущаяДата = ТекущаяДата(); // Исключение, должна использоваться ТекущаяДата(). + + Если ДатаАктуальностиИндекса > ТекущаяДата Тогда + Интервал = НСтр("ru = 'менее одного дня назад'"); + Иначе + Интервал = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 назад'"), + ОбщегоНазначения.ИнтервалВремениСтрокой(ДатаАктуальностиИндекса, ТекущаяДата)); + КонецЕсли; + + ДнейСПоследнегоОбновления = Цел((ТекущаяДата - ДатаАктуальностиИндекса) / 60 / 60 / 24); + ЕстьДела = (ДнейСПоследнегоОбновления >= 1 И Состояние = "ТребуетсяОбновлениеИндекса"); + + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "ПолнотекстовыйПоискВДанныхТребуетсяОбновлениеИндекса"; + Дело.ЕстьДела = ЕстьДела; + Дело.Представление = НСтр("ru = 'Индекс полнотекстового поиска устарел'"); + Дело.Форма = "Обработка.ПолнотекстовыйПоискВДанных.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов"; + Дело.Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Последнее обновление %1'"), + Интервал); + Дело.Владелец = Раздел; КонецПроцедуры @@ -108,11 +242,11 @@ Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД; - Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПолнотекстовыйПоиск; + Зависимость.ФункциональнаяОпция = ФункциональнаяОпцияИспользоватьПолнотекстовыйПоиск(); Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.СлияниеИндексаППД; - Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПолнотекстовыйПоиск; + Зависимость.ФункциональнаяОпция = ФункциональнаяОпцияИспользоватьПолнотекстовыйПоиск(); КонецПроцедуры @@ -125,8 +259,8 @@ // Процедура ИнициализироватьФункциональнуюОпциюПолнотекстовыйПоиск() Экспорт - ЗначениеКонстанты = ОперацииРазрешены(); - Константы.ИспользоватьПолнотекстовыйПоиск.Установить(ЗначениеКонстанты); + ОперацииРазрешены = (ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить); + Константы.ИспользоватьПолнотекстовыйПоиск.Установить(ОперацииРазрешены); КонецПроцедуры @@ -168,45 +302,6 @@ #Область СостояниеПоиска -Функция СостояниеПолнотекстовогоПоиска() Экспорт - - Если ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск") Тогда - - Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда - - // Исключение из правила ТекущаяДатаСеанса(). - Если ТекущаяДата() < (ПолнотекстовыйПоиск.ДатаАктуальности() + 300) Тогда - Возврат "ПоискРазрешен"; - Иначе - Если ПолнотекстовыйПоиск.ИндексАктуален() Тогда - Возврат "ПоискРазрешен"; - ИначеЕсли ВыполняетсяФоновоеЗаданиеОбновлениеИндекса() Тогда - Возврат "ВыполняетсяОбновлениеИндекса"; - ИначеЕсли ВыполняетсяФоновоеЗаданиеСлияниеИндекса() Тогда - Возврат "ВыполняетсяСлияниеИндекса"; - Иначе - Возврат "ТребуетсяОбновлениеИндекса"; - КонецЕсли; - КонецЕсли; - - Иначе - // Рассинхронизация значения константы ИспользоватьПолнотекстовыйПоиск - // и установленного режима полнотекстового поиска в информационной базе. - Возврат "ОшибкаНастройкиПоиска"; - КонецЕсли; - - Иначе - Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда - // Рассинхронизация значения константы ИспользоватьПолнотекстовыйПоиск - // и установленного режима полнотекстового поиска в информационной базе. - Возврат "ОшибкаНастройкиПоиска"; - Иначе - Возврат "ПоискЗапрещен"; - КонецЕсли; - КонецЕсли; - -КонецФункции - Функция ВыполняетсяФоновоеЗаданиеОбновлениеИндекса() РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД; @@ -233,6 +328,23 @@ КонецФункции +Функция ИндексПолнотекстовогоПоискаАктуален() + + Актуален = Ложь; + + Попытка + Актуален = ПолнотекстовыйПоиск.ИндексАктуален(); + Исключение + ЗаписьЖурнала( + УровеньЖурналаРегистрации.Предупреждение, + НСтр("ru = 'Не удалось проверить состояние индекса полнотекстового поиска'"), + ИнформацияОбОшибке()); + КонецПопытки; + + Возврат Актуален; + +КонецФункции + #КонецОбласти #Область ВыполнениеПоиска @@ -252,11 +364,11 @@ Функция ВыполнитьПолнотекстовыйПоиск(ПараметрыПоиска) Экспорт - СтрокаПоиска = ПараметрыПоиска.СтрокаПоиска; - Направление = ПараметрыПоиска.НаправлениеПоиска; - ТекущаяПозиция = ПараметрыПоиска.ТекущаяПозиция; + СтрокаПоиска = ПараметрыПоиска.СтрокаПоиска; + Направление = ПараметрыПоиска.НаправлениеПоиска; + ТекущаяПозиция = ПараметрыПоиска.ТекущаяПозиция; ИскатьВРазделах = ПараметрыПоиска.ИскатьВРазделах; - ОбластиПоиска = ПараметрыПоиска.ОбластиПоиска; + ОбластиПоиска = ПараметрыПоиска.ОбластиПоиска; РазмерПорции = 10; ОписаниеОшибки = ""; @@ -267,7 +379,7 @@ Если ИскатьВРазделах И ОбластиПоиска.Количество() > 0 Тогда СписокПоиска.ИспользованиеМетаданных = ИспользованиеМетаданныхПолнотекстовогоПоиска.НеИспользовать; - Для каждого Область Из ОбластиПоиска Цикл + Для Каждого Область Из ОбластиПоиска Цикл ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Область.Значение); СписокПоиска.ОбластьПоиска.Добавить(ОбъектМетаданных); КонецЦикла; @@ -333,7 +445,7 @@ СтрокаСпискаПоиска = СписокПоиска.Получить(Индекс); МетаданныеОбъекта = СтрокаСпискаПоиска.Метаданные; - Значение = СтрокаСпискаПоиска.Значение; + Значение = СтрокаСпискаПоиска.Значение; Переопределяемый_ПриПолученииПолнотекстовымПоиском(МетаданныеОбъекта, Значение, Представление); @@ -386,7 +498,7 @@ Функция СтрокиОписанияHTML(СписокЭлементовDivDOM) СтрокиОписанияHTML = Новый Массив; - Для каждого ЭлементDOM Из СписокЭлементовDivDOM Цикл + Для Каждого ЭлементDOM Из СписокЭлементовDivDOM Цикл Если ЭлементDOM.ИмяКласса = "textPortion" Тогда @@ -409,7 +521,7 @@ Функция СтрокиПредставления(СписокЭлементовAnchorDOM) СтрокиПредставления = Новый Массив; - Для каждого ЭлементDOM Из СписокЭлементовAnchorDOM Цикл + Для Каждого ЭлементDOM Из СписокЭлементовAnchorDOM Цикл Представление = ЭлементDOM.ТекстовоеСодержимое; СтрокиПредставления.Добавить(Представление); @@ -436,11 +548,12 @@ Если МетаданныеОбъекта = Метаданные.РегистрыСведений["ДополнительныеСведения"] Тогда Значение = Значение.Объект; - МетаданныеОбъекта = Значение.Метаданные(); - Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1: %2'"), - МетаданныеОбъекта.ПредставлениеОбъекта, Строка(Значение)); + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1: %2'"), + МетаданныеОбъекта.ПредставлениеОбъекта, + Строка(Значение)); КонецЕсли; @@ -455,19 +568,29 @@ // Общая процедура для обновления и слияния индекса ППД. Процедура ОбновитьИндекс(ПредставлениеПроцедуры, РазрешитьСлияние = Ложь, Порциями = Ложь) - Если НЕ ОперацииРазрешены() Тогда + Если (ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() <> РежимПолнотекстовогоПоиска.Разрешить) Тогда Возврат; КонецЕсли; ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); - ЗаписьЖурнала(Неопределено, НСтр("ru = 'Запуск процедуры ""%1"".'"), , ПредставлениеПроцедуры); + ЗаписьЖурнала( + Неопределено, + НСтр("ru = 'Запуск процедуры ""%1"".'"),, + ПредставлениеПроцедуры); Попытка ПолнотекстовыйПоиск.ОбновитьИндекс(РазрешитьСлияние, Порциями); - ЗаписьЖурнала(Неопределено, НСтр("ru = 'Успешное завершение процедуры ""%1"".'"), , ПредставлениеПроцедуры); + ЗаписьЖурнала( + Неопределено, + НСтр("ru = 'Успешное завершение процедуры ""%1"".'"),, + ПредставлениеПроцедуры); Исключение - ЗаписьЖурнала(Неопределено, НСтр("ru = 'Ошибка выполнения процедуры ""%1"":'"), ИнформацияОбОшибке(), ПредставлениеПроцедуры); + ЗаписьЖурнала( + УровеньЖурналаРегистрации.Предупреждение, + НСтр("ru = 'Не удалось выполнить процедуру ""%1"":'"), + ИнформацияОбОшибке(), + ПредставлениеПроцедуры); КонецПопытки; КонецПроцедуры @@ -480,7 +603,10 @@ // ИнформацияОбОшибке - ИнформацияОбОшибке, Строка - Информация об ошибке, которая будет размещена после комментария. // Параметр - Строка - Для подстановки в КомментарийСПараметрами вместо %1. // -Процедура ЗаписьЖурнала(УровеньЖурнала, КомментарийСПараметрами, ИнформацияОбОшибке = Неопределено, +Процедура ЗаписьЖурнала( + УровеньЖурнала, + КомментарийСПараметрами, + ИнформацияОбОшибке = Неопределено, Параметр = Неопределено) // Определение уровня журнала регистрации на основе типа переданного сообщения об ошибке. @@ -508,7 +634,7 @@ // Запись в журнал регистрации. ЗаписьЖурналаРегистрации( - НСтр("ru = 'Полнотекстовое индексирование'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Полнотекстовое индексирование'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурнала, , , ТекстДляЖурнала); diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl index b35c63e87..6b3277af2 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСерверПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Позволяет внести изменения в дерево с разделами полнотекстового поиска, отображаемого при выборе области поиска. diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйВызовСервера/Module.bsl new file mode 100644 index 000000000..36936f116 --- /dev/null +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйВызовСервера/Module.bsl @@ -0,0 +1,45 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Устанавливает режим полнотекстового поиска +// Выполняет: +// - изменяет режим платформенного механизма полнотекстового поиска +// - установку значение в константу ИспользоватьПолнотекстовыйПоиск +// - изменяет значение функциональной опции ИспользоватьПолнотекстовыйПоиск +// - изменяется режим регламентного задание ОбновлениеИндексаППД +// - изменяется режим регламентного задание СлияниеИндексаППД +// - изменяется режим регламентного задание ИзвлечениеТекста подсистемы РаботаСФайлами +// +Функция УстановитьРежимПолнотекстовогоПоиска(ИспользоватьПолнотекстовыйПоиск) Экспорт + + Если Не Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для совершения операции.'"); + КонецЕсли; + + Попытка + Константы.ИспользоватьПолнотекстовыйПоиск.Установить(ИспользоватьПолнотекстовыйПоиск); + Исключение + Возврат Ложь; + КонецПопытки; + + Возврат Истина; + +КонецФункции + +// (См. ПолнотекстовыйПоискСервер.ЗначениеФлажкаИспользоватьПоиск) +// +Функция ЗначениеФлажкаИспользоватьПоиск() Экспорт + + Возврат ПолнотекстовыйПоискСервер.ЗначениеФлажкаИспользоватьПоиск(); + +КонецФункции + +#КонецОбласти + diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйВызовСервера/ПолнотекстовыйПоискСлужебныйВызовСервера.mdo b/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйВызовСервера/ПолнотекстовыйПоискСлужебныйВызовСервера.mdo new file mode 100644 index 000000000..baf85c2df --- /dev/null +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйВызовСервера/ПолнотекстовыйПоискСлужебныйВызовСервера.mdo @@ -0,0 +1,10 @@ + + + ПолнотекстовыйПоискСлужебныйВызовСервера + + ru + Полнотекстовый поиск служебный вызов сервера + + true + true + diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..abb39ffd4 --- /dev/null +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйКлиент/Module.bsl @@ -0,0 +1,34 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Процедура ПоказатьПредупреждениеМонопольногоРежимаИзменения() Экспорт + + ТекстВопроса = + НСтр("ru = 'Для изменения режима полнотекстового поиска требуется + |завершение сеансов всех пользователей, кроме текущего.'"); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("АктивныеПользователи", НСтр("ru = 'Активные пользователи'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + Обработчик = Новый ОписаниеОповещения("ПослеОтображениеПредупреждения", ЭтотОбъект); + ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки,, "АктивныеПользователи"); + +КонецПроцедуры + +Процедура ПослеОтображениеПредупреждения(Ответ, ПараметрыВыполнения) Экспорт + + Если Ответ = "АктивныеПользователи" Тогда + СтандартныеПодсистемыКлиент.ОткрытьСписокАктивныхПользователей(); + КонецЕсли + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйКлиент/ПолнотекстовыйПоискСлужебныйКлиент.mdo b/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйКлиент/ПолнотекстовыйПоискСлужебныйКлиент.mdo new file mode 100644 index 000000000..b2acf158f --- /dev/null +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСлужебныйКлиент/ПолнотекстовыйПоискСлужебныйКлиент.mdo @@ -0,0 +1,10 @@ + + + ПолнотекстовыйПоискСлужебныйКлиент + + ru + Полнотекстовый поиск служебный клиент + + true + true + diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl index 98ae71196..2d92a37a5 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Получает файл из Интернета по протоколу http(s), либо ftp и сохраняет его по указанному пути на сервере. @@ -12,16 +20,16 @@ // * Статус - Булево - результат получения файла. // * Путь - Строка - путь к файлу на сервере, ключ используется только если статус Истина. // * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь. -// * Заголовки - Соответствие - см. в синтаксис-помощнике описание параметра Заголовки объекта HTTPОтвет. +// * Заголовки - Соответствие - см. в синтакс-помощнике описание параметра Заголовки объекта HTTPОтвет. // * КодСостояния - Число - Добавляется при возникновении ошибки. -// См. в синтаксис-помощнике описание параметра КодСостояния объекта HTTPОтвет. +// См. в синтакс-помощнике описание параметра КодСостояния объекта HTTPОтвет. // Функция СкачатьФайлНаСервере(Знач URL, ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт НастройкаСохранения = Новый Соответствие; НастройкаСохранения.Вставить("МестоХранения", "Сервер"); - Возврат ПолучениеФайловИзИнтернетаКлиентСервер.СкачатьФайл(URL, + Возврат ПолучениеФайловИзИнтернетаСлужебный.СкачатьФайл(URL, ПараметрыПолучения, НастройкаСохранения, ЗаписыватьОшибку); КонецФункции @@ -42,16 +50,16 @@ // * Путь - Строка - адрес временного хранилища с двоичными данными файла, // ключ используется только если статус Истина. // * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь. -// * Заголовки - Соответствие - см. в синтаксис-помощнике описание параметра Заголовки объекта HTTPОтвет. +// * Заголовки - Соответствие - см. в синтакс-помощнике описание параметра Заголовки объекта HTTPОтвет. // * КодСостояния - Число - Добавляется при возникновении ошибки. -// См. в синтаксис-помощнике описание параметра КодСостояния объекта HTTPОтвет. +// См. в синтакс-помощнике описание параметра КодСостояния объекта HTTPОтвет. // Функция СкачатьФайлВоВременноеХранилище(Знач URL, ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт НастройкаСохранения = Новый Соответствие; НастройкаСохранения.Вставить("МестоХранения", "ВременноеХранилище"); - Возврат ПолучениеФайловИзИнтернетаКлиентСервер.СкачатьФайл(URL, + Возврат ПолучениеФайловИзИнтернетаСлужебный.СкачатьФайл(URL, ПараметрыПолучения, НастройкаСохранения, ЗаписыватьОшибку); КонецФункции @@ -101,4 +109,167 @@ КонецФункции +// Возвращает объект ИнтернетПрокси для доступа в Интернет. +// Допустимые протоколы для создания ИнтернетПрокси http, https, ftp и ftps. +// +// Параметры: +// URLИлиПротокол - Строка - url в формате [Протокол://]<Сервер>/<Путь к файлу на сервере>, +// либо идентификатор протокола (http, ftp, ...). +// +// Возвращаемое значение: +// ИнтернетПрокси - Описывает параметры прокси-серверов для различных протоколов. +// Если не удалось распознать схему сетевой протокол, +// то будет создать прокси на основании протокола HTTP. +// +Функция ПолучитьПрокси(Знач URLИлиПротокол) Экспорт + + ДопустимыеПротоколы = Новый Соответствие(); + ДопустимыеПротоколы.Вставить("HTTP", Истина); + ДопустимыеПротоколы.Вставить("HTTPS", Истина); + ДопустимыеПротоколы.Вставить("FTP", Истина); + ДопустимыеПротоколы.Вставить("FTPS", Истина); + + НастройкаПроксиСервера = НастройкиПроксиНаСервере(); + + Если СтрНайти(URLИлиПротокол, "://") > 0 Тогда + СтруктураURL = ОбщегоНазначенияКлиентСервер.СтруктураURI(URLИлиПротокол); + Протокол = ?(ПустаяСтрока(СтруктураURL.Схема), "http", СтруктураURL.Схема); + Иначе + Протокол = НРег(URLИлиПротокол); + КонецЕсли; + + Если ДопустимыеПротоколы[ВРег(Протокол)] = Неопределено Тогда + Протокол = "HTTP"; + КонецЕсли; + + Возврат ПолучениеФайловИзИнтернетаСлужебный.НовыйИнтернетПрокси(НастройкаПроксиСервера, Протокол); + +КонецФункции + +// Запускает диагностику сетевого ресурса. +// В модели сервиса возвращается только описание ошибки. +// +// Параметры: +// URL - Строка - адрес URL ресурса, диагностику которого надо выполнить. +// +// Возвращаемое значение: +// Структура - Результат диагностики: +// * ОписаниеОшибки - Строка - краткое описание ошибки. +// * ЖурналДиагностики - Строка - подробный журнал диагностики с техническими подробностями. +// +// Пример: +// // Диагностика веб-сервиса адресного классификатора. +// Результат = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения("https://api.orgaddress.1c.ru/orgaddress/v1?wsdl"); +// +// ОписаниеОшибки = Результат.ОписаниеОшибки; +// ЖурналДиагностики = Результат.ЖурналДиагностики; +// +Функция ДиагностикаСоединения(URL) Экспорт + + Описание = Новый Массив; + Описание.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При обращении по URL: %1'"), + URL)); + Описание.Добавить(ПолучениеФайловИзИнтернетаСлужебный.ПредставлениеМестаДиагностики()); + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Описание.Добавить( + НСтр("ru = 'Обратитесь к администратору.'")); + + ОписаниеОшибки = СтрСоединить(Описание, Символы.ПС); + + Результат = Новый Структура; + Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки); + Результат.Вставить("ЖурналДиагностики", ""); + + Возврат Результат; + КонецЕсли; + + Журнал = Новый Массив; + Журнал.Добавить( + НСтр("ru = 'Журнал диагностики: + |Выполняется проверка доступности сервера. + |Описание диагностируемой ошибки см. в следующем сообщении журнала.'")); + Журнал.Добавить(); + + СостояниеНастроекПрокси = ПолучениеФайловИзИнтернетаСлужебный.СостояниеНастроекПрокси(); + СоединениеЧерезПрокси = СостояниеНастроекПрокси.СоединениеЧерезПрокси; + Журнал.Добавить(СостояниеНастроекПрокси.Представление); + + Если СоединениеЧерезПрокси Тогда + + Описание.Добавить( + НСтр("ru = 'Диагностика соединения не выполнена, т.к. настроен прокси-сервер. + |Обратитесь к администратору.'")); + + Иначе + + СтруктураСсылки = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); + АдресСервераРесурса = СтруктураСсылки.Хост; + АдресСервераКонтрольнойПроверки = "1c.com"; + + РезультатДоступностиРесурса = ПолучениеФайловИзИнтернетаСлужебный.ПроверитьДоступностьСервера(АдресСервераРесурса); + + Журнал.Добавить(); + Журнал.Добавить("1) " + РезультатДоступностиРесурса.ЖурналДиагностики); + + Если РезультатДоступностиРесурса.Доступен Тогда + + Описание.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнено обращение к несуществующему ресурсу на сервере %1 + |или возникли неполадки на удаленном сервере.'"), + АдресСервераРесурса)); + + Иначе + + РезультатКонтрольнойПроверки = ПолучениеФайловИзИнтернетаСлужебный.ПроверитьДоступностьСервера(АдресСервераКонтрольнойПроверки); + Журнал.Добавить("2) " + РезультатКонтрольнойПроверки.ЖурналДиагностики); + + Если Не РезультатКонтрольнойПроверки.Доступен Тогда + + Описание.Добавить( + НСтр("ru = 'Отсутствует доступ в сеть интернет по причине: + |- компьютер не подключен к интернету; + |- неполадки у интернет-провайдера; + |- подключение к интернету блокирует межсетевой экран, + | антивирусная программа или другое программное обеспечение.'")); + + Иначе + + Описание.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сервер %1 не доступен по причине: + |- неполадки у интернет-провайдера; + |- подключение к серверу блокирует межсетевой экран, + | антивирусная программа или другое программное обеспечение; + |- сервер отключен или на техническом обслуживании.'"), + АдресСервераРесурса)); + + ЖурналТрассировки = ПолучениеФайловИзИнтернетаСлужебный.ЖурналТрассировкиМаршрутаСервера(АдресСервераРесурса); + Журнал.Добавить("3) " + ЖурналТрассировки); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + ОписаниеОшибки = СтрСоединить(Описание, Символы.ПС); + + Журнал.Вставить(0); + Журнал.Вставить(0, ОписаниеОшибки); + + ЖурналДиагностики = СтрСоединить(Журнал, Символы.ПС); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Диагностика соединения'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ЖурналДиагностики); + + Результат = Новый Структура; + Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки); + Результат.Вставить("ЖурналДиагностики", ЖурналДиагностики); + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl index 7be3b14d3..ed3d128a0 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Получает файл из Интернета по протоколу http(s), либо ftp и сохраняет его по указанному пути на клиенте. @@ -14,21 +22,35 @@ // * Статус - Булево - результат получения файла. // * Путь - Строка - путь к файлу на клиенте, ключ используется только если статус Истина. // * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь. -// * Заголовки - Соответствие - см. в синтаксис-помощнике описание параметра Заголовки объекта HTTPОтвет. +// * Заголовки - Соответствие - см. в синтакс-помощнике описание параметра Заголовки объекта HTTPОтвет. // * КодСостояния - Число - Добавляется при возникновении ошибки. -// См. в синтаксис-помощнике описание параметра КодСостояния объекта HTTPОтвет. +// См. в синтакс-помощнике описание параметра КодСостояния объекта HTTPОтвет. // Функция СкачатьФайлНаКлиенте(Знач URL, Знач ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт #Если ВебКлиент Тогда ВызватьИсключение НСтр("ru = 'Скачивание файлов на клиент недоступно при работе в веб-клиенте.'"); +#Иначе + + Результат = ПолучениеФайловИзИнтернетаСлужебныйВызовСервера.СкачатьФайл(URL, ПараметрыПолучения, ЗаписыватьОшибку); + + Если ПараметрыПолучения <> Неопределено + И ПараметрыПолучения.ПутьДляСохранения <> Неопределено Тогда + + ПутьДляСохранения = ПараметрыПолучения.ПутьДляСохранения; + Иначе + ПутьДляСохранения = ПолучитьИмяВременногоФайла(); // АПК:441 Временный файл должен удаляться вызывающим кодом. + КонецЕсли; + + Если Результат.Статус Тогда + ПолучитьФайл(Результат.Путь, ПутьДляСохранения, Ложь); + Результат.Путь = ПутьДляСохранения; + КонецЕсли; + + Возврат Результат; + #КонецЕсли - НастройкаСохранения = Новый Соответствие; - НастройкаСохранения.Вставить("МестоХранения", "Клиент"); - - Возврат ПолучениеФайловИзИнтернетаКлиентСервер.СкачатьФайл(URL, ПараметрыПолучения, НастройкаСохранения, ЗаписыватьОшибку); - КонецФункции // Открывает форму для ввода параметров прокси сервера. diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index 7a04a24ff..f3d77e607 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -1,5 +1,59 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс +// Возвращает структуру параметров для получения файла из Интернета. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла. +// Не заполняется при сохранении файла во временное хранилище. +// * Пользователь - Строка - пользователь от имени которого установлено соединение. +// * Пароль - Строка - пароль пользователя от которого установлено соединение. +// * Порт - Число - порт сервера с которым установлено соединение. +// * Таймаут - Число - таймаут на получение файла, в секундах. +// * ЗащищенноеСоединение - Булево - признак использования защищенного соединения ftps или https. +// - ЗащищенноеСоединение - см. в синтакс-помощнике описание свойства ЗащищенноеСоединение +// объектов FTPСоединение и HTTPСоединение. +// - Неопределено - в случае, если защищенное соединение не используется. +// +// Параметры только для http (https) соединения: +// * Заголовки - Соответствие - см. в синтакс-помощнике описание параметра Заголовки объекта HTTPЗапрос. +// * ИспользоватьАутентификациюОС - Булево - см. в синтакс-помощнике описание параметра +// ИспользоватьАутентификациюОС объекта HTTPСоединение. +// +// Параметры только для ftp (ftps) соединения: +// * ПассивноеСоединение - Булево - флаг указывает, что соединение должно пассивным (или активным). +// * УровеньИспользованияЗащищенногоСоединения - УровеньИспользованияЗащищенногоСоединенияFTP - См. описание +// одноименного свойства в синтакс-помощнике платформы. Значение по умолчанию - Авто. +// +Функция ПараметрыПолученияФайла() Экспорт + + ПараметрыПолучения = Новый Структура; + ПараметрыПолучения.Вставить("ПутьДляСохранения", Неопределено); + ПараметрыПолучения.Вставить("Пользователь", Неопределено); + ПараметрыПолучения.Вставить("Пароль", Неопределено); + ПараметрыПолучения.Вставить("Порт", Неопределено); + ПараметрыПолучения.Вставить("Таймаут", АвтоматическоеОпределениеТаймаута()); + ПараметрыПолучения.Вставить("ЗащищенноеСоединение", Неопределено); + ПараметрыПолучения.Вставить("ПассивноеСоединение", Неопределено); + ПараметрыПолучения.Вставить("Заголовки", Новый Соответствие); + ПараметрыПолучения.Вставить("ИспользоватьАутентификациюОС", Ложь); + ПараметрыПолучения.Вставить("УровеньИспользованияЗащищенногоСоединения", Неопределено); + + Возврат ПараметрыПолучения; + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ПолучениеФайловИзИнтернета.ПолучитьПрокси. // Возвращает объект ИнтернетПрокси для доступа в Интернет. // Допустимые протоколы для создания ИнтернетПрокси http, https, ftp и ftps. // @@ -42,6 +96,7 @@ КонецФункции +// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.СтруктураURI. // Разделяет URL по составным частям: протокол, сервер, путь к ресурсу. // // Параметры: @@ -66,6 +121,7 @@ КонецФункции +// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.СтруктураURI. // Разбирает строку URI на составные части и возвращает в виде структуры. // На основе RFC 3986. // @@ -89,53 +145,14 @@ КонецФункции -// Возвращает структуру параметров для получения файла из Интернета. -// -// Возвращаемое значение: -// Структура - со свойствами: -// * ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла. -// Не заполняется при сохранении файла во временное хранилище. -// * Пользователь - Строка - пользователь от имени которого установлено соединение. -// * Пароль - Строка - пароль пользователя от которого установлено соединение. -// * Порт - Число - порт сервера с которым установлено соединение. -// * Таймаут - Число - таймаут на получение файла, в секундах. -// * ЗащищенноеСоединение - Булево - признак использования защищенного соединения ftps или https. -// - ЗащищенноеСоединение - см. в синтаксис-помощнике описание свойства ЗащищенноеСоединение -// объектов FTPСоединение и HTTPСоединение. -// - Неопределено - в случае, если защищенное соединение не используется. -// -// Параметры только для http (https) соединения: -// * Заголовки - Соответствие - см. в синтаксис-помощнике описание параметра Заголовки объекта HTTPЗапрос. -// * ИспользоватьАутентификациюОС - Булево - см. в синтаксис-помощнике описание параметра -// ИспользоватьАутентификациюОС объекта HTTPСоединение. -// -// Параметры только для ftp (ftps) соединения: -// * ПассивноеСоединение - Булево - флаг указывает, что соединение должно пассивным (или активным). -// * УровеньИспользованияЗащищенногоСоединения - УровеньИспользованияЗащищенногоСоединенияFTP - См. описание -// одноименного свойства в синтаксис-помощнике платформы. Значение по умолчанию - Авто. -// -Функция ПараметрыПолученияФайла() Экспорт - - ПараметрыПолучения = Новый Структура; - ПараметрыПолучения.Вставить("ПутьДляСохранения", Неопределено); - ПараметрыПолучения.Вставить("Пользователь", Неопределено); - ПараметрыПолучения.Вставить("Пароль", Неопределено); - ПараметрыПолучения.Вставить("Порт", Неопределено); - ПараметрыПолучения.Вставить("Таймаут", АвтоматическоеОпределениеТаймаута()); - ПараметрыПолучения.Вставить("ЗащищенноеСоединение", Неопределено); - ПараметрыПолучения.Вставить("ПассивноеСоединение", Неопределено); - ПараметрыПолучения.Вставить("Заголовки", Новый Соответствие); - ПараметрыПолучения.Вставить("ИспользоватьАутентификациюОС", Ложь); - ПараметрыПолучения.Вставить("УровеньИспользованияЗащищенногоСоединения", Неопределено); - - Возврат ПараметрыПолучения; - -КонецФункции +#КонецОбласти #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс +#Область УстаревшиеПроцедурыИФункции + // Служебная информация для отображения текущих настроек и состояний прокси для выполнения диагностики. // // Возвращаемое значение: @@ -154,42 +171,7 @@ #Иначе - Прокси = ПолучитьПрокси("http"); - НастройкиПрокси = НастройкаПроксиСервера(); - - Журнал = Новый Массив; - - Если НастройкиПрокси = Неопределено Тогда - Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ не указаны (используются системные настройки прокси).'")); - ИначеЕсли Не НастройкиПрокси.Получить("ИспользоватьПрокси") Тогда - Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ: Не использовать прокси-сервер.'")); - ИначеЕсли НастройкиПрокси.Получить("ИспользоватьСистемныеНастройки") Тогда - Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ: Использовать системные настройки прокси-сервера.'")); - Иначе - Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ: Использовать другие настройки прокси-сервера.'")); - КонецЕсли; - - Если Прокси = Неопределено Тогда - Прокси = Новый ИнтернетПрокси(Истина); - КонецЕсли; - - УказанПроксиВсехАдресов = Не ПустаяСтрока(Прокси.Сервер()); - УказанПроксиHTTP = Не ПустаяСтрока(Прокси.Сервер("http")); - УказанПроксиHTTPS = Не ПустаяСтрока(Прокси.Сервер("https")); - - СоединениеЧерезПрокси = УказанПроксиВсехАдресов Или УказанПроксиHTTP Или УказанПроксиHTTPS; - - Если СоединениеЧерезПрокси Тогда - Журнал.Добавить(НСтр("ru = 'Соединение выполняется через прокси-сервер:'")); - Журнал.Добавить(ПредставлениеИнтернетПрокси(Прокси)); - Иначе - Журнал.Добавить(НСтр("ru = 'Соединение выполняется без использования прокси-сервера.'")); - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("СоединениеЧерезПрокси", СоединениеЧерезПрокси); - Результат.Вставить("Представление", СтрСоединить(Журнал, Символы.ПС)); - Возврат Результат; + Возврат ПолучениеФайловИзИнтернетаСлужебныйВызовСервера.СостояниеНастроекПрокси(); #КонецЕсли @@ -197,760 +179,20 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -Функция АвтоматическоеОпределениеТаймаута() +Функция АвтоматическоеОпределениеТаймаута() Экспорт Возврат -1; КонецФункции +#Область УстаревшиеПроцедурыИФункции + #Если Не ВебКлиент Тогда -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. - -// Функция для получения файла из сети Интернет. -// -// Параметры: -// URL - строка - url файла в формате: -// НастройкиПолучения - Структура со свойствами. -// * ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла. -// * Пользователь - Строка - пользователь от имени которого установлено соединение. -// * Пароль - Строка - пароль пользователя от которого установлено соединение. -// * Порт - Число - порт сервера с которым установлено соединение. -// * Таймаут - Число - таймаут на получение файла, в секундах. -// * ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, -// что соединение должно производиться через https. -// * ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, -// что соединение должно пассивным (или активным). -// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPЗапрос. -// * ИспользоватьАутентификациюОС - Булево - см. описание параметра ИспользоватьАутентификациюОС объекта HTTPСоединение. -// -// НастройкаСохранения - соответствие - содержит параметры для сохранения скачанного файла -// ключи: -// МестоХранения - строка - может содержать -// "Клиент" - клиент, -// "Сервер" - сервер, -// "ВременноеХранилище" - временное хранилище. -// Путь - строка (необязательный параметр) - -// путь к каталогу на клиенте либо на сервере либо адрес во временном хранилище -// если не задано будет сгенерировано автоматически. -// -// Возвращаемое значение: -// структура -// успех - булево - успех или неудача операции -// строка - строка - в случае успеха либо строка-путь сохранения файла -// либо адрес во временном хранилище -// в случае неуспеха сообщение об ошибке. -// -Функция СкачатьФайл(Знач URL, Знач ПараметрыПолучения, Знач НастройкаСохранения, Знач ЗаписыватьОшибку = Истина) Экспорт - - НастройкиПолучения = ПараметрыПолученияФайла(); - Если ПараметрыПолучения <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(НастройкиПолучения, ПараметрыПолучения); - КонецЕсли; - - Если НастройкаСохранения.Получить("МестоХранения") <> "ВременноеХранилище" Тогда - НастройкаСохранения.Вставить("Путь", НастройкиПолучения.ПутьДляСохранения); - КонецЕсли; - - НастройкаПроксиСервера = НастройкаПроксиСервера(); - - Перенаправления = Новый Массив; - - Возврат ПолучитьФайлИзИнтернет(URL, НастройкаСохранения, НастройкиПолучения, - НастройкаПроксиСервера, ЗаписыватьОшибку, Перенаправления); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. - -// Функция для получения файла из сети Интернет. -// -// Параметры: -// URL - строка - url файла в формате: [Протокол://]<Сервер>/<Путь к файлу на сервере>. -// -// НастройкаСоединения - Соответствие - -// ЗащищенноеСоединение* - булево - соединение защищенное. -// ПассивноеСоединение* - булево - соединение защищенное. -// Пользователь - строка - пользователь от имени которого установлено соединение. -// Пароль - строка - пароль пользователя от которого установлено соединение. -// Порт - число - порт сервера с которым установлено соединение -// * - взаимоисключающие ключи. -// -// НастройкиПрокси - Соответствие: -// ИспользоватьПрокси - использовать ли прокси-сервер. -// НеИспользоватьПроксиДляЛокальныхАдресов - использовать ли прокси-сервер для локальных адресов. -// ИспользоватьСистемныеНастройки - использовать ли системные настройки прокси-сервера. -// Сервер - адрес прокси-сервера. -// Порт - порт прокси-сервера. -// Пользователь - имя пользователя для авторизации на прокси-сервере. -// Пароль - пароль пользователя. -// ИспользоватьАутентификациюОС - Булево - признак использования аутентификации средствами операционной системы. -// -// НастройкаСохранения - соответствие - содержит параметры для сохранения скачанного файла. -// МестоХранения - строка - может содержать -// "Клиент" - клиент, -// "Сервер" - сервер, -// "ВременноеХранилище" - временное хранилище. -// Путь - строка (необязательный параметр) - путь к каталогу на клиенте либо на сервере, -// либо адрес во временном хранилище, если не задано будет сгенерировано автоматически. -// -// Возвращаемое значение: -// структура -// успех - булево - успех или неудача операции -// строка - строка - в случае успеха либо строка-путь сохранения файла -// либо адрес во временном хранилище -// в случае неуспеха сообщение об ошибке. -// -Функция ПолучитьФайлИзИнтернет(Знач URL, Знач НастройкаСохранения, Знач НастройкаСоединения, - Знач НастройкиПрокси, Знач ЗаписыватьОшибку, Перенаправления = Неопределено) - - СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); - - Сервер = СтруктураURI.Хост; - ПутьНаСервере = СтруктураURI.ПутьНаСервере; - Протокол = СтруктураURI.Схема; - - Если ПустаяСтрока(Протокол) Тогда - Протокол = "http"; - КонецЕсли; - - ЗащищенноеСоединение = НастройкаСоединения.ЗащищенноеСоединение; - ИмяПользователя = НастройкаСоединения.Пользователь; - ПарольПользователя = НастройкаСоединения.Пароль; - Порт = НастройкаСоединения.Порт; - Таймаут = НастройкаСоединения.Таймаут; - - Если (Протокол = "https" Или Протокол = "ftps") И ЗащищенноеСоединение = Неопределено Тогда - ЗащищенноеСоединение = Истина; - КонецЕсли; - - Если ЗащищенноеСоединение = Истина Тогда - ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); - ИначеЕсли ЗащищенноеСоединение = Ложь Тогда - ЗащищенноеСоединение = Неопределено; - // Иначе параметр ЗащищенноеСоединение был задан в явном виде. - КонецЕсли; - - Если Порт = Неопределено Тогда - Порт = СтруктураURI.Порт; - КонецЕсли; - - Если НастройкиПрокси = Неопределено Тогда - Прокси = Неопределено; - Иначе - Прокси = НовыйИнтернетПрокси(НастройкиПрокси, Протокол); - КонецЕсли; - - Если НастройкаСохранения["Путь"] <> Неопределено Тогда - ПутьДляСохранения = НастройкаСохранения["Путь"]; - Иначе - // Временный файл должен удаляться вызывающим кодом. - ПутьДляСохранения = ПолучитьИмяВременногоФайла(); - КонецЕсли; - - Если Таймаут = Неопределено Тогда - Таймаут = АвтоматическоеОпределениеТаймаута(); - КонецЕсли; - - ИспользуетсяFTPПротокол = (Протокол = "ftp" Или Протокол = "ftps"); - - Если ИспользуетсяFTPПротокол Тогда - - ПассивноеСоединение = НастройкаСоединения.ПассивноеСоединение; - УровеньИспользованияЗащищенногоСоединения = НастройкаСоединения.УровеньИспользованияЗащищенногоСоединения; - - Попытка - - Если Таймаут = АвтоматическоеОпределениеТаймаута() Тогда - - Соединение = Новый FTPСоединение( - Сервер, - Порт, - ИмяПользователя, - ПарольПользователя, - Прокси, - ПассивноеСоединение, - 7, - ЗащищенноеСоединение, - УровеньИспользованияЗащищенногоСоединения); - - РазмерФайла = РазмерФайлаFTP(Соединение, ПутьНаСервере); - Таймаут = ТаймаутПоРазмеруФайла(РазмерФайла); - - КонецЕсли; - - Соединение = Новый FTPСоединение( - Сервер, - Порт, - ИмяПользователя, - ПарольПользователя, - Прокси, - ПассивноеСоединение, - Таймаут, - ЗащищенноеСоединение, - УровеньИспользованияЗащищенногоСоединения); - - Сервер = Соединение.Сервер; - Порт = Соединение.Порт; - - Соединение.Получить(ПутьНаСервере, ПутьДляСохранения); - - Исключение - - РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(URL); - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось получить файл %1 с сервера %2:%3 - |по причине: - |%4 - |Результат диагностики: - |%5'"), - URL, Сервер, Формат(Порт, "ЧГ="), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), - РезультатДиагностики.ОписаниеОшибки); - - Если ЗаписыватьОшибку Тогда - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |Трассировка: - |ЗащищенноеСоединение: %2 - |Таймаут: %3'"), - ТекстОшибки, - Формат(Соединение.Защищенное, "БЛ=Нет; БИ=Да"), - Формат(Соединение.Таймаут, "ЧГ=0")); - - ЗаписатьОшибкуВЖурналРегистрации(СообщениеОбОшибке); - КонецЕсли; - - Возврат РезультатПолученияФайла(Ложь, ТекстОшибки); - - КонецПопытки; - - Иначе // Используется HTTP протокол. - - Заголовки = НастройкаСоединения.Заголовки; - ИспользоватьАутентификациюОС = НастройкаСоединения.ИспользоватьАутентификациюОС; - - Попытка - - Если Таймаут = АвтоматическоеОпределениеТаймаута() Тогда - - Соединение = Новый HTTPСоединение( - Сервер, - Порт, - ИмяПользователя, - ПарольПользователя, - Прокси, - 7, - ЗащищенноеСоединение, - ИспользоватьАутентификациюОС); - - РазмерФайла = РазмерФайлаHTTP(Соединение, ПутьНаСервере, Заголовки); - Таймаут = ТаймаутПоРазмеруФайла(РазмерФайла); - - КонецЕсли; - - Соединение = Новый HTTPСоединение( - Сервер, - Порт, - ИмяПользователя, - ПарольПользователя, - Прокси, - Таймаут, - ЗащищенноеСоединение, - ИспользоватьАутентификациюОС); - - Сервер = Соединение.Сервер; - Порт = Соединение.Порт; - - ЗапросHTTP = Новый HTTPЗапрос(ПутьНаСервере, Заголовки); - ЗапросHTTP.Заголовки.Вставить("Accept-Charset", "UTF-8"); - ЗапросHTTP.Заголовки.Вставить("X-1C-Request-UID", Строка(Новый УникальныйИдентификатор)); - ОтветHTTP = Соединение.Получить(ЗапросHTTP, ПутьДляСохранения); - - Исключение - - РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(URL); - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось установить HTTP-соединение с сервером %1:%2 - |по причине: - |%3 - | - |Результат диагностики: - |%4'"), - Сервер, Формат(Порт, "ЧГ="), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), - РезультатДиагностики.ОписаниеОшибки); - - ДописатьПредставлениеПеренаправлений(Перенаправления, ТекстОшибки); - - Если ЗаписыватьОшибку Тогда - ЗаписатьОшибкуВЖурналРегистрации(ТекстОшибки); - КонецЕсли; - - Возврат РезультатПолученияФайла(Ложь, ТекстОшибки); - - КонецПопытки; - - Попытка - - Если ОтветHTTP.КодСостояния = 301 // 301 Moved Permanently - Или ОтветHTTP.КодСостояния = 302 // 302 Found, 302 Moved Temporarily - Или ОтветHTTP.КодСостояния = 303 // 303 See Other by GET - Или ОтветHTTP.КодСостояния = 307 // 307 Temporary Redirect - Или ОтветHTTP.КодСостояния = 308 Тогда // 308 Permanent Redirect - - Если Перенаправления.Количество() > 7 Тогда - ВызватьИсключение - НСтр("ru = 'Превышено количество перенаправлений.'"); - Иначе - - НовыйURL = ОтветHTTP.Заголовки["Location"]; - - Если НовыйURL = Неопределено Тогда - ВызватьИсключение - НСтр("ru = 'Некорректное перенаправление, отсутствует HTTP-заголовок ответа ""Location"".'"); - КонецЕсли; - - НовыйURL = СокрЛП(НовыйURL); - - Если ПустаяСтрока(НовыйURL) Тогда - ВызватьИсключение - НСтр("ru = 'Некорректное перенаправление, пустой HTTP-заголовок ответа ""Location"".'"); - КонецЕсли; - - Если Перенаправления.Найти(НовыйURL) <> Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Циклическое перенаправление. - |Попытка перейти на %1 уже выполнялась ранее.'"), - НовыйURL); - КонецЕсли; - - Перенаправления.Добавить(URL); - - Если Не СтрНачинаетсяС(НовыйURL, "http") Тогда - // <схема>://<хост>:<порт>/<путь> - НовыйURL = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "%1://%2:%3/%4", Протокол, Сервер, Формат(Порт, "ЧГ="), НовыйURL); - КонецЕсли; - - Возврат ПолучитьФайлИзИнтернет(НовыйURL, НастройкаСохранения, НастройкаСоединения, - НастройкиПрокси, ЗаписыватьОшибку, Перенаправления); - - КонецЕсли; - - КонецЕсли; - - Если ОтветHTTP.КодСостояния < 200 Или ОтветHTTP.КодСостояния >= 300 Тогда - - Если ОтветHTTP.КодСостояния = 304 Тогда - - Если (ЗапросHTTP.Заголовки["If-Modified-Since"] <> Неопределено - Или ЗапросHTTP.Заголовки["If-None-Match"] <> Неопределено) Тогда - ЗаписыватьОшибку = Ложь; - КонецЕсли; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сервер убежден, что с вашего последнего запроса его ответ не изменился: - |%1'"), - РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); - - ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); - - ВызватьИсключение ТекстОшибки; - - ИначеЕсли ОтветHTTP.КодСостояния < 200 - Или ОтветHTTP.КодСостояния >= 300 И ОтветHTTP.КодСостояния < 400 Тогда - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неподдерживаемый ответ сервера: - |%1'"), - РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); - - ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); - - ВызватьИсключение ТекстОшибки; - - ИначеЕсли ОтветHTTP.КодСостояния >= 400 И ОтветHTTP.КодСостояния < 500 Тогда - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при выполнении запроса: - |%1'"), - РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); - - ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); - - ВызватьИсключение ТекстОшибки; - - Иначе - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка сервера при обработке запроса к ресурсу: - |%1'"), - РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); - - ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); - - ВызватьИсключение ТекстОшибки; - - КонецЕсли; - - КонецЕсли; - - Исключение - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось получить файл %1 с сервера %2:%3 - |по причине: - |%4'"), - URL, Сервер, Формат(Порт, "ЧГ="), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - ДописатьПредставлениеПеренаправлений(Перенаправления, ТекстОшибки); - - Если ЗаписыватьОшибку Тогда - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |Трассировка: - |ЗащищенноеСоединение: %2 - |Таймаут: %3 - |ИспользоватьАутентификациюОС: %4'"), - ТекстОшибки, - Формат(Соединение.Защищенное, "БЛ=Нет; БИ=Да"), - Формат(Соединение.Таймаут, "ЧГ=0"), - Формат(Соединение.ИспользоватьАутентификациюОС, "БЛ=Нет; БИ=Да")); - - ДописатьЗаголовкиHTTP(ЗапросHTTP, СообщениеОбОшибке); - ДописатьЗаголовкиHTTP(ОтветHTTP, СообщениеОбОшибке); - - ЗаписатьОшибкуВЖурналРегистрации(СообщениеОбОшибке); - КонецЕсли; - - Возврат РезультатПолученияФайла(Ложь, ТекстОшибки, ОтветHTTP); - - КонецПопытки; - - КонецЕсли; - - // Если сохраняем файл в соответствии с настройкой. - Если НастройкаСохранения["МестоХранения"] = "ВременноеХранилище" Тогда - КлючУникальности = Новый УникальныйИдентификатор; - Адрес = ПоместитьВоВременноеХранилище (Новый ДвоичныеДанные(ПутьДляСохранения), КлючУникальности); - Возврат РезультатПолученияФайла(Истина, Адрес, ОтветHTTP); - ИначеЕсли НастройкаСохранения["МестоХранения"] = "Клиент" - Или НастройкаСохранения["МестоХранения"] = "Сервер" Тогда - Возврат РезультатПолученияФайла(Истина, ПутьДляСохранения, ОтветHTTP); - Иначе - ВызватьИсключение НСтр("ru = 'Не указано место для сохранения файла.'"); - КонецЕсли; - -КонецФункции - -// Функция, заполняющая структуру по параметрам. -// -// Параметры: -// УспехОперации - булево - успех или неуспех операции. -// СообщениеПуть - строка - -// -// Возвращаемое значение - структура: -// поле успех - булево -// поле путь - строка. -// -Функция РезультатПолученияФайла(Знач Статус, Знач СообщениеПуть, HTTPОтвет = Неопределено) - - Результат = Новый Структура("Статус", Статус); - - Если Статус Тогда - Результат.Вставить("Путь", СообщениеПуть); - Иначе - Результат.Вставить("СообщениеОбОшибке", СообщениеПуть); - Результат.Вставить("КодСостояния", 1); - КонецЕсли; - - Если HTTPОтвет <> Неопределено Тогда - ЗаголовкиОтвета = HTTPОтвет.Заголовки; - Если ЗаголовкиОтвета <> Неопределено Тогда - Результат.Вставить("Заголовки", ЗаголовкиОтвета); - КонецЕсли; - - Результат.Вставить("КодСостояния", HTTPОтвет.КодСостояния); - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -Функция РазмерФайлаHTTP(СоединениеHTTP, Знач ПутьНаСервере, Знач Заголовки = Неопределено) - - ЗапросHTTP = Новый HTTPЗапрос(ПутьНаСервере, Заголовки); - Попытка - ПолученныеЗаголовки = СоединениеHTTP.ПолучитьЗаголовки(ЗапросHTTP);// HEAD - Исключение - Возврат 0; - КонецПопытки; - РазмерСтрокой = ПолученныеЗаголовки.Заголовки["Content-Length"]; - - ТипЧисло = Новый ОписаниеТипов("Число"); - РазмерФайла = ТипЧисло.ПривестиЗначение(РазмерСтрокой); - - Возврат РазмерФайла; - -КонецФункции - -Функция РазмерФайлаFTP(СоединениеFTP, Знач ПутьНаСервере) - - РазмерФайла = 0; - - Попытка - НайденныеФайлы = СоединениеFTP.НайтиФайлы(ПутьНаСервере); - Если НайденныеФайлы.Количество() > 0 Тогда - РазмерФайла = НайденныеФайлы[0].Размер(); - КонецЕсли; - Исключение - РазмерФайла = 0; - КонецПопытки; - - Возврат РазмерФайла; - -КонецФункции - -Функция ТаймаутПоРазмеруФайла(Размер) - - БайтВМегабайте = 1048576; - - Если Размер > БайтВМегабайте Тогда - КоличествоСекунд = Окр(Размер / БайтВМегабайте * 128); - Возврат ?(КоличествоСекунд > 43200, 43200, КоличествоСекунд); - КонецЕсли; - - Возврат 128; - -КонецФункции - -Функция РасшифровкаКодаСостоянияHTTP(КодСостояния) - - Если КодСостояния = 304 Тогда // Not Modified - Расшифровка = НСтр("ru = 'Нет необходимости повторно передавать запрошенные ресурсы.'"); - ИначеЕсли КодСостояния = 400 Тогда // Bad Request - Расшифровка = НСтр("ru = 'Запрос не может быть исполнен.'"); - ИначеЕсли КодСостояния = 401 Тогда // Unauthorized - Расшифровка = НСтр("ru = 'Попытка авторизации на сервере была отклонена.'"); - ИначеЕсли КодСостояния = 402 Тогда // Payment Required - Расшифровка = НСтр("ru = 'Требуется оплата.'"); - ИначеЕсли КодСостояния = 403 Тогда // Forbidden - Расшифровка = НСтр("ru = 'К запрашиваемому ресурсу нет доступа.'"); - ИначеЕсли КодСостояния = 404 Тогда // Not Found - Расшифровка = НСтр("ru = 'Запрашиваемый ресурс не найден на сервере.'"); - ИначеЕсли КодСостояния = 405 Тогда // Method Not Allowed - Расшифровка = НСтр("ru = 'Метод запроса не поддерживается сервером.'"); - ИначеЕсли КодСостояния = 406 Тогда // Not Acceptable - Расшифровка = НСтр("ru = 'Запрошенный формат данных не поддерживается сервером.'"); - ИначеЕсли КодСостояния = 407 Тогда // Proxy Authentication Required - Расшифровка = НСтр("ru = 'Ошибка аутентификации на прокси-сервере'"); - ИначеЕсли КодСостояния = 408 Тогда // Request Timeout - Расшифровка = НСтр("ru = 'Время ожидания сервером передачи от клиента истекло.'"); - ИначеЕсли КодСостояния = 409 Тогда // Conflict - Расшифровка = НСтр("ru = 'Запрос не может быть выполнен из-за конфликтного обращения к ресурсу.'"); - ИначеЕсли КодСостояния = 410 Тогда // Gone - Расшифровка = НСтр("ru = 'Ресурс на сервере был перемешен.'"); - ИначеЕсли КодСостояния = 411 Тогда // Length Required - Расшифровка = НСтр("ru = 'Сервер требует указание ""Content-length."" в заголовке запроса.'"); - ИначеЕсли КодСостояния = 412 Тогда // Precondition Failed - Расшифровка = НСтр("ru = 'Запрос не применим к ресурсу'"); - ИначеЕсли КодСостояния = 413 Тогда // Request Entity Too Large - Расшифровка = НСтр("ru = 'Сервер отказывается обработать, слишком большой объем передаваемых данных.'"); - ИначеЕсли КодСостояния = 414 Тогда // Request-URL Too Long - Расшифровка = НСтр("ru = 'Сервер отказывается обработать, слишком длинный URL.'"); - ИначеЕсли КодСостояния = 415 Тогда // Unsupported Media-Type - Расшифровка = НСтр("ru = 'Сервер заметил, что часть запроса была сделана в неподдерживаемом формат'"); - ИначеЕсли КодСостояния = 416 Тогда // Requested Range Not Satisfiable - Расшифровка = НСтр("ru = 'Часть запрашиваемого ресурса не может быть предоставлена'"); - ИначеЕсли КодСостояния = 417 Тогда // Expectation Failed - Расшифровка = НСтр("ru = 'Сервер не может предоставить ответ на указанный запрос.'"); - ИначеЕсли КодСостояния = 429 Тогда // Too Many Requests - Расшифровка = НСтр("ru = 'Слишком много запросов за короткое время.'"); - ИначеЕсли КодСостояния = 500 Тогда // Internal Server Error - Расшифровка = НСтр("ru = 'Внутренняя ошибка сервера.'"); - ИначеЕсли КодСостояния = 501 Тогда // Not Implemented - Расшифровка = НСтр("ru = 'Сервер не поддерживает метод запроса.'"); - ИначеЕсли КодСостояния = 502 Тогда // Bad Gateway - Расшифровка = НСтр("ru = 'Сервер, выступая в роли шлюза или прокси-сервера, - |получил недействительное ответное сообщение от вышестоящего сервера.'"); - ИначеЕсли КодСостояния = 503 Тогда // Server Unavailable - Расшифровка = НСтр("ru = 'Сервер временно не доступен.'"); - ИначеЕсли КодСостояния = 504 Тогда // Gateway Timeout - Расшифровка = НСтр("ru = 'Сервер в роли шлюза или прокси-сервера - |не дождался ответа от вышестоящего сервера для завершения текущего запроса.'"); - ИначеЕсли КодСостояния = 505 Тогда // HTTP Version Not Supported - Расшифровка = НСтр("ru = 'Сервер не поддерживает указанную в запросе версию протокола HTTP'"); - ИначеЕсли КодСостояния = 506 Тогда // Variant Also Negotiates - Расшифровка = НСтр("ru = 'Сервер настроен некорректно, и не способен обработать запрос.'"); - ИначеЕсли КодСостояния = 507 Тогда // Insufficient Storage - Расшифровка = НСтр("ru = 'На сервере недостаточно места для выполнения запроса.'"); - ИначеЕсли КодСостояния = 509 Тогда // Bandwidth Limit Exceeded - Расшифровка = НСтр("ru = 'Сервер превысил отведенное ограничение на потребление трафика.'"); - ИначеЕсли КодСостояния = 510 Тогда // Not Extended - Расшифровка = НСтр("ru = 'Сервер требует больше информации о совершаемом запросе.'"); - ИначеЕсли КодСостояния = 511 Тогда // Network Authentication Required - Расшифровка = НСтр("ru = 'Требуется авторизация на сервере.'"); - Иначе - Расшифровка = НСтр("ru = '<Неизвестный код состояния>.'"); - КонецЕсли; - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '[%1] %2'"), - КодСостояния, - Расшифровка); - -КонецФункции - -Процедура ДописатьПредставлениеПеренаправлений(Перенаправления, ТекстОшибки) - - Если Перенаправления.Количество() > 0 Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |Выполненные перенаправления (%2): - |%3'"), - ТекстОшибки, - Перенаправления.Количество(), - СтрСоединить(Перенаправления, Символы.ПС)); - КонецЕсли; - -КонецПроцедуры - -Процедура ДописатьТелоОтветаСервера(ПутьКФайлу, ТекстОшибки) - - ТелоОтветаСервера = ТекстИзHTMLИзФайла(ПутьКФайлу); - - Если Не ПустаяСтрока(ТелоОтветаСервера) Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |Сообщение, полученное от сервера: - |%2'"), - ТекстОшибки, - ТелоОтветаСервера); - КонецЕсли; - -КонецПроцедуры - -Функция ТекстИзHTMLИзФайла(ПутьКФайлу) - - ФайлОтвета = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8); - ИсходныйТекст = ФайлОтвета.Прочитать(1024 * 15); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(ИсходныйТекст); - ФайлОтвета.Закрыть(); - - Возврат ТекстОшибки; - -КонецФункции - -Процедура ДописатьЗаголовкиHTTP(Объект, ТекстОшибки) - - Если ТипЗнч(Объект) = Тип("HTTPЗапрос") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |HTTP запрос: - |Адрес ресурса: %2 - |Заголовки: %3'"), - ТекстОшибки, - Объект.АдресРесурса, - ПредставлениеЗаголовковHTTP(Объект.Заголовки)); - ИначеЕсли ТипЗнч(Объект) = Тип("HTTPОтвет") Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |HTTP ответ: - |Код ответа: %2 - |Заголовки: %3'"), - ТекстОшибки, - Объект.КодСостояния, - ПредставлениеЗаголовковHTTP(Объект.Заголовки)); - КонецЕсли; - -КонецПроцедуры - -Функция ПредставлениеЗаголовковHTTP(Заголовки) - - ПредставлениеЗаголовков = ""; - - Для каждого Заголовок Из Заголовки Цикл - ПредставлениеЗаголовков = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - |%2: %3'"), - ПредставлениеЗаголовков, - Заголовок.Ключ, Заголовок.Значение); - КонецЦикла; - - Возврат ПредставлениеЗаголовков; - -КонецФункции - -Функция НастройкаПроксиСервера() - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); -#Иначе - НастройкаПроксиСервера = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().НастройкиПроксиСервера; -#КонецЕсли - - Возврат НастройкаПроксиСервера; - -КонецФункции - -Функция ПредставлениеИнтернетПрокси(Прокси) - - Журнал = Новый Массив; - Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Адрес: %1:%2 - |HTTP: %3:%4 - |Secure: %5:%6 - |FTP: %7:%8'"), - Прокси.Сервер(), Формат(Прокси.Порт(), "ЧГ="), - Прокси.Сервер("http"), Формат(Прокси.Порт("http"), "ЧГ="), - Прокси.Сервер("https"), Формат(Прокси.Порт("https"), "ЧГ="), - Прокси.Сервер("ftp"), Формат(Прокси.Порт("ftp"), "ЧГ="))); - - Если Прокси.ИспользоватьАутентификациюОС("") Тогда - Журнал.Добавить(НСтр("ru = 'Используется аутентификация операционной системы'")); - Иначе - Пользователь = Прокси.Пользователь(""); - Пароль = Прокси.Пароль(""); - СостояниеПароля = ?(ПустаяСтрока(Пароль), НСтр("ru = '<не указан>'"), НСтр("ru = '********'")); - - Журнал.Добавить(НСтр("ru = 'Используется аутентификация по имени пользователя и паролю'")); - Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Пользователь: %1 - |Пароль: %2'"), - Пользователь, - СостояниеПароля)); - КонецЕсли; - - Если Прокси.НеИспользоватьПроксиДляЛокальныхАдресов Тогда - Журнал.Добавить(НСтр("ru = 'Не использовать прокси для локальных адресов'")); - КонецЕсли; - - Если Прокси.НеИспользоватьПроксиДляАдресов.Количество() > 0 Тогда - Журнал.Добавить(НСтр("ru = 'Не использовать для следующих адресов:'")); - Для Каждого ИсключаемыйАдрес Из Прокси.НеИспользоватьПроксиДляАдресов Цикл - Журнал.Добавить(ИсключаемыйАдрес); - КонецЦикла; - КонецЕсли; - - Возврат СтрСоединить(Журнал, Символы.ПС); - -КонецФункции - // Возвращает прокси по настройкам НастройкаПроксиСервера для заданного протокола Протокол. // // Параметры: @@ -1022,31 +264,24 @@ КонецФункции -// Записывает событие-ошибку в журнал регистрации. Имя события -// "Получение файлов из Интернета". -// Параметры: -// СообщениеОбОшибке - строка сообщение об ошибке. -// -Процедура ЗаписатьОшибкуВЖурналРегистрации(Знач СообщениеОбОшибке) +#КонецЕсли + +Функция НастройкаПроксиСервера() + + // АПК:547-выкл код сохранен для обратной совместимости, используется в устаревшем программном интерфейсе. #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ЗаписьЖурналаРегистрации( - СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - СообщениеОбОшибке); + НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); #Иначе - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), - "Ошибка", СообщениеОбОшибке,,Истина); + НастройкаПроксиСервера = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().НастройкиПроксиСервера; #КонецЕсли -КонецПроцедуры - -Функция СобытиеЖурналаРегистрации() Экспорт + // АПК:547-вкл - Возврат НСтр("ru = 'Получение файлов из Интернета'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НастройкаПроксиСервера; КонецФункции -#КонецЕсли +#КонецОбласти #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl index fe8a66796..777f7f6bd 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -25,7 +33,7 @@ // Сброс настроек прокси-сервера на системные. СохранитьНастройкиПроксиНаСервере1СПредприятие(Неопределено); - ЗаписьЖурналаРегистрации(ПолучениеФайловИзИнтернетаКлиентСервер.СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, Метаданные.Константы.НастройкаПроксиСервера,, НСтр("ru = 'При включении профилей безопасности настройки прокси-сервера сброшены на системные.'")); @@ -35,6 +43,8 @@ #Область СлужебныеПроцедурыИФункции +#Область Прокси + // Сохраняет параметры настройки прокси сервера на стороне сервера 1С:Предприятие. // Процедура СохранитьНастройкиПроксиНаСервере1СПредприятие(Знач Настройки) Экспорт @@ -48,8 +58,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // Инициализирует новые настройки прокси-сервера "ИспользоватьПрокси" // и "ИспользоватьСистемныеНастройки". @@ -105,3 +116,979 @@ КонецПроцедуры #КонецОбласти + +#Область СкачатьФайл + +#Если Не ВебКлиент Тогда + +// Функция для получения файла из сети Интернет. +// +// Параметры: +// URL - строка - url файла в формате: +// НастройкиПолучения - Структура со свойствами. +// * ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла. +// * Пользователь - Строка - пользователь от имени которого установлено соединение. +// * Пароль - Строка - пароль пользователя от которого установлено соединение. +// * Порт - Число - порт сервера с которым установлено соединение. +// * Таймаут - Число - таймаут на получение файла, в секундах. +// * ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, +// что соединение должно производиться через https. +// * ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, +// что соединение должно пассивным (или активным). +// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPЗапрос. +// * ИспользоватьАутентификациюОС - Булево - см. описание параметра ИспользоватьАутентификациюОС объекта HTTPСоединение. +// +// НастройкаСохранения - соответствие - содержит параметры для сохранения скачанного файла +// ключи: +// МестоХранения - строка - может содержать +// "Сервер" - сервер, +// "ВременноеХранилище" - временное хранилище. +// Путь - строка (необязательный параметр) - +// путь к каталогу на клиенте либо на сервере либо адрес во временном хранилище +// если не задано будет сгенерировано автоматически. +// +// Возвращаемое значение: +// структура +// успех - булево - успех или неудача операции +// строка - строка - в случае успеха либо строка-путь сохранения файла +// либо адрес во временном хранилище +// в случае неуспеха сообщение об ошибке. +// +Функция СкачатьФайл(Знач URL, Знач ПараметрыПолучения, Знач НастройкаСохранения, Знач ЗаписыватьОшибку = Истина) Экспорт + + НастройкиПолучения = ПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла(); + Если ПараметрыПолучения <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(НастройкиПолучения, ПараметрыПолучения); + КонецЕсли; + + Если НастройкаСохранения.Получить("МестоХранения") <> "ВременноеХранилище" Тогда + НастройкаСохранения.Вставить("Путь", НастройкиПолучения.ПутьДляСохранения); + КонецЕсли; + + НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); + + Перенаправления = Новый Массив; + + Возврат ПолучитьФайлИзИнтернет(URL, НастройкаСохранения, НастройкиПолучения, + НастройкаПроксиСервера, ЗаписыватьОшибку, Перенаправления); + +КонецФункции + +// Функция для получения файла из сети Интернет. +// +// Параметры: +// URL - строка - url файла в формате: [Протокол://]<Сервер>/<Путь к файлу на сервере>. +// +// НастройкаСоединения - Соответствие - +// ЗащищенноеСоединение* - булево - соединение защищенное. +// ПассивноеСоединение* - булево - соединение защищенное. +// Пользователь - строка - пользователь от имени которого установлено соединение. +// Пароль - строка - пароль пользователя от которого установлено соединение. +// Порт - число - порт сервера с которым установлено соединение +// * - взаимоисключающие ключи. +// +// НастройкиПрокси - Соответствие: +// ИспользоватьПрокси - использовать ли прокси-сервер. +// НеИспользоватьПроксиДляЛокальныхАдресов - использовать ли прокси-сервер для локальных адресов. +// ИспользоватьСистемныеНастройки - использовать ли системные настройки прокси-сервера. +// Сервер - адрес прокси-сервера. +// Порт - порт прокси-сервера. +// Пользователь - имя пользователя для авторизации на прокси-сервере. +// Пароль - пароль пользователя. +// ИспользоватьАутентификациюОС - Булево - признак использования аутентификации средствами операционной системы. +// +// НастройкаСохранения - соответствие - содержит параметры для сохранения скачанного файла. +// МестоХранения - строка - может содержать +// "Сервер" - сервер, +// "ВременноеХранилище" - временное хранилище. +// Путь - строка (необязательный параметр) - путь к каталогу на клиенте либо на сервере, +// либо адрес во временном хранилище, если не задано будет сгенерировано автоматически. +// +// Возвращаемое значение: +// структура +// успех - булево - успех или неудача операции +// строка - строка - в случае успеха либо строка-путь сохранения файла +// либо адрес во временном хранилище +// в случае неуспеха сообщение об ошибке. +// +Функция ПолучитьФайлИзИнтернет(Знач URL, Знач НастройкаСохранения, Знач НастройкаСоединения, + Знач НастройкиПрокси, Знач ЗаписыватьОшибку, Перенаправления = Неопределено) + + СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); + + Сервер = СтруктураURI.Хост; + ПутьНаСервере = СтруктураURI.ПутьНаСервере; + Протокол = СтруктураURI.Схема; + + Если ПустаяСтрока(Протокол) Тогда + Протокол = "http"; + КонецЕсли; + + ЗащищенноеСоединение = НастройкаСоединения.ЗащищенноеСоединение; + ИмяПользователя = НастройкаСоединения.Пользователь; + ПарольПользователя = НастройкаСоединения.Пароль; + Порт = НастройкаСоединения.Порт; + Таймаут = НастройкаСоединения.Таймаут; + + Если (Протокол = "https" Или Протокол = "ftps") И ЗащищенноеСоединение = Неопределено Тогда + ЗащищенноеСоединение = Истина; + КонецЕсли; + + Если ЗащищенноеСоединение = Истина Тогда + ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); + ИначеЕсли ЗащищенноеСоединение = Ложь Тогда + ЗащищенноеСоединение = Неопределено; + // Иначе параметр ЗащищенноеСоединение был задан в явном виде. + КонецЕсли; + + Если Порт = Неопределено Тогда + Порт = СтруктураURI.Порт; + КонецЕсли; + + Если НастройкиПрокси = Неопределено Тогда + Прокси = Неопределено; + Иначе + Прокси = НовыйИнтернетПрокси(НастройкиПрокси, Протокол); + КонецЕсли; + + Если НастройкаСохранения["Путь"] <> Неопределено Тогда + ПутьДляСохранения = НастройкаСохранения["Путь"]; + Иначе + ПутьДляСохранения = ПолучитьИмяВременногоФайла(); // АПК:441 Временный файл должен удаляться вызывающим кодом. + КонецЕсли; + + Если Таймаут = Неопределено Тогда + Таймаут = ПолучениеФайловИзИнтернетаКлиентСервер.АвтоматическоеОпределениеТаймаута(); + КонецЕсли; + + ИспользуетсяFTPПротокол = (Протокол = "ftp" Или Протокол = "ftps"); + + Если ИспользуетсяFTPПротокол Тогда + + ПассивноеСоединение = НастройкаСоединения.ПассивноеСоединение; + УровеньИспользованияЗащищенногоСоединения = НастройкаСоединения.УровеньИспользованияЗащищенногоСоединения; + + Попытка + + Если Таймаут = ПолучениеФайловИзИнтернетаКлиентСервер.АвтоматическоеОпределениеТаймаута() Тогда + + Соединение = Новый FTPСоединение( + Сервер, + Порт, + ИмяПользователя, + ПарольПользователя, + Прокси, + ПассивноеСоединение, + 7, + ЗащищенноеСоединение, + УровеньИспользованияЗащищенногоСоединения); + + РазмерФайла = РазмерФайлаFTP(Соединение, ПутьНаСервере); + Таймаут = ТаймаутПоРазмеруФайла(РазмерФайла); + + КонецЕсли; + + Соединение = Новый FTPСоединение( + Сервер, + Порт, + ИмяПользователя, + ПарольПользователя, + Прокси, + ПассивноеСоединение, + Таймаут, + ЗащищенноеСоединение, + УровеньИспользованияЗащищенногоСоединения); + + Сервер = Соединение.Сервер; + Порт = Соединение.Порт; + + Соединение.Получить(ПутьНаСервере, ПутьДляСохранения); + + Исключение + + РезультатДиагностики = ПолучениеФайловИзИнтернета.ДиагностикаСоединения(URL); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить файл %1 с сервера %2:%3 + |по причине: + |%4 + |Результат диагностики: + |%5'"), + URL, Сервер, Формат(Порт, "ЧГ="), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + РезультатДиагностики.ОписаниеОшибки); + + Если ЗаписыватьОшибку Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Трассировка: + |ЗащищенноеСоединение: %2 + |Таймаут: %3'"), + ТекстОшибки, + Формат(Соединение.Защищенное, "БЛ=Нет; БИ=Да"), + Формат(Соединение.Таймаут, "ЧГ=0")); + + ЗаписатьОшибкуВЖурналРегистрации(СообщениеОбОшибке); + КонецЕсли; + + Возврат РезультатПолученияФайла(Ложь, ТекстОшибки); + + КонецПопытки; + + Иначе // Используется HTTP протокол. + + Заголовки = НастройкаСоединения.Заголовки; + ИспользоватьАутентификациюОС = НастройкаСоединения.ИспользоватьАутентификациюОС; + + Попытка + + Если Таймаут = ПолучениеФайловИзИнтернетаКлиентСервер.АвтоматическоеОпределениеТаймаута() Тогда + + Соединение = Новый HTTPСоединение( + Сервер, + Порт, + ИмяПользователя, + ПарольПользователя, + Прокси, + 7, + ЗащищенноеСоединение, + ИспользоватьАутентификациюОС); + + РазмерФайла = РазмерФайлаHTTP(Соединение, ПутьНаСервере, Заголовки); + Таймаут = ТаймаутПоРазмеруФайла(РазмерФайла); + + КонецЕсли; + + Соединение = Новый HTTPСоединение( + Сервер, + Порт, + ИмяПользователя, + ПарольПользователя, + Прокси, + Таймаут, + ЗащищенноеСоединение, + ИспользоватьАутентификациюОС); + + Сервер = Соединение.Сервер; + Порт = Соединение.Порт; + + ЗапросHTTP = Новый HTTPЗапрос(ПутьНаСервере, Заголовки); + ЗапросHTTP.Заголовки.Вставить("Accept-Charset", "UTF-8"); + ЗапросHTTP.Заголовки.Вставить("X-1C-Request-UID", Строка(Новый УникальныйИдентификатор)); + ОтветHTTP = Соединение.Получить(ЗапросHTTP, ПутьДляСохранения); + + Исключение + + РезультатДиагностики = ПолучениеФайловИзИнтернета.ДиагностикаСоединения(URL); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить HTTP-соединение с сервером %1:%2 + |по причине: + |%3 + | + |Результат диагностики: + |%4'"), + Сервер, Формат(Порт, "ЧГ="), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + РезультатДиагностики.ОписаниеОшибки); + + ДописатьПредставлениеПеренаправлений(Перенаправления, ТекстОшибки); + + Если ЗаписыватьОшибку Тогда + ЗаписатьОшибкуВЖурналРегистрации(ТекстОшибки); + КонецЕсли; + + Возврат РезультатПолученияФайла(Ложь, ТекстОшибки); + + КонецПопытки; + + Попытка + + Если ОтветHTTP.КодСостояния = 301 // 301 Moved Permanently + Или ОтветHTTP.КодСостояния = 302 // 302 Found, 302 Moved Temporarily + Или ОтветHTTP.КодСостояния = 303 // 303 See Other by GET + Или ОтветHTTP.КодСостояния = 307 // 307 Temporary Redirect + Или ОтветHTTP.КодСостояния = 308 Тогда // 308 Permanent Redirect + + Если Перенаправления.Количество() > 7 Тогда + ВызватьИсключение + НСтр("ru = 'Превышено количество перенаправлений.'"); + Иначе + + НовыйURL = ОтветHTTP.Заголовки["Location"]; + + Если НовыйURL = Неопределено Тогда + ВызватьИсключение + НСтр("ru = 'Некорректное перенаправление, отсутствует HTTP-заголовок ответа ""Location"".'"); + КонецЕсли; + + НовыйURL = СокрЛП(НовыйURL); + + Если ПустаяСтрока(НовыйURL) Тогда + ВызватьИсключение + НСтр("ru = 'Некорректное перенаправление, пустой HTTP-заголовок ответа ""Location"".'"); + КонецЕсли; + + Если Перенаправления.Найти(НовыйURL) <> Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Циклическое перенаправление. + |Попытка перейти на %1 уже выполнялась ранее.'"), + НовыйURL); + КонецЕсли; + + Перенаправления.Добавить(URL); + + Если Не СтрНачинаетсяС(НовыйURL, "http") Тогда + // <схема>://<хост>:<порт>/<путь> + НовыйURL = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "%1://%2:%3/%4", Протокол, Сервер, Формат(Порт, "ЧГ="), НовыйURL); + КонецЕсли; + + Возврат ПолучитьФайлИзИнтернет(НовыйURL, НастройкаСохранения, НастройкаСоединения, + НастройкиПрокси, ЗаписыватьОшибку, Перенаправления); + + КонецЕсли; + + КонецЕсли; + + Если ОтветHTTP.КодСостояния < 200 Или ОтветHTTP.КодСостояния >= 300 Тогда + + Если ОтветHTTP.КодСостояния = 304 Тогда + + Если (ЗапросHTTP.Заголовки["If-Modified-Since"] <> Неопределено + Или ЗапросHTTP.Заголовки["If-None-Match"] <> Неопределено) Тогда + ЗаписыватьОшибку = Ложь; + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сервер убежден, что с вашего последнего запроса его ответ не изменился: + |%1'"), + РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); + + ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); + + ВызватьИсключение ТекстОшибки; + + ИначеЕсли ОтветHTTP.КодСостояния < 200 + Или ОтветHTTP.КодСостояния >= 300 И ОтветHTTP.КодСостояния < 400 Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неподдерживаемый ответ сервера: + |%1'"), + РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); + + ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); + + ВызватьИсключение ТекстОшибки; + + ИначеЕсли ОтветHTTP.КодСостояния >= 400 И ОтветHTTP.КодСостояния < 500 Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении запроса: + |%1'"), + РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); + + ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); + + ВызватьИсключение ТекстОшибки; + + Иначе + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка сервера при обработке запроса к ресурсу: + |%1'"), + РасшифровкаКодаСостоянияHTTP(ОтветHTTP.КодСостояния)); + + ДописатьТелоОтветаСервера(ПутьДляСохранения, ТекстОшибки); + + ВызватьИсключение ТекстОшибки; + + КонецЕсли; + + КонецЕсли; + + Исключение + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить файл %1 с сервера %2:%3 + |по причине: + |%4'"), + URL, Сервер, Формат(Порт, "ЧГ="), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + ДописатьПредставлениеПеренаправлений(Перенаправления, ТекстОшибки); + + Если ЗаписыватьОшибку Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Трассировка: + |ЗащищенноеСоединение: %2 + |Таймаут: %3 + |ИспользоватьАутентификациюОС: %4'"), + ТекстОшибки, + Формат(Соединение.Защищенное, "БЛ=Нет; БИ=Да"), + Формат(Соединение.Таймаут, "ЧГ=0"), + Формат(Соединение.ИспользоватьАутентификациюОС, "БЛ=Нет; БИ=Да")); + + ДописатьЗаголовкиHTTP(ЗапросHTTP, СообщениеОбОшибке); + ДописатьЗаголовкиHTTP(ОтветHTTP, СообщениеОбОшибке); + + ЗаписатьОшибкуВЖурналРегистрации(СообщениеОбОшибке); + КонецЕсли; + + Возврат РезультатПолученияФайла(Ложь, ТекстОшибки, ОтветHTTP); + + КонецПопытки; + + КонецЕсли; + + // Если сохраняем файл в соответствии с настройкой. + Если НастройкаСохранения["МестоХранения"] = "ВременноеХранилище" Тогда + КлючУникальности = Новый УникальныйИдентификатор; + Адрес = ПоместитьВоВременноеХранилище (Новый ДвоичныеДанные(ПутьДляСохранения), КлючУникальности); + Возврат РезультатПолученияФайла(Истина, Адрес, ОтветHTTP); + ИначеЕсли НастройкаСохранения["МестоХранения"] = "Сервер" Тогда + Возврат РезультатПолученияФайла(Истина, ПутьДляСохранения, ОтветHTTP); + Иначе + ВызватьИсключение НСтр("ru = 'Не указано место для сохранения файла.'"); + КонецЕсли; + +КонецФункции + +// Функция, заполняющая структуру по параметрам. +// +// Параметры: +// УспехОперации - булево - успех или неуспех операции. +// СообщениеПуть - строка - +// +// Возвращаемое значение - структура: +// поле успех - булево +// поле путь - строка. +// +Функция РезультатПолученияФайла(Знач Статус, Знач СообщениеПуть, HTTPОтвет = Неопределено) + + Результат = Новый Структура("Статус", Статус); + + Если Статус Тогда + Результат.Вставить("Путь", СообщениеПуть); + Иначе + Результат.Вставить("СообщениеОбОшибке", СообщениеПуть); + Результат.Вставить("КодСостояния", 1); + КонецЕсли; + + Если HTTPОтвет <> Неопределено Тогда + ЗаголовкиОтвета = HTTPОтвет.Заголовки; + Если ЗаголовкиОтвета <> Неопределено Тогда + Результат.Вставить("Заголовки", ЗаголовкиОтвета); + КонецЕсли; + + Результат.Вставить("КодСостояния", HTTPОтвет.КодСостояния); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция РазмерФайлаHTTP(СоединениеHTTP, Знач ПутьНаСервере, Знач Заголовки = Неопределено) + + ЗапросHTTP = Новый HTTPЗапрос(ПутьНаСервере, Заголовки); + Попытка + ПолученныеЗаголовки = СоединениеHTTP.ПолучитьЗаголовки(ЗапросHTTP);// HEAD + Исключение + Возврат 0; + КонецПопытки; + РазмерСтрокой = ПолученныеЗаголовки.Заголовки["Content-Length"]; + + ТипЧисло = Новый ОписаниеТипов("Число"); + РазмерФайла = ТипЧисло.ПривестиЗначение(РазмерСтрокой); + + Возврат РазмерФайла; + +КонецФункции + +Функция РазмерФайлаFTP(СоединениеFTP, Знач ПутьНаСервере) + + РазмерФайла = 0; + + Попытка + НайденныеФайлы = СоединениеFTP.НайтиФайлы(ПутьНаСервере); + Если НайденныеФайлы.Количество() > 0 Тогда + РазмерФайла = НайденныеФайлы[0].Размер(); + КонецЕсли; + Исключение + РазмерФайла = 0; + КонецПопытки; + + Возврат РазмерФайла; + +КонецФункции + +Функция ТаймаутПоРазмеруФайла(Размер) + + БайтВМегабайте = 1048576; + + Если Размер > БайтВМегабайте Тогда + КоличествоСекунд = Окр(Размер / БайтВМегабайте * 128); + Возврат ?(КоличествоСекунд > 43200, 43200, КоличествоСекунд); + КонецЕсли; + + Возврат 128; + +КонецФункции + +Функция РасшифровкаКодаСостоянияHTTP(КодСостояния) + + Если КодСостояния = 304 Тогда // Not Modified + Расшифровка = НСтр("ru = 'Нет необходимости повторно передавать запрошенные ресурсы.'"); + ИначеЕсли КодСостояния = 400 Тогда // Bad Request + Расшифровка = НСтр("ru = 'Запрос не может быть исполнен.'"); + ИначеЕсли КодСостояния = 401 Тогда // Unauthorized + Расшифровка = НСтр("ru = 'Попытка авторизации на сервере была отклонена.'"); + ИначеЕсли КодСостояния = 402 Тогда // Payment Required + Расшифровка = НСтр("ru = 'Требуется оплата.'"); + ИначеЕсли КодСостояния = 403 Тогда // Forbidden + Расшифровка = НСтр("ru = 'К запрашиваемому ресурсу нет доступа.'"); + ИначеЕсли КодСостояния = 404 Тогда // Not Found + Расшифровка = НСтр("ru = 'Запрашиваемый ресурс не найден на сервере.'"); + ИначеЕсли КодСостояния = 405 Тогда // Method Not Allowed + Расшифровка = НСтр("ru = 'Метод запроса не поддерживается сервером.'"); + ИначеЕсли КодСостояния = 406 Тогда // Not Acceptable + Расшифровка = НСтр("ru = 'Запрошенный формат данных не поддерживается сервером.'"); + ИначеЕсли КодСостояния = 407 Тогда // Proxy Authentication Required + Расшифровка = НСтр("ru = 'Ошибка аутентификации на прокси-сервере'"); + ИначеЕсли КодСостояния = 408 Тогда // Request Timeout + Расшифровка = НСтр("ru = 'Время ожидания сервером передачи от клиента истекло.'"); + ИначеЕсли КодСостояния = 409 Тогда // Conflict + Расшифровка = НСтр("ru = 'Запрос не может быть выполнен из-за конфликтного обращения к ресурсу.'"); + ИначеЕсли КодСостояния = 410 Тогда // Gone + Расшифровка = НСтр("ru = 'Ресурс на сервере был перемешен.'"); + ИначеЕсли КодСостояния = 411 Тогда // Length Required + Расшифровка = НСтр("ru = 'Сервер требует указание ""Content-length."" в заголовке запроса.'"); + ИначеЕсли КодСостояния = 412 Тогда // Precondition Failed + Расшифровка = НСтр("ru = 'Запрос не применим к ресурсу'"); + ИначеЕсли КодСостояния = 413 Тогда // Request Entity Too Large + Расшифровка = НСтр("ru = 'Сервер отказывается обработать, слишком большой объем передаваемых данных.'"); + ИначеЕсли КодСостояния = 414 Тогда // Request-URL Too Long + Расшифровка = НСтр("ru = 'Сервер отказывается обработать, слишком длинный URL.'"); + ИначеЕсли КодСостояния = 415 Тогда // Unsupported Media-Type + Расшифровка = НСтр("ru = 'Сервер заметил, что часть запроса была сделана в неподдерживаемом формат'"); + ИначеЕсли КодСостояния = 416 Тогда // Requested Range Not Satisfiable + Расшифровка = НСтр("ru = 'Часть запрашиваемого ресурса не может быть предоставлена'"); + ИначеЕсли КодСостояния = 417 Тогда // Expectation Failed + Расшифровка = НСтр("ru = 'Сервер не может предоставить ответ на указанный запрос.'"); + ИначеЕсли КодСостояния = 429 Тогда // Too Many Requests + Расшифровка = НСтр("ru = 'Слишком много запросов за короткое время.'"); + ИначеЕсли КодСостояния = 500 Тогда // Internal Server Error + Расшифровка = НСтр("ru = 'Внутренняя ошибка сервера.'"); + ИначеЕсли КодСостояния = 501 Тогда // Not Implemented + Расшифровка = НСтр("ru = 'Сервер не поддерживает метод запроса.'"); + ИначеЕсли КодСостояния = 502 Тогда // Bad Gateway + Расшифровка = НСтр("ru = 'Сервер, выступая в роли шлюза или прокси-сервера, + |получил недействительное ответное сообщение от вышестоящего сервера.'"); + ИначеЕсли КодСостояния = 503 Тогда // Server Unavailable + Расшифровка = НСтр("ru = 'Сервер временно не доступен.'"); + ИначеЕсли КодСостояния = 504 Тогда // Gateway Timeout + Расшифровка = НСтр("ru = 'Сервер в роли шлюза или прокси-сервера + |не дождался ответа от вышестоящего сервера для завершения текущего запроса.'"); + ИначеЕсли КодСостояния = 505 Тогда // HTTP Version Not Supported + Расшифровка = НСтр("ru = 'Сервер не поддерживает указанную в запросе версию протокола HTTP'"); + ИначеЕсли КодСостояния = 506 Тогда // Variant Also Negotiates + Расшифровка = НСтр("ru = 'Сервер настроен некорректно, и не способен обработать запрос.'"); + ИначеЕсли КодСостояния = 507 Тогда // Insufficient Storage + Расшифровка = НСтр("ru = 'На сервере недостаточно места для выполнения запроса.'"); + ИначеЕсли КодСостояния = 509 Тогда // Bandwidth Limit Exceeded + Расшифровка = НСтр("ru = 'Сервер превысил отведенное ограничение на потребление трафика.'"); + ИначеЕсли КодСостояния = 510 Тогда // Not Extended + Расшифровка = НСтр("ru = 'Сервер требует больше информации о совершаемом запросе.'"); + ИначеЕсли КодСостояния = 511 Тогда // Network Authentication Required + Расшифровка = НСтр("ru = 'Требуется авторизация на сервере.'"); + Иначе + Расшифровка = НСтр("ru = '<Неизвестный код состояния>.'"); + КонецЕсли; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '[%1] %2'"), + КодСостояния, + Расшифровка); + +КонецФункции + +Процедура ДописатьПредставлениеПеренаправлений(Перенаправления, ТекстОшибки) + + Если Перенаправления.Количество() > 0 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Выполненные перенаправления (%2): + |%3'"), + ТекстОшибки, + Перенаправления.Количество(), + СтрСоединить(Перенаправления, Символы.ПС)); + КонецЕсли; + +КонецПроцедуры + +Процедура ДописатьТелоОтветаСервера(ПутьКФайлу, ТекстОшибки) + + ТелоОтветаСервера = ТекстИзHTMLИзФайла(ПутьКФайлу); + + Если Не ПустаяСтрока(ТелоОтветаСервера) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Сообщение, полученное от сервера: + |%2'"), + ТекстОшибки, + ТелоОтветаСервера); + КонецЕсли; + +КонецПроцедуры + +Функция ТекстИзHTMLИзФайла(ПутьКФайлу) + + ФайлОтвета = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ИсходныйТекст = ФайлОтвета.Прочитать(1024 * 15); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(ИсходныйТекст); + ФайлОтвета.Закрыть(); + + Возврат ТекстОшибки; + +КонецФункции + +Процедура ДописатьЗаголовкиHTTP(Объект, ТекстОшибки) + + Если ТипЗнч(Объект) = Тип("HTTPЗапрос") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |HTTP запрос: + |Адрес ресурса: %2 + |Заголовки: %3'"), + ТекстОшибки, + Объект.АдресРесурса, + ПредставлениеЗаголовковHTTP(Объект.Заголовки)); + ИначеЕсли ТипЗнч(Объект) = Тип("HTTPОтвет") Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |HTTP ответ: + |Код ответа: %2 + |Заголовки: %3'"), + ТекстОшибки, + Объект.КодСостояния, + ПредставлениеЗаголовковHTTP(Объект.Заголовки)); + КонецЕсли; + +КонецПроцедуры + +Функция ПредставлениеЗаголовковHTTP(Заголовки) + + ПредставлениеЗаголовков = ""; + + Для каждого Заголовок Из Заголовки Цикл + ПредставлениеЗаголовков = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + |%2: %3'"), + ПредставлениеЗаголовков, + Заголовок.Ключ, Заголовок.Значение); + КонецЦикла; + + Возврат ПредставлениеЗаголовков; + +КонецФункции + +Функция ПредставлениеИнтернетПрокси(Прокси) + + Журнал = Новый Массив; + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Адрес: %1:%2 + |HTTP: %3:%4 + |Secure: %5:%6 + |FTP: %7:%8'"), + Прокси.Сервер(), Формат(Прокси.Порт(), "ЧГ="), + Прокси.Сервер("http"), Формат(Прокси.Порт("http"), "ЧГ="), + Прокси.Сервер("https"), Формат(Прокси.Порт("https"), "ЧГ="), + Прокси.Сервер("ftp"), Формат(Прокси.Порт("ftp"), "ЧГ="))); + + Если Прокси.ИспользоватьАутентификациюОС("") Тогда + Журнал.Добавить(НСтр("ru = 'Используется аутентификация операционной системы'")); + Иначе + Пользователь = Прокси.Пользователь(""); + Пароль = Прокси.Пароль(""); + СостояниеПароля = ?(ПустаяСтрока(Пароль), НСтр("ru = '<не указан>'"), НСтр("ru = '********'")); + + Журнал.Добавить(НСтр("ru = 'Используется аутентификация по имени пользователя и паролю'")); + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователь: %1 + |Пароль: %2'"), + Пользователь, + СостояниеПароля)); + КонецЕсли; + + Если Прокси.НеИспользоватьПроксиДляЛокальныхАдресов Тогда + Журнал.Добавить(НСтр("ru = 'Не использовать прокси для локальных адресов'")); + КонецЕсли; + + Если Прокси.НеИспользоватьПроксиДляАдресов.Количество() > 0 Тогда + Журнал.Добавить(НСтр("ru = 'Не использовать для следующих адресов:'")); + Для Каждого ИсключаемыйАдрес Из Прокси.НеИспользоватьПроксиДляАдресов Цикл + Журнал.Добавить(ИсключаемыйАдрес); + КонецЦикла; + КонецЕсли; + + Возврат СтрСоединить(Журнал, Символы.ПС); + +КонецФункции + +// Возвращает прокси по настройкам НастройкаПроксиСервера для заданного протокола Протокол. +// +// Параметры: +// НастройкаПроксиСервера - Соответствие: +// ИспользоватьПрокси - использовать ли прокси-сервер. +// НеИспользоватьПроксиДляЛокальныхАдресов - использовать ли прокси-сервер для локальных адресов. +// ИспользоватьСистемныеНастройки - использовать ли системные настройки прокси-сервера. +// Сервер - адрес прокси-сервера. +// Порт - порт прокси-сервера. +// Пользователь - имя пользователя для авторизации на прокси-сервере. +// Пароль - пароль пользователя. +// ИспользоватьАутентификациюОС - Булево - признак использования аутентификации средствами операционной системы. +// Протокол - строка - протокол для которого устанавливаются параметры прокси сервера, например "http", "https", +// "ftp". +// +// Возвращаемое значение: +// ИнтернетПрокси +// +Функция НовыйИнтернетПрокси(НастройкаПроксиСервера, Протокол) Экспорт + + Если НастройкаПроксиСервера = Неопределено Тогда + // Системные установки прокси-сервера. + Возврат Неопределено; + КонецЕсли; + + ИспользоватьПрокси = НастройкаПроксиСервера.Получить("ИспользоватьПрокси"); + Если Не ИспользоватьПрокси Тогда + // Не использовать прокси-сервер. + Возврат Новый ИнтернетПрокси(Ложь); + КонецЕсли; + + ИспользоватьСистемныеНастройки = НастройкаПроксиСервера.Получить("ИспользоватьСистемныеНастройки"); + Если ИспользоватьСистемныеНастройки Тогда + // Системные настройки прокси-сервера. + Возврат Новый ИнтернетПрокси(Истина); + КонецЕсли; + + // Настройки прокси-сервера, заданные вручную. + Прокси = Новый ИнтернетПрокси; + + // Определение адреса и порта прокси-сервера. + ДополнительныеНастройки = НастройкаПроксиСервера.Получить("ДополнительныеНастройкиПрокси"); + ПроксиПоПротоколу = Неопределено; + Если ТипЗнч(ДополнительныеНастройки) = Тип("Соответствие") Тогда + ПроксиПоПротоколу = ДополнительныеНастройки.Получить(Протокол); + КонецЕсли; + + ИспользоватьАутентификациюОС = НастройкаПроксиСервера.Получить("ИспользоватьАутентификациюОС"); + ИспользоватьАутентификациюОС = ?(ИспользоватьАутентификациюОС = Истина, Истина, Ложь); + + Если ТипЗнч(ПроксиПоПротоколу) = Тип("Структура") Тогда + Прокси.Установить(Протокол, ПроксиПоПротоколу.Адрес, ПроксиПоПротоколу.Порт, + НастройкаПроксиСервера["Пользователь"], НастройкаПроксиСервера["Пароль"], ИспользоватьАутентификациюОС); + Иначе + Прокси.Установить(Протокол, НастройкаПроксиСервера["Сервер"], НастройкаПроксиСервера["Порт"], + НастройкаПроксиСервера["Пользователь"], НастройкаПроксиСервера["Пароль"], ИспользоватьАутентификациюОС); + КонецЕсли; + + Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = НастройкаПроксиСервера["НеИспользоватьПроксиДляЛокальныхАдресов"]; + + АдресаИсключений = НастройкаПроксиСервера.Получить("НеИспользоватьПроксиДляАдресов"); + Если ТипЗнч(АдресаИсключений) = Тип("Массив") Тогда + Для каждого АдресИсключения Из АдресаИсключений Цикл + Прокси.НеИспользоватьПроксиДляАдресов.Добавить(АдресИсключения); + КонецЦикла; + КонецЕсли; + + Возврат Прокси; + +КонецФункции + +// Записывает событие-ошибку в журнал регистрации. Имя события +// "Получение файлов из Интернета". +// Параметры: +// СообщениеОбОшибке - строка сообщение об ошибке. +// +Процедура ЗаписатьОшибкуВЖурналРегистрации(Знач СообщениеОбОшибке) + + ЗаписьЖурналаРегистрации( + СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + СообщениеОбОшибке); + +КонецПроцедуры + +Функция СобытиеЖурналаРегистрации() + + Возврат НСтр("ru = 'Получение файлов из Интернета'", ОбщегоНазначения.КодОсновногоЯзыка()); + +КонецФункции + +#КонецЕсли + +#КонецОбласти + +#Область ДиагностикаСоединения + +// Служебная информация для отображения текущих настроек и состояний прокси для выполнения диагностики. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * СоединениеЧерезПрокси - Булево - Признак того, что соединение должно выполняться через прокси. +// * Представление - Строка - Представление текущего настроенного прокси. +// +Функция СостояниеНастроекПрокси() Экспорт + + Прокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси("http"); + НастройкиПрокси = ПолучениеФайловИзИнтернета.НастройкиПроксиНаСервере(); + + Журнал = Новый Массив; + + Если НастройкиПрокси = Неопределено Тогда + Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ не указаны (используются системные настройки прокси).'")); + ИначеЕсли Не НастройкиПрокси.Получить("ИспользоватьПрокси") Тогда + Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ: Не использовать прокси-сервер.'")); + ИначеЕсли НастройкиПрокси.Получить("ИспользоватьСистемныеНастройки") Тогда + Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ: Использовать системные настройки прокси-сервера.'")); + Иначе + Журнал.Добавить(НСтр("ru = 'Параметры прокси-сервера в ИБ: Использовать другие настройки прокси-сервера.'")); + КонецЕсли; + + Если Прокси = Неопределено Тогда + Прокси = Новый ИнтернетПрокси(Истина); + КонецЕсли; + + УказанПроксиВсехАдресов = Не ПустаяСтрока(Прокси.Сервер()); + УказанПроксиHTTP = Не ПустаяСтрока(Прокси.Сервер("http")); + УказанПроксиHTTPS = Не ПустаяСтрока(Прокси.Сервер("https")); + + СоединениеЧерезПрокси = УказанПроксиВсехАдресов Или УказанПроксиHTTP Или УказанПроксиHTTPS; + + Если СоединениеЧерезПрокси Тогда + Журнал.Добавить(НСтр("ru = 'Соединение выполняется через прокси-сервер:'")); + Журнал.Добавить(ПредставлениеИнтернетПрокси(Прокси)); + Иначе + Журнал.Добавить(НСтр("ru = 'Соединение выполняется без использования прокси-сервера.'")); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("СоединениеЧерезПрокси", СоединениеЧерезПрокси); + Результат.Вставить("Представление", СтрСоединить(Журнал, Символы.ПС)); + Возврат Результат; + +КонецФункции + +Функция ПредставлениеМестаДиагностики() Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат НСтр("ru = 'Подключение проводится на сервере 1С:Предприятия в интернете.'"); + Иначе + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если ОбщегоНазначения.КлиентПодключенЧерезВебСервер() Тогда + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Подключение проводится из файловой базы на веб-сервере <%1>.'"), ИмяКомпьютера()); + Иначе + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Подключение проводится из файловой базы на компьютере <%1>.'"), ИмяКомпьютера()); + КонецЕсли; + Иначе + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Подключение проводится на сервере 1С:Предприятие <%1>.'"), ИмяКомпьютера()); + КонецЕсли; + КонецЕсли; + +КонецФункции + +Функция ПроверитьДоступностьСервера(АдресСервера) Экспорт + + ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина; + ПараметрыЗапускаПрограммы.КодировкаИсполнения = "OEM"; + + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда + ШаблонКоманды = "ping %1 -n 2 -w 500"; + Иначе + ШаблонКоманды = "ping -c 2 -w 500 %1"; + КонецЕсли; + + СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКоманды, АдресСервера); + + Результат = ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаПрограммы); + + // Разные операционные системы могут выводить ошибки в разные потоки: + // - для Windows все всегда в потоке вывода; + // - для Debian или RHEL ошибки падают в поток ошибок. + ЖурналДоступности = Результат.ПотокВывода + Результат.ПотокОшибок; + + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда + ФактНедоступности = (СтрНайти(ЖурналДоступности, "Destination host unreachable") > 0); // Не локализуется. + БезПотерь = (СтрНайти(ЖурналДоступности, "(0% loss)") > 0); // Не локализуется. + Иначе + ФактНедоступности = (СтрНайти(ЖурналДоступности, "Destination Host Unreachable") > 0); // Не локализуется. + БезПотерь = (СтрНайти(ЖурналДоступности, "0% packet loss") > 0) // не локализуется. + КонецЕсли; + + Доступен = Не ФактНедоступности И БезПотерь; + СостояниеДоступности = ?(Доступен, НСтр("ru = 'доступен'"), НСтр("ru = 'не доступен'")); + + Журнал = Новый Массив; + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удаленный сервер %1 %2:'"), + АдресСервера, + СостояниеДоступности)); + + Журнал.Добавить("> " + СтрокаКоманды); + Журнал.Добавить(ЖурналДоступности); + + Возврат Новый Структура("Доступен, ЖурналДиагностики", Доступен, СтрСоединить(Журнал, Символы.ПС)); + +КонецФункции + +Функция ЖурналТрассировкиМаршрутаСервера(АдресСервера) Экспорт + + ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина; + ПараметрыЗапускаПрограммы.КодировкаИсполнения = "OEM"; + + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда + ШаблонКоманды = "tracert -w 100 -h 15 %1"; + Иначе + // Если вдруг пакет traceroute не установлен - в потоке вывода будет ошибка. + // Т.к. результат все равно не разбирается, на поток вывода можно не обращать внимания. + // По нему администратор поймет что ему надо доставить. + ШаблонКоманды = "traceroute -w 100 -m 100 %1"; + КонецЕсли; + + СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКоманды, АдресСервера); + + Результат = ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаПрограммы); + + Журнал = Новый Массив; + Журнал.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Трассировка маршрута к удаленному серверу %1:'"), АдресСервера)); + + Журнал.Добавить("> " + СтрокаКоманды); + Журнал.Добавить(Результат.ПотокВывода); + Журнал.Добавить(Результат.ПотокОшибок); + + Возврат СтрСоединить(Журнал, Символы.ПС); + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйВызовСервера/Module.bsl new file mode 100644 index 000000000..9646179f8 --- /dev/null +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйВызовСервера/Module.bsl @@ -0,0 +1,35 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +#Область СкачатьФайлНаКлиенте + +Функция СкачатьФайл(URL, ПараметрыПолучения, ЗаписыватьОшибку) Экспорт + + НастройкаСохранения = Новый Соответствие; + НастройкаСохранения.Вставить("МестоХранения", "ВременноеХранилище"); + + Возврат ПолучениеФайловИзИнтернетаСлужебный.СкачатьФайл( + URL, ПараметрыПолучения, НастройкаСохранения, ЗаписыватьОшибку); + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +Функция СостояниеНастроекПрокси() Экспорт + + Возврат ПолучениеФайловИзИнтернетаСлужебный.СостояниеНастроекПрокси(); + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйВызовСервера/ПолучениеФайловИзИнтернетаСлужебныйВызовСервера.mdo b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйВызовСервера/ПолучениеФайловИзИнтернетаСлужебныйВызовСервера.mdo new file mode 100644 index 000000000..4d725adc2 --- /dev/null +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйВызовСервера/ПолучениеФайловИзИнтернетаСлужебныйВызовСервера.mdo @@ -0,0 +1,10 @@ + + + ПолучениеФайловИзИнтернетаСлужебныйВызовСервера + + ru + Получение файлов из Интернета служебный вызов сервера + + true + true + diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index 5143dc062..f43d18eba 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -1,19 +1,52 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Основные процедуры и функции. -// См. ПользователиКлиентСервер.АвторизованныйПользователь +// Возвращает текущего пользователя или текущего внешнего пользователя, +// в зависимости от того, кто выполнил вход в сеанс. +// Рекомендуется использовать в коде, который поддерживает работу в обоих случаях. +// +// Возвращаемое значение: +// СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - пользователь +// или внешний пользователь. +// Функция АвторизованныйПользователь() Экспорт - Возврат ПользователиКлиентСервер.АвторизованныйПользователь(); + Возврат ПользователиСлужебный.АвторизованныйПользователь(); КонецФункции -// См. ПользователиКлиентСервер.ТекущийПользователь +// Возвращает текущего пользователя. +// Рекомендуется использовать в коде, который не поддерживает работу с внешними пользователями. +// +// Если вход в сеанс выполнил внешний пользователь, тогда будет вызвано исключение. +// +// Возвращаемое значение: +// СправочникСсылка.Пользователи - пользователь. +// Функция ТекущийПользователь() Экспорт - Возврат ПользователиКлиентСервер.ТекущийПользователь(); + Возврат ПользователиСлужебныйКлиентСервер.ТекущийПользователь(АвторизованныйПользователь()); + +КонецФункции + +// Возвращает Истина, если вход в сеанс выполнил внешний пользователь. +// +// Возвращаемое значение: +// Булево - Истина, если вход в сеанс выполнил внешний пользователь. +// +Функция ЭтоСеансВнешнегоПользователя() Экспорт + + Возврат ПользователиСлужебныйПовтИсп.ЭтоСеансВнешнегоПользователя(); КонецФункции @@ -215,7 +248,7 @@ УникальныйИдентификатор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( ОписаниеПользователяИБ, "ИдентификаторПользователяИБ"); - Если ТипЗнч(ОписаниеПользователяИБ) <> Тип("УникальныйИдентификатор") Тогда + Если ТипЗнч(УникальныйИдентификатор) <> Тип("УникальныйИдентификатор") Тогда Возврат Ложь; КонецЕсли; @@ -777,8 +810,7 @@ // Подготовка структур возвращаемых данных. Свойства = Новый Структура; - Свойства.Вставить("УникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Свойства.Вставить("УникальныйИдентификатор", ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Свойства.Вставить("Имя", ""); Свойства.Вставить("ПолноеИмя", ""); @@ -917,7 +949,7 @@ Иначе Если СоздатьНового Тогда ВызватьИсключение ОписаниеОшибкиПриЗаписиПользователяИБ( - НСтр("ru = 'Невозможно создать пользователя информационной базы ""%1"", так как он уже существует.'"), + НСтр("ru = 'Невозможно создать пользователя информационной базы %1, так как он уже существует.'"), СтарыеСвойства.Имя, СтарыеСвойства.УникальныйИдентификатор); КонецЕсли; @@ -934,7 +966,7 @@ Если Не СтарыйПарольСовпадает Тогда ВызватьИсключение ОписаниеОшибкиПриЗаписиПользователяИБ( - НСтр("ru = 'При записи пользователя информационной базы ""%1"" старый пароль указан не верно.'"), + НСтр("ru = 'При записи пользователя информационной базы %1 старый пароль указан не верно.'"), СтарыеСвойства.Имя, СтарыеСвойства.УникальныйИдентификатор); КонецЕсли; @@ -942,7 +974,7 @@ КонецЕсли; // Подготовка новых значений свойств. - НовыеСвойства = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СтарыеСвойства); + НовыеСвойства = ОбщегоНазначения.СкопироватьРекурсивно(СтарыеСвойства); Для каждого КлючИЗначение Из НовыеСвойства Цикл Если ОбновляемыеСвойства.Свойство(КлючИЗначение.Ключ) И ОбновляемыеСвойства[КлючИЗначение.Ключ] <> Неопределено Тогда @@ -961,7 +993,7 @@ ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ, ЭтоВнешнийПользователь); Исключение ВызватьИсключение ОписаниеОшибкиПриЗаписиПользователяИБ( - НСтр("ru = 'Не удалось записать свойства пользователя информационной базы ""%1"" по причине: + НСтр("ru = 'Не удалось записать свойства пользователя информационной базы %1 по причине: |%2.'"), ПользовательИБ.Имя, ?(ПользовательСуществует, СтарыеСвойства.УникальныйИдентификатор, Неопределено), @@ -1008,7 +1040,7 @@ Исключение ВызватьИсключение ОписаниеОшибкиПриЗаписиПользователяИБ( - НСтр("ru = 'Не удалось удалить пользователя информационной базы ""%1"" по причине: + НСтр("ru = 'Не удалось удалить пользователя информационной базы %1 по причине: |%2.'"), ПользовательИБ.Имя, ПользовательИБ.УникальныйИдентификатор, @@ -1339,7 +1371,7 @@ Знач ИдентификаторПользователяСервиса = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); - ПустойУникальныйИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + ПустойУникальныйИдентификатор = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); Если ТипЗнч(УникальныйИдентификатор) <> Тип("УникальныйИдентификатор") Или УникальныйИдентификатор = ПустойУникальныйИдентификатор Тогда @@ -1635,6 +1667,70 @@ КонецПроцедуры +// Добавляет всех администраторов системы в группу доступа, +// связанную с предопределенным профилем ОткрытиеВнешнихОтчетовИОбработок. +// Скрывает предупреждения безопасности, всплывающие при первом открытии сеанса администратора. +// Не для модели сервиса. +// +// Параметры: +// ОткрытиеРазрешено - Булево - если Истина, установить разрешение открытия. +// +Процедура УстановитьПравоОткрытияВнешнихОтчетовИОбработок(ОткрытиеРазрешено) Экспорт + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); + ПараметрыАдминистрирования.Вставить("ПринятоРешениеПоОткрытиюВнешнихОтчетовИОбработок", Истина); + СтандартныеПодсистемыСервер.УстановитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.УстановитьПравоОткрытияВнешнихОтчетовИОбработок(ОткрытиеРазрешено); + Возврат; + КонецЕсли; + + РольАдминистраторСистемы = Метаданные.Роли.АдминистраторСистемы; + РольИнтерактивноеОткрытие = Метаданные.Роли.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок; + + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + Для Каждого ПользовательИБ Из ПользователиИБ Цикл + + Если Не ПользовательИБ.Роли.Содержит(РольАдминистраторСистемы) Тогда + Продолжить; + КонецЕсли; + + ПользовательИзменен = Ложь; + ЕстьРольИнтерактивногоОткрытия = ПользовательИБ.Роли.Содержит(РольИнтерактивноеОткрытие); + Если ОткрытиеРазрешено Тогда + Если Не ЕстьРольИнтерактивногоОткрытия Тогда + ПользовательИБ.Роли.Добавить(РольИнтерактивноеОткрытие); + ПользовательИзменен = Истина; + КонецЕсли; + Иначе + Если ЕстьРольИнтерактивногоОткрытия Тогда + ПользовательИБ.Роли.Удалить(РольИнтерактивноеОткрытие); + ПользовательИзменен = Истина; + КонецЕсли; + КонецЕсли; + Если ПользовательИзменен Тогда + ПользовательИБ.Записать(); + КонецЕсли; + + ОписаниеНастроек = Новый ОписаниеНастроек; + ОписаниеНастроек.Представление = НСтр("ru ='Предупреждение безопасности'"); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "ПредупреждениеБезопасности", + "ПользовательОзнакомлен", + Истина, + ОписаниеНастроек, + ПользовательИБ.Имя); + + КонецЦикла; + +КонецПроцедуры + #Область УстаревшиеПроцедурыИФункции // Устарела. По стандарту 488 "Стандартные роли" роль ПолныеПрава более не может @@ -1774,7 +1870,7 @@ КонецЕсли; // Подготовка новых значений свойств. - НовыеСвойства = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СтарыеСвойства); + НовыеСвойства = ОбщегоНазначения.СкопироватьРекурсивно(СтарыеСвойства); Для каждого КлючИЗначение Из НовыеСвойства Цикл @@ -1802,7 +1898,7 @@ НСтр("ru = 'При записи пользователя информационной базы |%1 произошла ошибка: | - |""%2"".'"), + |%2.'"), ПользовательИБ.Имя, ?(ПредварительноеЧтение, СтарыеСвойства.УникальныйИдентификатор, Неопределено), ИнформацияОбОшибке); @@ -1862,7 +1958,7 @@ Если ЗаписатьВЖурнал Тогда ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Ошибка записи пользователя ИБ'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , diff --git a/SSL/src/CommonModules/ПользователиКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиКлиент/Module.bsl new file mode 100644 index 000000000..5bede9cfa --- /dev/null +++ b/SSL/src/CommonModules/ПользователиКлиент/Module.bsl @@ -0,0 +1,32 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// См. Пользователи.АвторизованныйПользователь. +Функция АвторизованныйПользователь() Экспорт + + Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("АвторизованныйПользователь"); + +КонецФункции + +// См. Пользователи.ТекущийПользователь. +Функция ТекущийПользователь() Экспорт + + Возврат ПользователиСлужебныйКлиентСервер.ТекущийПользователь(АвторизованныйПользователь()); + +КонецФункции + +// См. Пользователи.ЭтоСеансВнешнегоПользователя. +Функция ЭтоСеансВнешнегоПользователя() Экспорт + + Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("ЭтоСеансВнешнегоПользователя"); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиКлиент/ПользователиКлиент.mdo b/SSL/src/CommonModules/ПользователиКлиент/ПользователиКлиент.mdo new file mode 100644 index 000000000..9b15400f1 --- /dev/null +++ b/SSL/src/CommonModules/ПользователиКлиент/ПользователиКлиент.mdo @@ -0,0 +1,10 @@ + + + ПользователиКлиент + + ru + Пользователи клиент + + true + true + diff --git a/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl index ffc45df7b..92291daca 100644 --- a/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl @@ -1,80 +1,71 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс -// Возвращает текущего пользователя или текущего внешнего пользователя, -// в зависимости от того, кто выполнил вход в сеанс. -// Рекомендуется использовать в коде, который поддерживает работу в обоих случаях. -// -// Возвращаемое значение: -// СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - пользователь -// или внешний пользователь. +#Область УстаревшиеПроцедурыИФункции + +// Устарела. +// См. Пользователи.АвторизованныйПользователь. +// См. ПользователиКлиент.АвторизованныйПользователь. // Функция АвторизованныйПользователь() Экспорт #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Возврат ПользователиСлужебный.АвторизованныйПользователь(); + Возврат Пользователи.АвторизованныйПользователь(); #Иначе - Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("АвторизованныйПользователь"); + Возврат ПользователиКлиент.АвторизованныйПользователь(); #КонецЕсли КонецФункции -// Возвращает текущего пользователя. -// Рекомендуется использовать в коде, который не поддерживает работу с внешними пользователями. -// -// Если вход в сеанс выполнил внешний пользователь, тогда будет вызвано исключение. -// -// Возвращаемое значение: -// СправочникСсылка.Пользователи - пользователь. +// Устарела. +// См. Пользователи.ТекущийПользователь. +// См. ПользователиКлиент.ТекущийПользователь. // Функция ТекущийПользователь() Экспорт - АвторизованныйПользователь = АвторизованныйПользователь(); - - Если ТипЗнч(АвторизованныйПользователь) <> Тип("СправочникСсылка.Пользователи") Тогда - ВызватьИсключение - НСтр("ru = 'Невозможно получить текущего пользователя - |в сеансе внешнего пользователя.'"); - КонецЕсли; - - Возврат АвторизованныйПользователь; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат Пользователи.ТекущийПользователь(); +#Иначе + Возврат ПользователиКлиент.ТекущийПользователь(); +#КонецЕсли КонецФункции -// Возвращает текущего внешнего пользователя. -// Рекомендуется использовать в коде, который поддерживает только внешних пользователей. -// -// Если вход в сеанс выполнил не внешний пользователь, тогда будет вызвано исключение. -// -// Возвращаемое значение: -// СправочникСсылка.ВнешниеПользователи - внешний пользователь. +// Устарела. +// См. ВнешниеПользователи.ТекущийВнешнийПользователь. +// См. ВнешниеПользователиКлиент.ТекущийВнешнийПользователь. // Функция ТекущийВнешнийПользователь() Экспорт - АвторизованныйПользователь = АвторизованныйПользователь(); - - Если ТипЗнч(АвторизованныйПользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда - ВызватьИсключение - НСтр("ru = 'Невозможно получить текущего внешнего пользователя - |в сеансе пользователя.'"); - КонецЕсли; - - Возврат АвторизованныйПользователь; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат ВнешниеПользователи.ТекущийВнешнийПользователь(); +#Иначе + Возврат ВнешниеПользователиКлиент.ТекущийВнешнийПользователь(); +#КонецЕсли КонецФункции -// Возвращает Истина, если вход в сеанс выполнил внешний пользователь. -// -// Возвращаемое значение: -// Булево - Истина, если вход в сеанс выполнил внешний пользователь. +// Устарела. +// См. Пользователи.ЭтоСеансВнешнегоПользователя. +// См. ПользователиКлиент.ЭтоСеансВнешнегоПользователя. // Функция ЭтоСеансВнешнегоПользователя() Экспорт #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Возврат ПользователиСлужебныйПовтИсп.ЭтоСеансВнешнегоПользователя(); + Возврат Пользователи.ЭтоСеансВнешнегоПользователя(); #Иначе - Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("ЭтоСеансВнешнегоПользователя"); + Возврат ПользователиКлиент.ЭтоСеансВнешнегоПользователя(); #КонецЕсли КонецФункции #КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl index e08151fcb..2e7ff5060 100644 --- a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Переопределяет стандартное поведение подсистемы Пользователи. diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index 22ce0626a..59df23054 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс /////////////////////////////////////////////////////////////////////////////// @@ -113,7 +121,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Администратор зарегистрирован в справочнике Пользователи'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение, Метаданные.Справочники.Пользователи, Пользователь, @@ -148,8 +156,6 @@ // Процедура УстановитьНачальныеНастройки(Знач ИмяПользователя, ЭтоВнешнийПользователь = Ложь) Экспорт - СистемнаяИнформация = Новый СистемнаяИнформация; - ТекущийРежим = Метаданные.РежимСовместимостиИнтерфейса; Такси = (ТекущийРежим = Метаданные.СвойстваОбъектов.РежимСовместимостиИнтерфейса.Такси ИЛИ ТекущийРежим = Метаданные.СвойстваОбъектов.РежимСовместимостиИнтерфейса.ТаксиРазрешитьВерсия8_2); @@ -212,7 +218,7 @@ Возврат ""; КонецЕсли; - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда ИмяРолиБазовыеПрава = Метаданные.Роли.БазовыеПраваВнешнихПользователейБСП.Имя; Иначе ИмяРолиБазовыеПрава = Метаданные.Роли.БазовыеПраваБСП.Имя; @@ -236,7 +242,7 @@ Процедура ПроверитьПраваТекущегоПользователяПриВходе() Экспорт ПроверитьПраваПользователя(ПользователиИнформационнойБазы.ТекущийПользователь(), - "ПриЗапуске", ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя()); + "ПриЗапуске", Пользователи.ЭтоСеансВнешнегоПользователя()); КонецПроцедуры @@ -614,12 +620,17 @@ КонецПроцедуры // Включает пользователя приемника в группы пользователей пользователя источника. +// Вызывается из обработчика формы ПриЗаписиНаСервере. +// Процедура СкопироватьГруппыПользователя(Источник, Приемник) Экспорт ВнешнийПользователь = (ТипЗнч(Источник) = Тип("СправочникСсылка.ВнешниеПользователи")); Запрос = Новый Запрос; + Блокировка = Новый БлокировкаДанных; + Если ВнешнийПользователь Тогда + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей"); Запрос.Текст = "ВЫБРАТЬ | ГруппыПользователейСостав.Ссылка КАК ГруппаПользователей @@ -628,6 +639,7 @@ |ГДЕ | ГруппыПользователейСостав.ВнешнийПользователь = &Пользователь"; Иначе + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей"); Запрос.Текст = "ВЫБРАТЬ | ГруппыПользователейСостав.Ссылка КАК ГруппаПользователей @@ -640,11 +652,12 @@ РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); - Блокировка = Новый БлокировкаДанных(); - ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей"); ЭлементБлокировки.ИсточникДанных = РезультатЗапроса; + НачатьТранзакцию(); Попытка + Блокировка.Заблокировать(); + Пока Выборка.Следующий() Цикл ГруппаПользователейОбъект = Выборка.ГруппаПользователей.ПолучитьОбъект(); Строка = ГруппаПользователейОбъект.Состав.Добавить(); @@ -854,11 +867,11 @@ АутентификацияOpenID = 0; ВходВПрограммуРазрешен = 0; Для Каждого ОписаниеПользователя Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл - АутентификацияСтандартная = АутентификацияСтандартная + ОписаниеПользователя.АутентификацияСтандартная; - АутентификацияОС = АутентификацияОС + ОписаниеПользователя.АутентификацияОС; - АутентификацияOpenID = АутентификацияOpenID + ОписаниеПользователя.АутентификацияOpenID; - ВходВПрограммуРазрешен = ВходВПрограммуРазрешен + (ОписаниеПользователя.АутентификацияСтандартная - Или ОписаниеПользователя.АутентификацияОС Или ОписаниеПользователя.АутентификацияOpenID); + АутентификацияСтандартная = ?(ОписаниеПользователя.АутентификацияСтандартная, 1, 0); + АутентификацияОС = ?(ОписаниеПользователя.АутентификацияОС, 1, 0); + АутентификацияOpenID = ?(ОписаниеПользователя.АутентификацияOpenID, 1, 0); + ВходВПрограммуРазрешен = ?(ОписаниеПользователя.АутентификацияСтандартная + Или ОписаниеПользователя.АутентификацияОС Или ОписаниеПользователя.АутентификацияOpenID, 1, 0); КонецЦикла; МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.Пользователи.АутентификацияСтандартная", АутентификацияСтандартная); @@ -1017,6 +1030,11 @@ Обработчик.Приоритет = 1; КонецЕсли; + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьНаименованиеПредопределенныхГруппПользователей"; + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. @@ -1121,6 +1139,18 @@ КонецПроцедуры +// См. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств. +Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Справочник_ВнешниеПользователи"; + Набор.Идентификатор = Новый УникальныйИдентификатор("d9c30d48-a72a-498a-9faa-c078bf652776"); + Набор.Используется = ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей"); + + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Справочник_Пользователи"; + Набор.Идентификатор = Новый УникальныйИдентификатор("2bf06771-775a-406a-a5dc-45a10e98914f"); +КонецПроцедуры + // Обработчики событий подсистемы Обмен данными. // См. ОбменДаннымиПереопределяемый.ПриНастройкеПодчиненногоУзлаРИБ. @@ -1566,8 +1596,7 @@ РеквизитыПользователя.Ссылка = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Пользователь).ПустаяСсылка(); РеквизитыПользователя.Недействителен = Ложь; РеквизитыПользователя.Подготовлен = Ложь; - РеквизитыПользователя.ИдентификаторПользователяИБ = - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + РеквизитыПользователя.ИдентификаторПользователяИБ = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); КонецЕсли; Если ДополнительныеПараметры.Свойство("ПроверятьДействительностьПользователя") @@ -1959,7 +1988,7 @@ Если ВызовИзФормыСменаПароля Тогда ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Ошибка смены пароля'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)), Пользователь, @@ -2766,17 +2795,20 @@ // Отказ - Булево - флаг отказа от выполнения операции. // Устанавливается в случае ошибки. // +// ЭтоВнешнийПользователь - Булево - Истина если проверяется описание +// пользователя ИБ для внешнего пользователя. +// // Возвращаемое значение: // Булево - если Истина, ошибок не найдено. // -Функция ПроверитьОписаниеПользователяИБ(Знач ОписаниеПользователяИБ, Отказ) Экспорт +Функция ПроверитьОписаниеПользователяИБ(Знач ОписаниеПользователяИБ, Отказ, ЭтоВнешнийПользователь) Экспорт Если ОписаниеПользователяИБ.Свойство("Имя") Тогда Имя = ОписаниеПользователяИБ.Имя; Если ПустаяСтрока(Имя) Тогда // Хранилище настроек использует только первые 64 символа имени пользователя ИБ. - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Не заполнено Имя (для входа).'"), , "Имя", @@ -2786,7 +2818,7 @@ ИначеЕсли СтрДлина(Имя) > 64 Тогда // Аутентификация через web использует символ ":", // как разделитель имени и пароля пользователя. - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Имя (для входа) превышает 64 символа.'"), , "Имя", @@ -2794,7 +2826,7 @@ Отказ); ИначеЕсли СтрНайти(Имя, ":") > 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Имя (для входа) содержит запрещенный символ "":"".'"), , "Имя", @@ -2824,8 +2856,31 @@ Строка(НайденныйПользователь)); КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( ТекстОшибки, , "Имя", , Отказ); + + ИначеЕсли Не ОписаниеПользователяИБ.Свойство("Пароль") + Или Не ЗначениеЗаполнено(ОписаниеПользователяИБ.Пароль) Тогда + + Если ЭтоВнешнийПользователь Тогда + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; + Иначе + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; + КонецЕсли; + Если ЗначениеЗаполнено(НастройкиВхода.МинимальнаяДлинаПароля) Тогда + Если ЗначениеЗаполнено(ОписаниеПользователяИБ.ИдентификаторПользователяИБ) Тогда + УстановитьПривилегированныйРежим(Истина); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОписаниеПользователяИБ.ИдентификаторПользователяИБ); + УстановитьПривилегированныйРежим(Ложь); + Иначе + ПользовательИБ = Неопределено; + КонецЕсли; + Если ПользовательИБ = Неопределено Тогда + ОбщегоНазначения.СообщитьПользователю( + НСтр("ru = 'Требуется установить пароль.'"),, "СменитьПароль",, Отказ); + КонецЕсли; + КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; @@ -2840,7 +2895,7 @@ ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); ПользовательИБ.ПользовательОС = ОписаниеПользователяИБ.ПользовательОС; Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Пользователь ОС должен быть в формате |""\\ИмяДомена\ИмяПользователя"".'"), , @@ -3387,7 +3442,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Роль не найдена в метаданных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -3935,7 +3990,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПустойИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") ); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Запрос.УстановитьПараметр("НеуказанныйПользователь", СвойстваНеуказанногоПользователя().Ссылка); @@ -4098,8 +4153,8 @@ УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПустойИдентификаторПользователяИБ", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.УстановитьПараметр("ПустойИдентификаторПользователяИБ", + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Запрос.Текст = "ВЫБРАТЬ | Пользователи.Ссылка КАК Ссылка, @@ -4254,7 +4309,7 @@ КонецЕсли; Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.НастройкиВходаПользователей"); + Блокировка.Добавить("Константа.НастройкиВходаПользователей"); НачатьТранзакцию(); Попытка @@ -4341,6 +4396,19 @@ КонецПроцедуры +// Вызывается при переходе на версию конфигурации 3.0.2.124 и при начальном заполнении. +Процедура ЗаполнитьНаименованиеПредопределенныхГруппПользователей() Экспорт + + ГруппаПользователейОбъект = Справочники.ГруппыПользователей.ВсеПользователи.ПолучитьОбъект(); + ГруппаПользователейОбъект.Наименование = НСтр("ru='Все пользователи'"); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаПользователейОбъект); + + ГруппыВнешнихПользователейОбъект = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи.ПолучитьОбъект(); + ГруппыВнешнихПользователейОбъект.Наименование = НСтр("ru='Все внешние пользователи'"); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппыВнешнихПользователейОбъект); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Работа с настройками пользователей. @@ -4404,7 +4472,7 @@ Возврат; КонецЕсли; - ПустойУникальныйИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + ПустойУникальныйИдентификатор = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", ПустойУникальныйИдентификатор); @@ -4807,7 +4875,7 @@ Если РегистрироватьВЖурнале Тогда ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Ошибка входа в программу'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Пользователи.Ошибка входа в программу'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставление); КонецЕсли; @@ -5398,7 +5466,7 @@ КонецЕсли; ИмяСобытия = НСтр("ru = 'Пользователи.Ошибка при установке ролей пользователю ИБ'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); Если РежимПроверки = "ПриЗапуске" Тогда Если СтрЧислоСтрок(ДобавляемыеНедоступныеРоли) = 1 Тогда @@ -5530,7 +5598,7 @@ ПрочиеНастройкиПользователей = Новый Структура; ПриПолученииПрочихНастроекПользователя(СведенияОПользователеИсточнике, ПрочиеНастройкиПользователей); Ключи = Новый СписокЗначений; - МассивПрочихНастроек = Новый Массив; + Если ПрочиеНастройкиПользователей.Количество() <> 0 Тогда Для Каждого ПрочаяНастройка Из ПрочиеНастройкиПользователей Цикл @@ -5781,8 +5849,7 @@ ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.Пользователи") ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда - ЭлементДанных.ИдентификаторПользователяИБ = - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + ЭлементДанных.ИдентификаторПользователяИБ = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); ЭлементДанных.Подготовлен = Ложь; ЭлементДанных.СвойстваПользователяИБ = Новый ХранилищеЗначения(Неопределено); @@ -5919,7 +5986,7 @@ Если РегистрироватьВЖурнале Тогда ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Ошибка входа в программу'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.НайтиПоТипу(ТипЗнч(ТекущийПользователь)), ТекущийПользователь, @@ -5930,7 +5997,7 @@ Если РегистрироватьВЖурнале Тогда ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Ошибка обновления даты последней активности'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.НайтиПоТипу(ТипЗнч(ТекущийПользователь)), ТекущийПользователь, @@ -6122,10 +6189,8 @@ КонецЕсли; Если ПользовательОбъект.ЭтоНовый() Или ПользовательОбъект.Ссылка <> СтарыйПользователь.Ссылка Тогда - СтарыйПользователь.ИдентификаторПользователяИБ = - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); - СтарыйПользователь.ИдентификаторПользователяСервиса = - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + СтарыйПользователь.ИдентификаторПользователяИБ = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); + СтарыйПользователь.ИдентификаторПользователяСервиса = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); СтарыйПользователь.СвойстваПользователяИБ = Новый ХранилищеЗначения(Неопределено); СтарыйПользователь.Подготовлен = Ложь; СтарыйПользователь.ПометкаУдаления = Ложь; @@ -6183,7 +6248,7 @@ ИдентификаторПользователяИБ = СтарыйПользователь.ИдентификаторПользователяИБ; СоздатьНовогоПользователяИБ = НЕ ПараметрыОбработки.СтарыйПользовательИБСуществует; Иначе - ИдентификаторПользователяИБ = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + ИдентификаторПользователяИБ = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); СоздатьНовогоПользователяИБ = Истина; КонецЕсли; @@ -6278,12 +6343,16 @@ КонецЕсли; КонецЕсли; - Если ОписаниеПользователяИБ.Свойство("Пароль") - И ОписаниеПользователяИБ.Пароль <> Неопределено Тогда - + ПарольЗадан = ОписаниеПользователяИБ.Свойство("Пароль") + И ОписаниеПользователяИБ.Пароль <> Неопределено; + + ХешПароляЗадан = ОписаниеПользователяИБ.Свойство("СохраняемоеЗначениеПароля") + И ОписаниеПользователяИБ.СохраняемоеЗначениеПароля <> Неопределено; + + Если ПарольЗадан Или СоздатьНовогоПользователяИБ И Не ХешПароляЗадан Тогда ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("Пользователь", ПользовательОбъект); - ПараметрыВыполнения.Вставить("НовыйПароль", ОписаниеПользователяИБ.Пароль); + ПараметрыВыполнения.Вставить("НовыйПароль", ?(ПарольЗадан, ОписаниеПользователяИБ.Пароль, "")); ПараметрыВыполнения.Вставить("СтарыйПароль", Неопределено); ОписаниеПользователяИБ.Свойство("СтарыйПароль", ПараметрыВыполнения.СтарыйПароль); @@ -6334,7 +6403,7 @@ КонецПроцедуры -Функция УдалитьПользователяИБ(ПользовательОбъект, ПараметрыОбработки) +Процедура УдалитьПользователяИБ(ПользовательОбъект, ПараметрыОбработки) ОписаниеПользователяИБ = ПользовательОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ; СтарыйПользователь = ПараметрыОбработки.СтарыйПользователь; @@ -6357,7 +6426,7 @@ ОписаниеПользователяИБ.Вставить("РезультатДействия", "НеТребуетсяУдалениеПользовательИБ"); КонецЕсли; -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Для процедуры ЗавершитьОбработкуПользователяИБ. @@ -6672,7 +6741,7 @@ КонецЕсли; ЗаписьЖурналаРегистрации( НСтр("ru = 'Пользователи.Ошибка автоматического запрещения входа в программу'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)), Пользователь, @@ -6754,8 +6823,7 @@ ИдентификаторыРолей.Добавить(Строка.Роль); КонецЕсли; КонецЦикла; - ПрочитанныеРоли = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( - ИдентификаторыРолей, Истина); + ПрочитанныеРоли = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыРолей, Ложь); Для Каждого ОписаниеРоли Из ПрочитанныеРоли Цикл Если ТипЗнч(ОписаниеРоли.Значение) <> Тип("ОбъектМетаданных") Тогда @@ -6776,8 +6844,7 @@ Процедура НастроитьИнтерфейсРолейПриСозданииФормы(Параметры) - Форма = Параметры.Форма; - Элементы = Форма.Элементы; + Форма = Параметры.Форма; // Условное оформление недоступных ролей. ЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить(); @@ -6900,7 +6967,6 @@ Форма = Параметры.Форма; Элементы = Форма.Элементы; Роли = Форма.Роли; - КоллекцияРолей = Параметры.КоллекцияРолей; НазначениеРолей = Параметры.НазначениеРолей; СкрытьРольПолныеПрава = Параметры.Свойство("СкрытьРольПолныеПрава") @@ -7173,8 +7239,6 @@ ОбновитьПометкуВыбранныхРолей(Параметры, Роли.ПолучитьЭлементы()); - Модифицированность = Истина; - КонецПроцедуры Процедура ДобавитьУдалитьРоль(Параметры, Знач Роль, Знач Добавить) @@ -7266,7 +7330,8 @@ |ГДЕ | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор"; - Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Выгрузка = Запрос.Выполнить().Выгрузить(); Выгрузка.Индексы.Добавить("ИдентификаторПользователяИБ"); diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl index c76474a4c..fd3d0548b 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl index 800f5a4b3..9b8d19cb2 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Открывает форму ввода пароля пользователя сервиса. diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/Module.bsl deleted file mode 100644 index d482d59f8..000000000 --- a/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/Module.bsl +++ /dev/null @@ -1,21 +0,0 @@ -#Область СлужебныеПроцедурыИФункции - -// Проверяет, что объект информационной базы используется в качестве объекта авторизации -// какого-нибудь внешнего пользователя, кроме заданного внешнего пользователя (если задан). -// -Функция ОбъектАвторизацииИспользуется(Знач СсылкаНаОбъектАвторизации, - Знач СсылкаНаТекущегоВнешнегоПользователя, - НайденныйВнешнийПользователь = Неопределено, - ЕстьПравоДобавленияВнешнегоПользователя = Ложь, - ТекстОшибки = "") Экспорт - - Возврат ПользователиСлужебный.ОбъектАвторизацииИспользуется( - СсылкаНаОбъектАвторизации, - СсылкаНаТекущегоВнешнегоПользователя, - НайденныйВнешнийПользователь, - ЕстьПравоДобавленияВнешнегоПользователя, - ТекстОшибки); - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/ПользователиСлужебныйВызовСервера.mdo b/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/ПользователиСлужебныйВызовСервера.mdo deleted file mode 100644 index e24619de9..000000000 --- a/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/ПользователиСлужебныйВызовСервера.mdo +++ /dev/null @@ -1,10 +0,0 @@ - - - ПользователиСлужебныйВызовСервера - - ru - Пользователи служебный вызов сервера - - true - true - diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl index f9823e255..6d309442f 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Открывает форму, в которой пользователь может сменить пароль. @@ -60,8 +68,7 @@ КонецПроцедуры // Только для внутреннего использования. -// -Функция ВыбратьНазначение(ДанныеФормы, Заголовок, ВыбиратьПользователей = Истина, ЭтоОтбор = Ложь, ОписаниеОповещения = Неопределено) Экспорт +Процедура ВыбратьНазначение(ДанныеФормы, Заголовок, ВыбиратьПользователей = Истина, ЭтоОтбор = Ложь, ОписаниеОповещения = Неопределено) Экспорт ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ДанныеФормы", ДанныеФормы); @@ -79,7 +86,7 @@ ПараметрыФормы.Вставить("ЭтоОтбор", ЭтоОтбор); ОткрытьФорму("ОбщаяФорма.ВыборТиповПользователей", ПараметрыФормы,,,,, ОписаниеОповещенияОЗакрытии); -КонецФункции +КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// // Обработчики ожидания. diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl index c30eebcb7..aa9ac0f10 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает строки вида "день", "дня", "дней". @@ -24,40 +32,6 @@ КонецФункции -// Устанавливает доступность кнопки ЗаписатьИЗакрыть в формах, где -// требуется задать вопрос пользователю ПередЗаписью объекта на клиенте -// с установкой Отказ = Истина и повторным вызовом метода формы Записать. -// -// Чтобы процедуру можно было вызвать на клиенте, в форму должен быть добавлен -// реквизит ПравоРедактированиеОбъекта типа Произвольный. -// Этот реквизит инициализируется при первом вызове на стороне сервере (из обработчика -// события формы ПриСозданииНаСервере) и далее используется при вызове на клиенте, -// когда меняется свойство формы ТолькоПросмотр. -// -// Параметры: -// Форма - УправляемаяФорма - форма элемента справочника, документа, ... -// ОсновнойРеквизит - Строка - имя реквизита формы, содержащего структуру объекта. -// ИмяЭлемента - Строка - имя элемента формы с кнопкой ЗаписатьИЗакрыть. -// -Процедура УстановитьДоступностьКнопкиЗаписатьИЗакрыть(Форма, ОсновнойРеквизит = "Объект", ИмяЭлемента = "ФормаЗаписатьИЗакрыть") Экспорт - - Права = Новый Структура("ПравоРедактированияОбъекта"); - ЗаполнитьЗначенияСвойств(Права, Форма); - - Если Права.ПравоРедактированияОбъекта = Неопределено Тогда - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Права.ПравоРедактированияОбъекта = ПравоДоступа("Редактирование", Форма[ОсновнойРеквизит].Ссылка.Метаданные()); - ЗаполнитьЗначенияСвойств(Форма, Права); - #КонецЕсли - КонецЕсли; - - ДоступностьКнопки = Не Форма.ТолькоПросмотр И Права.ПравоРедактированияОбъекта; - Если Форма.Элементы[ИмяЭлемента].Доступность <> ДоступностьКнопки Тогда - Форма.Элементы[ИмяЭлемента].Доступность = ДоступностьКнопки; - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -150,7 +124,7 @@ КонецПроцедуры // Для форма элементов справочников Пользователи и ВнешниеПользователи. -Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен) Экспорт +Процедура УстановитьНаличиеПароля(Форма, ПарольУстановлен, АвторизованныйПользователь) Экспорт Элементы = Форма.Элементы; @@ -165,7 +139,7 @@ КонецЕсли; Если ПарольУстановлен - И Форма.Объект.Ссылка = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда + И Форма.Объект.Ссылка = АвторизованныйПользователь Тогда Элементы.СменитьПароль.Заголовок = НСтр("ru = 'Сменить пароль...'"); Иначе @@ -174,4 +148,30 @@ КонецПроцедуры +// Только для внутреннего использования. +Функция ТекущийПользователь(АвторизованныйПользователь) Экспорт + + Если ТипЗнч(АвторизованныйПользователь) <> Тип("СправочникСсылка.Пользователи") Тогда + ВызватьИсключение + НСтр("ru = 'Невозможно получить текущего пользователя + |в сеансе внешнего пользователя.'"); + КонецЕсли; + + Возврат АвторизованныйПользователь; + +КонецФункции + +// Только для внутреннего использования. +Функция ТекущийВнешнийПользователь(АвторизованныйПользователь) Экспорт + + Если ТипЗнч(АвторизованныйПользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ВызватьИсключение + НСтр("ru = 'Невозможно получить текущего внешнего пользователя + |в сеансе пользователя.'"); + КонецЕсли; + + Возврат АвторизованныйПользователь; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl index 2759a43f3..7f86decaa 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает имена и синонимы ролей. @@ -148,7 +156,7 @@ КонецФункции -// См. ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя. +// См. Пользователи.ЭтоСеансВнешнегоПользователя. Функция ЭтоСеансВнешнегоПользователя() Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда @@ -269,7 +277,7 @@ Дерево.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1000))); Если ПоПодсистемам Тогда - ЗаполнитьПодсистемыИРоли(Дерево.Строки, , НедоступныеРоли); + ЗаполнитьПодсистемыИРоли(Дерево.Строки, Неопределено, НедоступныеРоли); КонецЕсли; // Добавление ненайденных ролей. diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl index 14cbc6875..3645e1fbd 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Инициировать уведомление о всех имеющихся в МС поставляемых данных (за исключением тех, @@ -184,7 +192,7 @@ Исключение ЗаписьЖурналаРегистрации( НСтр("ru = 'Поставляемые данные.Удаление файлов в томе'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -335,7 +343,7 @@ СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), СсылкаИлиИдентификатор); ЗаписьЖурналаРегистрации( НСтр("ru = 'Поставляемые данные.Получение файла из тома'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.ПоставляемыеДанные, СсылкаИлиИдентификатор, diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl index 4ead169e8..44f27aa97 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl index 1002ab829..d60c97967 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Удаляет префикс информационной базы и префикс организации из переданной строки НомерОбъекта. diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl index 8da2cdb91..ec9793820 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обработчик события "При получении номера на печать". diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl index 6d404e347..47e493f3e 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обработчик события при изменении номера объекта. diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl index 2ea52c686..c5a316ba3 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Возвращает таблицу префиксообразующих реквизитов, заданных в переопределяемом модуле. diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl index 173e7a113..afa2a897a 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Префиксация объектов". // @@ -191,6 +199,13 @@ Функция ОписаниеМетаданныхИспользующихПрефиксы(РежимДиагностики = Ложь) Экспорт Результат = НовоеОписаниеМетаданныхИспользующихПрефиксы(); + + ЕстьПодсистемаРаботаВМоделиСервиса = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса = Неопределено; + + Если ЕстьПодсистемаРаботаВМоделиСервиса Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + КонецЕсли; // Наполнение таблицы метаданных. РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); @@ -215,6 +230,11 @@ МетаданныеИсточника = Метаданные.НайтиПоТипу(ТипИсточника); ПолноеИмяОбъекта = МетаданныеИсточника.ПолноеИмя(); + ЭтоРазделенныйОбъектМетаданных = Ложь; + Если ЕстьПодсистемаРаботаВМоделиСервиса Тогда + ЭтоРазделенныйОбъектМетаданных = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ПолноеИмяОбъекта); + КонецЕсли; + // Пропускаем уже добавленные объекты (в случае ошибочного назначения нескольких подписок), // а также объекты, соответствующие неразделенным данным, если это разделенный режим. Если Не РежимДиагностики Тогда @@ -223,13 +243,6 @@ Продолжить; ИначеЕсли РазделениеВключено Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - ЭтоРазделенныйОбъектМетаданных = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ПолноеИмяОбъекта); - Иначе - ЭтоРазделенныйОбъектМетаданных = Ложь; - КонецЕсли; - Если Не ЭтоРазделенныйОбъектМетаданных Тогда Продолжить; КонецЕсли; @@ -253,6 +266,8 @@ ОписаниеОбъекта.ИмяПодписки = Подписка.Имя; + ОписаниеОбъекта.ЭтоРазделенныйОбъектМетаданных = ЭтоРазделенныйОбъектМетаданных; + Характеристики = Новый Структура("ДлинаКода, ДлинаНомера", 0, 0); ЗаполнитьЗначенияСвойств(Характеристики, МетаданныеИсточника); @@ -506,6 +521,8 @@ Результат.Колонки.Добавить("ИмяПодписки", ОписаниеТиповСтрока); + Результат.Колонки.Добавить("ЭтоРазделенныйОбъектМетаданных", ОписаниеТиповБулево); + Возврат Результат; КонецФункции @@ -519,7 +536,7 @@ Функция СобытиеЖурналаРегистрацииПерепрефиксацияОбъектов() Возврат НСтр("ru = 'Префиксация объектов.Изменение префикса информационной базы'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl index 38fd0354a..c03aa900d 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Устанавливает префикс источника подписки в соответствии с префиксом организации. diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl index 7939963aa..e3dad972c 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Присоединенные файлы". // diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl index 94657c6c5..4475aaa40 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Присоединенные файлы". // diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиентСервер/Module.bsl index 1dceb81ef..1b411dae2 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Присоединенные файлы". // diff --git a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl index 78c825bc3..c90de5cba 100644 --- a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Запрашивает у пользователя диалог с подтверждением легальности полученного diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl index 19d941df9..fe45f671c 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl index 83624ad67..eb6c6c2b0 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Применяет ранее сохраненные в информационной базе запросы на использование внешних ресурсов. diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиентПереопределяемый/Module.bsl index ec4c7c57c..25c572194 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается при подтверждении запросов на использование внешних ресурсов. diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl index 386dababd..b8600406e 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается при проверке возможности использования профилей безопасности. diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl index 9761a6b3d..651b5b8c1 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Проверяет возможность настройки профилей безопасности из текущей информационной базы. @@ -137,7 +145,7 @@ Если Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда Результат.Тип = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); - Результат.Идентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + Результат.Идентификатор = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); Иначе @@ -164,11 +172,15 @@ // Функция ПредставлениеРазрешенийНаИспользованиеВнешнихРесурсов(Знач ТипПрограммногоМодуля, Знач ИдентификаторПрограммногоМодуля, Знач ТипВладельца, Знач ИдентификаторВладельца, Знач Разрешения) Экспорт + Представление = ""; + + // АПК:326-выкл Транзакция открывается, чтобы затем ее отменить, чтобы не устанавливать режим разделения. + НачатьТранзакцию(); - - Менеджер = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Создать(); - - Менеджер.ДобавитьЗапросРазрешенийНаИспользованиеВнешнихРесурсов( + Попытка + Менеджер = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Создать(); + + Менеджер.ДобавитьЗапросРазрешенийНаИспользованиеВнешнихРесурсов( ТипПрограммногоМодуля, ИдентификаторПрограммногоМодуля, ТипВладельца, @@ -176,12 +188,20 @@ Истина, Разрешения, Новый Массив()); + + Менеджер.РассчитатьПрименениеЗапросов(); + + Представление = Менеджер.Представление(Истина); + + ОтменитьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; - Менеджер.РассчитатьПрименениеЗапросов(); + // АПК:326-вкл - ОтменитьТранзакцию(); - - Возврат Менеджер.Представление(Истина); + Возврат Представление; КонецФункции @@ -378,14 +398,14 @@ Попытка УдалитьФайлы(КаталогРаспаковки); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа в безопасном режиме.Не удалось удалить временный файл'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа в безопасном режиме.Не удалось удалить временный файл'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Попытка УдалитьФайлы(ВременныйФайл); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа в безопасном режиме.Не удалось удалить временный файл'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа в безопасном режиме.Не удалось удалить временный файл'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -508,8 +528,9 @@ // ВключаяЗапросСозданияПрофиляИБ - Булево - включать в результат запрос на создание профиля безопасности // для текущей информационной базы. // -// Возвращаемое значение: Массив(УникальныйИдентификатор) - идентификаторы запросов для обновления разрешений -// конфигурации до требуемых в настоящий момент. +// Возвращаемое значение: +// Массив Из УникальныйИдентификатор - идентификаторы запросов для обновления разрешений +// конфигурации до требуемых в настоящий момент. // Функция ЗапросыОбновленияРазрешенийКонфигурации(Знач ВключаяЗапросСозданияПрофиляИБ = Истина) Экспорт @@ -521,6 +542,7 @@ Результат.Добавить(ЗапросСозданияПрофиляБезопасности(Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка())); КонецЕсли; + ЗаполнитьРазрешенияНаЦентрЗащитыОбновлений(Результат); ИнтеграцияПодсистемБСП.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(Результат); РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(Результат); @@ -534,8 +556,18 @@ КонецФункции +Процедура ЗаполнитьРазрешенияНаЦентрЗащитыОбновлений(ЗапросыРазрешений) + + Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("HTTPS", "1cv8update.com",, + НСтр("ru = 'Сайт ""Центр защиты обновлений"" (ЦЗО) для проверки правомерности использования и обновления программного продукта.'")); + Разрешения = Новый Массив; + Разрешения.Добавить(Разрешение); + ЗапросыРазрешений.Добавить(РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения)); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// Внешние модули +// Прочее. // // Возвращает программный модуль, выполняющий функции менеджера внешнего модуля. @@ -547,8 +579,6 @@ // Функция МенеджерВнешнегоМодуля(Знач ВнешнийМодуль) Экспорт - Контейнеры = Новый Массив(); - Менеджеры = МенеджерыВнешнихМодулей(); Для Каждого Менеджер Из Менеджеры Цикл КонтейнерыМенеджера = Менеджер.КонтейнерыВнешнихМодулей(); @@ -568,10 +598,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Контроль записи служебных данных. -// - // Процедура должна вызываться при записи любых служебных данных, изменение которых должно быть // недопустимо при установленном безопасном режиме. // @@ -588,10 +614,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Использование профилей безопасности. -// - // Проверяет, требуется ли использовать интерактивный режим запроса разрешений. // // Возвращаемое значение: Булево. @@ -610,10 +632,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Внешние модули -// - // Возвращает массив менеджеров справочников, которые являются контейнерами внешних модулей. // // Возвращаемое значение: Массив(СправочникМенеджер). diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl index bc9f29457..33a133d18 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает имя общего реквизита, который является разделителем основных данных. @@ -76,7 +84,7 @@ // блокировку которой требуется проверить. // // Возвращаемое значение: -// Булево - Истина область данных заблокирована, иначе нет. +// Булево - если Истина, область данных заблокирована, иначе нет. // Функция ОбластьДанныхЗаблокирована(Знач ОбластьДанных) Экспорт @@ -121,8 +129,8 @@ // при необходимости заполняет демонстрационными данными, устанавливает новый статус в регистре ОбластиДанных. // // Параметры: -// ОбластьДанных - Число - значение разделителя области данных, которую необходимо подготовить к использованию, -// ИДФайлаВыгрузки - УникальныйИдентификатор - идентификатор файла, +// ОбластьДанных - Число - значение разделителя области данных, которую необходимо подготовить к использованию. +// ИДФайлаВыгрузки - УникальныйИдентификатор - идентификатор файла. // Вариант - Строка - вариант начальных данных. // Процедура ПодготовитьОбластьДанныхКИспользованию(Знач ОбластьДанных, Знач ИДФайлаВыгрузки, @@ -247,7 +255,7 @@ // дальнейшего использования области, необходимо использовать процедуру ОчиститьДанныеОбласти(). // // Параметры: -// ОбластьДанных - Число - значение разделителя области данных которую требуется очистить, +// ОбластьДанных - Число - значение разделителя области данных которую требуется очистить. // При вызове процедуры разделение данных уже должно быть переключено в эту область. // УдалитьПользователей - Булево - флаг необходимости удаления пользователей информационной // базы для данной области данных. @@ -374,7 +382,8 @@ ИначеЕсли ЭтоПолноеИмяРегистра(ПолноеИмяОбъектаМетаданных) - ИЛИ ЭтоПолноеИмяПерерасчета(ПолноеИмяОбъектаМетаданных) Тогда + ИЛИ ЭтоПолноеИмяПерерасчета(ПолноеИмяОбъектаМетаданных) + Или ЭтоПолноеИмяПоследовательности(ПолноеИмяОбъектаМетаданных) Тогда ЭтоРегистрНакопления = ЭтоПолноеИмяРегистраНакопления(ПолноеИмяОбъектаМетаданных); ЭтоРегистрБухгалтерии = ЭтоПолноеИмяРегистраБухгалтерии(ПолноеИмяОбъектаМетаданных); @@ -523,6 +532,10 @@ КонецЕсли; + + // Очистка истории. + ИсторияРаботыПользователя.Очистить(); + // Настройки Хранилища = Новый Массив; Хранилища.Добавить(ХранилищеВариантовОтчетов); @@ -530,6 +543,7 @@ Хранилища.Добавить(ХранилищеОбщихНастроек); Хранилища.Добавить(ХранилищеПользовательскихНастроекОтчетов); Хранилища.Добавить(ХранилищеСистемныхНастроек); + Хранилища.Добавить(ХранилищеПользовательскихНастроекДинамическихСписков); Для каждого Хранилище Из Хранилища Цикл @@ -548,7 +562,7 @@ // Процедура одноименного регламентного задания. // Находит все области данных со статусами, требующими обработки -// прикладным приложением и при необходимости планирует запуск ФЗ +// прикладным приложением, и при необходимости планирует запуск ФЗ // по их обслуживанию. // Процедура ОбслуживаниеОбластейДанных() Экспорт @@ -581,8 +595,6 @@ Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); - Выполняется = 0; - Пока Выборка.Следующий() Цикл Ключ = СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( @@ -702,8 +714,8 @@ // Устанавливает разделение сеанса. // // Параметры: -// Использование - Булево - Использование разделителя ОбластьДанных в сеансе. -// ОбластьДанных - Число - Значение разделителя ОбластьДанных. +// Использование - Булево - использование разделителя ОбластьДанных в сеансе. +// ОбластьДанных - Число - значение разделителя ОбластьДанных. // Процедура УстановитьРазделениеСеанса(Знач Использование = Неопределено, Знач ОбластьДанных = Неопределено) Экспорт @@ -726,7 +738,7 @@ КонецПроцедуры // Возвращает значение разделителя текущей области данных. -// В случае если значение не установлено выдается ошибка. +// В случае если значение не установлено, выдается ошибка. // // Возвращаемое значение: // Число - значение разделителя текущей области данных. @@ -749,7 +761,7 @@ // Возвращает флаг использования разделителя ОбластьДанных для текущего сеанса. // // Возвращаемое значение: -// Булево - Истина разделение используется, иначе нет. +// Булево - если Истина, разделение используется, иначе нет. // Функция ИспользованиеРазделителяСеанса() Экспорт @@ -783,7 +795,7 @@ // Возвращает таблицу описания параметров ИБ. // // Возвращаемое значение: -// ТаблицаЗначений - Параметры ИБ. Содержит колонки: +// ТаблицаЗначений - параметры ИБ. Содержит колонки: // * Имя - Строка - имя параметра. // * Описание - Строка - описание параметра для отображения в пользовательском интерфейсе. // * ЗапретЧтения - Булево - признак невозможности считывания параметра ИБ. Может быть установлен, например, для @@ -804,7 +816,7 @@ КонецФункции -// Получает имя приложения, так как его задал Абонент. +// Получает имя приложения - так, как его задал абонент. // // Возвращаемое значение: // Строка - имя приложения. @@ -839,7 +851,7 @@ // ЗначениеСтруктурногоТипа - Массив, Структура, Соответствие - сериализуемый объект. // // Возвращаемое значение: -// Строка - Сериализованное значение объекта структурного типа. +// Строка - сериализованное значение объекта структурного типа. // Функция ЗаписатьСтруктурныйОбъектXDTOВСтроку(Знач ЗначениеСтруктурногоТипа) Экспорт @@ -891,7 +903,7 @@ // пояс которой требуется получить. // // Возвращаемое значение: -// Строка, Неопределено - часовой пояс области данных, Неопределено +// Строка, Неопределено - часовой пояс области данных, Неопределено, // если часовой пояс не задан. // Функция ПолучитьЧасовойПоясОбластиДанных(Знач ОбластьДанных) Экспорт @@ -945,7 +957,7 @@ КонецФункции -// Обрабатывает информация об ошибке полученную из web-сервиса. +// Обрабатывает информацию об ошибке, полученную из web-сервиса. // В случае если передана не пустая информация об ошибке, записывает // подробное представление ошибки в журнал регистрации и вызывает // исключение с текстом краткого представления об ошибке. @@ -967,11 +979,11 @@ КонецЕсли; ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1.Ошибка вызова операции web-сервиса'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = '%1.Ошибка вызова операции web-сервиса'", ОбщегоНазначения.КодОсновногоЯзыка()), ИмяПодсистемы); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при вызове операции %1 веб-сервиса %2: %3'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Ошибка при вызове операции %1 веб-сервиса %2: %3'", ОбщегоНазначения.КодОсновногоЯзыка()), ИмяОперации, ИмяВебСервиса, ИнформацияОбОшибке.DetailErrorDescription); @@ -1091,7 +1103,7 @@ // ИДФайла - УникальныйИдентификатор - идентификатор файла в файловом хранилище МС. // // Возвращаемое значение: -// Строка - Полное имя извлеченного файла. +// Строка - полное имя извлеченного файла. // Функция ПолучитьФайлИзХранилищаМенеджераСервиса(Знач ИДФайла) Экспорт @@ -1168,7 +1180,7 @@ // АдресДанныеФайл - Строка - адрес файла во временном хранилище, // - ДвоичныеДанные - двоичные данные файла, // - Файл - файл. -// ИмяФайла - Строка - Хранимое имя файла. +// ИмяФайла - Строка - хранимое имя файла. // // Возвращаемое значение: // УникальныйИдентификатор - Идентификатор файла в хранилище. @@ -1232,7 +1244,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если документ. +// Булево - Истина, если документ. // Функция ЭтоПолноеИмяДокумента(Знач ПолноеИмя) Экспорт @@ -1248,7 +1260,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если справочник. +// Булево - Истина, если справочник. // Функция ЭтоПолноеИмяСправочника(Знач ПолноеИмя) Экспорт @@ -1264,7 +1276,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если перечисление. +// Булево - Истина, если перечисление. // Функция ЭтоПолноеИмяПеречисления(Знач ПолноеИмя) Экспорт @@ -1280,7 +1292,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если план обмена. +// Булево - Истина, если план обмена. // Функция ЭтоПолноеИмяПланаОбмена(Знач ПолноеИмя) Экспорт @@ -1312,7 +1324,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если бизнес-процесс. +// Булево - Истина, если бизнес-процесс. // Функция ЭтоПолноеИмяБизнесПроцесса(Знач ПолноеИмя) Экспорт @@ -1328,7 +1340,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если задача. +// Булево - Истина, если задача. // Функция ЭтоПолноеИмяЗадачи(Знач ПолноеИмя) Экспорт @@ -1344,7 +1356,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если план счетов. +// Булево - Истина, если план счетов. // Функция ЭтоПолноеИмяПланаСчетов(Знач ПолноеИмя) Экспорт @@ -1360,7 +1372,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если план видов расчета. +// Булево - Истина, если план видов расчета. // Функция ЭтоПолноеИмяПланаВидовРасчета(Знач ПолноеИмя) Экспорт @@ -1394,7 +1406,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если регистр накопления. +// Булево - Истина, если регистр накопления. // Функция ЭтоПолноеИмяРегистраНакопления(Знач ПолноеИмя) Экспорт @@ -1410,7 +1422,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если регистр бухгалтерии. +// Булево - Истина, если регистр бухгалтерии. // Функция ЭтоПолноеИмяРегистраБухгалтерии(Знач ПолноеИмя) Экспорт @@ -1426,7 +1438,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если регистр расчета. +// Булево - Истина, если регистр расчета. // Функция ЭтоПолноеИмяРегистраРасчета(Знач ПолноеИмя) Экспорт @@ -1463,7 +1475,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если константа. +// Булево - Истина, если константа. // Функция ЭтоПолноеИмяКонстанты(Знач ПолноеИмя) Экспорт @@ -1481,7 +1493,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если журнал документов. +// Булево - Истина, если журнал документов. // Функция ЭтоПолноеИмяЖурналаДокументов(Знач ПолноеИмя) Экспорт @@ -1499,7 +1511,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если последовательность. +// Булево - Истина, если последовательность. // Функция ЭтоПолноеИмяПоследовательности(Знач ПолноеИмя) Экспорт @@ -1517,7 +1529,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если регламентное задание. +// Булево - Истина, если регламентное задание. // Функция ЭтоПолноеИмяРегламентногоЗадания(Знач ПолноеИмя) Экспорт @@ -1534,7 +1546,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если регистр. +// Булево - Истина, если регистр. // Функция ЭтоПолноеИмяРегистра(Знач ПолноеИмя) Экспорт @@ -1552,7 +1564,7 @@ // принадлежность к заданному типу. // // Возвращаемое значение: -// Булево - Истина если ссылочный тип. +// Булево - Истина, если ссылочный тип. // Функция ЭтоПолноеИмяОбъектаСсылочногоТипа(Знач ПолноеИмя) Экспорт @@ -1610,7 +1622,7 @@ // Функция СобытиеЖурналаРегистрацииКопированиеОбластиДанных() Экспорт - Возврат НСтр("ru = 'Работа в модели сервиса.Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Работа в модели сервиса.Копирование области данных'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -1621,7 +1633,7 @@ // Функция СобытиеЖурналаРегистрацииБлокировкаОбластиДанных() Экспорт - Возврат НСтр("ru = 'Работа в модели сервиса.Блокировка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Работа в модели сервиса.Блокировка области данных'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -1632,7 +1644,7 @@ // Функция СобытиеЖурналаРегистрацииПодготовкаОбластиДанных() Экспорт - Возврат НСтр("ru = 'Работа в модели сервиса.Подготовка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Работа в модели сервиса.Подготовка области данных'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -1643,7 +1655,7 @@ // Функция СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища() Экспорт - Возврат НСтр("ru = 'Работа в модели сервиса.Получение файла из хранилища'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Работа в модели сервиса.Получение файла из хранилища'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -1654,7 +1666,7 @@ // Функция СобытиеЖурналаРегистрацииДобавлениеФайлаОбменЧерезФС() Экспорт - Возврат НСтр("ru = 'Работа в модели сервиса.Добавление файла.Обмен через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Работа в модели сервиса.Добавление файла.Обмен через ФС'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -1665,7 +1677,7 @@ // Функция СобытиеЖурналаРегистрацииДобавлениеФайлаОбменНеЧерезФС() Экспорт - Возврат НСтр("ru = 'Работа в модели сервиса.Добавление файла.Обмен не через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Работа в модели сервиса.Добавление файла.Обмен не через ФС'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -1676,7 +1688,7 @@ // Функция СобытиеЖурналаРегистрацииУдалениеВременногоФайла() Экспорт - Возврат НСтр("ru = 'Работа в модели сервиса.Удаление временного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Работа в модели сервиса.Удаление временного файла'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -1752,7 +1764,7 @@ // * UserName - Строка - имя пользователя сервиса, // * Password - Строка - пароль пользователя сервиса, // ПутьВместоДанных - Булево - что возвращать, -// ПроверятьСуществование - Булево - Проверять ли существования файла в случае ошибки его получения. +// ПроверятьСуществование - Булево - проверять ли существование файла в случае ошибки его получения. // // Возвращаемое значение: // Структура - описание файла: @@ -1804,7 +1816,7 @@ КонецЕсли; ЗаписатьВЖурналСобытиеФайловогоХранилища( - НСтр("ru = 'Извлечение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Извлечение'", ОбщегоНазначения.КодОсновногоЯзыка()), ИдентификаторФайла, РазмерПолученногоФайла, ТекущаяУниверсальнаяДата() - НачалоВыполнения, @@ -1823,7 +1835,6 @@ КонецЕсли; // ОбменЧерезФС КоличествоЧастей = Неопределено; - ИмяФайлаВСправочнике = Неопределено; РазмерБлокаПередачиФайла = ПолучитьРазмерБлокаПередачиФайла(); Попытка Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда @@ -1874,7 +1885,7 @@ Исключение ФайлОбъединен = Ложь; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции объединения файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции объединения файлов'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -1889,7 +1900,7 @@ Исключение ПрочитанZipФайл = Ложь; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции чтения zip файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции чтения zip файла'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -1951,7 +1962,7 @@ Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -1982,7 +1993,7 @@ КонецЕсли; ЗаписатьВЖурналСобытиеФайловогоХранилища( - НСтр("ru = 'Извлечение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Извлечение'", ОбщегоНазначения.КодОсновногоЯзыка()), ИдентификаторФайла, РазмерПолученногоФайла, ТекущаяУниверсальнаяДата() - НачалоВыполнения, @@ -1996,7 +2007,7 @@ // Файл должна удалять вызывающая сторона. // // Возвращаемое значение: -// Строка - Имя пробного файла без пути. +// Строка - имя пробного файла без пути. // Функция ЗаписатьПробныйФайл() Экспорт @@ -2110,7 +2121,7 @@ // Для общего модуля РаботаВМоделиСервисаПовтИсп. -// Определяет, сеанс запущен с разделителями или без. +// Определяет, запущен сеанс с разделителями или без. // // Возвращаемое значение: // Булево - Истина, если сеанс запущен без разделителей. @@ -2240,7 +2251,7 @@ // Возвращает состав общего реквизита с заданным именем. // // Параметры: -// Имя - Строка - Имя общего реквизита. +// Имя - Строка - имя общего реквизита. // // Возвращаемое значение: // СоставОбщегоРеквизита - список объектов метаданных, в которые входит общий реквизит. @@ -2251,7 +2262,6 @@ КонецФункции - #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать метод платформы УстановитьМонопольныйРежим(Истина). @@ -2334,7 +2344,7 @@ КонецЕсли; ТекстСеансы = ТекстСеансы + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 (сеанс - %2)'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = '%1 (сеанс - %2)'", ОбщегоНазначения.КодОсновногоЯзыка()), КонфликтующийСеанс.Пользователь.Имя, Формат(КонфликтующийСеанс.НомерСеанса, "ЧГ=0")); @@ -2342,7 +2352,7 @@ ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Операция не может быть выполнена, т.к. в приложении работают другие пользователи: %1'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), ТекстСеансы); ВызватьИсключение ТекстИсключения; @@ -3158,7 +3168,7 @@ Результат = ОписаниеПрокси.Прокси.ReadFileFromFS(ЦелевойФайл.Имя, СвойстваФайла.Имя); РазмерИсходногоФайла = ЦелевойФайл.Размер(); ЗаписатьВЖурналСобытиеФайловогоХранилища( - НСтр("ru = 'Помещение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Помещение'", ОбщегоНазначения.КодОсновногоЯзыка()), Результат, РазмерИсходногоФайла, ТекущаяУниверсальнаяДата() - НачалоВыполнения, @@ -3180,7 +3190,7 @@ Результат = ОписаниеПрокси.Прокси.ReadFileFromFS(ЦелевойФайл.Имя, СвойстваФайла.Имя); РазмерИсходногоФайла = ЦелевойФайл.Размер(); ЗаписатьВЖурналСобытиеФайловогоХранилища( - НСтр("ru = 'Помещение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Помещение'", ОбщегоНазначения.КодОсновногоЯзыка()), Результат, РазмерИсходногоФайла, ТекущаяУниверсальнаяДата() - НачалоВыполнения, @@ -3368,7 +3378,7 @@ КонецЕсли; ЗаписатьВЖурналСобытиеФайловогоХранилища( - НСтр("ru = 'Помещение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Помещение'", ОбщегоНазначения.КодОсновногоЯзыка()), Результат, РазмерИсходногоФайла, ТекущаяУниверсальнаяДата() - НачалоВыполнения, @@ -3598,7 +3608,7 @@ КонецЕсли; ЗаписьЖурналаРегистрации( - НСтр("ru = 'Хранилище файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + "." + Событие, + НСтр("ru = 'Хранилище файлов'", ОбщегоНазначения.КодОсновногоЯзыка()) + "." + Событие, УровеньЖурналаРегистрации.Информация, , , @@ -4102,7 +4112,7 @@ Если РазделениеВключено() И ДоступноИспользованиеРазделенныхДанных() Тогда - ПредставлениеИсключения = НСтр("ru = 'Нарушение прав доступа.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ПредставлениеИсключения = НСтр("ru = 'Нарушение прав доступа.'", ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации( ПредставлениеИсключения, diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl index 02a83103f..1bce3ca8f 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -12,7 +20,7 @@ Параметры.Отказ = Истина; Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( "ПоказатьПредупреждениеИПродолжить", - СтандартныеПодсистемыКлиент.ЭтотОбъект, + СтандартныеПодсистемыКлиент, ПараметрыКлиента.ОбластьДанныхЗаблокирована); Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl index 1c822566f..724612b31 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается при удалении области данных. @@ -38,7 +46,7 @@ // // Параметры: // ЗначенияПараметров - Структура - значения параметров которые требуется установить. -// В случае если значение параметра устанавливается в данной процедуре из структуры необходимо удалить соответствую +// В случае если значение параметра устанавливается в данной процедуре из структуры необходимо удалить соответствующую // пару КлючИЗначение. // Процедура ПриУстановкеЗначенийПараметровИБ(Знач ЗначенияПараметров) Экспорт diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl index 4664b3fc1..0c49f66bc 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает признак наличия в конфигурации общих реквизитов-разделителей. @@ -300,7 +308,7 @@ ШаблонСообщения = НСтр("ru = 'В последовательность %1 не включено ни одного документа.'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, МетаданныеПоследовательности.Имя); ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение разделенных объектов метаданных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, МетаданныеПоследовательности, , ТекстСообщения); Результат.Вставить(МетаданныеПоследовательности.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); @@ -334,7 +342,7 @@ ШаблонСообщения = НСтр("ru = 'В журнал %1 не включено ни одного документа.'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, МетаданныеЖурналаДокументов.Имя); ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение разделенных объектов метаданных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, МетаданныеЖурналаДокументов, , ТекстСообщения); Результат.Вставить(МетаданныеЖурналаДокументов.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); diff --git a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl index aa54f5f36..ae7a5e458 100644 --- a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает наименование субъекта РФ для адреса или пустую строку, если субъект не определен. @@ -70,29 +78,30 @@ КонецФункции -// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР. +// Возвращает сведения об адресе в виде отдельных частей адреса и различных кодов (код региона, ОКТМО и др.). // // Параметры: -// Адреса - Строка - адрес во внутреннем формате JSON или в XML, соответствующем XDTO пакету Адрес. -// - ОбъектXDTO - XDTO объект, соответствующий XDTO пакету Адрес. +// Адреса - Массив - адреса во внутреннем формате JSON или в XML, соответствующем XDTO пакету Адрес +// или XDTO объектов, соответствующий XDTO пакету Адрес. // ДополнительныеПараметры - Структура - для уточнения возвращаемого значения: // * БезПредставлений - Булево - Если Истина, то поле Представление будет отсутствовать. По умолчанию, Ложь. // * КодыАдреса - Булево - Если Истина, то результат содержит поля ИдентификаторАдресногоОбъекта, ИдентификаторДома -// и структура с кодами адреса(идентификаторы, ОКТМО, ОКАТО и др). -// Подробнее см. в возвращаемом значении структуры Идентификаторы и ДополнительныеКоды. По умолчанию, Ложь. -// Если в адресе отсутствуют идентификаторы и в программу не загружены идентификаторы адресных объектов адреса, -// то получение идентификаторов может инициировать http запрос к веб-сервису 1С orgaddress. +// и структура с кодами адреса(Идентификаторы, ДополнительныеКоды, КодыКЛАДР). +// Подробнее см. в возвращаемом значении структуры Идентификаторы и +// ДополнительныеКоды. По умолчанию, Ложь. Если в адресе отсутствуют идентификаторы +// и в программу не загружены идентификаторы адресных объектов адреса, то получение +// идентификаторов может инициировать http запрос к веб-сервису 1С orgaddress. // * КодыКЛАДР - Булево - Если Истина, то возвращается структура КодыКЛАДР. По умолчанию, Ложь. // Если в адресе отсутствуют коды и в программу не загружены адресные объекты адреса, // Получение кодов может инициировать http запрос к веб-сервису 1С orgaddress. -// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращается полное наименование адресных объектов. +// * ПолноеНаименованиеСокращений - Булево - Если Истина, то возвращается полное наименование адресных объектов. // * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. // * ПроверитьАдрес - Булево - Если Истина, то адрес будет проверен на соответствие ФИАС. По умолчанию, Ложь. // Если в программу не загружены проверяемые адресные объекты, // то проверка адреса может инициировать http запрос к веб-сервису 1С orgaddress. // // Возвращаемое значение: -// Массив - Содержит массив структур, содержимое структуры см. описание функции СведенияОбАдресе. +// Массив - Содержит массив структур, содержимое структуры см. описание в функции СведенияОбАдресе. // Функция СведенияОбАдресах(Адреса, ДополнительныеПараметры = Неопределено) Экспорт Возврат СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры); @@ -101,19 +110,21 @@ // Возвращает сведения об адресе в виде отдельных частей адреса и различных кодов (код региона, ОКТМО и др.). // // Параметры: -// Адрес - Строка - адрес во внутреннем формате JSON или в XML, соответствующем XDTO пакету Адрес. +// Адрес - Строка - Адрес во внутреннем формате JSON или в XML, соответствующем XDTO пакету Адрес. // - ОбъектXDTO - XDTO объект, соответствующий XDTO пакету Адрес. +// - Неопределено - Конструктор, для получения пустых полей адреса. // ДополнительныеПараметры - Структура - для уточнения возвращаемого значения: // * БезПредставлений - Булево - Если Истина, то поле Представление будет отсутствовать. По умолчанию, Ложь. // * КодыАдреса - Булево - Если Истина, то результат содержит поля ИдентификаторАдресногоОбъекта, ИдентификаторДома // и структура с кодами адреса(Идентификаторы, ДополнительныеКоды, КодыКЛАДР). -// Подробнее см. в возвращаемом значении структуры Идентификаторы и ДополнительныеКоды. По умолчанию, Ложь. -// Если в адресе отсутствуют идентификаторы и в программу не загружены идентификаторы адресных объектов адреса, -// то получение идентификаторов может инициировать http запрос к веб-сервису 1С orgaddress. +// Подробнее см. в возвращаемом значении структуры Идентификаторы и +// ДополнительныеКоды. По умолчанию, Ложь. Если в адресе отсутствуют идентификаторы +// и в программу не загружены идентификаторы адресных объектов адреса, то получение +// идентификаторов может инициировать http запрос к веб-сервису 1С orgaddress. // * КодыКЛАДР - Булево - Если Истина, то возвращается структура КодыКЛАДР. По умолчанию, Ложь. // Если в адресе отсутствуют коды и в программу не загружены адресные объекты адреса, // Получение кодов может инициировать http запрос к веб-сервису 1С orgaddress. -// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращается полное наименование адресных объектов. +// * ПолноеНаименованиеСокращений - Булево - Если Истина, то возвращается полное наименование адресных объектов. // * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. // * ПроверитьАдрес - Булево - Если Истина, то адрес будет проверен на соответствие ФИАС. По умолчанию, Ложь. // Если в программу не загружены проверяемые адресные объекты, @@ -126,7 +137,7 @@ // * ТипАдреса - Строка - основной тип адреса (только для адресов РФ). // Варианты: "Муниципальный", "Административно-территориальный". // * Страна - Строка - текстовое представление страны. -// * КодСтраны - Строка - код страны по ОКСМ (может быть пустой, если поле страна не заполнена). +// * КодСтраны - Строка - код страны по ОКСМ. // * Индекс - Строка - почтовый индекс. // * КодРегиона - Строка - код региона РФ. // * Регион - Строка - текстовое представление региона РФ. @@ -166,14 +177,16 @@ // Поле отсутствует, если дополнительный параметр КодыАдреса равен Ложь. // * ИдентификаторДома - УникальныйИдентификатор - Идентификационный код дома(строения) адресного объекта. // Поле отсутствует, если дополнительный параметр КодыАдреса равен Ложь. -// * Идентификаторы - Структура - Идентификаторы адресных объектов адреса, если установлен параметр КодыАдреса или КодыКЛАДР. -// Поле отсутствует, если дополнительный параметр КодыАдреса или КодыКЛАДР равен Ложь. +// * Идентификаторы - Структура - Идентификаторы адресных объектов адреса, если установлен параметр КодыАдреса +// или КодыКЛАДР. Поле отсутствует, если дополнительный параметр КодыАдреса или +// КодыКЛАДР равен Ложь. // ** Регион - УникальныйИдентификатор - идентификатор региона. // ** Район - УникальныйИдентификатор - идентификатор района. // ** МуниципальныйРайон - УникальныйИдентификатор - идентификатор муниципального района. // ** Город - УникальныйИдентификатор - идентификатор города. // ** Поселение - УникальныйИдентификатор - идентификатор поселения. // ** ВнутригородскойРайон - УникальныйИдентификатор - идентификатор внутригородского района. +// ** НаселенныйПункт - УникальныйИдентификатор - идентификатор населенного пункта. // ** Территория - УникальныйИдентификатор - идентификатор территории. // ** Улица - УникальныйИдентификатор - идентификатор улица. // * КодыКЛАДР - Структура - Коды КЛАДР, если установлен параметр КодыКЛАДР в Истина. @@ -209,7 +222,7 @@ Возврат УправлениеКонтактнойИнформациейСлужебный.ПроверитьАдрес(Адрес, ПараметрыПроверки); КонецФункции -// Преобразует структуру, описывающую адрес, во внутренний формат хранения контактной информации JSON. +// Преобразует структуру описывающую адрес во внутренний формат хранения контактной информации JSON. // // Параметры: // ПоляАдреса - Структура - Адрес с разбивкой по полям. Список полей см. РаботаСАдресамиКлиентСервер.ПоляАдреса. @@ -506,7 +519,7 @@ Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Данные) Тогда СтарыйФормат = Обработки.РасширенныйВводКонтактнойИнформации.КонтактнаяИнформацияВСтаруюСтруктуру(Данные, СокращенныйСоставПолей); - Возврат РаботаСАдресамиКлиентСервер.ПреобразоватьСписокПолейВСтроку(СтарыйФормат.ЗначенияПолей, Ложь); + Возврат ПреобразоватьСписокПолейВСтроку(СтарыйФормат.ЗначенияПолей, Ложь); КонецЕсли; Возврат Данные; @@ -552,7 +565,7 @@ Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Данные) Тогда // Новый формат КИ - Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей( + Возврат УправлениеКонтактнойИнформациейСлужебный.СтруктураЗначенийПолей( ПредыдущийФорматКонтактнойИнформацииXML(Данные)); КонецЕсли; @@ -573,7 +586,7 @@ // Возвращаем полную структуру для данного вида с заполненными полями. Результат = РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу(ТипКонтактнойИнформации); - СтруктураЗначенийПолей = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей(Данные, ВидКонтактнойИнформации); + СтруктураЗначенийПолей = УправлениеКонтактнойИнформациейСлужебный.СтруктураЗначенийПолей(Данные, ВидКонтактнойИнформации); Если ТипКонтактнойИнформации <> Неопределено Тогда ЗаполнитьЗначенияСвойств(Результат, СтруктураЗначенийПолей); Возврат Результат; @@ -618,7 +631,7 @@ Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Данные) Тогда // Новый формат КИ - Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей( + Результат = УправлениеКонтактнойИнформациейСлужебный.СтруктураЗначенийПолей( ПредыдущийФорматКонтактнойИнформацииXML(Данные)); Представление = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(Данные); @@ -730,7 +743,7 @@ Функция ДополнительныеПравилаПреобразования() Экспорт КодыДополнительныхАдресныхЭлементов = Новый ТекстовыйДокумент; - Для Каждого ДополнительныйАдресныйЭлемент Из РаботаСАдресамиКлиентСервер.ТипыОбъектовАдресацииАдресаРФ() Цикл + Для Каждого ДополнительныйАдресныйЭлемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл КодыДополнительныхАдресныхЭлементов.ДобавитьСтроку("" + ДополнительныйАдресныйЭлемент.Код + ""); КодыДополнительныхАдресныхЭлементов.ДобавитьСтроку("" + ДополнительныйАдресныйЭлемент.Код + ""); КонецЦикла; @@ -796,7 +809,7 @@ | | | - | " + РаботаСАдресамиКлиентСервер.КодСериализацииПочтовогоИндекса() + " + | " + КодСериализацииПочтовогоИндекса() + " | | | @@ -875,11 +888,216 @@ #Область СлужебныеПроцедурыИФункции +// Возвращает XPath для района. +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathРайона() Экспорт + + Возврат "СвРайМО/Район"; + +КонецФункции + +// Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. +// +// Возвращаемое значение: +// Массив - содержит структуры - описания. +// +Функция ТипыОбъектовАдресацииАдресаРФ() + + Результат = Новый Массив; + + // Код, Наименование, Тип, Порядок, КодФИАС + // Тип: 1 - владение, 2 - здание, 3 - помещение. + + Результат.Добавить(СтрокаОбъектаАдресации("1010", НСтр("ru = 'Дом'"), 1, 1, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1020", НСтр("ru = 'Владение'"), 1, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1030", НСтр("ru = 'Домовладение'"), 1, 3, 3)); + + Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("1090", НСтр("ru = 'Литер'"), 2, 6, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); + + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'Квартира'"), 3, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'Офис'"), 3, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); + Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); + Результат.Добавить(СтрокаОбъектаАдресации("2060", НСтр("ru = 'Этаж'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2070", НСтр("ru = 'А/я'"), 3, 7)); + Результат.Добавить(СтрокаОбъектаАдресации("2080", НСтр("ru = 'В/ч'"), 3, 8)); + Результат.Добавить(СтрокаОбъектаАдресации("2090", НСтр("ru = 'П/о'"), 3, 9)); + // Наши сокращения для поддержки обратной совместимости при парсинге. + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); + // Ввод помещения вручную. + Результат.Добавить(СтрокаОбъектаАдресации("2000", НСтр("ru = ''"), 3, 0)); + + // Уточняющие объекты + Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10200000", НСтр("ru = 'Адресная точка'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10300000", НСтр("ru = 'Садовое товарищество'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10400000", НСтр("ru = 'Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10500000", НСтр("ru = 'Промышленная зона'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10600000", НСтр("ru = 'Гаражно-строительный кооператив'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10700000", НСтр("ru = 'Территория'"))); + + Возврат Результат; +КонецФункции + +Функция СтрокаОбъектаАдресации(Код, Наименование, Тип = 0, Порядок = 0, КодФИАС = 0) + + СтруктураОбъектаАдресации = Новый Структура; + СтруктураОбъектаАдресации.Вставить("Код", Код); + СтруктураОбъектаАдресации.Вставить("Наименование", Наименование); + СтруктураОбъектаАдресации.Вставить("Тип", Тип); + СтруктураОбъектаАдресации.Вставить("Порядок", Порядок); + СтруктураОбъектаАдресации.Вставить("КодФИАС", КодФИАС); + СтруктураОбъектаАдресации.Вставить("Сокращение", НРег(Наименование)); + СтруктураОбъектаАдресации.Вставить("Ключ", ВРег(Наименование)); + Возврат СтруктураОбъектаАдресации; + +КонецФункции + +// Возвращает код дополнительной части адреса для сериализации. +// +// Параметры: +// СтрокаЗначения - Строка - значение для поиска, например "Дом", "Корпус", "Литера". +// +// Возвращаемое значение: +// Число - код +// +Функция КодСериализацииОбъектаАдресации(СтрокаЗначения) Экспорт + + Ключ = ВРег(СокрЛП(СтрокаЗначения)); + Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл + Если Элемент.Ключ = Ключ Тогда + Возврат Элемент.Код; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +// Возвращает код дополнительной части адреса для почтового индекса. +// +// Возвращаемое значение: +// Строка - код +// +Функция КодСериализацииПочтовогоИндекса() Экспорт + + Возврат КодСериализацииОбъектаАдресации(НСтр("ru = 'Почтовый индекс'")); + +КонецФункции + +// Возвращает XPath для почтового индекса. +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathПочтовогоИндекса() Экспорт + + Возврат "ДопАдрЭл[ТипАдрЭл='" + КодСериализацииПочтовогоИндекса() + "']"; + +КонецФункции + +// Возвращает XPath для номера дополнительного объекта адресации. +// +// Параметры; +// СтрокаЗначения - Строка - искомый тип, например "Дом", "Корпус". +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathНомераДополнительногоОбъектаАдресации(СтрокаЗначения) Экспорт + + Код = КодСериализацииОбъектаАдресации(СтрокаЗначения); + Если Код = Неопределено Тогда + Код = СтрЗаменить(СтрокаЗначения, "'", ""); + КонецЕсли; + + Возврат "ДопАдрЭл/Номер[Тип='" + Код + "']"; +КонецФункции + +// Возвращает строку с описанием типа по коду части адреса. +// Противоположность функции "КодСериализацииОбъектаАдресации". +// +// Параметры: +// Код - Строка - код +// +// Возвращаемое значение: +// Число - Тип +// +Функция ТипОбъектаПоКодуСериализации(Код) Экспорт + Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл + Если Элемент.Код = Код Тогда + Возврат Элемент; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +Процедура ОбработкаЧастыхСокращенийВАдресах(Знач ДанныеАнализа) Экспорт + + СубъектРФ = Новый Соответствие(); + СубъектРФ.Вставить(НСтр("ru='САНКТ-ПЕТЕРБУРГ'"), "Санкт-Петербург"); + СубъектРФ.Вставить(НСтр("ru='МОСКВА'"), "Москва"); + СубъектРФ.Вставить(НСтр("ru='МСК'"), "Москва"); + СубъектРФ.Вставить(НСтр("ru='СПБ'"), "Санкт-Петербург"); + + Для каждого ЧастьАдреса Из ДанныеАнализа Цикл + Наименование = ВРег(ЧастьАдреса.Наименование); + Если СубъектРФ.Получить(Наименование ) <> Неопределено И ПустаяСтрока(ЧастьАдреса.Сокращение) Тогда + ЧастьАдреса.Наименование = СубъектРФ.Получить(Наименование ); + ЧастьАдреса.Сокращение = "г"; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ОпределитьФорматКонтактнойИнформации(ФорматКонтактнойИнформации) Экспорт + ФорматКонтактнойИнформации.Вставить("ФорматАдреса", "ФИАС"); +КонецПроцедуры + +// Возвращает массив вариантов наименований по типу (по признаку владения, строения, и т.п). +// +// Параметры: +// Тип - Число - запрашиваемый тип. +// ДопускатьПовторыКода - Булево - Истина - будут возвращены все варианты с повторами ("квартира" - "кв." и т.п.). +// +// Возвращаемое значение: +// Массив - содержит структуры - описания. +// +Функция НаименованияОбъектовАдресацииПоТипу(Тип, ДопускатьПовторыКода = Истина) Экспорт + Результат = Новый Массив; + Повторы = Новый Соответствие; + + Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл + Если Элемент.Тип = Тип Тогда + Если ДопускатьПовторыКода Тогда + Результат.Добавить(Элемент.Наименование); + Иначе + Если Повторы.Получить(Элемент.Код) = Неопределено Тогда + Результат.Добавить(Элемент.Наименование); + КонецЕсли; + Повторы.Вставить(Элемент.Код, Истина); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + // Внутреннее для сериализации. Функция КонвертироватьАдресИзJSONВXML(Знач ЗначенияПолей, Знач Представление, Знач ОжидаемыйТип = Неопределено) Экспорт // Старый формат через разделитель строк и равенство. - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); @@ -906,7 +1124,7 @@ Если ИмяПоля="ZIPCODE" Тогда ЭлементИндекс = СоздатьДопАдрЭлемента(НациональныйАдрес); - ЭлементИндекс.ТипАдрЭл = РаботаСАдресамиКлиентСервер.КодСериализацииПочтовогоИндекса(); + ЭлементИндекс.ТипАдрЭл = КодСериализацииПочтовогоИндекса(); ЭлементИндекс.Значение = ЭлементСписка.Значение; ИначеЕсли ИмяПоля = "COMMENT" Тогда @@ -942,7 +1160,7 @@ ИначеЕсли ИмяПоля = "TERRITORY" Тогда - ПутьXPath = РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, ЗначенияПолей.TerritoryType); + ПутьXPath = XPathДополнительногоОбъектаАдресации(90, ЗначенияПолей.TerritoryType); Обработки.РасширенныйВводКонтактнойИнформации.УстановитьXDTOРеквизитОбъекта(НациональныйАдрес, ПутьXPath, ЭлементСписка.Значение + " " + ЗначенияПолей.TerritoryType); @@ -958,9 +1176,9 @@ ИначеЕсли ИмяПоля = "HOUSETYPE" Тогда ЭлементДом = СоздатьНомерДопАдрЭлемента(НациональныйАдрес); - ЭлементДом.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); + ЭлементДом.Тип = КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); Если ЭлементДом.Тип = Неопределено Тогда - ЭлементДом.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации("Дом"); + ЭлементДом.Тип = КодСериализацииОбъектаАдресации("Дом"); КонецЕсли; ЭлементДом.Значение = ЗначенияПолей.HouseNumber; @@ -970,9 +1188,9 @@ // тип корпуса ЭлементКорпус = СоздатьНомерДопАдрЭлемента(НациональныйАдрес); - ЭлементКорпус.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(СписокСтроение.Type); + ЭлементКорпус.Тип = КодСериализацииОбъектаАдресации(СписокСтроение.Type); Если ЭлементКорпус.Тип = Неопределено Тогда - ЭлементКорпус.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации("Корпус"); + ЭлементКорпус.Тип = КодСериализацииОбъектаАдресации("Корпус"); КонецЕсли; ЭлементКорпус.Значение = СписокСтроение.Number; @@ -984,9 +1202,9 @@ // тип квартиры ЭлементКвартира = СоздатьНомерДопАдрЭлемента(НациональныйАдрес); - ЭлементКвартира.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(СписокСтроение.Type); + ЭлементКвартира.Тип = КодСериализацииОбъектаАдресации(СписокСтроение.Type); Если ЭлементКвартира.Тип = Неопределено Тогда - ЭлементКвартира.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации("Квартира"); + ЭлементКвартира.Тип = КодСериализацииОбъектаАдресации("Квартира"); КонецЕсли; ЭлементКвартира.Значение = СписокСтроение.Number; @@ -1030,7 +1248,7 @@ Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда Тип = УправлениеКонтактнойИнформацией.ТипКонтактнойИнформации(КонтактнаяИнформация); ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("ОбъектXDTO") Тогда - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(); НайденТип = ?(КонтактнаяИнформация.Состав = Неопределено, Неопределено, КонтактнаяИнформация.Состав.Тип()); Тип = УправлениеКонтактнойИнформациейСлужебный.СоответствиеXDTOТиповКонтактнойИнформации(НайденТип); @@ -1050,7 +1268,6 @@ НаименованиеСтраны = ""; Формат9Запятых = Ложь; - ЭлементыАдреса = Новый Соответствие; Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда @@ -1065,22 +1282,22 @@ Формат9Запятых = Истина; АдресРФ = КонтактнаяИнформация; Иначе - XDTOКонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип,, Представление); + XDTOКонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип,, Представление); Результат.Value = XDTOКонтактнаяИнформация.Представление; Результат.Comment = XDTOКонтактнаяИнформация.Комментарий; КонецЕсли; КонецЕсли; + ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("Структура") Тогда + + Возврат СтруктураАдресаВСтруктуруJSON(КонтактнаяИнформация); + ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("ОбъектXDTO") Тогда XDTOКонтактнаяИнформация = КонтактнаяИнформация; Результат.Value = XDTOКонтактнаяИнформация.Представление; Результат.Comment = XDTOКонтактнаяИнформация.Комментарий; - ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("Структура") Тогда - - Возврат СтруктураАдресаВСтруктуруJSON(КонтактнаяИнформация); - КонецЕсли; Если Тип <> Перечисления.ТипыКонтактнойИнформации.Адрес И Тип <> Перечисления.ТипыКонтактнойИнформации.Телефон Тогда @@ -1089,7 +1306,7 @@ Если НЕ Формат9Запятых Тогда - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(); Состав = XDTOКонтактнаяИнформация.Состав; Если Состав = Неопределено Тогда @@ -1110,8 +1327,8 @@ АдресРФ = Состав.Состав; ИначеЕсли - XDTOТип = ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(), "НомерТелефона") - Или XDTOТип = ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(), "НомерФакса") Тогда + XDTOТип = ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(), "НомерТелефона") + Или XDTOТип = ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(), "НомерФакса") Тогда Результат.CountryCode = Состав.КодСтраны; Результат.AreaCode = Состав.КодГорода; @@ -1255,10 +1472,8 @@ Функция ПодготовитьАдресДляВвода(Данные) Экспорт Если Данные.Свойство("id") И ПустаяСтрока(Данные.id) И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); МодульАдресныйКлассификаторСлужебный.УстановитьИдентификаторыАдреса(Данные); - КонецЕсли; НаселенныйПунктДетально = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес")); @@ -1290,91 +1505,6 @@ КонецФункции -Функция СтруктураАдресаВСтруктуруJSON(Знач КонтактнаяИнформация) - - ОписаниеКонтактнойИнформации = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); - - СоответствиеПолей = Новый Соответствие(); - СоответствиеПолей.Вставить("ТипАдреса", "AddressType"); - СоответствиеПолей.Вставить("Представление", "value"); - СоответствиеПолей.Вставить("Комментарий", "comment"); - СоответствиеПолей.Вставить("НаименованиеСтраны", "country"); - СоответствиеПолей.Вставить("Страна", "country"); - СоответствиеПолей.Вставить("Индекс", "ZIPCode"); - СоответствиеПолей.Вставить("ОКТМО", "oktmo"); - СоответствиеПолей.Вставить("ОКАТО", "okato"); - СоответствиеПолей.Вставить("Регион", "area"); - СоответствиеПолей.Вставить("РегионСокращение", "areaType"); - СоответствиеПолей.Вставить("Район", "district"); - СоответствиеПолей.Вставить("РайонСокращение", "districtType"); - СоответствиеПолей.Вставить("Город", "city"); - СоответствиеПолей.Вставить("ГородСокращение", "cityType"); - СоответствиеПолей.Вставить("НаселенныйПункт", "locality"); - СоответствиеПолей.Вставить("НаселенныйПунктСокращение", "localityType"); - СоответствиеПолей.Вставить("Улица", "street"); - СоответствиеПолей.Вставить("УлицаСокращение", "streetType"); - СоответствиеПолей.Вставить("КодРегиона", "areaCode"); - СоответствиеПолей.Вставить("МуниципальныйРайон", "munDistrict"); - СоответствиеПолей.Вставить("МуниципальныйРайонСокращение", "munDistrictType"); - СоответствиеПолей.Вставить("Поселение", "settlement"); - СоответствиеПолей.Вставить("ПоселениеСокращение", "settlementType"); - СоответствиеПолей.Вставить("ВнутригородскойРайон", "cityDistrict"); - СоответствиеПолей.Вставить("ВнутригородскойРайонСокращение", "cityDistrictType"); - СоответствиеПолей.Вставить("Территория", "territory"); - СоответствиеПолей.Вставить("ТерриторияСокращение", "territoryType"); - СоответствиеПолей.Вставить("ИдентификаторАдресногоОбъекта", "id"); - СоответствиеПолей.Вставить("ИдентификаторДома", "houseId"); - СоответствиеПолей.Вставить("Дом", "HouseNumber"); - СоответствиеПолей.Вставить("ТипДома", "HouseType"); - - ОписаниеКонтактнойИнформации.AddressType = РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес(); - - Для каждого ПолеКонтактнойИнформации Из КонтактнаяИнформация Цикл - ИмяПоля = СоответствиеПолей.Получить(ПолеКонтактнойИнформации.Ключ); - Если ИмяПоля <> Неопределено Тогда - ОписаниеКонтактнойИнформации[ИмяПоля] = ПолеКонтактнойИнформации.Значение; - КонецЕсли; - КонецЦикла; - - Если КонтактнаяИнформация.Свойство("Здание") - И ТипЗнч(КонтактнаяИнформация.Здание) = Тип("Структура") - И КонтактнаяИнформация.Здание.Свойство("Номер") Тогда - - ОписаниеКонтактнойИнформации.HouseNumber = ?(КонтактнаяИнформация.Здание.Свойство("Номер"), КонтактнаяИнформация.Здание.Номер, ""); - ОписаниеКонтактнойИнформации.HouseType = ?(КонтактнаяИнформация.Здание.Свойство("ТипЗдания"), КонтактнаяИнформация.Здание.ТипЗдания, НСтр("ru='Дом'")); - - КонецЕсли; - - Если КонтактнаяИнформация.Свойство("Корпус")И ЗначениеЗаполнено(КонтактнаяИнформация.Корпус) Тогда - - ТипКорпуса = ?(КонтактнаяИнформация.Свойство("ТипКорпуса"), КонтактнаяИнформация.ТипКорпуса, НСтр("ru='Корпус'")); - ОписаниеКонтактнойИнформации.buildings.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТипКорпуса, КонтактнаяИнформация.Корпус)); - ИначеЕсли КонтактнаяИнформация.Свойство("Корпуса")И ТипЗнч(КонтактнаяИнформация.Корпуса) = Тип("Массив") Тогда - Для каждого Корпус Из КонтактнаяИнформация.Корпуса Цикл - ОписаниеКонтактнойИнформации.buildings.Добавить( - УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(Корпус.Тип, Корпус.Номер)); - КонецЦикла; - - КонецЕсли; - - Если КонтактнаяИнформация.Свойство("Квартира") И ЗначениеЗаполнено(КонтактнаяИнформация.Квартира) Тогда - - ТипКвартиры = ?(КонтактнаяИнформация.Свойство("ТипКвартиры"), КонтактнаяИнформация.ТипКвартиры, НСтр("ru='Квартира'")); - ОписаниеКонтактнойИнформации.apartments.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТипКвартиры, КонтактнаяИнформация.Квартира)); - - ИначеЕсли КонтактнаяИнформация.Свойство("Помещения")И ТипЗнч(КонтактнаяИнформация.Помещения) = Тип("Массив") Тогда - - Для каждого Помещение Из КонтактнаяИнформация.Помещения Цикл - ОписаниеКонтактнойИнформации.apartments.Добавить( - УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(Помещение.Тип, Помещение.Номер)); - КонецЦикла; - - КонецЕсли; - - Возврат ОписаниеКонтактнойИнформации; - -КонецФункции - // Читает и устанавливает район адреса. // // Параметры: @@ -1387,9 +1517,6 @@ Функция РайонАдреса(XDTOАдрес, НовоеЗначение = Неопределено) Если НовоеЗначение = Неопределено Тогда - // Чтение - - Результат = Неопределено; XDTOТип = XDTOАдрес.Тип(); Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ") Тогда @@ -1399,7 +1526,7 @@ КонецЕсли; Если ТипЗнч(АдресРФ) = Тип("ОбъектXDTO") Тогда - Возврат УправлениеКонтактнойИнформацией.ПолучитьXDTOРеквизитОбъекта(АдресРФ, РаботаСАдресамиКлиентСервер.XPathРайона()); + Возврат УправлениеКонтактнойИнформацией.ПолучитьXDTOРеквизитОбъекта(АдресРФ, XPathРайона()); КонецЕсли; Возврат Неопределено; @@ -1409,6 +1536,7 @@ Запись = СвРайМО(XDTOАдрес); Запись.Район = НовоеЗначение; Возврат НовоеЗначение; + КонецФункции Функция СвРайМО(АдресРФ) @@ -1420,6 +1548,40 @@ Возврат АдресРФ.СвРайМО; КонецФункции +// Возвращает XPath для дополнительного объекта адресации по умолчанию. +// +// Параметры; +// Уровень - Число - уровень объекта. 90 - дополнительный(Варианты: ГСК, СНТ, ТЕР), 91 - подчиненный, -1 - +// Ориентир. +// +// Возвращаемое значение: +// Строка - XPath +// +Функция XPathДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") Экспорт + КодСериализации = КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента); + Возврат "ДопАдрЭл[ТипАдрЭл='" + КодСериализации + "']"; +КонецФункции + +Функция КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") + + Если Уровень = 90 Тогда + Если ВРег(ТипаАдресногоЭлемента) = "ГСК" Тогда + Возврат "10600000"; + ИначеЕсли ВРег(ТипаАдресногоЭлемента) = "СНТ" Тогда + Возврат "10300000"; + ИначеЕсли ВРег(ТипаАдресногоЭлемента) = "ТЕР" Тогда + Возврат "10700000"; + Иначе + Возврат "10200000"; + КонецЕсли; + ИначеЕсли Уровень = 91 Тогда + Возврат "10400000"; + КонецЕсли; + + // Все остальное - считаем ориентиром. + Возврат "Местоположение"; +КонецФункции + // Возвращает список всех регионов адресного классификатора. // // Возвращаемое значение: @@ -1477,11 +1639,15 @@ // Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР. // Функция СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры) + Результат = Новый Массив; + Для каждого Адрес Из Адреса Цикл Результат.Добавить(СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры)); КонецЦикла; + Возврат Результат; + КонецФункции // Возвращает сведения об адресе в виде отдельных частей адреса и различных кодов (код региона, ОКТМО и др.). @@ -1492,7 +1658,8 @@ // ДополнительныеПараметры - Структура - для уточнения возвращаемого значения: // * БезПредставлений - Булево - Если Истина, то поле Представление будет отсутствовать. По умолчанию, Ложь. // * КодыКЛАДР - Булево - Если Истина, то возвращается структура КодыКЛАДР. По умолчанию, Ложь. -// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращается полное наименование адресных объектов. +// * КодыАдреса - Булево - Если Истина, то возвращается коды адреса. По умолчанию, Истина. +// * ПолноеНаименованиеСокращений - Булево - Если Истина, то возвращается полное наименование адресных объектов. // * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. // , * ВключатьСтрануВПредставление - Булево - Если Истина, то представление включает наименование страны. // * ПроверитьАдрес - Булево - Если Истина, то адрес будет проверен на соответствие ФИАС. @@ -1566,23 +1733,14 @@ // Функция СведенияОбАдресеВВидеСтруктуры(Знач АдресСтрокой, ДополнительныеПараметры) - Результат = Новый Структура(); + Результат = РаботаСАдресамиКлиентСервер.ПоляАдреса(); - Параметры = Новый Структура(); - Параметры.Вставить("БезПредставлений", Ложь); - Параметры.Вставить("НаименованиеВключаетСокращение", Ложь); - Параметры.Вставить("КодыКЛАДР", Ложь); - Параметры.Вставить("ПолноеНаименованиеСокращений", Ложь); - Параметры.Вставить("ПроверитьАдрес", Ложь); - Параметры.Вставить("ВключатьСтрануВПредставление", Ложь); - Параметры.Вставить("КодыАдреса", Ложь); - - Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда - - ЗаполнитьЗначенияСвойств(Параметры, ДополнительныеПараметры); - + Если АдресСтрокой = Неопределено Тогда + Возврат Результат; КонецЕсли; + Параметры = ИнициализироватьСвойстваПоПараметрам(ДополнительныеПараметры, Результат); + СоответствиеСокращений = Новый Соответствие; Если НЕ (ТипЗнч(АдресСтрокой) = Тип("Структура") И АдресСтрокой.Свойство("Value")) Тогда @@ -1608,29 +1766,24 @@ КонецЕсли; // Основные сведения - Результат.Вставить("Комментарий", Адрес.Comment); - Результат.Вставить("Индекс", Адрес.ZipCode); - Результат.Вставить("ТипАдреса", Адрес.AddressType); - Результат.Вставить("Страна", Адрес.Country); - - Если ЗначениеЗаполнено(Адрес.CountryCode) Тогда - Результат.Вставить("КодСтраны", Адрес.CountryCode); - Иначе + Результат.Комментарий = Адрес.Comment; + Результат.Индекс = Адрес.ZipCode; + Результат.ТипАдреса = Адрес.AddressType; + Результат.Страна = Адрес.Country; + КодСтраны = Адрес.CountryCode; + + Если Не ЗначениеЗаполнено(Адрес.CountryCode) Тогда СведенияОСтране = УправлениеКонтактнойИнформацией.ДанныеСтраныМира(Неопределено, Адрес.Country); - Результат.Вставить("КодСтраны", ?(СведенияОСтране <> Неопределено, СведенияОСтране.Код, "")); + Если СведенияОСтране <> Неопределено Тогда + КодСтраны = СведенияОСтране.Код; + КонецЕсли; КонецЕсли; + Результат.КодСтраны = КодСтраны; + ЭтоНациональныйАдрес = ?(СтрСравнить(Адрес.Country, РаботаСАдресамиКлиентСервер.ОсновнаяСтрана().Наименование) = 0, Истина, Ложь); КодРегиона = ?(ЭтоНациональныйАдрес, КодРегиона(Адрес["Area"] + " " +Адрес["AreaType"]), ""); - Результат.Вставить("КодРегиона", КодРегиона); - - // Обратная совместимость, уровни устарели. - Результат.Вставить("Округ", ""); - Результат.Вставить("ОкругСокращение", ""); - Результат.Вставить("ДополнительнаяТерритория", ""); - Результат.Вставить("ДополнительнаяТерриторияСокращение", ""); - Результат.Вставить("ЭлементДополнительнойТерритории", ""); - Результат.Вставить("ЭлементДополнительнойТерриторииСокращение", ""); + Результат.КодРегиона = КодРегиона; СоответствиеУровней = Новый Соответствие; СоответствиеУровней.Вставить("area", Новый Структура("Имя, Уровень", "Регион", 1)); @@ -1645,7 +1798,7 @@ Если Параметры.КодыАдреса Или Параметры.КодыКЛАДР Тогда Идентификаторы = Новый Структура(); - Результат.Вставить("Идентификаторы", Идентификаторы); + Результат.Идентификаторы = Идентификаторы; КонецЕсли; ИдентификаторАдресногоОбъекта = ""; @@ -1657,9 +1810,9 @@ Сокращение = Адрес[ЧастьАдреса.Ключ + "Type"]; НаименованиеУровня = ?(Параметры.НаименованиеВключаетСокращение, СокрЛП(Адрес[ЧастьАдреса.Ключ] + " " + Сокращение), Адрес[ЧастьАдреса.Ключ]); - - Результат.Вставить(ЧастьАдреса.Значение.Имя, НаименованиеУровня); - Результат.Вставить(ЧастьАдреса.Значение.Имя + "Сокращение", Сокращение); + + Результат[ЧастьАдреса.Значение.Имя] = НаименованиеУровня; + Результат[ЧастьАдреса.Значение.Имя + "Сокращение"] = Сокращение; СоответствиеСокращений.Вставить(ЧастьАдреса.Значение.Уровень, Сокращение); Если Параметры.КодыАдреса Или Параметры.КодыКЛАДР Тогда @@ -1686,7 +1839,7 @@ Для каждого ЧастьАдреса Из СоответствиеУровней Цикл - Результат.Вставить(ЧастьАдреса.Значение.Имя + "Сокращение", СоответствиеСокращений[ЧастьАдреса.Значение.Уровень]); + Результат[ЧастьАдреса.Значение.Имя + "Сокращение"] = СоответствиеСокращений[ЧастьАдреса.Значение.Уровень]; КонецЦикла; @@ -1694,9 +1847,9 @@ КонецЕсли; // Дома, здания, строения - Результат.Вставить("Здание", Новый Структура("ТипЗдания, Номер")); - Результат.Вставить("Корпуса", Новый Массив); - Результат.Вставить("Помещения", Новый Массив); + Результат.Здание = Новый Структура("ТипЗдания, Номер"); + Результат.Корпуса = Новый Массив; + Результат.Помещения = Новый Массив; Результат.Здание.Вставить("ТипЗдания", Адрес.HouseType); Результат.Здание.Вставить("Номер", Адрес.HouseNumber); @@ -1776,6 +1929,122 @@ КонецФункции +Функция ИнициализироватьСвойстваПоПараметрам(Знач ДополнительныеПараметры, Знач Результат) + + Параметры = Новый Структура(); + Параметры.Вставить("БезПредставлений", Ложь); + Параметры.Вставить("НаименованиеВключаетСокращение", Ложь); + Параметры.Вставить("КодыКЛАДР", Ложь); + Параметры.Вставить("ПолноеНаименованиеСокращений", Ложь); + Параметры.Вставить("ПроверитьАдрес", Ложь); + Параметры.Вставить("ВключатьСтрануВПредставление", Ложь); + Параметры.Вставить("КодыАдреса", Ложь); + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Параметры, ДополнительныеПараметры); + КонецЕсли; + + Если Не Параметры.КодыАдреса И Не Параметры.КодыКЛАДР Тогда + Результат.Удалить("ДополнительныеКоды"); + Результат.Удалить("КодыКЛАДР"); + Результат.Удалить("Идентификаторы"); + КонецЕсли; + + Если Не Параметры.КодыАдреса Тогда + Результат.Удалить("ИдентификаторАдресногоОбъекта"); + Результат.Удалить("ИдентификаторДома"); + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +Функция СтруктураАдресаВСтруктуруJSON(Знач КонтактнаяИнформация) + + ОписаниеКонтактнойИнформации = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); + + СоответствиеПолей = Новый Соответствие(); + СоответствиеПолей.Вставить("ТипАдреса", "addressType"); + СоответствиеПолей.Вставить("Представление", "value"); + СоответствиеПолей.Вставить("Комментарий", "comment"); + СоответствиеПолей.Вставить("НаименованиеСтраны", "country"); + СоответствиеПолей.Вставить("Страна", "country"); + СоответствиеПолей.Вставить("Индекс", "ZIPCode"); + СоответствиеПолей.Вставить("ОКТМО", "oktmo"); + СоответствиеПолей.Вставить("ОКАТО", "okato"); + СоответствиеПолей.Вставить("Регион", "area"); + СоответствиеПолей.Вставить("РегионСокращение", "areaType"); + СоответствиеПолей.Вставить("Район", "district"); + СоответствиеПолей.Вставить("РайонСокращение", "districtType"); + СоответствиеПолей.Вставить("Город", "city"); + СоответствиеПолей.Вставить("ГородСокращение", "cityType"); + СоответствиеПолей.Вставить("НаселенныйПункт", "locality"); + СоответствиеПолей.Вставить("НаселенныйПунктСокращение", "localityType"); + СоответствиеПолей.Вставить("Улица", "street"); + СоответствиеПолей.Вставить("УлицаСокращение", "streetType"); + СоответствиеПолей.Вставить("КодРегиона", "areaCode"); + СоответствиеПолей.Вставить("МуниципальныйРайон", "munDistrict"); + СоответствиеПолей.Вставить("МуниципальныйРайонСокращение", "munDistrictType"); + СоответствиеПолей.Вставить("Поселение", "settlement"); + СоответствиеПолей.Вставить("ПоселениеСокращение", "settlementType"); + СоответствиеПолей.Вставить("ВнутригородскойРайон", "cityDistrict"); + СоответствиеПолей.Вставить("ВнутригородскойРайонСокращение", "cityDistrictType"); + СоответствиеПолей.Вставить("Территория", "territory"); + СоответствиеПолей.Вставить("ТерриторияСокращение", "territoryType"); + СоответствиеПолей.Вставить("ИдентификаторАдресногоОбъекта", "id"); + СоответствиеПолей.Вставить("ИдентификаторДома", "houseId"); + СоответствиеПолей.Вставить("Дом", "houseNumber"); + СоответствиеПолей.Вставить("ТипДома", "houseType"); + + ОписаниеКонтактнойИнформации.AddressType = РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес(); + + Для каждого ПолеКонтактнойИнформации Из КонтактнаяИнформация Цикл + ИмяПоля = СоответствиеПолей.Получить(ПолеКонтактнойИнформации.Ключ); + Если ИмяПоля <> Неопределено Тогда + ОписаниеКонтактнойИнформации[ИмяПоля] = ПолеКонтактнойИнформации.Значение; + КонецЕсли; + КонецЦикла; + + Если КонтактнаяИнформация.Свойство("Здание") + И ТипЗнч(КонтактнаяИнформация.Здание) = Тип("Структура") + И КонтактнаяИнформация.Здание.Свойство("Номер") Тогда + + ОписаниеКонтактнойИнформации.HouseNumber = ?(КонтактнаяИнформация.Здание.Свойство("Номер"), КонтактнаяИнформация.Здание.Номер, ""); + ОписаниеКонтактнойИнформации.HouseType = ?(КонтактнаяИнформация.Здание.Свойство("ТипЗдания"), КонтактнаяИнформация.Здание.ТипЗдания, НСтр("ru='Дом'")); + + КонецЕсли; + + Если КонтактнаяИнформация.Свойство("Корпус")И ЗначениеЗаполнено(КонтактнаяИнформация.Корпус) Тогда + + + ТипКорпуса = ?(КонтактнаяИнформация.Свойство("ТипКорпуса"), КонтактнаяИнформация.ТипКорпуса, НСтр("ru='Корпус'")); + ОписаниеКонтактнойИнформации.buildings.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТипКорпуса, КонтактнаяИнформация.Корпус)); + ИначеЕсли КонтактнаяИнформация.Свойство("Корпуса")И ТипЗнч(КонтактнаяИнформация.Корпуса) = Тип("Массив") Тогда + Для каждого Корпус Из КонтактнаяИнформация.Корпуса Цикл + ОписаниеКонтактнойИнформации.buildings.Добавить( + УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(Корпус.Тип, Корпус.Номер)); + КонецЦикла; + + КонецЕсли; + + Если КонтактнаяИнформация.Свойство("Квартира") И ЗначениеЗаполнено(КонтактнаяИнформация.Квартира) Тогда + + ТипКвартиры = ?(КонтактнаяИнформация.Свойство("ТипКвартиры"), КонтактнаяИнформация.ТипКвартиры, НСтр("ru='Квартира'")); + ОписаниеКонтактнойИнформации.apartments.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТипКвартиры, КонтактнаяИнформация.Квартира)); + + ИначеЕсли КонтактнаяИнформация.Свойство("Помещения")И ТипЗнч(КонтактнаяИнформация.Помещения) = Тип("Массив") Тогда + + Для каждого Помещение Из КонтактнаяИнформация.Помещения Цикл + ОписаниеКонтактнойИнформации.apartments.Добавить( + УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(Помещение.Тип, Помещение.Номер)); + КонецЦикла; + + КонецЕсли; + + Возврат ОписаниеКонтактнойИнформации; + +КонецФункции + // Возвращает код региона по его полному наименованию. // // Параметры: @@ -1900,4 +2169,119 @@ КонецФункции +// Возвращает сокращения частей адреса +// +// Возвращаемое значение: +// Соответствие - Список сокращений. +// +Функция СокращенияОбъектовАдресацииАдресаРФ() Экспорт + + Результат = Новый Соответствие; + + Результат.Вставить(НСтр("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 = 'п/о'")); + Результат.Вставить(НСтр("ru = 'В/ч'"), НСтр("ru = 'в/ч'")); + + Возврат Результат; +КонецФункции + +// Возвращает строку списка полей. +// +// Параметры: +// СоответствиеПолей - СписокЗначений - соответствия полей. +// БезПустыхПолей - Булево - необязательный флаг сохранения полей с пустыми значениями. +// +// Возвращаемое значение: +// Строка - результат, преобразованный из списка. +// +Функция ПреобразоватьСписокПолейВСтроку(СоответствиеПолей, БезПустыхПолей = Истина) + + КвартираДобавлена = Ложь; + КорпусДобавлен = Ложь; + ПредыдущиеЗначение = Неопределено; + + СтруктураЗначенийПолей = Новый Структура; + Для Каждого Элемент Из СоответствиеПолей Цикл + + Если Элемент.Представление = "Корпус" ИЛИ Элемент.Представление = "ТипКорпуса" Тогда + Если ПредыдущиеЗначение <> Неопределено И ПредыдущиеЗначение.Представление = "ТипКорпуса" + И ПредыдущиеЗначение.Значение = "Корпус" Тогда + СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + КорпусДобавлен = Истина; + ИначеЕсли НЕ КорпусДобавлен Тогда + СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + КонецЕсли; + ИначеЕсли Элемент.Представление = "Квартира" ИЛИ Элемент.Представление = "ТипКвартиры" Тогда + Если ПредыдущиеЗначение <> Неопределено И ПредыдущиеЗначение.Представление = "ТипКвартиры" + И ПредыдущиеЗначение.Значение = "Квартира" Тогда + СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + КвартираДобавлена = Истина; + ИначеЕсли НЕ КвартираДобавлена Тогда + СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + КонецЕсли; + Иначе + СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); + КонецЕсли; + ПредыдущиеЗначение = Элемент; + КонецЦикла; + + Возврат СтрокаПолей(СтруктураЗначенийПолей, БезПустыхПолей); +КонецФункции + +// Возвращает строку списка полей. +// +// Параметры: +// СтруктураЗначенийПолей - Структура - структура значений полей. +// БезПустыхПолей - Булево - необязательный флаг сохранения полей с пустыми значениями. +// +// Возвращаемое значение: +/// Строка - результат преобразования из структуры. +// +Функция СтрокаПолей(СтруктураЗначенийПолей, БезПустыхПолей = Истина) Экспорт + + Результат = ""; + Для Каждого ЗначениеПоля Из СтруктураЗначенийПолей Цикл + Если БезПустыхПолей И ПустаяСтрока(ЗначениеПоля.Значение) Тогда + Продолжить; + КонецЕсли; + + Результат = Результат + ?(Результат = "", "", Символы.ПС) + + ЗначениеПоля.Ключ + "=" + СтрЗаменить(ЗначениеПоля.Значение, Символы.ПС, Символы.ПС + Символы.Таб); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция НаборБуквВНижнемРегистре() Экспорт + Возврат "абвгдеёжзийклмнопрстуфхцчшщыъьэюяabcdefghijklmnopqrstuvwxyz"; +КонецФункции + +Функция НаборБуквВВерхнемРегистре() Экспорт + Возврат "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ"; +КонецФункции + +Процедура ДополнитьНастройкиПроверкиАдреса(ПараметрыВида, ВидКонтактнойИнформации) Экспорт + + НастройкиПроверки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформации, "ПроверятьПоФИАС, УказыватьОКТМО"); + ПараметрыВида.НастройкиПроверки.ПроверятьПоФИАС = НастройкиПроверки.ПроверятьПоФИАС; + ПараметрыВида.НастройкиПроверки.УказыватьОКТМО = НастройкиПроверки.УказыватьОКТМО; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСАдресамиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСАдресамиКлиент/Module.bsl new file mode 100644 index 000000000..1692a1cff --- /dev/null +++ b/SSL/src/CommonModules/РаботаСАдресамиКлиент/Module.bsl @@ -0,0 +1,30 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Преобразует введенные английские буквы к русской раскладке при подборе адреса +// +Процедура ПреобразоватьВводАдреса(Текст) Экспорт + РусскиеКлавиши = "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ"; + АнглийскиеКлавиши = "QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,.`"; + Текст = ВРег(Текст); + Для Позиция = 0 По СтрДлина(Текст) Цикл + Символ = Сред(Текст, Позиция, 1); + ПозицияСимвола = СтрНайти(АнглийскиеКлавиши, Символ); + Если ПозицияСимвола > 0 Тогда + Текст = СтрЗаменить(Текст, Символ, Сред(РусскиеКлавиши, ПозицияСимвола, 1)); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + + + diff --git a/SSL/src/CommonModules/РаботаСАдресамиКлиент/РаботаСАдресамиКлиент.mdo b/SSL/src/CommonModules/РаботаСАдресамиКлиент/РаботаСАдресамиКлиент.mdo new file mode 100644 index 000000000..fd58a6e16 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСАдресамиКлиент/РаботаСАдресамиКлиент.mdo @@ -0,0 +1,10 @@ + + + РаботаСАдресамиКлиент + + ru + Работа с адресами клиент + + true + true + diff --git a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl index edbc39864..32204df90 100644 --- a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает структуру полей адреса для программного формирования адреса. @@ -180,75 +188,10 @@ Возврат ПредопределенноеЗначение("Справочник.СтраныМира.Россия"); КонецФункции -// Возвращает XPath для района. -// -// Возвращаемое значение: -// Строка - XPath -// -Функция XPathРайона() Экспорт - - Возврат "СвРайМО/Район"; - -КонецФункции - -// Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. -// -// Возвращаемое значение: -// Массив - содержит структуры - описания. -// -Функция ТипыОбъектовАдресацииАдресаРФ() Экспорт - - Результат = Новый Массив; - - // Код, Наименование, Тип, Порядок, КодФИАС - // Тип: 1 - владение, 2 - здание, 3 - помещение. - - Результат.Добавить(СтрокаОбъектаАдресации("1010", НСтр("ru = 'Дом'"), 1, 1, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("1020", НСтр("ru = 'Владение'"), 1, 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1030", НСтр("ru = 'Домовладение'"), 1, 3, 3)); - - Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("1090", НСтр("ru = 'Литер'"), 2, 6, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); - - Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'Квартира'"), 3, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'Офис'"), 3, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); - Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); - Результат.Добавить(СтрокаОбъектаАдресации("2060", НСтр("ru = 'Этаж'"), 3, 6)); - Результат.Добавить(СтрокаОбъектаАдресации("2070", НСтр("ru = 'А/я'"), 3, 7)); - Результат.Добавить(СтрокаОбъектаАдресации("2080", НСтр("ru = 'В/ч'"), 3, 8)); - Результат.Добавить(СтрокаОбъектаАдресации("2090", НСтр("ru = 'П/о'"), 3, 9)); - // Наши сокращения для поддержки обратной совместимости при парсинге. - Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); - Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); - // Ввод помещения вручную. - Результат.Добавить(СтрокаОбъектаАдресации("2000", НСтр("ru = ''"), 3, 0)); - - // Уточняющие объекты - Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10200000", НСтр("ru = 'Адресная точка'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10300000", НСтр("ru = 'Садовое товарищество'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10400000", НСтр("ru = 'Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10500000", НСтр("ru = 'Промышленная зона'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10600000", НСтр("ru = 'Гаражно-строительный кооператив'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10700000", НСтр("ru = 'Территория'"))); - - Возврат Результат; -КонецФункции - Функция ЭтоМуниципальныйАдрес(ТипАдреса) Экспорт Возврат СтрСравнить(ТипАдреса, МуниципальныйАдрес()) = 0; КонецФункции -Функция ЭтоАдминистративноТерриториальныйАдрес(ТипАдреса) Экспорт - Возврат СтрСравнить(ТипАдреса, АдминистративноТерриториальныйАдрес()) = 0; -КонецФункции - Функция ЭтоОсновнаяСтрана(Страна) Экспорт Возврат СтрСравнить(ОсновнаяСтрана(), Страна) = 0; КонецФункции @@ -302,8 +245,8 @@ // * HouseType - Строка - тип дома, владения. // * HouseNumber - Строка - номер дома, владения. // * HouseID - Строка - идентификатор дома. -// * Buildings - Массив - содержит структуры(поля структуры: Type, Number) с перечнем корпусов (строений) адреса. -// * Apartments - Массив - содержит структуры(поля структуры: Type, Number) с перечнем помещений адреса. +// * Buildings - Массив - содержит структуры(поля структуры: type, number) с перечнем корпусов (строений) адреса. +// * Apartments - Массив - содержит структуры(поля структуры: type, number) с перечнем помещений адреса. // * CodeKLADR - Строка - Код КЛАДР. // * OKTMO - Строка - Код ОКТМО. // * OKATO - Строка - Код ОКАТО. @@ -365,217 +308,6 @@ КонецФункции -// Возвращает код дополнительной части адреса для сериализации. -// -// Параметры: -// СтрокаЗначения - Строка - значение для поиска, например "Дом", "Корпус", "Литера". -// -// Возвращаемое значение: -// Число - код -// -Функция КодСериализацииОбъектаАдресации(СтрокаЗначения) Экспорт - - Ключ = ВРег(СокрЛП(СтрокаЗначения)); - Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл - Если Элемент.Ключ = Ключ Тогда - Возврат Элемент.Код; - КонецЕсли; - КонецЦикла; - - Возврат Неопределено; -КонецФункции - -// Возвращает код дополнительной части адреса для почтового индекса. -// -// Возвращаемое значение: -// Строка - код -// -Функция КодСериализацииПочтовогоИндекса() Экспорт - - Возврат КодСериализацииОбъектаАдресации(НСтр("ru = 'Почтовый индекс'")); - -КонецФункции - -// Возвращает XPath для почтового индекса. -// -// Возвращаемое значение: -// Строка - XPath -// -Функция XPathПочтовогоИндекса() Экспорт - - Возврат "ДопАдрЭл[ТипАдрЭл='" + КодСериализацииПочтовогоИндекса() + "']"; - -КонецФункции - -Функция КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") - - Если Уровень = 90 Тогда - Если ВРег(ТипаАдресногоЭлемента) = "ГСК" Тогда - Возврат "10600000"; - ИначеЕсли ВРег(ТипаАдресногоЭлемента) = "СНТ" Тогда - Возврат "10300000"; - ИначеЕсли ВРег(ТипаАдресногоЭлемента) = "ТЕР" Тогда - Возврат "10700000"; - Иначе - Возврат "10200000"; - КонецЕсли; - ИначеЕсли Уровень = 91 Тогда - Возврат "10400000"; - КонецЕсли; - - // Все остальное - считаем ориентиром. - Возврат "Местоположение"; -КонецФункции - -// Возвращает XPath для дополнительного объекта адресации по умолчанию. -// -// Параметры; -// Уровень - Число - уровень объекта. 90 - дополнительный(Варианты: ГСК, СНТ, ТЕР), 91 - подчиненный, -1 - -// Ориентир. -// -// Возвращаемое значение: -// Строка - XPath -// -Функция XPathДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента = "") Экспорт - КодСериализации = КодСериализацииДополнительногоОбъектаАдресации(Уровень, ТипаАдресногоЭлемента); - Возврат "ДопАдрЭл[ТипАдрЭл='" + КодСериализации + "']"; -КонецФункции - -// Возвращает XPath для номера дополнительного объекта адресации. -// -// Параметры; -// СтрокаЗначения - Строка - искомый тип, например "Дом", "Корпус". -// -// Возвращаемое значение: -// Строка - XPath -// -Функция XPathНомераДополнительногоОбъектаАдресации(СтрокаЗначения) Экспорт - - Код = КодСериализацииОбъектаАдресации(СтрокаЗначения); - Если Код = Неопределено Тогда - Код = СтрЗаменить(СтрокаЗначения, "'", ""); - КонецЕсли; - - Возврат "ДопАдрЭл/Номер[Тип='" + Код + "']"; -КонецФункции - -// Возвращает строку с описанием типа по коду части адреса. -// Противоположность функции "КодСериализацииОбъектаАдресации". -// -// Параметры: -// Код - Строка - код -// -// Возвращаемое значение: -// Число - Тип -// -Функция ТипОбъектаПоКодуСериализации(Код) Экспорт - Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл - Если Элемент.Код = Код Тогда - Возврат Элемент; - КонецЕсли; - КонецЦикла; - - Возврат Неопределено; -КонецФункции - -// Возвращает массив вариантов наименований по типу (по признаку владения, строения, и т.п). -// -// Параметры: -// Тип - Число - запрашиваемый тип. -// ДопускатьПовторыКода - Булево - Истина - будут возвращены все варианты с повторами ("квартира" - "кв." и т.п.). -// -// Возвращаемое значение: -// Массив - содержит структуры - описания. -// -Функция НаименованияОбъектовАдресацииПоТипу(Тип, ДопускатьПовторыКода = Истина) Экспорт - Результат = Новый Массив; - Повторы = Новый Соответствие; - - Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл - Если Элемент.Тип = Тип Тогда - Если ДопускатьПовторыКода Тогда - Результат.Добавить(Элемент.Наименование); - Иначе - Если Повторы.Получить(Элемент.Код) = Неопределено Тогда - Результат.Добавить(Элемент.Наименование); - КонецЕсли; - Повторы.Вставить(Элемент.Код, Истина); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат Результат; -КонецФункции - -// Возвращает сокращения частей адреса -// -// Возвращаемое значение: -// Соответствие - Список сокращений. -// -Функция СокращенияОбъектовАдресацииАдресаРФ() Экспорт - - Результат = Новый Соответствие; - - Результат.Вставить(НСтр("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 = 'п/о'")); - Результат.Вставить(НСтр("ru = 'В/ч'"), НСтр("ru = 'в/ч'")); - - Возврат Результат; -КонецФункции - -Функция СтрокаОбъектаАдресации(Код, Наименование, Тип = 0, Порядок = 0, КодФИАС = 0) - - СтруктураОбъектаАдресации = Новый Структура; - СтруктураОбъектаАдресации.Вставить("Код", Код); - СтруктураОбъектаАдресации.Вставить("Наименование", Наименование); - СтруктураОбъектаАдресации.Вставить("Тип", Тип); - СтруктураОбъектаАдресации.Вставить("Порядок", Порядок); - СтруктураОбъектаАдресации.Вставить("КодФИАС", КодФИАС); - СтруктураОбъектаАдресации.Вставить("Сокращение", НРег(Наименование)); - СтруктураОбъектаАдресации.Вставить("Ключ", ВРег(Наименование)); - Возврат СтруктураОбъектаАдресации; - -КонецФункции - -Функция СопоставлениеУровняАдресаИНаименования(ТипАдреса, ВключатьУлицу) - Уровни = Новый Соответствие; - - Уровни.Вставить(1, "Area"); - Если ЭтоМуниципальныйАдрес(ТипАдреса) Тогда - Уровни.Вставить(31, "MunDistrict"); - Уровни.Вставить(41, "Settlement"); - Иначе - Уровни.Вставить(3, "District"); - Уровни.Вставить(4, "City"); - КонецЕсли; - - Уровни.Вставить(5, "CityDistrict"); - Уровни.Вставить(6, "Locality"); - Уровни.Вставить(65, "Territory"); - - Если ВключатьУлицу Тогда - Уровни.Вставить(7, "Street"); - КонецЕсли; - - Возврат Уровни; -КонецФункции - Функция СопоставлениеНаименованиеУровнюАдреса(ИмяУровня) Экспорт Уровни = Новый Соответствие; @@ -640,72 +372,6 @@ КонецФункции -Функция ПредставлениеУровняБезСокращения(ИмяУровня) Экспорт - - Если СтрСравнить(ИмяУровня, "MunDistrict") = 0 Или СтрСравнить(ИмяУровня, "Settlement") = 0 Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -Функция ИдентификаторАдреса(Адрес, ВключатьУлицу) Экспорт - - ИдентификаторАдреса = Неопределено; - МаксимальныйУровень = 0; - Уровни = СопоставлениеУровняАдресаИНаименования(Адрес.AddressType, ВключатьУлицу); - - Для каждого Уровень Из Уровни Цикл - УровеньКлюч = ?(Уровень.Ключ < 10, Уровень.Ключ * 10, Уровень.Ключ); - Если УровеньКлюч > МаксимальныйУровень - И Адрес.Свойство(Уровень.Значение + "Id") - И ЗначениеЗаполнено(Адрес[Уровень.Значение + "Id"]) Тогда - ИдентификаторАдреса = Адрес[Уровень.Значение + "Id"]; - МаксимальныйУровень = УровеньКлюч; - КонецЕсли; - - КонецЦикла; - - Возврат ИдентификаторАдреса; - -КонецФункции - -// Преобразует введенные английские буквы к русской раскладке при подборе адреса -// -Процедура ПреобразоватьВводАдреса(Текст) Экспорт - РусскиеКлавиши = "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ"; - АнглийскиеКлавиши = "QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,.`"; - Текст = ВРег(Текст); - Для Позиция = 0 По СтрДлина(Текст) Цикл - Символ = Сред(Текст, Позиция, 1); - ПозицияСимвола = СтрНайти(АнглийскиеКлавиши, Символ); - Если ПозицияСимвола > 0 Тогда - Текст = СтрЗаменить(Текст, Символ, Сред(РусскиеКлавиши, ПозицияСимвола, 1)); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Функция ПредставлениеНаселенногоПунктаАдреса(Адрес) Экспорт - - СписокЗаполненныхУровней = Новый Массив; - - Для каждого ИмяУровня Из ИменаУровнейАдреса(Адрес.AddressType, Ложь) Цикл - - Если ЗначениеЗаполнено(Адрес[ИмяУровня]) Тогда - Если НЕ ПредставлениеУровняБезСокращения(ИмяУровня) Тогда - СписокЗаполненныхУровней.Добавить(Адрес[ИмяУровня] + " " + Адрес[ИмяУровня + "Type"]); - Иначе - СписокЗаполненныхУровней.Добавить(Адрес[ИмяУровня]); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат СтрСоединить(СписокЗаполненныхУровней, ", "); - -КонецФункции - Процедура ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление) Экспорт Представление = ПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление); @@ -775,13 +441,15 @@ КонецЦикла; Если Адрес.Свойство("HouseNumber") И НЕ ПустаяСтрока(Адрес.HouseNumber) Тогда - СписокЗаполненныхУровней.Добавить(НРег(Адрес.HouseType) + " № " + Адрес.HouseNumber); + СписокЗаполненныхУровней.Добавить(НРег(Адрес.HouseType) + " " + Адрес.HouseNumber); КонецЕсли; Если Адрес.Свойство("Buildings") И Адрес.Buildings.Количество() > 0 Тогда Для каждого Строение Из Адрес.Buildings Цикл - СписокЗаполненныхУровней.Добавить(НРег(Строение.Type) + " " + Строение.Number); + Если ЗначениеЗаполнено(Строение.Number) Тогда + СписокЗаполненныхУровней.Добавить(НРег(Строение.Type) + " " + Строение.Number); + КонецЕсли; КонецЦикла; КонецЕсли; @@ -791,10 +459,12 @@ И Адрес.Apartments.Количество() > 0 Тогда Для каждого Строение Из Адрес.Apartments Цикл - Если СтрСравнить(Строение.Type, "Другое") <> 0 Тогда - СписокЗаполненныхУровней.Добавить(НРег(Строение.Type) + " " + Строение.Number); - Иначе - СписокЗаполненныхУровней.Добавить(Строение.Number); + Если ЗначениеЗаполнено(Строение.Number) Тогда + Если СтрСравнить(Строение.Type, "Другое") <> 0 Тогда + СписокЗаполненныхУровней.Добавить(НРег(Строение.Type) + " " + Строение.Number); + Иначе + СписокЗаполненныхУровней.Добавить(Строение.Number); + КонецЕсли; КонецЕсли; КонецЦикла; @@ -808,6 +478,16 @@ #Область ПрочиеСлужебныеПроцедурыИФункции +Функция ПредставлениеУровняБезСокращения(ИмяУровня) Экспорт + + Если ИмяУровня = "MunDistrict" ИЛИ ИмяУровня = "Settlement" Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + Функция ПредставлениеАдресаВСвободнойФорме(Знач Адрес, Знач ВключатьСтрануВПредставление) Если ВключатьСтрануВПредставление И Адрес.Свойство("Country") И НЕ ПустаяСтрока(Адрес.Country) Тогда @@ -823,21 +503,6 @@ КонецФункции -Функция КонструкторРезультатаВыбора() Экспорт - - Результат = Новый Структура(); - Результат.Вставить("РегионЗагружен", Неопределено); - Результат.Вставить("Идентификатор", ""); - Результат.Вставить("Представление", ""); - Результат.Вставить("КраткоеПредставлениеОшибки", ""); - Результат.Вставить("Отказ", Ложь); - Результат.Вставить("Уровень", 0); - Результат.Вставить("Муниципальный", Неопределено); - Результат.Вставить("ПредлагатьЗагрузкуКлассификатора", Ложь); - Возврат Результат; - -КонецФункции - // Возвращает пустую структура адреса. // // Возвращаемое значение: @@ -880,73 +545,6 @@ КонецФункции -// Возвращает строку списка полей. -// -// Параметры: -// СоответствиеПолей - СписокЗначений - соответствия полей. -// БезПустыхПолей - Булево - необязательный флаг сохранения полей с пустыми значениями. -// -// Возвращаемое значение: -// Строка - результат, преобразованный из списка. -// -Функция ПреобразоватьСписокПолейВСтроку(СоответствиеПолей, БезПустыхПолей = Истина) Экспорт - - КвартираДобавлена = Ложь; - КорпусДобавлен = Ложь; - ПредыдущиеЗначение = Неопределено; - - СтруктураЗначенийПолей = Новый Структура; - Для Каждого Элемент Из СоответствиеПолей Цикл - - Если Элемент.Представление = "Корпус" ИЛИ Элемент.Представление = "ТипКорпуса" Тогда - Если ПредыдущиеЗначение <> Неопределено И ПредыдущиеЗначение.Представление = "ТипКорпуса" - И ПредыдущиеЗначение.Значение = "Корпус" Тогда - СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); - КорпусДобавлен = Истина; - ИначеЕсли НЕ КорпусДобавлен Тогда - СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); - КонецЕсли; - ИначеЕсли Элемент.Представление = "Квартира" ИЛИ Элемент.Представление = "ТипКвартиры" Тогда - Если ПредыдущиеЗначение <> Неопределено И ПредыдущиеЗначение.Представление = "ТипКвартиры" - И ПредыдущиеЗначение.Значение = "Квартира" Тогда - СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); - КвартираДобавлена = Истина; - ИначеЕсли НЕ КвартираДобавлена Тогда - СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); - КонецЕсли; - Иначе - СтруктураЗначенийПолей.Вставить(Элемент.Представление, Элемент.Значение); - КонецЕсли; - ПредыдущиеЗначение = Элемент; - КонецЦикла; - - Возврат СтрокаПолей(СтруктураЗначенийПолей, БезПустыхПолей); -КонецФункции - -// Возвращает строку списка полей. -// -// Параметры: -// СтруктураЗначенийПолей - Структура - структура значений полей. -// БезПустыхПолей - Булево - необязательный флаг сохранения полей с пустыми значениями. -// -// Возвращаемое значение: -/// Строка - результат преобразования из структуры. -// -Функция СтрокаПолей(СтруктураЗначенийПолей, БезПустыхПолей = Истина) Экспорт - - Результат = ""; - Для Каждого ЗначениеПоля Из СтруктураЗначенийПолей Цикл - Если БезПустыхПолей И ПустаяСтрока(ЗначениеПоля.Значение) Тогда - Продолжить; - КонецЕсли; - - Результат = Результат + ?(Результат = "", "", Символы.ПС) - + ЗначениеПоля.Ключ + "=" + СтрЗаменить(ЗначениеПоля.Значение, Символы.ПС, Символы.ПС + Символы.Таб); - КонецЦикла; - - Возврат Результат; -КонецФункции - #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСБанками/Module.bsl b/SSL/src/CommonModules/РаботаСБанками/Module.bsl index 9945155e4..d8e2f47cd 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Получает данные из справочника КлассификаторБанков по значениям БИК и корреспондентского счета банка. @@ -37,7 +45,7 @@ КонецПроцедуры -// Возвращает текстовое описание причины, по которой банк отмечен недействительным. +// Возвращает текстовое описание причины, по которой банк отмечен как недействительный. // // Параметры: // Банк - СправочникСсылка.КлассификаторБанков - банк, для которого необходимо получить текст пояснения. diff --git a/SSL/src/CommonModules/РаботаСБанкамиГлобальный/Module.bsl b/SSL/src/CommonModules/РаботаСБанкамиГлобальный/Module.bsl index 8f13c34fc..88dc93a90 100644 --- a/SSL/src/CommonModules/РаботаСБанкамиГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанкамиГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Выводит оповещение о необходимости обновления классификатора банков. diff --git a/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl index 889b3927a..1b07af3e1 100644 --- a/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/РаботаСБанкамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСБанкамиПереопределяемый/Module.bsl index 6cedd27b2..4ba978fd0 100644 --- a/SSL/src/CommonModules/РаботаСБанкамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанкамиПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Включает/отключает показ предупреждений о необходимости обновления классификатора банков. diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index 0d92ccece..6c3758dd6 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Добавляет в справочник валют валюты из классификатора. @@ -23,15 +31,15 @@ // Возвращает курс валюты на дату. // // Параметры: -// Валюта - СправочникСсылка.Валюты - Валюта, для которой получается курс. -// ДатаКурса - Дата - Дата, на которую получается курс. +// Валюта - СправочникСсылка.Валюты - валюта, для которой получается курс. +// ДатаКурса - Дата - дата, на которую получается курс. // // Возвращаемое значение: -// Структура - Параметры курса. -// * Курс - Число - Курс валюты на указанную дату. -// * Кратность - Число - Кратность валюты на указанную дату. -// * Валюта - СправочникСсылка.Валюты - Ссылка валюты. -// * ДатаКурса - Дата - Дата получения курса. +// Структура - параметры курса: +// * Курс - Число - курс валюты на указанную дату. +// * Кратность - Число - кратность валюты на указанную дату. +// * Валюта - СправочникСсылка.Валюты - ссылка валюты. +// * ДатаКурса - Дата - дата получения курса. // Функция ПолучитьКурсВалюты(Валюта, ДатаКурса) Экспорт @@ -88,6 +96,28 @@ КонецФункции +// Предназначена для использования в конструкторе типа Число для денежных полей. +// +// Параметры: +// ДопустимыйЗнакПоля - ДопустимыйЗнак - определяет допустимый знак числа. Значение по умолчанию - ДопустимыйЗнак.Любой. +// +// Возвращаемое значение: +// ОписаниеТипов - тип значения для денежного поля. +// +Функция ОписаниеТипаДенежногоПоля(Знач ДопустимыйЗнакПоля = Неопределено) Экспорт + + Если ДопустимыйЗнакПоля = Неопределено Тогда + ДопустимыйЗнакПоля = ДопустимыйЗнак.Любой; + КонецЕсли; + + Если ДопустимыйЗнакПоля = ДопустимыйЗнак.Любой Тогда + Возврат Метаданные.ОпределяемыеТипы.ДенежнаяСуммаЛюбогоЗнака.Тип; + КонецЕсли; + + Возврат Метаданные.ОпределяемыеТипы.ДенежнаяСуммаНеотрицательная.Тип; + +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -105,7 +135,7 @@ МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если ОбщегоНазначения.РазделениеВключено() // В модели сервиса обновляется автоматически. - Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() + Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Или Не ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Или МодульТекущиеДелаСервер.ДелоОтключено("КлассификаторВалют") Тогда Возврат; @@ -168,7 +198,7 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт - Если ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + Если ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда КурсыОбновляютсяОтветственными = Ложь; // В модели сервиса обновляются автоматически. ИначеЕсли НЕ ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Тогда КурсыОбновляютсяОтветственными = Ложь; // Пользователь не может обновлять курсы валют. @@ -420,50 +450,14 @@ Процедура ОбновитьКурсВалюты(Параметры, АдресРезультата) Экспорт - ПодчиненнаяВалюта = Параметры.ПодчиненнаяВалюта; - СпособУстановкиКурса = Параметры.СпособУстановкиКурса; + ЗависимаяВалюта = Параметры.Валюта; + СпособУстановкиКурса = ЗависимаяВалюта.СпособУстановкиКурса; + + СписокВалют = Новый Массив; Если СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | КурсыВалют.Период, - | КурсыВалют.Валюта, - | КурсыВалют.Курс, - | КурсыВалют.Кратность - |ИЗ - | РегистрСведений.КурсыВалют КАК КурсыВалют - |ГДЕ - | КурсыВалют.Валюта = &ВалютаИсточник"; - Запрос.УстановитьПараметр("ВалютаИсточник", ПодчиненнаяВалюта.ОсновнаяВалюта); - - Выборка = Запрос.Выполнить().Выбрать(); - - НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Валюта.Установить(ПодчиненнаяВалюта.Ссылка); - - Наценка = ПодчиненнаяВалюта.Наценка; - - Пока Выборка.Следующий() Цикл - - НоваяЗаписьНабораКурсов = НаборЗаписей.Добавить(); - НоваяЗаписьНабораКурсов.Валюта = ПодчиненнаяВалюта.Ссылка; - НоваяЗаписьНабораКурсов.Кратность = Выборка.Кратность; - НоваяЗаписьНабораКурсов.Курс = Выборка.Курс + Выборка.Курс * Наценка / 100; - НоваяЗаписьНабораКурсов.Период = Выборка.Период; - - КонецЦикла; - - НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют"); - Если ПодчиненнаяВалюта.ДополнительныеСвойства.Свойство("ЭтоНовый") Тогда - НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - КонецЕсли; - - НаборЗаписей.Записать(); - + СписокВалют.Добавить(ЗависимаяВалюта.ОсновнаяВалюта); ИначеЕсли СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РасчетПоФормуле Тогда - - // Получить основные валюты для ПодчиненнаяВалюта. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -473,33 +467,76 @@ |ГДЕ | &ФормулаРасчетаКурса ПОДОБНО ""%"" + Валюты.Наименование + ""%"""; - Запрос.УстановитьПараметр("ФормулаРасчетаКурса", ПодчиненнаяВалюта.ФормулаРасчетаКурса); - ОсновныеВалюты = Запрос.Выполнить().Выгрузить(); + Запрос.УстановитьПараметр("ФормулаРасчетаКурса", ЗависимаяВалюта.ФормулаРасчетаКурса); + РезультатЗапроса = Запрос.Выполнить(); - Если ОсновныеВалюты.Количество() = 0 Тогда + Если РезультатЗапроса.Пустой() Тогда ТекстОшибки = НСтр("ru = 'В формуле должна быть использована хотя бы одна основная валюта.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ФормулаРасчетаКурса"); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "Объект.ФормулаРасчетаКурса"); ВызватьИсключение ТекстОшибки; КонецЕсли; - ОбновленныеПериоды = Новый Соответствие; // Кэш для однократного пересчета курса за один и тот же период. - // Перезаписать курсы основных валют для обновления курса валюты ПодчиненнаяВалюта. - Для каждого ЗаписьОсновнойВалюты Из ОсновныеВалюты Цикл - НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Валюта.Установить(ЗаписьОсновнойВалюты.Ссылка); - НаборЗаписей.Прочитать(); - НаборЗаписей.ДополнительныеСвойства.Вставить("ОбновитьКурсЗависимойВалюты", ПодчиненнаяВалюта.Ссылка); - НаборЗаписей.ДополнительныеСвойства.Вставить("ОбновленныеПериоды", ОбновленныеПериоды); - - Если ПодчиненнаяВалюта.ДополнительныеСвойства.Свойство("ЭтоНовый") Тогда - НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - КонецЕсли; - - НаборЗаписей.Записать(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + СписокВалют.Добавить(Выборка.Ссылка); КонецЦикла - КонецЕсли; + ТекстЗапроса = + "ВЫБРАТЬ + | КурсыВалют.Период КАК Период, + | КурсыВалют.Валюта КАК Валюта + |ИЗ + | РегистрСведений.КурсыВалют КАК КурсыВалют + |ГДЕ + | КурсыВалют.Валюта В(&Валюта) + | + |СГРУППИРОВАТЬ ПО + | КурсыВалют.Период, + | КурсыВалют.Валюта + | + |УПОРЯДОЧИТЬ ПО + | Период"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Валюта", СписокВалют); + + Выборка = Запрос.Выполнить().Выбрать(); + + ОбновленныеПериоды = Новый Соответствие; + Пока Выборка.Следующий() Цикл + Если ОбновленныеПериоды[Выборка.Период] <> Неопределено Тогда + Продолжить; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Для Каждого Валюта Из СписокВалют Цикл + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КурсыВалют"); + ЭлементБлокировки.УстановитьЗначение("Валюта", Валюта); + ЭлементБлокировки.УстановитьЗначение("Период", Выборка.Период); + КонецЦикла; + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Валюта.Установить(Выборка.Валюта); + НаборЗаписей.Отбор.Период.Установить(Выборка.Период); + НаборЗаписей.Прочитать(); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОбновитьКурсЗависимойВалюты", ЗависимаяВалюта); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОбновленныеПериоды", ОбновленныеПериоды); + НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + ОбновленныеПериоды.Вставить(Выборка.Период, Истина); + КонецЦикла; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl index c243fe30f..00943e6c9 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Проверяет актуальность курсов всех валют. diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютГлобальный/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютГлобальный/Module.bsl index f7429b78d..ce071abb3 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Выводит оповещение о необходимости обновления курсов валют. diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl index fe311c3c0..cd0651f0e 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl index eebbc6174..9c3d6c9d4 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl @@ -1,19 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс -// Пересчитывает Сумму из Текущей валюты в Новую валюту по параметрам их курсов. -// Параметры курсов валют можно получить воспользовавшись функцией. -// РаботаСКурсамиВалют.ПолучитьКурсВалюты(Валюта, ДатаКурса). +// Пересчитывает сумму из текущей валюты в новую валюту по параметрам их курсов. +// Параметры курсов валют можно получить функцией РаботаСКурсамиВалют.ПолучитьКурсВалюты. // // Параметры: -// Сумма - Число - Сумма, которую следует пересчитать. -// ПараметрыТекущегоКурса - Структура - Параметры курса валюты, из которой надо пересчитать. -// * Валюта - СправочникСсылка.Валюты - Ссылка пересчитываемой валюты. -// * Курс - Число - Курс пересчитываемой валюты. -// * Кратность - Число - Кратность пересчитываемой валюты. -// ПараметрыНовогоКурса - Структура - Параметры курса валюты, в которую надо пересчитать. -// * Валюта - СправочникСсылка.Валюты - Ссылка валюты, в которую идет пересчет. -// * Курс - Число - Курс валюты, в которую идет пересчет. -// * Кратность - Число - Кратность валюты, в которую идет пересчет. +// Сумма - Число - сумма, которую следует пересчитать. +// +// ПараметрыТекущегоКурса - Структура - параметры курса валюты, из которой надо пересчитать. +// * Валюта - СправочникСсылка.Валюты - ссылка пересчитываемой валюты. +// * Курс - Число - курс пересчитываемой валюты. +// * Кратность - Число - кратность пересчитываемой валюты. +// +// ПараметрыНовогоКурса - Структура - параметры курса валюты, в которую надо пересчитать. +// * Валюта - СправочникСсылка.Валюты - ссылка валюты, в которую идет пересчет. +// * Курс - Число - курс валюты, в которую идет пересчет. +// * Кратность - Число - кратность валюты, в которую идет пересчет. // // Возвращаемое значение: // Число - Сумма, пересчитанная по новому курсу. @@ -31,16 +40,11 @@ Или ПараметрыНовогоКурса.Курс = 0 Или ПараметрыНовогоКурса.Кратность = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При пересчете в валюту %1 сумма %2 установлена в нулевое значение, т.к. курс валюты не задан.'"), - ПараметрыНовогоКурса.Валюта, - Формат(Сумма, "ЧДЦ=2; ЧН=0"))); - Возврат 0; - КонецЕсли; - Возврат Окр((Сумма * ПараметрыТекущегоКурса.Курс * ПараметрыНовогоКурса.Кратность) / (ПараметрыНовогоКурса.Курс * ПараметрыТекущегоКурса.Кратность), 2); + Возврат Окр((Сумма * ПараметрыТекущегоКурса.Курс * ПараметрыНовогоКурса.Кратность) + / (ПараметрыНовогоКурса.Курс * ПараметрыТекущегоКурса.Кратность), 2); КонецФункции #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютПереопределяемый/Module.bsl index 17053b1d1..f0ac61ce9 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Включает/отключает показ предупреждений о необходимости обновления курсов валют. diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl index b11df1eb9..f6b57ac64 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выполняет отправку почтовых сообщений. @@ -46,10 +54,14 @@ // РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате // Rich Text. // * Соединение - ИнтернетПочта - существующее соединение с почтовым сервером. Если не указано, то создается новое. -// * ПротоколПочты - Строка - если указано значение "IMAP", то письмо будет передано по протоколу IMAP, иначе - по -// протоколу SMTP. +// * ПротоколПочты - Строка - если указано значение "IMAP", то письмо будет передано по протоколу IMAP, если по указано значение "Все", то по +// протоколу SMTP и по протоколу IMAP, если ничего не указано то по протоколу SMTP. +// Параметр имеет смысл, только наличии действующего соединения, указанного в параметр Соединение. +// В противном случае протокол будет определен автоматически при установке соединения. // * ИдентификаторСообщения - Строка - (возвращаемый параметр) идентификатор отправленного почтового сообщения на SMTP // сервере; +// * ИдентификаторСообщенияОтправкаIMAP - Строка - (возвращаемый параметр) идентификатор отправленного почтового сообщения на IMAP +// сервере; // * ОшибочныеПолучатели - Соответствие - (возвращаемый параметр) список адресов, по которым отправка не выполнена. // См. возвращаемое значение метода ИнтернетПочта.Послать() в синтакс-помощнике. // @@ -332,16 +344,18 @@ // Функция УчетнаяЗаписьНастроена(УчетнаяЗапись, Знач ДляОтправки = Неопределено, Знач ДляПолучения = Неопределено) Экспорт - Параметры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "АдресЭлектроннойПочты,СерверВходящейПочты,СерверИсходящейПочты,ИспользоватьДляПолучения,ИспользоватьДляОтправки"); + Параметры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "АдресЭлектроннойПочты,СерверВходящейПочты,СерверИсходящейПочты,ИспользоватьДляПолучения,ИспользоватьДляОтправки,ПротоколВходящейПочты"); Если ДляОтправки = Неопределено Тогда ДляОтправки = Параметры.ИспользоватьДляОтправки; КонецЕсли; Если ДляПолучения = Неопределено Тогда ДляПолучения = Параметры.ИспользоватьДляПолучения; КонецЕсли; + Возврат Не (ПустаяСтрока(Параметры.АдресЭлектроннойПочты) Или ДляПолучения И ПустаяСтрока(Параметры.СерверВходящейПочты) - Или ДляОтправки И ПустаяСтрока(Параметры.СерверИсходящейПочты)); + Или ДляОтправки И (ПустаяСтрока(Параметры.СерверИсходящейПочты) + Или (Параметры.ПротоколВходящейПочты = "IMAP" И ПустаяСтрока(Параметры.СерверВходящейПочты)))); КонецФункции diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl index 60af97e50..488f3202e 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Проверка учетной записи электронной почты. @@ -20,10 +28,6 @@ Возврат ПравоДоступа("Добавление", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты); КонецФункции -Функция УчетнаяЗаписьНастроена(УчетнаяЗапись) Экспорт - Возврат РаботаСПочтовымиСообщениями.УчетнаяЗаписьНастроена(УчетнаяЗапись, Ложь, Ложь); -КонецФункции - Функция СведенияДляОтправки(ПараметрыОтправки) Экспорт Перем Вложения; @@ -52,8 +56,8 @@ Возврат Ложь; КонецФункции -Функция ПодготовитьВложения(Вложения, НастройкиСохранения) Экспорт +Процедура ПодготовитьВложения(Вложения, НастройкиСохранения) Экспорт РаботаСПочтовымиСообщениямиСлужебный.ПодготовитьВложения(Вложения, НастройкиСохранения); -КонецФункции +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl index 842a3317e..e1124f08a 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму создания нового письма. diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl index d1d9f0085..7a272b2ba 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается перед открытием формы нового письма. diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl index 4c00b3c1b..b0f1d5e0a 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Переопределяет настройки подсистемы. @@ -16,7 +24,7 @@ // // Параметры: // ПараметрыПисьма - Структура - содержит всю необходимую информацию о письме: -// * Кому - Массив структур, строка - (обязательный) Интернет адрес получателя письма. +// * Кому - Массив - (обязательный) Интернет адрес получателя письма. // Адрес - строка - почтовый адрес. // Представление - строка - имя адресата. // diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl index ec2d9a12a..06c785603 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Предназначена для перевода паролей в безопасное хранилище. @@ -220,7 +228,7 @@ Обработчик = Обработчики.Добавить(); Обработчик.НачальноеЗаполнение = Истина; Обработчик.Процедура = "РаботаСПочтовымиСообщениямиСлужебный.ЗаполнитьСистемнуюУчетнуюЗапись"; - Обработчик.Версия = "1.0.0.1"; + Обработчик.РежимВыполнения = "Оперативно"; Обработчик = Обработчики.Добавить(); Обработчик.Процедура = "РаботаСПочтовымиСообщениямиСлужебный.ЗаполнитьНовыеРеквизитыУчетныхЗаписей"; @@ -245,6 +253,7 @@ Обработчик.ЧитаемыеОбъекты = СтрСоединить(ЧитаемыеОбъекты, ","); КонецЕсли; + КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа. @@ -459,7 +468,6 @@ Картинки = СодержимоеПисьма.Картинки; ТипТекста = ТипТекстаПочтовогоСообщения.HTML; - ДополнительныеВложения = Новый Массив; Для Каждого Картинка Из Картинки Цикл ИмяКартинки = Картинка.Ключ; ДанныеКартинки = Картинка.Значение; @@ -527,17 +535,38 @@ СоздаватьСоединение = ТипЗнч(Соединение) <> Тип("ИнтернетПочта"); Если СоздаватьСоединение Тогда + УстановитьОтключениеБезопасногоРежима(Истина); Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись); + ПротоколПодключения = ПротоколПодключенияПоПрофилю(Профиль); + Если ПротоколПодключения = ПротоколИнтернетПочты.POP3 Тогда + ПротоколПочты = ""; + Иначе + ПротоколПочты = "Все"; + КонецЕсли; Соединение = Новый ИнтернетПочта; - Соединение.Подключиться(Профиль); + Соединение.Подключиться(Профиль, ПротоколПодключения); + ОпределитьПапкуОтправленные(ПротоколПодключения, Соединение); + КонецЕсли; Попытка - ОшибочныеПолучатели = Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, - ?(ПротоколПочты = "IMAP", ПротоколИнтернетПочты.IMAP, ПротоколИнтернетПочты.SMTP)); + + Если ПротоколПочты = "" Или ПротоколПочты = "Все" Тогда + ОшибочныеПолучатели = Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, ПротоколИнтернетПочты.SMTP); + ПараметрыОтправки.Вставить("ИдентификаторСообщения", Письмо.ИдентификаторСообщения); + ПараметрыОтправки.Вставить("ОшибочныеПолучатели", ОшибочныеПолучатели); + ПараметрыОтправки.Вставить("ИдентификаторСообщенияОтправкаIMAP", ""); + КонецЕсли; + + Если ПротоколПочты = "IMAP" Или ПротоколПочты = "Все" И Не ПочтовыйСерверХранитПисьмаОтправленныеПоSMTP(Профиль) Тогда + Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения, ПротоколИнтернетПочты.IMAP); + ПараметрыОтправки.Вставить("ИдентификаторСообщенияОтправкаIMAP", Письмо.ИдентификаторСообщения); + КонецЕсли; + Исключение - Если СоздаватьСоединение Тогда + + Если СоздаватьСоединение Тогда Попытка Соединение.Отключиться(); Исключение @@ -545,19 +574,41 @@ // в вызывающий код передается исходное исключение, которое будет там обработано. КонецПопытки; КонецЕсли; + ВызватьИсключение; + КонецПопытки; Если СоздаватьСоединение Тогда Соединение.Отключиться(); УстановитьОтключениеБезопасногоРежима(Ложь); КонецЕсли; - - ПараметрыОтправки.Вставить("ИдентификаторСообщения", Письмо.ИдентификаторСообщения); - ПараметрыОтправки.Вставить("ОшибочныеПолучатели", ОшибочныеПолучатели); КонецПроцедуры +Процедура ОпределитьПапкуОтправленные(ПротоколПодключения, Соединение) + + Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP Тогда + ПочтовыеЯщики = Соединение.ПолучитьПочтовыеЯщики(); + Для Каждого ПочтовыйЯщик Из ПочтовыеЯщики Цикл + Если НРег(ПочтовыйЯщик) = "отправленные" + Или НРег(ПочтовыйЯщик) = "sent" Тогда + + Соединение.ТекущийПочтовыйЯщик = ПочтовыйЯщик; + Прервать; + + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Функция ПротоколПодключенияПоПрофилю(Профиль) + + Возврат ?(ПустаяСтрока(Профиль.АдресСервераIMAP),ПротоколИнтернетПочты.POP3, ПротоколИнтернетПочты.IMAP); + +КонецФункции + Функция ЗагрузитьСообщения(Знач УчетнаяЗапись, Знач ПараметрыЗагрузки = Неопределено) Экспорт // Используется для проверки возможности входа на почтовый ящик. @@ -744,7 +795,6 @@ Процедура ЗаполнитьВложенияПоПисьму(Вложения, Письмо) Для Каждого Вложение Из Письмо.Вложения Цикл - ИмяВложения = Вложение.Имя; Если ТипЗнч(Вложение.Данные) = Тип("ДвоичныеДанные") Тогда Вложения.Вставить(Вложение.Имя, Вложение.Данные); Иначе @@ -877,7 +927,7 @@ // Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт - НастройкиУчетнойЗаписи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ИспользоватьДляОтправки,ИспользоватьДляПолучения"); + НастройкиУчетнойЗаписи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ИспользоватьДляОтправки,ИспользоватьДляПолучения,ПротоколВходящейПочты"); СообщениеОбОшибке = ""; ДополнительноеСообщение = ""; @@ -886,14 +936,16 @@ Попытка ПроверитьВозможностьПодключенияКПочтовомуСерверу(УчетнаяЗапись, Ложь); Исключение - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка в настройках исходящей почты: %1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось подключиться к серверу SMTP: %1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Если Не НастройкиУчетнойЗаписи.ИспользоватьДляПолучения Тогда ДополнительноеСообщение = Символы.ПС + НСтр("ru = '(Выполнена проверка отправки электронных сообщений.)'"); КонецЕсли; КонецЕсли; - Если НастройкиУчетнойЗаписи.ИспользоватьДляПолучения Тогда + Если НастройкиУчетнойЗаписи.ИспользоватьДляПолучения + Или НастройкиУчетнойЗаписи.ИспользоватьДляОтправки И НастройкиУчетнойЗаписи.ПротоколВходящейПочты = "IMAP" Тогда + Попытка ПроверитьВозможностьПодключенияКПочтовомуСерверу(УчетнаяЗапись, Истина); Исключение @@ -901,12 +953,14 @@ СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС; КонецЕсли; - СообщениеОбОшибке = СообщениеОбОшибке + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка в настройках входящей почты: %1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) ); + СообщениеОбОшибке = СообщениеОбОшибке + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось подключиться к серверу %1: %2'"), + НастройкиУчетнойЗаписи.ПротоколВходящейПочты, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; + Если Не НастройкиУчетнойЗаписи.ИспользоватьДляОтправки Тогда ДополнительноеСообщение = Символы.ПС + НСтр("ru = '(Выполнена проверка получения электронных сообщений.)'"); КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -967,7 +1021,7 @@ // при обмене данными в распределенной информационной базе. // // Параметры: -// см. описание соответствующих обработчиков событий в синтаксис-помощнике. +// см. описание соответствующих обработчиков событий в синтакс-помощнике. // Процедура ПриПолученииДанных(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) @@ -983,7 +1037,7 @@ КонецПроцедуры -Функция ПодготовитьВложения(Вложения, НастройкиСохранения) Экспорт +Процедура ПодготовитьВложения(Вложения, НастройкиСохранения) Экспорт Перем ЗаписьZipФайла, ИмяАрхива; Результат = Новый Массив; @@ -998,7 +1052,6 @@ // подготовка временной папки ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ИмяВременнойПапки); - ИспользованныеИменаФайлов = Новый Соответствие; ВыбранныеФорматыСохранения = НастройкиСохранения.ФорматыСохранения; ТаблицаФорматов = СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента(); @@ -1026,7 +1079,8 @@ Продолжить; КонецЕсли; - Для Каждого ТипФайла Из ВыбранныеФорматыСохранения Цикл + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + ТипФайла = ТипФайлаТабличногоДокумента[ВыбранныйФормат]; НастройкиФормата = ТаблицаФорматов.НайтиСтроки(Новый Структура("ТипФайлаТабличногоДокумента", ТипФайла))[0]; ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(Вложение.Представление); Если ИмяФайлаДляАрхива = Неопределено Тогда @@ -1067,7 +1121,6 @@ // Если архив подготовлен, записываем и помещаем его во временное хранилище. Если ЕстьДобавленныеФайлыВАрхив Тогда ЗаписьZipФайла.Записать(); - ФайлАрхива = Новый Файл(ИмяАрхива); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива); // Используем имеющийся адрес во временном хранилище, привязанный к форме. @@ -1088,9 +1141,7 @@ УдалитьФайлы(ИмяАрхива); КонецЕсли; - Возврат Результат; - -КонецФункции +КонецПроцедуры Функция ВычислитьИспользованиеВывода(ТабличныйДокумент) Если ТабличныйДокумент.Вывод = ИспользованиеВывода.Авто Тогда @@ -1303,4 +1354,11 @@ Возврат Результат; КонецФункции + +Функция ПочтовыйСерверХранитПисьмаОтправленныеПоSMTP(ИнтернетПочтовыйПрофиль) + + Возврат НРег(ИнтернетПочтовыйПрофиль.АдресСервераSMTP) = "smtp.gmail.com"; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl index 4fde2dae9..75e1223d3 100644 --- a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Работа с файлами". // @@ -6,28 +14,38 @@ #Область ПрограммныйИнтерфейс // Возвращает двоичные данные файла. -// Если двоичные данные файла не найдены в информационной базе или в томах, будет вызвано исключение. // // Параметры: // ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. // -// Возвращаемое значение: -// ДвоичныеДанные - двоичные данные присоединенного файла. +// ВызыватьИсключение - Булево - Если указать Ложь, то функция будет возвращать Неопределено +// вместо вызова исключений. Значение по умолчанию - Истина. // -Функция ДвоичныеДанныеФайла(Знач ПрисоединенныйФайл) Экспорт +// Возвращаемое значение: +// ДвоичныеДанные, Неопределено - Двоичные данные присоединенного файла. Если двоичные данные файла не найдены +// в информационной базе или в томах, вызывает исключение. Если двоичные данные не +// найдены и параметр ВызыватьИсключение принимает значение Ложь, тогда +// возвращаемое значение - Неопределено. +// +Функция ДвоичныеДанныеФайла(Знач ПрисоединенныйФайл, Знач ВызыватьИсключение = Истина) Экспорт ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДвоичныеДанныеФайла", "ПрисоединенныйФайл", ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); - - УстановитьПривилегированныйРежим(Истина); ФайлОбъект = РаботаСФайламиСлужебный.ФайлОбъект(ПрисоединенныйФайл); + Если ФайлОбъект = Неопределено + И Не ВызыватьИсключение Тогда + Возврат Неопределено; + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - + Результат = ХранилищеФайлаИзИнформационнойБазы(ФайлОбъект.Ссылка); Если Результат <> Неопределено Тогда Возврат Результат.Получить(); + ИначеЕсли Не ВызыватьИсключение Тогда + Возврат Неопределено; КонецЕсли; // Запись в журнал регистрации. @@ -36,7 +54,7 @@ | |Ссылка на файл: ""%1"".'"), ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Открытие файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Открытие файла'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя], ПрисоединенныйФайл, @@ -47,7 +65,7 @@ Строка(ТипЗнч(ФайлОбъект.ВладелецФайла)), ФайлОбъект.ВладелецФайла); - ВызватьИсключение РаботаСФайламиСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( + ВызватьИсключение РаботаСФайламиСлужебный.ОшибкаФайлНеНайденВХранилищеФайлов( ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение, Ложь, ПредставлениеВладельцаФайла); @@ -57,9 +75,14 @@ Попытка Возврат Новый ДвоичныеДанные(ПолныйПуть); Исключение + + Если Не ВызыватьИсключение Тогда + Возврат Неопределено; + КонецЕсли; + // Запись в журнал регистрации. СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), ПрисоединенныйФайл); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Получение файла из тома'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Получение файла из тома'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя], ПрисоединенныйФайл, @@ -70,7 +93,7 @@ Строка(ТипЗнч(ФайлОбъект.ВладелецФайла)), ФайлОбъект.ВладелецФайла); - ВызватьИсключение РаботаСФайламиСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( + ВызватьИсключение РаботаСФайламиСлужебный.ОшибкаФайлНеНайденВХранилищеФайлов( ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение, , ПредставлениеВладельцаФайла); @@ -84,19 +107,17 @@ // и как значение параметра ДанныеФайла в других процедурах и функциях. // // Параметры: -// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. -// -// ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, -// во временное хранилище которой надо поместить файл и -// вернуть адрес в свойстве СсылкаНаДвоичныеДанныеФайла. -// -// ПолучатьСсылкуНаДвоичныеДанные - Булево - если передать Ложь, то ссылка на двоичные данные в СсылкаНаДвоичныеДанныеФайла -// не будет получена, что существенно ускорит выполнение для больших двоичных данных. -// -// ДляРедактирования - Булево - если указать Истина, то файл будет захвачен для редактирования. +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с файлом. +// ДополнительныеПараметры - Структура - см. РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла. +// УдалитьПолучатьСсылкуНаДвоичныеДанные - Булево - Устарел, следует использовать ДополнительныеПараметры. +// УдалитьДляРедактирования - Булево - Устарел, следует использовать ДополнительныеПараметры. // // Возвращаемое значение: -// Структура - со свойствами: +// Структура, Неопределено - Структура, содержащая информацию о присоединенном файле. Если файл не найден или +// отсутствует часть обязательной информации о файле и свойство ВызыватьИсключение параметра +// ДополнительныеПараметры принимает значение Ложь, возвращаемое значение - Неопределено. Если файл +// не найден или отсутствует часть обязательной информации о файле и ВызыватьИсключение отсутствует +// или принимает значение Истина, вызывает исключение. Свойства структуры: // * СсылкаНаДвоичныеДанныеФайла - Строка - Адрес во временном хранилище, по которому помещены данные. // * ОтносительныйПуть - Строка - Относительный путь файла. // * ДатаМодификацииУниверсальная - Дата - Дата изменения фала. @@ -108,15 +129,45 @@ // Неопределено - Ссылка на пользователя, занявшего файл. // * ПодписанЭП - Булево - Признак, что файл подписан. // * Зашифрован - Булево - Признак, что файл зашифрован. +// * Версия - ОпределяемыйТип.ПрисоединенныйФайл - Если справочник файлов поддерживает создание +// версий, содержит ссылку на текущую версию файла. В ином случае содержит ссылку на файл. +// * НомерВерсии - Число - Если справочник файлов поддерживает создание версий, содержит номер +// текущей версии файла, иначе - 0. +// * Том - СправочникСсылка.ТомаХраненияФайлов - Том хранения файла. +// * Автор - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов, СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи - Автор файла. +// * СтатусИзвлеченияТекста - ПеречислениеСсылка.СтатусыИзвлеченияТекстаФайлов - Статус извлечения текста из файла. +// * ПолноеНаименованиеВерсии - Строка - Если справочник файлов поддерживает создание версий, содержит полное +// наименование текущей версии файла. В ином случае содержит полное наименование файла. +// * КодировкаТекущейВерсии - Строка - Кодировка текстового файла. +// * НаЧтение - Булево - Признак того, что файл редактируется пользователем, отличным от текущего. +// * ПолноеИмяФайлаВРабочемКаталоге - Строка - Путь к файлу в рабочем каталоге. +// * ВРабочемКаталогеНаЧтение - Булево - Файл в рабочем каталоге помечен только для чтения. +// * РабочийКаталогВладельца - Строка - Путь к рабочему каталогу владельца. +// * ПапкаДляСохранитьКак - Строка - Путь к каталогу сохранения. // * ФайлРедактируется - Булево - Признак, что файл занят для редактирования. // * ФайлРедактируетТекущийПользователь - Булево - Признак, что файл занят для редактирования текущим пользователем. -// * Кодировка - Строка - Кодировка, в которой сохранен файл. Список поддерживаемых кодировок -// см. в справке к методу глобального контекста "ПолучитьДвоичныеДанныеИзСтроки". +// * Служебный - Булево - Признак, что файл является служебным. // Функция ДанныеФайла(Знач ПрисоединенныйФайл, - Знач ИдентификаторФормы = Неопределено, - Знач ПолучатьСсылкуНаДвоичныеДанные = Истина, - Знач ДляРедактирования = Ложь) Экспорт + Знач ДополнительныеПараметры = Неопределено, + Знач УдалитьПолучатьСсылкуНаДвоичныеДанные = Истина, + Знач УдалитьДляРедактирования = Ложь) Экспорт + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + + ДляРедактирования = ?(ДополнительныеПараметры.Свойство("ДляРедактирования"), ДополнительныеПараметры.ДляРедактирования, Ложь); + ИдентификаторФормы = ?(ДополнительныеПараметры.Свойство("ИдентификаторФормы"), ДополнительныеПараметры.ИдентификаторФормы, Неопределено); + ВызыватьИсключение = ?(ДополнительныеПараметры.Свойство("ВызыватьИсключение"), ДополнительныеПараметры.ВызыватьИсключение, Истина); + ПолучатьСсылкуНаДвоичныеДанные = ?(ДополнительныеПараметры.Свойство("ПолучатьСсылкуНаДвоичныеДанные"), + ДополнительныеПараметры.ПолучатьСсылкуНаДвоичныеДанные, Истина); + + Иначе + ДляРедактирования = УдалитьДляРедактирования; + ИдентификаторФормы = ДополнительныеПараметры; + ВызыватьИсключение = Истина; + ПолучатьСсылкуНаДвоичныеДанные = УдалитьПолучатьСсылкуНаДвоичныеДанные; + КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ПрисоединенныйФайл); @@ -124,9 +175,13 @@ ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ОбщегоНазначенияКлиентСервер.Проверить(ФайлОбъект <> Неопределено, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден присоединенный файл ""%1"" (%2)'"), + Если ВызыватьИсключение Тогда + ОбщегоНазначенияКлиентСервер.Проверить(ФайлОбъект <> Неопределено, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден присоединенный файл ""%1"" (%2)'"), Строка(ПрисоединенныйФайл), ПрисоединенныйФайл.Метаданные())); + ИначеЕсли ФайлОбъект = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; Если ДляРедактирования И Не ЗначениеЗаполнено(ФайлОбъект.Редактирует) Тогда ФайлОбъект.Заблокировать(); @@ -144,9 +199,9 @@ Если ПолучатьСсылкуНаДвоичныеДанные Тогда Если ИспользуетсяВерсионированиеФайлов Тогда - ДвоичныеДанные = ДвоичныеДанныеФайла(ПрисоединенныйФайл.ТекущаяВерсия); + ДвоичныеДанные = ДвоичныеДанныеФайла(ПрисоединенныйФайл.ТекущаяВерсия, ВызыватьИсключение); Иначе - ДвоичныеДанные = ДвоичныеДанныеФайла(ПрисоединенныйФайл); + ДвоичныеДанные = ДвоичныеДанныеФайла(ПрисоединенныйФайл, ВызыватьИсключение); КонецЕсли; Если ТипЗнч(ИдентификаторФормы) = Тип("УникальныйИдентификатор") Тогда СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); @@ -179,9 +234,9 @@ ЕстьВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъектаФайла); Если ЕстьВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда - РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, ПрисоединенныйФайл.ТекущаяВерсия); + РаботаСФайламиСлужебный.ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, ПрисоединенныйФайл.ТекущаяВерсия); Иначе - РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, Неопределено); + РаботаСФайламиСлужебный.ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, Неопределено); КонецЕсли; Результат.Вставить("ФайлРедактируется", ЗначениеЗаполнено(ФайлОбъект.Редактирует)); @@ -199,6 +254,11 @@ КодировкаФайла(ПрисоединенныйФайл, ФайлОбъект.Расширение)); Результат.Вставить("Кодировка", Кодировка); + Результат.Вставить("Служебный", Ложь); + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ФайлОбъект, "Служебный") Тогда + Результат.Служебный = ФайлОбъект.Служебный; + КонецЕсли; + Возврат Результат; КонецФункции @@ -337,12 +397,13 @@ Возврат СправочникПрисоединенныеФайлы <> Неопределено И ПравоДоступа("Добавление", СправочникПрисоединенныеФайлы) - И ТипыХранимыхФайлов.СодержитТип(Тип("СправочникСсылка." + ИмяСправочника)); + И ТипыХранимыхФайлов.СодержитТип(Тип("СправочникСсылка." + ИмяСправочника)) + И Не ТипыХранимыхФайлов.СодержитТип(ТипЗнч(ВладелецФайлов)); КонецФункции -// Добавляет к указанному владельцу файлов новый файл на основании файла из файловой системы. -// Если владельцу файлов поддерживает хранение версий, то будет создана первая версия файла. +// Добавляет новый файл из файловой системы. +// Если справочник файлов поддерживает хранение версий, то будет создана первая версия файла. // // Параметры: // ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому @@ -353,7 +414,7 @@ // Возвращаемое значение: // ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с созданным файлом. // -Функция СоздатьФайлНаОсновеФайлаНаДиске(ВладелецФайлов, ПутьКФайлуНаДиске) Экспорт +Функция ДобавитьФайлСДиска(ВладелецФайлов, ПутьКФайлуНаДиске) Экспорт Файл = Новый Файл(ПутьКФайлуНаДиске); @@ -367,8 +428,8 @@ АдресВременногоХранилищаТекста = ""; Иначе // Попытка извлечения текста, если сервер под Windows. - Если РаботаСФайламиСлужебный.ЭтоПлатформаWindows() Тогда - Текст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ПутьКФайлуНаДиске); + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда + Текст = РаботаСФайламиСлужебный.ИзвлечьТекстИзФайлаНаДиске(ПутьКФайлуНаДиске); АдресВременногоХранилищаТекста = Новый ХранилищеЗначения(Текст); КонецЕсли; КонецЕсли; @@ -473,9 +534,8 @@ // * ВремяИзмененияУниверсальное - Дата - Дата и время изменения файла (UTC+0:00), // если не указана, тогда используется ТекущаяУниверсальнаяДата(). // * ГруппаФайлов - Ссылка - Группа справочника с файлами, в которую будет добавлен новый файл. -// * Кодировка - Строка - Необязательный. Кодировка, в которой сохранен файл. -// Список поддерживаемых кодировок см. в справке к методу глобального контекста -// "ПолучитьДвоичныеДанныеИзСтроки". +// * Служебный - Булево - Если Истина, тогда файл будет скрыт от пользователей. +// Значение по умолчанию - Ложь. // АдресФайлаВоВременномХранилище - Строка - Адрес, указывающий на двоичные данные во временном хранилище. // АдресВременногоХранилищаТекста - Строка - Адрес, указывающий на извлеченный текст из файла во временном хранилище. // Описание - Строка - Текстовое описание файла. @@ -497,9 +557,9 @@ Знач Описание = "", Знач НоваяСсылкаНаФайл = Неопределено) Экспорт - Автор = ПараметрыФайла.Автор; - ВладелецФайлов = ПараметрыФайла.ВладелецФайлов; - ИмяБезРасширения = ПараметрыФайла.ИмяБезРасширения; + Автор = ПараметрыФайла.Автор; + ВладелецФайлов = ПараметрыФайла.ВладелецФайлов; + ИмяБезРасширения = ПараметрыФайла.ИмяБезРасширения; РасширениеБезТочки = ПараметрыФайла.РасширениеБезТочки; ГруппаФайлов = Неопределено; Если ПараметрыФайла.Свойство("ГруппаФайлов") @@ -542,6 +602,14 @@ ИмяСправочника = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( ВладелецФайлов, НоваяСсылкаНаФайл.Метаданные().Имя, ЗаголовокОшибки); КонецЕсли; + + Служебный = Неопределено; + Если ПараметрыФайла.Свойство("Служебный") + И РаботаСФайламиСлужебный.ЕстьРеквизитСлужебный(ИмяСправочника) Тогда + + Служебный = ПараметрыФайла.Служебный; + + КонецЕсли; ПрисоединенныйФайл = Справочники[ИмяСправочника].СоздатьЭлемент(); ПрисоединенныйФайл.УстановитьСсылкуНового(НоваяСсылкаНаФайл); @@ -554,16 +622,20 @@ ПрисоединенныйФайл.Расширение = РасширениеБезТочки; ПрисоединенныйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(); ПрисоединенныйФайл.Размер = ДвоичныеДанные.Размер(); + ПрисоединенныйФайл.Автор = Автор; + ПрисоединенныйФайл.Изменил = Автор; Если ГруппаФайлов <> Неопределено Тогда ПрисоединенныйФайл.Родитель = ГруппаФайлов; КонецЕсли; + Если Служебный <> Неопределено Тогда + ПрисоединенныйФайл.Служебный = Служебный; + КонецЕсли; ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; ИзвлекатьТекст = Метаданные.Справочники[ИмяСправочника].ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска; Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда НачатьТранзакцию(); Попытка - СвояТранзакцияОткрыта = Истина; РаботаСФайламиСлужебный.ЗаписатьФайлВИнформационнуюБазу(НоваяСсылкаНаФайл, ДвоичныеДанные); ПрисоединенныйФайл.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); ПрисоединенныйФайл.ПутьКФайлу = ""; @@ -578,9 +650,12 @@ ПрисоединенныйФайл.ТекстХранилище = Новый ХранилищеЗначения(""); КонецЕсли; - ПрисоединенныйФайл.Автор = Автор; ПрисоединенныйФайл.Заполнить(Неопределено); - ПрисоединенныйФайл.Записать(); + Если Не ЗначениеЗаполнено(ПрисоединенныйФайл.Изменил) Тогда + ПрисоединенныйФайл.Изменил = Пользователи.АвторизованныйПользователь(); + КонецЕсли; + + ПрисоединенныйФайл.Записать(); ЗафиксироватьТранзакцию(); @@ -597,7 +672,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Добавление присоединенного файла'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -626,9 +701,10 @@ ПрисоединенныйФайл.ТекстХранилище = Новый ХранилищеЗначения(""); КонецЕсли; - ПрисоединенныйФайл.Автор = Автор; ПрисоединенныйФайл.Заполнить(Неопределено); - + Если Не ЗначениеЗаполнено(ПрисоединенныйФайл.Изменил) Тогда + ПрисоединенныйФайл.Изменил = Пользователи.АвторизованныйПользователь(); + КонецЕсли; ПрисоединенныйФайл.Записать(); Если РаботаСФайламиСлужебныйВызовСервера.ЭтоСправочникФайлы(ВладелецФайлов) Тогда @@ -656,7 +732,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Добавление присоединенного файла'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -669,13 +745,6 @@ КонецПопытки; КонецЕсли; - Если ПараметрыФайла.Свойство("Кодировка") - И Не ПустаяСтрока(ПараметрыФайла.Кодировка) Тогда - - РаботаСФайламиСлужебныйВызовСервера.ЗаписатьКодировкуВерсииФайла(ПрисоединенныйФайл.Ссылка, ПараметрыФайла.Кодировка); - - КонецЕсли; - Возврат ПрисоединенныйФайл.Ссылка; КонецФункции @@ -712,7 +781,7 @@ // Функция НастройкиРаботыСФайлами() Экспорт - Возврат РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + Возврат РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ПерсональныеНастройки; КонецФункции @@ -857,10 +926,10 @@ ИмяСправочника = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( ВладелецФайлов, ИмяСправочника, ЗаголовокОшибки); - - УстановитьПривилегированныйРежим(Истина); - ФайлыИсточник = РаботаСФайламиСлужебныйВызовСервера.ПолучитьВсеПодчиненныеФайлы(ВладелецФайлов); + ФайлыИсточник = РаботаСФайламиСлужебный.ПолучитьВсеПодчиненныеФайлы(ВладелецФайлов); + + УстановитьПривилегированныйРежим(Истина); МенеджерПрисоединенныхФайлов = Справочники[ИмяСправочника]; НачатьТранзакцию(); @@ -1004,7 +1073,7 @@ УстановитьПривилегированныйРежим(Истина); - ФайлыИсточник = РаботаСФайламиСлужебныйВызовСервера.ПолучитьВсеПодчиненныеФайлы(ВладелецФайлов); + ФайлыИсточник = РаботаСФайламиСлужебный.ПолучитьВсеПодчиненныеФайлы(ВладелецФайлов); МенеджерПрисоединенныхФайлов = Справочники[ИмяСправочника]; НачатьТранзакцию(); @@ -1134,8 +1203,341 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с томами файлов +// Размещает гиперссылки и поля присоединенных файлов на управляемой форме. +// +// Параметры: +// Форма - УправляемаяФорма - форма для подключения. +// ДобавляемыеЭлементы - Структура, Массив - структура параметров элементов управления +// присоединенными файлами для размещения на форме или массив +// таких структур. Свойства: см. РаботаСФайлами.ГиперссылкаФайлов +// и РаботаСФайлами.ПолеФайла. +// +// Примеры: +// 1. Добавление гиперссылки присоединенных файлов: +// ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов(); +// ПараметрыГиперссылки.Размещение = "КоманднаяПанель"; +// РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки); +// +// 2. Добавление поля изображения: +// ПараметрыПоля = РаботаСФайлами.ПолеФайла(); +// ПараметрыПоля.ПутьКДанным = "Объект.ФайлКартинки"; +// ПараметрыПоля.ПутьКДаннымИзображения = "АдресКартинки"; +// РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыПоля); +// +// 3. Добавление нескольких элементов управления: +// ДобавляемыеЭлементы = Новый Массив; +// ДобавляемыеЭлементы.Добавить(ПараметрыГиперссылки); +// ДобавляемыеЭлементы.Добавить(ПараметрыПоля); +// РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ДобавляемыеЭлементы); +// +Процедура ПриСозданииНаСервере(Форма, ДобавляемыеЭлементы = Неопределено) Экспорт + + Если ДобавляемыеЭлементы = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ДобавляемыеЭлементы) = Тип("Структура") Тогда + ПараметрыЭлемента = ДобавляемыеЭлементы; + ДобавляемыеЭлементы = Новый Массив; + ДобавляемыеЭлементы.Добавить(ПараметрыЭлемента); + КонецЕсли; + + КоличествоЭлементов = ДобавляемыеЭлементы.Количество(); + Для Индекс = 1 По КоличествоЭлементов Цикл + + ДобавляемыйЭлемент = ДобавляемыеЭлементы[КоличествоЭлементов - Индекс]; + Если ДобавляемыйЭлемент.Свойство("Видимость") + И Не ДобавляемыйЭлемент.Видимость Тогда + ДобавляемыеЭлементы.Удалить(КоличествоЭлементов - Индекс); + КонецЕсли; + + КонецЦикла; + + Если ДобавляемыеЭлементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + РеквизитыФормы = Форма.ПолучитьРеквизиты(); + + ДобавляемыеРеквизиты = Новый Массив; + Если РеквизитФормыПоИмени(РеквизитыФормы, "ПараметрыРаботыСФайлами") = Неопределено Тогда + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПараметрыРаботыСФайлами", Новый ОписаниеТипов())); + КонецЕсли; + + Для Индекс = 0 По ДобавляемыеЭлементы.ВГраница() Цикл + + НомерЭлемента = Формат(Индекс, "ЧН=0; ЧГ="); + ДобавляемыйЭлемент = ДобавляемыеЭлементы[Индекс]; + + Если ДобавляемыйЭлемент.Свойство("ПутьКДанным") Тогда + + Если СтрНайти(ДобавляемыйЭлемент.ПутьКДанным, ".") Тогда + ПолныйПутьКДанным = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + ДобавляемыйЭлемент.ПутьКДанным, ".", Истина, Истина); + Иначе + ПолныйПутьКДанным = Новый Массив; + ПолныйПутьКДанным.Добавить(ДобавляемыйЭлемент.ПутьКДанным); + КонецЕсли; + + РеквизитРазмещения = РеквизитФормыПоИмени(РеквизитыФормы, ПолныйПутьКДанным[0]); + Если РеквизитРазмещения <> Неопределено Тогда + + ПутьКРеквизиту = ПолныйПутьКДанным[0]; + Для ИндексРеквизита = 1 По ПолныйПутьКДанным.ВГраница() Цикл + + ПодчиненныеРеквизиты = Форма.ПолучитьРеквизиты(ПутьКРеквизиту); + РеквизитРазмещения = РеквизитФормыПоИмени(ПодчиненныеРеквизиты, ПолныйПутьКДанным[ИндексРеквизита]); + Если РеквизитРазмещения = Неопределено Тогда + Прервать; + КонецЕсли; + + ПутьКРеквизиту = ПутьКРеквизиту + ПолныйПутьКДанным[ИндексРеквизита]; + + КонецЦикла; + + КонецЕсли; + + Если РеквизитРазмещения = Неопределено Тогда + + ТипПрисоединенныеФайлы = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип; + РеквизитРазмещения = Новый РеквизитФормы("ПолеПрисоединенногоФайла" + НомерЭлемента, ТипПрисоединенныеФайлы); + ДобавляемыеРеквизиты.Добавить(РеквизитРазмещения); + + РеквизитРазмещения = Форма["ПолеПрисоединенногоФайла" + НомерЭлемента]; + ДобавляемыйЭлемент.ПутьКДанным = "ПолеПрисоединенногоФайла" + НомерЭлемента; + + КонецЕсли; + + Если ДобавляемыйЭлемент.Свойство("ПоказыватьПредпросмотр") + И ДобавляемыйЭлемент.ПоказыватьПредпросмотр Тогда + + Если РеквизитФормыПоИмени(РеквизитыФормы, ДобавляемыйЭлемент.ПутьКДаннымИзображения) = Неопределено Тогда + + РеквизитКартинки = Новый РеквизитФормы("ПолеКартинкиПрисоединенногоФайла" + НомерЭлемента, + Новый ОписаниеТипов("Строка")); + ДобавляемыеРеквизиты.Добавить(РеквизитКартинки); + + ДобавляемыйЭлемент.ПутьКДаннымИзображения = "ПолеКартинкиПрисоединенногоФайла" + НомерЭлемента; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Если ДобавляемыеРеквизиты.Количество() > 0 Тогда + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + КонецЕсли; + + ПараметрыРаботыСФайлами = Новый Массив; + Для Индекс = 0 По ДобавляемыеЭлементы.ВГраница() Цикл + + НомерЭлемента = Формат(Индекс, "ЧН=0; ЧГ="); + ИмяГруппы = "ГруппаУправлениеПрисоединеннымиФайлами" + НомерЭлемента; + + ДобавляемыйЭлемент = ДобавляемыеЭлементы[Индекс]; + ПолныйПутьКДаннымВладельца = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + ДобавляемыйЭлемент.Владелец, ".", Истина, Истина); + + ВладелецПрисоединенныхФайлов = РеквизитФормыПоИмени(РеквизитыФормы, ПолныйПутьКДаннымВладельца[0]); + Если ВладелецПрисоединенныхФайлов = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПутьКРеквизиту = ПолныйПутьКДаннымВладельца[0]; + Для ИндексРеквизита = 1 По ПолныйПутьКДаннымВладельца.ВГраница() Цикл + + ПодчиненныеРеквизиты = Форма.ПолучитьРеквизиты(ПутьКРеквизиту); + ВладелецПрисоединенныхФайлов = РеквизитФормыПоИмени(ПодчиненныеРеквизиты, ПолныйПутьКДаннымВладельца[ИндексРеквизита]); + Если ВладелецПрисоединенныхФайлов = Неопределено Тогда + Прервать; + КонецЕсли; + + ПутьКРеквизиту = ПутьКРеквизиту + ПолныйПутьКДаннымВладельца[ИндексРеквизита]; + + КонецЦикла; + + ВладелецПрисоединенныхФайлов = Форма[ПолныйПутьКДаннымВладельца[0]]; + Для Счетчик = 1 По ПолныйПутьКДаннымВладельца.ВГраница() Цикл + ВладелецПрисоединенныхФайлов = ВладелецПрисоединенныхФайлов[ПолныйПутьКДаннымВладельца[Счетчик]]; + КонецЦикла; + + ИмяСправочникаХранилищаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( + ВладелецПрисоединенныхФайлов, "", "", ""); + + ТипСправочникаСФайлами = Тип("СправочникСсылка." + ИмяСправочникаХранилищаФайлов); + МетаданныеСправочникаСФайлами = Метаданные.НайтиПоТипу(ТипСправочникаСФайлами); + + Если Не ПравоДоступа("Чтение", МетаданныеСправочникаСФайлами) Тогда + Продолжить; + КонецЕсли; + + ДоступноДобавление = ПравоДоступа("ИнтерактивноеДобавление", МетаданныеСправочникаСФайлами); + ДоступноИзменение = ПравоДоступа("Изменение", МетаданныеСправочникаСФайлами); + + ПараметрыЭлемента = Новый Структура; + ПараметрыЭлемента.Вставить("ТолькоОдинФайл" , Ложь); + ПараметрыЭлемента.Вставить("МаксимальныйРазмер" , 0); + ПараметрыЭлемента.Вставить("ФильтрДиалогаВыбора" , ""); + ПараметрыЭлемента.Вставить("ОтображатьКоличество" , Ложь); + ПараметрыЭлемента.Вставить("ПутьКДаннымИзображения" , ""); + ПараметрыЭлемента.Вставить("ПутьКРеквизитуРазмещения", ""); + ПараметрыЭлемента.Вставить("ТекстНевыбраннойКартинки", ""); + ЗаполнитьЗначенияСвойств(ПараметрыЭлемента, ДобавляемыйЭлемент); + + ПараметрыЭлементаФормы = Новый Структура; + ПараметрыЭлементаФормы.Вставить("ИмяГруппы", ИмяГруппы); + ПараметрыЭлементаФормы.Вставить("НомерЭлемента", НомерЭлемента); + ПараметрыЭлементаФормы.Вставить("ДоступноИзменение", ДоступноИзменение); + ПараметрыЭлементаФормы.Вставить("ДоступноДобавление", ДоступноДобавление); + + Если ДобавляемыйЭлемент.Свойство("ПутьКДанным") Тогда + + ПараметрыЭлемента.ПутьКРеквизитуРазмещения = ДобавляемыйЭлемент.ПутьКДанным; + СоздатьПолеФайла(Форма, ДобавляемыйЭлемент, ВладелецПрисоединенныхФайлов, ПараметрыЭлементаФормы); + + Иначе + СоздатьГиперссылкуФайлов(Форма, ДобавляемыйЭлемент, ВладелецПрисоединенныхФайлов, ПараметрыЭлементаФормы); + КонецЕсли; + + ПараметрыЭлемента.Вставить("ПутьКДаннымВладельца", ДобавляемыйЭлемент.Владелец); + ПараметрыРаботыСФайлами.Добавить(ПараметрыЭлемента); + + КонецЦикла; + + Форма["ПараметрыРаботыСФайлами"] = Новый ФиксированныйМассив(ПараметрыРаботыСФайлами); + +КонецПроцедуры + +// Инициализирует структуру параметров для размещения гиперссылки присоединенных файлов на форме. +// +// Возвращаемое значение: +// Структура - параметры размещения гиперссылки. Свойства: +// * Владелец - Строка - Имя реквизита, содержащего ссылку на владельца присоединенных файлов. +// Значение по умолчанию - "Объект.Ссылка". +// * Размещение - Строка, Неопределено - Если указано имя группы формы или командная панель, +// гиперссылка будет помещена в указанную группу или панель. Если указано имя элемента +// формы, гиперссылка будет вставлена перед указанным элементом. Если значение +// параметра - Неопределено или элемент не найден, гиперссылка будет добавлена на форму +// после всех существующих элементов. +// Значение по умолчанию - "УправлениеПрисоединеннымиФайлами". +// * Заголовок - Строка - Заголовок гиперссылки. Значение по умолчанию - "Файлы". +// * ОтображатьЗаголовокСправа - Булево - Если параметр принимает значение Истина, заголовок +// будет отображаться после команд добавления, иначе - перед командами добавления. +// Значение по умолчанию - Истина; +// * ОтображатьКоличество - Булево - Если параметр принимает значение Истина, отображает +// количество присоединенных файлов в заголовке. Значение по умолчанию - Истина. +// * ДобавлятьФайлы - Булево - Если указать Ложь, команды добавления файлов будут отсутствовать. +// Значение по умолчанию - Истина. +// * ОтображениеФигуры - Строка - Строковое представление свойства "ОтображениеФигуры" для +// команд добавления присоединенных файлов. Значение по умолчанию - "Авто". +// * Видимость - Булево - Если параметр принимает значение Ложь, гиперссылка на форме размещаться +// не будет. Параметр имеет смысл только для глобального отключения видимости +// в процедуре РаботаСФайламиПереопределяемый.ПриОпределенииГиперссылкиФайлов. +// +Функция ГиперссылкаФайлов() Экспорт + + ПараметрыГиперссылки = Новый Структура; + ПараметрыГиперссылки.Вставить("Владелец", "Объект.Ссылка"); + ПараметрыГиперссылки.Вставить("Размещение", "УправлениеПрисоединеннымиФайлами"); + ПараметрыГиперссылки.Вставить("Заголовок", НСтр("ru = 'Файлы'")); + ПараметрыГиперссылки.Вставить("ОтображатьЗаголовокСправа", Истина); + ПараметрыГиперссылки.Вставить("ОтображатьКоличество", Истина); + ПараметрыГиперссылки.Вставить("ДобавлятьФайлы", Истина); + ПараметрыГиперссылки.Вставить("ОтображениеФигуры", "Авто"); + ПараметрыГиперссылки.Вставить("Видимость", Истина); + + РаботаСФайламиПереопределяемый.ПриОпределенииГиперссылкиФайлов(ПараметрыГиперссылки); + + Возврат ПараметрыГиперссылки; + +КонецФункции + +// Инициализирует структуру параметров для размещения поля присоединенного файла на форме. +// +// Возвращаемое значение: +// Структура - параметры размещения гиперссылки. Свойства: +// * Владелец - Строка - Имя реквизита, содержащего ссылку на владельца присоединенных файлов. +// Значение по умолчанию - "Объект.Ссылка". +// * Размещение - Строка, Неопределено - Если указано имя группы формы, поле будет +// размещено в указанной группе. Если указано имя элемента формы, поле будет +// вставлено перед указанным элементом. Если значение параметра - Неопределено +// или элемент не найден, поле будет добавлена на форму после всех существующих +// элементов. Значение по умолчанию - "УправлениеПрисоединеннымиФайлами". +// * ПутьКДанным - Строка, Неопределено - Имя реквизита формы, содержащего ссылку на файл для +// отображения. Если параметр принимает значение Неопределено или реквизит не найден, +// добавляет реквизит формы с именем "ПолеПрисоединенногоФайла" и типом +// "ОпределяемыйТип.ПрисоединенныйФайл". Значение по умолчанию - "ПолеПрисоединенногоФайла". +// * ПутьКДаннымИзображения - Строка, Неопределено - Имя реквизита формы, содержащего изображение, которое будет +// выведено в поле предпросмотра. Если параметр принимает значение Неопределено или реквизит +// не найден, добавляет реквизит формы с именем "ПолеКартинкиПрисоединенногоФайла" и типом +// "Строка". Значение по умолчанию - Неопределено. +// * ТолькоОдинФайл - Булево - Если указать Истина, с помощью команд добавления можно будет +// присоединить только один файл. После добавления первого файла, команда "Добавить" +// будет заменять существующий файл на файл, выбранный пользователем, а нажатие на +// заголовок приведет к открытию файла для просмотра. Значение по умолчанию - Ложь. +// * ПоказыватьПредпросмотр - Булево - Если параметр принимает значение Истина, добавляет на форму +// область предпросмотра присоединенного файла. Значение по умолчанию - Истина. +// * ТекстНевыбраннойКартинки - Строка - Выводится в поле предпросмотра изображения, если +// изображение отсутствует. Значение по умолчанию - "Добавить изображение". +// * Заголовок - Строка - Если заголовок отличается от пустой строки, добавляет на форму заголовок +// поля присоединенного файла. Значение по умолчанию - "". +// * ВыводитьЗаголовокФайла - Булево - Если параметр принимает значение Истина, добавляет гиперссылку +// заголовок которой соответствует краткому имени файла. Если значение параметра +// "Заголовок" отличается от "", заголовок файла будет добавлен после общего заголовка +// элемента управления. Значение по умолчанию - Ложь. +// * ПоказыватьКоманднуюПанель - Булево - Если параметр принимает значение Истина, команды будут размещены в +// командной панели на форме и в контекстном меню элемента предпросмотра, иначе - +// только в контекстном меню элемента предпросмотра. Значение по умолчанию - Истина. +// * ДобавлятьФайлы - Булево - Если указать Ложь, команды добавления файлов будут отсутствовать. +// Значение по умолчанию - Истина. +// * ВыбиратьФайл - Булево - Если параметр принимает значение Истина, добавляет команду выбора файла +// из присоединенных. Значение по умолчанию - Истина. +// * ПросматриватьФайл - Булево - Если параметр принимает значение Истина, добавляет команду открытия +// файла для просмотра. Значение по умолчанию - Истина. +// * РедактироватьФайл - Строка - Если параметр принимает значение "ВФорме", добавляет команду +// открытия формы присоединенного файла. Если параметр принимает значение +// "Непосредственно", добавляет команды редактирования файла, сохранения и отмены +// изменений. Если принимает значение "НеРедактировать", команды редактирования добавлены +// не будут. Значение по умолчанию - "ВФорме". +// * ОчищатьФайл - Булево - Если параметр принимает значение Истина, добавляет команду очистки +// реквизита-владельца. Значение по умолчанию - Истина. +// * МаксимальныйРазмер - Число - Ограничение на размер файла (в мегабайтах), загружаемого из файловой системы. +// Если принимает значение 0, проверка размера не проводится. Свойство игнорируется, +// если принимает значение больше, чем указано в константе МаксимальныйРазмерФайла. +// Значение по умолчанию - 0. +// * ФильтрДиалогаВыбора - Строка - Фильтр, устанавливаемый в диалог выбора при добавлении файла. +// Формат см. в свойстве Фильтр объекта ДиалогВыбораФайла в синтакс-помощнике. +// Значение по умолчанию - "Все файлы(*.*)|*.*" +// +Функция ПолеФайла() Экспорт + + ПараметрыПоля = Новый Структура; + ПараметрыПоля.Вставить("Владелец", "Объект.Ссылка"); + ПараметрыПоля.Вставить("Размещение", "УправлениеПрисоединеннымиФайлами"); + ПараметрыПоля.Вставить("ПутьКДанным", "ПолеПрисоединенногоФайла"); + ПараметрыПоля.Вставить("ПутьКДаннымИзображения", Неопределено); + ПараметрыПоля.Вставить("ТолькоОдинФайл", Ложь); + ПараметрыПоля.Вставить("ПоказыватьПредпросмотр", Истина); + ПараметрыПоля.Вставить("ТекстНевыбраннойКартинки", НСтр("ru = 'Добавить изображение'")); + ПараметрыПоля.Вставить("Заголовок", ""); + ПараметрыПоля.Вставить("ВыводитьЗаголовокФайла", Ложь); + ПараметрыПоля.Вставить("ПоказыватьКоманднуюПанель", Истина); + ПараметрыПоля.Вставить("ДобавлятьФайлы", Истина); + ПараметрыПоля.Вставить("ВыбиратьФайл", Истина); + ПараметрыПоля.Вставить("ПросматриватьФайл", Истина); + ПараметрыПоля.Вставить("РедактироватьФайл", "ВФорме"); + ПараметрыПоля.Вставить("ОчищатьФайл", Истина); + ПараметрыПоля.Вставить("МаксимальныйРазмер", 0); + ПараметрыПоля.Вставить("ФильтрДиалогаВыбора", НСтр("ru = 'Все файлы(*.*)|*.*'")); + + Возврат ПараметрыПоля; + +КонецФункции + +#Область РаботаСТомамиФайлов // Определяет наличие активных томов хранения файлов. // Если есть хоть один том хранения файлов, то будет возвращена Истина. @@ -1221,6 +1623,31 @@ #КонецОбласти +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать РаботаСФайлами.ДобавитьФайлСДиска +// Добавляет к указанному владельцу файлов новый файл на основании файла из файловой системы. +// Если владелец файлов поддерживает хранение версий, то будет создана первая версия файла. +// +// Параметры: +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - Папка файлов или объект, к которому +// требуется прикрепить добавляемый файл. +// ПутьКФайлуНаДиске - Строка - Полный путь к файлу на диске, включающий имя и расширение файла. +// Файл должен находиться на сервере. +// +// Возвращаемое значение: +// ОпределяемыйТип.ПрисоединенныйФайл - Ссылка на элемент справочника с созданным файлом. +// +Функция СоздатьФайлНаОсновеФайлаНаДиске(ВладелецФайлов, ПутьКФайлуНаДиске) Экспорт + + Возврат ДобавитьФайлСДиска(ВладелецФайлов, ПутьКФайлуНаДиске); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -1238,10 +1665,10 @@ // Функция КодировкаФайла(ПрисоединенныйФайл, Расширение = "") Экспорт - Кодировка = РаботаСФайламиСлужебныйВызовСервера.ПолучитьКодировкуВерсииФайла(ПрисоединенныйФайл); + Кодировка = РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ПрисоединенныйФайл); Если Не ЗначениеЗаполнено(Кодировка) Тогда - ДвоичныеДанные = ДвоичныеДанныеФайла(ПрисоединенныйФайл); + ДвоичныеДанные = ДвоичныеДанныеФайла(ПрисоединенныйФайл, Ложь); Если ДвоичныеДанные <> Неопределено Тогда Кодировка = КодировкаИзДвоичныхДанных(ДвоичныеДанные); @@ -1323,8 +1750,6 @@ Функция КодировкаBOM(БуферДвоичныхДанных) ПрочитанныеБайты = Новый Массив(5); - - ВГраница = БуферДвоичныхДанных.Размер - 1; Для Индекс = 0 По 4 Цикл Если Индекс < БуферДвоичныхДанных.Размер Тогда ПрочитанныеБайты[Индекс] = БуферДвоичныхДанных[Индекс]; @@ -1416,14 +1841,14 @@ Возврат; КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - ИсточникСсылкаПометкаУдаления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "ПометкаУдаления"); Если Источник.ПометкаУдаления = ИсточникСсылкаПометкаУдаления Тогда Возврат; КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + Попытка ИменаСправочников = РаботаСФайламиСлужебный.ИменаСправочниковХраненияФайлов( ТипЗнч(Источник.Ссылка)); @@ -1620,7 +2045,6 @@ СсылкаПодписан = СтруктураРеквизитов.ПодписанЭП; СсылкаЗашифрован = СтруктураРеквизитов.Зашифрован; - СсылкаРедактирует = СтруктураРеквизитов.Редактирует; СсылкаЗанят = ЗначениеЗаполнено(СтруктураРеквизитов.Редактирует); Занят = ЗначениеЗаполнено(Источник.Редактирует); @@ -1680,7 +2104,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Ошибка записи файла при обновлении ИБ'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , Источник.Ссылка, @@ -1814,4 +2238,577 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Управление присоединенными файлами. + +Процедура СоздатьГиперссылкуФайлов(Форма, ДобавляемыйЭлемент, ВладелецПрисоединенныхФайлов, ПараметрыГиперссылки) + + ИмяГруппы = ПараметрыГиперссылки.ИмяГруппы; + НомерЭлемента = ПараметрыГиперссылки.НомерЭлемента; + ДоступноДобавление = ПараметрыГиперссылки.ДоступноДобавление; + + СвойстваКомандыФормы = Новый Структура; + СвойстваКомандыФормы.Вставить("Отображение", ОтображениеКнопки.Текст); + СвойстваКомандыФормы.Вставить("Действие", "Подключаемый_КомандаПанелиПрисоединенныхФайлов"); + + Если ДобавляемыйЭлемент.Размещение = "КоманднаяПанель" Тогда + ЭлементРазмещения = Форма.КоманднаяПанель; + Иначе + ЭлементРазмещения = Форма.Элементы.Найти(ДобавляемыйЭлемент.Размещение); + КонецЕсли; + + ВидГруппы = ВидГруппыФормы.КоманднаяПанель; + ЭтоГруппаКнопок = Ложь; + Если ЭлементРазмещения <> Неопределено + И ТипЗнч(ЭлементРазмещения) = Тип("ГруппаФормы") Тогда + + ЭтоГруппаКнопок = ЭлементРазмещения.Вид = ВидГруппыФормы.ГруппаКнопок + ИЛИ ЭлементРазмещения.Вид = ВидГруппыФормы.КоманднаяПанель; + ВидГруппы = ?(ЭтоГруппаКнопок, ВидГруппыФормы.ГруппаКнопок, ВидГруппы); + Если ЭлементРазмещения.Вид = ВидГруппыФормы.ОбычнаяГруппа + ИЛИ ЭлементРазмещения.Вид = ВидГруппыФормы.Страница + ИЛИ ЭтоГруппаКнопок Тогда + + ЭлементРодитель = ЭлементРазмещения; + ЭлементРазмещения = Неопределено; + КонецЕсли; + + КонецЕсли; + + ГруппаРазмещенияНаФорме = Форма.Элементы.Вставить(ИмяГруппы, Тип("ГруппаФормы"), + ЭлементРодитель, ЭлементРазмещения); + ГруппаРазмещенияНаФорме.Вид = ВидГруппы; + + ПодменюДобавления = Неопределено; + Если ДобавляемыйЭлемент.ДобавлятьФайлы + И ДоступноДобавление Тогда + + ПодменюДобавления = Форма.Элементы.Добавить("ПодменюДобавленияФайла" + НомерЭлемента, Тип("ГруппаФормы"), + ГруппаРазмещенияНаФорме); + + ПодменюДобавления.Вид = ВидГруппыФормы.Подменю; + ПодменюДобавления.Картинка = БиблиотекаКартинок.Скрепка; + ПодменюДобавления.Заголовок = НСтр("ru = 'Присоединить файлы'"); + ПодменюДобавления.Подсказка = НСтр("ru = 'Присоединить файлы'"); + ПодменюДобавления.Отображение = ОтображениеКнопки.Картинка; + + ЗагрузитьФайл = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиЗагрузитьФайл_" + НомерЭлемента); + ЗагрузитьФайл.Действие = "Подключаемый_КомандаПанелиПрисоединенныхФайлов"; + ЗагрузитьФайл.Подсказка = НСтр("ru = 'Загрузить файл с диска'"); + ЗагрузитьФайл.Заголовок = НСтр("ru = 'Загрузить...'"); + + КнопкаЗагрузки = ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиЗагрузитьФайл" + НомерЭлемента, ГруппаРазмещенияНаФорме, ЗагрузитьФайл.Имя); + КнопкаЗагрузки.Картинка = БиблиотекаКартинок.Скрепка; + КнопкаЗагрузки.Видимость = Ложь; + КнопкаЗагрузки.Отображение = ОтображениеКнопки.Картинка; + + Если ЗначениеЗаполнено(ДобавляемыйЭлемент.ОтображениеФигуры) Тогда + КнопкаЗагрузки.ОтображениеФигуры = ОтображениеФигурыКнопки[ДобавляемыйЭлемент.ОтображениеФигуры]; + ПодменюДобавления.ОтображениеФигуры = ОтображениеФигурыКнопки[ДобавляемыйЭлемент.ОтображениеФигуры]; + КонецЕсли; + + КнопкаЗагрузкиИзПодменю = ДобавитьКнопкуНаФорму(Форма, "ЗагрузитьФайлИзПодменю" + НомерЭлемента, ПодменюДобавления, ЗагрузитьФайл.Имя); + КнопкаЗагрузкиИзПодменю.Отображение = ОтображениеКнопки.Текст; + + СоздатьПоШаблону = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиСоздатьПоШаблону_" + НомерЭлемента); + СоздатьПоШаблону.Заголовок = НСтр("ru = 'Создать по шаблону...'"); + ЗаполнитьЗначенияСвойств(СоздатьПоШаблону, СвойстваКомандыФормы); + + ДобавитьКнопкуНаФорму(Форма, "СоздатьПоШаблону" + НомерЭлемента, ПодменюДобавления, СоздатьПоШаблону.Имя); + + Сканировать = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиСканировать_" + НомерЭлемента); + Сканировать.Заголовок = НСтр("ru = 'Сканировать...'"); + ЗаполнитьЗначенияСвойств(Сканировать, СвойстваКомандыФормы); + + ДобавитьКнопкуНаФорму(Форма, "Сканировать" + НомерЭлемента, ПодменюДобавления, Сканировать.Имя); + + КонецЕсли; + + КомандаОткрытияСписка = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиОткрытьСписок_" + НомерЭлемента); + ЗаполнитьЗначенияСвойств(КомандаОткрытияСписка, СвойстваКомандыФормы); + + Если ДобавляемыйЭлемент.ОтображатьЗаголовокСправа + ИЛИ Не ДобавляемыйЭлемент.ДобавлятьФайлы Тогда + ГиперссылкаПерехода = ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиОткрытьСписок" + НомерЭлемента, + ГруппаРазмещенияНаФорме, КомандаОткрытияСписка.Имя); + Иначе + ГиперссылкаПерехода = Форма.Элементы.Вставить("УправлениеПрисоединеннымиФайламиОткрытьСписок" + НомерЭлемента, + Тип("КнопкаФормы"), ГруппаРазмещенияНаФорме, ПодменюДобавления); + + ГиперссылкаПерехода.ИмяКоманды = КомандаОткрытияСписка.Имя; + КонецЕсли; + + ГиперссылкаПерехода.Вид = ?(ЭтоГруппаКнопок, ВидКнопкиФормы.ГиперссылкаКоманднойПанели, ВидКнопкиФормы.Гиперссылка); + ГиперссылкаПерехода.Заголовок = ДобавляемыйЭлемент.Заголовок; + Если ДобавляемыйЭлемент.ОтображатьКоличество Тогда + + КоличествоПрисоединенныхФайлов = РаботаСФайламиСлужебныйВызовСервера.КоличествоПрисоединенныхФайлов(ВладелецПрисоединенныхФайлов); + Если КоличествоПрисоединенныхФайлов > 0 Тогда + ГиперссылкаПерехода.Заголовок = ГиперссылкаПерехода.Заголовок + " (" + + Формат(КоличествоПрисоединенныхФайлов, "ЧГ=") + ")"; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура СоздатьПолеФайла(Форма, ДобавляемыйЭлемент, ВладелецПрисоединенныхФайлов, ПараметрыПоляФайла) + + ИмяГруппы = ПараметрыПоляФайла.ИмяГруппы; + НомерЭлемента = ПараметрыПоляФайла.НомерЭлемента; + ДоступноИзменение = ПараметрыПоляФайла.ДоступноИзменение; + ДоступноДобавление = ПараметрыПоляФайла.ДоступноДобавление; + + СвойстваКомандыФормы = Новый Структура; + СвойстваКомандыФормы.Вставить("Действие", "Подключаемый_КомандаПанелиПрисоединенныхФайлов"); + СвойстваКомандыФормы.Вставить("Отображение", ОтображениеКнопки.Текст); + + СвойстваКомандыФормыКартинка = Новый Структура; + СвойстваКомандыФормыКартинка.Вставить("Действие", "Подключаемый_КомандаПанелиПрисоединенныхФайлов"); + СвойстваКомандыФормыКартинка.Вставить("Отображение", ОтображениеКнопки.Картинка); + + СвойстваКнопкиЗагрузка = Новый Структура; + СвойстваКнопкиЗагрузка.Вставить("Заголовок", НСтр("ru = 'Загрузить...'")); + СвойстваКнопкиЗагрузка.Вставить("Отображение", ОтображениеКнопки.Текст); + СвойстваКнопкиЗагрузка.Вставить("ОтображениеПодсказки", ОтображениеПодсказки.Нет); + + СвойстваКнопкиВыбор = Новый Структура; + СвойстваКнопкиВыбор.Вставить("Заголовок", НСтр("ru = 'Выбрать из присоединенных...'")); + СвойстваКнопкиВыбор.Вставить("Отображение", ОтображениеКнопки.Текст); + СвойстваКнопкиВыбор.Вставить("ОтображениеПодсказки", ОтображениеПодсказки.Нет); + + СвойстваГруппыБезОтображения = Новый Структура; + СвойстваГруппыБезОтображения.Вставить("Вид", ВидГруппыФормы.ОбычнаяГруппа); + СвойстваГруппыБезОтображения.Вставить("Заголовок", ""); + СвойстваГруппыБезОтображения.Вставить("Подсказка", ""); + СвойстваГруппыБезОтображения.Вставить("Группировка", ГруппировкаПодчиненныхЭлементовФормы.Вертикальная); + СвойстваГруппыБезОтображения.Вставить("ОтображатьЗаголовок", Ложь); + + Если СтрНайти(ДобавляемыйЭлемент.ПутьКДанным, ".") Тогда + ПолныйПутьКДанным = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + ДобавляемыйЭлемент.ПутьКДанным, ".", Истина, Истина); + Иначе + ПолныйПутьКДанным = Новый Массив; + ПолныйПутьКДанным.Добавить(ДобавляемыйЭлемент.ПутьКДанным); + КонецЕсли; + + РеквизитРазмещения = Форма[ПолныйПутьКДанным[0]]; + Для Счетчик = 1 По ПолныйПутьКДанным.ВГраница() Цикл + РеквизитРазмещения = РеквизитРазмещения[ПолныйПутьКДанным[Счетчик]]; + КонецЦикла; + + ДобавляемыйЭлемент.ДобавлятьФайлы = ДобавляемыйЭлемент.ДобавлятьФайлы И ДоступноДобавление; + ЭлементРазмещения = Форма.Элементы.Найти(ДобавляемыйЭлемент.Размещение); + + Если ЭлементРазмещения <> Неопределено + И ТипЗнч(ЭлементРазмещения) = Тип("ГруппаФормы") + И (ЭлементРазмещения.Вид = ВидГруппыФормы.ОбычнаяГруппа + ИЛИ ЭлементРазмещения.Вид = ВидГруппыФормы.Страница) Тогда + + ЭлементРодитель = ЭлементРазмещения; + ЭлементРазмещения = Неопределено; + + КонецЕсли; + + ГруппаРазмещенияНаФорме = Форма.Элементы.Вставить(ИмяГруппы, Тип("ГруппаФормы"), + ЭлементРодитель, ЭлементРазмещения); + + ТолькоОдинФайлТекст = ?(ДобавляемыйЭлемент.ТолькоОдинФайл, "ТолькоОдинФайл", ""); + ЗаполнитьЗначенияСвойств(ГруппаРазмещенияНаФорме, СвойстваГруппыБезОтображения); + + ГруппаШапка = Форма.Элементы.Добавить( + "ГруппаУправлениеПрисоединеннымиФайламиШапка" + НомерЭлемента, + Тип("ГруппаФормы"), ГруппаРазмещенияНаФорме); + + ЗаполнитьЗначенияСвойств(ГруппаШапка, СвойстваГруппыБезОтображения); + ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + + Если ДобавляемыйЭлемент.ПоказыватьПредпросмотр Тогда + + ЭлементПредпросмотра = Форма.Элементы.Добавить("ПолеКартинкиПрисоединенногоФайла" + НомерЭлемента, + Тип("ПолеФормы"), ГруппаРазмещенияНаФорме); + + ЭлементПредпросмотра.Вид = ВидПоляФормы.ПолеКартинки; + ЭлементПредпросмотра.ЦветТекста = ЦветаСтиля.ЦветТекстаНевыбраннойКартинки; + ЭлементПредпросмотра.ПутьКДанным = ДобавляемыйЭлемент.ПутьКДаннымИзображения; + ЭлементПредпросмотра.Гиперссылка = Истина; + ЭлементПредпросмотра.РазмерКартинки = РазмерКартинки.Пропорционально; + ЭлементПредпросмотра.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + ЭлементПредпросмотра.АвтоМаксимальнаяШирина = Ложь; + ЭлементПредпросмотра.АвтоМаксимальнаяВысота = Ложь; + ЭлементПредпросмотра.РастягиватьПоВертикали = Истина; + ЭлементПредпросмотра.РазрешитьПеретаскивание = Истина; + ЭлементПредпросмотра.РастягиватьПоГоризонтали = Истина; + ЭлементПредпросмотра.ТекстНевыбраннойКартинки = ДобавляемыйЭлемент.ТекстНевыбраннойКартинки; + + КонтекстноеМенюПредпросмотра = ЭлементПредпросмотра.КонтекстноеМеню; + КонтекстноеМенюПредпросмотра.РазрешитьИзменениеСостава = Ложь; + + ГруппаДобавленияКонтекстногоМеню = Форма.Элементы.Добавить("ГруппаДобавленияФайлаКонтекстноеМеню" + НомерЭлемента, + Тип("ГруппаФормы"), КонтекстноеМенюПредпросмотра); + + ГруппаДобавленияКонтекстногоМеню.Вид = ВидГруппыФормы.ГруппаКнопок; + + Если ЗначениеЗаполнено(РеквизитРазмещения) + И ОбщегоНазначения.ЭтоСсылка(ТипЗнч(РеквизитРазмещения)) Тогда + + СсылкаНаДвоичныеДанные = Неопределено; + + ПараметрыДанных = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла(); + ПараметрыДанных.ВызыватьИсключение = Ложь; + ПараметрыДанных.ИдентификаторФормы = Форма.УникальныйИдентификатор; + + ДанныеФайла = ДанныеФайла(РеквизитРазмещения, ПараметрыДанных); + Если ДанныеФайла <> Неопределено Тогда + + СсылкаНаДвоичныеДанные = ДанныеФайла.СсылкаНаДвоичныеДанныеФайла; + ЗначениеДвоичныхДанных = ПолучитьИзВременногоХранилища(СсылкаНаДвоичныеДанные); + Если ЗначениеДвоичныхДанных = Неопределено Тогда + ЭлементПредпросмотра.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст; + ЭлементПредпросмотра.ТекстНевыбраннойКартинки = НСтр("ru = 'Изображение отсутствует'"); + КонецЕсли; + + КонецЕсли; + + Форма[ДобавляемыйЭлемент.ПутьКДаннымИзображения] = СсылкаНаДвоичныеДанные; + + КонецЕсли; + + ЭлементПредпросмотра.УстановитьДействие("Нажатие", "Подключаемый_ПолеПредпросмотраНажатие"); + ЭлементПредпросмотра.УстановитьДействие("Перетаскивание", + "Подключаемый_ПолеПредпросмотраПеретаскивание"); + ЭлементПредпросмотра.УстановитьДействие("ПроверкаПеретаскивания", + "Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания"); + + КонецЕсли; + + Если Не ПустаяСтрока(ДобавляемыйЭлемент.Заголовок) Тогда + + ДекорацияЗаголовок = Форма.Элементы.Добавить("ЗаголовокУправленияПрисоединеннымиФайлами" + НомерЭлемента, + Тип("ДекорацияФормы"), ГруппаШапка); + + ДекорацияЗаголовок.Вид = ВидДекорацииФормы.Надпись; + ДекорацияЗаголовок.Заголовок = ДобавляемыйЭлемент.Заголовок + ":"; + ДекорацияЗаголовок.РастягиватьПоВертикали = Ложь; + ДекорацияЗаголовок.РастягиватьПоГоризонтали = Ложь; + + КонецЕсли; + + Если ДобавляемыйЭлемент.ВыводитьЗаголовокФайла Тогда + + ЗаголовокФайла = Форма.Команды.Добавить("ЗаголовокПрисоединенногоФайла_" + ТолькоОдинФайлТекст + НомерЭлемента); + ЗаполнитьЗначенияСвойств(ЗаголовокФайла, СвойстваКомандыФормы); + + ГиперссылкаЗаголовка = Форма.Элементы.Добавить("ЗаголовокПрисоединенногоФайла" + НомерЭлемента, + Тип("КнопкаФормы"), ГруппаШапка); + + ГиперссылкаЗаголовка.Вид = ВидКнопкиФормы.Гиперссылка; + ГиперссылкаЗаголовка.ИмяКоманды = ЗаголовокФайла.Имя; + ГиперссылкаЗаголовка.АвтоМаксимальнаяШирина = Ложь; + Если Не ЗначениеЗаполнено(РеквизитРазмещения) Тогда + ЗаголовокФайла.Подсказка = ""; + ГиперссылкаЗаголовка.Заголовок = НСтр("ru = 'загрузить'"); + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(РеквизитРазмещения)) Тогда + ЗаголовокФайла.Подсказка = НСтр("ru = 'Открыть файл'"); + РеквизитыПрисоединенногоФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(РеквизитРазмещения, "Наименование, Расширение"); + ГиперссылкаЗаголовка.Заголовок = РеквизитыПрисоединенногоФайла.Наименование + + ?(СтрНачинаетсяС(РеквизитыПрисоединенногоФайла.Расширение, "."), "", ".") + + РеквизитыПрисоединенногоФайла.Расширение; + КонецЕсли; + + КонецЕсли; + + КартинкаДобавления = ?(ДобавляемыйЭлемент.ПоказыватьПредпросмотр, БиблиотекаКартинок.Фотокамера, + БиблиотекаКартинок.Скрепка); + + Если ДобавляемыйЭлемент.ПоказыватьКоманднуюПанель Тогда + + ПанельКоманд = Форма.Элементы.Добавить("ПанельКомандУправленияПрисоединеннымиФайлами" + НомерЭлемента, + Тип("ГруппаФормы"), ГруппаШапка); + + ПанельКоманд.Вид = ВидГруппыФормы.КоманднаяПанель; + ПанельКоманд.РастягиватьПоГоризонтали = Истина; + + ПодменюДобавления = Форма.Элементы.Добавить("ПодменюДобавленияФайла" + НомерЭлемента, + Тип("ГруппаФормы"), ПанельКоманд); + + ПодменюДобавления.Вид = ВидГруппыФормы.Подменю; + ПодменюДобавления.Картинка = КартинкаДобавления; + ПодменюДобавления.Заголовок = НСтр("ru = 'Заменить'"); + ПодменюДобавления.Отображение = ОтображениеКнопки.Картинка; + + ГруппаПодменю = Форма.Элементы.Добавить("ГруппаДобавленияФайла" + НомерЭлемента, + Тип("ГруппаФормы"), ПодменюДобавления); + + ГруппаПодменю.Вид = ВидГруппыФормы.ГруппаКнопок; + + КонецЕсли; + + Если ДобавляемыйЭлемент.ДобавлятьФайлы Тогда + + ЗагрузитьФайл = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиЗагрузитьФайл_" + + ТолькоОдинФайлТекст + НомерЭлемента); + ЗагрузитьФайл.Действие = "Подключаемый_КомандаПанелиПрисоединенныхФайлов"; + ЗагрузитьФайл.Подсказка = НСтр("ru = 'Загрузить файл с диска'"); + + Если ДобавляемыйЭлемент.ПоказыватьКоманднуюПанель Тогда + + КнопкаЗагрузки = ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиЗагрузитьФайл" + НомерЭлемента, + ПанельКоманд, ЗагрузитьФайл.Имя); + + КнопкаЗагрузки.Картинка = КартинкаДобавления; + КнопкаЗагрузки.Видимость = Ложь; + КнопкаЗагрузки.Отображение = ОтображениеКнопки.Картинка; + + КнопкаЗагрузкиИзПодменю = ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиЗагрузитьФайлИзПодменю" + НомерЭлемента, + ГруппаПодменю, ЗагрузитьФайл.Имя); + + ЗаполнитьЗначенияСвойств(КнопкаЗагрузкиИзПодменю, СвойстваКнопкиЗагрузка); + + КонецЕсли; + + Если ДобавляемыйЭлемент.ПоказыватьПредпросмотр Тогда + + КнопкаЗагрузкиИзКонтекстногоМеню = ДобавитьКнопкуНаФорму(Форма, + "УправлениеПрисоединеннымиФайламиЗагрузитьФайлИзКонтекстногоМеню" + НомерЭлемента, + ГруппаДобавленияКонтекстногоМеню, ЗагрузитьФайл.Имя); + + ЗаполнитьЗначенияСвойств(КнопкаЗагрузкиИзКонтекстногоМеню, СвойстваКнопкиЗагрузка); + + КонецЕсли; + + Если Не ДобавляемыйЭлемент.ТолькоОдинФайл Тогда + + СоздатьПоШаблону = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиСоздатьПоШаблону_" + НомерЭлемента); + СоздатьПоШаблону.Заголовок = НСтр("ru = 'Создать по шаблону...'"); + ЗаполнитьЗначенияСвойств(СоздатьПоШаблону, СвойстваКомандыФормы); + + Если ДобавляемыйЭлемент.ПоказыватьКоманднуюПанель Тогда + ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиСоздатьПоШаблону" + НомерЭлемента, + ГруппаПодменю, СоздатьПоШаблону.Имя); + КонецЕсли; + + Если ДобавляемыйЭлемент.ПоказыватьПредпросмотр Тогда + ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиСоздатьПоШаблонуИзКонтекстногоМеню" + НомерЭлемента, + ГруппаДобавленияКонтекстногоМеню, СоздатьПоШаблону.Имя); + КонецЕсли; + + Сканировать = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиСканировать_" + НомерЭлемента); + Сканировать.Заголовок = НСтр("ru = '" + ?(ОбщегоНазначения.ЭтоМобильныйКлиент(), "Сфотографировать", "Сканировать")+ "...'"); + ЗаполнитьЗначенияСвойств(Сканировать, СвойстваКомандыФормы); + + Если ДобавляемыйЭлемент.ПоказыватьКоманднуюПанель Тогда + ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиСканировать" + НомерЭлемента, + ГруппаПодменю, Сканировать.Имя); + КонецЕсли; + + Если ДобавляемыйЭлемент.ПоказыватьПредпросмотр Тогда + ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиСканироватьИзКонтекстногоМеню" + НомерЭлемента, + ГруппаДобавленияКонтекстногоМеню, Сканировать.Имя); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если ДобавляемыйЭлемент.ВыбиратьФайл + И ДоступноИзменение Тогда + + ВыбратьФайл = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиВыбратьФайл_" + НомерЭлемента); + ВыбратьФайл.Действие = "Подключаемый_КомандаПанелиПрисоединенныхФайлов"; + ВыбратьФайл.Подсказка = НСтр("ru = 'Выбрать файл из присоединенных'"); + + Если ДобавляемыйЭлемент.ПоказыватьКоманднуюПанель Тогда + + КнопкаВыбораФайла = ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиВыбратьФайл" + НомерЭлемента, + ПодменюДобавления, ВыбратьФайл.Имя); + + ЗаполнитьЗначенияСвойств(КнопкаВыбораФайла, СвойстваКнопкиВыбор); + + КонецЕсли; + + Если ДобавляемыйЭлемент.ПоказыватьПредпросмотр Тогда + + КнопкаВыбораИзКонтекстногоМеню = ДобавитьКнопкуНаФорму(Форма, + "ВыбратьФайлИзКонтекстногоМеню" + НомерЭлемента, КонтекстноеМенюПредпросмотра, ВыбратьФайл.Имя); + ЗаполнитьЗначенияСвойств(КнопкаВыбораИзКонтекстногоМеню, СвойстваКнопкиВыбор); + + КонецЕсли; + + КонецЕсли; + + Если ДобавляемыйЭлемент.ПросматриватьФайл Тогда + + ПросмотретьФайл = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиПросмотретьФайл_" + НомерЭлемента); + ПросмотретьФайл.Заголовок = НСтр("ru = 'Просмотреть'"); + ЗаполнитьЗначенияСвойств(ПросмотретьФайл, СвойстваКомандыФормы); + + Если ДобавляемыйЭлемент.ТолькоОдинФайл Тогда + ПросмотретьФайл.Картинка = БиблиотекаКартинок.ОткрытьВыбранныйФайл; + ПросмотретьФайл.Отображение = ОтображениеКнопки.Картинка; + КонецЕсли; + + Если ДобавляемыйЭлемент.ПоказыватьКоманднуюПанель Тогда + ДобавитьКнопкуНаФорму(Форма, "ПросмотретьФайл" + НомерЭлемента, ПанельКоманд, ПросмотретьФайл.Имя); + КонецЕсли; + + КонецЕсли; + + Если ДобавляемыйЭлемент.ОчищатьФайл + И ДоступноИзменение Тогда + + ОчиститьФайл = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиОчистить_" + НомерЭлемента); + ОчиститьФайл.Картинка = БиблиотекаКартинок.Очистить; + ОчиститьФайл.Заголовок = НСтр("ru = 'Очистить'"); + ОчиститьФайл.Подсказка = ОчиститьФайл.Заголовок; + ЗаполнитьЗначенияСвойств(ОчиститьФайл, СвойстваКомандыФормыКартинка); + + Если ДобавляемыйЭлемент.ПоказыватьКоманднуюПанель Тогда + ДобавитьКнопкуНаФорму(Форма, "ОчиститьФайл" + НомерЭлемента, ПанельКоманд, ОчиститьФайл.Имя); + КонецЕсли; + + Если ДобавляемыйЭлемент.ПоказыватьПредпросмотр Тогда + ДобавитьКнопкуНаФорму(Форма, "ОчиститьИзКонтекстногоМеню" + НомерЭлемента, + КонтекстноеМенюПредпросмотра, ОчиститьФайл.Имя); + КонецЕсли; + + КонецЕсли; + + РедактироватьФайл = Неопределено; + Если ДобавляемыйЭлемент.РедактироватьФайл = "ВФорме" Тогда + + РедактироватьФайл = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиОткрытьФорму_" + НомерЭлемента); + РедактироватьФайл.Картинка = БиблиотекаКартинок.Лупа; + РедактироватьФайл.Заголовок = НСтр("ru = 'Открыть карточку'"); + РедактироватьФайл.Подсказка = НСтр("ru = 'Открыть карточку присоединенного файла'"); + ЗаполнитьЗначенияСвойств(РедактироватьФайл, СвойстваКомандыФормыКартинка); + + Если ДобавляемыйЭлемент.ПоказыватьКоманднуюПанель Тогда + ДобавитьКнопкуНаФорму(Форма, "РедактироватьФайл" + НомерЭлемента, ПанельКоманд, РедактироватьФайл.Имя); + КонецЕсли; + + Если ДобавляемыйЭлемент.ПоказыватьПредпросмотр Тогда + ДобавитьКнопкуНаФорму(Форма, "РедактироватьИзКонтекстногоМеню" + НомерЭлемента, + КонтекстноеМенюПредпросмотра, РедактироватьФайл.Имя); + КонецЕсли; + + ИначеЕсли ДобавляемыйЭлемент.РедактироватьФайл = "Непосредственно" + И ДоступноИзменение Тогда + + РедактироватьФайл = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиРедактироватьФайл_" + НомерЭлемента); + РедактироватьФайл.Картинка = БиблиотекаКартинок.Изменить; + РедактироватьФайл.Заголовок = НСтр("ru = 'Редактировать'"); + РедактироватьФайл.Подсказка = НСтр("ru = 'Открыть файл для редактирования'"); + ЗаполнитьЗначенияСвойств(РедактироватьФайл, СвойстваКомандыФормыКартинка); + + ПоместитьФайл = Форма.Команды.Добавить("УправлениеПрисоединеннымиФайламиПоместитьФайл_" + НомерЭлемента); + ПоместитьФайл.Картинка = БиблиотекаКартинок.ЗакончитьРедактированиеФайла; + ПоместитьФайл.Заголовок = НСтр("ru = 'Закончить редактирование'"); + ПоместитьФайл.Подсказка = НСтр("ru = 'Сохранить и освободить файл в информационной базе'"); + ЗаполнитьЗначенияСвойств(ПоместитьФайл, СвойстваКомандыФормыКартинка); + + ОтменитьРедактирование = Форма.Команды.Добавить( + "УправлениеПрисоединеннымиФайламиОтменитьРедактирование_" + НомерЭлемента); + + ОтменитьРедактирование.Картинка = БиблиотекаКартинок.ОсвободитьФайл; + ОтменитьРедактирование.Заголовок = НСтр("ru = 'Отменить редактирование'"); + ОтменитьРедактирование.Подсказка = НСтр("ru = 'Освободить занятый файл'"); + ЗаполнитьЗначенияСвойств(ОтменитьРедактирование, СвойстваКомандыФормыКартинка); + + ПараметрыДанныхФайла = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла(); + ПараметрыДанныхФайла.ВызыватьИсключение = Ложь; + ПараметрыДанныхФайла.ПолучатьСсылкуНаДвоичныеДанные = Ложь; + + ДанныеФайлаРазмещения = ДанныеФайла(РеквизитРазмещения, ПараметрыДанныхФайла); + + Если ДобавляемыйЭлемент.ПоказыватьКоманднуюПанель Тогда + + ГруппаНепосредственногоРедактирования = Форма.Элементы.Добавить( + "ГруппаНепосредственногоРедактирования" + НомерЭлемента, + Тип("ГруппаФормы"), ПанельКоманд); + + ГруппаНепосредственногоРедактирования.Вид = ВидГруппыФормы.ГруппаКнопок; + ГруппаНепосредственногоРедактирования.Отображение = ОтображениеГруппыКнопок.Компактное; + + КнопкаРедактирования = ДобавитьКнопкуНаФорму(Форма, + "УправлениеПрисоединеннымиФайламиРедактироватьФайл" + НомерЭлемента, + ГруппаНепосредственногоРедактирования, РедактироватьФайл.Имя); + + КнопкаПомещения = ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиПоместитьФайл" + НомерЭлемента, + ГруппаНепосредственногоРедактирования, ПоместитьФайл.Имя); + + КнопкаОтмены = ДобавитьКнопкуНаФорму(Форма, "УправлениеПрисоединеннымиФайламиОтменитьРедактирование" + НомерЭлемента, + ГруппаНепосредственногоРедактирования, ОтменитьРедактирование.Имя); + + УстановитьДоступностьРедактирования(ДанныеФайлаРазмещения, КнопкаРедактирования, КнопкаОтмены, КнопкаПомещения); + + КонецЕсли; + + Если ДобавляемыйЭлемент.ПоказыватьПредпросмотр Тогда + + ГруппаРедактированияВМеню = Форма.Элементы.Добавить( + "ГруппаРедактированияВМеню" + НомерЭлемента, + Тип("ГруппаФормы"), КонтекстноеМенюПредпросмотра); + + ГруппаРедактированияВМеню.Вид = ВидГруппыФормы.ГруппаКнопок; + + КнопкаРедактирования = ДобавитьКнопкуНаФорму(Форма, "РедактироватьФайлИзКонтекстногоМеню" + НомерЭлемента, + ГруппаРедактированияВМеню, РедактироватьФайл.Имя); + + КнопкаОтмены = ДобавитьКнопкуНаФорму(Форма, "ПоместитьФайлИзКонтекстногоМеню" + НомерЭлемента, + ГруппаРедактированияВМеню, ПоместитьФайл.Имя); + + КнопкаПомещения = ДобавитьКнопкуНаФорму(Форма, "ОтменитьРедактированиеИзКонтекстногоМеню" + НомерЭлемента, + ГруппаРедактированияВМеню, ОтменитьРедактирование.Имя); + + УстановитьДоступностьРедактирования(ДанныеФайлаРазмещения, КнопкаРедактирования, КнопкаОтмены, КнопкаПомещения); + + КонецЕсли; + + КонецЕсли; +КонецПроцедуры + +Процедура УстановитьДоступностьРедактирования(ДанныеФайла, КнопкаРедактирования, КнопкаОтмены, КнопкаПомещения) + + Если ДанныеФайла <> Неопределено Тогда + + КнопкаРедактирования.Доступность = Не ДанныеФайла.ФайлРедактируется; + КнопкаОтмены.Доступность = ДанныеФайла.ФайлРедактируется + И ДанныеФайла.ФайлРедактируетТекущийПользователь; + КнопкаПомещения.Доступность = ДанныеФайла.ФайлРедактируется + И ДанныеФайла.ФайлРедактируетТекущийПользователь; + + Иначе + + КнопкаОтмены.Доступность = Ложь; + КнопкаПомещения.Доступность = Ложь; + КнопкаРедактирования.Доступность = Ложь; + + КонецЕсли; + +КонецПроцедуры + +Функция ДобавитьКнопкуНаФорму(Форма, ИмяКнопки, Родитель, ИмяКоманды) + + КнопкаФормы = Форма.Элементы.Добавить(ИмяКнопки, + Тип("КнопкаФормы"), Родитель); + + КнопкаФормы.ИмяКоманды = ИмяКоманды; + + Возврат КнопкаФормы; + +КонецФункции + +Функция РеквизитФормыПоИмени(РеквизитыФормы, ИмяРеквизита) + + Для Каждого Реквизит Из РеквизитыФормы Цикл + Если Реквизит.Имя = ИмяРеквизита Тогда + Возврат Реквизит; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index 9e024f636..9e57ca612 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Работа с файлами". // @@ -55,14 +63,20 @@ // Фильтр - Строка - Фильтр выбираемого файла, например, картинки для номенклатуры. // ГруппаФайлов - ОпределяемыйТип.ПрисоединенныйФайл - Группа справочника с файлами, в которую будет // добавлен новый файл. +// ОбработчикРезультата - ОписаниеОповещения - Содержит описание процедуры, вызов которой будет произведен +// после добавления файлов со следующими параметрами: +// * Результат - Массив - Ссылки на добавленные файлы. Если файлы не были добавлены, пустой массив. +// * ДополнительныеПараметры - Произвольный - значение, указанное при создании описания оповещения. // -Процедура ДобавитьФайлы(Знач ВладелецФайла, Знач ИдентификаторФормы, Знач Фильтр = "", ГруппаФайлов = Неопределено) Экспорт +Процедура ДобавитьФайлы(Знач ВладелецФайла, Знач ИдентификаторФормы, Знач Фильтр = "", ГруппаФайлов = Неопределено, + ОбработчикРезультата = Неопределено) Экспорт Параметры = Новый Структура; - Параметры.Вставить("ВладелецФайла", ВладелецФайла); - Параметры.Вставить("ИдентификаторФормы", ИдентификаторФормы); - Параметры.Вставить("Фильтр", Фильтр); - Параметры.Вставить("ГруппаФайлов", ГруппаФайлов); + Параметры.Вставить("ВладелецФайла", ВладелецФайла); + Параметры.Вставить("ИдентификаторФормы", ИдентификаторФормы); + Параметры.Вставить("Фильтр", Фильтр); + Параметры.Вставить("ГруппаФайлов", ГруппаФайлов); + Параметры.Вставить("ОбработчикРезультата", ОбработчикРезультата); ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьФайлыРасширениеПредложено", РаботаСФайламиСлужебныйКлиент, Параметры); РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения); @@ -91,21 +105,38 @@ // * 2 - с диска (из файловой системы клиента); // * 3 - со сканера. // -// НеОткрыватьКарточку - Булево - действие после создания: -// * Ложь - Открывать карточку файла после создания. -// * Истина - Не открывать карточку файла после создания. +// ПараметрыДобавления - Структура - Дополнительные параметры добавления файлов. +// * МаксимальныйРазмер - Число - Ограничение на размер файла (в мегабайтах), загружаемого из файловой системы. +// Если принимает значение 0, проверка размера не проводится. Свойство игнорируется, +// если принимает значение больше, чем указано в константе МаксимальныйРазмерФайла. +// * ФильтрДиалогаВыбора - Строка - Фильтр, устанавливаемый в диалог выбора при добавлении файла. +// Формат см. в свойстве Фильтр объекта ДиалогВыбораФайла в синтакс-помощнике. +// * НеОткрыватьКарточку - Булево - Действие после создания. Если принимает значение Истина, карточка файла +// не будет открыта после создания, иначе - карточку файла будет открыта. // Процедура ДобавитьФайл(ОбработчикРезультата, ВладелецФайла, ФормаВладелец, РежимСоздания = Неопределено, - НеОткрыватьКарточку = Ложь) Экспорт + ПараметрыДобавления = Неопределено) Экспорт + + ПараметрыВыполнения = Новый Структура; + Если ПараметрыДобавления = Неопределено + Или ТипЗнч(ПараметрыДобавления) = Тип("Булево") Тогда + + ПараметрыВыполнения.Вставить("МаксимальныйРазмер" , 0); + ПараметрыВыполнения.Вставить("НеОткрыватьКарточку", ?(ПараметрыДобавления = Неопределено, Ложь, ПараметрыДобавления)); + ПараметрыВыполнения.Вставить("ФильтрДиалогаВыбора", НСтр("ru = 'Все файлы(*.*)|*.*'")); + + Иначе + ПараметрыВыполнения.Вставить("МаксимальныйРазмер" , ПараметрыДобавления.МаксимальныйРазмер); + ПараметрыВыполнения.Вставить("НеОткрыватьКарточку", ПараметрыДобавления.НеОткрыватьКарточку); + ПараметрыВыполнения.Вставить("ФильтрДиалогаВыбора", ПараметрыДобавления.ФильтрДиалогаВыбора); + КонецЕсли; Если РежимСоздания = Неопределено Тогда - РаботаСФайламиСлужебныйКлиент.ДобавитьФайл(ОбработчикРезультата, ВладелецФайла, ФормаВладелец, , НеОткрыватьКарточку); + РаботаСФайламиСлужебныйКлиент.ДобавитьФайл(ОбработчикРезультата, ВладелецФайла, ФормаВладелец, , ПараметрыВыполнения); Иначе - ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); ПараметрыВыполнения.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыВыполнения.Вставить("ФормаВладелец", ФормаВладелец); - ПараметрыВыполнения.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", НеОткрыватьКарточку); ПараметрыВыполнения.Вставить("ТолькоОдинФайл", Истина); РаботаСФайламиСлужебныйКлиент.ДобавитьПослеВыбораРежимаСоздания(РежимСоздания, ПараметрыВыполнения); КонецЕсли; @@ -197,7 +228,7 @@ ПараметрыФормы = Новый Структура; Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда - ПараметрыФормы = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ДополнительныеПараметры); + ПараметрыФормы = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ДополнительныеПараметры); ИмяСправочникаХранилищаФайлов = Неопределено; Если ДополнительныеПараметры.Свойство("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов) Тогда ЭтоФайлы = (ИмяСправочникаХранилищаФайлов = "Файлы"); @@ -271,8 +302,14 @@ // ЭлементФормы - ТаблицаФормы, ПолеФормы - элемент формы, которому будет отправлено // оповещение о выборе. // СтандартнаяОбработка - Булево - (возвращаемое значение), всегда устанавливается в Ложь. +// ОписаниеОповещенияОВыборе - ОписаниеОповещения - описание процедуры, которая будет вызвана при закрытии формы +// со следующими параметрами: +// * ЗначениеВыбора - ОпределяемыйТип.ПрисоединенныйФайл, Неопределено - Если произошел выбор, тогда будет +// возвращено значение выбора. Иначе - Неопределено. +// * ДополнительныеПараметры - Произвольный - значение, указанное при создании ОписаниеОповещенияОЗакрытии. // -Процедура ОткрытьФормуВыбораФайлов(Знач ВладелецФайлов, Знач ЭлементФормы, СтандартнаяОбработка = Ложь) Экспорт +Процедура ОткрытьФормуВыбораФайлов(Знач ВладелецФайлов, Знач ЭлементФормы, СтандартнаяОбработка = Ложь, + ОписаниеОповещенияОВыборе = Неопределено) Экспорт СтандартнаяОбработка = Ложь; @@ -286,7 +323,8 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайлов); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныеФайлы", ПараметрыФормы, ЭлементФормы); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныеФайлы", ПараметрыФормы, ЭлементФормы,,,, + ?(ОписаниеОповещенияОВыборе <> Неопределено, ОписаниеОповещенияОВыборе, Неопределено)); КонецЕсли; КонецПроцедуры @@ -316,7 +354,7 @@ ПараметрыФормы = Новый Структура; Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда - ПараметрыФормы = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ДополнительныеПараметры); + ПараметрыФормы = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ДополнительныеПараметры); КонецЕсли; Если ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.Файлы") Тогда ПараметрыФормы.Вставить("Ключ", ПрисоединенныйФайл); @@ -482,10 +520,7 @@ // Процедура ОткрытьФормуНастройкиСканирования() Экспорт - СистемнаяИнформация = Новый СистемнаяИнформация; - Если СистемнаяИнформация.ТипПлатформы <> ТипПлатформы.Windows_x86 - Или ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - + Если Не РаботаСФайламиСлужебныйКлиент.ДоступноСканирование() Тогда ТекстСообщения = НСтр("ru = 'Для сканирования необходимо использовать 32-битную версию программы для ОС Windows.'"); ПоказатьПредупреждение(, ТекстСообщения); Возврат; @@ -494,9 +529,11 @@ КомпонентаУстановлена = РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту(); Если Не КомпонентаУстановлена Тогда - ТекстВопроса = НСтр("ru = 'Для продолжения работы необходимо установить компоненту сканирования. - |Установить компоненту?'"); - Обработчик = Новый ОписаниеОповещения("ПоказатьВопросУстановкиКомпонентыСканирования", ЭтотОбъект, КомпонентаУстановлена); + ТекстВопроса = + НСтр("ru = 'Для продолжения работы необходимо установить компоненту сканирования. + |Установить компоненту?'"); + Обработчик = Новый ОписаниеОповещения("ПоказатьВопросУстановкиКомпонентыСканирования", + ЭтотОбъект, КомпонентаУстановлена); ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет); Возврат; КонецЕсли; @@ -505,6 +542,186 @@ КонецПроцедуры +#Область УправлениеПрисоединеннымиФайлами + +// Обработчик события ПриОткрытии управляемой формы владельца файла. +// +// Параметры: +// Форма - УправляемаяФорма - Форма владельца файла. +// Отказ - Булево - Стандартный параметр события ПриОткрытии управляемой формы. +// +Процедура ПриОткрытии(Форма, Отказ) Экспорт + + НаличиеСканера = РаботаСФайламиСлужебныйКлиентПовтИсп.ДоступнаКомандаСканировать(); + Если Не НаличиеСканера Тогда + ИзменитьВидимостьДополнительныхКоманд(Форма); + КонецЕсли; + +КонецПроцедуры + +// Обработчик события ОбработкаОповещения управляемой формы владельца файла. +// +// Параметры: +// Форма - УправляемаяФорма - Форма владельца файла. +// ИмяСобытия - Строка - Стандартный параметр события ОбработкаОповещения управляемой формы. +// +Процедура ОбработкаОповещения(Форма, ИмяСобытия) Экспорт + + Если ИмяСобытия <> "Запись_Файл" Тогда + Возврат; + КонецЕсли; + + Для НомерЭлемента = 0 По Форма.ПараметрыРаботыСФайлами.ВГраница() Цикл + + ОтображатьКоличество = Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ОтображатьКоличество; + Если Не ОтображатьКоличество Тогда + Продолжить; + КонецЕсли; + + ВладелецПрисоединенныхФайлов = ЗначениеПараметраПрисоединенногоФайла(Форма, НомерЭлемента, "ПутьКДаннымВладельца"); + КоличествоПрисоединенныхФайлов = РаботаСФайламиСлужебныйВызовСервера.КоличествоПрисоединенныхФайлов(ВладелецПрисоединенныхФайлов); + КоличествоПрисоединенныхФайловСтрокой = Формат(КоличествоПрисоединенныхФайлов, "ЧГ="); + + Гиперссылка = Форма.Элементы.Найти("УправлениеПрисоединеннымиФайламиОткрытьСписок" + НомерЭлемента); + Если Гиперссылка = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПозицияКоличестваВЗаголовке = СтрНайти(Гиперссылка.Заголовок, "("); + Если ПозицияКоличестваВЗаголовке = 0 Тогда + Гиперссылка.Заголовок = Гиперссылка.Заголовок + + ?(КоличествоПрисоединенныхФайлов = 0, "", + " (" + КоличествоПрисоединенныхФайловСтрокой + ")"); + Иначе + Гиперссылка.Заголовок = Лев(Гиперссылка.Заголовок, ПозицияКоличестваВЗаголовке - 1) + + ?(КоличествоПрисоединенныхФайлов = 0, "", + "(" + КоличествоПрисоединенныхФайловСтрокой + ")"); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Обработчик выполнения дополнительных команд управления присоединенными файлами. +// +// Параметры: +// Форма - УправляемаяФорма - Форма владельца файла. +// Команда - КомандаФормы - Выполняемая команда. +// +Процедура КомандаУправленияПрисоединеннымиФайлами(Форма, Команда) Экспорт + + ЧастиИмениКоманды = СтрРазделить(Команда.Имя, "_"); + Если ЧастиИмениКоманды.Количество() <= 1 Тогда + Возврат; + КонецЕсли; + + НомерЭлемента = Число(ЧастиИмениКоманды[1]); + ВладелецПрисоединенныхФайлов = ЗначениеПараметраПрисоединенногоФайла(Форма, НомерЭлемента, "ПутьКДаннымВладельца"); + Если Не ЗначениеЗаполнено(ВладелецПрисоединенныхФайлов) Тогда + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Действие", "ВыполнениеКоманды"); + ПараметрыОбработчика.Вставить("Форма", Форма); + ПараметрыОбработчика.Вставить("Команда", Команда); + ПараметрыОбработчика.Вставить("НомерЭлемента", НомерЭлемента); + + ЗадатьВопросОЗаписиВладельца(ПараметрыОбработчика); + + Иначе + КомандаУправленияПрисоединеннымиФайламиЗавершение(Форма, Команда, ВладелецПрисоединенныхФайлов); + КонецЕсли; + +КонецПроцедуры + +// Обработчик нажатия на поле предпросмотра. +// +// Параметры: +// Форма - УправляемаяФорма - Форма владельца файла. +// Элемент - ПолеФормы - Поле предпросмотра. +// СтандартнаяОбработка - Булево - Стандартный параметр события Нажатие поля формы. +// Просмотр - Булево - Если параметр принимает значение Истина, открывает файл +// для просмотра. Иначе - загружает файл с диска. +// Значение по умолчанию - Ложь. +// +Процедура ПолеПредпросмотраНажатие(Форма, Элемент, СтандартнаяОбработка, Просмотр = Ложь) Экспорт + + СтандартнаяОбработка = Ложь; + + НомерЭлемента = Число(СтрЗаменить(Элемент.Имя, "ПолеКартинкиПрисоединенногоФайла", "")); + ТолькоОдинФайл = Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ТолькоОдинФайл; + ВладелецПрисоединенныхФайлов = ЗначениеПараметраПрисоединенногоФайла(Форма, Число(НомерЭлемента), "ПутьКДаннымВладельца"); + + Если Не ЗначениеЗаполнено(ВладелецПрисоединенныхФайлов) Тогда + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Действие", "ПредпросмотрНажатие"); + ПараметрыОбработчика.Вставить("Форма", Форма); + ПараметрыОбработчика.Вставить("Элемент", Элемент); + ПараметрыОбработчика.Вставить("Просмотр", Просмотр); + ПараметрыОбработчика.Вставить("НомерЭлемента", НомерЭлемента); + ПараметрыОбработчика.Вставить("ТолькоОдинФайл", ТолькоОдинФайл); + + ЗадатьВопросОЗаписиВладельца(ПараметрыОбработчика); + + Иначе + ПолеПредпросмотраНажатиеЗавершение(Форма, ВладелецПрисоединенныхФайлов, Элемент, СтандартнаяОбработка, + Просмотр, ТолькоОдинФайл); + КонецЕсли; + +КонецПроцедуры + +// Обработчик перетаскивания на поле предпросмотра. +// +// Параметры: +// Форма - УправляемаяФорма - Форма владельца файла. +// Элемент - ПолеФормы - Поле предпросмотра. +// ПараметрыПеретаскивания - ПараметрыПеретаскивания - Стандартный параметр события Перетаскивание +// поля формы. +// СтандартнаяОбработка - Булево - Стандартный параметр события Перетаскивание поля формы. +// +Процедура ПолеПредпросмотраПеретаскивание(Форма, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) Экспорт + + НомерЭлемента = Число(СтрЗаменить(Элемент.Имя, "ПолеКартинкиПрисоединенногоФайла", "")); + ТолькоОдинФайл = Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ТолькоОдинФайл; + ВладелецПрисоединенныхФайлов = ЗначениеПараметраПрисоединенногоФайла(Форма, Число(НомерЭлемента), "ПутьКДаннымВладельца"); + + СтандартнаяОбработка = Ложь; + Если Не ЗначениеЗаполнено(ВладелецПрисоединенныхФайлов) Тогда + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Действие", "Перетаскивание"); + ПараметрыОбработчика.Вставить("Форма", Форма); + ПараметрыОбработчика.Вставить("Элемент", Элемент); + ПараметрыОбработчика.Вставить("НомерЭлемента", НомерЭлемента); + ПараметрыОбработчика.Вставить("ТолькоОдинФайл", ТолькоОдинФайл); + ПараметрыОбработчика.Вставить("ПараметрыПеретаскивания", ПараметрыПеретаскивания); + + ЗадатьВопросОЗаписиВладельца(ПараметрыОбработчика); + + Иначе + ПолеПредпросмотраПеретаскиваниеЗавершение(Форма, ВладелецПрисоединенныхФайлов, Элемент, ПараметрыПеретаскивания, + СтандартнаяОбработка, ТолькоОдинФайл); + КонецЕсли; + +КонецПроцедуры + +// Обработчик проверки перетаскивания на поле предпросмотра. +// +// Параметры: +// Форма - УправляемаяФорма - Форма владельца файла. +// Элемент - ПолеФормы - Поле предпросмотра. +// ПараметрыПеретаскивания - ПараметрыПеретаскивания - Стандартный параметр события Проверка +// перетаскивания поля формы. +// СтандартнаяОбработка - Булево - Стандартный параметр события Проверка перетаскивания поля формы. +// +Процедура ПолеПредпросмотраПроверкаПеретаскивания(Форма, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать РаботаСФайламиКлиент.ОткрытьФормуФайла @@ -555,6 +772,11 @@ // Процедура НапечататьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла) +#Если МобильныйКлиент Тогда + ПоказатьПредупреждение(, НСтр("ru='Печать файлов данного типа не поддерживается в мобильном клиенте.'")); + Возврат; +#Иначе + РасширенияИсключения = " m3u, m4a, mid, midi, mp2, mp3, mpa, rmi, wav, wma, | 3g2, 3gp, 3gp2, 3gpp, asf, asx, avi, m1v, m2t, m2ts, m2v, m4v, mkv, mov, mp2v, mp4, mp4v, mpe, mpeg, mts, vob, wm, wmv, wmx, wvx, @@ -565,25 +787,17 @@ Расширение = НРег(ДанныеФайла.Расширение); Если СтрНайти(РасширенияИсключения, " " + Расширение + ",") > 0 Тогда - - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Печать файлов данного типа не поддерживается.'"), Расширение); - ПоказатьПредупреждение(, ТекстСообщения); - + ПоказатьПредупреждение(, НСтр("ru='Печать файлов данного типа не поддерживается.'")); Возврат; - ИначеЕсли Расширение = "grs" Тогда - Схема = Новый ГрафическаяСхема; Схема.Прочитать(ИмяОткрываемогоФайла); - Схема.Напечатать();; - + Схема.Напечатать(); Иначе Попытка - СистемнаяИнфо = Новый СистемнаяИнформация; - Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 - Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда ИмяОткрываемогоФайла = СтрЗаменить(ИмяОткрываемогоФайла, "/", "\"); КонецЕсли; @@ -600,6 +814,8 @@ КонецЕсли; +#КонецЕсли + КонецПроцедуры // Процедура печати Файла @@ -688,29 +904,27 @@ // Процедура НапечататьИзПриложенияПоИмениФайла(ИмяОткрываемогоФайла) +#Если Не МобильныйКлиент Тогда Если Не ЗначениеЗаполнено(ИмяОткрываемогоФайла) Тогда Возврат; КонецЕсли; - - СистемнаяИнфо = Новый СистемнаяИнформация; - Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 - Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - + + Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда Shell = Новый COMОбъект("Shell.Application"); Shell.ShellExecute(ИмяОткрываемогоФайла, "", "", "print", 1); - КонецЕсли; - +#КонецЕсли + КонецПроцедуры -Функция ПоказатьВопросУстановкиКомпонентыСканирования(Результат, КомпонентаУстановлена) Экспорт +Процедура ПоказатьВопросУстановкиКомпонентыСканирования(Результат, КомпонентаУстановлена) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда Обработчик = Новый ОписаниеОповещения("ОткрытьФормуНастройкиСканированияЗавершение", ЭтотОбъект); РаботаСФайламиСлужебныйКлиент.УстановитьКомпоненту(Обработчик); КонецЕсли; -КонецФункции +КонецПроцедуры Процедура ОткрытьФормуНастройкиСканированияЗавершение(КомпонентаУстановлена, ПараметрыВыполнения) Экспорт @@ -737,4 +951,458 @@ КонецПроцедуры +#Область УправлениеПрисоединеннымиФайлами + +Функция ПараметрыКомандыУправления(Форма) + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Форма", Форма); + ПараметрыВыполнения.Вставить("Действие", "ЗагрузитьФайл"); + ПараметрыВыполнения.Вставить("НомерЭлемента", ""); + ПараметрыВыполнения.Вставить("ИдентификаторФормы", Форма.УникальныйИдентификатор); + Возврат ПараметрыВыполнения; + +КонецФункции + +Функция ЗначениеПараметраПрисоединенногоФайла(Форма, Знач НомерЭлемента, ИмяПараметра) + + Если ТипЗнч(НомерЭлемента) = Тип("Строка") Тогда + НомерЭлемента = Число(НомерЭлемента); + КонецЕсли; + + ПутьКДанным = Форма.ПараметрыРаботыСФайлами[НомерЭлемента][ИмяПараметра]; + ЧастиПутиКДанным = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПутьКДанным, ".", Истина, Истина); + Если ЧастиПутиКДанным.Количество() > 0 Тогда + + ЗначениеПараметра = Форма[ЧастиПутиКДанным[0]]; + Для Индекс = 1 По ЧастиПутиКДанным.ВГраница() Цикл + ЗначениеПараметра = ЗначениеПараметра[ЧастиПутиКДанным[Индекс]]; + КонецЦикла; + + Возврат ЗначениеПараметра; + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Процедура ЗадатьВопросОЗаписиВладельца(ПараметрыОбработчикаЗавершения) + + ТекстВопроса = НСтр("ru = 'Данные еще не записаны. + |Переход к присоединенным файлам возможен только после записи данных. + |Данные будут записаны.'"); + ОбработчикОповещения = Новый ОписаниеОповещения("ПоказатьВопросЗаписиНовогоВладельца", ЭтотОбъект, ПараметрыОбработчикаЗавершения); + + ПоказатьВопрос(ОбработчикОповещения, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена); + +КонецПроцедуры + +Процедура ПоказатьВопросЗаписиНовогоВладельца(Ответ, ДополнительныеПараметры) Экспорт + + Если Ответ = КодВозвратаДиалога.ОК Тогда + + Форма = ДополнительныеПараметры.Форма; + Если Не Форма.Записать() Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ВладелецПрисоединенныхФайлов = ЗначениеПараметраПрисоединенногоФайла(Форма, + ДополнительныеПараметры.НомерЭлемента, "ПутьКДаннымВладельца"); + + Если Не ЗначениеЗаполнено(ВладелецПрисоединенныхФайлов) Тогда + Возврат; + КонецЕсли; + + Если ДополнительныеПараметры.Действие = "ВыполнениеКоманды" Тогда + КомандаУправленияПрисоединеннымиФайламиЗавершение(Форма, ДополнительныеПараметры.Команда, ВладелецПрисоединенныхФайлов); + ИначеЕсли ДополнительныеПараметры.Действие = "ПредпросмотрНажатие" Тогда + ПолеПредпросмотраНажатиеЗавершение(Форма, ВладелецПрисоединенныхФайлов, + ДополнительныеПараметры.Элемент, СтандартнаяОбработка, + ДополнительныеПараметры.Просмотр, ДополнительныеПараметры.ТолькоОдинФайл); + ИначеЕсли ДополнительныеПараметры.Действие = "Перетаскивание" Тогда + ПолеПредпросмотраПеретаскиваниеЗавершение(Форма, ВладелецПрисоединенныхФайлов, + ДополнительныеПараметры.Элемент, ДополнительныеПараметры.ПараметрыПеретаскивания, + СтандартнаяОбработка, ДополнительныеПараметры.ТолькоОдинФайл); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура КомандаУправленияПрисоединеннымиФайламиЗавершение(Форма, Команда, ВладелецПрисоединенныхФайлов) + + ЧастиИмениКоманды = СтрРазделить(Команда.Имя, "_"); + ИмяКоманды = СтрЗаменить(ЧастиИмениКоманды[0], "УправлениеПрисоединеннымиФайлами", ""); + + ПараметрыВыполнения = ПараметрыКомандыУправления(Форма); + ПараметрыВыполнения.НомерЭлемента = ЧастиИмениКоманды[1]; + + ОбработчикЗавершения = Новый ОписаниеОповещения("ЗавершениеВыполненияКомандыСОповещением", + ЭтотОбъект, ПараметрыВыполнения); + + ТипЧисло = Новый ОписаниеТипов("Число"); + НомерЭлемента = ТипЧисло.ПривестиЗначение(ПараметрыВыполнения.НомерЭлемента); + ПараметрыДобавленияФайла = Новый Структура; + ПараметрыДобавленияФайла.Вставить("МаксимальныйРазмер", + Форма.ПараметрыРаботыСФайлами[НомерЭлемента].МаксимальныйРазмер); + ПараметрыДобавленияФайла.Вставить("ФильтрДиалогаВыбора", + Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ФильтрДиалогаВыбора); + ПараметрыДобавленияФайла.Вставить("НеОткрыватьКарточку", Истина); + + Если СтрНачинаетсяС(ИмяКоманды, "ОткрытьСписок") Тогда + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("ВладелецФайла", ВладелецПрисоединенныхФайлов); + ПараметрыФормы.Вставить("СкрыватьВладельца", Истина); + ПараметрыФормы.Вставить("ТекущаяСтрока", Форма.УникальныйИдентификатор); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныеФайлы", ПараметрыФормы); + + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "ЗагрузитьФайл") Тогда + + ИмяКоманды = СтрЗаменить(ИмяКоманды, "ЗагрузитьФайл", ""); + ФайлыВладельца = РаботаСФайламиСлужебныйВызовСервера.КоличествоПрисоединенныхФайлов(ВладелецПрисоединенныхФайлов, Истина); + Если СтрНачинаетсяС(ИмяКоманды, "ТолькоОдинФайл") + И ФайлыВладельца.Количество > 0 Тогда + + ДанныеФайла = ФайлыВладельца.ДанныеФайла; + + ПараметрыВыполнения.Действие = "ЗаменитьФайл"; + ПараметрыВыполнения.Вставить("ФайлКартинки", ДанныеФайла.Ссылка); + + РаботаСФайламиСлужебныйКлиент.ОбновитьИзФайлаНаДискеСОповещением(ОбработчикЗавершения, + ДанныеФайла, Форма.УникальныйИдентификатор, ПараметрыДобавленияФайла); + + Иначе + ДобавитьФайл(ОбработчикЗавершения, ВладелецПрисоединенныхФайлов, Форма, 2, ПараметрыДобавленияФайла); + КонецЕсли; + + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "ЗаголовокПрисоединенногоФайла") Тогда + + Размещение = ЗначениеПараметраПрисоединенногоФайла(Форма, ПараметрыВыполнения.НомерЭлемента, "ПутьКРеквизитуРазмещения"); + Если Не ЗначениеЗаполнено(Размещение) Тогда + ДобавитьФайл(ОбработчикЗавершения, ВладелецПрисоединенныхФайлов, Форма, 2, ПараметрыДобавленияФайла); + Иначе + ПараметрыВыполнения.Действие = "ПросмотретьФайл"; + ВыполнитьДействиеСФайлом(ПараметрыВыполнения, ОбработчикЗавершения); + КонецЕсли; + + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "СоздатьПоШаблону") Тогда + ДобавитьФайл(ОбработчикЗавершения, ВладелецПрисоединенныхФайлов, Форма, 1, ПараметрыДобавленияФайла); + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "Сканировать") Тогда + ДобавитьФайл(ОбработчикЗавершения, ВладелецПрисоединенныхФайлов, Форма, 3, ПараметрыДобавленияФайла); + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "ВыбратьФайл") Тогда + ПараметрыВыполнения.Действие = "ВыбратьФайл"; + ОткрытьФормуВыбораФайлов(ВладелецПрисоединенныхФайлов, Неопределено, Ложь, ОбработчикЗавершения); + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "ПросмотретьФайл") Тогда + ПараметрыВыполнения.Действие = "ПросмотретьФайл"; + ВыполнитьДействиеСФайлом(ПараметрыВыполнения, ОбработчикЗавершения); + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "Очистить") Тогда + ОбновитьРеквизитХраненияПрисоединенногоФайла(Форма, ПараметрыВыполнения.НомерЭлемента, Неопределено); + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "ОткрытьФорму") Тогда + ПараметрыВыполнения.Действие = "ОткрытьФорму"; + ВыполнитьДействиеСФайлом(ПараметрыВыполнения, ОбработчикЗавершения); + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "РедактироватьФайл") Тогда + ПараметрыВыполнения.Действие = "РедактироватьФайл"; + ВыполнитьДействиеСФайлом(ПараметрыВыполнения, ОбработчикЗавершения); + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "ПоместитьФайл") Тогда + ПараметрыВыполнения.Действие = "ПоместитьФайл"; + ВыполнитьДействиеСФайлом(ПараметрыВыполнения, ОбработчикЗавершения); + ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "ОтменитьРедактирование") Тогда + ПараметрыВыполнения.Действие = "ОтменитьРедактирование"; + ВыполнитьДействиеСФайлом(ПараметрыВыполнения, ОбработчикЗавершения); + КонецЕсли; + +КонецПроцедуры + +Процедура ПолеПредпросмотраНажатиеЗавершение(Форма, ВладелецПрисоединенныхФайлов, Элемент, СтандартнаяОбработка, + Просмотр = Ложь, ТолькоОдинФайл = Ложь) + + СтандартнаяОбработка = Ложь; + НомерЭлемента = СтрЗаменить(Элемент.Имя, "ПолеКартинкиПрисоединенногоФайла", ""); + ПараметрыВыполнения = ПараметрыКомандыУправления(Форма); + ПараметрыВыполнения.НомерЭлемента = НомерЭлемента; + + ТипЧисло = Новый ОписаниеТипов("Число"); + НомерЭлемента = ТипЧисло.ПривестиЗначение(ПараметрыВыполнения.НомерЭлемента); + ПараметрыДобавленияФайла = Новый Структура; + ПараметрыДобавленияФайла.Вставить("МаксимальныйРазмер", + Форма.ПараметрыРаботыСФайлами[НомерЭлемента].МаксимальныйРазмер); + ПараметрыДобавленияФайла.Вставить("ФильтрДиалогаВыбора", + Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ФильтрДиалогаВыбора); + ПараметрыДобавленияФайла.Вставить("НеОткрыватьКарточку", Истина); + + ПараметрыДобавленияИзображения = РаботаСФайламиСлужебныйВызовСервера.ПараметрыДобавленияИзображения(ВладелецПрисоединенныхФайлов); + Если Просмотр + Или Не ПараметрыДобавленияИзображения.ПравоДобавления Тогда + + ПараметрыВыполнения.Действие = "ПросмотретьФайл"; + ВыполнитьДействиеСФайлом(ПараметрыВыполнения, Неопределено); + + Иначе + + ОбработчикЗавершения = Новый ОписаниеОповещения("ЗавершениеВыполненияКомандыСОповещением", + ЭтотОбъект, ПараметрыВыполнения); + + Если ТолькоОдинФайл Тогда + + ФайлыВладельца = ПараметрыДобавленияИзображения.ФайлыВладельца; + Если ФайлыВладельца.КоличествоФайлов > 0 Тогда + + ДанныеФайла = ФайлыВладельца.ДанныеФайла; + ПараметрыВыполнения.Действие = "ЗаменитьФайл"; + ПараметрыВыполнения.Вставить("ФайлКартинки", ДанныеФайла.Ссылка); + + РаботаСФайламиСлужебныйКлиент.ОбновитьИзФайлаНаДискеСОповещением(ОбработчикЗавершения, ДанныеФайла, + Форма.УникальныйИдентификатор, ПараметрыДобавленияФайла); + + Иначе + ДобавитьФайл(ОбработчикЗавершения, ВладелецПрисоединенныхФайлов, Форма, 2, ПараметрыДобавленияФайла); + КонецЕсли; + + Иначе + ДобавитьФайл(ОбработчикЗавершения, ВладелецПрисоединенныхФайлов, Форма, 2, ПараметрыДобавленияФайла); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ПолеПредпросмотраПеретаскиваниеЗавершение(Форма, ВладелецПрисоединенныхФайлов, Элемент, ПараметрыПеретаскивания, + СтандартнаяОбработка, ТолькоОдинФайл = Ложь) + + СтандартнаяОбработка = Ложь; + ПараметрыВыполнения = ПараметрыКомандыУправления(Форма); + ПараметрыВыполнения.НомерЭлемента = СтрЗаменить(Элемент.Имя, "ПолеКартинкиПрисоединенногоФайла", ""); + + ТипЧисло = Новый ОписаниеТипов("Число"); + НомерЭлемента = ТипЧисло.ПривестиЗначение(ПараметрыВыполнения.НомерЭлемента); + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") + И РаботаСФайламиСлужебныйВызовСервера.ЕстьПравоДоступа("Добавление", ВладелецПрисоединенныхФайлов) Тогда + + ПараметрыВыполнения.Действие = "ЗавершитьПеретаскивание"; + ОбработчикЗавершения = Новый ОписаниеОповещения("ЗавершениеВыполненияКомандыСОповещением", + ЭтотОбъект, ПараметрыВыполнения); + + ПараметрыДобавления = Новый Структура; + ПараметрыДобавления.Вставить("ОбработчикРезультата", ОбработчикЗавершения); + ПараметрыДобавления.Вставить("ПолноеИмяФайла", ПараметрыПеретаскивания.Значение.ПолноеИмя); + ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецПрисоединенныхФайлов); + ПараметрыДобавления.Вставить("ФормаВладелец", Форма); + ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина); + ПараметрыДобавления.Вставить("ИмяСоздаваемогоФайла", ПараметрыПеретаскивания.Значение.ИмяБезРасширения); + ПараметрыДобавления.Вставить("МаксимальныйРазмер", + Форма.ПараметрыРаботыСФайлами[НомерЭлемента].МаксимальныйРазмер); + ПараметрыДобавления.Вставить("ФильтрДиалогаВыбора", + Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ФильтрДиалогаВыбора); + + РаботаСФайламиСлужебныйКлиент.ДобавитьИзФайловойСистемыСРасширением(ПараметрыДобавления); + + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьРеквизитХраненияПрисоединенногоФайла(Форма, Знач НомерЭлемента, Файл) + + Если ТипЗнч(НомерЭлемента) = Тип("Строка") Тогда + НомерЭлемента = Число(НомерЭлемента); + КонецЕсли; + + ПутьКДанным = Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ПутьКРеквизитуРазмещения; + ЧастиПутиКДанным = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПутьКДанным, ".", Истина, Истина); + + Если ЧастиПутиКДанным.Количество() > 0 Тогда + + УровеньРасположенияРеквизита = ЧастиПутиКДанным.Количество(); + Если УровеньРасположенияРеквизита = 1 Тогда + Форма[ЧастиПутиКДанным[0]] = Файл; + ИначеЕсли УровеньРасположенияРеквизита = 2 Тогда + Форма[ЧастиПутиКДанным[0]][ЧастиПутиКДанным[1]] = Файл; + Иначе + Возврат; + КонецЕсли; + + ОбновитьОбластьПредпросмотра(Форма, НомерЭлемента, Файл); + + Форма.Модифицированность = Истина; + + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьОбластьПредпросмотра(Форма, НомерЭлемента, Файл) + + ИмяРеквизита = Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ПутьКДаннымИзображения; + ЭлементКартинки = Форма.Элементы.Найти("ПолеКартинкиПрисоединенногоФайла" + НомерЭлемента); + ЭлементЗаголовка = Форма.Элементы.Найти("ЗаголовокПрисоединенногоФайла" + НомерЭлемента); + + ПараметрыДанных = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла(); + ПараметрыДанных.ВызыватьИсключение = Ложь; + ПараметрыДанных.ИдентификаторФормы = Форма.УникальныйИдентификатор; + + ДанныеОбновления = РаботаСФайламиСлужебныйВызовСервера.ДанныеОбновленияПоляИзображения( + Файл, ПараметрыДанных); + + ДанныеФайла = ДанныеОбновления.ДанныеФайла; + Если ЭлементКартинки <> Неопределено Тогда + + ТекстНевыбраннойКартинки = Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ТекстНевыбраннойКартинки; + Если ДанныеФайла = Неопределено Тогда + Форма[ИмяРеквизита] = Неопределено; + ЭлементКартинки.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки; + ИначеЕсли ДанныеОбновления.ФайлПоврежден Тогда + Форма[ИмяРеквизита] = Неопределено; + ЭлементКартинки.ТекстНевыбраннойКартинки = НСтр("ru = 'Изображение отсутствует'"); + Иначе + Форма[ИмяРеквизита] = ДанныеФайла.СсылкаНаДвоичныеДанныеФайла; + ЭлементКартинки.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки; + КонецЕсли; + + ЭлементКартинки.ЦветТекста = ДанныеОбновления.ЦветТекста; + + КонецЕсли; + + Если ЭлементЗаголовка <> Неопределено Тогда + + Если ДанныеФайла = Неопределено Тогда + ЭлементЗаголовка.Заголовок = НСтр("ru = 'загрузить'"); + ЭлементЗаголовка.ОтображениеПодсказки = ОтображениеПодсказки.Нет; + Иначе + ЭлементЗаголовка.Заголовок = ДанныеФайла.ИмяФайла; + ЭлементЗаголовка.ОтображениеПодсказки = ОтображениеПодсказки.Авто; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьДействиеСФайлом(ПараметрыВыполнения, ОбработчикЗавершения) + + Форма = ПараметрыВыполнения.Форма; + Размещение = ЗначениеПараметраПрисоединенногоФайла(Форма, Число(ПараметрыВыполнения.НомерЭлемента), "ПутьКРеквизитуРазмещения"); + Если ЗначениеЗаполнено(Размещение) Тогда + + Если ПараметрыВыполнения.Действие = "ПросмотретьФайл" Тогда + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Размещение, Неопределено, Форма.УникальныйИдентификатор); + ОткрытьФайл(ДанныеФайла); + ИначеЕсли ПараметрыВыполнения.Действие = "ОткрытьФорму" Тогда + ОткрытьФормуФайла(Размещение); + ИначеЕсли ПараметрыВыполнения.Действие = "РедактироватьФайл" Тогда + РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(ОбработчикЗавершения, Размещение); + ИначеЕсли ПараметрыВыполнения.Действие = "ПоместитьФайл" Тогда + + ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(ОбработчикЗавершения, + Размещение, Форма.УникальныйИдентификатор); + ПараметрыОбновленияФайла.Вставить("СоздатьНовуюВерсию", Ложь); + РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла); + + ИначеЕсли ПараметрыВыполнения.Действие = "ОтменитьРедактирование" Тогда + + МассивФайлов = Новый Массив; + МассивФайлов.Добавить(Размещение); + + РаботаСФайламиСлужебныйВызовСервера.ОсвободитьФайлы(МассивФайлов); + ЗавершениеВыполненияКомандыСОповещением(Неопределено, ПараметрыВыполнения); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗавершениеВыполненияКомандыСОповещением(Результат, ДополнительныеПараметры) Экспорт + + Если ДополнительныеПараметры.Действие = "ЗаменитьФайл" Тогда + + ОбновитьОбластьПредпросмотра(ДополнительныеПараметры.Форма, ДополнительныеПараметры.НомерЭлемента, + ДополнительныеПараметры.ФайлКартинки); + + ИначеЕсли (ДополнительныеПараметры.Действие = "ЗагрузитьФайл" + ИЛИ ДополнительныеПараметры.Действие = "ЗавершитьПеретаскивание") + И Результат <> Неопределено + И Результат.ФайлДобавлен Тогда + + ОбновитьРеквизитХраненияПрисоединенногоФайла(ДополнительныеПараметры.Форма, ДополнительныеПараметры.НомерЭлемента, + Результат.ФайлСсылка); + + ИначеЕсли ДополнительныеПараметры.Действие = "ВыбратьФайл" + И Результат <> Неопределено Тогда + + ОбновитьРеквизитХраненияПрисоединенногоФайла(ДополнительныеПараметры.Форма, ДополнительныеПараметры.НомерЭлемента, + Результат); + + ИначеЕсли ДополнительныеПараметры.Действие = "РедактироватьФайл" Тогда + ИзменитьДоступностьКнопок(ДополнительныеПараметры.Форма, ДополнительныеПараметры.НомерЭлемента, Истина); + ИначеЕсли ДополнительныеПараметры.Действие = "ПоместитьФайл" + Или ДополнительныеПараметры.Действие = "ОтменитьРедактирование" Тогда + ИзменитьДоступностьКнопок(ДополнительныеПараметры.Форма, ДополнительныеПараметры.НомерЭлемента, Ложь); + КонецЕсли; + +КонецПроцедуры + +Процедура ИзменитьДоступностьКнопок(Форма, НомерЭлемента, НачалоРедактирования) + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("УправлениеПрисоединеннымиФайламиПоместитьФайл" + НомерЭлемента, , НачалоРедактирования); + Кнопки.Добавить("УправлениеПрисоединеннымиФайламиОтменитьРедактирование" + НомерЭлемента, , НачалоРедактирования); + Кнопки.Добавить("УправлениеПрисоединеннымиФайламиРедактироватьФайл" + НомерЭлемента, , Не НачалоРедактирования); + Кнопки.Добавить("ПоместитьФайлИзКонтекстногоМеню" + НомерЭлемента, , НачалоРедактирования); + Кнопки.Добавить("ОтменитьРедактированиеИзКонтекстногоМеню" + НомерЭлемента, , НачалоРедактирования); + Кнопки.Добавить("РедактироватьФайлИзКонтекстногоМеню" + НомерЭлемента, , Не НачалоРедактирования); + + Элементы = Форма.Элементы; + Для Каждого Кнопка Из Кнопки Цикл + + КнопкаФормы = Элементы.Найти(Кнопка.Значение); + Если КнопкаФормы <> Неопределено Тогда + КнопкаФормы.Доступность = Кнопка.Пометка; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ИзменитьВидимостьДополнительныхКоманд(Форма) + + Для ИндексЭлемента = 0 По Форма.ПараметрыРаботыСФайлами.ВГраница() Цикл + + ПодменюКоманд = Форма.Элементы.Найти("ПодменюДобавленияФайла" + ИндексЭлемента); + КнопкаКомандыВыбрать = Форма.Элементы.Найти("УправлениеПрисоединеннымиФайламиВыбратьФайл" + ИндексЭлемента); + КнопкаКомандыЗагрузить = Форма.Элементы.Найти("УправлениеПрисоединеннымиФайламиЗагрузитьФайл" + ИндексЭлемента); + КнопкаКомандыСканировать = Форма.Элементы.Найти("УправлениеПрисоединеннымиФайламиСканировать" + ИндексЭлемента); + КнопкаКомандыСоздатьИзШаблона = Форма.Элементы.Найти("УправлениеПрисоединеннымиФайламиСоздатьПоШаблону" + ИндексЭлемента); + + Если КнопкаКомандыСканировать <> Неопределено Тогда + КнопкаКомандыСканировать.Видимость = Ложь; + ЭлементКонтекстногоМеню = Форма.Элементы["УправлениеПрисоединеннымиФайламиСканироватьИзКонтекстногоМеню" + + ИндексЭлемента]; + + ЭлементКонтекстногоМеню.Видимость = Ложь; + КонецЕсли; + + Если КнопкаКомандыСоздатьИзШаблона <> Неопределено Тогда + КнопкаКомандыСоздатьИзШаблона.Видимость = Ложь; + ЭлементКонтекстногоМеню = Форма.Элементы["УправлениеПрисоединеннымиФайламиСоздатьПоШаблонуИзКонтекстногоМеню" + + ИндексЭлемента]; + + ЭлементКонтекстногоМеню.Видимость = Ложь; + КонецЕсли; + + ВидимостьПодменю = Ложь; + Если ПодменюКоманд <> Неопределено Тогда + ВидимостьПодменю = КнопкаКомандыВыбрать <> Неопределено; + ПодменюКоманд.Видимость = ВидимостьПодменю; + КонецЕсли; + + Если КнопкаКомандыЗагрузить <> Неопределено Тогда + КнопкаКомандыЗагрузить.Видимость = Не ВидимостьПодменю; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl index 84d95cc43..ff470fffe 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Работа с файлами". // diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl index e9070ba3f..a94f79aad 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl @@ -1,13 +1,47 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Работа с файлами". // //////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. + +// Инициализирует структуру параметров для получения данных файла. См. РаботаСФайлами.ДанныеФайла. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, во временное хранилище +// которой надо поместить файл и вернуть адрес в свойстве СсылкаНаДвоичныеДанныеФайла. +// Значение по умолчанию - Неопределено. +// * ПолучатьСсылкуНаДвоичныеДанные - Булево - если передать Ложь, то ссылка на двоичные данные в СсылкаНаДвоичныеДанныеФайла +// не будет получена, что существенно ускорит выполнение для больших двоичных данных. +// Значение по умолчанию - Истина. +// * ДляРедактирования - Булево - если указать Истина, то файл будет захвачен для редактирования. +// Значение по умолчанию - Ложь. +// * ВызыватьИсключение - Булево - если указать Ложь, то функция в исключительных ситуациях не будет вызывать +// исключений и вернет Неопределено. Значение по умолчанию - Истина. +// +Функция ПараметрыДанныхФайла() Экспорт + + ПараметрыДанных = Новый Структура; + ПараметрыДанных.Вставить("ДляРедактирования", Ложь); + ПараметрыДанных.Вставить("ИдентификаторФормы", Неопределено); + ПараметрыДанных.Вставить("ВызыватьИсключение", Истина); + ПараметрыДанных.Вставить("ПолучатьСсылкуНаДвоичныеДанные", Истина); + Возврат ПараметрыДанных; + +КонецФункции #Область УстаревшиеПроцедурыИФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события. // Устарела. Следует использовать РаботаСФайлами.ОпределитьФормуПрисоединенногоФайла. // Обработчик подписки на событие ОбработкаПолученияФормы для переопределения формы файла. @@ -153,21 +187,4 @@ КонецФункции -// Возвращает строковую константу для формирования сообщений журнала регистрации. -// -// Возвращаемое значение: -// Строка -// -Функция СобытиеЖурналаРегистрации() Экспорт - - Возврат НСтр("ru = 'Файлы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - -Функция СобытиеЖурналаРегистрацииСинхронизация() Экспорт - - Возврат НСтр("ru = 'Синхронизация файлов с облачным сервисом'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl index af10561b4..f6974df68 100644 --- a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Работа с файлами". // @@ -148,5 +156,17 @@ КонецПроцедуры +// Позволяет изменить структуру параметров для размещения гиперссылки присоединенных файлов на форме. +// +// Параметры: +// ПараметрыГиперссылки - Структура - см. РаботаСФайлами.ГиперссылкаФайлов. +// +// Пример: +// ПараметрыГиперссылки.Размещение = "КоманднаяПанель"; +// +Процедура ПриОпределенииГиперссылкиФайлов(ПараметрыГиперссылки) Экспорт + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index 29a50ec69..a0408a2b8 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. @@ -14,6 +22,16 @@ ПолныйПуть = ПолныйПутьТома(ОбъектФайла.Том) + ОбъектФайла.ПутьКФайлу; КопироватьФайл(ПолныйПуть, ИмяНовогоФайла); + // Исходному файлу мог быть установлен атрибут "Только чтение". + // Унаследованный при копировании атрибут снимается, чтобы файл можно было удалить. + СвойстваФайла = Новый Файл(ИмяНовогоФайла); + + Если СвойстваФайла.Существует() И СвойстваФайла.ПолучитьТолькоЧтение() Тогда + + СвойстваФайла.УстановитьТолькоЧтение(Ложь); + + КонецЕсли; + Иначе // Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе ДвоичныеДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(ОбъектФайла.Ссылка); @@ -61,6 +79,258 @@ КонецПроцедуры +Процедура ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, ВерсияФайла = Неопределено) Экспорт + + СправочникПоддерживаетВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл))); + + Если СправочникПоддерживаетВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда + ТекущаяВерсияФайла = ПрисоединенныйФайл.ТекущаяВерсия; + Иначе + ТекущаяВерсияФайла = ПрисоединенныйФайл.Ссылка; + КонецЕсли; + + Результат.Вставить("ТекущаяВерсия", ТекущаяВерсияФайла); + + Если ВерсияФайла <> Неопределено Тогда + Результат.Вставить("Версия", ВерсияФайла); + ИначеЕсли СправочникПоддерживаетВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда + Результат.Вставить("Версия", ПрисоединенныйФайл.ТекущаяВерсия); + Иначе + Результат.Вставить("Версия", ПрисоединенныйФайл.Ссылка); + КонецЕсли; + + Если ЗначениеЗаполнено(ВерсияФайла) Тогда + ТекущаяВерсияОбъект = ВерсияФайла.ПолучитьОбъект(); + Результат.Вставить("НомерВерсии", ТекущаяВерсияОбъект.НомерВерсии); + ТекущаяВерсияФайла = ВерсияФайла; + Иначе + Результат.Вставить("НомерВерсии", 0); + ТекущаяВерсияФайла = Результат.Версия; + ТекущаяВерсияОбъект = ПрисоединенныйФайл; + КонецЕсли; + + Результат.Вставить("Наименование", ТекущаяВерсияОбъект.Наименование); + Результат.Вставить("Расширение", ТекущаяВерсияОбъект.Расширение); + Результат.Вставить("Размер", ТекущаяВерсияОбъект.Размер); + Результат.Вставить("ДатаМодификацииУниверсальная", ТекущаяВерсияОбъект.ДатаМодификацииУниверсальная); + Результат.Вставить("Том", ТекущаяВерсияОбъект.Том); + Результат.Вставить("Автор", ТекущаяВерсияОбъект.Автор); + Результат.Вставить("СтатусИзвлеченияТекста", ТекущаяВерсияОбъект.СтатусИзвлеченияТекста); + Результат.Вставить("ПолноеНаименованиеВерсии", СокрЛП(ТекущаяВерсияОбъект.Наименование)); + + СтруктураКлюча = Новый Структура("Файл", ТекущаяВерсияФайла); + КлючЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьКлючЗаписи(СтруктураКлюча); + НавигационнаяСсылкаТекущейВерсии = ПолучитьНавигационнуюСсылку(КлючЗаписи, "ДвоичныеДанныеФайла"); + Результат.Вставить("НавигационнаяСсылкаТекущейВерсии", НавигационнаяСсылкаТекущейВерсии); + + КодировкаТекущейВерсии = ПолучитьКодировкуВерсииФайла(ТекущаяВерсияФайла); + Результат.Вставить("КодировкаТекущейВерсии", КодировкаТекущейВерсии); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + НаЧтение = Результат.Редактирует <> ТекущийПользователь; + Результат.Вставить("НаЧтение", НаЧтение); + + ВРабочемКаталогеНаЧтение = Истина; + ВРабочемКаталогеВладельца = Ложь; + ИмяКаталога = РабочийКаталогПользователя(); + + Если ЗначениеЗаполнено(ТекущаяВерсияФайла) Тогда + ПолноеИмяФайлаВРабочемКаталоге = РаботаСФайламиСлужебныйВызовСервера.ПолучитьПолноеИмяФайлаИзРегистра(ТекущаяВерсияФайла, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); + + Результат.Вставить("ПолноеИмяФайлаВРабочемКаталоге", ПолноеИмяФайлаВРабочемКаталоге); + КонецЕсли; + Результат.Вставить("ВРабочемКаталогеНаЧтение", ВРабочемКаталогеНаЧтение); + Результат.Вставить("РабочийКаталогВладельца", ""); + + РедактируетТекущийПользователь = (Результат.Редактирует = ТекущийПользователь); + Результат.Вставить("ФайлРедактируетТекущийПользователь", РедактируетТекущийПользователь); + + СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; + Если Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен Тогда + СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; + ИначеЕсли Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен Тогда + СтатусИзвлеченияТекстаСтрока = "Извлечен"; + ИначеЕсли Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось Тогда + СтатусИзвлеченияТекстаСтрока = "ИзвлечьНеУдалось"; + КонецЕсли; + Результат.Вставить("СтатусИзвлеченияТекста", СтатусИзвлеченияТекстаСтрока); + + ПапкаДляСохранитьКак = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПапкаДляСохранитьКак"); + Результат.Вставить("ПапкаДляСохранитьКак", ПапкаДляСохранитьКак); + +КонецПроцедуры + +// Процедура добавляет настройки специфичные для подсистемы Работа с файлами. +// +// Параметры: +// ОбщиеНастройки - Структура - настройки общие для всех пользователей. +// ПерсональныеНастройки - Структура - настройки различные для разных пользователей. +// +Процедура ДобавитьНастройкиРаботыСФайлами(ОбщиеНастройки, ПерсональныеНастройки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПерсональныеНастройки.Вставить("ДействиеПоДвойномуЩелчкуМыши", ДействиеПоДвойномуЩелчкуМыши()); + ПерсональныеНастройки.Вставить("СпособСравненияВерсийФайлов", СпособСравненияВерсийФайлов()); + + ПерсональныеНастройки.Вставить("СпрашиватьРежимРедактированияПриОткрытииФайла", + СпрашиватьРежимРедактированияПриОткрытииФайла()); + + ПерсональныеНастройки.Вставить("ЭтоПолноправныйПользователь", + Пользователи.ЭтоПолноправныйПользователь(,, Ложь)); + + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы"); + + Если ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Неопределено Тогда + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Истина; + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы", + "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); + КонецЕсли; + + ПерсональныеНастройки.Вставить("ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); + + ПерсональныеНастройки.Вставить("ПоказыватьКолонкуРазмер", ПолучитьПоказыватьКолонкуРазмер()); + +КонецПроцедуры + +// Вернет размер файлов на томе - в байтах. +Функция ПодсчитатьРазмерФайловНаТоме(СсылкаТома) Экспорт + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат 0; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(СУММА(Версии.Размер), 0) КАК РазмерФайлов + |ИЗ + | Справочник.ВерсииФайлов КАК Версии + |ГДЕ + | Версии.Том = &Том"; + + Запрос.Параметры.Вставить("Том", СсылкаТома); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + РазмерФайловВТоме = Число(Выборка.РазмерФайлов); + КонецЕсли; + + ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); + ВсеИменаСправочников = Новый Соответствие; + + Запрос = Новый Запрос; + Запрос.Параметры.Вставить("Том", СсылкаТома); + + Для Каждого Тип Из ТипыВладельцев Цикл + + Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Продолжить; + КонецЕсли; + + ИменаСправочников = ИменаСправочниковХраненияФайлов(Тип, Истина); + + Для каждого КлючИЗначение Из ИменаСправочников Цикл + Если ВсеИменаСправочников[КлючИЗначение.Ключ] <> Неопределено Тогда + Продолжить; + КонецЕсли; + ИмяСправочникаПрисоединенныхФайлов = КлючИЗначение.Ключ; + ВсеИменаСправочников.Вставить(КлючИЗначение.Ключ, Истина); + + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(СУММА(ПрисоединенныеФайлы.Размер), 0) КАК РазмерФайлов + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.Том = &Том"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяСправочника", + "Справочник." + ИмяСправочникаПрисоединенныхФайлов); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + РазмерФайловВТоме = РазмерФайловВТоме + Выборка.РазмерФайлов; + КонецЕсли + КонецЦикла; + КонецЦикла; + + Возврат РазмерФайловВТоме; + +КонецФункции + +// Читает кодировку версии файла. +// +// Параметры: +// ВерсияСсылка - ссылка на версию файла. +// +// Возвращаемое значение: +// Строка кодировки +Функция ПолучитьКодировкуВерсииФайла(ВерсияСсылка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.КодировкиФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Файл = ВерсияСсылка; + МенеджерЗаписи.Прочитать(); + + Возврат МенеджерЗаписи.Кодировка; + +КонецФункции + +// Получает все подчиненные файлы. +// Параметры: +// ВладелецФайла - ЛюбаяСсылка - владелец файла. +// +// Возвращаемое значение: +// Массив - массив файлов +Функция ПолучитьВсеПодчиненныеФайлы(ВладелецФайла) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Файлы.Ссылка КАК Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + +// Возвращает Истина, если файл с таким расширением можно загружать. +Функция ПроверитьРасширениеФайлаДляЗагрузки(РасширениеФайла, ВызыватьИсключение = Истина) Экспорт + + ОбщиеНастройки = РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки; + + Если НЕ ОбщиеНастройки.ЗапретЗагрузкиФайловПоРасширению Тогда + Возврат Истина; + КонецЕсли; + + Если РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( + ОбщиеНастройки.СписокЗапрещенныхРасширений, РасширениеФайла) Тогда + + Если ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. + |Обратитесь к администратору.'"), + РасширениеФайла); + Иначе + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры используемые при обмене данными. @@ -533,12 +803,10 @@ | КОНЕЦ | "; Иначе - МассивРеквизитовСТипомДата = Новый Массив; ТипОбъекта = ВладелецФайла; ВсеСправочники = Справочники.ТипВсеСсылки(); ВсеДокументы = Документы.ТипВсеСсылки(); - ЕстьТипДата = Ложь; ТекстЗапроса = "ВЫБРАТЬ @@ -614,12 +882,11 @@ | И ТИПЗНАЧЕНИЯ(Файлы.ВладелецФайла) = &ТипВладельца | "; Иначе - МассивРеквизитовСТипомДата = Новый Массив; ТипОбъекта = ВладелецФайла; ВсеСправочники = Справочники.ТипВсеСсылки(); ВсеДокументы = Документы.ТипВсеСсылки(); - ЕстьТипДата = Ложь; + ТекстЗапроса = "ВЫБРАТЬ | СправочникФайлы.Ссылка, @@ -682,8 +949,6 @@ Для Каждого Справочник Из МетаданныеСправочники Цикл Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда - ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); - ЕстьВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", Справочник); Если ЕстьВозможностьХранитьВерсии Тогда СправочникВерсийФайлов = @@ -732,9 +997,8 @@ КонецФункции -Функция ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, Том) Экспорт +Процедура ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, Том) Экспорт - МетаданныеСправочники = Метаданные.Справочники; Запрос = Новый Запрос; ТипыФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); @@ -842,7 +1106,7 @@ КонецЦикла; -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Работа с томами файлов @@ -895,23 +1159,24 @@ // Функция ЕстьФайлыВТомах() Экспорт - Если КоличествоФайловВТомах() <> 0 Тогда - Возврат Истина; - КонецЕсли; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | СведенияОФайлах.Файл КАК Файл + |ИЗ + | РегистрСведений.СведенияОФайлах КАК СведенияОФайлах + |ГДЕ + | СведенияОФайлах.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)"; - Возврат Ложь; + Возврат Не Запрос.Выполнить().Пустой(); КонецФункции // Возвращает полный путь тома - в зависимости от ОС. Функция ПолныйПутьТома(СсылкаНаТом) Экспорт - СистемнаяИнфо = Новый СистемнаяИнформация; - ТипПлатформыСервера = СистемнаяИнфо.ТипПлатформы; - УстановитьПривилегированныйРежим(Истина); - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 - Или ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда Возврат СсылкаНаТом.ПолныйПутьWindows; Иначе @@ -1017,8 +1282,7 @@ // Если МаксимальныйРазмер = 0 - нет ограничения на размер файлов на томе. Если СсылкаНаТом.МаксимальныйРазмер <> 0 Тогда - ТекущийРазмерВБайтах = - РаботаСФайламиСлужебныйВызовСервера.ПодсчитатьРазмерФайловНаТоме(СсылкаНаТом.Ссылка); + ТекущийРазмерВБайтах = ПодсчитатьРазмерФайловНаТоме(СсылкаНаТом.Ссылка); НовыйРазмерВБайтах = ТекущийРазмерВБайтах + РазмерФайла; НовыйРазмер = НовыйРазмерВБайтах / (1024 * 1024); @@ -1103,7 +1367,7 @@ |%1'"); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Добавление файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Файлы.Добавление файла'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке, ПодробноеОписаниеВсехОшибок)); @@ -1173,8 +1437,7 @@ ЭлектронноеПодписание = Ложь; Шифрование = Ложь; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") - И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиентПодMacOS() Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); Если МодульЭлектроннаяПодписьСлужебный.ИспользоватьИнтерактивноеДобавлениеЭлектронныхПодписейИШифрование() Тогда @@ -1426,6 +1689,7 @@ КонецЕсли; + МетаданныеФайла = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)); ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеФайла); Если Не ФайлОбъект.ХранитьВерсии Или (ВозможностьХранитьВерсии И Не ЗначениеЗаполнено(ФайлОбъект.ТекущаяВерсия)) Тогда ОбновитьДвоичныеДанныеФайлаНаСервере(ФайлОбъект, АдресВременногоХранилищаОсновногоФайла); @@ -1443,6 +1707,14 @@ КонецПроцедуры +Процедура ПроверитьФайлОбработан(ФайлСсылка, ИмяПроцедуры) Экспорт + + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ФайлСсылка,, + "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений", + ИмяПроцедуры); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Контроль ведения учета. @@ -1467,7 +1739,8 @@ // Процедура ПроверкаСсылокНаНесуществующиеФайлыВТоме(Проверка, ПараметрыПроверки) Экспорт - Если ОбщегоНазначения.РазделениеВключено() Тогда + Если ОбщегоНазначения.РазделениеВключено() + Или Не ПолучитьФункциональнуюОпцию("ХранитьФайлыВТомахНаДиске") Тогда Возврат; КонецЕсли; @@ -1510,7 +1783,7 @@ УстановитьПривилегированныйРежим(Истина); - Если НЕ ЭтоПлатформаWindows() Тогда + Если Не ОбщегоНазначения.ЭтоWindowsСервер() Тогда Возврат; // Извлечение текста работает только под Windows. КонецЕсли; @@ -1518,7 +1791,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Извлечение текста'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -1527,98 +1800,48 @@ Запрос = Новый Запрос(ТекстЗапросаДляИзвлеченияТекста()); ФайлыДляИзвлеченияТекста = Запрос.Выполнить().Выгрузить(); - ЭтоПлатформаWindows = ЭтоПлатформаWindows(); - Для Каждого ФайлБезТекста Из ФайлыДляИзвлеченияТекста Цикл - УдалятьВременныйФайл = Ложь; + ФайлЗаблокирован = Ложь; + ИмяФайлаСДвоичнымиДанными = ""; - НачатьТранзакцию(); Попытка - - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлБезТекста.Ссылка)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлБезТекста.Ссылка); - Попытка - БлокировкаДанных.Заблокировать(); - Исключение - // Заблокированные файлы будут обработаны в следующий раз. - ОтменитьТранзакцию(); - Продолжить; - КонецПопытки; - - ФайлОбъект = ФайлБезТекста.Ссылка.ПолучитьОбъект(); - Если ФайлОбъект = Неопределено Тогда // файл уже удален в другом сеансе - ОтменитьТранзакцию(); - Продолжить; - КонецЕсли; - - Попытка - ФайлОбъект.Заблокировать(); - Исключение - // Заблокированные файлы будут обработаны в следующий раз. - ОтменитьТранзакцию(); - Продолжить; - КонецПопытки; - - Если Не ЭтоПлатформаWindows Тогда // Невозможно извлечь текст. - ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); - Продолжить; - КонецЕсли; - - ИмяСРасширениемФайла = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; - - Если ЭтоЭлементРаботаСФайлами(ФайлОбъект.Ссылка) Тогда - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлОбъект.Ссылка)); - ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); - Если ВозможностьХранитьВерсии И ЗначениеЗаполнено(ФайлОбъект.ТекущаяВерсия.Ссылка) Тогда - ИмяФайлаСДвоичнымиДанными = ИмяФайлаСДвоичнымиДанными(ФайлОбъект.ТекущаяВерсия.Ссылка); - Иначе - ИмяФайлаСДвоичнымиДанными = ИмяФайлаСДвоичнымиДанными(ФайлОбъект.Ссылка); - КонецЕсли; - КонецЕсли; - - УдалятьВременныйФайл = ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе - И Не ПустаяСтрока(ИмяФайлаСДвоичнымиДанными); - РезультатИзвлеченияТекста = ИзвлечьТекстИзФайлаНаДиске(ИмяФайлаСДвоичнымиДанными, ФайлБезТекста.Кодировка); - ФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - ФайлОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - - ПриЗаписиИзвлеченногоТекста(ФайлОбъект); - - ЗафиксироватьТранзакцию(); + ИзвлечьТекстИзФайла(ФайлБезТекста, ФайлЗаблокирован, ИмяФайлаСДвоичнымиДанными); Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось выполнить регламентное извлечение текста из файла - |""%1"" - |по причине: - |""%2"".'"), - ИмяСРасширениемФайла, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) )); + Если ФайлЗаблокирован Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Извлечение текста'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выполнить регламентное извлечение текста из файла + |""%1"" + |по причине: + |""%2"".'"), + ИмяСРасширениемФайла, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) )); + КонецЕсли; КонецПопытки; - Если УдалятьВременныйФайл Тогда - Попытка - УдалитьФайлы(ИмяФайлаСДвоичнымиДанными); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; + Если ЗначениеЗаполнено(ИмяФайлаСДвоичнымиДанными) Тогда + Файл = Новый Файл(ИмяФайлаСДвоичнымиДанными); + Если Файл.Существует() Тогда + Попытка + УдалитьФайлы(ИмяФайлаСДвоичнымиДанными); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; КонецЕсли; КонецЦикла; ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Извлечение текста'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -1640,49 +1863,58 @@ КонецФункции -// Возвращает Истина, если сервер работает под Windows. -Функция ЭтоПлатформаWindows() Экспорт - - СистемнаяИнфо = Новый СистемнаяИнформация; - ТипПлатформыСервера = СистемнаяИнфо.ТипПлатформы; - - Возврат (ТипПлатформыСервера = ТипПлатформы.Windows_x86) - Или (ТипПлатформыСервера = ТипПлатформы.Windows_x86_64); - -КонецФункции - // Записывает на сервер результат извлечения текста - извлеченный текст и СтатусИзвлеченияТекста. Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, РезультатИзвлечения, - АдресВременногоХранилищаТекста) Экспорт + АдресВременногоХранилищаТекста) Экспорт + + МетаданныеФайла = Метаданные.НайтиПоТипу(ТипЗнч(ФайлИлиВерсияСсылка)); + ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; - ФайлИлиВерсияОбъект = ФайлИлиВерсияСсылка.ПолучитьОбъект(); - ФайлИлиВерсияОбъект.Заблокировать(); + БлокировкаДанных = Новый БлокировкаДанных; - Если Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(МетаданныеФайла.ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИлиВерсияСсылка); + + Владелец = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ФайлИлиВерсияСсылка, "ВладелецФайла"); + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Владелец)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Владелец); + + НачатьТранзакцию(); + Попытка + БлокировкаДанных.Заблокировать(); + ЗаблокироватьДанныеДляРедактирования(ФайлИлиВерсияСсылка); - МетаданныеФайла = Метаданные.НайтиПоТипу(ФайлИлиВерсияСсылка); - ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; - Если МетаданныеФайла.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда - РезультатИзвлеченияТекста = ИзвлечьТекст(АдресВременногоХранилищаТекста); - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - ФайлИлиВерсияОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Иначе - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ФайлИлиВерсияОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); + ФайлИлиВерсияОбъект = ФайлИлиВерсияСсылка.ПолучитьОбъект(); + Если ФайлИлиВерсияОбъект <> Неопределено Тогда + + Если Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда + Если МетаданныеФайла.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда + РезультатИзвлеченияТекста = ИзвлечьТекст(АдресВременногоХранилищаТекста); + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + ФайлИлиВерсияОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + Иначе + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ФайлИлиВерсияОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); + КонецЕсли; + УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); + КонецЕсли; + + Если РезультатИзвлечения = "НеИзвлечен" Тогда + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ИначеЕсли РезультатИзвлечения = "Извлечен" Тогда + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + ИначеЕсли РезультатИзвлечения = "ИзвлечьНеУдалось" Тогда + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; + КонецЕсли; + + ПриЗаписиИзвлеченногоТекста(ФайлИлиВерсияОбъект); КонецЕсли; - УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); - КонецЕсли; - - Если РезультатИзвлечения = "НеИзвлечен" Тогда - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ИначеЕсли РезультатИзвлечения = "Извлечен" Тогда - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - ИначеЕсли РезультатИзвлечения = "ИзвлечьНеУдалось" Тогда - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; - КонецЕсли; - - ПриЗаписиИзвлеченногоТекста(ФайлИлиВерсияОбъект); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -1781,9 +2013,6 @@ Результат = Новый Структура("ДанныеПодготовлены, ТребуетсяПодтверждение, ТекстВопроса", Истина, Ложь, ""); - Узел = СтруктураПараметров.Узел; - УникальныйИдентификаторФормы = СтруктураПараметров.УникальныйИдентификаторФормы; - Язык = СтруктураПараметров.Язык; ПолноеИмяФайловойБазыWindows = СтруктураПараметров.ПолноеИмяФайловойБазыWindows; ПолноеИмяФайловойБазыLinux = СтруктураПараметров.ПолноеИмяФайловойБазыLinux; ПутьКАрхивуСФайламиТомовWindows = СтруктураПараметров.ПутьКАрхивуСФайламиТомовWindows; @@ -1798,10 +2027,7 @@ ЕстьФайлыВТомах = ЕстьФайлыВТомах(); КонецЕсли; - СистемнаяИнфо = Новый СистемнаяИнформация; - ТипПлатформыСервера = СистемнаяИнфо.ТипПлатформы; - - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда ПутьКАрхивуСФайламиТомов = ПутьКАрхивуСФайламиТомовWindows; ПолноеИмяФайловойБазы = ПолноеИмяФайловойБазыWindows; @@ -1810,7 +2036,7 @@ Если ЕстьФайлыВТомах И Не ПустаяСтрока(ПутьКАрхивуСФайламиТомов) И (Лев(ПутьКАрхивуСФайламиТомов, 2) <> "\\" ИЛИ СтрНайти(ПутьКАрхивуСФайламиТомов, ":") <> 0) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Путь к архиву с файлами томов должен быть |в формате UNC (\\servername\resource)'"), , @@ -1818,7 +2044,7 @@ Результат.ДанныеПодготовлены = Ложь; КонецЕсли; Если Не ПустаяСтрока(ПолноеИмяФайловойБазы) И (Лев(ПолноеИмяФайловойБазы, 2) <> "\\" ИЛИ СтрНайти(ПолноеИмяФайловойБазы, ":") <> 0) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Путь к файловой базе должен быть |в формате UNC (\\servername\resource)'"), , @@ -1832,7 +2058,7 @@ КонецЕсли; Если ПустаяСтрока(ПолноеИмяФайловойБазы) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Укажите полное имя файловой базы (файл 1cv8.1cd)'"),, "ПолноеИмяФайловойБазыWindows"); Результат.ДанныеПодготовлены = Ложь; @@ -1841,7 +2067,7 @@ Если ЕстьФайлыВТомах Тогда Если ПустаяСтрока(ПутьКАрхивуСФайламиТомов) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Укажите полное имя архива с файлами томов (файл *.zip)'"),, "ПутьКАрхивуСФайламиТомовWindows"); Результат.ДанныеПодготовлены = Ложь; @@ -1941,13 +2167,9 @@ Результат = Новый Структура("ДанныеПодготовлены, ТребуетсяПодтверждение, ТекстВопроса", Истина, Ложь, ""); - Узел = СтруктураПараметров.Узел; - СтрокаСоединения = СтруктураПараметров.СтрокаСоединения; ПутьКАрхивуСФайламиТомовWindows = СтруктураПараметров.ПутьКАрхивуСФайламиТомовWindows; ПутьКАрхивуСФайламиТомовLinux = СтруктураПараметров.ПутьКАрхивуСФайламиТомовLinux; - - ПутьКАрхивуСФайламиТомов = ""; - ПолноеИмяФайловойБазы = ""; + ПутьКАрхивуСФайламиТомов = ""; ЕстьФайлыВТомах = Ложь; @@ -1955,10 +2177,7 @@ ЕстьФайлыВТомах = ЕстьФайлыВТомах(); КонецЕсли; - СистемнаяИнфо = Новый СистемнаяИнформация; - ТипПлатформыСервера = СистемнаяИнфо.ТипПлатформы; - - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда ПутьКАрхивуСФайламиТомов = ПутьКАрхивуСФайламиТомовWindows; @@ -1967,7 +2186,7 @@ И (Лев(ПутьКАрхивуСФайламиТомов, 2) <> "\\" ИЛИ СтрНайти(ПутьКАрхивуСФайламиТомов, ":") <> 0) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Путь к архиву с файлами томов должен быть |в формате UNC (\\servername\resource).'"), , @@ -1982,7 +2201,7 @@ Если Результат.ДанныеПодготовлены Тогда Если ЕстьФайлыВТомах И ПустаяСтрока(ПутьКАрхивуСФайламиТомов) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Укажите полное имя архива с файлами томов (файл *.zip)'"), , "ПутьКАрхивуСФайламиТомовWindows"); @@ -2061,12 +2280,10 @@ // Размещает файлы в томах, устанавливая ссылки в ВерсииФайла. // -Функция ДобавитьФайлыВТома(ПутьКАрхивуWindows, ПутьКАрхивуLinux) Экспорт +Процедура ДобавитьФайлыВТома(ПутьКАрхивуWindows, ПутьКАрхивуLinux) Экспорт ПолноеИмяФайлаZip = ""; - СистемнаяИнфо = Новый СистемнаяИнформация; - ТипПлатформыСервера = СистемнаяИнфо.ТипПлатформы; - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда ПолноеИмяФайлаZip = ПутьКАрхивуWindows; Иначе ПолноеИмяФайлаZip = ПутьКАрхивуLinux; @@ -2088,11 +2305,9 @@ КонецЦикла; ТипХраненияФайлов = ТипХраненияФайлов(); - ПрисоединяемыеФайлы = Новый Массив; НачатьТранзакцию(); Попытка - РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайлыВТомаПриРазмещении( - СоответствиеПутейФайлов, ТипХраненияФайлов); + ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ТипХраненияФайлов); ЗафиксироватьТранзакцию(); Исключение @@ -2112,13 +2327,13 @@ ПланОбменаОбъект = Выборка.ПолучитьОбъект(); Если ПланОбменаОбъект.Ссылка <> ЭтотУзел Тогда - РаботаСФайламиСлужебныйВызовСервера.УдалитьРегистрациюИзменений(ПланОбменаОбъект.Ссылка); + УдалитьРегистрациюИзменений(ПланОбменаОбъект.Ссылка); КонецЕсли; КонецЦикла; КонецЦикла; -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики регламентных заданий. @@ -2411,7 +2626,7 @@ Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ИзвлечениеТекста; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); - Зависимость.ФункциональнаяОпция = МодульПолнотекстовыйПоискСервер.ИспользоватьПолнотекстовыйПоиск(); + Зависимость.ФункциональнаяОпция = МодульПолнотекстовыйПоискСервер.ФункциональнаяОпцияИспользоватьПолнотекстовыйПоиск(); КонецЕсли; Зависимость.ДоступноВМоделиСервиса = Ложь; @@ -2512,6 +2727,8 @@ Описание = Описание + " |Справочник.ПапкиФайлов.Чтение.НастройкиПрав.Справочник.ПапкиФайлов |Справочник.ПапкиФайлов.Изменение.НастройкиПрав.Справочник.ПапкиФайлов + |Справочник.Файлы.Чтение.НастройкиПрав.Справочник.ПапкиФайлов + |Справочник.Файлы.Изменение.НастройкиПрав.Справочник.ПапкиФайлов |"; ТипыВладельцевФайлов = Метаданные.ОпределяемыеТипы.ВладелецФайлов.Тип.Типы(); @@ -2540,36 +2757,36 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.5.2"; // При обновлении на 1.0.5.2 сработает обработчик. - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьНомерВерсииИзКодаСправочника"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ЗаполнитьНомерВерсииИзКодаСправочника"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.5.2"; // При обновлении на 1.0.5.2 сработает обработчик. - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьТипХраненияФайлаВБазе"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ЗаполнитьТипХраненияФайлаВБазе"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.5.7"; // При обновлении на 1.0.5.7 сработает обработчик. - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.СменитьИндексПиктограммы"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.СменитьИндексПиктограммы"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.6.3"; // При обновлении на 1.0.6.3 сработает обработчик. Обработчик.ОбщиеДанные = Истина; - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьПутиТома"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ЗаполнитьПутиТома"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.7.1"; - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПерезаписатьВсеФайлы"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ПерезаписатьВсеФайлы"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.1.2.2"; - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьДатуМодификацииФайла"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ЗаполнитьДатуМодификацииФайла"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.2.1.2"; - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПереместитьФайлыИзИнформационнойБазыВРегистрСведений"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ПереместитьФайлыИзИнформационнойБазыВРегистрСведений"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.2.1.2"; - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьДатуЗаема"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ЗаполнитьДатуЗаема"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.1.6"; @@ -2577,7 +2794,7 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.2.1.15"; - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ЗаменитьПраваВНастройкахПравПапокФайлов"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ЗаменитьПраваВНастройкахПравПапокФайлов"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.4.1.1"; @@ -2600,12 +2817,12 @@ НСтр("ru = 'Перенос электронных подписей и сертификатов шифрования |из табличных частей в регистры сведений.'"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("d70f378a-41f5-4b0a-a1a7-f4ba27c7f91b"); - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "РаботаСФайламиСлужебныйВызовСервера.ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейИСертификатовШифрования"; - Обработчик.ЧитаемыеОбъекты = СтрСоединить(РаботаСФайламиСлужебныйВызовСервера.ПолныеИменаСправочниковПрисоединенныхФайлов(), ", "); - Обработчик.ИзменяемыеОбъекты = РаботаСФайламиСлужебныйВызовСервера.ИзменяемыеОбъектыПриПереносеЭлектронныхПодписейИСертификатовШифрования(); + Обработчик.ПроцедураЗаполненияДанныхОбновления = "РаботаСФайламиСлужебный.ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейИСертификатовШифрования"; + Обработчик.ЧитаемыеОбъекты = СтрСоединить(ПолныеИменаСправочниковПрисоединенныхФайлов(), ", "); + Обработчик.ИзменяемыеОбъекты = ИзменяемыеОбъектыПриПереносеЭлектронныхПодписейИСертификатовШифрования(); Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); @@ -2621,7 +2838,7 @@ Приоритет.Процедура = "Справочники.Файлы.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Приоритет.Порядок = "Любой"; Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы"; + Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы"; Приоритет.Порядок = "Любой"; Обработчик = Обработчики.Добавить(); @@ -2629,12 +2846,12 @@ Обработчик.Комментарий = НСтр("ru = 'Перенос электронных подписей с версий файлов на файлы.'"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("d0a26f83-8dd3-4965-93a6-8469c9c91998"); - Обработчик.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы"; + Обработчик.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ОчередьОтложеннойОбработки = 2; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "РаботаСФайламиСлужебныйВызовСервера.ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейСВерсийФайловНаФайлы"; - Обработчик.ЧитаемыеОбъекты = РаботаСФайламиСлужебныйВызовСервера.ОбъектыПриПереносеЭлектронныхПодписейСВерсийФайловНаФайлы(Истина); - Обработчик.ИзменяемыеОбъекты = РаботаСФайламиСлужебныйВызовСервера.ОбъектыПриПереносеЭлектронныхПодписейСВерсийФайловНаФайлы(Ложь); + Обработчик.ПроцедураЗаполненияДанныхОбновления = "РаботаСФайламиСлужебный.ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейСВерсийФайловНаФайлы"; + Обработчик.ЧитаемыеОбъекты = ОбъектыПриПереносеЭлектронныхПодписейСВерсийФайловНаФайлы(Истина); + Обработчик.ИзменяемыеОбъекты = ОбъектыПриПереносеЭлектронныхПодписейСВерсийФайловНаФайлы(Ложь); Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); @@ -2644,7 +2861,7 @@ Приоритет.Процедура = "РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Приоритет.Порядок = "Любой"; Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; Приоритет.Порядок = "Любой"; КонецЕсли; @@ -2663,13 +2880,13 @@ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; Приоритет.Порядок = "Любой"; Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Приоритет.Порядок = "Любой"; Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы"; + Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы"; Приоритет.Порядок = "Любой"; Обработчик = Обработчики.Добавить(); @@ -2687,7 +2904,7 @@ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; Приоритет.Порядок = "Любой"; Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -2695,37 +2912,7 @@ Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "Справочники.Файлы.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Приоритет.Порядок = "Любой"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.4.1.1"; - Обработчик.Комментарий = - НСтр("ru = 'Перенос информации о файлах в регистр сведений Сведения о файлах.'"); - Обработчик.Идентификатор = Новый УникальныйИдентификатор("5137a43e-75aa-4a68-ba2f-525a3a646af8"); - Обработчик.Процедура = "РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.ЧитаемыеОбъекты = "Справочник.Файлы"; - Обработчик.ИзменяемыеОбъекты = "РегистрСведений.СведенияОФайлах"; - Обработчик.БлокируемыеОбъекты = "Справочник.Файлы"; - Обработчик.ОчередьОтложеннойОбработки = 4; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.СведенияОФайлах.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; - Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; - Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; - Приоритет.Порядок = "Любой"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РегистрыСведений.НаличиеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Приоритет.Порядок = "Любой"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РегистрыСведений.ДвоичныеДанныеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Приоритет.Порядок = "Любой"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "Справочники.Файлы.ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Приоритет.Порядок = "Любой"; - Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы"; - Приоритет.Порядок = "Любой"; - + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.4.3.56"; Обработчик.Комментарий = @@ -2741,7 +2928,7 @@ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); - Приоритет.Процедура = "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; Приоритет.Порядок = "Любой"; Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); Приоритет.Процедура = "РегистрыСведений.НаличиеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -2759,6 +2946,41 @@ Обработчик.Процедура = "РаботаСФайламиСлужебный.ОбновитьПутьТомаLinux"; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.2.46"; + Обработчик.Комментарий = + НСтр("ru = 'Перенос информации о файлах в регистр сведений Сведения о файлах.'"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("5137a43e-75aa-4a68-ba2f-525a3a646af8"); + Обработчик.Процедура = "РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ЧитаемыеОбъекты = "Справочник.Файлы,РегистрСведений.СведенияОФайлах"; + Обработчик.ИзменяемыеОбъекты = "РегистрСведений.СведенияОФайлах"; + Обработчик.БлокируемыеОбъекты = "Справочник.Файлы,РегистрСведений.СведенияОФайлах"; + Обработчик.ОчередьОтложеннойОбработки = 4; + Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.СведенияОФайлах.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); + Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); + Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений"; + Приоритет.Порядок = "Любой"; + Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); + Приоритет.Процедура = "РегистрыСведений.НаличиеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Приоритет.Порядок = "Любой"; + Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); + Приоритет.Процедура = "РегистрыСведений.ДвоичныеДанныеФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Приоритет.Порядок = "Любой"; + Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); + Приоритет.Процедура = "Справочники.Файлы.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Приоритет.Порядок = "Любой"; + Приоритет = Обработчик.ПриоритетыВыполнения.Добавить(); + Приоритет.Процедура = "РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы"; + Приоритет.Порядок = "Любой"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Процедура = "РаботаСФайламиСлужебный.НачальноеЗаполнение"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. @@ -2803,7 +3025,7 @@ КоличествоЗанятыхФайлов = 0; Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Пользователь = ПользователиКлиентСервер.АвторизованныйПользователь(); + Пользователь = Пользователи.АвторизованныйПользователь(); Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда КоличествоЗанятыхФайлов = КоличествоЗанятыхФайлов(); КонецЕсли; @@ -2862,10 +3084,70 @@ КонецПроцедуры +// См. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // СовместноДляПользователейИВнешнихПользователей. + НазначениеРолей.ТолькоДляВнешнихПользователей.Добавить( + Метаданные.Роли.ДобавлениеИзменениеПапокИФайловВнешнимиПользователями.Имя); + +КонецПроцедуры + +// См. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств. +Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Справочник_ПапкиФайлов"; + Набор.Идентификатор = Новый УникальныйИдентификатор("3f4bfd8d-b111-4416-8797-760b78f15910"); + + Набор = Наборы.Строки.Добавить(); + Набор.Имя = "Справочник_Файлы"; + Набор.Идентификатор = Новый УникальныйИдентификатор("f85ae5e1-0ff9-4c97-b2bb-d0996eacc6cf"); +КонецПроцедуры + +// Для перехода с версий БСП 2.3.7 и младше. Устанавливает связь между +// подсистемой ПрисоединенныеФайлы и РаботаСФайлами. +// +Процедура ПриОпределенииНаследованияПодсистем(Выгрузка, НаследующиеПодсистемы) Экспорт + + ОтборПоУдаленным = Новый Структура; + ОтборПоУдаленным.Вставить("Обновлен", Истина); + ОтборПоУдаленным.Вставить("ПометкаУдаления", Истина); + Удаленные = Выгрузка.НайтиСтроки(ОтборПоУдаленным); + НаследующиеПодсистемы = Новый Массив; + Для Каждого Удаленный Из Удаленные Цикл + Если СтрНайти(Удаленный.ПолноеИмя, "Подсистема.СтандартныеПодсистемы.Подсистема.ПрисоединенныеФайлы") Тогда + СтрокаРаботаСФайлами = Выгрузка.Найти("Подсистема.СтандартныеПодсистемы.Подсистема.РаботаСФайлами", "ПолноеИмя"); + Если СтрокаРаботаСФайлами <> Неопределено Тогда + НаследующиеПодсистемы.Добавить(СтрокаРаботаСФайлами); + КонецЕсли; + + Прервать; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +// Возвращает путь к рабочему каталогу пользователя в настройках. +// +// Возвращаемое значение: +// Строка - имя каталога. +// +Функция РабочийКаталогПользователя() + + УстановитьПривилегированныйРежим(Истина); + ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); + Если ИмяКаталога = Неопределено Тогда + ИмяКаталога = ""; + КонецЕсли; + + Возврат ИмяКаталога; + +КонецФункции + // Возвращает навигационную ссылку на файл (на реквизит или во временное хранилище). Функция НавигационнойСсылкиФайла(ФайлСсылка, УникальныйИдентификатор) Экспорт @@ -3006,10 +3288,24 @@ УдалитьФайлы(ИмяФайлаСПутемДляУдаления); КонецЕсли; Иначе - РаботаСФайламиСлужебныйВызовСервера.УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ФайлСсылка); - ФайлОбъект.Комментарий = ТекстКомментария + ФайлОбъект.Комментарий; - ФайлОбъект.Записать(); + + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Файл.Установить(ФайлСсылка); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() > 0 Тогда + + ФайлОбъект.Комментарий = ТекстКомментария + ФайлОбъект.Комментарий; + ФайлОбъект.Записать(); + + НаборЗаписей.Очистить(); + НаборЗаписей.Записать(); + + КонецЕсли; + ФайлОбъект.УстановитьПометкуУдаления(Истина); + УстановитьПривилегированныйРежим(Ложь); КонецЕсли; @@ -3022,7 +3318,7 @@ Если Не ПустаяСтрока(ИмяФайлаСПутем) Тогда // Записать ошибку в журнал регистрации. - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очистка ненужных файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очистка ненужных файлов'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); // Вернем файл на прежнее место в случае ошибки. @@ -3070,7 +3366,7 @@ УдалитьФайлы(ИмяФайлаСПутемДляУдаления); КонецЕсли; Иначе - РаботаСФайламиСлужебныйВызовСервера.УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ФайлСсылка); + УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ФайлСсылка); ФайлОбъект.Описание = ТекстОписания + ФайлОбъект.Описание; ФайлОбъект.Записать(); ФайлОбъект.УстановитьПометкуУдаления(Истина); @@ -3086,7 +3382,7 @@ Если Не ПустаяСтрока(ИмяФайлаСПутем) Тогда // Записать ошибку в журнал регистрации. - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очистка ненужных файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очистка ненужных файлов'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); // Вернем файл на прежнее место в случае ошибки. @@ -3107,17 +3403,6 @@ КонецПроцедуры -// Возвращает количество файлов, хранящихся в томах. -Функция КоличествоФайловВТомах() - - КоличествоФайловВТомах = 0; - - РаботаСФайламиСлужебныйВызовСервера.ОпределитьКоличествоФайловВТомах(КоличествоФайловВТомах); - - Возврат КоличествоФайловВТомах; - -КонецФункции - // Только для внутреннего использования. // Процедура ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь, Получатель = Неопределено) @@ -3265,12 +3550,12 @@ ЭлементДанных.ПутьКФайлу = Неопределено; ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось добавить файл ""%1"" ни в один из томов, т.к. он отсутствует. - |Возможно, файл удален антивирусной программой. - |Обратитесь к администратору.'"), - ЭлементДанных.Наименование + "." + ЭлементДанных.Расширение); + НСтр("ru = 'Не удалось добавить файл ""%1"" ни в один из томов, т.к. он отсутствует. + |Возможно, файл удален антивирусной программой. + |Обратитесь к администратору.'"), + ЭлементДанных.Наименование + "." + ЭлементДанных.Расширение); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление файла в том'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, ТипМетаданных, ЭлементДанных.Ссылка, ТекстОшибки); Иначе @@ -3852,6 +4137,532 @@ КонецПроцедуры +// Сравнивает 2 элемента отбора компоновки данных. +// Параметры: +// Элемент1 - элемент условного оформления списка. +// Элемент2 - элемент условного оформления списка. +// +// Возвращаемое значение: +// Булево - результат сравнения. +// +Функция СравнитьЭлементыОтбора(Элемент1, Элемент2) + + Если Элемент1.Использование = Элемент2.Использование + И ТипЗнч(Элемент1) = ТипЗнч(Элемент2) Тогда + + Если ТипЗнч(Элемент1) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Если Элемент1.ВидСравнения <> Элемент2.ВидСравнения + ИЛИ Элемент1.ЛевоеЗначение <> Элемент2.ЛевоеЗначение + ИЛИ Элемент1.ПравоеЗначение <> Элемент2.ПравоеЗначение Тогда + Возврат Ложь; + КонецЕсли; + Иначе + + ЧислоЭлементов = Элемент1.Элементы.Количество(); + Если Элемент1.ТипГруппы <> Элемент2.ТипГруппы + ИЛИ ЧислоЭлементов <> Элемент2.Элементы.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Индекс = 0 По ЧислоЭлементов - 1 Цикл + ПодчиненныйЭлемент1 = Элемент1.Элементы[Индекс]; + ПодчиненныйЭлемент2 = Элемент2.Элементы[Индекс]; + ЭлементыРавны = СравнитьЭлементыОтбора(ПодчиненныйЭлемент1, ПодчиненныйЭлемент2); + + Если Не ЭлементыРавны Тогда + Возврат ЭлементыРавны; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + Иначе + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Формирует отчет для файлов с ошибками. +// +// Параметры: +// МассивИменФайловСОшибками - массив строк путей к файлам. +// +// Возвращаемое значение: +// ТабличныйДокумент с отчетом. +// +Функция ИмпортФайловСформироватьОтчет(МассивИменФайловСОшибками) Экспорт + + Документ = Новый ТабличныйДокумент; + Макет = Справочники.Файлы.ПолучитьМакет("МакетОтчета"); + + ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); + ОбластьЗаголовок.Параметры.Описание = НСтр("ru = 'Не удалось загрузить следующие файлы:'"); + Документ.Вывести(ОбластьЗаголовок); + + ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); + + Для Каждого Выборка Из МассивИменФайловСОшибками Цикл + ОбластьСтрока.Параметры.Название = Выборка.ИмяФайла; + ОбластьСтрока.Параметры.Ошибка = Выборка.Ошибка; + Документ.Вывести(ОбластьСтрока); + КонецЦикла; + + Отчет = Новый ТабличныйДокумент; + Отчет.Вывести(Документ); + + Возврат Отчет; + +КонецФункции + +// Заполняет условное оформление списка файлов. +// +// Параметры: +// Список - динамический список. +// +Процедура ЗаполнитьУсловноеОформлениеСпискаФайлов(Список) Экспорт + + УсловноеОформлениеКД = Список.КомпоновщикНастроек.Настройки.УсловноеОформление; + УсловноеОформлениеКД.ИдентификаторПользовательскойНастройки = "ОсновноеОформление"; + + Элемент = УсловноеОформлениеКД.Элементы.Добавить(); + Элемент.Использование = Истина; + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + + Отбор = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.Использование = Истина; + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Редактирует"); + + Отбор = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.Использование = Истина; + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Служебный"); + Отбор.ПравоеЗначение = Ложь; + + Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда + УсловноеОформлениеКД.Элементы.Удалить(Элемент); + КонецЕсли; + + Элемент = УсловноеОформлениеКД.Элементы.Добавить(); + Элемент.Использование = Истина; + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ФайлЗанятыйТекущимПользователем); + + ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + + Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.Использование = Истина; + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Редактирует"); + Отбор.ПравоеЗначение = Пользователи.АвторизованныйПользователь(); + + Отбор = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.Использование = Истина; + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Служебный"); + Отбор.ПравоеЗначение = Ложь; + + Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда + УсловноеОформлениеКД.Элементы.Удалить(Элемент); + КонецЕсли; + + Элемент = УсловноеОформлениеКД.Элементы.Добавить(); + Элемент.Использование = Истина; + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.Использование = Истина; + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Служебный"); + Отбор.ПравоеЗначение = Истина; + + Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда + УсловноеОформлениеКД.Элементы.Удалить(Элемент); + КонецЕсли; + +КонецПроцедуры + +// Заполняет условное оформление списка папок. +// +// Параметры: +// Список - динамический список. +// +Процедура ЗаполнитьУсловноеОформлениеСпискаПапок(Папки) Экспорт + + УсловноеОформлениеКД = Папки.КомпоновщикНастроек.Настройки.УсловноеОформление; + УсловноеОформлениеКД.ИдентификаторПользовательскойНастройки = "ОсновноеОформление"; + + Элемент = УсловноеОформлениеКД.Элементы.Добавить(); + Элемент.Использование = Истина; + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.Использование = Истина; + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПапкаСинхронизируется"); + Отбор.ПравоеЗначение = Истина; + + Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда + УсловноеОформлениеКД.Элементы.Удалить(Элемент); + КонецЕсли; + +КонецПроцедуры + +// Есть ли дублирующийся элемент в условном оформлении списка. +// Параметры: +// Элементы - массив элементов условного оформления списка. +// ЭлементПоиска - элемент условного оформления списка. +// +// Возвращаемое значение: +// Булево - есть дублирующийся элемент. +// +Функция ЕстьДублирующийсяЭлемент(Элементы, ЭлементПоиска) + + Для Каждого Элемент Из Элементы Цикл + Если Элемент <> ЭлементПоиска Тогда + + Если Элемент.Оформление.Элементы.Количество() <> ЭлементПоиска.Оформление.Элементы.Количество() Тогда + Продолжить; + КонецЕсли; + + НайденОтличающийсяЭлемент = Ложь; + + // Обходим все элементы оформления - если есть хоть один отличающийся - делаем Продолжить; + ЧислоЭлементов = Элемент.Оформление.Элементы.Количество(); + Для Индекс = 0 По ЧислоЭлементов - 1 Цикл + Элемент1 = Элемент.Оформление.Элементы[Индекс]; + Элемент2 = ЭлементПоиска.Оформление.Элементы[Индекс]; + + Если Элемент1.Использование И Элемент2.Использование Тогда + Если Элемент1.Параметр <> Элемент2.Параметр ИЛИ Элемент1.Значение <> Элемент2.Значение Тогда + НайденОтличающийсяЭлемент = Истина; + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если НайденОтличающийсяЭлемент Тогда + Продолжить; + КонецЕсли; + + Если Элемент.Отбор.Элементы.Количество() <> ЭлементПоиска.Отбор.Элементы.Количество() Тогда + Продолжить; + КонецЕсли; + + // Обходим все элементы отбора - если есть хоть один отличающийся - делаем Продолжить; + ЧислоЭлементов = Элемент.Отбор.Элементы.Количество(); + Для Индекс = 0 По ЧислоЭлементов - 1 Цикл + Элемент1 = Элемент.Отбор.Элементы[Индекс]; + Элемент2 = ЭлементПоиска.Отбор.Элементы[Индекс]; + + ЭлементыРавны = СравнитьЭлементыОтбора(Элемент1, Элемент2); + Если Не ЭлементыРавны Тогда + НайденОтличающийсяЭлемент = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если НайденОтличающийсяЭлемент Тогда + Продолжить; + КонецЕсли; + + // Обошли все элементы оформления и отбора - они все одинаковы - это дубль. + Возврат Истина; + + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Делает ПоместитьВоВременноеХранилище (если файл хранится на диске) и возвращает нужную ссылку. +// Параметры: +// ВерсияСсылка - СправочникСсылка.ВерсииФайлов - версия файла. +// ИдентификаторФормы - уникальный идентификатор формы. +// +// Возвращаемое значение: +// Строка - навигационная ссылка. +Функция ПолучитьНавигационнуюСсылкуВоВременномХранилище(ВерсияСсылка, ИдентификаторФормы = Неопределено) Экспорт + Адрес = ""; + + ТипХраненияФайла = ВерсияСсылка.ТипХраненияФайла; + + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + Если НЕ ВерсияСсылка.Том.Пустая() Тогда + ПолныйПуть = ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; + Попытка + ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); + Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); + Исключение + // Запись в журнал регистрации. + СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( + ИнформацияОбОшибке(), ВерсияСсылка.Владелец); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Открытие файла'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.Файлы, + ВерсияСсылка.Владелец, + СообщениеОбОшибке); + + ВызватьИсключение ОшибкаФайлНеНайденВХранилищеФайлов( + ВерсияСсылка.ПолноеНаименование + "." + ВерсияСсылка.Расширение); + КонецПопытки; + КонецЕсли; + Иначе + ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); + ДвоичныеДанные = ХранилищеФайла.Получить(); + Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); + КонецЕсли; + + Возврат Адрес; + +КонецФункции + +// Формирует текст ошибки для помещения в журнал регистрации. +// Параметры: +// ИнформацияОбОшибкеФункции - ИнформацияОбОшибке +// ФайлСсылка - СправочникСсылка.Файлы - файл. +// +// Возвращаемое значение: +// Строка - описание ошибки +// +Функция СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора(ИнформацияОбОшибкеФункции, ФайлСсылка) Экспорт + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ссылка на файл: ""%1"". + |""%2"".'"), + ПолучитьНавигационнуюСсылку(ФайлСсылка), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибкеФункции)); + +КонецФункции + +// Получает значение настройки ПоказыватьКолонкуРазмер. +// Возвращаемое значение: +// Булево - Показывать колонку размер. +// +Функция ПолучитьПоказыватьКолонкуРазмер() Экспорт + + ПоказыватьКолонкуРазмер = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПоказыватьКолонкуРазмер"); + Если ПоказыватьКолонкуРазмер = Неопределено Тогда + ПоказыватьКолонкуРазмер = Ложь; + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПоказыватьКолонкуРазмер", ПоказыватьКолонкуРазмер); + КонецЕсли; + + Возврат ПоказыватьКолонкуРазмер; + +КонецФункции + +// Возвращает стандартный текст ошибки. +Функция ОшибкаФайлНеНайденВХранилищеФайлов(ИмяФайла, ПоискВТоме = Истина, ВладелецФайла = "") Экспорт + + Если ПоискВТоме Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось открыть файл: + |%1 + |который присоединен к: + |%2 + |по причине: двоичные данные файла были удалены. Возможно, файл очищен как ненужный или удален антивирусной программой. + |Обратитесь к администратору.'"), + ИмяФайла, + ВладелецФайла); + + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось открыть файл: + |%1 + |который присоединен к: + |%2 + |по причине: двоичные данные файла были удалены. Возможно, файл очищен как ненужный. + |Обратитесь к администратору.'"), + ИмяФайла, + ВладелецФайла); + КонецЕсли; + + Возврат ТекстОшибки; + +КонецФункции + +// Возвращает номер по нарастанию. Предыдущее значение берется из регистра сведений НомераОтсканированныхФайлов. +// Параметры: +// Владелец - ЛюбаяСсылка - владелец файла. +// +// Возвращаемое значение: +// Число - новый номер для сканирования. +// +Функция ПолучитьНовыйНомерДляСканирования(Владелец) Экспорт + + // Подготовить структуру отбора по измерениям. + СтруктураОтбора = Новый Структура; + СтруктураОтбора.Вставить("Владелец", Владелец); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НомераОтсканированныхФайлов"); + ЭлементБлокировки.УстановитьЗначение("Владелец", Владелец); + Блокировка.Заблокировать(); + + // Получить структуру с данными ресурсов записи. + СтруктураРесурсов = РегистрыСведений.НомераОтсканированныхФайлов.Получить(СтруктураОтбора); + + // Получить максимальный номер из регистра. + Номер = СтруктураРесурсов.Номер; + Номер = Номер + 1; // увеличим на 1 + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + // Запишем новый номер в регистр. + НаборЗаписей = РегистрыСведений.НомераОтсканированныхФайлов.СоздатьНаборЗаписей(); + + НаборЗаписей.Отбор.Владелец.Установить(Владелец); + + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.Владелец = Владелец; + НоваяЗапись.Номер = Номер; + + НаборЗаписей.Записать(); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Номер; + +КонецФункции + +// Определяет наличие опционального реквизита Служебный в метаданных справочника. +// +// Параметры: +// ИмяСправочника - Строка - Имя справочника в метаданных. +// +// Возвращаемое значение: +// Булево - наличие реквизита Служебный. +// +Функция ЕстьРеквизитСлужебный(Знач ИмяСправочника) Экспорт + + ОбъектМетаданных = Метаданные.Справочники[ИмяСправочника]; + РеквизитСлужебный = ОбъектМетаданных.Реквизиты.Найти("Служебный"); + Возврат РеквизитСлужебный <> Неопределено; + +КонецФункции + +// Добавляет элементы отбора компоновки данных в динамические списки файлов. +// +// Параметры: +// Список - динамический список, в который будут добавлены отборы. +// +Процедура ДобавитьОтборыВСписокФайлов(Список) Экспорт + + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Список.Отбор, "Служебный", ВидСравненияКомпоновкиДанных.НеРавно, + Истина, "СкрыватьСлужебные", Истина); + +КонецПроцедуры + +// Изменяет видимость элементов формы присоединенного файла для работы внешних пользователей. +// Внешним пользователям доступна только общая информация о файле и его характеристиках. +// +// Параметры: +// Форма - УправляемаяФорма - Форма, для которой изменяется видимость элементов. +// ЭтоФормаСписка - Булево - признак того, что процедура вызывается из формы списка. +// +Процедура ИзменитьФормуДляВнешнегоПользователя(Форма, Знач ЭтоФормаСписка = Ложь) Экспорт + + Элементы = Форма.Элементы; + Если ЭтоФормаСписка Тогда + Элементы.СписокАвтор.Видимость = Ложь; + Элементы.СписокРедактирует.Видимость = Ложь; + Элементы.СписокНомерКартинкиПодписанЗашифрован.Видимость = Ложь; + Если Элементы.Найти("СписокОтредактировал") <> Неопределено Тогда + Элементы.СписокОтредактировал.Видимость = Ложь; + КонецЕсли; + Иначе + Элементы.ГруппаХарактеристикиФайла.Видимость = Истина; + Элементы.ГруппаДополнительныеДанныеСтраницы.Видимость = Ложь; + Элементы.ФормаГруппаКомандЭлектроннаяПодписьИШифрование.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Пользовательские настройки + +// Считаем ДействиеПоДвойномуЩелчкуМыши - если первый раз - поставим правильное значение. +// +// Возвращаемое значение: +// Строка - Действие по двойному щелчку мыши. +// +Функция ДействиеПоДвойномуЩелчкуМыши() + + КакОткрывать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиОткрытияФайлов", "ДействиеПоДвойномуЩелчкуМыши"); + + Если КакОткрывать = Неопределено + ИЛИ КакОткрывать = Перечисления.ДействияСФайламиПоДвойномуЩелчку.ПустаяСсылка() Тогда + + КакОткрывать = Перечисления.ДействияСФайламиПоДвойномуЩелчку.ОткрыватьФайл; + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "НастройкиОткрытияФайлов", "ДействиеПоДвойномуЩелчкуМыши", КакОткрывать); + КонецЕсли; + + Если КакОткрывать = Перечисления.ДействияСФайламиПоДвойномуЩелчку.ОткрыватьФайл Тогда + Возврат "ОткрыватьФайл"; + Иначе + Возврат "ОткрыватьКарточку"; + КонецЕсли; + +КонецФункции + +// Считаем из настроек СпособСравненияВерсийФайлов. +// +// Возвращаемое значение: +// Строка - Способ сравнения версий файлов. +// +Функция СпособСравненияВерсийФайлов() + + СпособСравнения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиСравненияФайлов", "СпособСравненияВерсийФайлов"); + + Если СпособСравнения = Перечисления.СпособыСравненияВерсийФайлов.MicrosoftOfficeWord Тогда + Возврат "MicrosoftOfficeWord"; + + ИначеЕсли СпособСравнения = Перечисления.СпособыСравненияВерсийФайлов.OpenOfficeOrgWriter Тогда + Возврат "OpenOfficeOrgWriter"; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +// Возвращает настройку - Спрашивать режим редактирования при открытии файла. +// Возвращаемое значение: +// Булево - Спрашивать режим редактирования при открытии файла. +// +Функция СпрашиватьРежимРедактированияПриОткрытииФайла() + СпрашиватьРежимРедактированияПриОткрытииФайла = + ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла"); + Если СпрашиватьРежимРедактированияПриОткрытииФайла = Неопределено Тогда + СпрашиватьРежимРедактированияПриОткрытииФайла = Истина; + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла", СпрашиватьРежимРедактированияПриОткрытииФайла); + КонецЕсли; + + Возврат СпрашиватьРежимРедактированияПриОткрытииФайла; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Поддержка обмена файлами @@ -3869,7 +4680,7 @@ Исключение ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Удаление файлов в томе'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -3887,7 +4698,7 @@ Исключение ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Удаление файлов в томе'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -3896,6 +4707,84 @@ КонецПроцедуры +// Добавляет файл в тома при выполнении команды "разместить файлы начального образа". +// Параметры: +// СоответствиеПутейФайлов - Соответствие - соответствие УникальногоИдентификатора файла и пути на диске к файлу. +// ТипХраненияФайла - Перечисления.ТипыХраненияФайлов - тип хранения файлов. +Процедура ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ТипХраненияФайла) + + Выборка = Справочники.ВерсииФайлов.Выбрать(); + + Пока Выборка.Следующий() Цикл + + Объект = Выборка.ПолучитьОбъект(); + + Если Объект.ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + Продолжить; + КонецЕсли; + + УникальныйИдентификатор = Строка(Объект.Ссылка.УникальныйИдентификатор()); + + ПолныйПутьФайлаНаДиске = СоответствиеПутейФайлов.Получить(УникальныйИдентификатор); + ПолныйПутьНовый = ""; + + Если ПолныйПутьФайлаНаДиске = Неопределено Тогда + Продолжить; + КонецЕсли; + + ХранилищеФайла = Неопределено; + + // В базе-приемнике файлы должны храниться в информационной базе - значит там их и разместим (даже если в исходной + // базе они были в томах). + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + Объект.ПутьКФайлу = ""; + Объект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + + ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаНаДиске); + ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные); + + Иначе // В базе-приемнике файлы должны храниться в томах на диске - переместим разархивированный файл на том. + + ФайлИсходный = Новый Файл(ПолныйПутьФайлаНаДиске); + ПолныйПутьНовый = ФайлИсходный.Путь + Объект.Наименование + "." + Объект.Расширение; + ПереместитьФайл(ПолныйПутьФайлаНаДиске, ПолныйПутьНовый); + + // Добавить в один из томов (где есть свободное место). + СведенияОФайле = ДобавитьФайлВТом(ПолныйПутьНовый, Объект.ДатаМодификацииУниверсальная, + Объект.Наименование, Объект.Расширение, Объект.НомерВерсии, Объект.Владелец.Зашифрован); + Объект.Том = СведенияОФайле.Том; + Объект.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; + + КонецЕсли; + + Объект.ДополнительныеСвойства.Вставить("РазмещениеФайловВТомах", Истина); // Чтобы прошла запись подписанных файлов. + Объект.Записать(); + + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ЗаписатьФайлВИнформационнуюБазу(Объект.Ссылка, ХранилищеФайла); + КонецЕсли; + + Если НЕ ПустаяСтрока(ПолныйПутьНовый) Тогда + УдалитьФайлы(ПолныйПутьНовый); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Удаляет регистрацию изменений - после размещения в томах. +// Параметры: +// ПланОбменаСсылка - ПланОбмена.Ссылка - план обмена. +Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка) + + ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.Справочники.ВерсииФайлов); + ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.Справочники.Файлы); + ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.РегистрыСведений.ДвоичныеДанныеФайлов); + +КонецПроцедуры + ///////////////////////////////////////////////////////////////////////////////////////// // Работа с кодировками @@ -3935,198 +4824,6 @@ КонецФункции -// Получает кодировку текстового файла, указанную пользователем (если есть). -// -// Параметры: -// ВерсияФайла - ссылка на версию файла. -// -// Возвращаемое значение: -// Строка - идентификатор кодировки текста или пустая строка. -// -Функция ПолучитьКодировкуВерсииФайла(ВерсияФайла) - - Возврат РаботаСФайламиСлужебныйВызовСервера.ПолучитьКодировкуВерсииФайла(ВерсияФайла); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. - -// Обработчик подписки "при записи" версии файла. -// -Процедура ВерсииФайловПриЗаписи(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - ЗаписатьДанныеФайлаВРегистрПриОбмене(Источник); - Возврат; - КонецЕсли; - - Если Источник.ДополнительныеСвойства.Свойство("ПереименованиеФайла") Тогда - Возврат; - КонецЕсли; - - Если Источник.ДополнительныеСвойства.Свойство("КонвертацияФайлов") Тогда - Возврат; - КонецЕсли; - - // Копируем реквизиты из версии в файл. - ТекущаяВерсия = Источник; - Если Не ТекущаяВерсия.Ссылка.Пустая() Тогда - - ФайлСсылка = Источник.Владелец; - - РеквизитыФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, - "ИндексКартинки, Размер, ДатаСоздания, Изменил, Расширение, Том, ПутьКФайлу, ДатаМодификацииУниверсальная"); - - Если РеквизитыФайла.Размер <> ТекущаяВерсия.Размер - ИЛИ РеквизитыФайла.ДатаСоздания <> ТекущаяВерсия.ДатаСоздания - ИЛИ РеквизитыФайла.Расширение <> ТекущаяВерсия.Расширение - ИЛИ РеквизитыФайла.Том <> ТекущаяВерсия.Том - ИЛИ РеквизитыФайла.ПутьКФайлу <> ТекущаяВерсия.ПутьКФайлу - ИЛИ РеквизитыФайла.ИндексКартинки <> ТекущаяВерсия.ИндексКартинки - ИЛИ РеквизитыФайла.ДатаМодификацииУниверсальная <> ТекущаяВерсия.ДатаМодификацииФайла Тогда - НачатьТранзакцию(); - Попытка - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); - БлокировкаДанных.Заблокировать(); - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); - // Сменим индекс картинки, возможно, появилась версия или сменился индекс картинки у версии. - ФайлОбъект.ИндексКартинки = ТекущаяВерсия.ИндексКартинки; - - // Копируем реквизиты для ускорения работы ограничения на уровне записей. - ФайлОбъект.Размер = ТекущаяВерсия.Размер; - ФайлОбъект.ДатаСоздания = ТекущаяВерсия.ДатаСоздания; - ФайлОбъект.Изменил = ТекущаяВерсия.Автор; - ФайлОбъект.Расширение = ТекущаяВерсия.Расширение; - ФайлОбъект.Том = ТекущаяВерсия.Том; - ФайлОбъект.ПутьКФайлу = ТекущаяВерсия.ПутьКФайлу; - ФайлОбъект.ТипХраненияФайла = ТекущаяВерсия.ТипХраненияФайла; - ФайлОбъект.ДатаМодификацииУниверсальная = ТекущаяВерсия.ДатаМодификацииУниверсальная; - - Если Источник.ДополнительныеСвойства.Свойство("ЗаписьПодписанногоОбъекта") Тогда - ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", - Источник.ДополнительныеСвойства.ЗаписьПодписанногоОбъекта); - КонецЕсли; - - ФайлОбъект.Записать(); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - КонецЕсли; - - КонецЕсли; - - ОбновитьСостояниеОчередиИзвлеченияТекста(Источник.Ссылка, Источник.СтатусИзвлеченияТекста); - -КонецПроцедуры - -// Обработчик подписки на событие "Перед удалением" присоединенного файла. -Процедура ПередУдалениемПрисоединенногоФайлаСервер(Знач Ссылка, - Знач ВладелецФайлов, - Знач Том, - Знач ТипХраненияФайла, - Знач ПутьКФайлу) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ВладелецФайлов <> Неопределено И Не ЕстьФайлыУВладельца(ВладелецФайлов, Ссылка) Тогда - - НачатьТранзакцию(); - Попытка - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.РегистрыСведений.НаличиеФайлов.ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("ОбъектСФайлами", ВладелецФайлов); - БлокировкаДанных.Заблокировать(); - - МенеджерЗаписи = РегистрыСведений.НаличиеФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбъектСФайлами = ВладелецФайлов; - МенеджерЗаписи.Прочитать(); - Если МенеджерЗаписи.Выбран() Тогда - МенеджерЗаписи.ЕстьФайлы = Ложь; - МенеджерЗаписи.Записать(); - КонецЕсли; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - КонецЕсли; - - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И НЕ Том.Пустая() Тогда - ПолныйПуть = ПолныйПутьТома(Том) + ПутьКФайлу; - УдалитьФайлВТоме(ПолныйПуть); - КонецЕсли; - -КонецПроцедуры - -Функция ЕстьФайлыУВладельца(Знач ВладелецФайлов, Знач ФайлИсключение = Неопределено) - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Параметры.Вставить("ВладелецФайлов", ВладелецФайлов); - - ТекстЗапроса = - "ВЫБРАТЬ - | ПрисоединенныеФайлы.Ссылка - |ИЗ - | &ИмяСправочника КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайлов"; - - Если ФайлИсключение <> Неопределено Тогда - ТекстЗапроса = ТекстЗапроса + " - | И ПрисоединенныеФайлы.Ссылка <> &Ссылка"; - - Запрос.Параметры.Вставить("Ссылка", ФайлИсключение); - КонецЕсли; - - ИменаСправочников = ИменаСправочниковХраненияФайлов(ВладелецФайлов); - - Для каждого КлючИЗначение Из ИменаСправочников Цикл - Запрос.Текст = СтрЗаменить( - ТекстЗапроса, "&ИмяСправочника", "Справочник." + КлючИЗначение.Ключ); - - Если НЕ Запрос.Выполнить().Пустой() Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Возврат Ложь; - -КонецФункции - -// Проверяет право текущего пользователя -// при использовании ограничения для папки или файла. -// -// Параметры: -// Право - Имя права. -// ВладелецПрав - СправочникСсылка.ПапкиФайлов, СправочникСсылка.Файлы, -// <ссылка на владельца>. -// -Функция ЕстьПраво(Право, ВладелецПрав) Экспорт - - Если Не ЭтоПапкаФайлов(ВладелецПрав) Тогда - Возврат Истина; - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); - - Если НЕ МодульУправлениеДоступом.ЕстьПраво(Право, ВладелецПрав) Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - Возврат Истина; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -4188,16 +4885,14 @@ Функция ПолучениеФайлаЗапрещено(ЭлементДанных) Возврат ЭлементДанных.ЭтоНовый() - И Не РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРасширениеФайлаДляЗагрузки( - ЭлементДанных.Расширение, Ложь); + И Не ПроверитьРасширениеФайлаДляЗагрузки(ЭлементДанных.Расширение, Ложь); КонецФункции Функция ПолучениеВерсииФайлаЗапрещено(ЭлементДанных) Возврат ЭлементДанных.ЭтоНовый() - И Не РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРасширениеФайлаДляЗагрузки( - ЭлементДанных.Расширение, Ложь); + И Не ПроверитьРасширениеФайлаДляЗагрузки(ЭлементДанных.Расширение, Ложь); КонецФункции @@ -4219,7 +4914,7 @@ КонецЕсли; Попытка // Помещаем данные файла из информационной базы в служебный реквизит справочника. - АдресВоВременномХранилище = РаботаСФайламиСлужебныйВызовСервера.ПолучитьНавигационнуюСсылкуВоВременномХранилище(ИсточникДвоичныхДанных); + АдресВоВременномХранилище = ПолучитьНавигационнуюСсылкуВоВременномХранилище(ИсточникДвоичныхДанных); ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВоВременномХранилище), Новый СжатиеДанных(9)); Исключение // Возможно, файл не был найден. Отправку данных не прерываем. @@ -4299,7 +4994,7 @@ // Функция СобытиеЖурналаРегистрацииДляОбмена() - Возврат НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -4345,9 +5040,6 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - Если ЭтоСсылка Тогда - ФайлОбъект.Разблокировать(); - КонецЕсли; ВызватьИсключение; КонецПопытки; @@ -4355,10 +5047,6 @@ ОбновитьДвоичныеДанныеФайлаВТоме(ФайлОбъект, ФайлСсылка, ДвоичныеДанные); КонецЕсли; - Если ЭтоСсылка Тогда - ФайлОбъект.Разблокировать(); - КонецЕсли; - КонецПроцедуры Процедура ОбновитьДвоичныеДанныеФайлаВИнформационнойБазе(ФайлОбъект, ФайлСсылка, ДвоичныеДанные) @@ -4381,7 +5069,7 @@ Исключение ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Обновление данных присоединенного файла в хранилище файлов'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -4394,11 +5082,17 @@ Процедура ОбновитьДвоичныеДанныеФайлаВТоме(ФайлОбъект, ФайлСсылка, ДвоичныеДанные) Попытка - ПолныйПуть = ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; - ФайлНаДиске = Новый Файл(ПолныйПуть); - ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПуть); + ПолныйПуть = ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; + Если Не ПустаяСтрока(ПолныйПуть) Тогда + + ФайлНаДиске = Новый Файл(ПолныйПуть); + Если ФайлНаДиске.Существует() Тогда + ФайлНаДиске.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ПолныйПуть); + КонецЕсли; + + КонецЕсли; СведенияОФайле = ДобавитьФайлВТом(ДвоичныеДанные, ФайлОбъект.ДатаМодификацииУниверсальная, ФайлОбъект.Наименование, ФайлОбъект.Расширение,, ФайлОбъект.Зашифрован); @@ -4406,10 +5100,11 @@ ФайлОбъект.Том = СведенияОФайле.Том; ФайлОбъект.Размер = ДвоичныеДанные.Размер(); ФайлОбъект.Записать(); + Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Запись файла на диск'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Файлы.Запись файла на диск'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники[ФайлСсылка.Метаданные().Имя], ФайлСсылка, @@ -4435,8 +5130,6 @@ Если ЕстьПраваНаОбъект = Неопределено Тогда Возврат Неопределено; КонецЕсли; - - ХранилищеФайла = Неопределено; УстановитьПривилегированныйРежим(Истина); @@ -4452,7 +5145,7 @@ СведенияОФайле.ВремяИзменения = ТекущаяДатаСеанса(); КонецЕсли; - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); + ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); Версия = Справочники.ВерсииФайлов.СоздатьЭлемент(); @@ -4469,7 +5162,7 @@ Версия.Комментарий = СведенияОФайле.НоваяВерсияКомментарий; Если СведенияОФайле.НоваяВерсияАвтор = Неопределено Тогда - Версия.Автор = Пользователи.ТекущийПользователь(); + Версия.Автор = Пользователи.АвторизованныйПользователь(); Иначе Версия.Автор = СведенияОФайле.НоваяВерсияАвтор; КонецЕсли; @@ -4532,7 +5225,7 @@ Если Версия.Размер = 0 Тогда Версия.Размер = ДвоичныеДанные.Размер(); - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРазмерФайлаДляЗагрузки(Версия); + ПроверитьРазмерФайлаДляЗагрузки(Версия); КонецЕсли; Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда @@ -4713,7 +5406,7 @@ ВремяИзменения = ТекущаяДатаСеанса(); КонецЕсли; - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); + ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); ТекущаяВерсияРазмер = 0; ДвоичныеДанные = Неопределено; @@ -4763,7 +5456,6 @@ КонецЕсли; КонецЕсли; - СтарыйТипХранения = Неопределено; ВерсияЗаблокирована = Ложь; Версия = Неопределено; @@ -4809,7 +5501,7 @@ Версия.Владелец = ФайлСсылка; Если Пользователь = Неопределено Тогда - Версия.Автор = Пользователи.ТекущийПользователь(); + Версия.Автор = Пользователи.АвторизованныйПользователь(); Иначе Версия.Автор = Пользователь; КонецЕсли; @@ -4831,7 +5523,7 @@ Если Версия.Размер = 0 Тогда Версия.Размер = ДвоичныеДанные.Размер(); - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРазмерФайлаДляЗагрузки(Версия); + ПроверитьРазмерФайлаДляЗагрузки(Версия); КонецЕсли; Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда @@ -4992,6 +5684,39 @@ КонецФункции +// Вызывает исключение, если файл имеет недопустимый размер для загрузки. +Процедура ПроверитьРазмерФайлаДляЗагрузки(Файл) Экспорт + + ОбщиеНастройки = РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки; + + Если ТипЗнч(Файл) = Тип("Файл") Тогда + Размер = Файл.Размер(); + Иначе + Размер = Файл.Размер; + КонецЕсли; + + Если Размер > ОбщиеНастройки.МаксимальныйРазмерФайла Тогда + + РазмерВМб = Размер / (1024 * 1024); + РазмерВМбМакс = ОбщиеНастройки.МаксимальныйРазмерФайла / (1024 * 1024); + + Если ТипЗнч(Файл) = Тип("Файл") Тогда + Имя = Файл.Имя; + Иначе + Имя = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( + Файл.ПолноеНаименование, Файл.Расширение); + КонецЕсли; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размер файла ""%1"" (%2 Мб) + |превышает максимально допустимый размер файла (%3 Мб).'"), + Имя, + РаботаСФайламиСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + РаботаСФайламиСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + КонецЕсли; + +КонецПроцедуры + ///////////////////////////////////////////////////////////////////////////////////// // Обработчики событий формы элемента файла. @@ -4999,15 +5724,10 @@ Элементы = Контекст.Элементы; - ФайлБылСоздан = Параметры.ЭтоНовый; - КолонкиМассив = Новый Массив; Для Каждого ОписаниеКолонки Из Контекст.РеквизитФормыВЗначение("ЭлектронныеПодписи").Колонки Цикл КолонкиМассив.Добавить(ОписаниеКолонки.Имя); КонецЦикла; - ОписаниеКолонокТаблицыПодписей = Новый ФиксированныйМассив(КолонкиМассив); - - ТекущийПользователь = Пользователи.АвторизованныйПользователь(); Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Параметры.ЗначениеКопирования); @@ -5031,9 +5751,6 @@ ЗаголовокОшибки = НСтр("ru = 'Ошибка при настройке формы элемента присоединенных файлов.'"); ОкончаниеОшибки = НСтр("ru = 'В этом случае настройка формы элемента невозможна.'"); - ИмяСправочникаХранилищаВерсийФайлов = ИмяСправочникаХраненияВерсийФайлов( - ТипЗнч(ОбъектЗначение.ВладелецФайла), "", ЗаголовокОшибки, ОкончаниеОшибки); - ВозможностьСоздаватьВерсииФайлов = ТипЗнч(ОбъектЗначение.Ссылка) = Тип("СправочникСсылка.Файлы"); Контекст.ВозможностьСоздаватьВерсииФайлов = ВозможностьСоздаватьВерсииФайлов; @@ -5049,7 +5766,7 @@ ЗаполнитьСписокПодписей(Контекст, Параметры.ЗначениеКопирования); ЗаполнитьСписокШифрования(Контекст, Параметры.ЗначениеКопирования); - ОбщиеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); + ОбщиеНастройки = РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки; РасширениеФайлаВСписке = РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( ОбщиеНастройки.СписокРасширенийТекстовыхФайлов, Контекст.Объект.Расширение); @@ -5062,8 +5779,7 @@ КонецЕсли; Если ЗначениеЗаполнено(ТекущаяВерсияФайла) Тогда - КодировкаЗначение = РаботаСФайламиСлужебныйВызовСервера.ПолучитьКодировкуВерсииФайла( - ТекущаяВерсияФайла); + КодировкаЗначение = ПолучитьКодировкуВерсииФайла(ТекущаяВерсияФайла); СписокКодировок = Кодировки(); ЭлементСписка = СписокКодировок.НайтиПоЗначению(КодировкаЗначение); @@ -5083,12 +5799,29 @@ Контекст.Элементы.Кодировка.Видимость = Ложь; КонецЕсли; + ЭтоСлужебныйФайл = Ложь; + Если ЕстьРеквизитСлужебный(Контекст.ИмяСправочника) Тогда + ЭтоСлужебныйФайл = ОбъектЗначение.Служебный; + КонецЕсли; + + Если ЭтоСлужебныйФайл Тогда + Контекст.ТолькоПросмотр = Истина; + КонецЕсли; + + Элементы.ФормаЗакрыть.Видимость = ЭтоСлужебныйФайл; + Элементы.ФормаЗакрыть.КнопкаПоУмолчанию = ЭтоСлужебныйФайл; + Элементы.ДекорацияПояснениеСлужебный.Видимость = ЭтоСлужебныйФайл; + + Если ТипЗнч(Контекст.ТекущийПользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ИзменитьФормуДляВнешнегоПользователя(Контекст); + КонецЕсли; + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда Контекст.ФайлРедактируетсяВОблаке = ФайлРедактируетсяВОблаке(Контекст.Объект.Ссылка); КонецЕсли; Если ТолькоПросмотр - ИЛИ НЕ ПравоДоступа("Изменение", Контекст.Объект.ВладелецФайла.Метаданные()) Тогда + ИЛИ НЕ ПравоДоступа("Изменение", Контекст.Объект.Ссылка.Метаданные()) Тогда УстановитьКнопкиИзмененияНевидимыми(Контекст.Элементы); КонецЕсли; @@ -5192,8 +5925,6 @@ КонецЕсли; КонецЦикла; - Размещение = НовыйОбъект.ВладелецФайла; - Если Не НовыйОбъект.ЭтоНовый() Тогда Контекст.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(НовыйОбъект); КонецЕсли; @@ -5312,11 +6043,14 @@ МодульЭлектроннаяПодписьСлужебныйКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйКлиентСервер"); МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + + РасширениеДляФайловПодписи = МодульЭлектроннаяПодпись.ПерсональныеНастройки().РасширениеДляФайловПодписи; Для Каждого ЭлектроннаяПодписьФайла Из ЭлектронныеПодписи Цикл ИмяФайлаПодписи = МодульЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаПодписи(СоставИмениФайлаДанных.ИмяБезРасширения, - Строка(ЭлектроннаяПодписьФайла.КомуВыданСертификат)); + Строка(ЭлектроннаяПодписьФайла.КомуВыданСертификат), РасширениеДляФайловПодписи); ЭлектроннаяПодписьФайла.Вставить("ИмяФайла", ИмяФайлаПодписи); ДанныеПоСертификату = МодульЭлектроннаяПодписьСлужебный.ДанныеПоСертификату(ЭлектроннаяПодписьФайла, УникальныйИдентификатор); @@ -5361,6 +6095,7 @@ ИменаКоманд.Добавить("УдалитьЭП"); ИменаКоманд.Добавить("Редактировать"); + ИменаКоманд.Добавить("СохранитьИзменения"); ИменаКоманд.Добавить("ЗакончитьРедактирование"); ИменаКоманд.Добавить("Освободить"); @@ -5524,8 +6259,6 @@ КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); - Настройки = КомпоновщикНастроек.ПолучитьНастройки(); - Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТипВладельца"); Параметр.Значение = ТипЗнч(ВладелецФайла.ЗначениеПустойСсылки); Параметр.Использование = Истина; @@ -5645,7 +6378,6 @@ ПолноеИмяСправочникаФайлов = НастройкаСинхронизации.ТипВладельцаФайла.ПолноеИмя; МетаданныеОбъектаФайлов = Метаданные.НайтиПоПолномуИмени(ПолноеИмяСправочникаФайлов); ЕстьВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъектаФайлов); - ЕстьТипДата = Ложь; ТекстЗапроса = ""; @@ -5685,8 +6417,8 @@ | СправочникФайлов.ВладелецФайла КАК Родитель, | ЛОЖЬ КАК ЭтоПапка,"; - ОтборПоПапкам = "СправочникФайлов.ЭтоГруппа - | ИЛИ (НЕ СправочникФайлов.ЭтоГруппа И СправочникФайлов.ПодписанЭП = ЛОЖЬ И СправочникФайлов.Зашифрован = ЛОЖЬ) "; + ОтборПоПапкам = "(СправочникФайлов.ЭтоГруппа + | ИЛИ (НЕ СправочникФайлов.ЭтоГруппа И СправочникФайлов.ПодписанЭП = ЛОЖЬ И СправочникФайлов.Зашифрован = ЛОЖЬ)) "; Иначе @@ -5833,7 +6565,7 @@ // Проверяет, была ли ошибка при выполнении HTTP запроса, и вызывает соответствующее исключение. Функция ПроверитьИсключениеHTTP1С(Ответ, АдресСервера) - Результат = Новый Структура("Успешно, ТекстОшибки"); + Результат = Новый Структура("Успешно, ТекстОшибки, КодОшибки"); Если (Ответ.КодСостояния >= 400) И (Ответ.КодСостояния <= 599) Тогда @@ -5841,6 +6573,7 @@ ИнформацияОбОшибке = Ответ.ПолучитьТелоКакСтроку(); Результат.Успешно = Ложь; + Результат.КодОшибки = Ответ.КодСостояния; Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, Ответ.КодСостояния, РаскодироватьСтроку(АдресСервера, СпособКодированияСтроки.URLВКодировкеURL), ИнформацияОбОшибке); @@ -6001,8 +6734,8 @@ ИнтернетПрокси = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); - ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"); + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + ИнтернетПрокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("https"); КонецЕсли; ЗащищенноеСоединение = Неопределено; @@ -6103,7 +6836,6 @@ Etag = ПараметрыФайла.Etag; ДатаМодификацииФайла = ПараметрыФайла.ДатаМодификацииФайла; ДлинаФайла = ПараметрыФайла.ДлинаФайла; - ДляПользователя = ПараметрыФайла.ДляПользователя; ОбъектВладелец = ПараметрыФайла.ОбъектВладелец; СсылкаСуществующегоФайла = ПараметрыФайла.СсылкаСуществующегоФайла; ПараметрыСинхронизации = ПараметрыФайла.ПараметрыСинхронизации; @@ -6162,7 +6894,7 @@ СведенияОФайле.НоваяВерсияАвтор = ПараметрыСинхронизации.АвторФайлов; КонецЕсли; - Результат = РаботаСФайламиСлужебныйВызовСервера.СохранитьИзмененияФайла(СсылкаСуществующегоФайла, СведенияОФайле, Истина, "", "", Ложь); + РаботаСФайламиСлужебныйВызовСервера.СохранитьИзмененияФайла(СсылкаСуществующегоФайла, СведенияОФайле, Истина, "", "", Ложь); НовыйФайл = СсылкаСуществующегоФайла; @@ -6193,13 +6925,19 @@ УстанавливаемыйУровеньЖурналаРегистрации = УровеньЖурналаРегистрации.Информация; КонецЕсли; - ЗаписьЖурналаРегистрации(РаботаСФайламиКлиентСервер.СобытиеЖурналаРегистрацииСинхронизация(), + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСинхронизация(), УстанавливаемыйУровеньЖурналаРегистрации,, УчетнаяЗапись, ТекстСообщения); КонецПроцедуры +Функция СобытиеЖурналаРегистрацииСинхронизация() + + Возврат НСтр("ru = 'Синхронизация файлов с облачным сервисом'", ОбщегоНазначения.КодОсновногоЯзыка()); + +КонецФункции + // Возвращает дату, преобразованную из формата RFC 1123 в тип Дата. Функция ДатаRFC1123(ДатаСтрокойHTTP) @@ -6246,6 +6984,9 @@ , РезультатПроверки.РезультатПротокол); Если Результат.Успешно = Ложь Тогда + РезультатПроверки.Отказ = Истина; + РезультатПроверки.КодОшибки = Результат.КодОшибки; + РезультатПроверки.РезультатТекст = Результат.ТекстОшибки; ЗаписатьВЖурналСобытийСинхронизацииФайлов(Результат.ТекстОшибки, СтруктураОбмена.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); Возврат; КонецЕсли; @@ -6296,7 +7037,6 @@ ОписаниеОшибки = ОписаниеОшибки(); РезультатПроверки.РезультатТекст = РезультатПроверки.РезультатТекст + ?(ПустаяСтрока(РезультатПроверки.РезультатТекст), "", Символы.ПС) + ОписаниеОшибки; ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки, СтруктураОбмена.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); - Отказ = Истина; РезультатПроверки.Отказ = Истина; КонецПопытки; @@ -6635,7 +7375,7 @@ |"); Если Результат.Успешно = Ложь Тогда - ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(Результат.ТекстОшибки, ПараметрыСинхронизации.УчетнаяЗапись, УровеньЖурналаРегистрации.Ошибка); Возврат; КонецЕсли; @@ -6745,13 +7485,16 @@ КонецЕсли; Если (ТекущаяПапкаФайлов = Неопределено) И (ТаблицаФайлов.Найти(СтрокаДереваФайлов.Href, "Href") = Неопределено) Тогда - // Это новая папка на сервере - грузим ее, - // но сначала проверим возможность хранения UID1C, и если нельзя - то папка не грузится. - Если Не ЭтоПапкаФайлов(ОбъектВладелец) Тогда + // Это новая папка на сервере. + // Если папка лежит в корне каталога обмена или корне типа синхронизируемого объекта метаданных, она не относится к объекту-владельцу. + // Такие папки игнорируются. + Если ОбъектВладелец = Неопределено + Или ТипЗнч(ОбъектВладелец) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда Продолжить; КонецЕсли; + // Проверим возможность хранения UID1C, и если нельзя - то папка не грузится. Если НЕ ПроверитьВозможностьUID1C(СтрокаДереваФайлов.Href, Строка(Новый УникальныйИдентификатор), ПараметрыСинхронизации) Тогда ТекстСобытия = НСтр("ru = 'Невозможно сохранение дополнительных свойств файла, он не будет загружен: %1'"); ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаДереваФайлов.ИмяФайла), ПараметрыСинхронизации.УчетнаяЗапись); @@ -6825,8 +7568,9 @@ // новую карточку файла поиск по Href оправдан, т.к. он уникален на файловом сервере для каждого файла. // Файл будет пропущен, т.к. был добавлен пользователем в некорректную папку, у которой отсутствует владелец. - Если ОбъектВладелец = Неопределено Или ТипЗнч(ОбъектВладелец) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - Возврат; + Если ОбъектВладелец = Неопределено + Или ТипЗнч(ОбъектВладелец) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Продолжить; КонецЕсли; ТекущийФайл = НайтиСтрокуПоURI(СтрокаДереваФайлов.Href, ТаблицаФайлов, "Href"); @@ -6897,8 +7641,6 @@ Процедура ЗаполнитьДанныеИзОблачногоСервиса(СтрокиДереваФайлов, ТаблицаФайлов, ПараметрыСинхронизации, ОбъектВладелец = Неопределено) - ПодсистемаРаботаСФайламиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами"); - Для каждого СтрокаДереваФайлов Из СтрокиДереваФайлов Цикл Если СтрокаДереваФайлов.ЭтоПапка = Истина Тогда //папки @@ -7080,8 +7822,17 @@ ТаблицаФайлов.Индексы.Добавить("ФайлСсылка"); ТаблицаФайлов.Сортировать("Уровень, РодительСортировка, ЭтоПапка УБЫВ"); + ОбходТаблицыФайлов(ТаблицаФайлов, ПараметрыСинхронизации, АдресСервера); + + ТаблицаФайлов.Сортировать("Уровень УБЫВ, РодительСортировка, ЭтоПапка УБЫВ"); + ОбходТаблицыФайлов(ТаблицаФайлов, ПараметрыСинхронизации, АдресСервера, Истина); + + ЗаписатьРезультатСинхронизации(ПараметрыСинхронизации.УчетнаяЗапись, СинхронизацияВыполнена); + +КонецПроцедуры + +Процедура ОбходТаблицыФайлов(ТаблицаФайлов, ПараметрыСинхронизации, АдресСервера, ЭтоУдалениеФайлов = Ложь) - // Перебираем таблицу и решаем что делать с файлами и папками. Для Каждого СтрокаТаблицы Из ТаблицаФайлов Цикл Если СтрокаТаблицы.Обработан Тогда @@ -7104,18 +7855,22 @@ Попытка - Если СозданНовыйВБазе И НЕ УдаленВБазе Тогда - // Загрузить файл на облачный сервер - ОбновитьСтатусСинхронизацииФайла = СоздатьФайлВОблачномСервисе(АдресСервера, ПараметрыСинхронизации, СтрокаТаблицы, ТаблицаФайлов); + Если ЭтоУдалениеФайлов Тогда + Если УдаленНаСервере И НЕ УдаленВБазе Тогда + ОбновитьСтатусСинхронизацииФайла = УдалитьФайлВОблачномСервисе(ПараметрыСинхронизации, СтрокаТаблицы); + КонецЕсли; + Иначе - ИначеЕсли УдаленНаСервере И НЕ УдаленВБазе Тогда - - ОбновитьСтатусСинхронизацииФайла = УдалитьФайлВОблачномСервисе(ПараметрыСинхронизации, СтрокаТаблицы); - - ИначеЕсли (ИзмененВБазе ИЛИ ИзмененНаСервере) И НЕ (УдаленВБазе ИЛИ УдаленНаСервере) Тогда - - Если ИзмененНаСервере И НЕ ИзмененВБазе Тогда - ОбновитьСтатусСинхронизацииФайла = ИзменитьФайлВОблачномСервисе(ИзмененоСодержимоеНаСервере, ОбновитьСтатусСинхронизацииФайла, ПараметрыСинхронизации, СтрокаТаблицы); + Если СозданНовыйВБазе И НЕ УдаленВБазе Тогда + // Загрузить файл на облачный сервер + ОбновитьСтатусСинхронизацииФайла = СоздатьФайлВОблачномСервисе(АдресСервера, ПараметрыСинхронизации, СтрокаТаблицы, ТаблицаФайлов); + + ИначеЕсли (ИзмененВБазе ИЛИ ИзмененНаСервере) И НЕ (УдаленВБазе ИЛИ УдаленНаСервере) Тогда + + Если ИзмененНаСервере И НЕ ИзмененВБазе Тогда + ОбновитьСтатусСинхронизацииФайла = ИзменитьФайлВОблачномСервисе(ИзмененоСодержимоеНаСервере, ОбновитьСтатусСинхронизацииФайла, ПараметрыСинхронизации, СтрокаТаблицы); + КонецЕсли; + КонецЕсли; КонецЕсли; @@ -7131,7 +7886,6 @@ КонецЕсли; ЗафиксироватьТранзакцию(); - Исключение ОтменитьТранзакцию(); СтрокаТаблицы.ДатаСинхронизации = ТекущаяДатаСеанса(); @@ -7145,8 +7899,6 @@ КонецЦикла; - ЗаписатьРезультатСинхронизации(ПараметрыСинхронизации.УчетнаяЗапись, СинхронизацияВыполнена); - КонецПроцедуры Процедура ЗаписатьРезультатСинхронизации(УчетнаяЗапись, Знач СинхронизацияВыполнена) @@ -7349,28 +8101,28 @@ Функция ВыбратьДанныеПоПравилам(УчетнаяЗапись, Синхронизировать = ИСТИНА) ЗапросНастройкиСинхронизации = Новый Запрос; - ЗапросНастройкиСинхронизации.Текст = "ВЫБРАТЬ - | НастройкиСинхронизацииФайлов.ВладелецФайла, - | НастройкиСинхронизацииФайлов.ТипВладельцаФайла, - | ИдентификаторыОбъектовМетаданных.Ссылка КАК ИдентификаторВладельца, - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.Ссылка) <> ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ЭтоНастройкаДляЭлементаСправочника, - | НастройкиСинхронизацииФайлов.ПравилоОтбора, - | НастройкиСинхронизацииФайлов.ЭтоФайл, - | НастройкиСинхронизацииФайлов.УчетнаяЗапись - |ИЗ - | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных - | ПО (ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) - |ГДЕ - | НастройкиСинхронизацииФайлов.Синхронизировать = &Синхронизировать - | И НастройкиСинхронизацииФайлов.УчетнаяЗапись = &УчетнаяЗапись"; + ЗапросНастройкиСинхронизации.Текст = + "ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.ВладелецФайла КАК ВладелецФайла, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла КАК ТипВладельцаФайла, + | ИдентификаторыОбъектовМетаданных.Ссылка КАК ИдентификаторВладельца, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.Ссылка) <> ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЭтоНастройкаДляЭлементаСправочника, + | НастройкиСинхронизацииФайлов.ПравилоОтбора КАК ПравилоОтбора, + | НастройкиСинхронизацииФайлов.ЭтоФайл КАК ЭтоФайл, + | НастройкиСинхронизацииФайлов.УчетнаяЗапись КАК УчетнаяЗапись, + | НастройкиСинхронизацииФайлов.Синхронизировать КАК Синхронизировать + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | ПО (ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) + |ГДЕ + | НастройкиСинхронизацииФайлов.УчетнаяЗапись = &УчетнаяЗапись"; - ЗапросНастройкиСинхронизации.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); - ЗапросНастройкиСинхронизации.УстановитьПараметр("Синхронизировать", Синхронизировать); + ЗапросНастройкиСинхронизации.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); НастройкиСинхронизации = ЗапросНастройкиСинхронизации.Выполнить().Выгрузить(); ТаблицаФайлов = Неопределено; @@ -7382,8 +8134,6 @@ Продолжить; КонецЕсли; - ВозможностьСоздаватьГруппы = СправочникФайлов.Иерархический; - ДеревоФайлов = ВыбратьДанныеПоПравилуСинхронизации(Настройка); Если ТаблицаФайлов = Неопределено Тогда @@ -7392,6 +8142,8 @@ ТаблицаФайлов.Колонки.Добавить(Колонка.Имя); КонецЦикла; + ТаблицаФайлов.Колонки.Добавить("Синхронизировать", Новый ОписаниеТипов("Число")); + КонецЕсли; Если Настройка.ЭтоНастройкаДляЭлементаСправочника Тогда @@ -7403,78 +8155,147 @@ Для Каждого СтрокаФайлов Из ДеревоФайлов.Строки Цикл НоваяСтрока = ТаблицаФайлов.Добавить(); + НоваяСтрока.Синхронизировать = ?(Настройка.Синхронизировать, 1, 0); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаФайлов); Если НоваяСтрока.ФайлСсылка = Неопределено Тогда НоваяСтрока.ФайлСсылка = КорневаяПапка; КонецЕсли; - Если НоваяСтрока.Родитель = Неопределено Тогда - НоваяСтрока.Родитель = КорневаяПапка; + Если ЗначениеЗаполнено(СтрокаФайлов.ФайлСсылка) Тогда + + МетаданныеФайла = СтрокаФайлов.ФайлСсылка.Метаданные(); + Если Метаданные.Справочники.Содержит(МетаданныеФайла) + И МетаданныеФайла.Иерархический Тогда + + РодительФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаФайлов.ФайлСсылка, "Родитель"); + Если ЗначениеЗаполнено(РодительФайла) Тогда + НоваяСтрока.Родитель = РодительФайла; + КонецЕсли; + + КонецЕсли; + КонецЕсли; - Если ВозможностьСоздаватьГруппы И Настройка.ЭтоНастройкаДляЭлементаСправочника Тогда - Если ЗначениеЗаполнено(СтрокаФайлов.ФайлСсылка.Родитель) Тогда - НоваяСтрока.Родитель = СтрокаФайлов.ФайлСсылка.Родитель; - КонецЕсли; + Если Не ЗначениеЗаполнено(НоваяСтрока.Родитель) Тогда + НоваяСтрока.Родитель = КорневаяПапка; КонецЕсли; КонецЦикла; КонецЦикла; + ИменаКолонок = Новый Массив; + Для Каждого Колонка Из ТаблицаФайлов.Колонки Цикл + Если Колонка.Имя <> "Синхронизировать" Тогда + ИменаКолонок.Добавить(Колонка.Имя); + КонецЕсли; + КонецЦикла; + + КолонкиГруппировки = СтрСоединить(ИменаКолонок, ","); + ТаблицаФайлов.Свернуть(КолонкиГруппировки, "Синхронизировать"); + ТаблицаФайлов.Сортировать("Синхронизировать" + ?(Не Синхронизировать, " Убыв", "")); + + УдаляемыеСтроки = Новый Массив; + НесинхронизируемыеВладельцы = Новый Массив; + Для Каждого Строка Из ТаблицаФайлов Цикл + + Если (Синхронизировать + И Строка.Синхронизировать > 0) + Или (Не Синхронизировать + И Строка.Синхронизировать = 0) Тогда + + Прервать; + + КонецЕсли; + + УдаляемыеСтроки.Добавить(Строка); + Если Не Синхронизировать + И НесинхронизируемыеВладельцы.Найти(Строка.Родитель) = Неопределено Тогда + + НесинхронизируемыеВладельцы.Добавить(Строка.Родитель); + + КонецЕсли; + + КонецЦикла; + + Для Каждого Строка Из УдаляемыеСтроки Цикл + ТаблицаФайлов.Удалить(Строка); + КонецЦикла; + + ТаблицаВладельцев = ТаблицаФайлов.Скопировать(, "Родитель"); + ТаблицаВладельцев.Свернуть("Родитель"); + + Если Синхронизировать Тогда + ОбъектыДляСинхронизации = ТаблицаВладельцев.ВыгрузитьКолонку("Родитель"); + Иначе + + ОбъектыДляСинхронизации = Новый Массив; + Для Каждого СтрокаВладельца Из ТаблицаВладельцев Цикл + + Если НесинхронизируемыеВладельцы.Найти(СтрокаВладельца.Родитель) = Неопределено Тогда + ОбъектыДляСинхронизации.Добавить(СтрокаВладельца.Родитель); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) - | ТОГДА НастройкиСинхронизацииФайлов.ВладелецФайла - | ИНАЧЕ ИдентификаторыОбъектовМетаданных.Ссылка - | КОНЕЦ КАК ФайлСсылка, - | НастройкиСинхронизацииФайлов.ЭтоФайл КАК ЭтоФайл, - | НастройкиСинхронизацииФайлов.УчетнаяЗапись КАК УчетнаяЗапись, - | НастройкиСинхронизацииФайлов.ВладелецФайла КАК ВладелецФайла, - | НастройкиСинхронизацииФайлов.ТипВладельцаФайла КАК ТипВладельцаФайла - |ПОМЕСТИТЬ ВТВиртуальныеКорневыеПапки - |ИЗ - | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных - | ПО (ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) - |ГДЕ - | НастройкиСинхронизацииФайлов.Синхронизировать = &Синхронизировать - | И НастройкиСинхронизацииФайлов.УчетнаяЗапись = &УчетнаяЗапись - | - |ИНДЕКСИРОВАТЬ ПО - | УчетнаяЗапись - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВТВиртуальныеКорневыеПапки.ФайлСсылка КАК ФайлСсылка, - | ВТВиртуальныеКорневыеПапки.ЭтоФайл КАК ЭтоФайл, - | ЛОЖЬ КАК ПометкаУдаления, - | ИСТИНА КАК ЭтоПапка, - | ИСТИНА КАК ЕстьВБазе, - | ЛОЖЬ КАК ЕстьНаСервере, - | ЛОЖЬ КАК Обработан, - | ЛОЖЬ КАК ИзмененНаСервере, - | СтатусыСинхронизацииФайловСОблачнымСервисом.Href КАК Href, - | СтатусыСинхронизацииФайловСОблачнымСервисом.Etag КАК Etag, - | СтатусыСинхронизацииФайловСОблачнымСервисом.УникальныйИдентификатор1С КАК УникальныйИдентификатор1С, - | ВТВиртуальныеКорневыеПапки.ВладелецФайла, - | ВТВиртуальныеКорневыеПапки.ТипВладельцаФайла - |ИЗ - | ВТВиртуальныеКорневыеПапки КАК ВТВиртуальныеКорневыеПапки - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом - | ПО ВТВиртуальныеКорневыеПапки.УчетнаяЗапись = СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись - | И ВТВиртуальныеКорневыеПапки.ФайлСсылка = СтатусыСинхронизацииФайловСОблачнымСервисом.Файл - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |УНИЧТОЖИТЬ ВТВиртуальныеКорневыеПапки"; + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | ТОГДА НастройкиСинхронизацииФайлов.ВладелецФайла + | ИНАЧЕ ИдентификаторыОбъектовМетаданных.Ссылка + | КОНЕЦ КАК ФайлСсылка, + | НастройкиСинхронизацииФайлов.ЭтоФайл КАК ЭтоФайл, + | НастройкиСинхронизацииФайлов.УчетнаяЗапись КАК УчетнаяЗапись, + | НастройкиСинхронизацииФайлов.ВладелецФайла КАК ВладелецФайла, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла КАК ТипВладельцаФайла + |ПОМЕСТИТЬ ВТВиртуальныеКорневыеПапки + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | ПО (ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) + |ГДЕ + | НастройкиСинхронизацииФайлов.Синхронизировать = &Синхронизировать + | И НастройкиСинхронизацииФайлов.УчетнаяЗапись = &УчетнаяЗапись + | + |ИНДЕКСИРОВАТЬ ПО + | УчетнаяЗапись + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТВиртуальныеКорневыеПапки.ФайлСсылка КАК ФайлСсылка, + | ВТВиртуальныеКорневыеПапки.ЭтоФайл КАК ЭтоФайл, + | ЛОЖЬ КАК ПометкаУдаления, + | ИСТИНА КАК ЭтоПапка, + | ИСТИНА КАК ЕстьВБазе, + | ЛОЖЬ КАК ЕстьНаСервере, + | ЛОЖЬ КАК Обработан, + | ЛОЖЬ КАК ИзмененНаСервере, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Href КАК Href, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Etag КАК Etag, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УникальныйИдентификатор1С КАК УникальныйИдентификатор1С, + | ВТВиртуальныеКорневыеПапки.ВладелецФайла КАК ВладелецФайла, + | ВТВиртуальныеКорневыеПапки.ТипВладельцаФайла КАК ТипВладельцаФайла + |ИЗ + | ВТВиртуальныеКорневыеПапки КАК ВТВиртуальныеКорневыеПапки + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + | ПО ВТВиртуальныеКорневыеПапки.УчетнаяЗапись = СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись + | И ВТВиртуальныеКорневыеПапки.ФайлСсылка = СтатусыСинхронизацииФайловСОблачнымСервисом.Файл + |ГДЕ + | ВТВиртуальныеКорневыеПапки.ФайлСсылка В (&ВладельцыФайлов) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ВТВиртуальныеКорневыеПапки"; Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); Запрос.УстановитьПараметр("Синхронизировать", Синхронизировать); + Запрос.УстановитьПараметр("ВладельцыФайлов", ОбъектыДляСинхронизации); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); @@ -7597,8 +8418,6 @@ КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); - Настройки = КомпоновщикНастроек.ПолучитьНастройки(); - Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("УчетнаяЗапись"); Параметр.Значение = НастройкаСинхронизации.УчетнаяЗапись; Параметр.Использование = Истина; @@ -7638,6 +8457,7 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.СинхронизацияФайлов); УстановитьПривилегированныйРежим(Истина); + УдалитьНесинхронизируемыеФайлы(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -7659,13 +8479,11 @@ СинхронизироватьФайлыСОблачнымСервисом(Выборка.Ссылка); КонецЦикла; - ОсвободитьЗахваченныеФайлы(); - КонецПроцедуры Процедура ВыполнитьПроверкуПодключения(УчетнаяЗапись, РезультатПроверки) Экспорт - РезультатПроверки = Новый Структура("РезультатТекст,РезультатПротокол,Отказ","","",Ложь); + РезультатПроверки = Новый Структура("РезультатТекст, РезультатПротокол, Отказ, КодОшибки","","",Ложь); ПараметрыСинхронизации = ОсновныеОбъектыСинхронизации(УчетнаяЗапись); @@ -7682,64 +8500,42 @@ КонецПроцедуры Процедура ОсвободитьЗахваченныеФайлыФон(ПараметрыВызова, АдресВХранилище) Экспорт - ОсвободитьЗахваченныеФайлы(); + УдалитьНесинхронизируемыеФайлы(); КонецПроцедуры -Процедура ОсвободитьЗахваченныеФайлы() +Процедура УдалитьНесинхронизируемыеФайлы() Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | УчетныеЗаписиСинхронизацииФайлов.Ссылка КАК УчетнаяЗапись - |ПОМЕСТИТЬ НеактивныеУчетныеЗаписи - |ИЗ - | Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов - |ГДЕ - | УчетныеЗаписиСинхронизацииФайлов.ПометкаУдаления - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | УчетныеЗаписиСинхронизацииФайлов.Ссылка - |ИЗ - | Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов - |ГДЕ - | НЕ УчетныеЗаписиСинхронизацииФайлов.ПометкаУдаления - | ИЛИ НЕ УчетныеЗаписиСинхронизацииФайлов.Ссылка В - | (ВЫБРАТЬ - | НастройкиСинхронизацииФайлов.УчетнаяЗапись - | ИЗ - | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов - | ГДЕ - | НастройкиСинхронизацииФайлов.Синхронизировать) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | НеактивныеУчетныеЗаписи.УчетнаяЗапись - |ИЗ - | НеактивныеУчетныеЗаписи КАК НеактивныеУчетныеЗаписи - |ГДЕ - | НеактивныеУчетныеЗаписи.УчетнаяЗапись В - | (ВЫБРАТЬ - | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись - | ИЗ - | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом)"; + "ВЫБРАТЬ + | УчетныеЗаписиСинхронизацииФайлов.Ссылка КАК УчетнаяЗапись + |ИЗ + | Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + | ПО (НастройкиСинхронизацииФайлов.УчетнаяЗапись = УчетныеЗаписиСинхронизацииФайлов.Ссылка) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + | ПО (СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись = УчетныеЗаписиСинхронизацииФайлов.Ссылка) + |ГДЕ + | (УчетныеЗаписиСинхронизацииФайлов.ПометкаУдаления + | ИЛИ НастройкиСинхронизацииФайлов.Синхронизировать <> ИСТИНА) + | И СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись ЕСТЬ НЕ NULL + | + |СГРУППИРОВАТЬ ПО + | УчетныеЗаписиСинхронизацииФайлов.Ссылка"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаУчетнаяЗапись = РезультатЗапроса.Выбрать(); Пока ВыборкаУчетнаяЗапись.Следующий() Цикл - ОсвободитьЗахваченныеФайлыУчетнойЗаписи(ВыборкаУчетнаяЗапись.УчетнаяЗапись); + УдалитьНесинхронизируемыеФайлыУчетнойЗаписи(ВыборкаУчетнаяЗапись.УчетнаяЗапись); КонецЦикла; КонецПроцедуры // Освобождение файлов, захваченных учетными записями с пометкой на удаление или с отключенными настройками синхронизации. // -Процедура ОсвободитьЗахваченныеФайлыУчетнойЗаписи(УчетнаяЗапись = Неопределено) +Процедура УдалитьНесинхронизируемыеФайлыУчетнойЗаписи(УчетнаяЗапись = Неопределено) ПараметрыСинхронизации = ОсновныеОбъектыСинхронизации(УчетнаяЗапись); @@ -7747,7 +8543,6 @@ Возврат; КонецЕсли; - АдресОблачногоСервиса = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера, Ложь); АдресСервера = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера); ТекстСобытия = НСтр("ru = 'Начало освобождения файлов, захваченных облачным сервисом.'"); @@ -7830,7 +8625,7 @@ Функция ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись) Экспорт Отбор = Новый Структура; - Отбор.Вставить("СобытиеЖурналаРегистрации ", РаботаСФайламиКлиентСервер.СобытиеЖурналаРегистрацииСинхронизация()); + Отбор.Вставить("СобытиеЖурналаРегистрации ", СобытиеЖурналаРегистрацииСинхронизация()); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -7881,9 +8676,9 @@ | ПО СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись = СтатусыСинхронизацииФайловСОблачнымСервисомКорень.УчетнаяЗапись | И (СтатусыСинхронизацииФайловСОблачнымСервисомКорень.Файл = """""""") |ГДЕ - | СтатусыСинхронизацииФайловСОблачнымСервисом.ВладелецФайла = &ВладелецФайла"; + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = &Файл"; - Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + Запрос.УстановитьПараметр("Файл", ВладелецФайла); Таблица = Запрос.Выполнить().Выгрузить(); Пока Таблица.Количество() > 0 Цикл @@ -7951,6 +8746,7 @@ КонецФункции +#Область КонтрольВеденияУчета //////////////////////////////////////////////////////////////////////////////// // Контроль ведения учета. @@ -8137,6 +8933,10 @@ КонецПроцедуры +#КонецОбласти + +#Область ИзвлечениеТекста +//////////////////////////////////////////////////////////////////////////////// // Извлечение текста для полнотекстового поиска. Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочника, ЧислоФайловВВыборке, @@ -8225,10 +9025,36 @@ КонецФункции -Процедура ПриЗаписиИзвлеченногоТекста(ФайлОбъект) +// Записывает извлеченный текст. +// +// Параметры: +// ТекущаяВерсия - СправочникСсылка.ВерсииФайлов - версия файла. +// +Процедура ПриЗаписиИзвлеченногоТекста(ТекущаяВерсия, ФайлЗаблокирован = Истина) - Если ЭтоЭлементРаботаСФайлами(ФайлОбъект) Тогда - РаботаСФайламиСлужебныйВызовСервера.ПриЗаписиИзвлеченногоТекста(ФайлОбъект); + // Если это не версия, то записываем. + Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВладелецФайла", Метаданные.НайтиПоТипу(ТипЗнч(ТекущаяВерсия))) Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ТекущаяВерсия); + Возврат; + КонецЕсли; + + Файл = ТекущаяВерсия.Владелец; + ТекущаяВерсияФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Файл, "ТекущаяВерсия"); + Если ТекущаяВерсияФайла = ТекущаяВерсия.Ссылка Тогда + Попытка + ЗаблокироватьДанныеДляРедактирования(Файл); + Исключение + ФайлЗаблокирован = Ложь; + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ТекущаяВерсия); + + Если ТекущаяВерсияФайла = ТекущаяВерсия.Ссылка Тогда + ФайлОбъект = Файл.ПолучитьОбъект(); + ФайлОбъект.ТекстХранилище = ТекущаяВерсия.ТекстХранилище; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ФайлОбъект); КонецЕсли; КонецПроцедуры @@ -8251,7 +9077,7 @@ Возврат Результат; // Текст будет извлечен позднее в регламентном задании. КонецЕсли; - Если Не ЭтоПлатформаWindows() Или ДвоичныеДанные = Неопределено Тогда + Если Не ОбщегоНазначения.ЭтоWindowsСервер() Или ДвоичныеДанные = Неопределено Тогда Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; Результат.ТекстХранилище = Новый ХранилищеЗначения(""); Возврат Результат; @@ -8264,26 +9090,74 @@ Попытка УдалитьФайлы(ИмяВременногоФайла); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат Результат; КонецФункции -Функция ИзвлечьТекстИзФайлаНаДиске(Знач ИмяФайла, Знач Кодировка = Неопределено) +Функция ИзвлечьТекстИзФайлаНаДиске(Знач ИмяФайла, Знач Кодировка = Неопределено) Экспорт + + ИзвлеченныйТекст = ""; + Результат = Новый Структура("СтатусИзвлеченияТекста, ТекстХранилище"); + Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; + + Попытка + Файл = Новый Файл(ИмяФайла); + Если Не Файл.Существует() Тогда + Возврат Результат; + КонецЕсли; + Исключение + Возврат Результат; + КонецПопытки; Отказ = Ложь; - ИзвлеченныйТекст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ИмяФайла, Отказ, Кодировка); + ОбщиеНастройки = РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки; - Результат = Новый Структура("СтатусИзвлеченияТекста, ТекстХранилище"); - Если Отказ Тогда - // Если текст некому извлечь, это не ошибка, а нормальный случай. - Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; + РасширениеИмениФайла = + ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла); + + РасширениеФайлаВСписке = РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( + ОбщиеНастройки.СписокРасширенийТекстовыхФайлов, РасширениеИмениФайла); + + Если РасширениеФайлаВСписке Тогда + + ИзвлеченныйТекст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстИзТекстовогоФайла( + ИмяФайла, Кодировка, Отказ); + Иначе + + Попытка + Извлечение = Новый ИзвлечениеТекста(ИмяФайла); + ИзвлеченныйТекст = Извлечение.ПолучитьТекст(); + Исключение + // Когда текст некому извлечь исключение не требуется. Это нормальный случай. + ИзвлеченныйТекст = ""; + Отказ = Истина; + КонецПопытки; + + Если ПустаяСтрока(ИзвлеченныйТекст) Тогда + + РасширениеИмениФайла = + ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла); + + РасширениеФайлаВСписке = РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( + ОбщиеНастройки.СписокРасширенийФайловOpenDocument, РасширениеИмениФайла); + + Если РасширениеФайлаВСписке Тогда + ИзвлеченныйТекст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстOpenDocument(ИмяФайла, Отказ); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если Не Отказ Тогда Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; Результат.ТекстХранилище = Новый ХранилищеЗначения(ИзвлеченныйТекст, Новый СжатиеДанных(9)); КонецЕсли; + Возврат Результат; КонецФункции @@ -8307,7 +9181,7 @@ Попытка УдалитьФайлы(ИмяВременногоФайла); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -8315,4 +9189,1051 @@ КонецФункции +Процедура ИзвлечьТекстИзФайла(ФайлБезТекста, ФайлЗаблокирован, ИмяФайлаСДвоичнымиДанными) + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлБезТекста.Ссылка)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлБезТекста.Ссылка); + Владелец = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ФайлБезТекста.Ссылка, "ВладелецФайла"); + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Владелец)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Владелец); + + НачатьТранзакцию(); + Попытка + БлокировкаДанных.Заблокировать(); + ЗаблокироватьДанныеДляРедактирования(ФайлБезТекста.Ссылка, ИмяФайлаСДвоичнымиДанными); + ФайлЗаблокирован = Истина; + + ФайлОбъект = ФайлБезТекста.Ссылка.ПолучитьОбъект(); + Если ФайлОбъект <> Неопределено Тогда + + ИмяСРасширениемФайла = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; + Если ЭтоЭлементРаботаСФайлами(ФайлОбъект.Ссылка) Тогда + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ФайлОбъект.Ссылка)); + ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъекта); + Если ВозможностьХранитьВерсии И ЗначениеЗаполнено(ФайлОбъект.ТекущаяВерсия.Ссылка) Тогда + ИмяФайлаСДвоичнымиДанными = ИмяФайлаСДвоичнымиДанными(ФайлОбъект.ТекущаяВерсия.Ссылка); + Иначе + ИмяФайлаСДвоичнымиДанными = ИмяФайлаСДвоичнымиДанными(ФайлОбъект.Ссылка); + КонецЕсли; + КонецЕсли; + + УдалятьВременныйФайл = ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе + И Не ПустаяСтрока(ИмяФайлаСДвоичнымиДанными); + + РезультатИзвлеченияТекста = ИзвлечьТекстИзФайлаНаДиске(ИмяФайлаСДвоичнымиДанными, ФайлБезТекста.Кодировка); + ФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + ФайлОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + + ПриЗаписиИзвлеченногоТекста(ФайлОбъект, ФайлЗаблокирован); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиПодписокНаСобытия +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события. + +// Обработчик подписки "при записи" версии файла. +// +Процедура ВерсииФайловПриЗаписи(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + ЗаписатьДанныеФайлаВРегистрПриОбмене(Источник); + Возврат; + КонецЕсли; + + Если Источник.ДополнительныеСвойства.Свойство("ПереименованиеФайла") Тогда + Возврат; + КонецЕсли; + + Если Источник.ДополнительныеСвойства.Свойство("КонвертацияФайлов") Тогда + Возврат; + КонецЕсли; + + // Копируем реквизиты из версии в файл. + ТекущаяВерсия = Источник; + Если Не ТекущаяВерсия.Ссылка.Пустая() Тогда + + ФайлСсылка = Источник.Владелец; + + РеквизитыФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, + "ИндексКартинки, Размер, ДатаСоздания, Изменил, Расширение, Том, ПутьКФайлу, ДатаМодификацииУниверсальная"); + + Если РеквизитыФайла.Размер <> ТекущаяВерсия.Размер + ИЛИ РеквизитыФайла.ДатаСоздания <> ТекущаяВерсия.ДатаСоздания + ИЛИ РеквизитыФайла.Расширение <> ТекущаяВерсия.Расширение + ИЛИ РеквизитыФайла.Том <> ТекущаяВерсия.Том + ИЛИ РеквизитыФайла.ПутьКФайлу <> ТекущаяВерсия.ПутьКФайлу + ИЛИ РеквизитыФайла.ИндексКартинки <> ТекущаяВерсия.ИндексКартинки + ИЛИ РеквизитыФайла.ДатаМодификацииУниверсальная <> ТекущаяВерсия.ДатаМодификацииФайла Тогда + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка); + БлокировкаДанных.Заблокировать(); + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + // Сменим индекс картинки, возможно, появилась версия или сменился индекс картинки у версии. + ФайлОбъект.ИндексКартинки = ТекущаяВерсия.ИндексКартинки; + + // Копируем реквизиты для ускорения работы ограничения на уровне записей. + ФайлОбъект.Размер = ТекущаяВерсия.Размер; + ФайлОбъект.ДатаСоздания = ТекущаяВерсия.ДатаСоздания; + ФайлОбъект.Изменил = ТекущаяВерсия.Автор; + ФайлОбъект.Расширение = ТекущаяВерсия.Расширение; + ФайлОбъект.Том = ТекущаяВерсия.Том; + ФайлОбъект.ПутьКФайлу = ТекущаяВерсия.ПутьКФайлу; + ФайлОбъект.ТипХраненияФайла = ТекущаяВерсия.ТипХраненияФайла; + ФайлОбъект.ДатаМодификацииУниверсальная = ТекущаяВерсия.ДатаМодификацииУниверсальная; + + Если Источник.ДополнительныеСвойства.Свойство("ЗаписьПодписанногоОбъекта") Тогда + ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", + Источник.ДополнительныеСвойства.ЗаписьПодписанногоОбъекта); + КонецЕсли; + + ФайлОбъект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + + КонецЕсли; + + ОбновитьСостояниеОчередиИзвлеченияТекста(Источник.Ссылка, Источник.СтатусИзвлеченияТекста); + +КонецПроцедуры + +// Обработчик подписки на событие "Перед удалением" присоединенного файла. +Процедура ПередУдалениемПрисоединенногоФайлаСервер(Знач Ссылка, + Знач ВладелецФайлов, + Знач Том, + Знач ТипХраненияФайла, + Знач ПутьКФайлу) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ВладелецФайлов <> Неопределено И Не ЕстьФайлыУВладельца(ВладелецФайлов, Ссылка) Тогда + + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.РегистрыСведений.НаличиеФайлов.ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("ОбъектСФайлами", ВладелецФайлов); + БлокировкаДанных.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.НаличиеФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбъектСФайлами = ВладелецФайлов; + МенеджерЗаписи.Прочитать(); + Если МенеджерЗаписи.Выбран() Тогда + МенеджерЗаписи.ЕстьФайлы = Ложь; + МенеджерЗаписи.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + КонецЕсли; + + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И НЕ Том.Пустая() Тогда + ПолныйПуть = ПолныйПутьТома(Том) + ПутьКФайлу; + УдалитьФайлВТоме(ПолныйПуть); + КонецЕсли; + +КонецПроцедуры + +// Проверяет право текущего пользователя +// при использовании ограничения для папки или файла. +// +// Параметры: +// Право - Имя права. +// ВладелецПрав - СправочникСсылка.ПапкиФайлов, СправочникСсылка.Файлы, +// <ссылка на владельца>. +// +Функция ЕстьПраво(Право, ВладелецПрав) Экспорт + + Если Не ЭтоПапкаФайлов(ВладелецПрав) Тогда + Возврат Истина; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + + Если НЕ МодульУправлениеДоступом.ЕстьПраво(Право, ВладелецПрав) Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Обработчик подписки "Обработка проверки заполнения" присоединенного файла. +// +Процедура ОбработкаПроверкиЗаполненияПрисоединенногоФайла(Источник, Отказ) Экспорт + + Если Источник.ДополнительныеСвойства.Свойство("ОтложеннаяЗапись") + И РаботаСФайлами.ДвоичныеДанныеФайла(Источник.Ссылка, Ложь) = Неопределено Тогда + + Отказ = Истина; + + КонецЕсли; + +КонецПроцедуры + +Функция ЕстьФайлыУВладельца(Знач ВладелецФайлов, Знач ФайлИсключение = Неопределено) + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Параметры.Вставить("ВладелецФайлов", ВладелецФайлов); + + ТекстЗапроса = + "ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайлов"; + + Если ФайлИсключение <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + " + | И ПрисоединенныеФайлы.Ссылка <> &Ссылка"; + + Запрос.Параметры.Вставить("Ссылка", ФайлИсключение); + КонецЕсли; + + ИменаСправочников = ИменаСправочниковХраненияФайлов(ВладелецФайлов); + + Для каждого КлючИЗначение Из ИменаСправочников Цикл + Запрос.Текст = СтрЗаменить( + ТекстЗапроса, "&ИмяСправочника", "Справочник." + КлючИЗначение.Ключ); + + Если НЕ Запрос.Выполнить().Пустой() Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы + +// Начальное заполнение подсистемы РаботаСФайлами. +Процедура НачальноеЗаполнение() Экспорт + + ПапкаШаблонов = Справочники.ПапкиФайлов.Шаблоны.ПолучитьОбъект(); + ПапкаШаблонов.Наименование = НСтр("ru = 'Шаблоны файлов'"); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПапкаШаблонов); + +КонецПроцедуры + +// В справочнике ВерсииФайлов из данных в Код(Строка) заполняет НомерВерсии(Число). +Процедура ЗаполнитьНомерВерсииИзКодаСправочника() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка, + | ВерсииФайлов.ПометкаУдаления, + | ВерсииФайлов.Код, + | ВерсииФайлов.НомерВерсии, + | ВерсииФайлов.Владелец.ПометкаУдаления КАК ВладелецПометкаУдаления, + | ВерсииФайлов.Владелец.ТекущаяВерсия + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + Если Выборка.НомерВерсии = 0 Тогда + + ОписаниеТипов = Новый ОписаниеТипов("Число"); + КодЧисло = ОписаниеТипов.ПривестиЗначение(Выборка.Код); + Если КодЧисло <> 0 Тогда + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.НомерВерсии = КодЧисло; + + // Коррекция ситуации, допустимой ранее, но недопустимой сейчас - активная версия помечена на удаление, а владелец + // - нет. + Если Выборка.ПометкаУдаления = Истина И Выборка.ВладелецПометкаУдаления = Ложь И Выборка.ТекущаяВерсия = Выборка.Ссылка Тогда + Объект.ПометкаУдаления = Ложь; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЕсли + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// В справочнике ВерсииФайлов заполняет ТипХраненияФайла значением ВБазе. +Процедура ЗаполнитьТипХраненияФайлаВБазе() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + Если Объект.ТипХраненияФайла.Пустая() Тогда + Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// В справочнике ВерсииФайлов и Файлы ИндексКартинки увеличивает в 2 раза. +Процедура СменитьИндексПиктограммы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.ОбменДанными.Загрузка = Истина; + Объект.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Объект.Расширение); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.ОбменДанными.Загрузка = Истина; + Объект.ИндексКартинки = Объект.ТекущаяВерсия.ИндексКартинки; + Объект.Записать(); + КонецЦикла; + +КонецПроцедуры + +// Вызывается при обновлении на 1.0.6.3 - заполняет пути ТомаХраненияФайлов. +Процедура ЗаполнитьПутиТома() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТомаХраненияФайлов.Ссылка + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.ПолныйПутьLinux = Объект.ПолныйПутьWindows; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЦикла; + +КонецПроцедуры + +// В справочнике Файлы перезаписывает все элементы. +Процедура ПерезаписатьВсеФайлы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.Записать(); + КонецЦикла; + +КонецПроцедуры + +// В справочнике ВерсииФайлов заполняет ДатаМодификацииФайла - из даты создания. +Процедура ЗаполнитьДатуМодификацииФайла() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + Если Объект.ДатаМодификацииФайла = Дата("00010101000000") Тогда + Объект.ДатаМодификацииФайла = Объект.ДатаСоздания; + Объект.Записать(); + КонецЕсли; + + КонецЦикла; + + ПерезаписатьВсеФайлы(); // Чтобы перенеслись значения реквизита ДатаМодификацииФайла из версии в файл. + +КонецПроцедуры + +// Удаляет запись в регистре ХранимыеФайлыВерсий. +// +// Параметры: +// Файл - ссылка на файл. +// +Процедура УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(Файл) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Файл.Установить(Файл); + НаборЗаписей.Записать(); + +КонецПроцедуры + +// Переносит бинарный файл из ФайлХранилище справочника ВерсииФайлов в регистр сведений ХранимыеФайлыВерсий. +Процедура ПереместитьФайлыИзИнформационнойБазыВРегистрСведений() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.ТипХраненияФайла = &ТипХраненияФайла"; + + Запрос.УстановитьПараметр("ТипХраненияФайла", Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + ДанныеВХранилище = Объект.ФайлХранилище.Получить(); + Если ТипЗнч(ДанныеВХранилище) = Тип("ДвоичныеДанные") Тогда + ЗаписатьФайлВИнформационнуюБазу(Выборка.Ссылка, Объект.ФайлХранилище); + Объект.ФайлХранилище = Новый ХранилищеЗначения(""); // очищаем значение + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Заполняет поле ДатаЗаема текущей датой. +Процедура ЗаполнитьДатуЗаема() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ДатаЗаема = ТекущаяДатаСеанса(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Если ЗначениеЗаполнено(Выборка.Ссылка.Редактирует) Тогда + Объект = Выборка.Ссылка.ПолучитьОбъект(); + // Чтобы прошла запись ранее подписанного объекта. + Объект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); + Объект.ДатаЗаема = ДатаЗаема; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Переименовывает старые права в новые. +Процедура ЗаменитьПраваВНастройкахПравПапокФайлов() Экспорт + + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + + ТаблицаЗамены = МодульУправлениеДоступом.ТаблицаЗаменыПравВНастройкахПравОбъектов(); + + Строка = ТаблицаЗамены.Добавить(); + Строка.ТипВладельцев = Справочники.ПапкиФайлов.ПустаяСсылка(); + Строка.СтароеИмя = "ЧтениеПапокИФайлов"; + Строка.НовоеИмя = "Чтение"; + + Строка = ТаблицаЗамены.Добавить(); + Строка.ТипВладельцев = Справочники.ПапкиФайлов.ПустаяСсылка(); + Строка.СтароеИмя = "ДобавлениеПапокИФайлов"; + Строка.НовоеИмя = "ДобавлениеФайлов"; + + Строка = ТаблицаЗамены.Добавить(); + Строка.ТипВладельцев = Справочники.ПапкиФайлов.ПустаяСсылка(); + Строка.СтароеИмя = "ИзменениеПапокИФайлов"; + Строка.НовоеИмя = "ИзменениеФайлов"; + + Строка = ТаблицаЗамены.Добавить(); + Строка.ТипВладельцев = Справочники.ПапкиФайлов.ПустаяСсылка(); + Строка.СтароеИмя = "ИзменениеПапокИФайлов"; + Строка.НовоеИмя = "ИзменениеПапок"; + + Строка = ТаблицаЗамены.Добавить(); + Строка.ТипВладельцев = Справочники.ПапкиФайлов.ПустаяСсылка(); + Строка.СтароеИмя = "ПометкаУдаленияПапокИФайлов"; + Строка.НовоеИмя = "ПометкаУдаленияФайлов"; + + МодульУправлениеДоступом.ЗаменитьПраваВНастройкахПравОбъектов(ТаблицаЗамены); + +КонецПроцедуры + +// Получает количество версий с неизвлеченным текстом. +Процедура ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(ДополнительныеПараметры, АдресВоВременномХранилище) Экспорт + + КоличествоФайлов = 0; + + ТипыФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); + + Для Каждого Тип Из ТипыФайлов Цикл + + МетаданныеСправочникаФайлов = Метаданные.НайтиПоТипу(Тип); + + Запрос = Новый Запрос; + + ТекстЗапроса = + "ВЫБРАТЬ + | ЕСТЬNULL(КОЛИЧЕСТВО(Файлы.Ссылка), 0) КАК КоличествоФайлов + |ИЗ + | &ИмяСправочника КАК Файлы + |ГДЕ + | Файлы.СтатусИзвлеченияТекста В (ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + Если Тип = Тип("СправочникСсылка.ВерсииФайлов") Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ Файлы.Владелец.Зашифрован"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + | И НЕ Файлы.Зашифрован"; + КонецЕсли; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + МетаданныеСправочникаФайлов.Имя); + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + КоличествоФайлов = КоличествоФайлов + Выборка.КоличествоФайлов; + КонецЕсли + + КонецЦикла; + + ПоместитьВоВременноеХранилище(КоличествоФайлов, АдресВоВременномХранилище); + +КонецПроцедуры + +Процедура ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейСВерсийФайловНаФайлы(Параметры) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЭлектронныеПодписи.ПодписанныйОбъект КАК Ссылка + |ИЗ + | РегистрСведенийЭлектронныеПодписи КАК ЭлектронныеПодписи + |ГДЕ + | ТИПЗНАЧЕНИЯ(ЭлектронныеПодписи.ПодписанныйОбъект) = ТИП(Справочник.ВерсииФайлов)"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "РегистрСведенийЭлектронныеПодписи", "РегистрСведений." + "ЭлектронныеПодписи"); + + МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); + +КонецПроцедуры + +Процедура ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы(Параметры) Экспорт + + ОбработкаЗавершена = Истина; + + ВыборкаСсылок = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.ВерсииФайлов"); + + ОбъектовОбработано = 0; + ПроблемныхОбъектов = 0; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировкиПоВерсии = Блокировка.Добавить("РегистрСведений." + "ЭлектронныеПодписи"); + ЭлементБлокировкиПоФайлу = Блокировка.Добавить("РегистрСведений." + "ЭлектронныеПодписи"); + + Пока ВыборкаСсылок.Следующий() Цикл + ВерсияСсылка = ВыборкаСсылок.Ссылка; + ЭлементБлокировкиПоВерсии.УстановитьЗначение("ПодписанныйОбъект", ВерсияСсылка); + ФайлСсылка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВерсияСсылка, "Владелец"); + Если ЗначениеЗаполнено(ФайлСсылка) Тогда + ЭлементБлокировкиПоВерсии.УстановитьЗначение("ПодписанныйОбъект", ФайлСсылка); + КонецЕсли; + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + НаборЗаписейПоВерсии = РегистрыСведений["ЭлектронныеПодписи"].СоздатьНаборЗаписей(); + НаборЗаписейПоВерсии.Отбор.ПодписанныйОбъект.Установить(ВерсияСсылка); + НаборЗаписейПоВерсии.Прочитать(); + + Если НаборЗаписейПоВерсии.Количество() > 0 Тогда + Если ЗначениеЗаполнено(ФайлСсылка) Тогда + НаборЗаписейПоФайлу = РегистрыСведений["ЭлектронныеПодписи"].СоздатьНаборЗаписей(); + НаборЗаписейПоФайлу.Отбор.ПодписанныйОбъект.Установить(ФайлСсылка); + НаборЗаписейПоФайлу.Прочитать(); + Если НаборЗаписейПоФайлу.Количество() = 0 Тогда + Для Каждого Запись Из НаборЗаписейПоВерсии Цикл + НоваяЗапись = НаборЗаписейПоФайлу.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяЗапись, Запись); + НоваяЗапись.ПодписанныйОбъект = ФайлСсылка; + КонецЦикла; + НаборЗаписейПоФайлу.Записать(); + КонецЕсли; + КонецЕсли; + НаборЗаписейПоВерсии.Очистить(); + НаборЗаписейПоВерсии.Записать(); + КонецЕсли; + + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВерсияСсылка); + ОбъектовОбработано = ОбъектовОбработано + 1; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + // Если не удалось обработать какой-либо объект, требуется повторить попытку. + ОбъектовОбработано = ОбъектовОбработано - 1; + ПроблемныхОбъектов = ПроблемныхОбъектов + 1; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать версию файла ""%1"" по причине: + |%2'"), + ВерсияСсылка, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Предупреждение, Метаданные.Справочники.ВерсииФайлов, ВерсияСсылка, ТекстСообщения); + КонецПопытки; + КонецЦикла; + + Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.ВерсииФайлов") Тогда + ОбработкаЗавершена = Ложь; + КонецЕсли; + + Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы не удалось обработать некоторые версии файлов (пропущены): %1'"), + ПроблемныхОбъектов); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, + Метаданные.Справочники.ВерсииФайлов, + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедура ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы обработала очередную порцию версий файлов: %1'"), + ОбъектовОбработано)); + КонецЕсли; + + Параметры.ОбработкаЗавершена = ОбработкаЗавершена; + +КонецПроцедуры + +Функция ОбъектыПриПереносеЭлектронныхПодписейСВерсийФайловНаФайлы(Читаемые) + + Если Читаемые Тогда + Возврат "Справочник.ВерсииФайлов, " + + Метаданные.РегистрыСведений["ЭлектронныеПодписи"].ПолноеИмя(); + Иначе + Возврат Метаданные.РегистрыСведений["ЭлектронныеПодписи"].ПолноеИмя(); + КонецЕсли; + +КонецФункции + +// Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, +// для которых необходимо обновить записи в реестре. +// +Процедура ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейИСертификатовШифрования(Параметры) Экспорт + + ТекстЗапросаДвеТабличныеЧасти = + "ВЫБРАТЬ + | Файлы.Ссылка КАК Ссылка + |ИЗ + | ТаблицаОбъектов КАК Файлы + |ГДЕ + | (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | ТабличнаяЧастьУдалитьСертификатыШифрования КАК УдалитьСертификатыШифрования + | ГДЕ + | УдалитьСертификатыШифрования.Ссылка = Файлы.Ссылка) + | ИЛИ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | ТабличнаяЧастьУдалитьЭлектронныеПодписи КАК УдалитьЭлектронныеПодписи + | ГДЕ + | УдалитьЭлектронныеПодписи.Ссылка = Файлы.Ссылка))"; + + ТекстЗапросаТЧУдалитьСертификатыШифрования = + "ВЫБРАТЬ + | Файлы.Ссылка КАК Ссылка + |ИЗ + | ТаблицаОбъектов КАК Файлы + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | ТабличнаяЧастьУдалитьСертификатыШифрования КАК УдалитьСертификатыШифрования + | ГДЕ + | УдалитьСертификатыШифрования.Ссылка = Файлы.Ссылка)"; + + ТекстЗапросаТЧУдалитьЭлектронныеПодписи = + "ВЫБРАТЬ + | Файлы.Ссылка КАК Ссылка + |ИЗ + | ТаблицаОбъектов КАК Файлы + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | ТабличнаяЧастьУдалитьЭлектронныеПодписи КАК УдалитьЭлектронныеПодписи + | ГДЕ + | УдалитьЭлектронныеПодписи.Ссылка = Файлы.Ссылка)"; + + Запрос = Новый Запрос; + ПолныеИменаСправочников = ПолныеИменаСправочниковПрисоединенныхФайлов(); + + Для Каждого ПолноеИмя Из ПолныеИменаСправочников Цикл + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); + + ЕстьТЧУдалитьСертификатыШифрования = + ОбъектМетаданных.ТабличныеЧасти.Найти("УдалитьСертификатыШифрования") <> Неопределено; + + ЕстьТЧУдалитьЭлектронныеПодписи = + ОбъектМетаданных.ТабличныеЧасти.Найти("УдалитьЭлектронныеПодписи") <> Неопределено; + + Если ЕстьТЧУдалитьСертификатыШифрования И ЕстьТЧУдалитьЭлектронныеПодписи Тогда + ТекущийТекстЗапроса = ТекстЗапросаДвеТабличныеЧасти; + + ИначеЕсли ЕстьТЧУдалитьСертификатыШифрования Тогда + ТекущийТекстЗапроса = ТекстЗапросаТЧУдалитьСертификатыШифрования; + + ИначеЕсли ЕстьТЧУдалитьЭлектронныеПодписи Тогда + ТекущийТекстЗапроса = ТекстЗапросаТЧУдалитьЭлектронныеПодписи; + Иначе + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(Запрос.Текст) Тогда + Запрос.Текст = Запрос.Текст + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |"; + КонецЕсли; + + ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "ТаблицаОбъектов", ПолноеИмя); + + ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, + "ТабличнаяЧастьУдалитьСертификатыШифрования", ПолноеИмя + ".УдалитьСертификатыШифрования"); + + ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, + "ТабличнаяЧастьУдалитьЭлектронныеПодписи", ПолноеИмя + ".УдалитьЭлектронныеПодписи"); + + Запрос.Текст = Запрос.Текст + ТекущийТекстЗапроса; + КонецЦикла; + + МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); + +КонецПроцедуры + +Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры) Экспорт + + ОбработкаЗавершена = Истина; + + ПолныеИменаСправочников = ПолныеИменаСправочниковПрисоединенныхФайлов(); + + Для Каждого ПолноеИмяСправочника Из ПолныеИменаСправочников Цикл + ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведенийДляТаблицы(Параметры, + ПолноеИмяСправочника, ОбработкаЗавершена); + КонецЦикла; + + Параметры.ОбработкаЗавершена = ОбработкаЗавершена; + +КонецПроцедуры + +// Позволяет перенести элементы табличных частей УдалитьЭлектронныеПодписи и УдалитьСертификатыШифрования +// в регистры сведений ЭлектронныеПодписи и СертификатыШифрования. +// +// Параметры: +// ПараметрыОбновления - Структура - структура параметров отложенного обработчика обновления. +// +// ПолноеИмяОбъектаМетаданных - Строка - полное имя объекта метаданных, из которого переносятся данные табличных частей +// УдалитьЭлектронныеПодписи и УдалитьСертификатыШифрования. +// ОбработкаЗавершена - Булево - Истина, если обработаны все данные при обновлении ИБ. +// +Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведенийДляТаблицы(ПараметрыОбновления, ПолноеИмяОбъектаМетаданных, ОбработкаЗавершена) + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + + Если ОбъектМетаданных = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Не указан объект для обработки электронных подписей и сертификатов шифрования.'"); + КонецЕсли; + + ЕстьТабличнаяЧастьЭП = ОбъектМетаданных.ТабличныеЧасти.Найти("УдалитьЭлектронныеПодписи") <> Неопределено; + ЕстьТабличнаяЧастьСШ = ОбъектМетаданных.ТабличныеЧасти.Найти("УдалитьСертификатыШифрования") <> Неопределено; + + ВыборкаСсылок = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(ПараметрыОбновления.Очередь, ПолноеИмяОбъектаМетаданных); + + ОбъектовОбработано = 0; + ПроблемныхОбъектов = 0; + + МассивСсылок = Новый Массив; + + НачатьТранзакцию(); + Попытка + Пока ВыборкаСсылок.Следующий() Цикл + МассивСсылок.Добавить(ВыборкаСсылок.Ссылка); + КонецЦикла; + + Если ЕстьТабличнаяЧастьЭП Тогда + ПеренестиДанныеЭлектроннойПодписиВРегистрСведений(МассивСсылок, + ПолноеИмяОбъектаМетаданных, ОбъектМетаданных); + КонецЕсли; + + Если ЕстьТабличнаяЧастьСШ Тогда + ПеренестиДанныеСертификатовВРегистрСведений(МассивСсылок, ПолноеИмяОбъектаМетаданных); + КонецЕсли; + + Для Каждого ОбъектСЭП Из МассивСсылок Цикл + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ОбъектСЭП); + КонецЦикла; + ОбъектовОбработано = МассивСсылок.Количество(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + // Если не удалось обработать какой-либо объект, требуется повторить попытку. + ПроблемныхОбъектов = ПроблемныхОбъектов + МассивСсылок.Количество(); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать объект: %1 по причине: + |%2'"), + ОбъектМетаданных, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Предупреждение, ОбъектМетаданных, , ТекстСообщения); + КонецПопытки; + + Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(ПараметрыОбновления.Очередь, ПолноеИмяОбъектаМетаданных) Тогда + ОбработкаЗавершена = Ложь; + КонецЕсли; + + Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений не удалось обработать некоторые объекты (пропущены): %1'"), + ПроблемныхОбъектов); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, + ОбъектМетаданных, + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений обработала очередную порцию объектов: %1'"), + ОбъектовОбработано)); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведенийДляТаблицы. +Процедура ПеренестиДанныеЭлектроннойПодписиВРегистрСведений(МассивОбъектов, ПолноеИмяОбъектаМетаданных, ОбъектМетаданных) + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТЧЭлектронныеПодписи.Ссылка КАК ПодписанныйОбъект, + | ТЧЭлектронныеПодписи.ДатаПодписи, + | ТЧЭлектронныеПодписи.ИмяФайлаПодписи, + | ТЧЭлектронныеПодписи.Комментарий, + | ТЧЭлектронныеПодписи.КомуВыданСертификат, + | ТЧЭлектронныеПодписи.Отпечаток, + | ТЧЭлектронныеПодписи.Подпись, + | ТЧЭлектронныеПодписи.УстановившийПодпись, + | ТЧЭлектронныеПодписи.НомерСтроки КАК ПорядковыйНомер, + | ТЧЭлектронныеПодписи.Сертификат, + | ТЧЭлектронныеПодписи.ПодписьВерна КАК ПодписьВерна, + | ТЧЭлектронныеПодписи.ДатаПроверкиПодписи КАК ДатаПроверкиПодписи + |ИЗ + | " + ПолноеИмяОбъектаМетаданных + ".УдалитьЭлектронныеПодписи КАК ТЧЭлектронныеПодписи + |ГДЕ + | ТЧЭлектронныеПодписи.Ссылка В(&МассивОбъектов) + |ИТОГИ + | ПО ПодписанныйОбъект"; + + Если ОбъектМетаданных = Метаданные.Справочники.ВерсииФайлов Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "ТЧЭлектронныеПодписи.Ссылка КАК ПодписанныйОбъект", + "ТЧЭлектронныеПодписи.Ссылка.Владелец КАК ПодписанныйОбъект"); + КонецЕсли; + + РеквизитыТЧ = ОбъектМетаданных.ТабличныеЧасти.УдалитьЭлектронныеПодписи.Реквизиты; + + Если РеквизитыТЧ.Найти("ПодписьВерна") = Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТЧЭлектронныеПодписи.ПодписьВерна", "ЛОЖЬ"); + КонецЕсли; + + Если РеквизитыТЧ.Найти("ДатаПроверкиПодписи") = Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТЧЭлектронныеПодписи.ДатаПроверкиПодписи", "Неопределено"); + КонецЕсли; + + Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); + Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + Для Каждого Строка Из Выгрузка.Строки Цикл + Если Не ЗначениеЗаполнено(Строка.ПодписанныйОбъект) Тогда + Продолжить; + КонецЕсли; + НаборЗаписей = РегистрыСведений["ЭлектронныеПодписи"].СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ПодписанныйОбъект.Установить(Строка.ПодписанныйОбъект); + Для Каждого Подстрока Из Строка.Строки Цикл + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Подстрока); + КонецЦикла; + // Используется параллельное обновление с нестандартной отметкой выполнения обработанных данных. + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + НаборЗаписей.Записать(); + КонецЦикла; + +КонецПроцедуры + +// Для процедуры ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведенийДляТаблицы. +Процедура ПеренестиДанныеСертификатовВРегистрСведений(МассивОбъектов, ПолноеИмяОбъектаМетаданных) + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТЧСертификатыШифрования.Ссылка КАК ЗашифрованныйОбъект, + | ТЧСертификатыШифрования.Отпечаток, + | ТЧСертификатыШифрования.Сертификат, + | ТЧСертификатыШифрования.НомерСтроки КАК ПорядковыйНомер, + | ТЧСертификатыШифрования.Представление + |ИЗ + | " + ПолноеИмяОбъектаМетаданных + ".УдалитьСертификатыШифрования КАК ТЧСертификатыШифрования + |ГДЕ + | ТЧСертификатыШифрования.Ссылка В(&МассивОбъектов) + |ИТОГИ + | ПО ЗашифрованныйОбъект"; + + Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); + + Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + Для Каждого Строка Из Выгрузка.Строки Цикл + НаборЗаписей = РегистрыСведений["СертификатыШифрования"].СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ЗашифрованныйОбъект.Установить(Строка.ЗашифрованныйОбъект); + Для Каждого Подстрока Из Строка.Строки Цикл + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Подстрока); + КонецЦикла; + // Используется параллельное обновление с нестандартной отметкой выполнения обработанных данных. + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + НаборЗаписей.Записать(); + КонецЦикла; + +КонецПроцедуры + +Функция ПолныеИменаСправочниковПрисоединенныхФайлов() + + Массив = Новый Массив; + + Для Каждого ТипПрисоединенногоФайла Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл + ПолноеИмя = Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла).ПолноеИмя(); + Если СтрЗаканчиваетсяНа(ВРег(ПолноеИмя), ВРег("ВерсииПрисоединенныхФайлов")) Тогда + Продолжить; + КонецЕсли; + Массив.Добавить(Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла).ПолноеИмя()); + КонецЦикла; + + Если Массив.Найти("Справочник.Файлы") = Неопределено Тогда + Массив.Добавить("Справочник.Файлы"); + КонецЕсли; + + Если Массив.Найти("Справочник.ВерсииФайлов") = Неопределено Тогда + Массив.Добавить("Справочник.ВерсииФайлов"); + КонецЕсли; + + Возврат Массив; + +КонецФункции + +Функция ИзменяемыеОбъектыПриПереносеЭлектронныхПодписейИСертификатовШифрования() + + Возврат Метаданные.РегистрыСведений["ЭлектронныеПодписи"].ПолноеИмя() + ", " + + Метаданные.РегистрыСведений["СертификатыШифрования"].ПолноеИмя(); + +КонецФункции + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index 46eb4c220..4dcee816e 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // Подсистема "Работа с файлами". @@ -12,23 +19,6 @@ КонецПроцедуры -// Устарела. Следует использовать РаботаСФайлами.ОпределитьФормуПрисоединенногоФайла. -Процедура ОпределитьФормуПрисоединенногоФайла(Источник, - ВидФормы, - Параметры, - ВыбраннаяФорма, - ДополнительнаяИнформация, - СтандартнаяОбработка) Экспорт - - РаботаСФайлами.ОпределитьФормуПрисоединенногоФайла(Источник, - ВидФормы, - Параметры, - ВыбраннаяФорма, - ДополнительнаяИнформация, - СтандартнаяОбработка); - -КонецПроцедуры - // См. функцию ДобавитьПрисоединенныйФайл в модуле РаботаСФайлами. Функция ДобавитьФайл(ПараметрыФайла, Знач АдресФайлаВоВременномХранилище, @@ -43,129 +33,6 @@ КонецФункции -// Процедура добавляет настройки специфичные для подсистемы Работа с файлами. -// -// Параметры: -// ОбщиеНастройки - Структура - настройки общие для всех пользователей. -// ПерсональныеНастройки - Структура - настройки различные для разных пользователей. -// -Процедура ДобавитьНастройкиРаботыСФайлами(ОбщиеНастройки, ПерсональныеНастройки) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПерсональныеНастройки.Вставить("ДействиеПоДвойномуЩелчкуМыши", ДействиеПоДвойномуЩелчкуМыши()); - ПерсональныеНастройки.Вставить("СпособСравненияВерсийФайлов", СпособСравненияВерсийФайлов()); - - ПерсональныеНастройки.Вставить("СпрашиватьРежимРедактированияПриОткрытииФайла", - СпрашиватьРежимРедактированияПриОткрытииФайла()); - - ПерсональныеНастройки.Вставить("ЭтоПолноправныйПользователь", - Пользователи.ЭтоПолноправныйПользователь(,, Ложь)); - - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы"); - - Если ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Неопределено Тогда - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Истина; - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "НастройкиПрограммы", - "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); - КонецЕсли; - - ПерсональныеНастройки.Вставить("ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); - - ПерсональныеНастройки.Вставить("ПоказыватьКолонкуРазмер", ПолучитьПоказыватьКолонкуРазмер()); - -КонецПроцедуры - -// Вернет размер файлов на томе - в байтах. -Функция ПодсчитатьРазмерФайловНаТоме(СсылкаТома) Экспорт - - Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат 0; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(Версии.Размер), 0) КАК РазмерФайлов - |ИЗ - | Справочник.ВерсииФайлов КАК Версии - |ГДЕ - | Версии.Том = &Том"; - - Запрос.Параметры.Вставить("Том", СсылкаТома); - - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - РазмерФайловВТоме = Число(Выборка.РазмерФайлов); - КонецЕсли; - - ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); - ВсеИменаСправочников = Новый Соответствие; - - Запрос = Новый Запрос; - Запрос.Параметры.Вставить("Том", СсылкаТома); - - Для Каждого Тип Из ТипыВладельцев Цикл - - Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - Продолжить; - КонецЕсли; - - ИменаСправочников = РаботаСФайламиСлужебный.ИменаСправочниковХраненияФайлов(Тип, Истина); - - Для каждого КлючИЗначение Из ИменаСправочников Цикл - Если ВсеИменаСправочников[КлючИЗначение.Ключ] <> Неопределено Тогда - Продолжить; - КонецЕсли; - ИмяСправочникаПрисоединенныхФайлов = КлючИЗначение.Ключ; - ВсеИменаСправочников.Вставить(КлючИЗначение.Ключ, Истина); - - Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(ПрисоединенныеФайлы.Размер), 0) КАК РазмерФайлов - |ИЗ - | &ИмяСправочника КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.Том = &Том"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяСправочника", - "Справочник." + ИмяСправочникаПрисоединенныхФайлов); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - РазмерФайловВТоме = РазмерФайловВТоме + Выборка.РазмерФайлов; - КонецЕсли - КонецЦикла; - КонецЦикла; - - Возврат РазмерФайловВТоме; - -КонецФункции - -// Читает кодировку версии файла. -// -// Параметры: -// ВерсияСсылка - ссылка на версию файла. -// -// Возвращаемое значение: -// Строка кодировки -Функция ПолучитьКодировкуВерсииФайла(ВерсияСсылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписи = РегистрыСведений.КодировкиФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Файл = ВерсияСсылка; - МенеджерЗаписи.Прочитать(); - - Возврат МенеджерЗаписи.Кодировка; - -КонецФункции - // Получает данные файла и его двоичные данные. // // Параметры: @@ -202,18 +69,18 @@ ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); Исключение // Запись в журнал регистрации. - СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( + СообщениеОбОшибке = РаботаСФайламиСлужебный.СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( ИнформацияОбОшибке(), ВерсияСсылка.Владелец); ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Открытие файла'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.Файлы, ВерсияСсылка.Владелец, СообщениеОбОшибке); - ВызватьИсключение РаботаСФайламиСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( + ВызватьИсключение РаботаСФайламиСлужебный.ОшибкаФайлНеНайденВХранилищеФайлов( ВерсияСсылка.ПолноеНаименование + "." + ВерсияСсылка.Расширение); КонецПопытки; КонецЕсли; @@ -237,29 +104,6 @@ Возврат СтруктураВозврата; КонецФункции -// Получает все подчиненные файлы. -// Параметры: -// ВладелецФайла - ЛюбаяСсылка - владелец файла. -// -// Возвращаемое значение: -// Массив - массив файлов -Функция ПолучитьВсеПодчиненныеФайлы(ВладелецФайла) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Файлы.Ссылка КАК Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла"; - - Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - -КонецФункции - // Создать папку файлов. // // Параметры: @@ -267,26 +111,40 @@ // Родитель - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - родительская папка. // Пользователь - СправочникСсылка.Пользователи - ответственный за папку. // ГруппаФайлов - ОпределяемыйТип.ПрисоединенныйФайл - группа (для иерархических справочников файлов). +// РабочийКаталог - Строка - Рабочий каталог папки в файловой системе. // // Возвращаемое значение: // СправочникСсылка.ПапкиФайлов. // -Функция СоздатьПапкуФайлов(Имя, Родитель, Пользователь = Неопределено, ГруппаФайлов = Неопределено) Экспорт +Функция СоздатьПапкуФайлов(Имя, Родитель, Пользователь = Неопределено, ГруппаФайлов = Неопределено, РабочийКаталог = Неопределено) Экспорт Если ЭтоСправочникФайлы(Родитель) Тогда Папка = Справочники.ПапкиФайлов.СоздатьЭлемент(); - Папка.Ответственный = ?(Пользователь <> Неопределено, Пользователь, Пользователи.ТекущийПользователь()); + Папка.Ответственный = ?(Пользователь <> Неопределено, Пользователь, Пользователи.АвторизованныйПользователь()); Папка.Родитель = Родитель; Иначе + Папка = Справочники[РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(Родитель)].СоздатьГруппу(); - Папка.ВладелецФайла = Родитель; - Папка.Автор = ?(Пользователь <> Неопределено, Пользователь, Пользователи.ТекущийПользователь()); - Папка.Родитель = ГруппаФайлов; + Если ТипЗнч(Папка.Ссылка) = ТипЗнч(Родитель) Тогда + Папка.Родитель = ?(ГруппаФайлов = Неопределено, Родитель, ГруппаФайлов); + Папка.ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Родитель, "ВладелецФайла"); + Иначе + Папка.Родитель = ГруппаФайлов; + Папка.ВладелецФайла = Родитель; + КонецЕсли; + + Папка.Автор = ?(Пользователь <> Неопределено, Пользователь, Пользователи.АвторизованныйПользователь()); + КонецЕсли; Папка.Наименование = Имя; Папка.ДатаСоздания = ТекущаяДатаСеанса(); Папка.Заполнить(Неопределено); Папка.Записать(); + + Если ЗначениеЗаполнено(РабочийКаталог) Тогда + СохранитьРабочийКаталогПапки(Папка.Ссылка, РабочийКаталог); + КонецЕсли; + Возврат Папка.Ссылка; КонецФункции @@ -446,7 +304,7 @@ // Возвращаемое значение: // Структура - структура с данными файла. // -Функция ДанныеФайла(ФайлСсылка, ВерсияСсылка = Неопределено, ИдентификаторФормы = Неопределено) Экспорт +Функция ДанныеФайла(ФайлСсылка, ВерсияСсылка = Неопределено, ИдентификаторФормы = Неопределено, Знач ВызыватьИсключение = Истина) Экспорт ЕстьПраваНаОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, "Ссылка", Истина); @@ -486,115 +344,42 @@ Если ВерсияСсылка = Неопределено Тогда ДанныеФайла.Вставить("СсылкаНаДвоичныеДанныеФайла", - ПоместитьВоВременноеХранилище(РаботаСФайлами.ДвоичныеДанныеФайла(ФайлСсылка), ИдентификаторФормы)); + ПоместитьВоВременноеХранилище(РаботаСФайлами.ДвоичныеДанныеФайла(ФайлСсылка, ВызыватьИсключение), ИдентификаторФормы)); ДанныеФайла.Вставить("НавигационнаяСсылка", ПолучитьНавигационнуюСсылку(ФайлСсылка)); ДанныеФайла.Вставить("АвторТекущейВерсии", ФайлСсылка.Изменил); ДанныеФайла.Вставить("Кодировка", РаботаСФайлами.КодировкаФайла(ФайлСсылка, ФайлОбъект.Расширение)); Иначе ДанныеФайла.Вставить("СсылкаНаДвоичныеДанныеФайла", - ПоместитьВоВременноеХранилище(РаботаСФайлами.ДвоичныеДанныеФайла(ВерсияСсылка), ИдентификаторФормы)); + ПоместитьВоВременноеХранилище(РаботаСФайлами.ДвоичныеДанныеФайла(ВерсияСсылка, ВызыватьИсключение), ИдентификаторФормы)); ДанныеФайла.Вставить("НавигационнаяСсылка", ПолучитьНавигационнуюСсылку(ФайлОбъект.Ссылка)); ДанныеФайла.Вставить("АвторТекущейВерсии", ВерсияСсылка.Автор); ДанныеФайла.Вставить("Кодировка", РаботаСФайлами.КодировкаФайла(ВерсияСсылка, ФайлОбъект.Расширение)); КонецЕсли; Если ДанныеФайла.Зашифрован Тогда - МассивСертификатовШифрования = СертификатыШифрования(ДанныеФайла.Ссылка); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + МассивСертификатовШифрования = МодульЭлектроннаяПодпись.СертификатыШифрования(ДанныеФайла.Ссылка); + Иначе + МассивСертификатовШифрования = Неопределено; + КонецЕсли; + ДанныеФайла.Вставить("МассивСертификатовШифрования", МассивСертификатовШифрования); + КонецЕсли; - ЗаполнитьДополнительныеДанныеФайла(ДанныеФайла, ФайлОбъект, ВерсияСсылка); + ДанныеФайла.Вставить("Служебный", Ложь); + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ФайлОбъект, "Служебный") Тогда + ДанныеФайла.Служебный = ФайлОбъект.Служебный; + КонецЕсли; + + РаботаСФайламиСлужебный.ЗаполнитьДополнительныеДанныеФайла(ДанныеФайла, ФайлОбъект, ВерсияСсылка); Возврат ДанныеФайла; КонецФункции -Процедура ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, ВерсияФайла = Неопределено) Экспорт - - СправочникПоддерживаетВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл))); - - Если СправочникПоддерживаетВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда - ТекущаяВерсияФайла = ПрисоединенныйФайл.ТекущаяВерсия; - Иначе - ТекущаяВерсияФайла = ПрисоединенныйФайл.Ссылка; - КонецЕсли; - - Результат.Вставить("ТекущаяВерсия", ТекущаяВерсияФайла); - - Если ВерсияФайла <> Неопределено Тогда - Результат.Вставить("Версия", ВерсияФайла); - ИначеЕсли СправочникПоддерживаетВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда - Результат.Вставить("Версия", ПрисоединенныйФайл.ТекущаяВерсия); - Иначе - Результат.Вставить("Версия", ПрисоединенныйФайл.Ссылка); - КонецЕсли; - - Если ЗначениеЗаполнено(ВерсияФайла) Тогда - ВерсияОбъект = ВерсияФайла.ПолучитьОбъект(); - Результат.Вставить("Наименование", ВерсияОбъект.Наименование); - Результат.Вставить("Расширение", ВерсияОбъект.Расширение); - Результат.Вставить("Размер", ВерсияОбъект.Размер); - Результат.Вставить("НомерВерсии", ВерсияОбъект.Размер); - Результат.Вставить("ДатаМодификацииУниверсальная", ВерсияОбъект.ДатаМодификацииУниверсальная); - Результат.Вставить("Том", ВерсияОбъект.Том); - Результат.Вставить("Автор", ВерсияОбъект.Автор); - Результат.Вставить("СтатусИзвлеченияТекста", ВерсияОбъект.СтатусИзвлеченияТекста); - Результат.Вставить("ПолноеНаименованиеВерсии", СокрЛП(ВерсияОбъект.ПолноеНаименование)); - ТекущаяВерсияФайла = ВерсияФайла; - Иначе - Результат.Вставить("Наименование", ПрисоединенныйФайл.Наименование); - Результат.Вставить("Расширение", ПрисоединенныйФайл.Расширение); - Результат.Вставить("Размер", ПрисоединенныйФайл.Размер); - Результат.Вставить("НомерВерсии", 0); - Результат.Вставить("ДатаМодификацииУниверсальная", ПрисоединенныйФайл.ДатаМодификацииУниверсальная); - Результат.Вставить("Том", ПрисоединенныйФайл.Том); - Результат.Вставить("Автор", ПрисоединенныйФайл.Автор); - Результат.Вставить("СтатусИзвлеченияТекста", ПрисоединенныйФайл.СтатусИзвлеченияТекста); - Результат.Вставить("ПолноеНаименованиеВерсии", СокрЛП(ПрисоединенныйФайл.Наименование)); - ТекущаяВерсияФайла = Результат.Версия; - КонецЕсли; - - СтруктураКлюча = Новый Структура("Файл", ТекущаяВерсияФайла); - КлючЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьКлючЗаписи(СтруктураКлюча); - НавигационнаяСсылкаТекущейВерсии = ПолучитьНавигационнуюСсылку(КлючЗаписи, "ДвоичныеДанныеФайла"); - Результат.Вставить("НавигационнаяСсылкаТекущейВерсии", НавигационнаяСсылкаТекущейВерсии); - - КодировкаТекущейВерсии = ПолучитьКодировкуВерсииФайла(ТекущаяВерсияФайла); - Результат.Вставить("КодировкаТекущейВерсии", КодировкаТекущейВерсии); - ТекущийПользователь = Пользователи.АвторизованныйПользователь(); - НаЧтение = Результат.Редактирует <> ТекущийПользователь; - Результат.Вставить("НаЧтение", НаЧтение); - - ВРабочемКаталогеНаЧтение = Истина; - ВРабочемКаталогеВладельца = Ложь; - ИмяКаталога = РабочийКаталогПользователя(); - - Если ЗначениеЗаполнено(ТекущаяВерсияФайла) Тогда - ПолноеИмяФайлаВРабочемКаталоге = ПолучитьПолноеИмяФайлаИзРегистра(ТекущаяВерсияФайла, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); - - Результат.Вставить("ПолноеИмяФайлаВРабочемКаталоге", ПолноеИмяФайлаВРабочемКаталоге); - КонецЕсли; - Результат.Вставить("ВРабочемКаталогеНаЧтение", ВРабочемКаталогеНаЧтение); - Результат.Вставить("РабочийКаталогВладельца", ""); - - РедактируетТекущийПользователь = (Результат.Редактирует = ТекущийПользователь); - Результат.Вставить("ФайлРедактируетТекущийПользователь", РедактируетТекущийПользователь); - - СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; - Если Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен Тогда - СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; - ИначеЕсли Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен Тогда - СтатусИзвлеченияТекстаСтрока = "Извлечен"; - ИначеЕсли Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось Тогда - СтатусИзвлеченияТекстаСтрока = "ИзвлечьНеУдалось"; - КонецЕсли; - Результат.Вставить("СтатусИзвлеченияТекста", СтатусИзвлеченияТекстаСтрока); - - ПапкаДляСохранитьКак = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПапкаДляСохранитьКак"); - Результат.Вставить("ПапкаДляСохранитьКак", ПапкаДляСохранитьКак); - -КонецПроцедуры - Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено, Знач ПолучатьСсылкуНаДвоичныеДанные = Истина, @@ -691,12 +476,12 @@ Исключение // Запись в журнал регистрации. СсылкаНаФайл = ?(ФайлСсылка <> Неопределено, ФайлСсылка, ВерсияСсылка); - СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( + СообщениеОбОшибке = РаботаСФайламиСлужебный.СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( ИнформацияОбОшибке(), СсылкаНаФайл); ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Открытие файла'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.Файлы, ФайлСсылка, @@ -712,7 +497,7 @@ Строка(ТипЗнч(ДанныеФайла.Владелец)), ПредставлениеВладельца); - ВызватьИсключение РаботаСФайламиСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( + ВызватьИсключение РаботаСФайламиСлужебный.ОшибкаФайлНеНайденВХранилищеФайлов( ДанныеФайла.ПолноеНаименованиеВерсии + "." + ДанныеФайла.Расширение, , ПредставлениеВладельцаФайла); @@ -726,6 +511,48 @@ КонецФункции +Функция ДанныеОбновленияПоляИзображения(ФайлСсылка, ПараметрыПолученияДанных) Экспорт + + ДанныеФайла = ?(ЗначениеЗаполнено(ФайлСсылка), ПолучитьДанныеФайла(ФайлСсылка, ПараметрыПолученияДанных), Неопределено); + + ДанныеОбновления = Новый Структура; + ДанныеОбновления.Вставить("ДанныеФайла", ДанныеФайла); + ДанныеОбновления.Вставить("ЦветТекста", ЦветаСтиля.ЦветТекстаНевыбраннойКартинки); + ДанныеОбновления.Вставить("ФайлПоврежден", Ложь); + + Если ДанныеФайла <> Неопределено + И ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла) = Неопределено Тогда + + ДанныеОбновления.ФайлПоврежден = Истина; + ДанныеОбновления.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст; + + КонецЕсли; + + Возврат ДанныеОбновления; + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать РаботаСФайлами.ОпределитьФормуПрисоединенногоФайла. +Процедура ОпределитьФормуПрисоединенногоФайла(Источник, + ВидФормы, + Параметры, + ВыбраннаяФорма, + ДополнительнаяИнформация, + СтандартнаяОбработка) Экспорт + + РаботаСФайлами.ОпределитьФормуПрисоединенногоФайла(Источник, + ВидФормы, + Параметры, + ВыбраннаяФорма, + ДополнительнаяИнформация, + СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -743,23 +570,6 @@ КонецПроцедуры -// Возвращает путь к рабочему каталогу пользователя в настройках. -// -// Возвращаемое значение: -// Строка - имя каталога. -// -Функция РабочийКаталогПользователя() - - УстановитьПривилегированныйРежим(Истина); - ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); - Если ИмяКаталога = Неопределено Тогда - ИмяКаталога = ""; - КонецЕсли; - - Возврат ИмяКаталога; - -КонецФункции - Функция ЭтоСправочникФайлы(ВладелецФайлов) Экспорт Возврат РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(ВладелецФайлов) = "Файлы"; @@ -787,7 +597,7 @@ Файл = Справочники[СведенияОФайле.ИмяСправочникаХранилищаФайлов].СоздатьЭлемент(); Файл.ВладелецФайла = Владелец; Файл.Наименование = СведенияОФайле.ИмяБезРасширения; - Файл.Автор = ?(СведенияОФайле.Автор <> Неопределено, СведенияОФайле.Автор, Пользователи.ТекущийПользователь()); + Файл.Автор = ?(СведенияОФайле.Автор <> Неопределено, СведенияОФайле.Автор, Пользователи.АвторизованныйПользователь()); Файл.ДатаСоздания = ТекущаяДатаСеанса(); Файл.Описание = СведенияОФайле.Комментарий; Файл.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Неопределено); @@ -858,7 +668,7 @@ ВремяИзменения = ТекущаяДатаСеанса(); КонецЕсли; - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); + РаботаСФайламиСлужебный.ПроверитьРасширениеФайлаДляЗагрузки(СведенияОФайле.РасширениеБезТочки); ТекущаяВерсияРазмер = 0; ДвоичныеДанные = Неопределено; @@ -878,7 +688,7 @@ ВерсияСсылкаДляСравненияРазмера = ФайлСсылка; КонецЕсли; - КодировкаПредВерсии = ПолучитьКодировкуВерсииФайла(ВерсияСсылкаДляСравненияРазмера); + КодировкаПредВерсии = РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ВерсияСсылкаДляСравненияРазмера); СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВерсияСсылкаДляСравненияРазмера, "Размер, ТипХраненияФайла, Том, ПутьКФайлу"); @@ -908,7 +718,6 @@ КонецЕсли; КонецЕсли; - СтарыйТипХранения = Неопределено; ВерсияЗаблокирована = Ложь; Версия = Неопределено; @@ -962,7 +771,7 @@ ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); Версия.Размер = ДвоичныеДанныеФайла.Размер(); - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРазмерФайлаДляЗагрузки(Версия); + РаботаСФайламиСлужебный.ПроверитьРазмерФайлаДляЗагрузки(Версия); КонецЕсли; // очистим поля @@ -972,7 +781,7 @@ Если Версия.Размер = 0 Тогда Версия.Размер = ДвоичныеДанные.Размер(); - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРазмерФайлаДляЗагрузки(Версия); + РаботаСФайламиСлужебный.ПроверитьРазмерФайлаДляЗагрузки(Версия); КонецЕсли; ФайлЗашифрован = Ложь; @@ -1011,7 +820,7 @@ Иначе Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; КонецЕсли; - + Если Версия.Размер = 0 Тогда Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); @@ -1063,8 +872,6 @@ ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'"); КонецЕсли; - ВерсияНеСоздана = Ложь; - НачатьТранзакцию(); Попытка ПредыдущаяВерсия = ДанныеФайла.ТекущаяВерсия; @@ -1089,12 +896,12 @@ ОсвободитьФайл(ДанныеФайла, УникальныйИдентификаторФормы); Если СведенияОФайле.Кодировка <> Неопределено Тогда - Если Не ЗначениеЗаполнено(ПолучитьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия)) Тогда + Если Не ЗначениеЗаполнено(РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия)) Тогда ЗаписатьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия, СведенияОФайле.Кодировка); КонецЕсли; КонецЕсли; - Если НоваяВерсия <> Неопределено И НЕ ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() И Не НеМенятьЗаписьВРабочемКаталоге Тогда + Если НоваяВерсия <> Неопределено И НЕ ОбщегоНазначения.ЭтоВебКлиент() И Не НеМенятьЗаписьВРабочемКаталоге Тогда УдалитьВерсиюИЗанестиИнформациюФайлаВРегистр(ПредыдущаяВерсия, НоваяВерсия, ПолныйПутьКФайлу, РабочийКаталогПользователя, ДанныеФайла.РабочийКаталогВладельца <> ""); КонецЕсли; @@ -1160,7 +967,6 @@ ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'"); КонецЕсли; - ВерсияНеСоздана = Ложь; ТекущаяВерсия = ДанныеФайлаТекущие.ТекущаяВерсия; НачатьТранзакцию(); @@ -1180,7 +986,7 @@ Если СведенияОФайле.ХранитьВерсии Тогда РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ФайлСсылка, НоваяВерсия, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы); - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() И Не НеМенятьЗаписьВРабочемКаталоге Тогда + Если НЕ ОбщегоНазначения.ЭтоВебКлиент() И Не НеМенятьЗаписьВРабочемКаталоге Тогда УдалитьИзРегистра(СтараяВерсия); ЗаписатьПолноеИмяФайлаВРегистр(НоваяВерсия, ОтносительныйПутьКФайлу, Ложь, ВРабочемКаталогеВладельца); КонецЕсли; @@ -1192,7 +998,7 @@ КонецЕсли; Если СведенияОФайле.Кодировка <> Неопределено Тогда - Если Не ЗначениеЗаполнено(ПолучитьКодировкуВерсииФайла(ТекущаяВерсия)) Тогда + Если Не ЗначениеЗаполнено(РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ТекущаяВерсия)) Тогда ЗаписатьКодировкуВерсииФайла(ТекущаяВерсия, СведенияОФайле.Кодировка); КонецЕсли; КонецЕсли; @@ -1435,7 +1241,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - РедактируетТекущийПользователь = (Выборка.Редактирует = Пользователи.ТекущийПользователь()); + РедактируетТекущийПользователь = (Выборка.Редактирует = Пользователи.АвторизованныйПользователь()); Возврат РедактируетТекущийПользователь; КонецЕсли; @@ -1613,24 +1419,6 @@ КонецФункции -// Формирует текст ошибки для помещения в журнал регистрации. -// Параметры: -// ИнформацияОбОшибкеФункции - ИнформацияОбОшибке -// ФайлСсылка - СправочникСсылка.Файлы - файл. -// -// Возвращаемое значение: -// Строка - описание ошибки -// -Функция СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора(ИнформацияОбОшибкеФункции, ФайлСсылка) - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ссылка на файл: ""%1"". - |""%2"".'"), - ПолучитьНавигационнуюСсылку(ФайлСсылка), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибкеФункции)); - -КонецФункции - // Освобождение Файла с получением данных. // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл. @@ -1699,7 +1487,7 @@ СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить("Папка", СсылкаПапки); - СтруктураОтбора.Вставить("Пользователь", Пользователи.ТекущийПользователь()); + СтруктураОтбора.Вставить("Пользователь", Пользователи.АвторизованныйПользователь()); // Получить структуру с данными ресурсов записи. СтруктураРесурсов = РегистрыСведений.РабочиеКаталогиФайлов.Получить(СтруктураОтбора); @@ -1728,11 +1516,11 @@ НаборЗаписей = РегистрыСведений.РабочиеКаталогиФайлов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Папка.Установить(СсылкаПапки); - НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.АвторизованныйПользователь()); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Папка = СсылкаПапки; - НоваяЗапись.Пользователь = Пользователи.ТекущийПользователь(); + НоваяЗапись.Пользователь = Пользователи.АвторизованныйПользователь(); НоваяЗапись.Путь = РабочийКаталогПапки; НаборЗаписей.Записать(); @@ -1757,7 +1545,7 @@ УстановитьПривилегированныйРежим(Истина); СписокДляЗамены = Новый Массив; - ТекущийПользователь = Пользователи.ТекущийПользователь(); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); // Для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует. ЗапросВРегистр = Новый Запрос; @@ -1839,14 +1627,14 @@ НаборЗаписей = РегистрыСведений.ФайлыВРабочемКаталоге.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Файл.Установить(Файл); - НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.АвторизованныйПользователь()); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Файл = Файл; НоваяЗапись.Путь = Путь; НоваяЗапись.Размер = Размер; НоваяЗапись.ДатаПомещенияВРабочийКаталог = ДатаПомещенияВРабочийКаталог; - НоваяЗапись.Пользователь = Пользователи.ТекущийПользователь(); + НоваяЗапись.Пользователь = Пользователи.АвторизованныйПользователь(); НоваяЗапись.НаЧтение = НаЧтение; НоваяЗапись.ВРабочемКаталогеВладельца = ВРабочемКаталогеВладельца; @@ -1865,7 +1653,7 @@ НаборЗаписей = РегистрыСведений.РабочиеКаталогиФайлов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Папка.Установить(СсылкаПапки); - НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.АвторизованныйПользователь()); // Не добавляем записи в набор - чтобы все стереть. НаборЗаписей.Записать(); @@ -1911,7 +1699,7 @@ НайденныеСвойства = Новый Структура; НайденныеСвойства.Вставить("ФайлЕстьВРегистре", Ложь); - НайденныеСвойства.Вставить("Файл", Справочники.ВерсииФайлов.ПолучитьСсылку()); + НайденныеСвойства.Вставить("Файл", Справочники.ВерсииФайлов.ПустаяСсылка()); НайденныеСвойства.Вставить("ДатаПомещения"); НайденныеСвойства.Вставить("Владелец"); НайденныеСвойства.Вставить("НомерВерсии"); @@ -1923,7 +1711,7 @@ // Версия и Размер и ДатаПомещенияВРабочийКаталог. ЗапросВРегистр = Новый Запрос; ЗапросВРегистр.УстановитьПараметр("ИмяФайла", ИмяФайла); - ЗапросВРегистр.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); + ЗапросВРегистр.УстановитьПараметр("Пользователь", Пользователи.АвторизованныйПользователь()); ЗапросВРегистр.Текст = "ВЫБРАТЬ | ФайлыВРабочемКаталоге.Файл КАК Файл, @@ -2027,14 +1815,14 @@ НаборЗаписей = РегистрыСведений.ФайлыВРабочемКаталоге.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Файл.Установить(ТекущаяВерсия.Ссылка); - НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.АвторизованныйПользователь()); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Файл = ТекущаяВерсия.Ссылка; НоваяЗапись.Путь = ПолноеИмяФайла; НоваяЗапись.Размер = ТекущаяВерсия.Размер; НоваяЗапись.ДатаПомещенияВРабочийКаталог = ТекущаяДатаСеанса(); - НоваяЗапись.Пользователь = Пользователи.ТекущийПользователь(); + НоваяЗапись.Пользователь = Пользователи.АвторизованныйПользователь(); НоваяЗапись.НаЧтение = НаЧтение; НоваяЗапись.ВРабочемКаталогеВладельца = ВРабочемКаталогеВладельца; @@ -2076,7 +1864,7 @@ УстановитьПривилегированныйРежим(Истина); СписокУдалить = Новый Массив; - ТекущийПользователь = Пользователи.ТекущийПользователь(); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); // Для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует. ЗапросВРегистр = Новый Запрос; @@ -2195,38 +1983,6 @@ КонецПроцедуры -// Формирует отчет для файлов с ошибками. -// -// Параметры: -// МассивИменФайловСОшибками - массив строк путей к файлам. -// -// Возвращаемое значение: -// ТабличныйДокумент с отчетом. -// -Функция ИмпортФайловСформироватьОтчет(МассивИменФайловСОшибками) Экспорт - - Документ = Новый ТабличныйДокумент; - Макет = Справочники.Файлы.ПолучитьМакет("МакетОтчета"); - - ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); - ОбластьЗаголовок.Параметры.Описание = НСтр("ru = 'Не удалось загрузить следующие файлы:'"); - Документ.Вывести(ОбластьЗаголовок); - - ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); - - Для Каждого Выборка Из МассивИменФайловСОшибками Цикл - ОбластьСтрока.Параметры.Название = Выборка.ИмяФайла; - ОбластьСтрока.Параметры.Ошибка = Выборка.Ошибка; - Документ.Вывести(ОбластьСтрока); - КонецЦикла; - - Отчет = Новый ТабличныйДокумент; - Отчет.Вывести(Документ); - - Возврат Отчет; - -КонецФункции - // Сортирует массив структур по полю Дата - на сервере, т.к. на тонком клиенте нет ТаблицаЗначений. // // Параметры: @@ -2264,48 +2020,6 @@ КонецПроцедуры -// Возвращает настройку - Спрашивать режим редактирования при открытии файла. -// Возвращаемое значение: -// Булево - Спрашивать режим редактирования при открытии файла. -// -Функция СпрашиватьРежимРедактированияПриОткрытииФайла() - СпрашиватьРежимРедактированияПриОткрытииФайла = - ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла"); - Если СпрашиватьРежимРедактированияПриОткрытииФайла = Неопределено Тогда - СпрашиватьРежимРедактированияПриОткрытииФайла = Истина; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла", СпрашиватьРежимРедактированияПриОткрытииФайла); - КонецЕсли; - - Возврат СпрашиватьРежимРедактированияПриОткрытииФайла; -КонецФункции - -// Считаем ДействиеПоДвойномуЩелчкуМыши - если первый раз - поставим правильное значение. -// -// Возвращаемое значение: -// Строка - Действие по двойному щелчку мыши. -// -Функция ДействиеПоДвойномуЩелчкуМыши() - - КакОткрывать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкиОткрытияФайлов", "ДействиеПоДвойномуЩелчкуМыши"); - - Если КакОткрывать = Неопределено - ИЛИ КакОткрывать = Перечисления.ДействияСФайламиПоДвойномуЩелчку.ПустаяСсылка() Тогда - - КакОткрывать = Перечисления.ДействияСФайламиПоДвойномуЩелчку.ОткрыватьФайл; - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "НастройкиОткрытияФайлов", "ДействиеПоДвойномуЩелчкуМыши", КакОткрывать); - КонецЕсли; - - Если КакОткрывать = Перечисления.ДействияСФайламиПоДвойномуЩелчку.ОткрыватьФайл Тогда - Возврат "ОткрыватьФайл"; - Иначе - Возврат "ОткрыватьКарточку"; - КонецЕсли; - -КонецФункции - // Функция меняет ВладелецФайла объектам типа Справочник.Файл, вернет Истина при успехе. // Параметры: // МассивСсылокНаФайлы - Массив - массив файлов. @@ -2565,73 +2279,6 @@ КонецФункции -// Заполняет условное оформление списка файлов. -// -// Параметры: -// Список - динамический список. -// -Процедура ЗаполнитьУсловноеОформлениеСпискаФайлов(Список) Экспорт - - УсловноеОформлениеКД = Список.КомпоновщикНастроек.Настройки.УсловноеОформление; - УсловноеОформлениеКД.ИдентификаторПользовательскойНастройки = "ОсновноеОформление"; - - Элемент = УсловноеОформлениеКД.Элементы.Добавить(); - Элемент.Использование = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); - - Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - Отбор.Использование = Истина; - Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; - Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Редактирует"); - - Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда - УсловноеОформлениеКД.Элементы.Удалить(Элемент); - КонецЕсли; - - Элемент = УсловноеОформлениеКД.Элементы.Добавить(); - Элемент.Использование = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ФайлЗанятыйТекущимПользователем); - - Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - Отбор.Использование = Истина; - Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Редактирует"); - Отбор.ПравоеЗначение = Пользователи.ТекущийПользователь(); - - Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда - УсловноеОформлениеКД.Элементы.Удалить(Элемент); - КонецЕсли; - -КонецПроцедуры - -// Заполняет условное оформление списка папок. -// -// Параметры: -// Список - динамический список. -// -Процедура ЗаполнитьУсловноеОформлениеСпискаПапок(Папки) Экспорт - - УсловноеОформлениеКД = Папки.КомпоновщикНастроек.Настройки.УсловноеОформление; - УсловноеОформлениеКД.ИдентификаторПользовательскойНастройки = "ОсновноеОформление"; - - Элемент = УсловноеОформлениеКД.Элементы.Добавить(); - Элемент.Использование = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); - - Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - Отбор.Использование = Истина; - Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; - - Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПапкаСинхронизируется"); - Отбор.ПравоеЗначение = Истина; - - Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда - УсловноеОформлениеКД.Элементы.Удалить(Элемент); - КонецЕсли; - -КонецПроцедуры - // Получает данные файла для открытия и читает из общих настроек ПапкаДляСохранитьКак. // // Параметры: @@ -2679,7 +2326,7 @@ ВерсияСсылка = Выборка.Ссылка; ДанныеФайла = ДанныеФайла(ФайлСсылка, ВерсияСсылка); - НавигационнаяСсылкаВерсии = ПолучитьНавигационнуюСсылкуВоВременномХранилище(ВерсияСсылка, ИдентификаторФормы); + НавигационнаяСсылкаВерсии = РаботаСФайламиСлужебный.ПолучитьНавигационнуюСсылкуВоВременномХранилище(ВерсияСсылка, ИдентификаторФормы); СтруктураВозврата = Новый Структура("ДанныеФайла, НавигационнаяСсылкаВерсии, ВерсияСсылка", ДанныеФайла, НавигационнаяСсылкаВерсии, ВерсияСсылка); @@ -2689,7 +2336,7 @@ // Если не хранятся версии, то зашифровываем файл. Если Не ФайлСсылка.ХранитьВерсии Или Не ЗначениеЗаполнено(ФайлСсылка.ТекущаяВерсия) Тогда ДанныеФайла = ДанныеФайла(ФайлСсылка); - НавигационнаяСсылкаВерсии = ПолучитьНавигационнуюСсылкуВоВременномХранилище(ФайлСсылка, ИдентификаторФормы); + НавигационнаяСсылкаВерсии = РаботаСФайламиСлужебный.ПолучитьНавигационнуюСсылкуВоВременномХранилище(ФайлСсылка, ИдентификаторФормы); СтруктураВозврата = Новый Структура("ДанныеФайла, НавигационнаяСсылкаВерсии, ВерсияСсылка", ДанныеФайла, НавигационнаяСсылкаВерсии, ФайлСсылка); @@ -2699,68 +2346,6 @@ Возврат МассивВозврата; КонецФункции -// Делает ПоместитьВоВременноеХранилище (если файл хранится на диске) и возвращает нужную ссылку. -// Параметры: -// ВерсияСсылка - СправочникСсылка.ВерсииФайлов - версия файла. -// ИдентификаторФормы - уникальный идентификатор формы. -// -// Возвращаемое значение: -// Строка - навигационная ссылка. -Функция ПолучитьНавигационнуюСсылкуВоВременномХранилище(ВерсияСсылка, ИдентификаторФормы = Неопределено) Экспорт - Адрес = ""; - - ТипХраненияФайла = ВерсияСсылка.ТипХраненияФайла; - - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ ВерсияСсылка.Том.Пустая() Тогда - ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; - Попытка - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); - Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); - Исключение - // Запись в журнал регистрации. - СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора( - ИнформацияОбОшибке(), ВерсияСсылка.Владелец); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Открытие файла'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.Файлы, - ВерсияСсылка.Владелец, - СообщениеОбОшибке); - - ВызватьИсключение РаботаСФайламиСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( - ВерсияСсылка.ПолноеНаименование + "." + ВерсияСсылка.Расширение); - КонецПопытки; - КонецЕсли; - Иначе - ХранилищеФайла = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); - ДвоичныеДанные = ХранилищеФайла.Получить(); - Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); - КонецЕсли; - - Возврат Адрес; - -КонецФункции - -// Получает массив сертификатов шифрования. -// Параметры: -// Ссылка - СправочникСсылка.Файлы - файл. -// -// Возвращаемое значение: -// Массив - массив структур -Функция СертификатыШифрования(Ссылка) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - Возврат МодульЭлектроннаяПодпись.СертификатыШифрования(Ссылка); - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - // Добавляет подпись к версии файла и отмечает файл, как подписанный. Процедура ДобавитьПодписьКФайлу(ФайлСсылка, СвойстваПодписи, ИдентификаторФормы) Экспорт @@ -2786,170 +2371,7 @@ КонецПроцедуры -// Добавляет файл в тома при выполнении команды "разместить файлы начального образа". -// Параметры: -// СоответствиеПутейФайлов - Соответствие - соответствие УникальногоИдентификатора файла и пути на диске к файлу. -// ТипХраненияФайла - Перечисления.ТипыХраненияФайлов - тип хранения файлов. -Процедура ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ТипХраненияФайла) Экспорт - - Выборка = Справочники.ВерсииФайлов.Выбрать(); - - Пока Выборка.Следующий() Цикл - - Объект = Выборка.ПолучитьОбъект(); - - Если Объект.ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Продолжить; - КонецЕсли; - - УникальныйИдентификатор = Строка(Объект.Ссылка.УникальныйИдентификатор()); - - ПолныйПутьФайлаНаДиске = СоответствиеПутейФайлов.Получить(УникальныйИдентификатор); - ПолныйПутьНовый = ""; - - Если ПолныйПутьФайлаНаДиске = Неопределено Тогда - Продолжить; - КонецЕсли; - - ХранилищеФайла = Неопределено; - - // В базе-приемнике файлы должны храниться в информационной базе - значит там их и разместим (даже если в исходной - // базе они были в томах). - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - - Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - Объект.ПутьКФайлу = ""; - Объект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаНаДиске); - ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные); - - Иначе // В базе-приемнике файлы должны храниться в томах на диске - переместим разархивированный файл на том. - - ФайлИсходный = Новый Файл(ПолныйПутьФайлаНаДиске); - ПолныйПутьНовый = ФайлИсходный.Путь + Объект.Наименование + "." + Объект.Расширение; - ПереместитьФайл(ПолныйПутьФайлаНаДиске, ПолныйПутьНовый); - - // Добавить в один из томов (где есть свободное место). - СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ПолныйПутьНовый, Объект.ДатаМодификацииУниверсальная, - Объект.Наименование, Объект.Расширение, Объект.НомерВерсии, Объект.Владелец.Зашифрован); - Объект.Том = СведенияОФайле.Том; - Объект.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; - - КонецЕсли; - - Объект.ДополнительныеСвойства.Вставить("РазмещениеФайловВТомах", Истина); // Чтобы прошла запись подписанных файлов. - Объект.Записать(); - - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ЗаписатьФайлВИнформационнуюБазу(Объект.Ссылка, ХранилищеФайла); - КонецЕсли; - - Если НЕ ПустаяСтрока(ПолныйПутьНовый) Тогда - УдалитьФайлы(ПолныйПутьНовый); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Удаляет регистрацию изменений - после размещения в томах. -// Параметры: -// ПланОбменаСсылка - ПланОбмена.Ссылка - план обмена. -Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка) Экспорт - - ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.Справочники.ВерсииФайлов); - ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.Справочники.Файлы); - ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.РегистрыСведений.ДвоичныеДанныеФайлов); - -КонецПроцедуры - -// Извлечение текста - -// Записывает извлеченный текст. -// -// Параметры: -// ТекущаяВерсия - СправочникСсылка.ВерсииФайлов - версия файла. -// -Процедура ПриЗаписиИзвлеченногоТекста(ТекущаяВерсия) Экспорт - - ФайлЗаблокирован = Ложь; - - // Если это не версия, то записываем. - Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВладелецФайла", Метаданные.НайтиПоТипу(ТипЗнч(ТекущаяВерсия))) Тогда - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ТекущаяВерсия); - Возврат; - КонецЕсли; - - Файл = ТекущаяВерсия.Владелец; - Если Файл.ТекущаяВерсия = ТекущаяВерсия.Ссылка Тогда - Попытка - ЗаблокироватьДанныеДляРедактирования(Файл); - ФайлЗаблокирован = Истина; - Исключение - // Исключение, если объект уже заблокирован, в том числе и методом Заблокировать. - Возврат; - КонецПопытки; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - ТекущаяВерсия.ОбменДанными.Загрузка = Истина; - ТекущаяВерсия.Записать(); - - Если Файл.ТекущаяВерсия = ТекущаяВерсия.Ссылка Тогда - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Файл)).ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Файл); - БлокировкаДанных.Заблокировать(); - - ФайлОбъект = Файл.ПолучитьОбъект(); - ФайлОбъект.ТекстХранилище = ТекущаяВерсия.ТекстХранилище; - ФайлОбъект.ОбменДанными.Загрузка = Истина; - ФайлОбъект.Записать(); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - - Если ФайлЗаблокирован Тогда - РазблокироватьДанныеДляРедактирования(Файл); - КонецЕсли; - - ВызватьИсключение; - КонецПопытки; - - Если ФайлЗаблокирован Тогда - РазблокироватьДанныеДляРедактирования(Файл); - КонецЕсли; - -КонецПроцедуры - -// Настройки - -// Считаем из настроек СпособСравненияВерсийФайлов. -// -// Возвращаемое значение: -// Строка - Способ сравнения версий файлов. -// -Функция СпособСравненияВерсийФайлов() - - СпособСравнения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкиСравненияФайлов", "СпособСравненияВерсийФайлов"); - - Если СпособСравнения = Перечисления.СпособыСравненияВерсийФайлов.MicrosoftOfficeWord Тогда - Возврат "MicrosoftOfficeWord"; - - ИначеЕсли СпособСравнения = Перечисления.СпособыСравненияВерсийФайлов.OpenOfficeOrgWriter Тогда - Возврат "OpenOfficeOrgWriter"; - Иначе - Возврат Неопределено; - КонецЕсли; - -КонецФункции - -Функция ПоказыватьПодсказкиПриРедактированииФайлов(Значение = Неопределено) Экспорт +Процедура ПоказыватьПодсказкиПриРедактированииФайлов(Значение = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); Если Значение <> Неопределено Тогда @@ -2958,7 +2380,7 @@ ОбновитьПовторноИспользуемыеЗначения(); КонецЕсли; -КонецФункции +КонецПроцедуры // Информационные @@ -2976,52 +2398,6 @@ КонецФункции -// Получает значение настройки ПоказыватьКолонкуРазмер. -// Возвращаемое значение: -// Булево - Показывать колонку размер. -// -Функция ПолучитьПоказыватьКолонкуРазмер() Экспорт - ПоказыватьКолонкуРазмер = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПоказыватьКолонкуРазмер"); - Если ПоказыватьКолонкуРазмер = Неопределено Тогда - ПоказыватьКолонкуРазмер = Ложь; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПоказыватьКолонкуРазмер", ПоказыватьКолонкуРазмер); - КонецЕсли; - - Возврат ПоказыватьКолонкуРазмер; - -КонецФункции - -// Возвращает количество файлов в томах. -// Возвращаемое значение: -// Число - число файлов в томах. -// -Функция ПодсчитатьКоличествоФайловВТомах() - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(КОЛИЧЕСТВО(ФайлыВТомах.Файл), 0) КАК КоличествоФайлов - |ИЗ - | (ВЫБРАТЬ - | СведенияОФайлах.Файл КАК Файл - | ИЗ - | РегистрСведений.СведенияОФайлах КАК СведенияОФайлах - | ГДЕ - | СведенияОФайлах.Файл.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)) КАК ФайлыВТомах - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов - | ПО ФайлыВТомах.Файл = ВерсииФайлов.Владелец - | И (ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске))"; - - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - Возврат Выборка.КоличествоФайлов; - КонецЕсли; - - Возврат 0; - -КонецФункции - // Получает количество версий файла. // Параметры: // ФайлСсылка - СправочникСсылка.Файлы - файл. @@ -3150,86 +2526,6 @@ КонецФункции -// Возвращает в параметре КоличествоФайловВТомах количество файлов в томах. -Процедура ОпределитьКоличествоФайловВТомах(КоличествоФайловВТомах) Экспорт - - КоличествоФайловВТомах = КоличествоФайловВТомах + ПодсчитатьКоличествоФайловВТомах(); - -КонецПроцедуры - -// Есть ли дублирующийся элемент в условном оформлении списка. -// Параметры: -// Элементы - массив элементов условного оформления списка. -// ЭлементПоиска - элемент условного оформления списка. -// -// Возвращаемое значение: -// Булево - есть дублирующийся элемент. -// -Функция ЕстьДублирующийсяЭлемент(Элементы, ЭлементПоиска) - - Для Каждого Элемент Из Элементы Цикл - Если Элемент <> ЭлементПоиска Тогда - - Если Элемент.Оформление.Элементы.Количество() <> ЭлементПоиска.Оформление.Элементы.Количество() Тогда - Продолжить; - КонецЕсли; - - НайденОтличающийсяЭлемент = Ложь; - - // Обходим все элементы оформления - если есть хоть один отличающийся - делаем Продолжить; - ЧислоЭлементов = Элемент.Оформление.Элементы.Количество(); - Для Индекс = 0 По ЧислоЭлементов - 1 Цикл - Элемент1 = Элемент.Оформление.Элементы[Индекс]; - Элемент2 = ЭлементПоиска.Оформление.Элементы[Индекс]; - - Если Элемент1.Использование И Элемент2.Использование Тогда - Если Элемент1.Параметр <> Элемент2.Параметр ИЛИ Элемент1.Значение <> Элемент2.Значение Тогда - НайденОтличающийсяЭлемент = Истина; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если НайденОтличающийсяЭлемент Тогда - Продолжить; - КонецЕсли; - - Если Элемент.Отбор.Элементы.Количество() <> ЭлементПоиска.Отбор.Элементы.Количество() Тогда - Продолжить; - КонецЕсли; - - // Обходим все элементы отбора - если есть хоть один отличающийся - делаем Продолжить; - ЧислоЭлементов = Элемент.Отбор.Элементы.Количество(); - Для Индекс = 0 По ЧислоЭлементов - 1 Цикл - Элемент1 = Элемент.Отбор.Элементы[Индекс]; - Элемент2 = ЭлементПоиска.Отбор.Элементы[Индекс]; - - Если Элемент1.Использование И Элемент2.Использование Тогда - Если Элемент1.ВидСравнения <> Элемент2.ВидСравнения - ИЛИ Элемент1.ЛевоеЗначение <> Элемент2.ЛевоеЗначение - ИЛИ Элемент1.ПравоеЗначение <> Элемент2.ПравоеЗначение Тогда - - НайденОтличающийсяЭлемент = Истина; - Прервать; - - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если НайденОтличающийсяЭлемент Тогда - Продолжить; - КонецЕсли; - - // Обошли все элементы оформления и отбора - они все одинаковы - это дубль. - Возврат Истина; - - КонецЕсли; - КонецЦикла; - - Возврат Ложь; - -КонецФункции - Функция ФайлСинхронизируетсяОблачнымСервисом(Файл) Запрос = Новый Запрос; @@ -3252,183 +2548,69 @@ КонецФункции +Функция КоличествоПрисоединенныхФайлов(ВладелецФайлов, ВозвращатьДанныеФайлов = Ложь) Экспорт + + ФайлыВладельца = Новый Структура; + ФайлыВладельца.Вставить("КоличествоФайлов", 0); + ФайлыВладельца.Вставить("ДанныеФайла", Неопределено); + + ИмяСправочникаХранения = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(ВладелецФайлов); + Если ЗначениеЗаполнено(ИмяСправочникаХранения) Тогда + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | СправочникХраненияФайлов.Ссылка КАК Файл + |ИЗ + | &ИмяСправочника КАК СправочникХраненияФайлов + |ГДЕ + | СправочникХраненияФайлов.ВладелецФайла = &ВладелецФайла + | И &ЭтоГруппа = ЛОЖЬ + | И &Служебный = ЛОЖЬ"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочникаХранения); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Служебный", + ?(РаботаСФайламиСлужебный.ЕстьРеквизитСлужебный(ИмяСправочникаХранения), + "СправочникХраненияФайлов.Служебный", "ЛОЖЬ")); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа", + ?(Метаданные.Справочники[ИмяСправочникаХранения].Иерархический, + "СправочникХраненияФайлов.ЭтоГруппа", "ЛОЖЬ")); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайлов); + ТаблицаФайлов = Запрос.Выполнить().Выгрузить(); + КоличествоФайлов = ТаблицаФайлов.Количество(); + + ФайлыВладельца.КоличествоФайлов = КоличествоФайлов; + Если КоличествоФайлов > 0 Тогда + ФайлыВладельца.ДанныеФайла = ДанныеФайла(ТаблицаФайлов[0].Файл, , , Ложь); + КонецЕсли; + + КонецЕсли; + + Возврат ?(ВозвращатьДанныеФайлов, ФайлыВладельца, ФайлыВладельца.КоличествоФайлов); + +КонецФункции + +Функция ЕстьПравоДоступа(Право, Ссылка) Экспорт + + Возврат ПравоДоступа(Право, Ссылка.Метаданные()); + +КонецФункции + +Функция ПараметрыДобавленияИзображения(ВладелецФайлов) Экспорт + + ПараметрыДобавления = Новый Структура; + ПараметрыДобавления.Вставить("ПравоДобавления", ЕстьПравоДоступа("Добавление", ВладелецФайлов)); + ПараметрыДобавления.Вставить("ФайлыВладельца" , КоличествоПрисоединенныхФайлов(ВладелецФайлов, Истина)); + + Возврат ПараметрыДобавления; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. -// В справочнике ВерсииФайлов из данных в Код(Строка) заполняет НомерВерсии(Число). -Процедура ЗаполнитьНомерВерсииИзКодаСправочника() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка, - | ВерсииФайлов.ПометкаУдаления, - | ВерсииФайлов.Код, - | ВерсииФайлов.НомерВерсии, - | ВерсииФайлов.Владелец.ПометкаУдаления КАК ВладелецПометкаУдаления, - | ВерсииФайлов.Владелец.ТекущаяВерсия - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - Если Выборка.НомерВерсии = 0 Тогда - - ОписаниеТипов = Новый ОписаниеТипов("Число"); - КодЧисло = ОписаниеТипов.ПривестиЗначение(Выборка.Код); - Если КодЧисло <> 0 Тогда - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.НомерВерсии = КодЧисло; - - // Коррекция ситуации, допустимой ранее, но недопустимой сейчас - активная версия помечена на удаление, а владелец - // - нет. - Если Выборка.ПометкаУдаления = Истина И Выборка.ВладелецПометкаУдаления = Ложь И Выборка.ТекущаяВерсия = Выборка.Ссылка Тогда - Объект.ПометкаУдаления = Ложь; - КонецЕсли; - - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - КонецЕсли - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// В справочнике ВерсииФайлов заполняет ТипХраненияФайла значением ВБазе. -Процедура ЗаполнитьТипХраненияФайлаВБазе() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Объект = Выборка.Ссылка.ПолучитьОбъект(); - - Если Объект.ТипХраненияФайла.Пустая() Тогда - Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// В справочнике ВерсииФайлов и Файлы ИндексКартинки увеличивает в 2 раза. -Процедура СменитьИндексПиктограммы() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.ОбменДанными.Загрузка = Истина; - Объект.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Объект.Расширение); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - КонецЦикла; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Файлы.Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.ОбменДанными.Загрузка = Истина; - Объект.ИндексКартинки = Объект.ТекущаяВерсия.ИндексКартинки; - Объект.Записать(); - КонецЦикла; - -КонецПроцедуры - -// Вызывается при обновлении на 1.0.6.3 - заполняет пути ТомаХраненияФайлов. -Процедура ЗаполнитьПутиТома() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТомаХраненияФайлов.Ссылка - |ИЗ - | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.ПолныйПутьLinux = Объект.ПолныйПутьWindows; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - КонецЦикла; - -КонецПроцедуры - -// В справочнике Файлы перезаписывает все элементы. -Процедура ПерезаписатьВсеФайлы() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Файлы.Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.Записать(); - КонецЦикла; - -КонецПроцедуры - -// В справочнике ВерсииФайлов заполняет ДатаМодификацииФайла - из даты создания. -Процедура ЗаполнитьДатуМодификацииФайла() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - Объект = Выборка.Ссылка.ПолучитьОбъект(); - - Если Объект.ДатаМодификацииФайла = Дата("00010101000000") Тогда - Объект.ДатаМодификацииФайла = Объект.ДатаСоздания; - Объект.Записать(); - КонецЕсли; - - КонецЦикла; - - ПерезаписатьВсеФайлы(); // Чтобы перенеслись значения реквизита ДатаМодификацииФайла из версии в файл. - -КонецПроцедуры - // Создает новые файлы по аналогии с указанными. // Параметры: // МассивФайлов - Массив - массив объектов СправочникСсылка.Файлы - существующие файлы. @@ -3437,7 +2619,7 @@ Процедура СкопироватьФайлы(МассивФайлов, ВладелецНовогоФайла) Экспорт Для каждого Файл Из МассивФайлов Цикл - НовыйФайл = СкопироватьФайл(Файл, ВладелецНовогоФайла); + СкопироватьФайл(Файл, ВладелецНовогоФайла); КонецЦикла; КонецПроцедуры @@ -3459,120 +2641,6 @@ КонецПроцедуры -// Удаляет запись в регистре ХранимыеФайлыВерсий. -// -// Параметры: -// Файл - ссылка на файл. -// -Процедура УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(Файл) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НаборЗаписей = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Файл.Установить(Файл); - НаборЗаписей.Записать(); - -КонецПроцедуры - -// Переносит бинарный файл из ФайлХранилище справочника ВерсииФайлов в регистр сведений ХранимыеФайлыВерсий. -Процедура ПереместитьФайлыИзИнформационнойБазыВРегистрСведений() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.ТипХраненияФайла = &ТипХраненияФайла"; - - Запрос.УстановитьПараметр("ТипХраненияФайла", Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе); - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - Объект = Выборка.Ссылка.ПолучитьОбъект(); - - ДанныеВХранилище = Объект.ФайлХранилище.Получить(); - Если ТипЗнч(ДанныеВХранилище) = Тип("ДвоичныеДанные") Тогда - ЗаписатьФайлВИнформационнуюБазу(Выборка.Ссылка, Объект.ФайлХранилище); - Объект.ФайлХранилище = Новый ХранилищеЗначения(""); // очищаем значение - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Заполняет поле ДатаЗаема текущей датой. -Процедура ЗаполнитьДатуЗаема() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ДатаЗаема = ТекущаяДатаСеанса(); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Файлы.Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы"; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Если ЗначениеЗаполнено(Выборка.Ссылка.Редактирует) Тогда - Объект = Выборка.Ссылка.ПолучитьОбъект(); - // Чтобы прошла запись ранее подписанного объекта. - Объект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - Объект.ДатаЗаема = ДатаЗаема; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Переименовывает старые права в новые. -Процедура ЗаменитьПраваВНастройкахПравПапокФайлов() Экспорт - - Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Возврат; - КонецЕсли; - - МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); - - ТаблицаЗамены = МодульУправлениеДоступом.ТаблицаЗаменыПравВНастройкахПравОбъектов(); - - Строка = ТаблицаЗамены.Добавить(); - Строка.ТипВладельцев = Справочники.ПапкиФайлов.ПустаяСсылка(); - Строка.СтароеИмя = "ЧтениеПапокИФайлов"; - Строка.НовоеИмя = "Чтение"; - - Строка = ТаблицаЗамены.Добавить(); - Строка.ТипВладельцев = Справочники.ПапкиФайлов.ПустаяСсылка(); - Строка.СтароеИмя = "ДобавлениеПапокИФайлов"; - Строка.НовоеИмя = "ДобавлениеФайлов"; - - Строка = ТаблицаЗамены.Добавить(); - Строка.ТипВладельцев = Справочники.ПапкиФайлов.ПустаяСсылка(); - Строка.СтароеИмя = "ИзменениеПапокИФайлов"; - Строка.НовоеИмя = "ИзменениеФайлов"; - - Строка = ТаблицаЗамены.Добавить(); - Строка.ТипВладельцев = Справочники.ПапкиФайлов.ПустаяСсылка(); - Строка.СтароеИмя = "ИзменениеПапокИФайлов"; - Строка.НовоеИмя = "ИзменениеПапок"; - - Строка = ТаблицаЗамены.Добавить(); - Строка.ТипВладельцев = Справочники.ПапкиФайлов.ПустаяСсылка(); - Строка.СтароеИмя = "ПометкаУдаленияПапокИФайлов"; - Строка.НовоеИмя = "ПометкаУдаленияФайлов"; - - МодульУправлениеДоступом.ЗаменитьПраваВНастройкахПравОбъектов(ТаблицаЗамены); - -КонецПроцедуры - // Ставит файлу признак Зашифрован. Процедура УстановитьПризнакЗашифрован(ФайлСсылка, Зашифрован, УникальныйИдентификатор = Неопределено) Экспорт @@ -3611,7 +2679,6 @@ // Чтобы прошла запись ранее подписанного объекта. ВерсияОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); ВерсияОбъект.Записать(); - ВерсияОбъект.Разблокировать(); ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); @@ -3628,51 +2695,6 @@ КонецПроцедуры -// Получает количество версий с неизвлеченным текстом. -Процедура ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(ДополнительныеПараметры, АдресВоВременномХранилище) Экспорт - - КоличествоФайлов = 0; - - ТипыФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); - - Для Каждого Тип Из ТипыФайлов Цикл - - МетаданныеСправочникаФайлов = Метаданные.НайтиПоТипу(Тип); - - Запрос = Новый Запрос; - - ТекстЗапроса = - "ВЫБРАТЬ - | ЕСТЬNULL(КОЛИЧЕСТВО(Файлы.Ссылка), 0) КАК КоличествоФайлов - |ИЗ - | &ИмяСправочника КАК Файлы - |ГДЕ - | Файлы.СтатусИзвлеченияТекста В (ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - Если Тип = Тип("СправочникСсылка.ВерсииФайлов") Тогда - ТекстЗапроса = ТекстЗапроса + " - | И НЕ Файлы.Владелец.Зашифрован"; - Иначе - ТекстЗапроса = ТекстЗапроса + " - | И НЕ Файлы.Зашифрован"; - КонецЕсли; - КонецЕсли; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + МетаданныеСправочникаФайлов.Имя); - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - КоличествоФайлов = КоличествоФайлов + Выборка.КоличествоФайлов; - КонецЕсли - - КонецЦикла; - - ПоместитьВоВременноеХранилище(КоличествоФайлов, АдресВоВременномХранилище); - -КонецПроцедуры - // Записывает кодировку версии файла. // // Параметры: @@ -3729,7 +2751,6 @@ Файл = ВерсияСсылка; КонецЕсли; - Текст = ""; ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; НачатьТранзакцию(); @@ -3740,6 +2761,7 @@ БлокировкаВерсии.Заблокировать(); ВерсияОбъект = ВерсияСсылка.ПолучитьОбъект(); + Если МетаданныеВерсии.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда Если Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда @@ -3806,465 +2828,6 @@ КонецПроцедуры -Процедура ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейСВерсийФайловНаФайлы(Параметры) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЭлектронныеПодписи.ПодписанныйОбъект КАК Ссылка - |ИЗ - | РегистрСведенийЭлектронныеПодписи КАК ЭлектронныеПодписи - |ГДЕ - | ТИПЗНАЧЕНИЯ(ЭлектронныеПодписи.ПодписанныйОбъект) = ТИП(Справочник.ВерсииФайлов)"; - - Запрос.Текст = СтрЗаменить(Запрос.Текст, - "РегистрСведенийЭлектронныеПодписи", "РегистрСведений." + "ЭлектронныеПодписи"); - - МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); - -КонецПроцедуры - -Процедура ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы(Параметры) Экспорт - - ОбработкаЗавершена = Истина; - - ВыборкаСсылок = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.ВерсииФайлов"); - - ОбъектовОбработано = 0; - ПроблемныхОбъектов = 0; - - МассивСсылок = Новый Массив; - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировкиПоВерсии = Блокировка.Добавить("РегистрСведений." + "ЭлектронныеПодписи"); - ЭлементБлокировкиПоФайлу = Блокировка.Добавить("РегистрСведений." + "ЭлектронныеПодписи"); - - Пока ВыборкаСсылок.Следующий() Цикл - ВерсияСсылка = ВыборкаСсылок.Ссылка; - ЭлементБлокировкиПоВерсии.УстановитьЗначение("ПодписанныйОбъект", ВерсияСсылка); - ФайлСсылка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВерсияСсылка, "Владелец"); - Если ЗначениеЗаполнено(ФайлСсылка) Тогда - ЭлементБлокировкиПоВерсии.УстановитьЗначение("ПодписанныйОбъект", ФайлСсылка); - КонецЕсли; - НачатьТранзакцию(); - Попытка - Блокировка.Заблокировать(); - - НаборЗаписейПоВерсии = РегистрыСведений["ЭлектронныеПодписи"].СоздатьНаборЗаписей(); - НаборЗаписейПоВерсии.Отбор.ПодписанныйОбъект.Установить(ВерсияСсылка); - НаборЗаписейПоВерсии.Прочитать(); - - Если НаборЗаписейПоВерсии.Количество() > 0 Тогда - Если ЗначениеЗаполнено(ФайлСсылка) Тогда - НаборЗаписейПоФайлу = РегистрыСведений["ЭлектронныеПодписи"].СоздатьНаборЗаписей(); - НаборЗаписейПоФайлу.Отбор.ПодписанныйОбъект.Установить(ФайлСсылка); - НаборЗаписейПоФайлу.Прочитать(); - Если НаборЗаписейПоФайлу.Количество() = 0 Тогда - Для Каждого Запись Из НаборЗаписейПоВерсии Цикл - НоваяЗапись = НаборЗаписейПоФайлу.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяЗапись, Запись); - НоваяЗапись.ПодписанныйОбъект = ФайлСсылка; - КонецЦикла; - НаборЗаписейПоФайлу.Записать(); - КонецЕсли; - КонецЕсли; - НаборЗаписейПоВерсии.Очистить(); - НаборЗаписейПоВерсии.Записать(); - КонецЕсли; - - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВерсияСсылка); - ОбъектовОбработано = ОбъектовОбработано + 1; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - // Если не удалось обработать какой-либо объект, требуется повторить попытку. - ОбъектовОбработано = ОбъектовОбработано - 1; - ПроблемныхОбъектов = ПроблемныхОбъектов + 1; - - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обработать версию файла ""%1"" по причине: - |%2'"), - ВерсияСсылка, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, Метаданные.Справочники.ВерсииФайлов, ВерсияСсылка, ТекстСообщения); - КонецПопытки; - КонецЦикла; - - Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.ВерсииФайлов") Тогда - ОбработкаЗавершена = Ложь; - КонецЕсли; - - Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедуре ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы не удалось обработать некоторые версии файлов (пропущены): %1'"), - ПроблемныхОбъектов); - ВызватьИсключение ТекстСообщения; - Иначе - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, - Метаданные.Справочники.ВерсииФайлов, - , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедура ПеренестиЭлектронныеПодписиСВерсийФайловНаФайлы обработала очередную порцию версий файлов: %1'"), - ОбъектовОбработано)); - КонецЕсли; - - Параметры.ОбработкаЗавершена = ОбработкаЗавершена; - -КонецПроцедуры - -Функция ОбъектыПриПереносеЭлектронныхПодписейСВерсийФайловНаФайлы(Читаемые) Экспорт - - Если Читаемые Тогда - Возврат "Справочник.ВерсииФайлов, " - + Метаданные.РегистрыСведений["ЭлектронныеПодписи"].ПолноеИмя(); - Иначе - Возврат Метаданные.РегистрыСведений["ЭлектронныеПодписи"].ПолноеИмя(); - КонецЕсли; - -КонецФункции - -// Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, -// для которых необходимо обновить записи в реестре. -// -Процедура ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейИСертификатовШифрования(Параметры) Экспорт - - ТекстЗапросаДвеТабличныеЧасти = - "ВЫБРАТЬ - | Файлы.Ссылка КАК Ссылка - |ИЗ - | ТаблицаОбъектов КАК Файлы - |ГДЕ - | (ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | ТабличнаяЧастьУдалитьСертификатыШифрования КАК УдалитьСертификатыШифрования - | ГДЕ - | УдалитьСертификатыШифрования.Ссылка = Файлы.Ссылка) - | ИЛИ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | ТабличнаяЧастьУдалитьЭлектронныеПодписи КАК УдалитьЭлектронныеПодписи - | ГДЕ - | УдалитьЭлектронныеПодписи.Ссылка = Файлы.Ссылка))"; - - ТекстЗапросаТЧУдалитьСертификатыШифрования = - "ВЫБРАТЬ - | Файлы.Ссылка КАК Ссылка - |ИЗ - | ТаблицаОбъектов КАК Файлы - |ГДЕ - | ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | ТабличнаяЧастьУдалитьСертификатыШифрования КАК УдалитьСертификатыШифрования - | ГДЕ - | УдалитьСертификатыШифрования.Ссылка = Файлы.Ссылка)"; - - ТекстЗапросаТЧУдалитьЭлектронныеПодписи = - "ВЫБРАТЬ - | Файлы.Ссылка КАК Ссылка - |ИЗ - | ТаблицаОбъектов КАК Файлы - |ГДЕ - | ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | ТабличнаяЧастьУдалитьЭлектронныеПодписи КАК УдалитьЭлектронныеПодписи - | ГДЕ - | УдалитьЭлектронныеПодписи.Ссылка = Файлы.Ссылка)"; - - Запрос = Новый Запрос; - ПолныеИменаСправочников = ПолныеИменаСправочниковПрисоединенныхФайлов(); - - Для Каждого ПолноеИмя Из ПолныеИменаСправочников Цикл - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); - - ЕстьТЧУдалитьСертификатыШифрования = - ОбъектМетаданных.ТабличныеЧасти.Найти("УдалитьСертификатыШифрования") <> Неопределено; - - ЕстьТЧУдалитьЭлектронныеПодписи = - ОбъектМетаданных.ТабличныеЧасти.Найти("УдалитьЭлектронныеПодписи") <> Неопределено; - - Если ЕстьТЧУдалитьСертификатыШифрования И ЕстьТЧУдалитьЭлектронныеПодписи Тогда - ТекущийТекстЗапроса = ТекстЗапросаДвеТабличныеЧасти; - - ИначеЕсли ЕстьТЧУдалитьСертификатыШифрования Тогда - ТекущийТекстЗапроса = ТекстЗапросаТЧУдалитьСертификатыШифрования; - - ИначеЕсли ЕстьТЧУдалитьЭлектронныеПодписи Тогда - ТекущийТекстЗапроса = ТекстЗапросаТЧУдалитьЭлектронныеПодписи; - Иначе - Продолжить; - КонецЕсли; - - Если ЗначениеЗаполнено(Запрос.Текст) Тогда - Запрос.Текст = Запрос.Текст + " - | - |ОБЪЕДИНИТЬ ВСЕ - | - |"; - КонецЕсли; - - ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "ТаблицаОбъектов", ПолноеИмя); - - ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, - "ТабличнаяЧастьУдалитьСертификатыШифрования", ПолноеИмя + ".УдалитьСертификатыШифрования"); - - ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, - "ТабличнаяЧастьУдалитьЭлектронныеПодписи", ПолноеИмя + ".УдалитьЭлектронныеПодписи"); - - Запрос.Текст = Запрос.Текст + ТекущийТекстЗапроса; - КонецЦикла; - - МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); - -КонецПроцедуры - -Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры) Экспорт - - ОбработкаЗавершена = Истина; - - ПолныеИменаСправочников = ПолныеИменаСправочниковПрисоединенныхФайлов(); - - Для Каждого ПолноеИмяСправочника Из ПолныеИменаСправочников Цикл - ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведенийДляТаблицы(Параметры, - ПолноеИмяСправочника, ОбработкаЗавершена); - КонецЦикла; - - Параметры.ОбработкаЗавершена = ОбработкаЗавершена; - -КонецПроцедуры - -Функция ПолныеИменаСправочниковПрисоединенныхФайлов() Экспорт - - Массив = Новый Массив; - - Для Каждого ТипПрисоединенногоФайла Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл - ПолноеИмя = Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла).ПолноеИмя(); - Если СтрЗаканчиваетсяНа(ВРег(ПолноеИмя), ВРег("ВерсииПрисоединенныхФайлов")) Тогда - Продолжить; - КонецЕсли; - Массив.Добавить(Метаданные.НайтиПоТипу(ТипПрисоединенногоФайла).ПолноеИмя()); - КонецЦикла; - - Если Массив.Найти("Справочник.Файлы") = Неопределено Тогда - Массив.Добавить("Справочник.Файлы"); - КонецЕсли; - - Если Массив.Найти("Справочник.ВерсииФайлов") = Неопределено Тогда - Массив.Добавить("Справочник.ВерсииФайлов"); - КонецЕсли; - - Возврат Массив; - -КонецФункции - -Функция ИзменяемыеОбъектыПриПереносеЭлектронныхПодписейИСертификатовШифрования() Экспорт - - Возврат Метаданные.РегистрыСведений["ЭлектронныеПодписи"].ПолноеИмя() + ", " - + Метаданные.РегистрыСведений["СертификатыШифрования"].ПолноеИмя(); - -КонецФункции - -// Позволяет перенести элементы табличных частей УдалитьЭлектронныеПодписи и УдалитьСертификатыШифрования -// в регистры сведений ЭлектронныеПодписи и СертификатыШифрования. -// -// Параметры: -// ПараметрыОбновления - Структура - структура параметров отложенного обработчика обновления. -// -// ПолноеИмяОбъектаМетаданных - Строка - полное имя объекта метаданных, из которого переносятся данные табличных частей -// УдалитьЭлектронныеПодписи и УдалитьСертификатыШифрования. -// ОбработкаЗавершена - Булево - Истина, если обработаны все данные при обновлении ИБ. -// -Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведенийДляТаблицы(ПараметрыОбновления, ПолноеИмяОбъектаМетаданных, ОбработкаЗавершена) - - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); - - Если ОбъектМетаданных = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не указан объект для обработки электронных подписей и сертификатов шифрования.'"); - КонецЕсли; - - ЕстьТабличнаяЧастьЭП = ОбъектМетаданных.ТабличныеЧасти.Найти("УдалитьЭлектронныеПодписи") <> Неопределено; - ЕстьТабличнаяЧастьСШ = ОбъектМетаданных.ТабличныеЧасти.Найти("УдалитьСертификатыШифрования") <> Неопределено; - - ВыборкаСсылок = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(ПараметрыОбновления.Очередь, ПолноеИмяОбъектаМетаданных); - - ОбъектовОбработано = 0; - ПроблемныхОбъектов = 0; - - МассивСсылок = Новый Массив; - - НачатьТранзакцию(); - Попытка - Пока ВыборкаСсылок.Следующий() Цикл - МассивСсылок.Добавить(ВыборкаСсылок.Ссылка); - КонецЦикла; - - Если ЕстьТабличнаяЧастьЭП Тогда - ПеренестиДанныеЭлектроннойПодписиВРегистрСведений(МассивСсылок, - ПолноеИмяОбъектаМетаданных, ОбъектМетаданных); - КонецЕсли; - - Если ЕстьТабличнаяЧастьСШ Тогда - ПеренестиДанныеСертификатовВРегистрСведений(МассивСсылок, ПолноеИмяОбъектаМетаданных); - КонецЕсли; - - Для Каждого ОбъектСЭП Из МассивСсылок Цикл - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ОбъектСЭП); - КонецЦикла; - ОбъектовОбработано = МассивСсылок.Количество(); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - // Если не удалось обработать какой-либо объект, требуется повторить попытку. - ПроблемныхОбъектов = ПроблемныхОбъектов + МассивСсылок.Количество(); - - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обработать объект: %1 по причине: - |%2'"), - ОбъектМетаданных, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, ОбъектМетаданных, , ТекстСообщения); - КонецПопытки; - - Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(ПараметрыОбновления.Очередь, ПолноеИмяОбъектаМетаданных) Тогда - ОбработкаЗавершена = Ложь; - КонецЕсли; - - Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедуре ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений не удалось обработать некоторые объекты (пропущены): %1'"), - ПроблемныхОбъектов); - ВызватьИсключение ТекстСообщения; - Иначе - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, - ОбъектМетаданных, - , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений обработала очередную порцию объектов: %1'"), - ОбъектовОбработано)); - КонецЕсли; - -КонецПроцедуры - -// Для процедуры ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведенийДляТаблицы. -Процедура ПеренестиДанныеЭлектроннойПодписиВРегистрСведений(МассивОбъектов, ПолноеИмяОбъектаМетаданных, ОбъектМетаданных) - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТЧЭлектронныеПодписи.Ссылка КАК ПодписанныйОбъект, - | ТЧЭлектронныеПодписи.ДатаПодписи, - | ТЧЭлектронныеПодписи.ИмяФайлаПодписи, - | ТЧЭлектронныеПодписи.Комментарий, - | ТЧЭлектронныеПодписи.КомуВыданСертификат, - | ТЧЭлектронныеПодписи.Отпечаток, - | ТЧЭлектронныеПодписи.Подпись, - | ТЧЭлектронныеПодписи.УстановившийПодпись, - | ТЧЭлектронныеПодписи.НомерСтроки КАК ПорядковыйНомер, - | ТЧЭлектронныеПодписи.Сертификат, - | ТЧЭлектронныеПодписи.ПодписьВерна КАК ПодписьВерна, - | ТЧЭлектронныеПодписи.ДатаПроверкиПодписи КАК ДатаПроверкиПодписи - |ИЗ - | " + ПолноеИмяОбъектаМетаданных + ".УдалитьЭлектронныеПодписи КАК ТЧЭлектронныеПодписи - |ГДЕ - | ТЧЭлектронныеПодписи.Ссылка В(&МассивОбъектов) - |ИТОГИ - | ПО ПодписанныйОбъект"; - - Если ОбъектМетаданных = Метаданные.Справочники.ВерсииФайлов Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, - "ТЧЭлектронныеПодписи.Ссылка КАК ПодписанныйОбъект", - "ТЧЭлектронныеПодписи.Ссылка.Владелец КАК ПодписанныйОбъект"); - КонецЕсли; - - РеквизитыТЧ = ОбъектМетаданных.ТабличныеЧасти.УдалитьЭлектронныеПодписи.Реквизиты; - - Если РеквизитыТЧ.Найти("ПодписьВерна") = Неопределено Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТЧЭлектронныеПодписи.ПодписьВерна", "ЛОЖЬ"); - КонецЕсли; - - Если РеквизитыТЧ.Найти("ДатаПроверкиПодписи") = Неопределено Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТЧЭлектронныеПодписи.ДатаПроверкиПодписи", "Неопределено"); - КонецЕсли; - - Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); - Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - - Для Каждого Строка Из Выгрузка.Строки Цикл - Если Не ЗначениеЗаполнено(Строка.ПодписанныйОбъект) Тогда - Продолжить; - КонецЕсли; - НаборЗаписей = РегистрыСведений["ЭлектронныеПодписи"].СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ПодписанныйОбъект.Установить(Строка.ПодписанныйОбъект); - Для Каждого Подстрока Из Строка.Строки Цикл - ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Подстрока); - КонецЦикла; - // Используется параллельное обновление с нестандартной отметкой выполнения обработанных данных. - НаборЗаписей.ОбменДанными.Загрузка = Истина; - НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - НаборЗаписей.Записать(); - КонецЦикла; - -КонецПроцедуры - -// Для процедуры ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведенийДляТаблицы. -Процедура ПеренестиДанныеСертификатовВРегистрСведений(МассивОбъектов, ПолноеИмяОбъектаМетаданных) - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТЧСертификатыШифрования.Ссылка КАК ЗашифрованныйОбъект, - | ТЧСертификатыШифрования.Отпечаток, - | ТЧСертификатыШифрования.Сертификат, - | ТЧСертификатыШифрования.НомерСтроки КАК ПорядковыйНомер, - | ТЧСертификатыШифрования.Представление - |ИЗ - | " + ПолноеИмяОбъектаМетаданных + ".УдалитьСертификатыШифрования КАК ТЧСертификатыШифрования - |ГДЕ - | ТЧСертификатыШифрования.Ссылка В(&МассивОбъектов) - |ИТОГИ - | ПО ЗашифрованныйОбъект"; - - Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); - - Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - - Для Каждого Строка Из Выгрузка.Строки Цикл - НаборЗаписей = РегистрыСведений["СертификатыШифрования"].СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ЗашифрованныйОбъект.Установить(Строка.ЗашифрованныйОбъект); - Для Каждого Подстрока Из Строка.Строки Цикл - ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Подстрока); - КонецЦикла; - // Используется параллельное обновление с нестандартной отметкой выполнения обработанных данных. - НаборЗаписей.ОбменДанными.Загрузка = Истина; - НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - НаборЗаписей.Записать(); - КонецЦикла; - -КонецПроцедуры - ////////////////////////////////////////////////////////////////////////////////////////////////// ///// Общие файловые функции // См. эту процедуру в модуле РаботаСФайламиСлужебный. @@ -4282,8 +2845,6 @@ // Только для внутреннего использования. Процедура ПроверитьПодписи(ИсходныеДанные, ДанныеСтрок) Экспорт - ДатаПроверкиПодписи = ТекущаяДатаСеанса(); - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда Возврат; КонецЕсли; @@ -4305,60 +2866,6 @@ КонецПроцедуры -// Возвращает номер по нарастанию. Предыдущее значение берется из регистра сведений НомераОтсканированныхФайлов. -// Параметры: -// Владелец - ЛюбаяСсылка - владелец файла. -// -// Возвращаемое значение: -// Число - новый номер для сканирования. -// -Функция ПолучитьНовыйНомерДляСканирования(Владелец) Экспорт - - // Подготовить структуру отбора по измерениям. - СтруктураОтбора = Новый Структура; - СтруктураОтбора.Вставить("Владелец", Владелец); - - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НомераОтсканированныхФайлов"); - ЭлементБлокировки.УстановитьЗначение("Владелец", Владелец); - Блокировка.Заблокировать(); - - // Получить структуру с данными ресурсов записи. - СтруктураРесурсов = РегистрыСведений.НомераОтсканированныхФайлов.Получить(СтруктураОтбора); - - // Получить максимальный номер из регистра. - Номер = СтруктураРесурсов.Номер; - Номер = Номер + 1; // увеличим на 1 - - УстановитьОтключениеБезопасногоРежима(Истина); - УстановитьПривилегированныйРежим(Истина); - - // Запишем новый номер в регистр. - НаборЗаписей = РегистрыСведений.НомераОтсканированныхФайлов.СоздатьНаборЗаписей(); - - НаборЗаписей.Отбор.Владелец.Установить(Владелец); - - НоваяЗапись = НаборЗаписей.Добавить(); - НоваяЗапись.Владелец = Владелец; - НоваяЗапись.Номер = Номер; - - НаборЗаписей.Записать(); - - УстановитьПривилегированныйРежим(Ложь); - УстановитьОтключениеБезопасногоРежима(Ложь); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Возврат Номер; - -КонецФункции - // Заносит номер в регистр сведений НомераОтсканированныхФайлов. // // Параметры: @@ -4389,6 +2896,7 @@ КонецЕсли; Номер = НовыйНомер; + УстановитьПривилегированныйРежим(Истина); // Запишем новый номер в регистр. НаборЗаписей = РегистрыСведений.НомераОтсканированныхФайлов.СоздатьНаборЗаписей(); @@ -4411,13 +2919,9 @@ Функция ПоместитьФайлыВоВременноеХранилище(Параметры) Экспорт - Перем ЗаписьZipФайла, ИмяАрхива; - Результат = Новый Массив; - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ИмяВременнойПапки); - ИспользованныеИменаФайлов = Новый Соответствие; Для Каждого ФайлВложение Из Параметры.МассивФайлов Цикл РаботаСФайламиСлужебный.СформироватьСписокФайловДляОтправкиПоПочте(Результат, ФайлВложение, Параметры.ИдентификаторФормы); diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index 5d0dbf5b2..f1a628042 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Работа с файлами". // @@ -5,6 +13,13 @@ #Область СлужебныйПрограммныйИнтерфейс +// Возвращает путь к рабочему каталогу пользователя. +Функция РабочийКаталогПользователя() Экспорт + + Возврат РаботаСФайламиСлужебныйКлиентПовтИсп.РабочийКаталогПользователя(); + +КонецФункции + // Открывает форму папки со списком файлов. // // Параметры: @@ -85,12 +100,15 @@ Результат.Вставить("ФайлСсылка", Неопределено); Результат.Вставить("ТекстОшибки", ""); + ФильтрДиалога = ?(ПараметрыВыполнения.Свойство("ФильтрДиалогаВыбора"), + ПараметрыВыполнения.ФильтрДиалогаВыбора, НСтр("ru = 'Все файлы (*.*)|*.*'")); + Если Не ПараметрыВыполнения.Свойство("ПолноеИмяФайла") Тогда // Загрузить из файловой системы с расширением работы с файлами. ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.МножественныйВыбор = Ложь; ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выбор файла'"); - ДиалогВыбораФайла.Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'"); + ДиалогВыбораФайла.Фильтр = ФильтрДиалога; ДиалогВыбораФайла.Каталог = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(ПараметрыВыполнения.ВладелецФайла); Если НЕ ДиалогВыбораФайла.Выбрать() Тогда Возврат Результат; @@ -103,10 +121,21 @@ КонецЕсли; ФайлКлиента = Новый Файл(ПараметрыВыполнения.ПолноеИмяФайла); + Если ПараметрыВыполнения.Свойство("МаксимальныйРазмер") + И ПараметрыВыполнения.МаксимальныйРазмер > 0 + И ФайлКлиента.Размер() > ПараметрыВыполнения.МаксимальныйРазмер*1024*1024 Тогда + + ТекстОшибки = НСтр("ru = 'Размер файла превышает %1 Мб.'"); + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + ПараметрыВыполнения.МаксимальныйРазмер); + + Возврат Результат; + + КонецЕсли; - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьВозможностьЗагрузкиФайла(ФайлКлиента); + ПроверитьВозможностьЗагрузкиФайла(ФайлКлиента); - ОбщиеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); + ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); ИзвлекатьТекстыФайловНаКлиенте = НЕ ОбщиеНастройки.ИзвлекатьТекстыФайловНаСервере; Если ИзвлекатьТекстыФайловНаКлиенте Тогда АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ФайлКлиента.ПолноеИмя, @@ -114,13 +143,7 @@ Иначе АдресВременногоХранилищаТекста = ""; КонецЕсли; - - Если ПараметрыВыполнения.ИмяСоздаваемогоФайла <> Неопределено Тогда - ИмяСоздания = ПараметрыВыполнения.ИмяСоздаваемогоФайла; - Иначе - ИмяСоздания = ФайлКлиента.ИмяБезРасширения; - КонецЕсли; - + // Помещение файла во временное хранилище. АдресВременногоХранилищаФайла = ""; @@ -138,6 +161,21 @@ АдресВременногоХранилищаФайла = ПомещенныеФайлы[0].Хранение; КонецЕсли; +#Если МобильныйКлиент Тогда + ПредставлениеНаМобильномУстройстве = ФайлКлиента.ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства(); + РасширениеФайла = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ПредставлениеНаМобильномУстройстве); + ИмяФайлаБезРасширения = СтрЗаменить(ПредставлениеНаМобильномУстройстве, "." + РасширениеФайла, ""); +#Иначе + РасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ФайлКлиента.Расширение); + ИмяФайлаБезРасширения = ФайлКлиента.ИмяБезРасширения; +#КонецЕсли + + Если ПараметрыВыполнения.ИмяСоздаваемогоФайла <> Неопределено Тогда + ИмяСоздания = ПараметрыВыполнения.ИмяСоздаваемогоФайла; + Иначе + ИмяСоздания = ИмяФайлаБезРасширения; + КонецЕсли; + // Создание карточки Файла в БД. Попытка Если РаботаСФайламиСлужебныйКлиентПовтИсп.ЭтоСправочникФайлы(ПараметрыВыполнения.ВладелецФайла) Тогда @@ -146,13 +184,14 @@ СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; СведенияОФайле.ЗаписатьВИсторию = Истина; СведенияОФайле.ИмяБезРасширения = ИмяСоздания; + СведенияОФайле.РасширениеБезТочки = РасширениеФайла; Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ПараметрыВыполнения.ВладелецФайла, СведенияОФайле); Иначе ПараметрыФайла = Новый Структура; ПараметрыФайла.Вставить("ВладелецФайлов", ПараметрыВыполнения.ВладелецФайла); ПараметрыФайла.Вставить("Автор", Неопределено); - ПараметрыФайла.Вставить("ИмяБезРасширения", ФайлКлиента.ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ФайлКлиента.Расширение)); + ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяФайлаБезРасширения); + ПараметрыФайла.Вставить("РасширениеБезТочки", РасширениеФайла); ПараметрыФайла.Вставить("ВремяИзменения"); ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное"); @@ -162,7 +201,7 @@ КонецЕсли; Результат.ФайлДобавлен = Истина; Исключение - Результат.ТекстОшибки = РаботаСФайламиСлужебныйКлиентСервер.ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке()); + Результат.ТекстОшибки = ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке()); КонецПопытки; Если Результат.ТекстОшибки <> "" Тогда @@ -254,7 +293,12 @@ ПараметрыОповещения.Вставить("ЭтоНовый" , Истина); Оповестить("Запись_Файл", ПараметрыОповещения, ПрисоединенныеФайлыМассив); КонецЕсли; - + + Если ДополнительныеПараметры.Свойство("ОбработчикРезультата") + И ДополнительныеПараметры.ОбработчикРезультата <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, ПрисоединенныеФайлыМассив); + КонецЕсли; + КонецЕсли; Иначе // Если веб-клиент без подключенного расширения. @@ -271,12 +315,7 @@ // ПредставлениеКоманды - Строка - Необязательный. Имя команды, для выполнения которой необходимо расширение. // Процедура ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(ОбработчикРезультата, ПредставлениеКоманды = "") Экспорт - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ТекстПредупреждения = НСтр("ru = 'Выполнение команды ""%1"" в мобильном клиенте не поддерживается.'"); - - ИначеЕсли Не КлиентПоддерживаетСинхронныеВызовы() Тогда + Если Не КлиентПоддерживаетСинхронныеВызовы() Тогда ТекстПредупреждения = НСтр("ru = 'Выполнение команды ""%1"" в браузерах |Google Chrome и Mozilla Firefox не поддерживается.'"); Иначе @@ -291,13 +330,6 @@ ВернутьРезультатПослеПоказаПредупреждения(ОбработчикРезультата, ТекстПредупреждения, Неопределено); КонецПроцедуры -// Возвращает путь к рабочему каталогу пользователя. -Функция РабочийКаталогПользователя() Экспорт - - Возврат РаботаСФайламиСлужебныйКлиентПовтИсп.РабочийКаталогПользователя(); - -КонецФункции - // Сохраняет путь к рабочему каталогу пользователя в настройках. // // Параметры: @@ -452,7 +484,7 @@ Возврат Ложь; КонецЕсли; - ОбщегоНазначенияКлиент.ОткрытьПроводник(ФайлНаДиске.ПолноеИмя); + ФайловаяСистемаКлиент.ОткрытьПроводник(ФайлНаДиске.ПолноеИмя); Возврат Истина; @@ -478,7 +510,7 @@ Если Не КлиентПоддерживаетСинхронныеВызовы() Тогда ВыполнитьОбработкуОповещения(ОписаниеОповещения, Ложь); Иначе - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); КонецЕсли; КонецПроцедуры @@ -540,6 +572,27 @@ КонецФункции +// Нажатие команды "Показывать служебные файлы" в списке файлов. +// +// Параметры: +// Список - динамический список. +// +// Возвращаемое значение: +// Булево - отображение служебных файлов в списке. +// +Функция ПоказыватьСлужебныеФайлыНажатие(Список) Экспорт + + ЭлементОтбора = ОбщегоНазначенияКлиентСервер.НайтиЭлементОтбораПоПредставлению(Список.Отбор.Элементы, "СкрыватьСлужебные"); + Если ЭлементОтбора = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + ПоказыватьСлужебныеФайлы = ЭлементОтбора.Использование; + ЭлементОтбора.Использование = Не ПоказыватьСлужебныеФайлы; + Возврат ПоказыватьСлужебныеФайлы; + +КонецФункции + // Сохраняет отредактированный файл в ИБ и снимает с него блокировку. // // Параметры: @@ -655,9 +708,14 @@ КонецПроцедуры +#Область Сканирование + // Проверяет установлена ли компонента сканирования и есть ли хоть один сканер. Функция ДоступнаКомандаСканировать() Экспорт +#Если МобильныйКлиент Тогда + Возврат СредстваМультимедиа.ПоддерживаетсяФотоснимок(); +#Иначе Если Не ПроинициализироватьКомпоненту(Ложь) Тогда Возврат Ложь; КонецЕсли; @@ -667,13 +725,42 @@ КонецЕсли; Возврат Ложь; +#КонецЕсли КонецФункции // Открывает диалог сканирования и просмотра картинки. Процедура ДобавитьСоСканера(ПараметрыВыполнения) Экспорт - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда +#Если МобильныйКлиент Тогда + + ДанныеМультимедиа = СредстваМультимедиа.СделатьФотоснимок(); + Если ДанныеМультимедиа = Неопределено Тогда + ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); + Возврат; + КонецЕсли; + + ИмяБезРасширения = "img_" + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=yyyyMMdd_hhmmss"); + + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("Автор", Неопределено); + ПараметрыФайла.Вставить("ВладелецФайлов", ПараметрыВыполнения.ВладелецФайла); + ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); + ПараметрыФайла.Вставить("РасширениеБезТочки", ДанныеМультимедиа.РасширениеФайла); + ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); + ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено); + + АдресФайла = ПоместитьВоВременноеХранилище(ДанныеМультимедиа.ПолучитьДвоичныеДанные(), + ПараметрыВыполнения.ФормаВладелец.УникальныйИдентификатор); + + Результат = Новый Структура; + Результат.Вставить("ФайлДобавлен", Истина); + Результат.Вставить("ФайлСсылка", РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл(ПараметрыФайла, АдресФайла)); + ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Результат); + +#Иначе + + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); Возврат; КонецЕсли; @@ -687,8 +774,12 @@ ОбработчикРезультата = ПодготовитьОбработчикДляДиалога(ПараметрыВыполнения.ОбработчикРезультата); ОткрытьФорму("Обработка.Сканирование.Форма.РезультатСканирования", ПараметрыФормы, ПараметрыВыполнения.ФормаВладелец, , , , ОбработчикРезультата); +#КонецЕсли + КонецПроцедуры +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции работы с файлами операционной системы. @@ -712,69 +803,6 @@ КонецПроцедуры -// Извлекает текст из файла на диске на клиенте и помещает результат на сервер. -Процедура ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, - АдресФайла, - Расширение, - УникальныйИдентификатор, - Кодировка = Неопределено) Экспорт - -#Если НЕ ВебКлиент Тогда - ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(Расширение); - - Если Не ПолучитьФайл(АдресФайла, ИмяФайлаСПутем, Ложь) Тогда - Возврат; - КонецЕсли; - - // Для варианта с хранением файлов на диске (на сервере) - // удаление Файла из временного хранилища после получения. - Если ЭтоАдресВременногоХранилища(АдресФайла) Тогда - УдалитьИзВременногоХранилища(АдресФайла); - КонецЕсли; - - РезультатИзвлечения = "НеИзвлечен"; - АдресВременногоХранилищаТекста = ""; - - Текст = ""; - Если ИмяФайлаСПутем <> "" Тогда - - // Извлечение текста из файла. - Отказ = Ложь; - Текст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Кодировка); - - Если Отказ = Ложь Тогда - РезультатИзвлечения = "Извлечен"; - - Если Не ПустаяСтрока(Текст) Тогда - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - ТекстовыйФайл = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.UTF8); - ТекстовыйФайл.Записать(Текст); - ТекстовыйФайл.Закрыть(); - - РезультатЗагрузки = ПоместитьФайлСДискаВоВременноеХранилище(ИмяВременногоФайла, , УникальныйИдентификатор); - Если РезультатЗагрузки <> Неопределено Тогда - АдресВременногоХранилищаТекста = РезультатЗагрузки; - КонецЕсли; - - УдалитьФайлы(ИмяВременногоФайла); - КонецЕсли; - Иначе - // Когда Текст извлечь "некому" - это нормальный случай, - // сообщение об ошибке не формируется. - РезультатИзвлечения = "ИзвлечьНеУдалось"; - КонецЕсли; - - КонецЕсли; - - УдалитьФайлы(ИмяФайлаСПутем); - - РаботаСФайламиСлужебныйВызовСервера.ЗаписатьРезультатИзвлеченияТекста( - ФайлИлиВерсияФайла, РезультатИзвлечения, АдресВременногоХранилищаТекста); - -#КонецЕсли - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -821,10 +849,167 @@ КонецПроцедуры +#Область ИзвлечениеТекста + +// Извлекает текст из файла на диске на клиенте и помещает результат на сервер. +Процедура ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, + АдресФайла, + Расширение, + УникальныйИдентификатор, + Кодировка = Неопределено) Экспорт + +#Если НЕ ВебКлиент Тогда + ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(Расширение); + + Если Не ПолучитьФайл(АдресФайла, ИмяФайлаСПутем, Ложь) Тогда + Возврат; + КонецЕсли; + + // Для варианта с хранением файлов на диске (на сервере) + // удаление Файла из временного хранилища после получения. + Если ЭтоАдресВременногоХранилища(АдресФайла) Тогда + УдалитьИзВременногоХранилища(АдресФайла); + КонецЕсли; + + РезультатИзвлечения = "НеИзвлечен"; + АдресВременногоХранилищаТекста = ""; + + Текст = ""; + Если ИмяФайлаСПутем <> "" Тогда + + // Извлечение текста из файла. + Отказ = Ложь; + Текст = ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Кодировка); + + Если Отказ = Ложь Тогда + РезультатИзвлечения = "Извлечен"; + + Если Не ПустаяСтрока(Текст) Тогда + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + ТекстовыйФайл = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.UTF8); + ТекстовыйФайл.Записать(Текст); + ТекстовыйФайл.Закрыть(); + + РезультатЗагрузки = ПоместитьФайлСДискаВоВременноеХранилище(ИмяВременногоФайла, , УникальныйИдентификатор); + Если РезультатЗагрузки <> Неопределено Тогда + АдресВременногоХранилищаТекста = РезультатЗагрузки; + КонецЕсли; + + УдалитьФайлы(ИмяВременногоФайла); + КонецЕсли; + Иначе + // Когда Текст извлечь "некому" - это нормальный случай, + // сообщение об ошибке не формируется. + РезультатИзвлечения = "ИзвлечьНеУдалось"; + КонецЕсли; + + КонецЕсли; + + УдалитьФайлы(ИмяФайлаСПутем); + + РаботаСФайламиСлужебныйВызовСервера.ЗаписатьРезультатИзвлеченияТекста( + ФайлИлиВерсияФайла, РезультатИзвлечения, АдресВременногоХранилищаТекста); + +#КонецЕсли + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции +// Возвращает Истина, если файл с таким расширением можно загружать. +Функция ПроверитьРасширениеФайлаДляЗагрузки(РасширениеФайла, ВызыватьИсключение = Истина) + + ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); + Если НЕ ОбщиеНастройки.ЗапретЗагрузкиФайловПоРасширению Тогда + Возврат Истина; + КонецЕсли; + + Если РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( + ОбщиеНастройки.СписокЗапрещенныхРасширений, РасширениеФайла) Тогда + + Если ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. + |Обратитесь к администратору.'"), + РасширениеФайла); + Иначе + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Извлечь текст из файла и возвратить его в виде строки. +Функция ИзвлечьТекст(ПолноеИмяФайла, Отказ = Ложь, Кодировка = Неопределено) + + ИзвлеченныйТекст = ""; + + Попытка + Файл = Новый Файл(ПолноеИмяФайла); + Если Не Файл.Существует() Тогда + Отказ = Истина; + Возврат ИзвлеченныйТекст; + КонецЕсли; + Исключение + Отказ = Истина; + Возврат ИзвлеченныйТекст; + КонецПопытки; + + Прекратить = Ложь; + ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); + +#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда + + РасширениеИмениФайла = + ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ПолноеИмяФайла); + + РасширениеФайлаВСписке = РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( + ОбщиеНастройки.СписокРасширенийТекстовыхФайлов, РасширениеИмениФайла); + + Если РасширениеФайлаВСписке Тогда + Возврат РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстИзТекстовогоФайла( + ПолноеИмяФайла, Кодировка, Отказ); + КонецЕсли; + + Попытка + Извлечение = Новый ИзвлечениеТекста(ПолноеИмяФайла); + ИзвлеченныйТекст = Извлечение.ПолучитьТекст(); + Исключение + // Когда текст некому извлечь исключение не требуется. Это нормальный случай. + ИзвлеченныйТекст = ""; + Прекратить = Истина; + КонецПопытки; + +#КонецЕсли + + Если ПустаяСтрока(ИзвлеченныйТекст) Тогда + + РасширениеИмениФайла = + ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ПолноеИмяФайла); + + РасширениеФайлаВСписке = РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( + ОбщиеНастройки.СписокРасширенийФайловOpenDocument, РасширениеИмениФайла); + + Если РасширениеФайлаВСписке Тогда + Возврат РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстOpenDocument(ПолноеИмяФайла, Отказ); + КонецЕсли; + + КонецЕсли; + + Если Прекратить Тогда + Отказ = Истина; + КонецЕсли; + + Возврат ИзвлеченныйТекст; + +КонецФункции + // Возвращает путь к рабочему каталогу данных пользователя. Этот каталог используется // в качестве начального значения для рабочего каталога пользователя. // @@ -994,7 +1179,7 @@ // В рабочем каталоге более новый файл. Если ДанныеФайла.ВРабочемКаталогеНаЧтение = Ложь - И ДанныеФайла.Редактирует = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда + И ДанныеФайла.Редактирует = ПользователиКлиент.АвторизованныйПользователь() Тогда // Файл в рабочем каталоге для редактирования и занят текущим пользователем. ВернутьРезультат(ОбработчикРезультата, "ОткрытьСуществующий"); @@ -1109,7 +1294,7 @@ // ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. // Процедура ВывестиНапоминаниеПриРедактировании(ОбработчикРезультата) - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); Если ПерсональныеНастройки.ПоказыватьПодсказкиПриРедактированииФайлов = Истина Тогда Если НЕ РасширениеРаботыСФайламиПодключено() Тогда ТекстНапоминания = @@ -1173,10 +1358,6 @@ Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда Возврат; КонецЕсли; - МодульЭлектроннаяПодписьКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); - - ПроверятьЭлектронныеПодписиНаСервере = - МодульЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере; Если ДополнительныеПараметры.ВыделенныеСтроки = Неопределено Тогда Коллекция = ДополнительныеПараметры.Форма.ЭлектронныеПодписи; @@ -1191,10 +1372,11 @@ ИспользоватьЭлектроннуюПодписьВМоделиСервиса = Ложь; КонецЕсли; + МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); + Если ИспользоватьЭлектроннуюПодписьВМоделиСервиса - Или Не ПроверятьЭлектронныеПодписиНаСервере Тогда + Или Не МодульЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда - МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); ДополнительныеПараметры.Вставить("Данные", Данные); ДополнительныеПараметры.Вставить("Коллекция", Коллекция); ДополнительныеПараметры.Вставить("МодульЭлектроннаяПодписьКлиент", МодульЭлектроннаяПодписьКлиент); @@ -1210,7 +1392,7 @@ КонецЕсли; Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда - АдресДанных = ПоместитьВоВременноеХранилище(Данные, ДополнительныеПараметры.Форма.УникальныйИдентификатор); + АдресДанных = ПоместитьВоВременноеХранилище(Данные, ДополнительныеПараметры.ИдентификаторФормы); Иначе АдресДанных = Данные; КонецЕсли; @@ -1265,7 +1447,7 @@ Знач ИмяСоздаваемогоФайла = "", Знач ГруппаФайлов = Неопределено) - ОбщиеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); + ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); ТекущаяПозиция = 0; @@ -1277,7 +1459,7 @@ Файл = Новый Файл(ПолноеИмяФайла); - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьВозможностьЗагрузкиФайла(Файл); + ПроверитьВозможностьЗагрузкиФайла(Файл); Если ОбщиеНастройки.ИзвлекатьТекстыФайловНаСервере Тогда АдресВременногоХранилищаТекста = ""; @@ -1297,7 +1479,7 @@ ПомещенныеФайлы = Новый Массив; Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ИдентификаторФормы) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при помещении файла |""%1"" @@ -1308,13 +1490,22 @@ АдресВременногоХранилищаФайла = ПомещенныеФайлы[0].Хранение; - ИмяБезРасширения = ?(ПустаяСтрока(ИмяСоздаваемогоФайла), Файл.ИмяБезРасширения, ИмяСоздаваемогоФайла); + #Если МобильныйКлиент Тогда + ПредставлениеНаМобильномУстройстве = Файл.ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства(); + РасширениеФайла = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ПредставлениеНаМобильномУстройстве); + ИмяФайлаБезРасширения = СтрЗаменить(ПредставлениеНаМобильномУстройстве, "." + РасширениеФайла, ""); + #Иначе + РасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(Файл.Расширение); + ИмяФайлаБезРасширения = Файл.ИмяБезРасширения; + #КонецЕсли + + ИмяБезРасширения = ?(ПустаяСтрока(ИмяСоздаваемогоФайла), ИмяФайлаБезРасширения, ИмяСоздаваемогоФайла); // Создание карточки Файла в базе данных. ПараметрыФайла = Новый Структура; ПараметрыФайла.Вставить("ВладелецФайлов", ВладелецФайла); ПараметрыФайла.Вставить("Автор", Неопределено); ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); - ПараметрыФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(Файл.Расширение)); + ПараметрыФайла.Вставить("РасширениеБезТочки", РасширениеФайла); ПараметрыФайла.Вставить("ГруппаФайлов", ГруппаФайлов); ПараметрыФайла.Вставить("ВремяИзменения"); ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ВремяИзмененияУниверсальное); @@ -1392,24 +1583,18 @@ // Продолжение процедуры ПоместитьВыбранныеФайлыВХранилищеВеб. Процедура ПоместитьВыбранныеФайлыВХранилищеВебЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт + Обработчик = ДополнительныеПараметры.ОбработчикРезультата; Если Не Результат Тогда - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, Неопределено); + ВыполнитьОбработкуОповещения(Обработчик, Неопределено); Возврат; КонецЕсли; АдресВременногоХранилищаФайла = Адрес; ИмяФайла = ВыбранноеИмяФайла; ВладелецФайла = ДополнительныеПараметры.ВладелецФайла; - - // До исправления 30163819 - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ФайлМобильныйКлиент = Новый Файл(ВыбранноеИмяФайла); - ИмяФайла = ФайлМобильныйКлиент.ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства(); - - КонецЕсли; - СтруктураПути = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ВыбранноеИмяФайла); + ГруппаФайлов = ?(Обработчик.ДополнительныеПараметры.Свойство("ГруппаФайлов"), + Обработчик.ДополнительныеПараметры.ГруппаФайлов, ""); Если Не ПустаяСтрока(СтруктураПути.Расширение) Тогда Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураПути.Расширение); @@ -1422,13 +1607,13 @@ ИмяФайла); КонецЕсли; - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьРасширениеФайлаДляЗагрузки(Расширение); + ПроверитьРасширениеФайлаДляЗагрузки(Расширение); ПараметрыФайла = Новый Структура; ПараметрыФайла.Вставить("ВладелецФайлов", ВладелецФайла); ПараметрыФайла.Вставить("Автор", Неопределено); ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); ПараметрыФайла.Вставить("РасширениеБезТочки", Расширение); - ПараметрыФайла.Вставить("ГруппаФайлов", ""); + ПараметрыФайла.Вставить("ГруппаФайлов", ?(ЗначениеЗаполнено(ГруппаФайлов), ГруппаФайлов, "")); ПараметрыФайла.Вставить("ВремяИзменения"); ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное"); @@ -1437,7 +1622,7 @@ ПараметрыФайла, АдресВременногоХранилищаФайла); - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, ПрисоединенныйФайл); + ВыполнитьОбработкуОповещения(Обработчик, ПрисоединенныйФайл); КонецПроцедуры @@ -1471,7 +1656,7 @@ Строка(ОбъектСсылка)); Возврат Ложь; Иначе - Если РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ЭтоПолноправныйПользователь Тогда + Если ПерсональныеНастройкиРаботыСФайлами().ЭтоПолноправныйПользователь Тогда Возврат Истина; КонецЕсли; @@ -1568,7 +1753,7 @@ #Если Не ВебКлиент Тогда - Текст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекст(ПолноеИмяФайла, Отказ, Кодировка); + Текст = ИзвлечьТекст(ПолноеИмяФайла, Отказ, Кодировка); Если ПустаяСтрока(Текст) Тогда Возврат ""; @@ -1592,6 +1777,94 @@ КонецФункции +// Возвращает строковую константу для формирования сообщений журнала регистрации. +// +// Возвращаемое значение: +// Строка +// +Функция СобытиеЖурналаРегистрации() + + Возврат НСтр("ru = 'Файлы'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + +КонецФункции + +// Возвращает текст сообщения об ошибке создания нового файла. +// +// Параметры: +// ИнформацияОбОшибке - ИнформацияОбОшибке. +// +Функция ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка создания нового файла. + | + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецФункции + +// Проверяет расширение файла и размер. +Функция ПроверитьВозможностьЗагрузкиФайла(Файл, + ВызыватьИсключение = Истина, + МассивИменФайловСОшибками = Неопределено) + + ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); + + // Размер файла слишком большой. + Если Файл.Размер() > ОбщиеНастройки.МаксимальныйРазмерФайла Тогда + + РазмерВМб = Файл.Размер() / (1024 * 1024); + РазмерВМбМакс = ОбщиеНастройки.МаксимальныйРазмерФайла / (1024 * 1024); + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размер файла ""%1"" (%2 Мб) + |превышает максимально допустимый размер файла (%3 Мб).'"), + Файл.Имя, + РаботаСФайламиСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + РаботаСФайламиСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + + Если ВызыватьИсключение Тогда + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + + Запись = Новый Структура; + Запись.Вставить("ИмяФайла", Файл.ПолноеИмя); + Запись.Вставить("Ошибка", ОписаниеОшибки); + + МассивИменФайловСОшибками.Добавить(Запись); + Возврат Ложь; + КонецЕсли; + + // Проверка расширения файла. + Если Не ПроверитьРасширениеФайлаДляЗагрузки(Файл.Расширение, Ложь) Тогда + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. + |Обратитесь к администратору.'"), + Файл.Расширение); + + Если ВызыватьИсключение Тогда + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + + Запись = Новый Структура; + Запись.Вставить("ИмяФайла", Файл.ПолноеИмя); + Запись.Вставить("Ошибка", ОписаниеОшибки); + + МассивИменФайловСОшибками.Добавить(Запись); + Возврат Ложь; + КонецЕсли; + + // Временные файлы Word не импортируются. + Если СтрНачинаетсяС(Файл.Имя, "~") + И Файл.ПолучитьНевидимость() Тогда + + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Завершение редактирования Файла и помещение его на сервер. @@ -1835,7 +2108,7 @@ КонецЕсли; КонецЕсли; - ОбщиеНастройкиРаботыСФайлами = РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); + ОбщиеНастройкиРаботыСФайлами = ОбщиеНастройкиРаботыСФайлами(); Если Не ОбщиеНастройкиРаботыСФайлами.ИзвлекатьТекстыФайловНаСервере Тогда Попытка СведенияОФайле.АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ПараметрыВыполнения.ПолныйПутьКФайлу, @@ -1871,7 +2144,7 @@ ЗадаватьВопрос = Ложь; Иначе - ПерсональныеНастройкиРаботыСФайлами = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройкиРаботыСФайлами = ПерсональныеНастройкиРаботыСФайлами(); УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ПерсональныеНастройкиРаботыСФайлами.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования; ЗадаватьВопрос = ПерсональныеНастройкиРаботыСФайлами.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов; @@ -2267,7 +2540,11 @@ // Возвращаемое значение: // Булево. Истина, если операция выполнена успешно. // -Процедура ОбновитьИзФайлаНаДиске(ОбработчикРезультата, ДанныеФайла, ИдентификаторФормы) +Процедура ОбновитьИзФайлаНаДиске( + ОбработчикРезультата, + ДанныеФайла, + ИдентификаторФормы, + ПараметрыДобавленияФайла = Неопределено) Если Не РасширениеРаботыСФайламиПодключено() Тогда ВернутьРезультат(ОбработчикРезультата, Ложь); @@ -2293,27 +2570,35 @@ Диалог.Каталог = ПутьВыбора; Диалог.ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( - ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); - - РасширениеДляЗашифрованныхФайлов = ""; - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьКлиентСервер = - ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); + Если ПараметрыДобавленияФайла <> Неопределено + И ПараметрыДобавленияФайла.Свойство("ФильтрДиалогаВыбора") + И Не ПустаяСтрока(ПараметрыДобавленияФайла.ФильтрДиалогаВыбора) Тогда + + Диалог.Фильтр = ПараметрыДобавленияФайла.ФильтрДиалогаВыбора; - Если МодульЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ИспользоватьШифрование Тогда - РасширениеДляЗашифрованныхФайлов = - МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляЗашифрованныхФайлов; - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(РасширениеДляЗашифрованныхФайлов) Тогда - Фильтр = НСтр("ru = 'Файл (*.%1)|*.%1|Зашифрованный файл (*.%2)|*.%2|Все файлы (*.*)|*.*'"); - Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Фильтр, ДанныеФайла.Расширение, РасширениеДляЗашифрованныхФайлов); Иначе - Фильтр = НСтр("ru = 'Файл (*.%1)|*.%1|Все файлы (*.*)|*.*'"); - Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Фильтр, ДанныеФайла.Расширение); + + РасширениеДляЗашифрованныхФайлов = ""; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); + + Если МодульЭлектроннаяПодписьКлиент.ИспользоватьШифрование() Тогда + РасширениеДляЗашифрованныхФайлов = + МодульЭлектроннаяПодписьКлиент.ПерсональныеНастройки().РасширениеДляЗашифрованныхФайлов; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(РасширениеДляЗашифрованныхФайлов) Тогда + Фильтр = НСтр("ru = 'Файл (*.%1)|*.%1|Зашифрованный файл (*.%2)|*.%2|Все файлы (*.*)|*.*'"); + Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Фильтр, ДанныеФайла.Расширение, РасширениеДляЗашифрованныхФайлов); + Иначе + Фильтр = НСтр("ru = 'Файл (*.%1)|*.%1|Все файлы (*.*)|*.*'"); + Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Фильтр, ДанныеФайла.Расширение); + КонецЕсли; + КонецЕсли; Если Не Диалог.Выбрать() Тогда @@ -2323,8 +2608,20 @@ ПутьВыбораПрежний = ПутьВыбора; ФайлНаДиске = Новый Файл(Диалог.ПолноеИмяФайла); - ПутьВыбора = ФайлНаДиске.Путь; + Если ПараметрыДобавленияФайла <> Неопределено + И ПараметрыДобавленияФайла.Свойство("МаксимальныйРазмер") + И ПараметрыДобавленияФайла.МаксимальныйРазмер > 0 + И ФайлНаДиске.Размер() > ПараметрыДобавленияФайла.МаксимальныйРазмер*1024*1024 Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размер файла превышает %1 Мб.'"), ПараметрыДобавленияФайла.МаксимальныйРазмер); + ВернутьРезультатПослеПоказаПредупреждения(ОбработчикРезультата, ТекстОшибки, Ложь); + Возврат; + + КонецЕсли; + + ПутьВыбора = ФайлНаДиске.Путь; Если ПустаяСтрока(ДанныеФайла.РабочийКаталогВладельца) Тогда Если ПутьВыбораПрежний <> ПутьВыбора Тогда ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПапкаДляОбновитьИзФайла", ПутьВыбора); @@ -2354,7 +2651,7 @@ ПараметрыВыполнения.Вставить("ФайлЗашифрован", НРег(ПараметрыВыполнения.РасширениеФайлаНаДиске) = НРег(ПараметрыВыполнения.РасширениеДляЗашифрованныхФайлов)); - РаботаСФайламиСлужебныйКлиентСервер.ПроверитьВозможностьЗагрузкиФайла(ФайлНаДиске); + ПроверитьВозможностьЗагрузкиФайла(ФайлНаДиске); Если Не ПараметрыВыполнения.ФайлЗашифрован Тогда ОбновитьИзФайлаНаДискеПродолжение(ПараметрыВыполнения); Возврат; @@ -2373,7 +2670,7 @@ ПараметрыВыполнения.РасширениеФайлаНаДиске = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки( ВременныйФайлНешифрованный.Расширение); - + // Тут расшифровать и поставить ту же дату изменения, что и ДиалогПолноеИмяФайлаПрежнее. ПомещаемыеФайлы = Новый Массив; @@ -2852,7 +3149,9 @@ Процедура РедактироватьФайлПоСсылкеСРасширениемПослеПолученияФайлаВРабочийКаталог(Результат, ПараметрыВыполнения) Экспорт Если Результат.ФайлПолучен = Истина Тогда - ОткрытьФайлПриложением(ПараметрыВыполнения.ДанныеФайла, Результат.ПолноеИмяФайла, ПараметрыВыполнения.ОбработчикРезультата); + УникальныйИдентификатор = ?(ПараметрыВыполнения.Свойство("УникальныйИдентификатор"), + ПараметрыВыполнения.УникальныйИдентификатор, Неопределено); + ОткрытьФайлПриложением(ПараметрыВыполнения.ДанныеФайла, Результат.ПолноеИмяФайла, УникальныйИдентификатор); КонецЕсли; ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Результат.ФайлПолучен = Истина); @@ -2952,7 +3251,9 @@ Процедура РедактироватьФайлСРасширениемПослеПолученияФайлаВРабочийКаталог(Результат, ПараметрыВыполнения) Экспорт Если Результат.ФайлПолучен = Истина Тогда - ОткрытьФайлПриложением(ПараметрыВыполнения.ДанныеФайла, Результат.ПолноеИмяФайла); + УникальныйИдентификатор = ?(ПараметрыВыполнения.Свойство("УникальныйИдентификатор"), + ПараметрыВыполнения.УникальныйИдентификатор, Неопределено); + ОткрытьФайлПриложением(ПараметрыВыполнения.ДанныеФайла, Результат.ПолноеИмяФайла, УникальныйИдентификатор); КонецЕсли; ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Результат.ФайлПолучен = Истина); @@ -2999,7 +3300,9 @@ Процедура ОткрытьВерсиюФайлаПослеПолученияФайлаВРабочийКаталог(Результат, ПараметрыВыполнения) Экспорт Если Результат.ФайлПолучен Тогда - ОткрытьФайлПриложением(ПараметрыВыполнения.ДанныеФайла, Результат.ПолноеИмяФайла); + УникальныйИдентификатор = ?(ПараметрыВыполнения.Свойство("УникальныйИдентификатор"), + ПараметрыВыполнения.УникальныйИдентификатор, Неопределено); + ОткрытьФайлПриложением(ПараметрыВыполнения.ДанныеФайла, Результат.ПолноеИмяФайла, УникальныйИдентификатор); КонецЕсли; ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); @@ -3441,7 +3744,7 @@ КонецЕсли; КонецЕсли; - ОбщиеНастройкиРаботыСФайлами = РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); + ОбщиеНастройкиРаботыСФайлами = ОбщиеНастройкиРаботыСФайлами(); ИмяКаталога = РабочийКаталогПользователя(); ОтносительныйПутьКФайлу = ""; @@ -3874,6 +4177,13 @@ ПараметрыОповещения.Вставить("ЭтоНовый" , Истина); Оповестить("Запись_Файл", ПараметрыОповещения, ПрисоединенныйФайл); + Если ДополнительныеПараметры.Свойство("ОбработчикРезультата") + И ДополнительныеПараметры.ОбработчикРезультата <> Неопределено Тогда + ПрисоединенныеФайлыМассив = Новый Массив; + ПрисоединенныеФайлыМассив.Добавить(ПрисоединенныйФайл); + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, ПрисоединенныеФайлыМассив); + КонецЕсли; + ОткрыватьКарточкуПослеСозданияИзФайла = Ложь; Если ДополнительныеПараметры.Свойство("НеОткрыватьКарточкуПослеСозданияИзФайла") Тогда ОткрыватьКарточкуПослеСозданияИзФайла = Не ДополнительныеПараметры.НеОткрыватьКарточкуПослеСозданияИзФайла; @@ -3924,7 +4234,7 @@ Процедура УдалитьФайл(ОбработчикРезультата, ПолноеИмяФайла, ЗадаватьВопрос = Неопределено, ШапкаВопроса = Неопределено) Если ЗадаватьВопрос = Неопределено Тогда - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); ЗадаватьВопрос = ПерсональныеНастройки.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов; КонецЕсли; @@ -4032,7 +4342,7 @@ // Получаем путь файла в рабочем каталоге - с проверкой на уникальность. Если ПараметрыВыполнения.ПолноеИмяФайла = "" Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не удалось получить файл из программы в рабочий каталог на компьютере.'")); ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, ПараметрыВыполнения); Возврат; @@ -4170,7 +4480,7 @@ НСтр("ru = 'Не удалось получить файл на компьютер из программы по причине:'") + Символы.ПС); Если Контекст.ДляРедактирования - И Контекст.ДанныеФайла.Редактирует <> ПользователиКлиентСервер.АвторизованныйПользователь() Тогда + И Контекст.ДанныеФайла.Редактирует <> ПользователиКлиент.АвторизованныйПользователь() Тогда Результат = Новый Структура; Результат.Вставить("ПолноеИмяФайла", ""); @@ -4182,8 +4492,8 @@ Контекст.Вставить("ДляРедактирования", ЗначениеЗаполнено(Контекст.ДанныеФайла.Редактирует)); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Новый ОписаниеОповещения( - "ПолучитьПрисоединенныйФайлПослеПодключенияРасширения", ЭтотОбъект, Контекст),, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения( + "ПолучитьПрисоединенныйФайлПослеПодключенияРасширения", ЭтотОбъект, Контекст)); КонецПроцедуры @@ -4302,8 +4612,8 @@ Контекст.Вставить("ЗаголовокОшибки", НСтр("ru = 'Не удалось поместить файл с компьютера в программу по причине:'") + Символы.ПС); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Новый ОписаниеОповещения( - "ПоместитьПрисоединенныйФайлПослеПодключенияРасширения", ЭтотОбъект, Контекст),, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения( + "ПоместитьПрисоединенныйФайлПослеПодключенияРасширения", ЭтотОбъект, Контекст)); КонецПроцедуры @@ -4674,8 +4984,7 @@ Возврат; #КонецЕсли - МаксРазмер = - РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерЛокальногоКэшаФайлов; + МаксРазмер = ПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерЛокальногоКэшаФайлов; // Если размер РабочийКаталог установлен равным 0, // то считается, что никакого ограничения нет и умолчание в 10 Мб не используется. @@ -4738,7 +5047,7 @@ // сортировка по дате - в начале будут самые давно помещенные в рабочий каталог. РаботаСФайламиСлужебныйВызовСервера.СортироватьМассивСтруктур(ТаблицаФайлов); - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); МаксРазмер = ПерсональныеНастройки.МаксимальныйРазмерЛокальногоКэшаФайлов; СреднийРазмерФайла = 1000; @@ -5572,7 +5881,7 @@ // Получаем путь файла в рабочем каталоге - с проверкой на уникальность. Если ПараметрыВыполнения.ПолноеИмяФайла = "" Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не удалось получить файл из программы в рабочий каталог на компьютере.'")); ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, ПараметрыВыполнения); Возврат; @@ -5823,7 +6132,7 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура СкопироватьСодержимоеКаталогаПослеОтветаНаВопрос(Ответ, ПараметрыВыполнения) +Процедура СкопироватьСодержимоеКаталогаПослеОтветаНаВопрос(Ответ, ПараметрыВыполнения) Экспорт Если Ответ = КодВозвратаДиалога.Нет Тогда ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, ПараметрыВыполнения.Результат); @@ -6089,7 +6398,7 @@ // Процедура ВыполнитьИмпортФайлов(Знач ПараметрыВыполнения) Экспорт - СлужебныеПараметры = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыВыполнения); + СлужебныеПараметры = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ПараметрыВыполнения); Обработчик = Новый ОписаниеОповещения("ИмпортФайловПослеПроверкиРазмеров", ЭтотОбъект, СлужебныеПараметры); ПроверитьПредельныйРазмерФайлов(Обработчик, СлужебныеПараметры); @@ -6145,7 +6454,7 @@ Если ВыбранКаталог Тогда ПараметрыВыполнения.Путь = ИмяФайла.Значение; - ПараметрыВыполнения.МассивФайловЭтогоКаталога = РаботаСФайламиСлужебныйКлиентСервер.НайтиФайлыПсевдо(ПараметрыВыполнения.ПсевдоФайловаяСистема, ПараметрыВыполнения.Путь); + ПараметрыВыполнения.МассивФайловЭтогоКаталога = НайтиФайлыПсевдо(ПараметрыВыполнения.ПсевдоФайловаяСистема, ПараметрыВыполнения.Путь); ПараметрыВыполнения.ИмяПапки = ВыбранныйФайл.Имя; @@ -6202,13 +6511,15 @@ Процедура ИмпортФайловЦиклПродолжитьИмпорт(ПараметрыВыполнения) Если Не ПараметрыВыполнения.ПапкаУжеНайдена Тогда + РазделительПути = ПолучитьРазделительПути(); + РабочийКаталог = ПараметрыВыполнения.Путь + ?(Прав(ПараметрыВыполнения.Путь, 1) = РазделительПути, "", РазделительПути); Если РаботаСФайламиСлужебныйКлиентПовтИсп.ЭтоСправочникФайлы(ПараметрыВыполнения.Владелец) Тогда ПараметрыВыполнения.ПапкаДляДобавленияТекущая = РаботаСФайламиСлужебныйВызовСервера.СоздатьПапкуФайлов( - ПараметрыВыполнения.ИмяПапки, ПараметрыВыполнения.Владелец); + ПараметрыВыполнения.ИмяПапки, ПараметрыВыполнения.Владелец, , , РабочийКаталог); Иначе ПараметрыВыполнения.ПапкаДляДобавленияТекущая = ПараметрыВыполнения.Владелец; ПараметрыВыполнения.ГруппаФайлов = РаботаСФайламиСлужебныйВызовСервера.СоздатьПапкуФайлов( - ПараметрыВыполнения.ИмяПапки, ПараметрыВыполнения.Владелец, , ПараметрыВыполнения.ГруппаФайлов); + ПараметрыВыполнения.ИмяПапки, ПараметрыВыполнения.Владелец, , ПараметрыВыполнения.ГруппаФайлов, РабочийКаталог); КонецЕсли; КонецЕсли; @@ -6248,8 +6559,7 @@ КонецЕсли; Если ПараметрыВыполнения.УдалятьФайлыПослеДобавления = Истина Тогда - РаботаСФайламиСлужебныйКлиентСервер.УдалитьФайлыПослеДобавления( - ПараметрыВыполнения.МассивСтруктурВсехФайлов, ПараметрыВыполнения.МассивВсехПапок); + УдалитьФайлыПослеДобавления(ПараметрыВыполнения.МассивСтруктурВсехФайлов, ПараметрыВыполнения.МассивВсехПапок); КонецЕсли; Если ПараметрыВыполнения.МассивСтруктурВсехФайлов.Количество() = 1 Тогда @@ -6278,6 +6588,17 @@ КонецПроцедуры +// Удаляет файлы после импорта или загрузки. +Процедура УдалитьФайлыПослеДобавления(МассивСтруктурВсехФайлов, МассивВсехПапок) + + Для Каждого Элемент Из МассивСтруктурВсехФайлов Цикл + ВыбранныйФайл = Новый Файл(Элемент.ИмяФайла); + ВыбранныйФайл.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ВыбранныйФайл.ПолноеИмя); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Сохранение Файла на диск @@ -6616,7 +6937,7 @@ // Процедура ПоказатьНапоминаниеПередПоместитьФайл(ОбработчикРезультата) - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); Если ПерсональныеНастройки.ПоказыватьПодсказкиПриРедактированииФайлов = Истина Тогда Если Не РасширениеРаботыСФайламиПодключено() Тогда ТекстНапоминания = @@ -6689,7 +7010,7 @@ КонецЕсли; Если ВыбранКаталог Тогда - МассивФайловЭтогоКаталога = РаботаСФайламиСлужебныйКлиентСервер.НайтиФайлыПсевдо(ПараметрыПроверки.ПсевдоФайловаяСистема, Путь); + МассивФайловЭтогоКаталога = НайтиФайлыПсевдо(ПараметрыПроверки.ПсевдоФайловаяСистема, Путь); НайтиСлишкомБольшиеФайлы(МассивФайловЭтогоКаталога, МассивСлишкомБольшихФайлов, ПараметрыПроверки.Рекурсивно, ПараметрыВыполнения.КоличествоСуммарное, ПараметрыПроверки.ПсевдоФайловаяСистема); Иначе @@ -6745,7 +7066,7 @@ // Процедура ПоказатьИнформациюФайлНеБылИзменен(ОбработчикРезультата) - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); Если ПерсональныеНастройки.ПоказыватьИнформациюЧтоФайлНеБылИзменен Тогда ТекстНапоминания = НСтр("ru = 'Версия не была создана, т.к. файл не изменен. Комментарий не сохранен.'"); Кнопки = РежимДиалогаВопрос.ОК; @@ -7114,7 +7435,9 @@ Если Результат.ФайлПолучен = Истина Тогда ФайлНаДиске = Новый Файл(Результат.ПолноеИмяФайла); ФайлНаДиске.УстановитьТолькоЧтение(Не ПараметрыВыполнения.ДляРедактирования); - ОткрытьФайлПриложением(ПараметрыВыполнения.ДанныеФайла, Результат.ПолноеИмяФайла); + УникальныйИдентификатор = ?(ПараметрыВыполнения.Свойство("УникальныйИдентификатор"), + ПараметрыВыполнения.УникальныйИдентификатор, Неопределено); + ОткрытьФайлПриложением(ПараметрыВыполнения.ДанныеФайла, Результат.ПолноеИмяФайла, УникальныйИдентификатор); КонецЕсли; ОткрытьФайлСОповещениемЗавершение(Результат.ФайлПолучен = Истина, ПараметрыВыполнения); @@ -7308,7 +7631,11 @@ // Показывает диалог выбора файла на диске, загружает выбранный файл в программу как версию и рассылает оповещение. // Выбирает на диске файл и создает из него новую версию. -Процедура ОбновитьИзФайлаНаДискеСОповещением(ОбработчикРезультата, ДанныеФайла, ИдентификаторФормы) Экспорт +Процедура ОбновитьИзФайлаНаДискеСОповещением( + ОбработчикРезультата, + ДанныеФайла, + ИдентификаторФормы, + ПараметрыДобавленияФайла = Неопределено) Экспорт Если Не РасширениеРаботыСФайламиПодключено() Тогда ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(ОбработчикРезультата); @@ -7319,7 +7646,7 @@ ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); ПараметрыВыполнения.Вставить("ДанныеФайла", ДанныеФайла); Обработчик = Новый ОписаниеОповещения("ОбновитьИзФайлаНаДискеСОповещениемЗавершение", ЭтотОбъект, ПараметрыВыполнения); - ОбновитьИзФайлаНаДиске(Обработчик, ДанныеФайла, ИдентификаторФормы); + ОбновитьИзФайлаНаДиске(Обработчик, ДанныеФайла, ИдентификаторФормы, ПараметрыДобавленияФайла); КонецПроцедуры @@ -7514,7 +7841,7 @@ ПараметрыВыполнения.МассивДанныхДляЗанесенияВБазу = Новый Массив; ПараметрыВыполнения.Вставить("ИзвлекатьТекстыФайловНаСервере", - РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере); + ОбщиеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере); ПредставлениеФайла = Строка(ПараметрыВыполнения.ДанныеФайла.Ссылка); Если ПараметрыВыполнения.ДанныеФайла.КоличествоВерсий > 1 Тогда @@ -7644,13 +7971,25 @@ ВладелецФайла, ФормаВладелец, РежимСоздания = 1, - НеОткрыватьКарточкуПослеСозданияИзФайла = Неопределено) Экспорт + ПараметрыДобавления = Неопределено) Экспорт ПараметрыВыполнения = Новый Структура; + Если ПараметрыДобавления = Неопределено + Или ТипЗнч(ПараметрыДобавления) = Тип("Булево") Тогда + + ПараметрыВыполнения.Вставить("МаксимальныйРазмер", 0); + ПараметрыВыполнения.Вставить("ФильтрДиалогаВыбора", НСтр("ru = 'Все файлы(*.*)|*.*'")); + ПараметрыВыполнения.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", ?(ПараметрыДобавления = Неопределено, Ложь, ПараметрыДобавления)); + + Иначе + ПараметрыВыполнения.Вставить("МаксимальныйРазмер", ПараметрыДобавления.МаксимальныйРазмер); + ПараметрыВыполнения.Вставить("ФильтрДиалогаВыбора", ПараметрыДобавления.ФильтрДиалогаВыбора); + ПараметрыВыполнения.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", ПараметрыДобавления.НеОткрыватьКарточку); + КонецЕсли; + ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); ПараметрыВыполнения.Вставить("ВладелецФайла", ВладелецФайла); ПараметрыВыполнения.Вставить("ФормаВладелец", ФормаВладелец); - ПараметрыВыполнения.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", НеОткрыватьКарточкуПослеСозданияИзФайла); ПараметрыВыполнения.Вставить("ЭтоФайл", Истина); Обработчик = Новый ОписаниеОповещения("ДобавитьПослеВыбораРежимаСоздания", ЭтотОбъект, ПараметрыВыполнения); @@ -7745,8 +8084,13 @@ Процедура ДобавитьИзФайловойСистемыБезРасширения(ПараметрыВыполнения) // Загрузить из файловой системы без расширения работы с файлами (веб-клиент). + ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + Если ПараметрыВыполнения.Свойство("ФильтрДиалогаВыбора") Тогда + ДиалогВыбора.Фильтр = ПараметрыВыполнения.ФильтрДиалогаВыбора; + КонецЕсли; + Обработчик = Новый ОписаниеОповещения("ДобавитьИзФайловойСистемыБезРасширенияПослеЗагрузкиФайла", ЭтотОбъект, ПараметрыВыполнения); - НачатьПомещениеФайла(Обработчик, , , , ПараметрыВыполнения.ФормаВладелец.УникальныйИдентификатор); + НачатьПомещениеФайла(Обработчик, , ДиалогВыбора, , ПараметрыВыполнения.ФормаВладелец.УникальныйИдентификатор); КонецПроцедуры @@ -7774,16 +8118,51 @@ Возврат; КонецЕсли; + Если ПараметрыВыполнения.Свойство("МаксимальныйРазмер") + И ПараметрыВыполнения.МаксимальныйРазмер > 0 Тогда + + РазмерФайла = ПолучитьИзВременногоХранилища(Адрес).Размер(); + Если РазмерФайла > ПараметрыВыполнения.МаксимальныйРазмер*1024*1024 Тогда + + ТекстОшибки = НСтр("ru = 'Размер файла превышает %1 Мб.'"); + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + ПараметрыВыполнения.МаксимальныйРазмер); + ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, Результат.ТекстОшибки, Неопределено); + Возврат; + + КонецЕсли; + + КонецЕсли; + // Создание файла в ИБ. Попытка - СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); - СведенияОФайле.АдресВременногоХранилищаФайла = Адрес; - СведенияОФайле.ИмяБезРасширения = СтруктураПути.ИмяБезРасширения; - СведенияОФайле.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураПути.Расширение); - Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ПараметрыВыполнения.ВладелецФайла, СведенияОФайле); - Результат.ФайлДобавлен = Истина; + + Если РаботаСФайламиСлужебныйКлиентПовтИсп.ЭтоСправочникФайлы(ПараметрыВыполнения.ВладелецФайла) Тогда + + СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); + СведенияОФайле.АдресВременногоХранилищаФайла = Адрес; + СведенияОФайле.ИмяБезРасширения = СтруктураПути.ИмяБезРасширения; + СведенияОФайле.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураПути.Расширение); + Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ПараметрыВыполнения.ВладелецФайла, СведенияОФайле); + Результат.ФайлДобавлен = Истина; + + Иначе + + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ВладелецФайлов", ПараметрыВыполнения.ВладелецФайла); + ПараметрыФайла.Вставить("Автор", Неопределено); + ПараметрыФайла.Вставить("ИмяБезРасширения", СтруктураПути.ИмяБезРасширения); + ПараметрыФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураПути.Расширение)); + ПараметрыФайла.Вставить("ВремяИзменения"); + ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное"); + + Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл(ПараметрыФайла,Адрес); + Результат.ФайлДобавлен = Истина; + + КонецЕсли; + Исключение - Результат.ТекстОшибки = РаботаСФайламиСлужебныйКлиентСервер.ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке()); + Результат.ТекстОшибки = ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке()); КонецПопытки; Если Результат.ТекстОшибки <> "" Тогда ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, Результат.ТекстОшибки, Неопределено); @@ -7813,7 +8192,7 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура ДобавитьИзФайловойСистемыБезРасширенияПослеОтветаНаВопросПовторить(Ответ, ПараметрыВыполнения) +Процедура ДобавитьИзФайловойСистемыБезРасширенияПослеОтветаНаВопросПовторить(Ответ, ПараметрыВыполнения) Экспорт Если Ответ = КодВозвратаДиалога.Повторить Тогда ДобавитьИзФайловойСистемыБезРасширения(ПараметрыВыполнения); @@ -7879,16 +8258,17 @@ Процедура ПодписатьФайл(ПрисоединенныйФайл, ДанныеФайла, ИдентификаторФормы, ОбработчикЗавершения = Неопределено, ОбработчикПриПолученииПодписи = Неопределено) Экспорт - Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - Возврат; - КонецЕсли; - ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); ПараметрыВыполнения.Вставить("ПрисоединенныйФайл", ПрисоединенныйФайл); ПараметрыВыполнения.Вставить("ДанныеФайла", ДанныеФайла); ПараметрыВыполнения.Вставить("ИдентификаторФормы", ИдентификаторФормы); + ОбработчикПродолжения = Новый ОписаниеОповещения("ПослеДобавленияПодписей", ЭтотОбъект, ПараметрыВыполнения); + Если Не ПроверитьВозможностьПодписания(ДанныеФайла, ОбработчикЗавершения, ОбработчикПродолжения, ПараметрыВыполнения) Тогда + Возврат; + КонецЕсли; + ОписаниеДанных = Новый Структура; ОписаниеДанных.Вставить("Операция", НСтр("ru = 'Подписание файла'")); ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru = 'Файл'")); @@ -7903,113 +8283,11 @@ ОписаниеДанных.Вставить("Объект", ОбработчикПриПолученииПодписи); КонецЕсли; - ОбработчикПродолжения = Новый ОписаниеОповещения("ПослеДобавленияПодписей", ЭтотОбъект, ПараметрыВыполнения); - МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); МодульЭлектроннаяПодписьКлиент.Подписать(ОписаниеДанных, ИдентификаторФормы, ОбработчикПродолжения); КонецПроцедуры -// Подписывает текущую версию файлов с помощью подсистемы ЭлектроннаяПодпись. -Процедура ПодписатьФайлы(МассивФайлов, ИдентификаторФормы, ОбработчикЗавершения, ОбработчикПриПолученииПодписи = Неопределено) Экспорт - - Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - Возврат; - КонецЕсли; - - НаборДанных = Новый Массив; - МассивДанныхФайлов = Новый Массив; - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); - ПараметрыВыполнения.Вставить("ИдентификаторФормы", ИдентификаторФормы); - ПараметрыВыполнения.Вставить("МассивДанныхФайлов", МассивДанныхФайлов); - - Для каждого Файл Из МассивФайлов Цикл - ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог(Файл); - - Если ЗначениеЗаполнено(ДанныеФайла.Редактирует) Тогда - ТекстПредупреждения = РаботаСФайламиСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(Файл); - ВернутьРезультатПослеПоказаПредупреждения(ОбработчикЗавершения, ТекстПредупреждения, ПараметрыВыполнения); - Возврат; - КонецЕсли; - - Если ДанныеФайла.Зашифрован Тогда - ТекстПредупреждения = РаботаСФайламиСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла(Файл); - ВернутьРезультатПослеПоказаПредупреждения(ОбработчикЗавершения, ТекстПредупреждения, ПараметрыВыполнения); - Возврат; - КонецЕсли; - - МассивДанныхФайлов.Добавить(ДанныеФайла); - - ТекущиеПараметрыВыполнения = Новый Структура; - ТекущиеПараметрыВыполнения.Вставить("ИдентификаторФормы", ИдентификаторФормы); - ТекущиеПараметрыВыполнения.Вставить("ДанныеФайла", ДанныеФайла); - - ЭлементДанных = Новый Структура; - ЭлементДанных.Вставить("Представление", ДанныеФайла.Ссылка); - ЭлементДанных.Вставить("Данные", - Новый ОписаниеОповещения("ПриЗапросеДвоичныхДанныхФайла", ЭтотОбъект, ТекущиеПараметрыВыполнения)); - ЭлементДанных.Вставить("Объект", - Новый ОписаниеОповещения("ПриПолученииПодписи", ЭтотОбъект, ТекущиеПараметрыВыполнения)); - НаборДанных.Добавить(ЭлементДанных); - - КонецЦикла; - - ОписаниеДанных = Новый Структура; - ОписаниеДанных.Вставить("ПоказатьКомментарий", Истина); - ОписаниеДанных.Вставить("Операция", НСтр("ru = 'Подписание файла'")); - ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru = 'Файл'")); - ОписаниеДанных.Вставить("НаборДанных", НаборДанных); - ОписаниеДанных.Вставить("ПредставлениеНабора", НСтр("ru = 'Файлы (%1)'")); - - ОбработчикПродолжения = Новый ОписаниеОповещения("ПослеПодписанияФайлов", ЭтотОбъект, ПараметрыВыполнения); - - МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); - МодульЭлектроннаяПодписьКлиент.Подписать(ОписаниеДанных, , ОбработчикПродолжения); - -КонецПроцедуры - -// Продолжение процедуры ПодписатьФайл. -// Вызывается из подсистемы ЭлектроннаяПодпись при запросе данных для подписания. -// -Процедура ПриЗапросеДвоичныхДанныхФайла(Параметры, Контекст) Экспорт - - Данные = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИДвоичныеДанные( - Контекст.ДанныеФайла.Ссылка).ДвоичныеДанные; - - ВыполнитьОбработкуОповещения(Параметры.Оповещение, Новый Структура("Данные", Данные)); - -КонецПроцедуры - -// Продолжение процедуры ПодписатьФайл. -// Вызывается из подсистемы ЭлектроннаяПодпись после подписания данных для нестандартного -// способа добавления подписи в объект. -// -Процедура ПриПолученииПодписи(Параметры, Контекст) Экспорт - - РаботаСФайламиСлужебныйВызовСервера.ДобавитьПодписьКФайлу( - Контекст.ДанныеФайла.Ссылка, - Параметры.ОписаниеДанных.ТекущийЭлементНабораДанных.СвойстваПодписи, - Контекст.ИдентификаторФормы); - - ВыполнитьОбработкуОповещения(Параметры.Оповещение, Новый Структура); - -КонецПроцедуры - -// Завершение процедуры ПодписатьФайл. -Процедура ПослеПодписанияФайлов(ОписаниеДанных, ПараметрыВыполнения) Экспорт - - Если ОписаниеДанных.Успех Тогда - Для каждого ДанныеФайла Из ПараметрыВыполнения.МассивДанныхФайлов Цикл - ОповеститьОбИзмененииФайла(ДанныеФайла); - КонецЦикла; - КонецЕсли; - - ВернутьРезультат(ПараметрыВыполнения.ОбработчикЗавершения, ОписаниеДанных.Успех); - -КонецПроцедуры - // Завершение процедур ПодписатьФайл, ДобавитьПодписьИзФайла. Процедура ПослеДобавленияПодписей(ОписаниеДанных, ПараметрыВыполнения) Экспорт @@ -8034,20 +8312,11 @@ ПараметрыВыполнения.Вставить("ДанныеФайла", СвойстваФайла.ДанныеФайла); ПараметрыВыполнения.Вставить("ИдентификаторФормы", ИдентификаторФормы); - Если ЗначениеЗаполнено(ПараметрыВыполнения.ДанныеФайла.Редактирует) Тогда - ТекстПредупреждения = РаботаСФайламиСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(); - ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, ТекстПредупреждения, ПараметрыВыполнения); - Возврат; - КонецЕсли; - - Если ПараметрыВыполнения.ДанныеФайла.Зашифрован Тогда - ТекстПредупреждения = РаботаСФайламиСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла(); - ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикЗавершения, ТекстПредупреждения, ПараметрыВыполнения); - Возврат; - КонецЕсли; - - Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + Если Не ПроверитьВозможностьПодписания(ПараметрыВыполнения.ДанныеФайла, + ОбработчикЗавершения, ПараметрыВыполнения.ОбработчикРезультата, ПараметрыВыполнения) Тогда + Возврат; + КонецЕсли; ОписаниеДанных = Новый Структура; @@ -8154,6 +8423,28 @@ КонецПроцедуры +Функция ПроверитьВозможностьПодписания(ДанныеФайла, ОбработчикЗавершения, ОбработчикРезультата, ПараметрыВыполнения) + + Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + Возврат Ложь; + КонецЕсли; + + Если ЗначениеЗаполнено(ДанныеФайла.Редактирует) Тогда + ТекстПредупреждения = РаботаСФайламиСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(); + ВернутьРезультатПослеПоказаПредупреждения(ОбработчикРезультата, ТекстПредупреждения, ПараметрыВыполнения); + Возврат Ложь; + КонецЕсли; + + Если ДанныеФайла.Зашифрован Тогда + ТекстПредупреждения = РаботаСФайламиСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла(); + ВернутьРезультатПослеПоказаПредупреждения(ОбработчикЗавершения, ТекстПредупреждения, ПараметрыВыполнения); + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Загружает структуру файлов и каталогов с диска в программу. @@ -8324,7 +8615,7 @@ НовыйПуть = Строка(ВыбранныйФайл.Путь); НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); - МассивФайлов = РаботаСФайламиСлужебныйКлиентСервер.НайтиФайлыПсевдо(ПараметрыВыполнения.ПсевдоФайловаяСистема, НовыйПуть); + МассивФайлов = НайтиФайлыПсевдо(ПараметрыВыполнения.ПсевдоФайловаяСистема, НовыйПуть); // Создаем группу в справочнике - эквивалент папки на диске. Если МассивФайлов.Количество() <> 0 Тогда @@ -8354,7 +8645,7 @@ Продолжить; КонецЕсли; - Если Не РаботаСФайламиСлужебныйКлиентСервер.ПроверитьВозможностьЗагрузкиФайла( + Если Не ПроверитьВозможностьЗагрузкиФайла( ВыбранныйФайл, Ложь, ПараметрыВыполнения.МассивИменФайловСОшибками) Тогда Продолжить; КонецЕсли; @@ -8397,7 +8688,7 @@ АдресВременногоХранилищаФайла = ПомещенныеФайлы[0].Хранение; КонецЕсли; - Если НЕ РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда + Если НЕ ОбщиеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ВыбранныйФайл.ПолноеИмя, ПараметрыВыполнения.ИдентификаторФормы, , ПараметрыВыполнения.Кодировка); Иначе @@ -8411,8 +8702,8 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РаботаСФайламиКлиентСервер.СобытиеЖурналаРегистрации(), + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке),,Истина); Запись = Новый Структура; @@ -8544,13 +8835,15 @@ // Параметры: // ДанныеФайла - структура с данными файла. // ИмяОткрываемогоФайла - Строка - полное имя файла. -Процедура ОткрытьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла, ОбработчикРезультата = Неопределено) +// ИдентификаторВладельца - УникальныйИдентификатор - идентификатор формы-владельца. +// +Процедура ОткрытьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла, ИдентификаторВладельца = Неопределено) Если Не РасширениеРаботыСФайламиПодключено() Тогда Возврат; КонецЕсли; - ПерсональныеНастройкиРаботыСФайлами = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройкиРаботыСФайлами = ПерсональныеНастройкиРаботыСФайлами(); ТекстовыеФайлыСпособОткрытия = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыСпособОткрытия; Если ТекстовыеФайлыСпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда @@ -8558,8 +8851,12 @@ ТекстовыеФайлыРасширение = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыРасширение; Если РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке(ТекстовыеФайлыРасширение, ДанныеФайла.Расширение) Тогда - ПараметрыФормы = Новый Структура("Файл, ДанныеФайла, ИмяОткрываемогоФайла", - ДанныеФайла.Ссылка, ДанныеФайла, ИмяОткрываемогоФайла); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Файл", ДанныеФайла.Ссылка); + ПараметрыФормы.Вставить("ДанныеФайла", ДанныеФайла); + ПараметрыФормы.Вставить("ИмяОткрываемогоФайла", ИмяОткрываемогоФайла); + ПараметрыФормы.Вставить("ИдентификаторВладельца", ИдентификаторВладельца); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.РедактированиеТекстовогоФайла", ПараметрыФормы, , ДанныеФайла.Ссылка); Возврат; @@ -8568,6 +8865,7 @@ КонецЕсли; +#Если Не МобильныйКлиент Тогда Если НРег(ДанныеФайла.Расширение) = НРег("grs") Тогда Схема = Новый ГрафическаяСхема; @@ -8580,6 +8878,7 @@ Возврат; КонецЕсли; +#КонецЕсли Если НРег(ДанныеФайла.Расширение) = НРег("mxl") Тогда @@ -8609,7 +8908,7 @@ КонецЕсли; // Открыть Файл - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ИмяОткрываемогоФайла); + ФайловаяСистемаКлиент.ОткрытьФайл(ИмяОткрываемогоФайла); КонецПроцедуры @@ -8706,7 +9005,7 @@ // Функция ПроверитьЗанятыеФайлыПриЗавершенииРаботы() - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Если ПользователиКлиент.ЭтоСеансВнешнегоПользователя() Тогда Возврат Неопределено; КонецЕсли; @@ -8717,7 +9016,7 @@ Возврат Неопределено; КонецЕсли; - ТекущийПользователь = ПользователиКлиентСервер.ТекущийПользователь(); + ТекущийПользователь = ПользователиКлиент.АвторизованныйПользователь(); КоличествоЗанятыхФайлов = СтандартныеПодсистемыКлиент.ПараметрКлиента("КоличествоЗанятыхФайлов"); Если КоличествоЗанятыхФайлов = 0 Тогда @@ -8891,7 +9190,7 @@ КонецФункции // Возвращает структуру, содержащую различные персональные настройки. -Функция ОбщиеНастройкиРаботыСФайлами() Экспорт +Функция ОбщиеНастройкиРаботыСФайлами() ОбщиеНастройки = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ОбщиеНастройкиРаботыСФайлами; @@ -9037,7 +9336,7 @@ КоличествоСуммарное, Знач ПсевдоФайловаяСистема) - МаксРазмерФайла = РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами().МаксимальныйРазмерФайла; + МаксРазмерФайла = ОбщиеНастройкиРаботыСФайлами().МаксимальныйРазмерФайла; Для Каждого ВыбранныйФайл Из МассивФайлов Цикл @@ -9053,7 +9352,7 @@ НовыйПуть = Строка(ВыбранныйФайл.Путь); НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); - МассивФайловВКаталоге = РаботаСФайламиСлужебныйКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть); + МассивФайловВКаталоге = НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть); // Рекурсия Если МассивФайловВКаталоге.Количество() <> 0 Тогда @@ -9077,6 +9376,29 @@ КонецПроцедуры +// Возвращает массив файлов, эмулируя работу НайтиФайлы - но не по файловой системе, а по Соответствию +// если ПсевдоФайловаяСистема пуста - работает с файловой системой. +Функция НайтиФайлыПсевдо(Знач ПсевдоФайловаяСистема, Путь) + + Если ПсевдоФайловаяСистема.Количество() = 0 Тогда + Файлы = НайтиФайлы(Путь, "*.*"); + Возврат Файлы; + КонецЕсли; + + Файлы = Новый Массив; + + ЗначениеНайденное = ПсевдоФайловаяСистема.Получить(Строка(Путь)); + Если ЗначениеНайденное <> Неопределено Тогда + Для Каждого ИмяФайла Из ЗначениеНайденное Цикл + ФайлИзСписка = Новый Файл(ИмяФайла); + Файлы.Добавить(ФайлИзСписка); + КонецЦикла; + КонецЕсли; + + Возврат Файлы; + +КонецФункции + // Разыменовать lnk файл // Параметры: // ВыбранныйФайл - Файл - объект типа Файл. @@ -9161,7 +9483,7 @@ Возврат; КонецЕсли; - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); ПараметрыВыполнения.СпособСравненияВерсийФайлов = ПерсональныеНастройки.СпособСравненияВерсийФайлов; Если ПараметрыВыполнения.СпособСравненияВерсийФайлов = Неопределено Тогда @@ -9184,7 +9506,7 @@ Если ПараметрыВыполнения.ТекущийШаг = 1 Тогда Если ПараметрыВыполнения.СпособСравненияВерсийФайлов = Неопределено Тогда - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); ПараметрыВыполнения.СпособСравненияВерсийФайлов = ПерсональныеНастройки.СпособСравненияВерсийФайлов; Если ПараметрыВыполнения.СпособСравненияВерсийФайлов = Неопределено Тогда @@ -9341,7 +9663,7 @@ КонецЕсли; Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -9373,10 +9695,10 @@ // Функция КаталогДанныхПользователя() - #Если ВебКлиент Тогда + #Если ВебКлиент Или МобильныйКлиент Тогда Возврат РабочийКаталогДанныхПользователя(); #Иначе - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда Возврат РабочийКаталогДанныхПользователя(); Иначе Оболочка = Новый COMОбъект("WScript.Shell"); @@ -9940,9 +10262,7 @@ // Инициализация компоненты сканирования. Функция ПроинициализироватьКомпоненту(ПопытатьсяУстановитьКомпоненту = Истина) Экспорт - СистемнаяИнформация = Новый СистемнаяИнформация; - Если СистемнаяИнформация.ТипПлатформы <> ТипПлатформы.Windows_x86 - Или ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если Не ДоступноСканирование() Тогда Возврат Ложь; КонецЕсли; @@ -9958,7 +10278,7 @@ Возврат Ложь; КонецЕсли; - НачатьУстановкуВнешнейКомпоненты(, "ОбщийМакет.КомпонентаTWAIN"); + УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаTWAIN"); Возврат ПроинициализироватьКомпоненту(Ложь); // Рекурсивно. @@ -9971,6 +10291,16 @@ КонецФункции +Функция ДоступноСканирование() Экспорт + +#Если ВебКлиент Или МобильныйКлиент Тогда + Возврат Ложь; +#Иначе + Возврат ОбщегоНазначенияКлиент.ТипПлатформыКлиента() = ТипПлатформы.Windows_x86; +#КонецЕсли + +КонецФункции + // Установка компоненты сканирования. // // Параметры: @@ -10039,7 +10369,7 @@ // Функция ПолучитьНастройку(ИмяУстройства, ИмяНастройки) Экспорт - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда Возврат -1; КонецЕсли; @@ -10066,10 +10396,6 @@ Возврат Ложь; КонецЕсли; КонецЦикла; -#ИначеЕсли МобильныйКлиент Тогда - - Возврат Ложь; - #КонецЕсли Возврат Истина; @@ -10086,7 +10412,7 @@ // "Редактировать" // "Отмена". - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); СпособОткрытия = ПерсональныеНастройки.ТекстовыеФайлыСпособОткрытия; Если СпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда @@ -10268,12 +10594,18 @@ КонецЕсли; Если ФайлМожноОткрывать Тогда + Если ДляРедактирования Тогда ФайлНаДиске.УстановитьТолькоЧтение(Ложь); Иначе ФайлНаДиске.УстановитьТолькоЧтение(Истина); КонецЕсли; - ОткрытьФайлПриложением(ДанныеФайла, ПолноеИмяФайлаНаКлиенте); + + УникальныйИдентификатор = ?(ДополнительныеПараметры.Свойство("УникальныйИдентификатор"), + ДополнительныеПараметры.УникальныйИдентификатор, Неопределено); + + ОткрытьФайлПриложением(ДанныеФайла, ПолноеИмяФайлаНаКлиенте, УникальныйИдентификатор); + КонецЕсли; КонецПроцедуры @@ -10298,7 +10630,7 @@ Исключение СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); СообщениеОбОшибке = НСтр("ru = 'Ошибка создания каталога на диске:'") + " " + СообщениеОбОшибке; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); Возврат Ложь; КонецПопытки; diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl index 5ab7a1dc3..a4d897075 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Работа с файлами". // diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl index 573880d03..332fce25c 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl @@ -1,94 +1,13 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс -// Возвращает персональные настройки. -// -Функция ПерсональныеНастройкиРаботыСФайлами() Экспорт - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Возврат РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ПерсональныеНастройки; -#Иначе - Возврат РаботаСФайламиСлужебныйКлиент.ПерсональныеНастройкиРаботыСФайлами(); -#КонецЕсли - -КонецФункции - -// Возвращает персональные общие настройки. -// -Функция ОбщиеНастройкиРаботыСФайлами() Экспорт - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Возврат РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки; -#Иначе - Возврат РаботаСФайламиСлужебныйКлиент.ОбщиеНастройкиРаботыСФайлами(); -#КонецЕсли - -КонецФункции - -// Извлечь текст из файла и возвратить его в виде строки. -Функция ИзвлечьТекст(ПолноеИмяФайла, Отказ = Ложь, Кодировка = Неопределено) Экспорт - - ИзвлеченныйТекст = ""; - - Попытка - Файл = Новый Файл(ПолноеИмяФайла); - Если Не Файл.Существует() Тогда - Отказ = Истина; - Возврат ИзвлеченныйТекст; - КонецЕсли; - Исключение - Отказ = Истина; - Возврат ИзвлеченныйТекст; - КонецПопытки; - - Прекратить = Ложь; - - ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); - -#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда - - РасширениеИмениФайла = - ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ПолноеИмяФайла); - - РасширениеФайлаВСписке = РасширениеФайлаВСписке( - ОбщиеНастройки.СписокРасширенийТекстовыхФайлов, РасширениеИмениФайла); - - Если РасширениеФайлаВСписке Тогда - Возврат ИзвлечьТекстИзТекстовогоФайла(ПолноеИмяФайла, Кодировка, Отказ); - КонецЕсли; - - Попытка - Извлечение = Новый ИзвлечениеТекста(ПолноеИмяФайла); - ИзвлеченныйТекст = Извлечение.ПолучитьТекст(); - Исключение - // Когда текст некому извлечь исключение не требуется. Это нормальный случай. - ИзвлеченныйТекст = ""; - Прекратить = Истина; - КонецПопытки; - -#КонецЕсли - - Если ПустаяСтрока(ИзвлеченныйТекст) Тогда - - РасширениеИмениФайла = - ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ПолноеИмяФайла); - - РасширениеФайлаВСписке = РасширениеФайлаВСписке( - ОбщиеНастройки.СписокРасширенийФайловOpenDocument, РасширениеИмениФайла); - - Если РасширениеФайлаВСписке Тогда - Возврат ИзвлечьТекстOpenDocument(ПолноеИмяФайла, Отказ); - КонецЕсли; - - КонецЕсли; - - Если Прекратить Тогда - Отказ = Истина; - КонецЕсли; - - Возврат ИзвлеченныйТекст; - -КонецФункции - // Получить уникальное имя файла в рабочем каталоге. // Если есть совпадения - будет имя подобное "A1\Приказ.doc". // @@ -206,127 +125,6 @@ КонецФункции -// Проверяет расширение файла и размер. -Функция ПроверитьВозможностьЗагрузкиФайла(Файл, - ВызыватьИсключение = Истина, - МассивИменФайловСОшибками = Неопределено) Экспорт - - ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); - - // Размер файла слишком большой. - Если Файл.Размер() > ОбщиеНастройки.МаксимальныйРазмерФайла Тогда - - РазмерВМб = Файл.Размер() / (1024 * 1024); - РазмерВМбМакс = ОбщиеНастройки.МаксимальныйРазмерФайла / (1024 * 1024); - - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Размер файла ""%1"" (%2 Мб) - |превышает максимально допустимый размер файла (%3 Мб).'"), - Файл.Имя, - ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); - - Если ВызыватьИсключение Тогда - ВызватьИсключение ОписаниеОшибки; - КонецЕсли; - - Запись = Новый Структура; - Запись.Вставить("ИмяФайла", Файл.ПолноеИмя); - Запись.Вставить("Ошибка", ОписаниеОшибки); - - МассивИменФайловСОшибками.Добавить(Запись); - Возврат Ложь; - КонецЕсли; - - // Проверка расширения файла. - Если Не ПроверитьРасширениеФайлаДляЗагрузки(Файл.Расширение, Ложь) Тогда - - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. - |Обратитесь к администратору.'"), - Файл.Расширение); - - Если ВызыватьИсключение Тогда - ВызватьИсключение ОписаниеОшибки; - КонецЕсли; - - Запись = Новый Структура; - Запись.Вставить("ИмяФайла", Файл.ПолноеИмя); - Запись.Вставить("Ошибка", ОписаниеОшибки); - - МассивИменФайловСОшибками.Добавить(Запись); - Возврат Ложь; - КонецЕсли; - - // Временные файлы Word не импортируются. - Если СтрНачинаетсяС(Файл.Имя, "~") - И Файл.ПолучитьНевидимость() Тогда - - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Возвращает Истина, если файл с таким расширением можно загружать. -Функция ПроверитьРасширениеФайлаДляЗагрузки(РасширениеФайла, ВызыватьИсключение = Истина) Экспорт - - ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); - - Если НЕ ОбщиеНастройки.ЗапретЗагрузкиФайловПоРасширению Тогда - Возврат Истина; - КонецЕсли; - - Если РасширениеФайлаВСписке(ОбщиеНастройки.СписокЗапрещенныхРасширений, РасширениеФайла) Тогда - - Если ВызыватьИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. - |Обратитесь к администратору.'"), - РасширениеФайла); - Иначе - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Вызывает исключение, если файл имеет недопустимый размер для загрузки. -Процедура ПроверитьРазмерФайлаДляЗагрузки(Файл) Экспорт - - ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); - - Если ТипЗнч(Файл) = Тип("Файл") Тогда - Размер = Файл.Размер(); - Иначе - Размер = Файл.Размер; - КонецЕсли; - - Если Размер > ОбщиеНастройки.МаксимальныйРазмерФайла Тогда - - РазмерВМб = Размер / (1024 * 1024); - РазмерВМбМакс = ОбщиеНастройки.МаксимальныйРазмерФайла / (1024 * 1024); - - Если ТипЗнч(Файл) = Тип("Файл") Тогда - Имя = Файл.Имя; - Иначе - Имя = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( - Файл.ПолноеНаименование, Файл.Расширение); - КонецЕсли; - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Размер файла ""%1"" (%2 Мб) - |превышает максимально допустимый размер файла (%3 Мб).'"), - Имя, - ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Для пользовательского интерфейса. @@ -358,51 +156,6 @@ КонецФункции -// Возвращает текст сообщения об ошибке создания нового файла. -// -// Параметры: -// ИнформацияОбОшибке - ИнформацияОбОшибке. -// -Функция ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке) Экспорт - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка создания нового файла. - | - |%1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - -КонецФункции - -// Возвращает стандартный текст ошибки. -Функция ОшибкаФайлНеНайденВХранилищеФайлов(ИмяФайла, ПоискВТоме = Истина, ВладелецФайла = "") Экспорт - - Если ПоискВТоме Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось открыть файл: - |%1 - |который присоединен к: - |%2 - |по причине: двоичные данные файла были удалены. Возможно, файл очищен как ненужный или удален антивирусной программой. - |Обратитесь к администратору.'"), - ИмяФайла, - ВладелецФайла); - - Иначе - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось открыть файл: - |%1 - |который присоединен к: - |%2 - |по причине: двоичные данные файла были удалены. Возможно, файл очищен как ненужный. - |Обратитесь к администратору.'"), - ИмяФайла, - ВладелецФайла); - КонецЕсли; - - Возврат ТекстОшибки; - -КонецФункции - // Получить строку с представлением размера файла - например для отображения в Состояние при передаче файла. Функция ПолучитьСтрокуСРазмеромФайла(Знач РазмерВМб) Экспорт @@ -543,40 +296,6 @@ //////////////////////////////////////////////////////////////////////////////// // Прочие -// Удаляет файлы после импорта или загрузки. -Процедура УдалитьФайлыПослеДобавления(МассивСтруктурВсехФайлов, МассивВсехПапок) Экспорт - - Для Каждого Элемент Из МассивСтруктурВсехФайлов Цикл - ВыбранныйФайл = Новый Файл(Элемент.ИмяФайла); - ВыбранныйФайл.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ВыбранныйФайл.ПолноеИмя); - КонецЦикла; - -КонецПроцедуры - -// Возвращает массив файлов, эмулируя работу НайтиФайлы - но не по файловой системе, а по Соответствию -// если ПсевдоФайловаяСистема пуста - работает с файловой системой. -Функция НайтиФайлыПсевдо(Знач ПсевдоФайловаяСистема, Путь) Экспорт - - Если ПсевдоФайловаяСистема.Количество() = 0 Тогда - Файлы = НайтиФайлы(Путь, "*.*"); - Возврат Файлы; - КонецЕсли; - - Файлы = Новый Массив; - - ЗначениеНайденное = ПсевдоФайловаяСистема.Получить(Строка(Путь)); - Если ЗначениеНайденное <> Неопределено Тогда - Для Каждого ИмяФайла Из ЗначениеНайденное Цикл - ФайлИзСписка = Новый Файл(ИмяФайла); - Файлы.Добавить(ФайлИзСписка); - КонецЦикла; - КонецЕсли; - - Возврат Файлы; - -КонецФункции - // Только для внутреннего использования. Процедура ЗаполнитьСтатусПодписи(СтрокаПодписи) Экспорт @@ -616,37 +335,12 @@ КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции -// Получить имя сканированного файла, вида ДМ-00000012, где ДМ - префикс базы. -// -// Параметры: -// НомерФайла - Число - целое число, например, 12. -// ПрефиксБазы - Строка - префикс базы, например, "ДМ". -// -// Возвращаемое значение: -// Строка - имя сканированного файла, например, "ДМ-00000012". -// -Функция ИмяСканированногоФайла(НомерФайла, ПрефиксБазы) Экспорт - - ИмяФайла = ""; - Если НЕ ПустаяСтрока(ПрефиксБазы) Тогда - ИмяФайла = ПрефиксБазы + "-"; - КонецЕсли; - - ИмяФайла = ИмяФайла + Формат(НомерФайла, "ЧЦ=9; ЧВН=; ЧГ=0"); - Возврат ИмяФайла; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ИзвлечениеТекста // Извлекает текст в соответствии с кодировкой. // Если кодировка не задана - сама вычисляет кодировку. // -Функция ИзвлечьТекстИзТекстовогоФайла(ПолноеИмяФайла, Кодировка, Отказ) +Функция ИзвлечьТекстИзТекстовогоФайла(ПолноеИмяФайла, Кодировка, Отказ) Экспорт ИзвлеченныйТекст = ""; @@ -674,7 +368,7 @@ // Извлечь текст из файла OpenDocument и возвратить его в виде строки. // -Функция ИзвлечьТекстOpenDocument(ПутьКФайлу, Отказ) +Функция ИзвлечьТекстOpenDocument(ПутьКФайлу, Отказ) Экспорт ИзвлеченныйТекст = ""; @@ -714,6 +408,12 @@ КонецФункции +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Извлечь текст из объекта ЧтениеXML (прочитанного из файла OpenDocument). Функция ИзвлечьТекстИзContentXML(ЧтениеXML) @@ -785,6 +485,30 @@ КонецФункции +// Получить имя сканированного файла, вида ДМ-00000012, где ДМ - префикс базы. +// +// Параметры: +// НомерФайла - Число - целое число, например, 12. +// ПрефиксБазы - Строка - префикс базы, например, "ДМ". +// +// Возвращаемое значение: +// Строка - имя сканированного файла, например, "ДМ-00000012". +// +Функция ИмяСканированногоФайла(НомерФайла, ПрефиксБазы) Экспорт + + ИмяФайла = ""; + Если НЕ ПустаяСтрока(ПрефиксБазы) Тогда + ИмяФайла = ПрефиксБазы + "-"; + КонецЕсли; + + ИмяФайла = ИмяФайла + Формат(НомерФайла, "ЧЦ=9; ЧВН=; ЧГ=0"); + Возврат ИмяФайла; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции. + Функция ЭтоЗарезервированноеИмяКаталога(ИмяПодКаталога) СписокИмен = Новый Соответствие(); diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl index 73e0ed107..99391175f 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Файловые функции". // @@ -14,7 +22,7 @@ ОбщиеНастройки = Новый Структура; ПерсональныеНастройки = Новый Структура; - РаботаСФайламиСлужебныйВызовСервера.ДобавитьНастройкиРаботыСФайлами(ОбщиеНастройки, ПерсональныеНастройки); + РаботаСФайламиСлужебный.ДобавитьНастройкиРаботыСФайлами(ОбщиеНастройки, ПерсональныеНастройки); ДобавитьНастройкиРаботыСФайлами(ОбщиеНастройки, ПерсональныеНастройки); diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index 30407dde1..b0f7d0215 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Формирует отчеты и отправляет их согласно настройкам транспорта (Папка, FILE, EMAIL, FTP); @@ -23,7 +31,7 @@ КонецЕсли; Если Не ПараметрыЖурнала.Свойство("ИмяСобытия") Тогда - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'", ОбщегоНазначения.КодОсновногоЯзыка())); КонецЕсли; Если Не ПараметрыЖурнала.Свойство("Данные") Тогда @@ -353,9 +361,8 @@ ПараметрыДоставки.Вставить("СтрокаОбщихОтчетов", ОпределитьСтрокуДереваДляПолучателя(ДеревоОтчетов, Неопределено, ПараметрыДоставки)); ЗаписьЖурнала(ПараметрыЖурнала, , - НСтр("ru = 'Инициализирована рассылка %1, автор: %2'"), , - "'"+ Строка(НаименованиеРассылки) +"'", - "'"+ Строка(ПараметрыДоставки.Автор) +"'"); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Инициализирована рассылка %1, автор: %2'"), + "'"+ Строка(НаименованиеРассылки) +"'","'"+ Строка(ПараметрыДоставки.Автор) +"'")); // Формирование и сохранение отчетов. НомерОтчета = 1; @@ -364,7 +371,8 @@ Если СтрокаОтчет.Настройки = Неопределено Тогда ТекстЖурнала = ТекстЖурнала + Символы.ПС + НСтр("ru = '(пользовательские настройки не заданы)'"); КонецЕсли; - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, ТекстЖурнала, , "'" + Строка(СтрокаОтчет.Отчет) + "'"); + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЖурнала, "'" + Строка(СтрокаОтчет.Отчет) + "'")); // Инициализация отчета. ПараметрыОтчета = Новый Структура("Отчет, Настройки, Форматы, ОтправлятьЕслиПустой"); @@ -403,19 +411,19 @@ Неопределено); КонецЕсли; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, - НСтр("ru = 'Отчет %1 успешно сформирован'"), , "'"+ Строка(СтрокаОтчет.Отчет) +"'"); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет %1 успешно сформирован'"), "'"+ Строка(СтрокаОтчет.Отчет) +"'")); НомерОтчета = НомерОтчета + 1; Исключение ЗаписьЖурнала(ПараметрыЖурнала, , - НСтр("ru = 'Отчет %1 не сформирован:'"), ИнформацияОбОшибке(), "'"+ Строка(СтрокаОтчет.Отчет) +"'"); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет %1 не сформирован:'"), "'"+ Строка(СтрокаОтчет.Отчет) +"'" ), ИнформацияОбОшибке()); КонецПопытки; КонецЦикла; // Проверка на количество сохраненных отчетов. Если ДеревоОтчетов.Строки.Найти(3, "Уровень", Истина) = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, - НСтр("ru = 'Рассылка отчетов не выполнена, так как отчеты пустые или не сформированы из-за ошибок.'"), ,); - ОбщегоНазначения.УдалитьВременныйКаталог(ПараметрыДоставки.КаталогВременныхФайлов); + НСтр("ru = 'Рассылка отчетов не выполнена, так как отчеты пустые или не сформированы из-за ошибок.'")); + ФайловаяСистема.УдалитьВременныйКаталог(ПараметрыДоставки.КаталогВременныхФайлов); Возврат Ложь; КонецЕсли; @@ -454,9 +462,8 @@ РассылкаВыполнена = Истина; ПараметрыДоставки.ВыполненаПоЭлектроннойПочте = Истина; Исключение - ЗаписьЖурнала(ПараметрыЖурнала, , - НСтр("ru = 'Не удалось отправить отчеты получателю %1:'"), ИнформацияОбОшибке(), - "'"+ Строка(СтрокаПолучатель.Ключ) +"'"); + ЗаписьЖурнала(ПараметрыЖурнала,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось отправить отчеты получателю %1:'"), "'"+ Строка(СтрокаПолучатель.Ключ) +"'"), ИнформацияОбОшибке()); КонецПопытки; // @@ -485,7 +492,7 @@ ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Рассылка не выполнена'")); КонецЕсли; - ОбщегоНазначения.УдалитьВременныйКаталог(ПараметрыДоставки.КаталогВременныхФайлов); + ФайловаяСистема.УдалитьВременныйКаталог(ПараметрыДоставки.КаталогВременныхФайлов); // Результат. Если ПараметрыЖурнала.Свойство("БылиОшибки") Тогда @@ -592,8 +599,15 @@ Если Настройки.Свойство("ВидКИ") Тогда СтрокаТаблицы.ГруппаКИ = Настройки.ВидКИ; Иначе - ИмяГруппыКИ = СтрЗаменить(МетаданныеОсновногоТипа.ПолноеИмя(), ".", ""); - СтрокаТаблицы.ГруппаКИ = Справочники.ВидыКонтактнойИнформации[ИмяГруппыКИ]; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ИмяГруппыКИ = СтрЗаменить(МетаданныеОсновногоТипа.ПолноеИмя(), ".", ""); + СтрокаТаблицы.ГруппаКИ = МодульУправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени(ИмяГруппыКИ); + + КонецЕсли; + КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ Справочник.ВидыКонтактнойИнформации ГДЕ Родитель = &Родитель И Тип = &Тип"; @@ -718,7 +732,7 @@ Результат = Новый Структура; Результат.Вставить("Рассылки", ТаблицаРассылок.ВыгрузитьКолонку("Рассылка")); Результат.Вставить("Текст", ТекстСообщения); - Результат.Вставить("Подробно", РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(МассивСообщений)); + Результат.Вставить("Подробно", СтрокаСообщенийПользователю(МассивСообщений)); ПоместитьВоВременноеХранилище(Результат, АдресРезультата); КонецПроцедуры @@ -862,6 +876,11 @@ Обработчик.ИзменяемыеОбъекты = "РегламентноеЗадание.РассылкаОтчетов"; Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "РассылкаОтчетов.ЗаполнитьНаименованиеПредопределенногоЭлементаЛичныеРассылки"; + КонецПроцедуры // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. @@ -1050,6 +1069,15 @@ КонецПроцедуры +// Вызывается при переходе на версию конфигурации 3.0.2.128 и при начальном заполнении. +Процедура ЗаполнитьНаименованиеПредопределенногоЭлементаЛичныеРассылки() Экспорт + + ЛичныеРассылки = Справочники.РассылкиОтчетов.ЛичныеРассылки.ПолучитьОбъект(); + ЛичныеРассылки.Наименование = НСтр("ru='Личные рассылки'"); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ЛичныеРассылки); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Выполнение регламентных заданий. @@ -1088,7 +1116,7 @@ // Параметры записи в журнал регистрации. ПараметрыЖурнала = Новый Структура("ИмяСобытия, Метаданные, Данные"); - ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Запуск по расписанию'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Запуск по расписанию'", ОбщегоНазначения.КодОсновногоЯзыка()); ПараметрыЖурнала.Метаданные = Рассылка.Метаданные(); ПараметрыЖурнала.Данные = Рассылка; @@ -1245,7 +1273,8 @@ КонецЕсли; Запрос.Текст = ТекстЗапроса; - ШаблонСообщенияОбОшибке = НСтр("ru = 'При формировании списка получателей ""%1"" возникла ошибка:'"); + ТекстСообщенияОбОшибкеДляЖурналаРегистрации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При формировании списка получателей ""%1"" возникла ошибка:'"), Строка(ТипПолучателей)); // Механизм расширения Попытка @@ -1255,9 +1284,7 @@ Возврат СписокПолучателей; КонецЕсли; Исключение - ЗаписьЖурнала(ПараметрыЖурнала, , - ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(), - Строка(ТипПолучателей)); + ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщенияОбОшибкеДляЖурналаРегистрации, ИнформацияОбОшибке()); Возврат СписокПолучателей; КонецПопытки; @@ -1265,9 +1292,7 @@ Попытка ТЗИтог = Запрос.Выполнить().Выгрузить(); Исключение - ЗаписьЖурнала(ПараметрыЖурнала, , - ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(), - Строка(ТипПолучателей)); + ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщенияОбОшибкеДляЖурналаРегистрации, ИнформацияОбОшибке()); Возврат СписокПолучателей; КонецПопытки; @@ -1297,10 +1322,8 @@ | - Рекомендуется проверить корректность настройки учетной записи электронной почты, от имени которой выполняется рассылка.'"); ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - ТекстОшибок, "", - "'"+ Строка(ТипПолучателей) +"'", - "'"+ Строка(ПараметрыЖурнала.Данные) +"'", - "'"+ Строка(ВидКИ) +"'"); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибок, "'"+ Строка(ТипПолучателей) +"'", + "'"+ Строка(ПараметрыЖурнала.Данные) +"'", "'"+ Строка(ВидКИ) +"'"), ""); КонецЕсли; Возврат СписокПолучателей; @@ -1488,8 +1511,7 @@ Если Не ПараметрыОтчета.Свойство("Инициализирован") Тогда ЗаписьЖурнала(ПараметрыЖурнала, , - НСтр("ru = 'Отчет ''%1'' не инициализирован'"), , - Строка(ПараметрыОтчета.Отчет)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ''%1'' не инициализирован'"), Строка(ПараметрыОтчета.Отчет))); Возврат Результат; КонецЕсли; @@ -1521,8 +1543,8 @@ Если Не Формирование.Успех Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'Отчет ""%1"":'"), Формирование.ТекстОшибки, - Строка(ПараметрыОтчета.Отчет)); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отчет ""%1"":'"), + Строка(ПараметрыОтчета.Отчет)), Формирование.ТекстОшибки); Результат.ТабДок = Неопределено; Возврат Результат; КонецЕсли; @@ -1603,8 +1625,8 @@ Попытка Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); - Прокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("ftp"); + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("ftp"); Иначе Прокси = Неопределено; КонецЕсли; @@ -1645,7 +1667,7 @@ КонецЕсли; Исключение ЗаписьЖурнала(ПараметрыЖурнала, , - ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(),); + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке()); КонецПопытки; КонецЕсли; @@ -1738,20 +1760,11 @@ // Когда тип = ИнформацияОбОшибке то Ошибка, // когда тип = Строка то Предупреждение, // в противном случае Информация. -// Текст - Строка - Краткое описание проблемы, который может содержать параметры %1, %2, %3 и %4. +// Текст - Строка - Краткое описание проблемы. // ОписаниеПроблемы - ИнформацияОбОшибке, Строка - Описание возникшей проблемы, которое добавляется после текста. // Пользователю выводится краткое представление ошибки, а в журнал записывается подробное представление ошибки. -// Параметр1 - Строка - Для подстановки в Текст вместо %1. -// Параметр2 - Строка - Для подстановки в Текст вместо %2. -// Параметр3 - Строка - Для подстановки в Текст вместо %3. -// Параметр4 - Строка - Для подстановки в Текст вместо %4. // -Процедура ЗаписьЖурнала(ПараметрыЖурнала, Знач УровеньЖурнала = Неопределено, Знач Текст = "", - Знач ОписаниеПроблемы = Неопределено, - Знач Параметр1 = Неопределено, - Знач Параметр2 = Неопределено, - Знач Параметр3 = Неопределено, - Знач Параметр4 = Неопределено) Экспорт +Процедура ЗаписьЖурнала(ПараметрыЖурнала, Знач УровеньЖурнала = Неопределено, Знач Текст = "", Знач ОписаниеПроблемы = Неопределено) Экспорт // Определение уровня журнала регистрации на основе типа переданного сообщения об ошибке. Если ТипЗнч(УровеньЖурнала) <> Тип("УровеньЖурналаРегистрации") Тогда @@ -1766,14 +1779,6 @@ ЗаписатьВЖурнал = ЗначениеЗаполнено(ПараметрыЖурнала.Данные); - // Комментарий для журнала регистрации и пользователя. - Если Параметр1 <> Неопределено Тогда - Текст = СтрЗаменить(Текст, "%1", Параметр1); // Переход на СтрШаблон невозможен. - Текст = СтрЗаменить(Текст, "%2", Параметр2); - Текст = СтрЗаменить(Текст, "%3", Параметр3); - Текст = СтрЗаменить(Текст, "%4", Параметр4); - КонецЕсли; - ТекстДляЖурнала = Текст; ТекстДляПользователя = Текст; Если ТипЗнч(ОписаниеПроблемы) = Тип("ИнформацияОбОшибке") Тогда @@ -1972,9 +1977,8 @@ Если ПараметрыФормата.ТипФайла = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - ЗаголовокОшибки, НСтр("ru = 'Формат не поддерживается'"), - "'"+ СтрокаОтчет.Ключ +"'", - "'"+ ПараметрыФормата.Имя +"'"); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, "'"+ СтрокаОтчет.Ключ +"'", "'"+ ПараметрыФормата.Имя +"'"), + НСтр("ru = 'Формат не поддерживается'")); Продолжить; КонецЕсли; @@ -1982,9 +1986,8 @@ СтрокаОтчет.Значение.Записать(ПолноеИмяФайла, ПараметрыФормата.ТипФайла); Исключение ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - ЗаголовокОшибки, ИнформацияОбОшибке(), - "'"+ СтрокаОтчет.Ключ +"'", - "'"+ ПараметрыФормата.Имя +"'"); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, "'"+ СтрокаОтчет.Ключ +"'", "'"+ ПараметрыФормата.Имя +"'"), + ИнформацияОбОшибке()); Продолжить; КонецПопытки; КонецЕсли; @@ -1993,10 +1996,10 @@ ВременныйФайл = Новый Файл(ПолноеИмяФайла); Если Не ВременныйФайл.Существует() Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - ЗаголовокОшибки + Символы.ПС + НСтр("ru = 'Файл %3 не найден.'"), , - "'"+ СтрокаОтчет.Ключ +"'", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки + Символы.ПС + НСтр("ru = 'Файл %3 не найден.'"), + "'"+ СтрокаОтчет.Ключ +"'", "'"+ ПараметрыФормата.Имя +"'", - "'"+ ВременныйФайл.ПолноеИмя +"'"); + "'"+ ВременныйФайл.ПолноеИмя +"'")); Продолжить; КонецЕсли; @@ -2080,7 +2083,7 @@ ПараметрыЖурнала = Новый Структура; КонецЕсли; Если Не ПараметрыЖурнала.Свойство("ИмяСобытия") Тогда - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'", ОбщегоНазначения.КодОсновногоЯзыка())); КонецЕсли; Если Не ПараметрыЖурнала.Свойство("Данные") Тогда ПараметрыЖурнала.Вставить("Данные", НаименованиеРассылки); @@ -2102,9 +2105,9 @@ Недоступные = ДоступностьОтчетов.Скопировать(Новый Структура("Доступен", Ложь)); Если Недоступные.Количество() > 0 Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'В рассылке есть недоступные отчеты (%1):%2'"), , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В рассылке есть недоступные отчеты (%1):%2'"), Недоступные.Количество(), - Символы.ПС + Символы.Таб + СтрСоединить(Недоступные.ВыгрузитьКолонку("Представление"), Символы.ПС + Символы.Таб)); + Символы.ПС + Символы.Таб + СтрСоединить(Недоступные.ВыгрузитьКолонку("Представление"), Символы.ПС + Символы.Таб))); Возврат Ложь; КонецЕсли; @@ -2135,8 +2138,8 @@ ПредставлениеПапки = Строка(ПараметрыДоставки.Папка); УстановитьПривилегированныйРежим(Ложь); ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'Недостаточно прав для создания файлов в папке ""%1"".'"), , - ПредставлениеПапки); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недостаточно прав для создания файлов в папке ""%1"".'"), + ПредставлениеПапки)); Возврат Ложь; КонецЕсли; КонецЕсли; @@ -2156,8 +2159,8 @@ ПараметрыДоставки.ИспользоватьСетевойКаталог = Ложь; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'Сетевой каталог %1 не выбран, доставка в сетевой каталог отключена'"), , - ЗначениеПодстановки); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сетевой каталог %1 не выбран, доставка в сетевой каталог отключена'"), + ЗначениеПодстановки)); Иначе @@ -2244,12 +2247,12 @@ // Шаблон темы Если Не ПараметрыДоставки.Свойство("ШаблонТемы") Или Не ЗначениеЗаполнено(ПараметрыДоставки.ШаблонТемы) Тогда - ПараметрыДоставки.Вставить("ШаблонТемы", РассылкаОтчетовКлиентСервер.ШаблонТемы()); + ПараметрыДоставки.Вставить("ШаблонТемы", ШаблонТемы()); КонецЕсли; // Шаблон сообщения Если Не ПараметрыДоставки.Свойство("ШаблонТекста") Или Не ЗначениеЗаполнено(ПараметрыДоставки.ШаблонТекста) Тогда - ПараметрыДоставки.Вставить("ШаблонТекста", РассылкаОтчетовКлиентСервер.ШаблонТекста()); + ПараметрыДоставки.Вставить("ШаблонТекста", ШаблонТекста()); Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда Документ = Новый ФорматированныйДокумент; Документ.Добавить(ПараметрыДоставки.ШаблонТекста, ТипЭлементаФорматированногоДокумента.Текст); @@ -2305,7 +2308,7 @@ КонецЕсли; // Каталог временных файлов. - ПараметрыДоставки.Вставить("КаталогВременныхФайлов", ОбщегоНазначения.СоздатьВременныйКаталог("RP")); + ПараметрыДоставки.Вставить("КаталогВременныхФайлов", ФайловаяСистема.СоздатьВременныйКаталог("RP")); // Соответствие каталогов временных файлов получателей. ПараметрыДоставки.Вставить("НастройкиПолучателей", Новый Соответствие); @@ -2321,7 +2324,7 @@ // Имя архива (удаление запрещенных символов, заполнение шаблона) и расширение. Если ПараметрыДоставки.Архивировать Тогда Если Не ПараметрыДоставки.Свойство("ИмяАрхива") Или Не ЗначениеЗаполнено(ПараметрыДоставки.ИмяАрхива) Тогда - ПараметрыДоставки.Вставить("ИмяАрхива", РассылкаОтчетовКлиентСервер.ШаблонИмениАрхива()); + ПараметрыДоставки.Вставить("ИмяАрхива", ШаблонИмениАрхива()); КонецЕсли; Структура = Новый Структура("НаименованиеРассылки, ДатаВыполнения", ПараметрыДоставки.Рассылка, ТекущаяДатаСеанса()); ИмяАрхива = РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон(ПараметрыДоставки.ИмяАрхива, Структура); @@ -2365,6 +2368,30 @@ Возврат Истина; КонецФункции +// Возвращает шаблон темы по умолчанию для доставки по электронной почте. +Функция ШаблонТемы() Экспорт + Возврат НСтр("ru = '[НаименованиеРассылки] от [ДатаВыполнения(ДЛФ=''D'')]'"); +КонецФункции + +// Возвращает шаблон тела сообщения по умолчанию для доставки по электронной почте. +Функция ШаблонТекста() Экспорт + Возврат НСтр( + "ru = 'Сформированы отчеты: + | + |[СформированныеОтчеты] + | + |[СпособДоставки] + | + |[ЗаголовокСистемы] + |[ДатаВыполнения(ДЛФ=''DD'')]'"); +КонецФункции + +// Возвращает шаблон наименования архива по умолчанию. +Функция ШаблонИмениАрхива() Экспорт + // Для формата даты локализация не требуется. + Возврат НСтр("ru = '[НаименованиеРассылки]_[ДатаВыполнения(ДФ=''yyyy-MM-dd'')]'"); +КонецФункции + // Формирует список рассылки из списка получателей, подготавливает все параметры письма // и передает управление подсистеме "РаботаСПочтовымиСообщениями". // Для контроля за выполнением рекомендуется вызывать в конструкции "Попытка ... Исключение". @@ -2708,12 +2735,31 @@ ПравоВывода = ПравоДоступа("Вывод", Метаданные); Если Не ПравоВывода Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'У пользователя %1 недостаточно прав на вывод информации'"), , - "'"+ Строка(Пользователи.ТекущийПользователь()) +"'"); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У пользователя %1 недостаточно прав на вывод информации'"), + "'"+ Строка(Пользователи.ТекущийПользователь()) +"'")); КонецЕсли; Возврат ПравоВывода; КонецФункции +// Преобразует массив сообщений пользователю в одну строку. +Функция СтрокаСообщенийПользователю(МассивОшибок = Неопределено, ДобавитьДежурнуюФразу = Истина) Экспорт + Если МассивОшибок = Неопределено Тогда + МассивОшибок = ПолучитьСообщенияПользователю(Истина); + КонецЕсли; + + Отступ = Символы.ПС + Символы.ПС; + + ВсеОшибки = ""; + Для Каждого Ошибка Из МассивОшибок Цикл + ВсеОшибки = СокрЛП(ВсеОшибки + Отступ + ?(ТипЗнч(Ошибка) = Тип("Строка"), Ошибка, Ошибка.Текст)); + КонецЦикла; + Если ВсеОшибки <> "" И ДобавитьДежурнуюФразу Тогда + ВсеОшибки = ВсеОшибки + Отступ + "---" + Отступ + НСтр("ru = 'Подробности см. в журнале регистрации.'"); + КонецЕсли; + + Возврат ВсеОшибки; +КонецФункции + // Если файл существует - добавляет суффикс в имя файла. // // Параметры: @@ -2951,5 +2997,4 @@ КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl index 2f2d8bcc4..1694fca67 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl @@ -1,9 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Для внутреннего использования. Функция СформироватьСписокПолучателейРассылки(Знач Параметры) Экспорт ПараметрыЖурнала = Новый Структура("ИмяСобытия, Метаданные, Данные, МассивОшибок, БылиОшибки"); - ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Формирование списка получателей'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Формирование списка получателей'", ОбщегоНазначения.КодОсновногоЯзыка()); ПараметрыЖурнала.МассивОшибок = Новый Массив; ПараметрыЖурнала.БылиОшибки = Ложь; ПараметрыЖурнала.Данные = Параметры.Ссылка; @@ -15,7 +23,7 @@ Если РезультатВыполнения.БылиКритичныеОшибки Тогда РезультатВыполнения.Текст = НСтр("ru = 'Не удалось сформировать список получателей'"); - РезультатВыполнения.Подробно = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); + РезультатВыполнения.Подробно = РассылкаОтчетов.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); КонецЕсли; Возврат РезультатВыполнения; diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl index 0fa27d099..dd661be0e 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Обработчик команды формы отчета. @@ -254,4 +262,99 @@ КонецПроцедуры +// Возвращает набор шаблонов заполнения расписаний регламентного задания. +Функция СписокВариантовЗаполненияРасписаний() Экспорт + + СписокВариантов = Новый СписокЗначений; + СписокВариантов.Добавить(1, НСтр("ru = 'Каждый день'")); + СписокВариантов.Добавить(2, НСтр("ru = 'Каждый второй день'")); + СписокВариантов.Добавить(3, НСтр("ru = 'Каждый четвертый день'")); + СписокВариантов.Добавить(4, НСтр("ru = 'По будням'")); + СписокВариантов.Добавить(5, НСтр("ru = 'По выходным'")); + СписокВариантов.Добавить(6, НСтр("ru = 'По понедельникам'")); + СписокВариантов.Добавить(7, НСтр("ru = 'По пятницам'")); + СписокВариантов.Добавить(8, НСтр("ru = 'По воскресеньям'")); + СписокВариантов.Добавить(9, НСтр("ru = 'В первый день месяца'")); + СписокВариантов.Добавить(10, НСтр("ru = 'В последний день месяца'")); + СписокВариантов.Добавить(11, НСтр("ru = 'Каждый квартал десятого числа'")); + СписокВариантов.Добавить(12, НСтр("ru = 'Другое...'")); + + Возврат СписокВариантов; +КонецФункции + +// Разбирает строку FTP адреса на Логин, Пароль, Сервер, Порт и Каталог. +// Подробнее - см. RFC 1738 (http://tools.ietf.org/html/rfc1738#section-3.1). +// Шаблон: "ftp://:@:/". +// Фрагменты ":@", ":", ":" и "/" могут отсутствовать. +// +// Параметры: +// FTPАдрес - Строка - Полный путь к ftp ресурсу. +// +// Возвращаемое значение: +// Результат - Структура - Результат разбора полного пути. +// * Логин - Строка - Имя пользователя ftp. +// * Пароль - Строка - Пароль пользователя ftp. +// * Сервер - Строка - Имя сервера. +// * Порт - Число - Порт сервера. По умолчанию 21. +// * Каталог - Строка - Путь к каталогу на сервере. Первый символ всегда "/". +// +Функция РазобратьFTPАдрес(ПолныйFTPАдрес) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Логин", ""); + Результат.Вставить("Пароль", ""); + Результат.Вставить("Сервер", ""); + Результат.Вставить("Порт", 21); + Результат.Вставить("Каталог", "/"); + + FTPАдрес = ПолныйFTPАдрес; + + // Вырезать "ftp://". + Поз = СтрНайти(FTPАдрес, "://"); + Если Поз > 0 Тогда + FTPАдрес = Сред(FTPАдрес, Поз + 3); + КонецЕсли; + + // Каталог. + Поз = СтрНайти(FTPАдрес, "/"); + Если Поз > 0 Тогда + Результат.Каталог = Сред(FTPАдрес, Поз); + FTPАдрес = Лев(FTPАдрес, Поз - 1); + КонецЕсли; + + // Логин и пароль. + Поз = СтрНайти(FTPАдрес, "@"); + Если Поз > 0 Тогда + ЛогинПароль = Лев(FTPАдрес, Поз - 1); + FTPАдрес = Сред(FTPАдрес, Поз + 1); + + Поз = СтрНайти(ЛогинПароль, ":"); + Если Поз > 0 Тогда + Результат.Логин = Лев(ЛогинПароль, Поз - 1); + Результат.Пароль = Сред(ЛогинПароль, Поз + 1); + Иначе + Результат.Логин = ЛогинПароль; + КонецЕсли; + КонецЕсли; + + // Сервер и порт. + Поз = СтрНайти(FTPАдрес, ":"); + Если Поз > 0 Тогда + + Результат.Сервер = Лев(FTPАдрес, Поз - 1); + + ТипЧисло = Новый ОписаниеТипов("Число"); + Порт = ТипЧисло.ПривестиЗначение(Сред(FTPАдрес, Поз + 1)); + Результат.Порт = ?(Порт > 0, Порт, Результат.Порт); + + Иначе + + Результат.Сервер = FTPАдрес; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl index bb7ceca34..dad4c3101 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обработчик активизации строки пользовательской настройки СКД отчета. diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl index 63f26c008..9d39baa61 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl @@ -1,72 +1,12 @@ -#Область СлужебныеПроцедурыИФункции +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Разбирает строку FTP адреса на Логин, Пароль, Сервер, Порт и Каталог. -// Подробнее - см. RFC 1738 (http://tools.ietf.org/html/rfc1738#section-3.1). -// Шаблон: "ftp://:@:/". -// Фрагменты ":@", ":", ":" и "/" могут отсутствовать. -// -// Параметры: -// FTPАдрес - Строка - Полный путь к ftp ресурсу. -// -// Возвращаемое значение: -// Результат - Структура - Результат разбора полного пути. -// * Логин - Строка - Имя пользователя ftp. -// * Пароль - Строка - Пароль пользователя ftp. -// * Сервер - Строка - Имя сервера. -// * Порт - Число - Порт сервера. По умолчанию 21. -// * Каталог - Строка - Путь к каталогу на сервере. Первый символ всегда "/". -// -Функция РазобратьFTPАдрес(ПолныйFTPАдрес) Экспорт - - Результат = Новый Структура; - Результат.Вставить("Логин", ""); - Результат.Вставить("Пароль", ""); - Результат.Вставить("Сервер", ""); - Результат.Вставить("Порт", 21); - Результат.Вставить("Каталог", "/"); - - FTPАдрес = ПолныйFTPАдрес; - - // Вырезать "ftp://". - Поз = СтрНайти(FTPАдрес, "://"); - Если Поз > 0 Тогда - FTPАдрес = Сред(FTPАдрес, Поз + 3); - КонецЕсли; - - // Каталог. - Поз = СтрНайти(FTPАдрес, "/"); - Если Поз > 0 Тогда - Результат.Каталог = Сред(FTPАдрес, Поз); - FTPАдрес = Лев(FTPАдрес, Поз - 1); - КонецЕсли; - - // Логин и пароль. - Поз = СтрНайти(FTPАдрес, "@"); - Если Поз > 0 Тогда - ЛогинПароль = Лев(FTPАдрес, Поз - 1); - FTPАдрес = Сред(FTPАдрес, Поз + 1); - - Поз = СтрНайти(ЛогинПароль, ":"); - Если Поз > 0 Тогда - Результат.Логин = Лев(ЛогинПароль, Поз - 1); - Результат.Пароль = Сред(ЛогинПароль, Поз + 1); - Иначе - Результат.Логин = ЛогинПароль; - КонецЕсли; - КонецЕсли; - - // Сервер и порт. - Поз = СтрНайти(FTPАдрес, ":"); - Если Поз > 0 Тогда - Результат.Сервер = Лев(FTPАдрес, Поз - 1); - Результат.Порт = СтрокуВЧисло(Сред(FTPАдрес, Поз + 1), Результат.Порт); - Иначе - Результат.Сервер = FTPАдрес; - КонецЕсли; - - Возврат Результат; - -КонецФункции +#Область СлужебныеПроцедурыИФункции // Заполняет шаблон из структуры параметров, поддерживает форматирование, может оставлять обрамление шаблона. // Ограничение: должны присутствовать и левый и правый элементы обрамления. @@ -118,93 +58,6 @@ Возврат Результат; КонецФункции -// Возвращает шаблон темы по умолчанию для доставки по электронной почте. -Функция ШаблонТемы() Экспорт - Возврат НСтр("ru = '[НаименованиеРассылки] от [ДатаВыполнения(ДЛФ=''D'')]'"); -КонецФункции - -// Возвращает шаблон тела сообщения по умолчанию для доставки по электронной почте. -Функция ШаблонТекста() Экспорт - Возврат НСтр( - "ru = 'Сформированы отчеты: - | - |[СформированныеОтчеты] - | - |[СпособДоставки] - | - |[ЗаголовокСистемы] - |[ДатаВыполнения(ДЛФ=''DD'')]'"); -КонецФункции - -// Возвращает шаблон наименования архива по умолчанию. -Функция ШаблонИмениАрхива() Экспорт - // Для формата даты локализация не требуется. - Возврат НСтр("ru = '[НаименованиеРассылки]_[ДатаВыполнения(ДФ=''yyyy-MM-dd'')]'"); -КонецФункции - -// Возвращает набор шаблонов заполнения расписаний регламентного задания. -Функция СписокВариантовЗаполненияРасписаний() Экспорт - - СписокВариантов = Новый СписокЗначений; - СписокВариантов.Добавить(1, НСтр("ru = 'Каждый день'")); - СписокВариантов.Добавить(2, НСтр("ru = 'Каждый второй день'")); - СписокВариантов.Добавить(3, НСтр("ru = 'Каждый четвертый день'")); - СписокВариантов.Добавить(4, НСтр("ru = 'По будням'")); - СписокВариантов.Добавить(5, НСтр("ru = 'По выходным'")); - СписокВариантов.Добавить(6, НСтр("ru = 'По понедельникам'")); - СписокВариантов.Добавить(7, НСтр("ru = 'По пятницам'")); - СписокВариантов.Добавить(8, НСтр("ru = 'По воскресеньям'")); - СписокВариантов.Добавить(9, НСтр("ru = 'В первый день месяца'")); - СписокВариантов.Добавить(10, НСтр("ru = 'В последний день месяца'")); - СписокВариантов.Добавить(11, НСтр("ru = 'Каждый квартал десятого числа'")); - СписокВариантов.Добавить(12, НСтр("ru = 'Другое...'")); - - Возврат СписокВариантов; -КонецФункции - -// Преобразует массив сообщений пользователю в одну строку. -Функция СтрокаСообщенийПользователю(МассивОшибок = Неопределено, ДобавитьДежурнуюФразу = Истина) Экспорт - Если МассивОшибок = Неопределено Тогда - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - МассивОшибок = ПолучитьСообщенияПользователю(Истина); - #Иначе - Возврат ""; - #КонецЕсли - КонецЕсли; - - Отступ = Символы.ПС + Символы.ПС; - - ВсеОшибки = ""; - Для Каждого Ошибка Из МассивОшибок Цикл - ВсеОшибки = СокрЛП(ВсеОшибки + Отступ + ?(ТипЗнч(Ошибка) = Тип("Строка"), Ошибка, Ошибка.Текст)); - КонецЦикла; - Если ВсеОшибки <> "" И ДобавитьДежурнуюФразу Тогда - ВсеОшибки = ВсеОшибки + Отступ + "---" + Отступ + НСтр("ru = 'Подробности см. в журнале регистрации.'"); - КонецЕсли; - - Возврат ВсеОшибки; -КонецФункции - -// Превращает строку в число без вызова исключений. Стандартная функция преобразования. -// Число() строго контролирует отсутствие каких либо символов кроме числовых. -// -Функция СтрокуВЧисло(ИсходнаяСтрока, ЗначениеПоУмолчанию = 0) - СтрокаВЧисло = Новый Соответствие; - Для Значение = 0 По 9 Цикл - СтрокаВЧисло.Вставить(Строка(Значение), Значение); - КонецЦикла; - - Результат = 0; - Для Индекс = 1 По СтрДлина(ИсходнаяСтрока) Цикл - ПоследнийРазряд = СтрокаВЧисло.Получить(Сред(ИсходнаяСтрока, Индекс, 1)); - Если ПоследнийРазряд <> Неопределено Тогда - Результат = Результат * 10 + ПоследнийРазряд; - КонецЕсли; - КонецЦикла; - - Возврат ?(Результат = 0, ЗначениеПоУмолчанию, Результат); -КонецФункции - // Формирует представление способов доставки в соответствии с параметрами доставки. // // Параметры: diff --git a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl index 44f6e50c5..39e4c8077 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Позволяет изменить форматы по умолчанию и установить картинки. @@ -39,13 +47,14 @@ // Пример: // Настройки = Новый Структура; // Настройки.Вставить("ОсновнойТип", Тип("СправочникСсылка.Контрагенты")); -// Настройки.Вставить("ВидКИ", Справочники.ВидыКонтактнойИнформации.EmailКонтрагента); +// Настройки.Вставить("ВидКИ", УправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени("EmailКонтрагента")); // РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы, Настройки); // Процедура ПереопределитьТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы) Экспорт КонецПроцедуры + // Позволяет определить свой обработчик для сохранения табличного документа в формат. // Важно: // Если используется нестандартная обработка (СтандартнаяОбработка меняется на Ложь), diff --git a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl index d2f441cab..bef75a435 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Таблица типов получателей в разрезах хранения и пользовательского представления этих типов. diff --git a/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl b/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl index c42a96205..fdd300730 100644 --- a/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Проверяет соответствие ИНН требованиям. diff --git a/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl index 711b3e73d..8ae8e2577 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // См. ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы. diff --git a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl index 812c7d654..452f4b1f4 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определяет следующие свойств регламентных заданий: diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index 03b866148..a981f4e74 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // В локальном режиме работы возвращает регламентные задания, соответствующие отбору. @@ -58,7 +66,7 @@ ВызватьИсключениеЕслиНетПраваАдминистрирования(); - КопияОтбора = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(Отбор); + КопияОтбора = ОбщегоНазначения.СкопироватьРекурсивно(Отбор); Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -254,23 +262,23 @@ // // Параметры: // Параметры - Структура - Параметры добавляемого задания, возможные ключи: -// Использование -// Метаданные - обязательно для указания. -// Параметры -// Ключ -// ИнтервалПовтораПриАварийномЗавершении. -// Расписание -// КоличествоПовторовПриАварийномЗавершении. +// * Использование +// * Метаданные - обязательно для указания +// * Параметры +// * Ключ +// * ИнтервалПовтораПриАварийномЗавершении +// * Расписание +// * КоличествоПовторовПриАварийномЗавершении // // Возвращаемое значение: -// РегламентноеЗадание, СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных - Идентификатор +// РегламентноеЗадание, СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор // добавленного задания. // Функция ДобавитьЗадание(Параметры) Экспорт ВызватьИсключениеЕслиНетПраваАдминистрирования(); - ПараметрыЗадания = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(Параметры); + ПараметрыЗадания = ОбщегоНазначения.СкопироватьРекурсивно(Параметры); Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -448,15 +456,14 @@ // В случае вызова в транзакции на задание устанавливается объектная блокировка. // // Параметры: -// Идентификатор - СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных - Идентификатор задания -// Параметры - Структура - Параметры, которые следует установить заданию, -// возможные ключи: -// Использование -// Параметры -// Ключ -// ИнтервалПовтораПриАварийномЗавершении. -// Расписание -// КоличествоПовторовПриАварийномЗавершении. +// Идентификатор - СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных - идентификатор задания +// Параметры - Структура - Параметры, которые следует установить заданию, возможные ключи: +// * Использование +// * Параметры +// * Ключ +// * ИнтервалПовтораПриАварийномЗавершении +// * Расписание +// * КоличествоПовторовПриАварийномЗавершении // // В случае если задание создано на основе шаблона или предопределенное, могут быть указаны // только следующие ключи: Использование. @@ -465,7 +472,7 @@ ВызватьИсключениеЕслиНетПраваАдминистрирования(); - ПараметрыЗадания = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(Параметры); + ПараметрыЗадания = ОбщегоНазначения.СкопироватьРекурсивно(Параметры); Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда Идентификатор = Идентификатор.УникальныйИдентификатор; @@ -506,7 +513,7 @@ И (ПараметрыЗадания.Количество() > 1 ИЛИ НЕ ПараметрыЗадания.Свойство("Использование")) Тогда - Для каждого ПараметрЗадания Из ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыЗадания) Цикл + Для каждого ПараметрЗадания Из ОбщегоНазначения.СкопироватьРекурсивно(ПараметрыЗадания) Цикл Если ПараметрЗадания.Ключ = "Использование" Тогда Продолжить; @@ -544,7 +551,7 @@ И (ПараметрыЗадания.Количество() > 1 ИЛИ НЕ ПараметрыЗадания.Свойство("Использование")) Тогда - Для Каждого ПараметрЗадания Из ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыЗадания) Цикл + Для Каждого ПараметрЗадания Из ОбщегоНазначения.СкопироватьРекурсивно(ПараметрыЗадания) Цикл Если ПараметрЗадания.Ключ = "Использование" Тогда Продолжить; @@ -623,7 +630,7 @@ КонецПроцедуры // Возвращает уникальный идентификатор регламентного задания. -// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Перед вызовом требуется иметь право администрирования или УстановитьПривилегированныйРежим. // // Параметры: // Идентификатор - ОбъектМетаданных - объект метаданных регламентного задания для поиска @@ -696,7 +703,7 @@ // Процедуры и функции без поддержки модели сервиса. // Возвращает использование регламентного задания. -// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Перед вызовом требуется иметь право администрирования или УстановитьПривилегированныйРежим. // Не предназначена для использования в модели сервиса. // // Параметры: @@ -720,7 +727,7 @@ КонецФункции // Возвращает расписание регламентного задания. -// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Перед вызовом требуется иметь право администрирования или УстановитьПривилегированныйРежим. // Не предназначена для использования в модели сервиса. // // Параметры: @@ -751,7 +758,7 @@ КонецФункции // Устанавливает использование регламентного задания. -// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Перед вызовом требуется иметь право администрирования или УстановитьПривилегированныйРежим. // Не предназначена для использования в модели сервиса. // // Параметры: @@ -777,7 +784,7 @@ КонецПроцедуры // Устанавливает расписание регламентного задания. -// Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. +// Перед вызовом требуется иметь право администрирования или УстановитьПривилегированныйРежим. // Не предназначена для использования в модели сервиса. // // Параметры: diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index 3617a12c5..8046e932f 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Проверяет, включено ли регламентное задание по функциональным опциям. @@ -122,7 +130,7 @@ КонецЦикла; КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Приложение было перемещено. + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Приложение было перемещено. |Регламентное задание ""%1"", работающее с внешними ресурсами, отключено.'"), РегламентноеЗадание.Синоним); Иначе @@ -141,7 +149,7 @@ КонецЦикла; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменилась строка соединения информационной базы. + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменилась строка соединения информационной базы. |Возможно информационная база была перемещена. |Регламентное задание ""%1"" отключено.'"), РегламентноеЗадание.Синоним); @@ -150,6 +158,8 @@ ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки); Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); + ВызватьИсключение ТекстИсключения; + КонецПроцедуры // Формирует таблицу зависимостей регламентных заданий от функциональных опций. @@ -257,8 +267,8 @@ Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебныйВызовСервера"); - МодульПолучениеФайловИзИнтернетаКлиентСервер.Разблокировать(); + МодульОбсужденияСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебный"); + МодульОбсужденияСлужебный.Разблокировать(); КонецЕсли; ПараметрыСеанса.РаботаСВнешнимиРесурсамиЗаблокирована = Ложь; @@ -281,8 +291,8 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебныйВызовСервера"); - МодульПолучениеФайловИзИнтернетаКлиентСервер.Заблокировать(); + МодульОбсужденияСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебный"); + МодульОбсужденияСлужебный.Заблокировать(); КонецЕсли; ПараметрыСеанса.РаботаСВнешнимиРесурсамиЗаблокирована = Истина; @@ -394,7 +404,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыБлокировкиРаботыСВнешнимиРесурсами"); + Блокировка.Добавить("Константа.ПараметрыБлокировкиРаботыСВнешнимиРесурсами"); Блокировка.Заблокировать(); СохраненныеПараметры = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить(); @@ -653,7 +663,7 @@ КонецПроцедуры -Функция ОбновленнаяТаблицаРегламентныхЗаданий(Параметры, АдресХранилища) Экспорт +Процедура СформироватьТаблицуРегламентныхЗаданий(Параметры, АдресХранилища) Экспорт ИдентификаторРегламентногоЗадания = Параметры.ИдентификаторРегламентногоЗадания; Таблица = Параметры.Таблица; @@ -672,7 +682,6 @@ ПараметризуемыеЗадания.Добавить(СтрокаРезультата.РегламентноеЗадание); КонецЦикла; - ЗаданияВМоделиСервиса = Новый Соответствие; ПодсистемаРаботаВМоделиСервиса = Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.Найти("РаботаВМоделиСервиса"); Для Каждого ОбъектМетаданных Из Метаданные.РегламентныеЗадания Цикл Если Не РегламентноеЗаданиеДоступноПоФункциональнымОпциям(ОбъектМетаданных, ПараметрыРегламентныхЗаданий) Тогда @@ -700,8 +709,7 @@ Идентификатор = Строка(Задание.УникальныйИдентификатор); - Если Индекс >= Таблица.Количество() - ИЛИ Таблица[Индекс].Идентификатор <> Идентификатор Тогда + Если Индекс >= Таблица.Количество() Или Таблица[Индекс].Идентификатор <> Идентификатор Тогда // Вставка нового задания. Обновляемое = Таблица.Вставить(Индекс); @@ -716,7 +724,7 @@ Обновляемое.Параметризуемое = Истина; КонецЕсли; - ОбновитьСтрокуТаблицыРегламентныхЗаданий(Обновляемое, Задание); + УстановитьСвойстваРегламентногоЗадания(Обновляемое, Задание); Индекс = Индекс + 1; КонецЦикла; @@ -724,6 +732,7 @@ Пока Индекс < Таблица.Количество() Цикл Таблица.Удалить(Индекс); КонецЦикла; + Таблица.Сортировать("Наименование"); Иначе Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору( Новый УникальныйИдентификатор(ИдентификаторРегламентногоЗадания)); @@ -738,7 +747,7 @@ Если ПараметризуемыеЗадания.Найти(Задание.Метаданные) <> Неопределено Тогда СтрокаЗадание.Параметризуемое = Истина; КонецЕсли; - ОбновитьСтрокуТаблицыРегламентныхЗаданий(СтрокаЗадание, Задание); + УстановитьСвойстваРегламентногоЗадания(СтрокаЗадание, Задание); КонецЕсли; КонецЕсли; @@ -748,32 +757,31 @@ ПоместитьВоВременноеХранилище(Результат, АдресХранилища); -КонецФункции +КонецПроцедуры -Процедура ОбновитьСтрокуТаблицыРегламентныхЗаданий(Строка, Задание) +Процедура УстановитьСвойстваРегламентногоЗадания(Приемник, ЗаданиеИсточник) - ЗаполнитьЗначенияСвойств(Строка, Задание); + ЗаполнитьЗначенияСвойств(Приемник, ЗаданиеИсточник); // Уточнение наименования - Строка.Наименование = ПредставлениеРегламентногоЗадания(Задание); + Приемник.Наименование = ПредставлениеРегламентногоЗадания(ЗаданиеИсточник); // Установка Даты завершения и Состояния завершения по последней фоновой процедуре. - СвойстваПоследнегоФоновогоЗадания = РегламентныеЗаданияСлужебный - .ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); + СвойстваПоследнегоФоновогоЗадания = СвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(ЗаданиеИсточник); - Строка.ИмяЗадания = Задание.Метаданные.Имя; + Приемник.ИмяЗадания = ЗаданиеИсточник.Метаданные.Имя; Если СвойстваПоследнегоФоновогоЗадания = Неопределено Тогда - Строка.ДатаНачала = ТекстНеОпределено(); - Строка.ДатаОкончания = ТекстНеОпределено(); - Строка.СостояниеВыполнения = ТекстНеОпределено(); + Приемник.ДатаНачала = ТекстНеОпределено(); + Приемник.ДатаОкончания = ТекстНеОпределено(); + Приемник.СостояниеВыполнения = ТекстНеОпределено(); Иначе - Строка.ДатаНачала = ?(ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Начало), + Приемник.ДатаНачала = ?(ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Начало), СвойстваПоследнегоФоновогоЗадания.Начало, "<>"); - Строка.ДатаОкончания = ?(ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Конец), + Приемник.ДатаОкончания = ?(ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Конец), СвойстваПоследнегоФоновогоЗадания.Конец, "<>"); - Строка.СостояниеВыполнения = СвойстваПоследнегоФоновогоЗадания.Состояние; + Приемник.СостояниеВыполнения = СвойстваПоследнегоФоновогоЗадания.Состояние; КонецЕсли; КонецПроцедуры @@ -809,7 +817,7 @@ Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Задание); ПараметрыВыполнения.ЗапускВыполнен = Ложь; - СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); + СвойстваПоследнегоФоновогоЗадания = СвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); Если СвойстваПоследнегоФоновогоЗадания <> Неопределено И СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Активно Тогда @@ -909,7 +917,7 @@ УстановитьПривилегированныйРежим(Истина); ИдентификаторРегламентногоЗадания = ?(ТипЗнч(Задание) = Тип("РегламентноеЗадание"), Строка(Задание.УникальныйИдентификатор), Задание); - СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(ИдентификаторРегламентногоЗадания); + СвойстваПоследнегоФоновогоЗадания = СвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(ИдентификаторРегламентногоЗадания); Возврат ?(СвойстваПоследнегоФоновогоЗадания = Неопределено, "", СообщенияИОписанияОшибокФоновогоЗадания(СвойстваПоследнегоФоновогоЗадания.Идентификатор) ); @@ -949,7 +957,7 @@ // Только для внутреннего использования. // -Функция ТаблицаСвойствФоновыхЗаданийВФоне(Параметры, АдресХранилища) Экспорт +Процедура ЗаполнитьТаблицуСвойствФоновыхЗаданийВФоне(Параметры, АдресХранилища) Экспорт ТаблицаСвойств = СвойстваФоновыхЗаданий(Параметры.Отбор); @@ -958,7 +966,7 @@ ПоместитьВоВременноеХранилище(Результат, АдресХранилища); -КонецФункции +КонецПроцедуры // Возвращает таблицу свойств фоновых заданий. // Структуру таблицы смотри в функции ПустаяТаблицаСвойствФоновыхЗаданий(). @@ -1161,7 +1169,7 @@ // Возвращаемое значение: // СтрокаТаблицыЗначений, Неопределено. // -Функция ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(РегламентноеЗадание) Экспорт +Функция СвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(РегламентноеЗадание) ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); @@ -1457,11 +1465,11 @@ Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебныйВызовСервера"); - МодульПолучениеФайловИзИнтернетаКлиентСервер.Заблокировать(); + МодульОбсужденияСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбсужденияСлужебный"); + МодульОбсужденияСлужебный.Заблокировать(); КонецЕсли; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа с внешними ресурсами заблокирована'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа с внешними ресурсами заблокирована'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение, , , ТекстСообщения); КонецПроцедуры @@ -1487,7 +1495,6 @@ ПараметрыБлокировки.Вставить("РазделениеВключено", РазделениеВключено); Если РазделениеВключено Тогда ПараметрыБлокировки.Вставить("СтрокаСоединения", ""); - ПараметрыБлокировки.Вставить("ИмяКомпьютера", ""); КонецЕсли; ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки); Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); @@ -1509,8 +1516,6 @@ ПараметрыБлокировки.Вставить("ОтключенныеЗадания", Новый Массив); ПараметрыБлокировки.Вставить("ЭтоФайловаяБаза", ЭтоФайловаяБаза); ПараметрыБлокировки.Вставить("СтрокаСоединения", ?(РазделениеВключено, "", СтрокаСоединения)); - ПараметрыБлокировки.Вставить("ИмяКомпьютера", ?(РазделениеВключено, "", ИмяКомпьютера())); - ПараметрыБлокировки.Вставить("ПроверятьИмяСервера", Истина); ПараметрыБлокировки.Вставить("ИдентификаторБазы", ИдентификаторБазы); Возврат ПараметрыБлокировки; diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl index 6d451b85c..5553f5152 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Устанавливает настройку в параметры резервного копирования. diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБГлобальный/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБГлобальный/Module.bsl index e90418416..1dedc6b86 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выполняет обработчик ожидания старта автоматического резервного копирования diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index f5da4c8e4..9173f7104 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму создания резервной копии. @@ -21,7 +29,7 @@ // См. ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы. Процедура ПриНачалеРаботыСистемы(Параметры) Экспорт - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Или ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если Не ДоступноРезервноеКопирование() Тогда Возврат; КонецЕсли; @@ -77,7 +85,7 @@ Возврат; #КонецЕсли - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда Возврат; КонецЕсли; @@ -149,7 +157,7 @@ // Процедура ОбработчикОжиданияЗапуска() Экспорт - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Или ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если Не ДоступноРезервноеКопирование() Тогда Возврат; КонецЕсли; @@ -240,74 +248,6 @@ КонецПроцедуры -// Удаляет резервные копии по заданным настройкам. -// -Процедура УдалитьРезервныеКопииПоНастройке() Экспорт - - // Очистка архива с копиями. - ФиксированныеПараметрыРезервногоКопированияИБ = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().РезервноеКопированиеИБ; - КаталогХранения = ФиксированныеПараметрыРезервногоКопированияИБ.КаталогХраненияРезервныхКопий; - ПараметрыУдаления = ФиксированныеПараметрыРезервногоКопированияИБ.ПараметрыУдаления; - - Если ПараметрыУдаления.ТипОграничения <> "ХранитьВсе" И КаталогХранения <> Неопределено Тогда - - Попытка - Файл = Новый Файл(КаталогХранения); - Если НЕ Файл.ЭтоКаталог() Тогда - Возврат; - КонецЕсли; - - МассивФайлов = НайтиФайлы(КаталогХранения, "backup????_??_??_??_??_??*", Ложь); - СписокУдаляемыхФайлов = Новый Массив; - - // Удаление резервных копий. - Если ПараметрыУдаления.ТипОграничения = "ПоПериоду" Тогда - Для Каждого ЭлементФайл Из МассивФайлов Цикл - ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); - ЗначениеВСекундах = КоличествоСекундВПериоде(ПараметрыУдаления.ЗначениеВЕдиницахИзмерения, ПараметрыУдаления.ЕдиницаИзмеренияПериода); - ПроизводитьУдаление = ((ТекущаяДата - ЗначениеВСекундах) > ЭлементФайл.ПолучитьВремяИзменения()); - Если ПроизводитьУдаление Тогда - СписокУдаляемыхФайлов.Добавить(ЭлементФайл); - КонецЕсли; - КонецЦикла; - - ИначеЕсли МассивФайлов.Количество() >= ПараметрыУдаления.КоличествоКопий Тогда - СписокФайлов = Новый СписокЗначений; - СписокФайлов.ЗагрузитьЗначения(МассивФайлов); - - Для Каждого Файл Из СписокФайлов Цикл - Файл.Значение = Файл.Значение.ПолучитьВремяИзменения(); - КонецЦикла; - - СписокФайлов.СортироватьПоЗначению(НаправлениеСортировки.Убыв); - ДатаПоследнегоАрхива = СписокФайлов[ПараметрыУдаления.КоличествоКопий-1].Значение; - - Для Каждого ЭлементФайл Из МассивФайлов Цикл - - Если ЭлементФайл.ПолучитьВремяИзменения() <= ДатаПоследнегоАрхива Тогда - СписокУдаляемыхФайлов.Добавить(ЭлементФайл); - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - Для Каждого УдаляемыйФайл Из СписокУдаляемыхФайлов Цикл - УдалитьФайлы(УдаляемыйФайл.ПолноеИмя); - КонецЦикла; - - Исключение - - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", - НСтр("ru = 'Не удалось провести очистку каталога с резервными копиями.'") + Символы.ПС - + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина); - - КонецПопытки; - - КонецЕсли; - -КонецПроцедуры - // При старте системы проверяет, первый ли это запуск после проведения резервного копирования. // Если да - выводит форму обработчика с результатами резервного копирования. // @@ -377,26 +317,6 @@ КонецФункции -// Возвращает параметры скрипта резервного копирования. -// -// Возвращаемое значение - Структура - структура скрипта резервного копирования. -// -Функция КлиентскиеПараметрыРезервногоКопирования() Экспорт - #Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда - - СтруктураПараметров = Новый Структура(); - СтруктураПараметров.Вставить("ИмяФайлаПрограммы", СтандартныеПодсистемыКлиент.ИмяИсполняемогоФайлаПриложения()); - СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации", НСтр("ru = 'Резервное копирование ИБ'")); - - // Вызов КаталогВременныхФайлов вместо ПолучитьИмяВременногоФайла, так как каталог не должен удаляться - // автоматически при завершении клиентского приложения. - КаталогВременныхФайловОбновления = КаталогВременныхФайлов() + "1Cv8Backup." + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=ггММддЧЧммсс") + "\"; - СтруктураПараметров.Вставить("КаталогВременныхФайловОбновления", КаталогВременныхФайловОбновления); - - Возврат СтруктураПараметров; - #КонецЕсли -КонецФункции - // Получение параметров аутентификации пользователя для обновления. // Создает виртуального пользователя, если в этом есть необходимость. // @@ -441,35 +361,57 @@ // Проверят возможность подключения к информационной базе. // -Функция ПроверитьДоступКИнформационнойБазе(ПарольАдминистратора) Экспорт +Процедура ПроверитьДоступКИнформационнойБазе(ПарольАдминистратора, Знач Оповещение) Экспорт - // В базовых версиях проверку подключения не осуществляем; - // при некорректном вводе имени и пароля обновление завершится неуспешно. - РезультатПодключения = Новый Структура("ОшибкаПодключенияКомпоненты, КраткоеОписаниеОшибки", Ложь, ""); - ПараметрыРаботыКлиентаПриЗапуске = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); - Если ПараметрыРаботыКлиентаПриЗапуске.ЭтоБазоваяВерсияКонфигурации Тогда - Возврат РезультатПодключения; - КонецЕсли; + Контекст = Новый Структура; + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("ПарольАдминистратора", ПарольАдминистратора); - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); + Оповещение = Новый ОписаниеОповещения("ПроверитьДоступКИнформационнойБазеПослеРегистрацииCOM", ЭтотОбъект, Контекст); + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь, Оповещение); - ПараметрыПодключения = ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения(); - ПараметрыПодключения.КаталогИнформационнойБазы = СтрРазделить(СтрокаСоединенияИнформационнойБазы(), """")[1]; - ПараметрыПодключения.ИмяПользователя = ПараметрыРаботыКлиентаПриЗапуске.ИмяТекущегоПользователя; - ПараметрыПодключения.ПарольПользователя = ПарольАдминистратора; +КонецПроцедуры + +Процедура ПроверитьДоступКИнформационнойБазеПослеРегистрацииCOM(Зарегистрировано, Контекст) Экспорт - Результат = ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой(ПараметрыПодключения); + Оповещение = Контекст.Оповещение; + ПарольАдминистратора = Контекст.ПарольАдминистратора; - Если Результат.ОшибкаПодключенияКомпоненты Тогда + РезультатПодключения = РезультатПодключения(); + + Если Зарегистрировано Тогда - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( - СобытиеЖурналаРегистрации(),"Ошибка", Результат.ПодробноеОписаниеОшибки, , Истина); + ПараметрыРаботыКлиентаПриЗапуске = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(); + + ПараметрыПодключения = ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения(); + ПараметрыПодключения.КаталогИнформационнойБазы = СтрРазделить(СтрокаСоединенияИнформационнойБазы(), """")[1]; + ПараметрыПодключения.ИмяПользователя = ПараметрыРаботыКлиентаПриЗапуске.ИмяТекущегоПользователя; + ПараметрыПодключения.ПарольПользователя = ПарольАдминистратора; + + Результат = ОбщегоНазначенияКлиент.УстановитьВнешнееСоединениеСБазой(ПараметрыПодключения); + + Если Результат.ОшибкаПодключенияКомпоненты Тогда + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( + СобытиеЖурналаРегистрации(),"Ошибка", Результат.ПодробноеОписаниеОшибки, , Истина); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(РезультатПодключения, Результат); + + Результат.Соединение = Неопределено; // Разрываем соединение. КонецЕсли; - ЗаполнитьЗначенияСвойств(РезультатПодключения, Результат); + ВыполнитьОбработкуОповещения(Оповещение, РезультатПодключения); - Возврат РезультатПодключения; +КонецПроцедуры + +Функция РезультатПодключения() + + Результат = Новый Структура; + Результат.Вставить("ОшибкаПодключенияКомпоненты", Ложь); + Результат.Вставить("КраткоеОписаниеОшибки", ""); + + Возврат Результат; КонецФункции @@ -489,9 +431,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. - Функция КоличествоСекундВПериоде(Период, ТипПериода) Если ТипПериода = "День" Тогда @@ -508,7 +447,79 @@ КонецФункции -#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + +// Удаляет резервные копии по заданным настройкам. +// +Процедура УдалитьРезервныеКопииПоНастройке() Экспорт + + // АПК-выкл:566 код никогда не выполнится в браузере. + + // Очистка архива с копиями. + ФиксированныеПараметрыРезервногоКопированияИБ = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().РезервноеКопированиеИБ; + КаталогХранения = ФиксированныеПараметрыРезервногоКопированияИБ.КаталогХраненияРезервныхКопий; + ПараметрыУдаления = ФиксированныеПараметрыРезервногоКопированияИБ.ПараметрыУдаления; + + Если ПараметрыУдаления.ТипОграничения <> "ХранитьВсе" И КаталогХранения <> Неопределено Тогда + + Попытка + Файл = Новый Файл(КаталогХранения); + Если НЕ Файл.ЭтоКаталог() Тогда + Возврат; + КонецЕсли; + + МассивФайлов = НайтиФайлы(КаталогХранения, "backup????_??_??_??_??_??*", Ложь); + СписокУдаляемыхФайлов = Новый Массив; + + // Удаление резервных копий. + Если ПараметрыУдаления.ТипОграничения = "ПоПериоду" Тогда + Для Каждого ЭлементФайл Из МассивФайлов Цикл + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + ЗначениеВСекундах = КоличествоСекундВПериоде(ПараметрыУдаления.ЗначениеВЕдиницахИзмерения, ПараметрыУдаления.ЕдиницаИзмеренияПериода); + ПроизводитьУдаление = ((ТекущаяДата - ЗначениеВСекундах) > ЭлементФайл.ПолучитьВремяИзменения()); + Если ПроизводитьУдаление Тогда + СписокУдаляемыхФайлов.Добавить(ЭлементФайл); + КонецЕсли; + КонецЦикла; + + ИначеЕсли МассивФайлов.Количество() >= ПараметрыУдаления.КоличествоКопий Тогда + СписокФайлов = Новый СписокЗначений; + СписокФайлов.ЗагрузитьЗначения(МассивФайлов); + + Для Каждого Файл Из СписокФайлов Цикл + Файл.Значение = Файл.Значение.ПолучитьВремяИзменения(); + КонецЦикла; + + СписокФайлов.СортироватьПоЗначению(НаправлениеСортировки.Убыв); + ДатаПоследнегоАрхива = СписокФайлов[ПараметрыУдаления.КоличествоКопий-1].Значение; + + Для Каждого ЭлементФайл Из МассивФайлов Цикл + + Если ЭлементФайл.ПолучитьВремяИзменения() <= ДатаПоследнегоАрхива Тогда + СписокУдаляемыхФайлов.Добавить(ЭлементФайл); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Для Каждого УдаляемыйФайл Из СписокУдаляемыхФайлов Цикл + УдалитьФайлы(УдаляемыйФайл.ПолноеИмя); + КонецЦикла; + + Исключение + + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", + НСтр("ru = 'Не удалось провести очистку каталога с резервными копиями.'") + Символы.ПС + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина); + + КонецПопытки; + + КонецЕсли; + + // АПК-вкл:566 + +КонецПроцедуры Функция КодировкаФайловПрограммыРезервногоКопированияИБ() Экспорт @@ -517,6 +528,35 @@ КонецФункции +// Возвращает параметры скрипта резервного копирования. +// +// Возвращаемое значение - Структура - структура скрипта резервного копирования. +// +Функция КлиентскиеПараметрыРезервногоКопирования() Экспорт + + СтруктураПараметров = Новый Структура(); + СтруктураПараметров.Вставить("ИмяФайлаПрограммы", СтандартныеПодсистемыКлиент.ИмяИсполняемогоФайлаПриложения()); + СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации", НСтр("ru = 'Резервное копирование ИБ'")); + + // Вызов КаталогВременныхФайлов вместо ПолучитьИмяВременногоФайла, так как каталог не должен удаляться + // автоматически при завершении клиентского приложения. + КаталогВременныхФайловОбновления = КаталогВременныхФайлов() + "1Cv8Backup." + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=ггММддЧЧммсс") + "\"; + СтруктураПараметров.Вставить("КаталогВременныхФайловОбновления", КаталогВременныхФайловОбновления); + + Возврат СтруктураПараметров; + +КонецФункции + #КонецЕсли +Функция ДоступноРезервноеКопирование() + +#Если ВебКлиент Или МобильныйКлиент Тогда + Возврат Ложь; +#Иначе + Возврат ОбщегоНазначенияКлиент.ЭтоWindowsКлиент(); +#КонецЕсли + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентПереопределяемый/Module.bsl index 092c999f9..d7ac0104c 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Включает/отключает показ предупреждений о необходимости настройки/выполнении резервного копирования. diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index c468070a7..2321cbc61 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает начальное заполнение настроек автоматического резервного копирования. @@ -101,12 +109,9 @@ // См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() - ИЛИ ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() - ИЛИ ОбщегоНазначения.РазделениеВключено() Тогда - + Если ОбщегоНазначения.ЭтоВебКлиент() + Или ОбщегоНазначения.РазделениеВключено() Тогда Возврат; - КонецЕсли; МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); @@ -464,7 +469,7 @@ Если ОповещатьОНеобходимостиРезервногоКопирования Тогда НастройкиРезервногоКопирования = Константы.ПараметрыРезервногоКопирования.Получить().Получить(); Если НастройкиРезервногоКопирования <> Неопределено - И НастройкиРезервногоКопирования.Пользователь <> ПользователиКлиентСервер.ТекущийПользователь() Тогда + И НастройкиРезервногоКопирования.Пользователь <> Пользователи.ТекущийПользователь() Тогда ВариантОповещения = "НеОповещать"; Иначе ВариантОповещения = "ЕщеНеНастроено"; diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl index 8df018878..4b79422fc 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -102,7 +110,7 @@ // Функция НаименованиеФоновогоРезервногоКопирования() Экспорт - Возврат НСтр("ru = 'Резервное копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Резервное копирование области данных'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -162,7 +170,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - СтрокаПараметра = МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ПоддержкаРезервногоКопирования"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ПоддержкаРезервногоКопирования"); КонецЕсли; КонецПроцедуры @@ -365,7 +373,7 @@ Если НЕ ТребуетсяСоздание Тогда ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации() + "." - + НСтр("ru = 'Пропуск создания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + + НСтр("ru = 'Пропуск создания'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация); Возврат; КонецЕсли; @@ -397,7 +405,7 @@ УдалитьФайлы(ИмяАрхива); Исключение // При невозможности удаления файла выполнение не должно прерываться. - ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -453,12 +461,12 @@ ПараметрыСобытия.Вставить("Длительность", ТекущаяУниверсальнаяДата() - НачалоВыполнения); ЗаписатьСобытиеВЖурнал( - НСтр("ru = 'Создание'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Создание'", ОбщегоНазначения.КодОсновногоЯзыка()), ПараметрыСобытия); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Попытка Если ИмяАрхива <> Неопределено Тогда @@ -466,7 +474,7 @@ КонецЕсли; Исключение // При невозможности удаления файла выполнение не должно прерываться. - ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -489,14 +497,14 @@ |По причине: |%3'"); Уровень = УровеньЖурналаРегистрации.Предупреждение; - Событие = НСтр("ru = 'Ошибка итерации создания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Событие = НСтр("ru = 'Ошибка итерации создания'", ОбщегоНазначения.КодОсновногоЯзыка()); Иначе ШаблонКомментария = НСтр("ru = 'При создании резервной копии области %1 произошла невосстановимая ошибка. |Номер попытки: %2 |По причине: |%3'"); Уровень = УровеньЖурналаРегистрации.Ошибка; - Событие = НСтр("ru = 'Ошибка создания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Событие = НСтр("ru = 'Ошибка создания'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -607,7 +615,7 @@ УдалитьФайлы(ИмяАрхива); Исключение // При невозможности удаления файла выполнение не должно прерываться. - ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -633,7 +641,7 @@ Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Попытка Если ИмяАрхива <> Неопределено Тогда @@ -641,7 +649,7 @@ КонецЕсли; Исключение // При невозможности удаления файла выполнение не должно прерываться. - ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных.Не удалось удалить временный файл'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Если Параметры.ПоТребованию Тогда @@ -849,7 +857,7 @@ Функция СобытиеЖурналаРегистрации() - Возврат НСтр("ru = 'Резервное копирование приложений'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Резервное копирование приложений'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl index 770adb6c2..17b5c4e16 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Функция ПолучитьПараметрыФормыНастроек(Знач ОбластьДанных) Экспорт diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl index 3649b8697..2b4cf3f19 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Функция ПолучитьПараметрыФормыНастроек(Знач ОбластьДанных) Экспорт diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхКлиент/Module.bsl index e4628dafb..615f90414 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Предлагает пользователю создать резервную копию. diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl index 5c561d30a..b23d27a60 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает соответствие русских названий полей программных системных настроек diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl index ecca4153e..be9d8e603 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Склоняет ФИО @@ -172,7 +180,7 @@ Результат = Компонента.Просклонять(СклоняемаяЧасть, Падеж, Пол); КонецЕсли; Исключение - Событие = НСтр("ru = 'Склонение ФИО при помощи компоненты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Событие = НСтр("ru = 'Склонение ФИО при помощи компоненты'", ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки()); Возврат Ложь; КонецПопытки; @@ -215,19 +223,17 @@ // Параметры: // Представление - Строка - Строка для склонения. // ЭтоФИО - Булево - Признак склонения ФИО. -// Пол - Число - Пол физического лица (в случае склонения ФИО) -// 1 - мужской -// 2 - женский. +// Пол - Число - Пол физического лица (в случае склонения ФИО): 1 - мужской, 2 - женский. // ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. // // Возвращаемое значение: // Структура - со свойствами: -// *ИменительныйПадеж - Строка. -// *РодительныйПадеж - Строка. -// *ДательныйПадеж - Строка -// *ВинительныйПадеж - Строка. -// *ТворительныйПадеж - Строка. -// *ПредложныйПадеж - Строка. +// * ИменительныйПадеж - Строка. +// * РодительныйПадеж - Строка. +// * ДательныйПадеж - Строка. +// * ВинительныйПадеж - Строка. +// * ТворительныйПадеж - Строка. +// * ПредложныйПадеж - Строка. // Функция ПросклонятьПредставлениеПоВсемПадежам(Представление, ЭтоФИО = Ложь, Пол = Неопределено, ПоказыватьСообщения = Ложь) Экспорт @@ -289,7 +295,7 @@ Иначе МассивСтрок = СтрРазделить(Представление, " ", Ложь); Если МассивСтрок.Количество() = 1 - И СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Представление) Тогда + И СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Представление) Тогда ПросклонятьСПомощьюКомпоненты = Истина; КонецЕсли; КонецЕсли; @@ -309,7 +315,6 @@ Если Параметры.ИзмененоПредставление Или Параметры.Склонения = Неопределено Тогда СтруктураСклонения = ПросклонятьПредставлениеПоВсемПадежам(Параметры.Представление, Параметры.ЭтоФИО, Параметры.Пол, Истина); - ПоместитьВоВременноеХранилище(СтруктураСклонения, АдресРезультата); КонецЕсли; @@ -477,8 +482,8 @@ ИнтернетПрокси = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); - ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"); + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + ИнтернетПрокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("https"); КонецЕсли; Таймаут = 10; @@ -515,14 +520,21 @@ Попытка Ответ = Соединение.Получить(Запрос); Исключение - РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(Соединение.Сервер); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |Результат диагностики: - |%2'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), - РезультатДиагностики.ОписаниеОшибки); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + РезультатДиагностики = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(Соединение.Сервер); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Результат диагностики: + |%2'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + РезультатДиагностики.ОписаниеОшибки); + Иначе + ВызватьИсключение; + КонецЕсли + КонецПопытки; Если Ответ.КодСостояния <> 200 Тогда @@ -549,8 +561,8 @@ Процедура ЗарегистрироватьОшибкуСервисаСклонений(ИнформацияОбОшибке, ПоказыватьСообщения) - ИмяСобытия = НСтр("ru = 'Вызов веб-сервиса склонения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, + ИмяСобытия = НСтр("ru = 'Вызов веб-сервиса склонения'", ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Предупреждение,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); Если Не ПоказыватьСообщения Тогда @@ -563,7 +575,7 @@ |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); КонецПроцедуры diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl index a3ec2cea7..c87ce9656 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl @@ -1,16 +1,13 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции -// Склоняет переданную фразу по всем падежам. -// -// Параметры: -// Форма - Управляемая форма - форма объекта склонения. -// Представление - Строка - Строка для склонения. -// ЭтоФИО - Булево - Признак склонения ФИО. -// Пол - Число - Пол физического лица (в случае склонения ФИО) -// 1 - мужской -// 2 - женский. -// ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. -// Процедура ПросклонятьПредставлениеПоВсемПадежам(Представление, Склонения, ЭтоФИО = Ложь, Пол = Неопределено, ПоказыватьСообщения = Ложь) Экспорт СтруктураСклонений = СклонениеПредставленийОбъектов.ПросклонятьПредставлениеПоВсемПадежам(Представление, ЭтоФИО, Пол, ПоказыватьСообщения); diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl index c06134b57..b8608b037 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обработчик события ПриИзменении элемента формы, подлежащего склонению. @@ -13,14 +21,13 @@ КонецПроцедуры // Склоняет переданную фразу по всем падежам. +// Для вызова из обработчика формы Подключаемый_ПросклонятьПредставлениеПоВсемПадежам. // // Параметры: // Форма - УправляемаяФорма - форма объекта склонения. // Представление - Строка - Строка для склонения. // ЭтоФИО - Булево - Признак склонения ФИО. -// Пол - Число - Пол физического лица (в случае склонения ФИО) -// 1 - мужской -// 2 - женский. +// Пол - Число - Пол физического лица (в случае склонения ФИО): 1 - мужской, 2 - женский. // ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. // Процедура ПросклонятьПредставлениеПоВсемПадежам(Форма, Представление, ЭтоФИО = Ложь, Пол = Неопределено, ПоказыватьСообщения = Ложь) Экспорт diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl index f01083f57..df976f000 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Возвращает пустую структуру склонения. diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index 7052be5d7..1be3c9fe7 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -162,8 +170,7 @@ КонецЕсли; Если ПолучатьСтрокуСоединения Тогда - Результат.Вставить("СтрокаСоединенияИнформационнойБазы", - СоединенияИБКлиентСервер.ПолучитьСтрокуСоединенияИнформационнойБазы(ПортКластера)); + Результат.Вставить("СтрокаСоединенияИнформационнойБазы", СтрокаСоединенияИнформационнойБазы()); КонецЕсли; ЖурналРегистрации.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); @@ -760,4 +767,15 @@ КонецФункции +// Возвращает строковую константу для формирования сообщений журнала регистрации. +// +// Возвращаемое значение: +// Строка - наименование события для журнала регистрации. +// +Функция СобытиеЖурналаРегистрации() Экспорт + + Возврат НСтр("ru = 'Завершение работы пользователей'", ОбщегоНазначения.КодОсновногоЯзыка()); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl index 48e3496af..14de0521c 100644 --- a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // См. СоединенияИБ.ИнформацияОСоединениях. @@ -84,14 +92,6 @@ КонецПроцедуры -// Возвращает номер текущего сеанса информационной базы. -// -Функция НомерТекущегоСеанса() Экспорт - - Возврат НомерСеансаИнформационнойБазы(); - -КонецФункции - // Получает сохраненные параметры администрирования. // Функция ПараметрыАдминистрирования() Экспорт @@ -102,7 +102,15 @@ // Процедура УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования) Экспорт - СоединенияИБКлиентСервер.УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования); + ВсеКромеТекущего = Новый Структура; + ВсеКромеТекущего.Вставить("Свойство", "Номер"); + ВсеКромеТекущего.Вставить("ВидСравнения", ВидСравнения.НеРавно); + ВсеКромеТекущего.Вставить("Значение", НомерСеансаИнформационнойБазы()); + + Фильтр = Новый Массив; + Фильтр.Добавить(ВсеКромеТекущего); + + АдминистрированиеКластера.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,, Фильтр); КонецПроцедуры diff --git a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl index 826072a50..f22d049d8 100644 --- a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Выполнить завершение текущего сеанса, если установлена блокировка соединений @@ -120,7 +128,7 @@ ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), "e1cib/app/Обработка.БлокировкаРаботыПользователей", НСтр("ru = 'Завершение сеансов не выполнено. Подробности см. в Журнале регистрации.'"), БиблиотекаКартинок.Предупреждение32); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиент.СобытиеЖурналаРегистрации(), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),, Истина); Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Ошибка", КоличествоСеансов)); Возврат; diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index a39e21100..0fd44aa24 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает форму ввода параметров администрирования информационной базы и/или кластера. @@ -416,7 +424,7 @@ Возврат Ложь; КонецЕсли; - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(),, + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(),, НСтр("ru = 'Выполнен запуск с параметром ""РазрешитьРаботуПользователей"". Работа программы будет завершена.'"), ,Истина); ЗавершитьРаботуСистемы(Ложь); Возврат Истина; @@ -446,4 +454,15 @@ КонецФункции +// Возвращает строковую константу для формирования сообщений журнала регистрации. +// +// Возвращаемое значение: +// Строка - наименование события для журнала регистрации. +// +Функция СобытиеЖурналаРегистрации() Экспорт + + Возврат НСтр("ru = 'Завершение работы пользователей'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl index f2773e155..b89198440 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает полный путь к информационной базе (строку соединения). @@ -16,7 +24,7 @@ // Функция ПутьКИнформационнойБазе(ПризнакФайловогоРежима = Неопределено, Знач ПортКластераСерверов = 0) Экспорт - СтрокаСоединения = ПолучитьСтрокуСоединенияИнформационнойБазы(ПортКластераСерверов); + СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); ПозицияПоиска = СтрНайти(ВРег(СтрокаСоединения), "FILE="); @@ -70,51 +78,10 @@ // Процедура УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования) Экспорт - ВсеКромеТекущего = Новый Структура; - ВсеКромеТекущего.Вставить("Свойство", "Номер"); - ВсеКромеТекущего.Вставить("ВидСравнения", ВидСравнения.НеРавно); - ВсеКромеТекущего.Вставить("Значение", СоединенияИБВызовСервера.НомерТекущегоСеанса()); - - Фильтр = Новый Массив; - Фильтр.Добавить(ВсеКромеТекущего); - - АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,, Фильтр); + СоединенияИБВызовСервера.УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования); КонецПроцедуры -// Получить строку соединения ИБ, если задан нестандартный порт кластера серверов. -// -// Параметры: -// ПортКластераСерверов - Число - нестандартный порт кластера серверов. -// -// Возвращаемое значение: -// Строка - строка соединения ИБ. -// -Функция ПолучитьСтрокуСоединенияИнформационнойБазы(Знач ПортКластераСерверов = 0) Экспорт - - Результат = СтрокаСоединенияИнформационнойБазы(); - Если ИнформационнаяБазаФайловая() Или (ПортКластераСерверов = 0) Тогда - Возврат Результат; - КонецЕсли; - -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда - Возврат Результат; - КонецЕсли; -#КонецЕсли - - ПодстрокиСтрокиСоединения = СтрРазделить(Результат, ";"); - ИмяСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7)); - ИмяИБ = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[1], 6)); - ПортКластера = ?(СтрНайти(ИмяСервера, ":") > 0, "", ":" + Формат(ПортКластераСерверов, "ЧГ=0")); - - Результат = "Srvr=""%1%2"";Ref=""%3"";"; - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат, ИмяСервера, ПортКластера, ИмяИБ); - - Возврат Результат; - -КонецФункции - // Возвращает текстовую константу для формирования сообщений. // Используется в целях локализации. // @@ -148,29 +115,4 @@ КонецФункции -// Возвращает строковую константу для формирования сообщений журнала регистрации. -// -// Возвращаемое значение: -// Строка - наименование события для журнала регистрации. -// -Функция СобытиеЖурналаРегистрации() Экспорт - - Возврат НСтр("ru = 'Завершение работы пользователей'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - -// Возвращает является ли информационная база файловой. -// -// Возвращаемое значение: -// Булево - Истина, если информационная база файловая. -// -Функция ИнформационнаяБазаФайловая() -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Результат = ОбщегоНазначения.ИнформационнаяБазаФайловая(); -#Иначе - Результат = ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая(); -#КонецЕсли - Возврат Результат; -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/СоединенияИБПереопределяемый/Module.bsl b/SSL/src/CommonModules/СоединенияИБПереопределяемый/Module.bsl index 4fc3b08c4..8fb09dec0 100644 --- a/SSL/src/CommonModules/СоединенияИБПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Позволяет модифицировать параметры блокировки сеансов. diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl index 0d86e19f1..545786b2d 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает новое сообщение. @@ -167,7 +175,7 @@ Процедура ЗаписатьСобытиеНачалоОбработки(Знач Сообщение) Экспорт ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса.Начало обработки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -183,7 +191,7 @@ Процедура ЗаписатьСобытиеОкончаниеОбработки(Знач Сообщение) Экспорт ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса.Окончание обработки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -232,7 +240,7 @@ // Дополнительная обработка исключения не требуется // ожидаемое исключение - дублирование задания с таким же ключом. ЗаписьЖурналаРегистрации(НСтр("ru = 'Доставка быстрых сообщений'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -362,7 +370,7 @@ Если СообщенияВМоделиСервисаПовтИсп.ТипТелоОбласти().ЭтоПотомок(Сообщение.Body.Тип()) Тогда Если РаботаВМоделиСервиса.ЗначениеРазделителяСеанса() <> Сообщение.Body.Zone Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса.Отправка сообщения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -401,7 +409,7 @@ ТелоСообщения = ЗаписатьСообщениеВНетипизированноеТело(Сообщение); ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса.Отправка'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -439,7 +447,7 @@ ТелоСообщения = ЗаписатьСообщениеВНетипизированноеТело(Сообщение); ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса.Получение'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -502,7 +510,7 @@ Функция ПредставлениеСообщенияДляЖурнала(Знач Сообщение) - Шаблон = НСтр("ru = 'Канал: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Шаблон = НСтр("ru = 'Канал: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяКаналаПоТипуСообщения(Сообщение.Body.Тип())); Запись = Новый ЗаписьXML; @@ -510,11 +518,11 @@ ФабрикаXDTO.ЗаписатьXML(Запись, Сообщение.Header, , , , НазначениеТипаXML.Явное); Шаблон = НСтр("ru = 'Заголовок: - |%1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + |%1'", ОбщегоНазначения.КодОсновногоЯзыка()); Представление = Представление + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Запись.Закрыть()); Если СообщенияВМоделиСервисаПовтИсп.ТипТелоОбласти().ЭтоПотомок(Сообщение.Body.Тип()) Тогда - Шаблон = НСтр("ru = 'Область данных: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Шаблон = НСтр("ru = 'Область данных: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); Представление = Представление + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Формат(Сообщение.Body.Zone, "ЧН=0; ЧГ=")); КонецЕсли; diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаОбработчикСообщений/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаОбработчикСообщений/Module.bsl index be0fd27c4..61a9b7ae4 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаОбработчикСообщений/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаОбработчикСообщений/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений. @@ -16,7 +24,6 @@ КонецЕсли; // Чтение сообщения - ТипСообщения = СообщенияВМоделиСервиса.ТипСообщенияПоИмениКанала(КаналСообщений); Сообщение = СообщенияВМоделиСервиса.ПрочитатьСообщениеИзНетипизированногоТела(ТелоСообщения); СообщенияВМоделиСервиса.ЗаписатьСобытиеНачалоОбработки(Сообщение); diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаПереопределяемый/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаПереопределяемый/Module.bsl index 6728978ca..f221ee99b 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обработчик события при получении сообщения. diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/Module.bsl index c1941fe92..64980fdc4 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает XDTO тип - сообщение. diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl index a1f152342..6f94d48d1 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Вызывается при заполнении массива справочников, которые могут использоваться для diff --git a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl index d5367f0d7..f8089c431 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений. diff --git a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl index b234eb6a8..ce30ef43c 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает номер версии, для трансляции с которой предназначен обработчик. diff --git a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl index 177e13406..1bbe36ad7 100644 --- a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Запланировать загрузку данных, соответствующих дескриптору. @@ -63,7 +71,7 @@ КонецЕсли; Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки сообщения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; @@ -105,7 +113,7 @@ КонецЕсли; ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Доступны новые данные'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , ?(Загружать, НСтр("ru = 'В очередь добавлено задание на загрузку.'"), НСтр("ru = 'Загрузка данных не требуется.'")) + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); @@ -129,7 +137,7 @@ Дескриптор = ДесериализоватьXDTO(ДескрипторXML); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка работы с XML'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ДескрипторXML); @@ -137,7 +145,7 @@ КонецПопытки; ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Загрузка начата'") + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); @@ -146,7 +154,7 @@ Если ИмяФайлаВыгрузки = Неопределено Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Файл не может быть загружен'") + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); @@ -155,7 +163,7 @@ КонецЕсли; ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Примечание, , , НСтр("ru = 'Загрузка успешно выполнена'") + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); @@ -187,7 +195,7 @@ НаборНеобработанныхДанных.Записать(); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) @@ -218,7 +226,7 @@ Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -236,7 +244,7 @@ КонецЦикла; ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -250,7 +258,7 @@ Дескриптор.RecommendedUpdateDate = ТекущаяУниверсальнаяДата() + 5 * 60; ЗапланироватьЗагрузкуДанных(Дескриптор); ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Обработка данных будет запущена повторно из-за ошибки обработчика.'") + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); @@ -259,7 +267,7 @@ НаборНеобработанныхДанных.Записать(); ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Новые данные обработаны'") + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); @@ -300,14 +308,14 @@ Попытка Обработчик.Обработчик.ОбработкаДанныхОтменена(Дескриптор); ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Отмена обработки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код обработчика: %1'"), Обработчик.КодОбработчика)); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Отмена обработки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) @@ -322,7 +330,7 @@ ИмяФайлаВыгрузки = РаботаВМоделиСервиса.ПолучитьФайлИзХранилищаМенеджераСервиса(Дескриптор.FileGUID); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка хранилища'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl index 96bc76d2a..31c36f8aa 100644 --- a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений. diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1/Module.bsl index 6abe47232..e7c6b7c5a 100644 --- a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений. diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl index 10d81983d..d297b1a38 100644 --- a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает пространство имен версии интерфейса сообщений. diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl index 8e50adefa..2a0a93d70 100644 --- a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обработка входящих сообщений с типом {http://www.1c.ru/SaaS/ManageZonesBackup/a.b.c.d}PlanZoneBackup. diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыБезопасныйРежим/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыБезопасныйРежим/Module.bsl index e794692d8..5b4831717 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыБезопасныйРежим/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыБезопасныйРежим/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Функция ПрофильБезопасностиИнформационнойБазы() Экспорт diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index f2a1408bb..ec850cd2c 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Устанавливает состояние отмены при создании форм рабочего стола. @@ -185,14 +193,14 @@ Функция ЗаписатьОшибкуВЖурналРегистрацииПриЗапускеИлиЗавершении(ПрекратитьРаботу, Знач Событие, Знач ТекстОшибки) Экспорт Если Событие = "Запуск" Тогда - ИмяСобытия = НСтр("ru = 'Запуск программы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ИмяСобытия = НСтр("ru = 'Запуск программы'", ОбщегоНазначения.КодОсновногоЯзыка()); Если ПрекратитьРаботу Тогда НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при запуске программы. Запуск программы аварийно завершен.'"); Иначе НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при запуске программы.'"); КонецЕсли; Иначе - ИмяСобытия = НСтр("ru = 'Завершение программы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ИмяСобытия = НСтр("ru = 'Завершение программы'", ОбщегоНазначения.КодОсновногоЯзыка()); НачалоОписанияОшибки = НСтр("ru = 'Возникла исключительная ситуация при завершении программы.'"); КонецЕсли; @@ -305,7 +313,6 @@ ПараметрыКлиента.Вставить("СтрокаСоединенияИнформационнойБазы", Параметры.СтрокаСоединенияИнформационнойБазы); ПараметрыКлиента.Вставить("ПривилегированныйРежимУстановленПриЗапуске", ПривилегированныйРежимУстановленПриЗапуске); ПараметрыКлиента.Вставить("ЭтоВебКлиент", Параметры.ЭтоВебКлиент); - ПараметрыКлиента.Вставить("ЭтоВебКлиентПодMacOS", Параметры.ЭтоВебКлиентПодMacOS); ПараметрыКлиента.Вставить("ЭтоМобильныйКлиент", Параметры.ЭтоМобильныйКлиент); ПараметрыКлиента.Вставить("ЭтоLinuxКлиент", Параметры.ЭтоLinuxКлиент); ПараметрыКлиента.Вставить("ЭтоOSXКлиент", Параметры.ЭтоOSXКлиент); @@ -315,6 +322,7 @@ ПараметрыКлиента.Вставить("КаталогПрограммы", Параметры.КаталогПрограммы); ПараметрыКлиента.Вставить("ИдентификаторКлиента", Параметры.ИдентификаторКлиента); ПараметрыКлиента.Вставить("РазрешениеОсновногоЭкрана", Параметры.РазрешениеОсновногоЭкрана); + ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ПараметрыКлиента); Если СтрНайти(НРег(Параметры.ПараметрЗапуска), НРег("ЗапуститьОбновлениеИнформационнойБазы")) > 0 Тогда diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl index 7f45c27e6..86ccd5fd5 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Вызывается каждые 20 минут, например, для контроля динамического обновления и @@ -50,8 +58,9 @@ Если Предупреждения.Количество() = 1 И Не ПустаяСтрока(Предупреждения[0].ТекстГиперссылки) Тогда Пояснение = Предупреждения[0].ТекстГиперссылки; КонецЕсли; - ПоказатьОповещениеПользователя(НСтр("ru = 'Нажмите, чтобы завершить работу'"), "e1cib/command/ОбщаяКоманда.ПредупрежденияПриЗавершенииРаботы", - Пояснение, БиблиотекаКартинок.ЗавершитьРаботу); + ПоказатьОповещениеПользователя(НСтр("ru = 'Нажмите, чтобы завершить работу'"), + "e1cib/command/ОбщаяКоманда.ПредупрежденияПриЗавершенииРаботы", + Пояснение, БиблиотекаКартинок.ЗавершитьРаботу, СтатусОповещенияПользователя.Важное); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index a8cfc1dd9..0018ba30a 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Устанавливает заголовок главного окна приложения, используя значение константы @@ -62,7 +70,7 @@ // одноименном флажке. // ДополнительныеПараметры - Структура // ТекстВопроса - Строка - текст задаваемого вопроса. -// Кнопки - РежимДиалогаВопрос, СписокЗначений - может быть задан список значений, в котором. +// Кнопки - РежимДиалогаВопрос, СписокЗначений - может быть задан список значений, в котором: // Значение - содержит значение, связанное с // кнопкой и возвращаемое при выборе кнопки. В качестве значения может // использоваться значение @@ -130,10 +138,10 @@ // на которой отображается количество секунд, оставшихся до // истечения таймаута. // * Заголовок - Строка - заголовок вопроса. -// * ПредлагатьБольшеНеЗадаватьЭтотВопрос - Булево- если Истина, то в окне вопроса будет доступен одноименный флажок. +// * ПредлагатьБольшеНеЗадаватьЭтотВопрос - Булево - если Истина, то в окне вопроса будет доступен одноименный флажок. // * БольшеНеЗадаватьЭтотВопрос - Булево - принимает значение, выбранное пользователем в соответствующем // флажке. -// * БлокироватьВесьИнтерфейс - Булево - если Истина, форма вопроса открывается блокируя работу всех +// * БлокироватьВесьИнтерфейс - Булево - если Истина, форма вопроса открывается, блокируя работу всех // остальных открытых окон, включая главное окно. // * Картинка - Картинка - картинка, выводимая в окне вопроса. // @@ -156,8 +164,8 @@ // которые в данный момент времени работают с системой. // // Параметры: -// ПараметрыФормы - Структура - См. описание параметра Параметры метода ОткрытьФорму в синтакс-помощнике. -// ВладелецФормы - УправляемаяФорма - См. описание параметра Владелец метода ОткрытьФорму в синтакс-помощнике. +// ПараметрыФормы - Структура - см. описание параметра Параметры метода ОткрытьФорму в синтакс-помощнике. +// ВладелецФормы - УправляемаяФорма - см. описание параметра Владелец метода ОткрытьФорму в синтакс-помощнике. // Процедура ОткрытьСписокАктивныхПользователей(ПараметрыФормы = Неопределено, ВладелецФормы = Неопределено) Экспорт @@ -274,7 +282,7 @@ // - Перезапустить - Булево - если требуется перезапуск программы; // - ДополнительныеПараметрыКоманднойСтроки - Строка - для перезапуска. // -// НепрерывноеВыполнение - Булево - Только для внутреннего использования. +// НепрерывноеВыполнение - Булево - только для внутреннего использования. // Для перехода из обработчика ПередНачаломРаботыСистемы // выполненного в режиме интерактивной обработки. // @@ -343,8 +351,8 @@ // Параметры: // Отказ - Булево - Возвращаемое значение. Признак отказа от завершения работы // для обработчика события ПередЗавершениемРаботыСистемы, либо программного отказа, -// либо потребовалась интерактивная обработка. В случае успешного взаимодействия -// с пользователем, завершение работы будет продолжено. +// либо того, что потребовалась интерактивная обработка. В случае успешного взаимодействия +// с пользователем завершение работы будет продолжено. // ТекстПредупреждения - Строка - см. ПередЗавершениемРаботыСистемы() в синтакс-помощнике. // Процедура ПередЗавершениемРаботыСистемы(Отказ = Ложь, ТекстПредупреждения = "") Экспорт @@ -476,13 +484,13 @@ КонецФункции // Возвращает значения параметров, необходимых для работы клиентского кода -// при запуске конфигурации за один серверный вызовов (для минимизации клиент-серверного взаимодействия +// при запуске конфигурации за один серверный вызов (для минимизации клиент-серверного взаимодействия // и снижения времени запуска). -// С помощью этой функции можно обращаться к параметрам в клиентском коде, вызываемом из обработчиков событий: +// С помощью этой функции можно обращаться к параметрам в клиентском коде, вызываемым из обработчиков событий: // - ПередНачаломРаботыСистемы, // - ПриНачалеРаботыСистемы. // -// В этих обработчиках, при запуске недопустимо использовать команды сброса кэша +// В этих обработчиках при запуске недопустимо использовать команды сброса кэша // повторно используемых модулей, иначе запуск может привести // к непредсказуемым ошибкам и лишним серверным вызовам. // @@ -628,42 +636,6 @@ КонецПроцедуры -// Показывает диалог выбора файлов и помещает выбранные файлы во временное хранилище. -// Совмещает работу методов глобального метода НачатьПомещениеФайла и ПоместитьФайлы, -// возвращая идентичный результат вне зависимости от того, подключено расширение работы с файлами, или нет. -// -// Параметры: -// ОбработчикЗавершения - ОписаниеОповещения - Описание процедуры, принимающей результат выбора. -// ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, из которой выполняется -// размещение файла. -// НачальноеИмяФайла - Строка - Полный путь и имя файла, которые будут предложены пользователю в начале выбора. -// ПараметрыДиалога - Структура, Неопределено - См. свойства ДиалогВыбораФайла в синтакс-помощнике. -// Используется в случае, если удалось подключить расширение работы с файлами. -// -// Значение первого параметра, возвращаемого в ОбработчикРезультата: -// ПомещенныеФайлы - Результат выбора. -// * - Неопределено - Пользователь отказался от выбора. -// * - Массив из ОписаниеПереданногоФайла, Структура - Пользователь выбрал файл. -// ** Имя - Строка - Полное имя выбранного файла. -// ** Хранение - Строка - Адрес во временном хранилище, по которому размещен файл. -// -// Ограничения: -// Используется только для интерактивного выбора в диалоге. -// Не используется для выбора каталогов - эта опция не поддерживается веб-клиентом. -// Не поддерживается множественный выбор в веб-клиенте, если не установлено расширение работы с файлами. -// Не поддерживается передача адреса временного хранилища. -// -Процедура ПоказатьПомещениеФайла(ОбработчикЗавершения, ИдентификаторФормы, НачальноеИмяФайла, ПараметрыДиалога) Экспорт - Параметры = Новый Структура; - Параметры.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); - Параметры.Вставить("ИдентификаторФормы", ИдентификаторФормы); - Параметры.Вставить("НачальноеИмяФайла", НачальноеИмяФайла); - Параметры.Вставить("ПараметрыДиалога", ПараметрыДиалога); - - ОписаниеОповещения = Новый ОписаниеОповещения("ПоказатьПомещениеФайлаПриПодключенииРасширенияРаботыСФайлами", ЭтотОбъект, Параметры); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения); -КонецПроцедуры - // Возвращает имя исполняемого файла в зависимости от вида клиента и версии платформы. // Функция ИмяИсполняемогоФайлаПриложения(ПолучитьФайлаКонфигуратора = Ложь) Экспорт @@ -744,28 +716,6 @@ //////////////////////////////////////////////////////////////////////////////// // Табличный документ -// Рассчитывает сумму, среднее и прочие показатели по числовым ячейкам табличного документа -// и показывает результаты расчетов. -// См. также СтандартныеПодсистемыКлиентСервер.РасчетЯчеек. -// -// Параметры: -// Форма - УправляемаяФорма, Неопределено - Форма-владелец, из которой осуществляется открытие формы. -// ТабличныйДокумент - ТабличныйДокумент - Таблица, для которой выполняются расчеты. -// ВыделенныеОбласти - Неопределено, Массив - Необязательный. Области документа, которые требуется рассчитать. -// Если Неопределено, то расчет будет произведен по областям, выделенным интерактивно. -// См. возвращаемое значение функции СтандартныеПодсистемыКлиент.ВыделенныеОбласти. -// -Процедура ПоказатьРасчетЯчеек(Форма, ТабличныйДокумент, ВыделенныеОбласти = Неопределено) Экспорт - Если ВыделенныеОбласти = Неопределено Тогда - ВыделенныеОбласти = ВыделенныеОбласти(ТабличныйДокумент); - КонецЕсли; - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТабличныйДокумент", ТабличныйДокумент); - ПараметрыФормы.Вставить("ВыделенныеОбласти", ВыделенныеОбласти); - РежимОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - ОткрытьФорму("ОбщаяФорма.ПоказателиВыделенныхЯчеек", ПараметрыФормы, Форма, Истина, , , , РежимОкна); -КонецПроцедуры - // Переадресует оповещение без результата на оповещение с результатом. Функция ОповещениеБезРезультата(ОповещениеСРезультатом) Экспорт @@ -881,26 +831,6 @@ ПоказатьВопросПользователю(Обработчик, Текст, Кнопки, НастройкиДиалога); КонецПроцедуры -// Папка системных приложений. -// Используется только для Windows. -Функция ПапкаСистемныхПриложений() Экспорт - - Shell = Новый COMОбъект("Shell.Application"); - - СистемнаяИнформация = Новый СистемнаяИнформация; - Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда - // Для 32-битной системы "C:\Windows\System32". - // Для 64-битной системы "C:\Windows\SysWOW64". - Folder = Shell.Namespace(41); - Возврат Folder.Self.Path + "\"; - ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - // Для любой системы "C:\Windows\System32". - Folder = Shell.Namespace(37); - Возврат Folder.Self.Path + "\"; - КонецЕсли; - -КонецФункции - // Шапка файла для технической поддержки. Функция ИнформацияДляПоддержки() Экспорт @@ -940,6 +870,30 @@ КонецФункции +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + +// Папка системных приложений. +// Используется только для Windows. +Функция ПапкаСистемныхПриложений() Экспорт + + Shell = Новый COMОбъект("Shell.Application"); + + СистемнаяИнформация = Новый СистемнаяИнформация; + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда + // Для 32-битной системы "C:\Windows\System32". + // Для 64-битной системы "C:\Windows\SysWOW64". + Folder = Shell.Namespace(41); + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + // Для любой системы "C:\Windows\System32". + Folder = Shell.Namespace(37); + КонецЕсли; + + Возврат Folder.Self.Path + "\"; + +КонецФункции + +#КонецЕсли + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1018,7 +972,7 @@ КонецПроцедуры // Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы. -Процедура ДействияПередНачаломРаботыСистемыВПереопределяемойПроцедуре(Неопределен, Параметры) Экспорт +Процедура ДействияПередНачаломРаботыСистемыВПереопределяемойПроцедуре(Неопределен, Параметры) Если Не ПродолжитьДействияПередНачаломРаботыСистемы(Параметры) Тогда Возврат; @@ -1080,7 +1034,7 @@ КонецПроцедуры // Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы. -Процедура ДействияПередНачаломРаботыСистемыПослеВсехПроцедур(Неопределен, Параметры) Экспорт +Процедура ДействияПередНачаломРаботыСистемыПослеВсехПроцедур(Неопределен, Параметры) Если Не ПродолжитьДействияПередНачаломРаботыСистемы(Параметры) Тогда Возврат; @@ -1210,7 +1164,7 @@ КонецПроцедуры // Только для внутреннего использования. Продолжение процедуры ПриНачалеРаботыСистемы. -Процедура ДействияПриНачалеРаботыСистемыВПереопределяемойПроцедуре(Неопределен, Параметры) Экспорт +Процедура ДействияПриНачалеРаботыСистемыВПереопределяемойПроцедуре(Неопределен, Параметры) Если Не ПродолжитьДействияПриНачалеРаботыСистемы(Параметры) Тогда Возврат; @@ -1266,7 +1220,7 @@ КонецПроцедуры // Только для внутреннего использования. Продолжение процедуры ПриНачалеРаботыСистемы. -Процедура ДействияПриНачалеРаботыСистемыПослеВсехПроцедур(Неопределен, Параметры) Экспорт +Процедура ДействияПриНачалеРаботыСистемыПослеВсехПроцедур(Неопределен, Параметры) Если Не ПродолжитьДействияПриНачалеРаботыСистемы(Параметры) Тогда Возврат; @@ -1688,27 +1642,46 @@ Возврат; КонецЕсли; - ТекстСообщения = + ИмяПараметра = "СтандартныеПодсистемы.ПриВыполненииСтандартныхПериодическихПроверок"; + Если ПараметрыПриложения[ИмяПараметра] <> Неопределено Тогда + ДатаСохраненная = ПараметрыПриложения[ИмяПараметра]; + ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса(); + Если ТипЗнч(ДатаСохраненная) = Тип("Дата") И ДеньГода(ДатаСохраненная) = ДеньГода(ДатаСеанса) Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + ТекстВопроса = НСтр("ru = 'Версия программы обновлена (внесены изменения в конфигурацию информационной базы). - |Для дальнейшей работы рекомендуется перезапустить программу. - |Перезапустить?'"); + |Для дальнейшей работы рекомендуется перезапустить программу.'"); + ПоказатьОповещениеПользователя(НСтр("ru = 'Требуется перезапуск'"),, + ТекстВопроса, БиблиотекаКартинок.Предупреждение32, СтатусОповещенияПользователя.Важное); + + КнопкиВопроса = Новый СписокЗначений; + КнопкиВопроса.Добавить("Перезапустить", НСтр("ru = 'Перезапустить'")); + КнопкиВопроса.Добавить("НапомнитьПозже", НСтр("ru = 'Напомнить позже'")); + КнопкиВопроса.Добавить("НеСегодня", НСтр("ru = 'Не напоминать сегодня'")); ОписаниеОповещения = Новый ОписаниеОповещения( "ПриВыполненииСтандартныхПериодическихПроверокЗавершение", ЭтотОбъект, ДополнительныеПараметры); - - ПоказатьВопрос(ОписаниеОповещения, ТекстСообщения, РежимДиалогаВопрос.ДаНет,,, КлиентскоеПриложение.ПолучитьЗаголовок()); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, КнопкиВопроса,,, КлиентскоеПриложение.ПолучитьЗаголовок()); КонецПроцедуры // Продолжение процедуры ПриВыполненииСтандартныхПериодическихПроверок. Процедура ПриВыполненииСтандартныхПериодическихПроверокЗавершение(Ответ, Контекст) Экспорт - Если Ответ = КодВозвратаДиалога.Да Тогда + Если Ответ = "Перезапустить" Тогда ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); ЗавершитьРаботуСистемы(Истина, Истина); Возврат; КонецЕсли; + Если Ответ = "НеСегодня" Тогда + ИмяПараметра = "СтандартныеПодсистемы.ПриВыполненииСтандартныхПериодическихПроверок"; + ПараметрыПриложения.Вставить(ИмяПараметра, ОбщегоНазначенияКлиент.ДатаСеанса()); + КонецЕсли; + ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения); КонецПроцедуры @@ -1862,7 +1835,6 @@ КонецПроцедуры - // Проверяет результат интерактивной обработки, если Отказ, тогда вызывает обработку завершения. // Если добавлен новый полученный параметр клиента, обновляет параметры работы клиента. // @@ -1954,7 +1926,6 @@ КонецФункции - // Проверяет результат интерактивной обработки, если Отказ, тогда вызывает обработку завершения. // // Параметры: @@ -2276,68 +2247,6 @@ КонецПроцедуры -Процедура ПоказатьПомещениеФайлаПриПодключенииРасширенияРаботыСФайлами(РасширениеПодключено, ДополнительныеПараметры) Экспорт - - ОбработчикЗавершения = ДополнительныеПараметры.ОбработчикЗавершения; - ИдентификаторФормы = ДополнительныеПараметры.ИдентификаторФормы; - НачальноеИмяФайла = ДополнительныеПараметры.НачальноеИмяФайла; - ПараметрыДиалога = ДополнительныеПараметры.ПараметрыДиалога; - - Если Не РасширениеПодключено Тогда - Обработчик = Новый ОписаниеОповещения("ОбработатьРезультатПомещенияФайла", ЭтотОбъект, ОбработчикЗавершения); - НачатьПомещениеФайла(Обработчик, , НачальноеИмяФайла, Истина, ИдентификаторФормы); - Возврат; - КонецЕсли; - - Если ПараметрыДиалога = Неопределено Тогда - ПараметрыДиалога = Новый Структура; - КонецЕсли; - Если ПараметрыДиалога.Свойство("Режим") Тогда - Режим = ПараметрыДиалога.Режим; - Если Режим = РежимДиалогаВыбораФайла.ВыборКаталога Тогда - ВызватьИсключение НСтр("ru = 'Выбор каталога не поддерживается'"); - КонецЕсли; - Иначе - Режим = РежимДиалогаВыбораФайла.Открытие; - КонецЕсли; - - Диалог = Новый ДиалогВыбораФайла(Режим); - Диалог.ПолноеИмяФайла = НачальноеИмяФайла; - ЗаполнитьЗначенияСвойств(Диалог, ПараметрыДиалога); - - ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьРезультатПомещенияФайлов", ЭтотОбъект, ОбработчикЗавершения); - - Если ИдентификаторФормы <> Неопределено Тогда - НачатьПомещениеФайлов(ОписаниеОповещения, , Диалог, Истина, ИдентификаторФормы); - Иначе - НачатьПомещениеФайлов(ОписаниеОповещения, , Диалог, Истина); - КонецЕсли; - -КонецПроцедуры - -Процедура ОбработатьРезультатПомещенияФайлов(ПомещенныеФайлы, ОбработчикЗавершения) Экспорт - ВыборВыполнен = ПомещенныеФайлы <> Неопределено; - ОбработатьРезультатПомещенияФайла(ВыборВыполнен, ПомещенныеФайлы, Неопределено, ОбработчикЗавершения); -КонецПроцедуры - -Процедура ОбработатьРезультатПомещенияФайла(ВыборВыполнен, АдресИлиРезультатВыбора, ВыбранноеИмяФайла, ОбработчикЗавершения) Экспорт - Если ВыборВыполнен = Истина Тогда - Если ТипЗнч(АдресИлиРезультатВыбора) = Тип("Массив") Тогда - ПомещенныеФайлы = АдресИлиРезультатВыбора; - Иначе - ОписаниеФайла = Новый Структура; - ОписаниеФайла.Вставить("Хранение", АдресИлиРезультатВыбора); - ОписаниеФайла.Вставить("Имя", ВыбранноеИмяФайла); - ПомещенныеФайлы = Новый Массив; - ПомещенныеФайлы.Добавить(ОписаниеФайла); - КонецЕсли; - Иначе - ПомещенныеФайлы = Неопределено; - КонецЕсли; - - ВыполнитьОбработкуОповещения(ОбработчикЗавершения, ПомещенныеФайлы); -КонецПроцедуры - Функция ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти() ПараметрыКлиента = ПараметрыРаботыКлиентаПриЗапуске(); Возврат ПараметрыКлиента.ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти; @@ -2347,41 +2256,12 @@ РекомендуемыйОбъем = ПараметрыРаботыКлиентаПриЗапуске().РекомендуемыйОбъемОперативнойПамяти; Заголовок = НСтр("ru = 'Скорость работы снижена'"); - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Рекомендуется увеличить - | объем памяти до %1 Гб.'"), РекомендуемыйОбъем); + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Рекомендуется увеличить объем памяти до %1 Гб.'"), РекомендуемыйОбъем); ПоказатьОповещениеПользователя(Заголовок, - "e1cib/app/Обработка.РекомендацияПоПовышениюСкоростиРаботы", - Текст, БиблиотекаКартинок.Предупреждение32); + "e1cib/app/Обработка.РекомендацияПоПовышениюСкоростиРаботы", + Текст, БиблиотекаКартинок.Предупреждение32, СтатусОповещенияПользователя.Важное); КонецПроцедуры -// Формирует описание выделенных областей табличного документа, которое можно передавать на сервер. -// Служит заменой типа ВыделенныеОбластиТабличногоДокумента -// когда нужно вычислить сумму ячеек на сервере без контекста. -// См. также СтандартныеПодсистемыВызовСервера.РасчетЯчеек. -// -// Параметры: -// ТабличныйДокумент - ТабличныйДокумент - таблица, для которой нужно сформировать описание выделенных ячеек. -// -// Возвращаемое значение: -// Массив - содержит структуры со свойствами: -// * Верх - Число - Номер строки верхней границы области. -// * Низ - Число - Номер строки нижней границы области. -// * Лево - Число - Номер колонки верхней границы области. -// * Право - Число - Номер колонки нижней границы области. -// * ТипОбласти - ТипОбластиЯчеекТабличногоДокумента - Колонки, Прямоугольник, Строки, Таблица. -// -Функция ВыделенныеОбласти(ТабличныйДокумент) - Результат = Новый Массив; - Для Каждого ВыделеннаяОбласть Из ТабличныйДокумент.ВыделенныеОбласти Цикл - Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда - Продолжить; - КонецЕсли; - Структура = Новый Структура("Верх, Низ, Лево, Право, ТипОбласти"); - ЗаполнитьЗначенияСвойств(Структура, ВыделеннаяОбласть); - Результат.Добавить(Структура); - КонецЦикла; - Возврат Результат; -КонецФункции - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index 3ca244ff4..943d34773 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // См. СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске(). @@ -11,89 +19,38 @@ Параметры.Вставить("ПолученныеПараметрыКлиента", Неопределено); Если ПараметрыПриЗапускеПрограммы.Свойство("ПолученныеПараметрыКлиента") - И ТипЗнч(ПараметрыПриЗапускеПрограммы.ПолученныеПараметрыКлиента) = Тип("Структура") Тогда + И ТипЗнч(ПараметрыПриЗапускеПрограммы.ПолученныеПараметрыКлиента) = Тип("Структура") Тогда - Параметры.Вставить("ПолученныеПараметрыКлиента", - ПараметрыПриЗапускеПрограммы.ПолученныеПараметрыКлиента); + Параметры.Вставить("ПолученныеПараметрыКлиента", ПараметрыПриЗапускеПрограммы.ПолученныеПараметрыКлиента); КонецЕсли; Если ПараметрыПриЗапускеПрограммы.Свойство("ПропуститьОчисткуСкрытияРабочегоСтола") Тогда Параметры.Вставить("ПропуститьОчисткуСкрытияРабочегоСтола"); КонецЕсли; - #Если ВебКлиент Тогда - ЭтоВебКлиент = Истина; - ЭтоМобильныйКлиент = Ложь; - КаталогПрограммы = ""; - #ИначеЕсли МобильныйКлиент Тогда - ЭтоВебКлиент = Ложь; - ЭтоМобильныйКлиент = Истина; - КаталогПрограммы = ""; - #Иначе - ЭтоВебКлиент = Ложь; - ЭтоМобильныйКлиент = Ложь; - КаталогПрограммы = КаталогПрограммы(); - #КонецЕсли - - ИспользуемыйКлиент = ""; - #Если ТонкийКлиент Тогда - ИспользуемыйКлиент = "ТонкийКлиент"; - #ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда - ИспользуемыйКлиент = "ТолстыйКлиентУправляемоеПриложение"; - #ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда - ИспользуемыйКлиент = "ТолстыйКлиентОбычноеПриложение"; - #ИначеЕсли ВебКлиент Тогда - ОписаниеБраузера = ТекущийБраузер(); - Если ПустаяСтрока(ОписаниеБраузера.Версия) Тогда - ИспользуемыйКлиент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВебКлиент.%1", ОписаниеБраузера.Название); - Иначе - ИспользуемыйКлиент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВебКлиент.%1.%2", ОписаниеБраузера.Название, СтрРазделить(ОписаниеБраузера.Версия, ".")[0]); - КонецЕсли; - #КонецЕсли - - СистемнаяИнформация = Новый СистемнаяИнформация; - ЭтоLinuxКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 - Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; - ЭтоOSXКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86 - Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.MacOS_x86_64; - ЭтоWindowsКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 - Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; - - Параметры.Вставить("ПараметрЗапуска", ПараметрЗапуска); + Параметры.Вставить("ПараметрЗапуска", ПараметрЗапуска); Параметры.Вставить("СтрокаСоединенияИнформационнойБазы", СтрокаСоединенияИнформационнойБазы()); - Параметры.Вставить("ЭтоВебКлиент", ЭтоВебКлиент); - Параметры.Вставить("ЭтоВебКлиентПодMacOS", ОбщегоНазначенияКлиентПовтИсп.ЭтоВебКлиентПодMacOS()); - Параметры.Вставить("ЭтоLinuxКлиент", ЭтоLinuxКлиент); - Параметры.Вставить("ЭтоOSXКлиент", ЭтоOSXКлиент); - Параметры.Вставить("ЭтоWindowsКлиент", ЭтоWindowsКлиент); - Параметры.Вставить("ЭтоМобильныйКлиент", ЭтоМобильныйКлиент); - Параметры.Вставить("ИспользуемыйКлиент", ИспользуемыйКлиент); - Параметры.Вставить("КаталогПрограммы", КаталогПрограммы); - Параметры.Вставить("ИдентификаторКлиента", СистемнаяИнформация.ИдентификаторКлиента); + Параметры.Вставить("ЭтоВебКлиент", ЭтоВебКлиент()); + Параметры.Вставить("ЭтоLinuxКлиент", ОбщегоНазначенияКлиент.ЭтоLinuxКлиент()); + Параметры.Вставить("ЭтоOSXКлиент", ОбщегоНазначенияКлиент.ЭтоOSXКлиент()); + Параметры.Вставить("ЭтоWindowsКлиент", ОбщегоНазначенияКлиент.ЭтоWindowsКлиент()); + Параметры.Вставить("ЭтоМобильныйКлиент", ЭтоМобильныйКлиент()); + Параметры.Вставить("ИспользуемыйКлиент", ИспользуемыйКлиент()); + Параметры.Вставить("КаталогПрограммы", ТекущийКаталогПрограммы()); + Параметры.Вставить("ИдентификаторКлиента", ИдентификаторКлиента()); Параметры.Вставить("СкрытьРабочийСтолПриНачалеРаботыСистемы", Ложь); - - СистемнаяИнформация = Новый СистемнаяИнформация; - ОперативнаяПамять = Окр(СистемнаяИнформация.ОперативнаяПамять / 1024, 1); - Параметры.Вставить("ОперативнаяПамять", ОперативнаяПамять); - - ИнформациюЭкрановКлиента = ПолучитьИнформациюЭкрановКлиента(); - Если ИнформациюЭкрановКлиента.Количество() > 0 Тогда - DPI = ИнформациюЭкрановКлиента[0].DPI; - Параметры.Вставить("РазрешениеОсновногоЭкрана", ?(DPI = 0, 72, DPI)); - Иначе - Параметры.Вставить("РазрешениеОсновногоЭкрана", 72); - КонецЕсли; + Параметры.Вставить("ОперативнаяПамять", ОбщегоНазначенияКлиент.ОперативнаяПамятьДоступнаяКлиентскомуПриложению()); + Параметры.Вставить("РазрешениеОсновногоЭкрана", РазрешениеОсновногоЭкрана()); // Установка даты клиента непосредственно перед вызовом, чтобы уменьшить погрешность. Параметры.Вставить("ТекущаяДатаНаКлиенте", ТекущаяДата()); // Для расчета ПоправкаКВремениСеанса. - Параметры.Вставить("ТекущаяУниверсальнаяДатаВМиллисекундахНаКлиенте", - ТекущаяУниверсальнаяДатаВМиллисекундах()); + Параметры.Вставить("ТекущаяУниверсальнаяДатаВМиллисекундахНаКлиенте", ТекущаяУниверсальнаяДатаВМиллисекундах()); ПараметрыКлиента = СтандартныеПодсистемыВызовСервера.ПараметрыРаботыКлиентаПриЗапуске(Параметры); Если ПараметрыПриЗапускеПрограммы.Свойство("ПолученныеПараметрыКлиента") - И ПараметрыПриЗапускеПрограммы.ПолученныеПараметрыКлиента <> Неопределено - И Не ПараметрыПриЗапускеПрограммы.Свойство("ОпцииИнтерфейса") Тогда + И ПараметрыПриЗапускеПрограммы.ПолученныеПараметрыКлиента <> Неопределено + И Не ПараметрыПриЗапускеПрограммы.Свойство("ОпцииИнтерфейса") Тогда ПараметрыПриЗапускеПрограммы.Вставить("ОпцииИнтерфейса", ПараметрыКлиента.ОпцииИнтерфейса); ПараметрыПриЗапускеПрограммы.ПолученныеПараметрыКлиента.Вставить("ОпцииИнтерфейса"); @@ -126,6 +83,17 @@ КонецФункции +#Область ПредопределенныйЭлемент + +// См. СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных +Функция СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных) Экспорт + + Возврат СтандартныеПодсистемыВызовСервера.СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных); + +КонецФункции + +#КонецОбласти + Процедура ПроверитьПорядокЗапускаПрограммыПередНачаломРаботыСистемы() ИмяПараметра = "СтандартныеПодсистемы.ЗапускПрограммыЗавершен"; @@ -148,6 +116,30 @@ КонецПроцедуры +#Область ПараметрыРаботыКлиентаПриЗапуске + +Функция ИспользуемыйКлиент() + + ИспользуемыйКлиент = ""; + #Если ТонкийКлиент Тогда + ИспользуемыйКлиент = "ТонкийКлиент"; + #ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда + ИспользуемыйКлиент = "ТолстыйКлиентУправляемоеПриложение"; + #ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда + ИспользуемыйКлиент = "ТолстыйКлиентОбычноеПриложение"; + #ИначеЕсли ВебКлиент Тогда + ОписаниеБраузера = ТекущийБраузер(); + Если ПустаяСтрока(ОписаниеБраузера.Версия) Тогда + ИспользуемыйКлиент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВебКлиент.%1", ОписаниеБраузера.Название); + Иначе + ИспользуемыйКлиент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВебКлиент.%1.%2", ОписаниеБраузера.Название, СтрРазделить(ОписаниеБраузера.Версия, ".")[0]); + КонецЕсли; + #КонецЕсли + + Возврат ИспользуемыйКлиент; + +КонецФункции + Функция ТекущийБраузер() Результат = Новый Структура("Название,Версия", "Другой", ""); @@ -256,14 +248,59 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с предопределенными данными. - -// См. СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных -Функция СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных) Экспорт +Функция ТекущийКаталогПрограммы() - Возврат СтандартныеПодсистемыВызовСервера.СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных); + #Если ВебКлиент Или МобильныйКлиент Тогда + КаталогПрограммы = ""; + #Иначе + КаталогПрограммы = КаталогПрограммы(); + #КонецЕсли + + Возврат КаталогПрограммы; + +КонецФункции + +Функция РазрешениеОсновногоЭкрана() + + ИнформациюЭкрановКлиента = ПолучитьИнформациюЭкрановКлиента(); + Если ИнформациюЭкрановКлиента.Количество() > 0 Тогда + DPI = ИнформациюЭкрановКлиента[0].DPI; + РазрешениеОсновногоЭкрана = ?(DPI = 0, 72, DPI); + Иначе + РазрешениеОсновногоЭкрана = 72; + КонецЕсли; + + Возврат РазрешениеОсновногоЭкрана; + +КонецФункции + +Функция ИдентификаторКлиента() + + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат СистемнаяИнформация.ИдентификаторКлиента; + +КонецФункции + +Функция ЭтоВебКлиент() Экспорт + +#Если ВебКлиент Тогда + Возврат Истина; +#Иначе + Возврат Ложь; +#КонецЕсли + +КонецФункции + +Функция ЭтоМобильныйКлиент() Экспорт + +#Если МобильныйКлиент Тогда + Возврат Истина; +#Иначе + Возврат Ложь; +#КонецЕсли КонецФункции #КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl deleted file mode 100644 index 8bb4199f8..000000000 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl +++ /dev/null @@ -1,162 +0,0 @@ -#Область СлужебныйПрограммныйИнтерфейс - -// Рассчитывает показатели числовых ячеек в табличном документе. -// См. также ОтчетыКлиент.ВыделенныеОбласти. -// -// Параметры: -// ТабличныйДокумент - ТабличныйДокумент - таблица, для которой требуется расчет. -// ВыделенныеОбласти -// - Неопределено - при вызове с клиента этот параметр будет определен автоматически. -// - Массив - При вызове с сервера в этот параметр следует передавать области, -// предварительно вычисленные на клиенте -// при помощи функции ОтчетыКлиент.ВыделенныеОбласти(ТабличныйДокумент). -// -// Возвращаемое значение: -// Структура - результаты расчета выделенных ячеек. -// * Количество - Число - Количество выделенных ячеек. -// * КоличествоЧисловых - Число - Количество числовых ячеек. -// * Сумма - Число - Сумма выделенных ячеек с числами. -// * Среднее - Число - Сумма выделенных ячеек с числами. -// * Минимум - Число - Сумма выделенных ячеек с числами. -// * Максимум - Число - Максимум выделенных ячеек с числами. -// * НуженВызовСервера - Булево - Истина когда вычисление на клиенте нецелесообразно и нужен вызов сервера. -// -Функция РасчетЯчеек(ТабличныйДокумент, ВыделенныеОбласти) Экспорт - Результат = Новый Структура; - Результат.Вставить("Количество", 0); - Результат.Вставить("КоличествоНеПустых", 0); - Результат.Вставить("КоличествоЧисловых", 0); - Результат.Вставить("Сумма", 0); - Результат.Вставить("Среднее", 0); - Результат.Вставить("Минимум", Неопределено); - Результат.Вставить("Максимум", Неопределено); - Результат.Вставить("НуженВызовСервера", Ложь); - - Если ВыделенныеОбласти = Неопределено Тогда - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ВызватьИсключение НСтр("ru = 'Не указано значение параметра ""ВыделенныеОбласти"".'"); - #Иначе - ВыделенныеОбласти = ТабличныйДокумент.ВыделенныеОбласти; - #КонецЕсли - КонецЕсли; - - ПроверенныеЯчейки = Новый Соответствие; - - Для Каждого ВыделеннаяОбласть Из ВыделенныеОбласти Цикл - Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") - И ТипЗнч(ВыделеннаяОбласть) <> Тип("Структура") Тогда - Продолжить; - КонецЕсли; - - ВыделеннаяОбластьВерх = ВыделеннаяОбласть.Верх; - ВыделеннаяОбластьНиз = ВыделеннаяОбласть.Низ; - ВыделеннаяОбластьЛево = ВыделеннаяОбласть.Лево; - ВыделеннаяОбластьПраво = ВыделеннаяОбласть.Право; - - Если ВыделеннаяОбластьВерх = 0 Тогда - ВыделеннаяОбластьВерх = 1; - КонецЕсли; - - Если ВыделеннаяОбластьНиз = 0 Тогда - ВыделеннаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы; - КонецЕсли; - - Если ВыделеннаяОбластьЛево = 0 Тогда - ВыделеннаяОбластьЛево = 1; - КонецЕсли; - - Если ВыделеннаяОбластьПраво = 0 Тогда - ВыделеннаяОбластьПраво = ТабличныйДокумент.ШиринаТаблицы; - КонецЕсли; - - Если ВыделеннаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Колонки Тогда - ВыделеннаяОбластьВерх = ВыделеннаяОбласть.Низ; - ВыделеннаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы; - КонецЕсли; - - ВыделеннаяОбластьВысота = ВыделеннаяОбластьНиз - ВыделеннаяОбластьВерх + 1; - ВыделеннаяОбластьШирина = ВыделеннаяОбластьПраво - ВыделеннаяОбластьЛево + 1; - - Результат.Количество = Результат.Количество + ВыделеннаяОбластьШирина * ВыделеннаяОбластьВысота; - #Если Не Сервер И Не ТолстыйКлиентОбычноеПриложение И Не ВнешнееСоединение Тогда - Если Результат.Количество >= 1000 Тогда - Результат.НуженВызовСервера = Истина; - Возврат Результат; - КонецЕсли; - #КонецЕсли - - Для НомерКолонки = ВыделеннаяОбластьЛево По ВыделеннаяОбластьПраво Цикл - Для НомерСтроки = ВыделеннаяОбластьВерх По ВыделеннаяОбластьНиз Цикл - Ячейка = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); - Если ПроверенныеЯчейки.Получить(Ячейка.Имя) = Неопределено Тогда - ПроверенныеЯчейки.Вставить(Ячейка.Имя, Истина); - Иначе - Продолжить; - КонецЕсли; - - Если Ячейка.Видимость = Истина Тогда - Если Ячейка.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Колонки - И Ячейка.СодержитЗначение И ТипЗнч(Ячейка.Значение) = Тип("Число") Тогда - Число = Ячейка.Значение; - ИначеЕсли ЗначениеЗаполнено(Ячейка.Текст) Тогда - ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); - - ТекстЯчейки = Ячейка.Текст; - Если СтрНачинаетсяС(ТекстЯчейки, "(") - И СтрЗаканчиваетсяНа(ТекстЯчейки, ")") Тогда - - ТекстЯчейки = СтрЗаменить(ТекстЯчейки, "(", ""); - ТекстЯчейки = СтрЗаменить(ТекстЯчейки, ")", ""); - - Число = ОписаниеТипаЧисло.ПривестиЗначение(ТекстЯчейки); - Если Число > 0 Тогда - Число = -Число; - КонецЕсли; - Иначе - Число = ОписаниеТипаЧисло.ПривестиЗначение(ТекстЯчейки); - КонецЕсли; - Иначе - Продолжить; - КонецЕсли; - Результат.КоличествоНеПустых = Результат.КоличествоНеПустых + 1; - Если ТипЗнч(Число) = Тип("Число") Тогда - Результат.КоличествоЧисловых = Результат.КоличествоЧисловых + 1; - Результат.Сумма = Результат.Сумма + Число; - Если Результат.КоличествоЧисловых = 1 Тогда - Результат.Минимум = Число; - Результат.Максимум = Число; - Иначе - Результат.Минимум = Мин(Число, Результат.Минимум); - Результат.Максимум = Макс(Число, Результат.Максимум); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - - Если Результат.КоличествоЧисловых > 0 Тогда - Результат.Среднее = Результат.Сумма / Результат.КоличествоЧисловых; - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Формирует представление расписания регламентного задания. -// -// Параметры: -// Расписание - РасписаниеРегламентногоЗадания - Расписание. -// -// Возвращаемое значение: -// Строка - Представление расписания. -// -Функция ПредставлениеРасписания(Расписание) Экспорт - ПредставлениеРасписания = Строка(Расписание); - ПредставлениеРасписания = ВРег(Лев(ПредставлениеРасписания, 1)) + Сред(ПредставлениеРасписания, 2); - ПредставлениеРасписания = СтрЗаменить(СтрЗаменить(ПредставлениеРасписания, " ", " "), " ]", "]") + "."; - Возврат ПредставлениеРасписания; -КонецФункции - -#КонецОбласти - diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl new file mode 100644 index 000000000..adb438856 --- /dev/null +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl @@ -0,0 +1,40 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Описывает правил транслитерации национального алфавита в латиницу. +// +// Параметры: +// Правила- Соответствие - ключ как буква национального алфавита, значение как буква латинского алфавита. +// +Процедура ПриЗаполненииПравилТранслитерации(Правила) Экспорт + + // Локализация начало + + // Следующий фрагмент кода выполняет условный вызов процедуры ПриЗаполненииПравилТранслитерации + // при наличии модуля СтроковыеФункцииКлиентСерверРФ. + + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + Если Метаданные.ОбщиеМодули.Найти("СтроковыеФункцииКлиентСерверРФ") <> Неопределено Тогда + МодульСтроковыеФункцииКлиентСерверРФ = ОбщегоНазначения.ОбщийМодуль("СтроковыеФункцииКлиентСерверРФ"); + МодульСтроковыеФункцииКлиентСерверРФ.ПриЗаполненииПравилТранслитерации(Правила); + КонецЕсли; + #Иначе + МодульСтроковыеФункцииКлиентСерверРФ = Вычислить("СтроковыеФункцииКлиентСерверРФ"); + Если ТипЗнч(МодульСтроковыеФункцииКлиентСерверРФ) = Тип("ОбщийМодуль") Тогда + МодульСтроковыеФункцииКлиентСерверРФ.ПриЗаполненииПравилТранслитерации(Правила); + КонецЕсли; + #КонецЕсли + + // Локализация конец + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/СтандартныеПодсистемыКлиентСервер.mdo b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/СтандартныеПодсистемыКлиентСерверЛокализация.mdo similarity index 77% rename from SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/СтандартныеПодсистемыКлиентСервер.mdo rename to SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/СтандартныеПодсистемыКлиентСерверЛокализация.mdo index 98a363ffa..d1c454271 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/СтандартныеПодсистемыКлиентСервер.mdo +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/СтандартныеПодсистемыКлиентСерверЛокализация.mdo @@ -1,9 +1,9 @@ - - СтандартныеПодсистемыКлиентСервер + + СтандартныеПодсистемыКлиентСерверЛокализация ru - Стандартные подсистемы клиент сервер + Стандартные подсистемы клиент сервер локализация true true diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index 5289448df..eab0390c4 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает описания всех библиотек конфигурации, включая @@ -149,6 +157,52 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Использование идентификаторов объектов метаданных конфигурации и расширений. + +// Только для внутреннего использования. +Функция ОтключитьИдентификаторыОбъектовМетаданных() Экспорт + + ОбщиеПараметры = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности(); + + Если НЕ ОбщиеПараметры.ОтключитьИдентификаторыОбъектовМетаданных Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") + ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") + ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") + ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + ВызватьИсключение + НСтр("ru = 'Невозможно отключить справочник Идентификаторы объектов метаданных, + |если используется любая из следующих подсистем: + |- ВариантыОтчетов, + |- ДополнительныеОтчетыИОбработки, + |- РассылкаОтчетов, + |- УправлениеДоступом.'"); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Только для внутреннего использования. +Функция ИдентификаторыОбъектовМетаданныхПроверкаИспользования(ПроверитьОбновление = Ложь, ОбъектыРасширений = Ложь) Экспорт + + Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(ОбъектыРасширений); + + Если ПроверитьОбновление Тогда + Справочники.ИдентификаторыОбъектовМетаданных.ДанныеОбновлены(Истина, ОбъектыРасширений); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции работы с обменом данными. + // Возвращает признак использования в информационной базе полного РИБ (без фильтров). // Проверка выполняется по более точному алгоритму, если используется подсистема "Обмен данными". // @@ -224,52 +278,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Использование идентификаторов объектов метаданных конфигурации и расширений. - -// Только для внутреннего использования. -Функция ОтключитьИдентификаторыОбъектовМетаданных() Экспорт - - ОбщиеПараметры = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности(); - - Если НЕ ОбщиеПараметры.ОтключитьИдентификаторыОбъектовМетаданных Тогда - Возврат Ложь; - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") - ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") - ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") - ИЛИ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - - ВызватьИсключение - НСтр("ru = 'Невозможно отключить справочник Идентификаторы объектов метаданных, - |если используется любая из следующих подсистем: - |- ВариантыОтчетов, - |- ДополнительныеОтчетыИОбработки, - |- РассылкаОтчетов, - |- УправлениеДоступом.'"); - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Только для внутреннего использования. -Функция ИдентификаторыОбъектовМетаданныхПроверкаИспользования(ПроверитьОбновление = Ложь, ОбъектыРасширений = Ложь) Экспорт - - Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(ОбъектыРасширений); - - Если ПроверитьОбновление Тогда - Справочники.ИдентификаторыОбъектовМетаданных.ДанныеОбновлены(Истина, ОбъектыРасширений); - КонецЕсли; - - Возврат Истина; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с обменом данными. - // Возвращает список планов обмена РИБ. // Если конфигурация работает в модели сервиса, // то возвращает список разделенных планов обмена РИБ. @@ -368,10 +376,51 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Прочее. + +// Доступность объектов метаданных по функциональным опциям. +Функция ДоступностьОбъектовПоОпциям() Экспорт + + Параметры = Новый Структура(СтандартныеПодсистемыПовтИсп.ОпцииИнтерфейса()); + + ДоступностьОбъектов = Новый Соответствие; + Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл + Значение = -1; + Для Каждого Элемент Из ФункциональнаяОпция.Состав Цикл + Если Элемент.Объект = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Значение = -1 Тогда + Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Параметры); + КонецЕсли; + ПолноеИмя = Элемент.Объект.ПолноеИмя(); + Если Значение = Истина Тогда + ДоступностьОбъектов.Вставить(ПолноеИмя, Истина); + Иначе + Если ДоступностьОбъектов[ПолноеИмя] = Неопределено Тогда + ДоступностьОбъектов.Вставить(ПолноеИмя, Ложь); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + Возврат Новый ФиксированноеСоответствие(ДоступностьОбъектов); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции +// Параметры, применяемых к элементам командного интерфейса, связанным с параметрическими функциональными опциями. +Функция ОпцииИнтерфейса() Экспорт + + ОпцииИнтерфейса = Новый Структура; + ОбщегоНазначенияПереопределяемый.ПриОпределенииПараметровФункциональныхОпцийИнтерфейса(ОпцииИнтерфейса); + Возврат Новый ФиксированнаяСтруктура(ОпцииИнтерфейса); + +КонецФункции + // Возвращает соответствие имен "функциональных" подсистем и значения Истина. // У "функциональной" подсистемы снят флажок "Включать в командный интерфейс". // @@ -387,18 +436,20 @@ КонецФункции -// Проверяет наличие механизма платформы, предупреждающего об опасных действиях. -// -// Возвращаемое значение: -// Булево - если Истина, тогда работает механизм предупреждений безопасности. -// -Функция ЕстьЗащитаОтОпасныхДействий() Экспорт +Функция ОписаниеТипаВсеСсылки() Экспорт - Свойства = Новый Структура("ЗащитаОтОпасныхДействий, UnsafeOperationProtection"); - ЗаполнитьЗначенияСвойств(Свойства, ПользователиИнформационнойБазы.ТекущийПользователь()); - - Возврат Свойства.ЗащитаОтОпасныхДействий <> Неопределено - Или Свойства.UnsafeOperationProtection <> Неопределено; + Возврат Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов( + Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов( + Справочники.ТипВсеСсылки(), + Документы.ТипВсеСсылки().Типы()), + ПланыОбмена.ТипВсеСсылки().Типы()), + Перечисления.ТипВсеСсылки().Типы()), + ПланыВидовХарактеристик.ТипВсеСсылки().Типы()), + ПланыСчетов.ТипВсеСсылки().Типы()), + ПланыВидовРасчета.ТипВсеСсылки().Типы()), + БизнесПроцессы.ТипВсеСсылки().Типы()), + БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().Типы()), + Задачи.ТипВсеСсылки().Типы()); КонецФункции @@ -512,7 +563,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Вспомогательные процедуры и функции Функция НовоеОписаниеПодсистемы() @@ -520,6 +571,7 @@ Описание.Вставить("Имя", ""); Описание.Вставить("Версия", ""); Описание.Вставить("ТребуемыеПодсистемы", Новый Массив); + Описание.Вставить("ИдентификаторИнтернетПоддержки", ""); // Свойство устанавливается автоматически. Описание.Вставить("ЭтоКонфигурация", Ложь); diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 3554947ff..8538a4188 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -1,7 +1,12 @@ -#Область ПрограммныйИнтерфейс +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -// Инициализации параметров сеанса. +#Область ПрограммныйИнтерфейс // Вызов этой процедуры необходимо разместить в модуле сеанса в процедуре УстановкаПараметровСеанса // согласно документации. @@ -63,10 +68,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Дополнительные процедуры и функции. - -// Возвращает признак, является ли конфигурация базовой. +// Возвращает признак того, является ли конфигурация базовой. // Базовые версии конфигураций могут иметь программные ограничения, действие которых // можно предусмотреть с помощью этой функции. // Конфигурация считается базовой, если в ее имени есть термин "Базовая", @@ -93,7 +95,7 @@ КонецПроцедуры -// Возвращает номер версии Библиотеки стандартных подсистем (БСП), +// Возвращает номер версии "Библиотеки стандартных подсистем" (БСП), // встроенной в конфигурацию. // // Возвращаемое значение: @@ -132,9 +134,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Параметры администрирования информационной базы и кластера серверов. - // Возвращает сохраненные в информационной базы параметры администрирования. // Предназначена для использования в механизмах, требующих для свой работы // ввода параметров администрирования информационной базы и/или кластера серверов. @@ -146,8 +145,8 @@ // АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера // и АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера. // При этом поля, содержащие пароли, возвращаются пустыми. Если параметры администрирования -// не были ранее сохранены при помощи функции УстановитьПараметрыАдминистрирования -// то буду возвращены автоматически вычисленные параметры администрирования по-умолчанию. +// не были ранее сохранены при помощи функции УстановитьПараметрыАдминистрирования, +// то будут возвращены автоматически вычисленные параметры администрирования по умолчанию. // Функция ПараметрыАдминистрирования() Экспорт @@ -200,11 +199,8 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с формами. - // Устанавливает жирное оформление шрифта заголовков групп формы для их корректного отображения в интерфейсе 8.2. -// В интерфейсе Такси заголовки групп с обычным выделением и без выделения выводится большим шрифтом. +// В интерфейсе "Такси" заголовки групп с обычным выделением и без выделения выводятся большим шрифтом. // В интерфейсе 8.2 такие заголовки выводятся как обычные надписи и не ассоциируются с заголовками. // Эта функция предназначена для визуального выделения (жирным шрифтом) заголовков групп в режиме интерфейса 8.2. // @@ -248,9 +244,9 @@ // Подробнее см. стандарт "Поле "Дата" в списках". // // Параметры: -// ЭтотОбъект - УправляемаяФорма - Форма со списком. -// ПолноеИмяРеквизита - Строка - Полный путь к реквизиту типа "Дата" в формате "<ИмяСписка>.<ИмяПоля>". -// ИмяЭлемента - Строка - Имя элемента формы, связанного с реквизитом списка типа "Дата". +// ЭтотОбъект - УправляемаяФорма - форма со списком. +// ПолноеИмяРеквизита - Строка - полный путь к реквизиту типа "Дата" в формате "<ИмяСписка>.<ИмяПоля>". +// ИмяЭлемента - Строка - имя элемента формы, связанного с реквизитом списка типа "Дата". // // Пример: // @@ -324,26 +320,117 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Подтверждение завершения работы программы. - // Получает настройку необходимости выводить подтверждение при завершении работы программы // для текущего пользователя. Предназначена для использования в форме персональных настроек // пользователя. Пример использования см. в общей форме _ДемоМоиНастройки. // // Возвращаемое значение: -// Булево - Если Истина, то пользователю при закрытии программы будет показано +// Булево - если Истина, то пользователю при закрытии программы будет показано // окно с подтверждением завершения сеанса. // Функция ЗапрашиватьПодтверждениеПриЗавершенииПрограммы() Экспорт - Результат = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбщиеНастройкиПользователя", "ЗапрашиватьПодтверждениеПриЗавершенииПрограммы"); + + Результат = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "ОбщиеНастройкиПользователя", + "ЗапрашиватьПодтверждениеПриЗавершенииПрограммы"); Если Результат = Неопределено Тогда Результат = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().ЗапрашиватьПодтверждениеПриЗавершенииПрограммы; - Настройки = Новый Структура("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", Результат); КонецЕсли; Возврат Результат; + +КонецФункции + +// Возвращает описания форматов сохранения табличного документа. +// +// Возвращаемое значение +// ТаблицаЗначений: +// ТипФайлаТабличногоДокумента - ТипФайлаТабличногоДокумента - значение в платформе, соответствующее формату; +// Ссылка - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка на метаданные, где хранится представление; +// Представление - Строка - представление типа файла (заполняется из перечисления); +// Расширение - Строка - тип файла для операционной системы; +// Картинка - Картинка - значок формата. +// +Функция НастройкиФорматовСохраненияТабличногоДокумента() Экспорт + + ТаблицаФорматов = Новый ТаблицаЗначений; + + ТаблицаФорматов.Колонки.Добавить("ТипФайлаТабличногоДокумента", Новый ОписаниеТипов("ТипФайлаТабличногоДокумента")); + ТаблицаФорматов.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("ПеречислениеСсылка.ФорматыСохраненияОтчетов")); + ТаблицаФорматов.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + ТаблицаФорматов.Колонки.Добавить("Расширение", Новый ОписаниеТипов("Строка")); + ТаблицаФорматов.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка")); + + // Документ PDF (.pdf) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.PDF; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.PDF; + НовыйФормат.Расширение = "pdf"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматPDF; + + // Табличный документ (.mxl) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.MXL; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.MXL; + НовыйФормат.Расширение = "mxl"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматMXL; + + // Лист Microsoft Excel 2007 (.xlsx) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLSX; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLSX; + НовыйФормат.Расширение = "xlsx"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel2007; + + // Лист Microsoft Excel 97-2003 (.xls) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLS; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLS; + НовыйФормат.Расширение = "xls"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel; + + // Электронная таблица OpenDocument (.ods). + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ODS; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ODS; + НовыйФормат.Расширение = "ods"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматOpenOfficeCalc; + + // Документ Word 2007 (.docx) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.DOCX; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.DOCX; + НовыйФормат.Расширение = "docx"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматWord2007; + + // Веб-страница (.html) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.HTML5; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.HTML; + НовыйФормат.Расширение = "html"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматHTML; + + // Текстовый документ UTF-8 (.txt). + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.TXT; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.TXT; + НовыйФормат.Расширение = "txt"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; + + // Текстовый документ ANSI (.txt). + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ANSITXT; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ANSITXT; + НовыйФормат.Расширение = "txt"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; + + Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл + ФорматСохранения.Представление = Строка(ФорматСохранения.Ссылка); + КонецЦикла; + + Возврат ТаблицаФорматов; + КонецФункции #Область УстаревшиеПроцедурыИФункции @@ -941,7 +1028,7 @@ // информационной базе. // // Параметры: -// см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтаксис-помощнике. +// см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтакс-помощнике. // Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза, Знач Получатель) Экспорт @@ -996,7 +1083,7 @@ // информационной базе. // // Параметры: -// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтаксис-помощнике. +// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтакс-помощнике. // Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Знач Отправитель) Экспорт @@ -1034,7 +1121,7 @@ // информационной базе. // // Параметры: -// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. +// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтакс-помощнике. // Параметр Отправитель может быть не заполнен, например, при получении сообщения начального образа в АРМе. // Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель = Неопределено) Экспорт @@ -1341,107 +1428,6 @@ КонецПроцедуры -// Возвращает таблицу возможных форматов для сохранения табличного документа. -// -// Возвращаемое значение -// ТаблицаЗначений: -// ТипФайлаТабличногоДокумента - ТипФайлаТабличногоДокумента - значение в платформе, -// соответствующее -// формату; -// Ссылка - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка на метаданные, -// где хранится -// представление; -// Представление - Строка - - представление типа -// файла (заполняется из перечисления); -// Расширение - Строка - - тип файла для -// операционной системы; -// Картинка - Картинка - значок формата. -// -Функция НастройкиФорматовСохраненияТабличногоДокумента() Экспорт - - ТаблицаФорматов = Новый ТаблицаЗначений; - - ТаблицаФорматов.Колонки.Добавить("ТипФайлаТабличногоДокумента", Новый ОписаниеТипов("ТипФайлаТабличногоДокумента")); - ТаблицаФорматов.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("ПеречислениеСсылка.ФорматыСохраненияОтчетов")); - ТаблицаФорматов.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - ТаблицаФорматов.Колонки.Добавить("Расширение", Новый ОписаниеТипов("Строка")); - ТаблицаФорматов.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка")); - - // Документ PDF (.pdf) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.PDF; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.PDF; - НовыйФормат.Расширение = "pdf"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматPDF; - - // Табличный документ (.mxl) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.MXL; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.MXL; - НовыйФормат.Расширение = "mxl"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматMXL; - - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - // Лист Microsoft Excel 2007 (.xlsx) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLSX; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLSX; - НовыйФормат.Расширение = "xlsx"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel2007; - - // Лист Microsoft Excel 97-2003 (.xls) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLS; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLS; - НовыйФормат.Расширение = "xls"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel; - - // Электронная таблица OpenDocument (.ods). - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ODS; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ODS; - НовыйФормат.Расширение = "ods"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматOpenOfficeCalc; - - // Документ Word 2007 (.docx) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.DOCX; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.DOCX; - НовыйФормат.Расширение = "docx"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматWord2007; - - // Веб-страница (.html) - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.HTML5; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.HTML; - НовыйФормат.Расширение = "html"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматHTML; - - // Текстовый документ UTF-8 (.txt). - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.TXT; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.TXT; - НовыйФормат.Расширение = "txt"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; - - // Текстовый документ ANSI (.txt). - НовыйФормат = ТаблицаФорматов.Добавить(); - НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ANSITXT; - НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ANSITXT; - НовыйФормат.Расширение = "txt"; - НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; - - КонецЕсли; - - Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл - ФорматСохранения.Представление = Строка(ФорматСохранения.Ссылка); - КонецЦикла; - - Возврат ТаблицаФорматов; - -КонецФункции - // Проверяет доступность проведения списка документов текущему пользователю. // // Параметры: @@ -1606,7 +1592,10 @@ НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( Метаданные.Роли.ЗапускВебКлиента.Имя); - + + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.ЗапускМобильногоКлиента.Имя); + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( Метаданные.Роли.ВыводНаПринтерФайлБуферОбмена.Имя); @@ -1669,7 +1658,7 @@ // информационной базе. // // Параметры: -// см. описание обработчика события ПриОтправкеДанныхГлавному() в синтаксис-помощнике. +// см. описание обработчика события ПриОтправкеДанныхГлавному() в синтакс-помощнике. // Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Знач Получатель) @@ -1751,13 +1740,13 @@ Параметры.Вставить("ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти", ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти() И Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела")); - Параметры.Вставить("ЭтоСеансВнешнегоПользователя", ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя()); + Параметры.Вставить("ЭтоСеансВнешнегоПользователя", Пользователи.ЭтоСеансВнешнегоПользователя()); Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая()); Если ЭтоВызовПередНачаломРаботыСистемы И Не Параметры.ПолученныеПараметрыКлиента.Свойство("ОпцииИнтерфейса") Тогда - Параметры.Вставить("ОпцииИнтерфейса", ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса()); + Параметры.Вставить("ОпцииИнтерфейса", СтандартныеПодсистемыПовтИсп.ОпцииИнтерфейса()); КонецЕсли; Если ЭтоВызовПередНачаломРаботыСистемы Тогда @@ -1839,8 +1828,8 @@ И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - МодульОбменДаннымиВызовСервера = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВызовСервера"); - Если МодульОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Тогда + МодульОбменДаннымиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСлужебный"); + Если МодульОбменДаннымиСлужебный.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Тогда Параметры.Вставить("ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском"); Возврат Ложь; КонецЕсли; @@ -2269,7 +2258,7 @@ // информационной базе. // // Параметры: -// см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтаксис-помощнике. +// см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтакс-помощнике. // Процедура ПриОтправкеДанныхПодчиненномуСобытие(Источник, ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза) Экспорт @@ -2286,7 +2275,7 @@ // информационной базе. // // Параметры: -// см. описание обработчика события ПриОтправкеДанныхГлавному() в синтаксис-помощнике. +// см. описание обработчика события ПриОтправкеДанныхГлавному() в синтакс-помощнике. // Процедура ПриОтправкеДанныхГлавномуСобытие(Источник, ЭлементДанных, ОтправкаЭлемента) Экспорт @@ -2303,7 +2292,7 @@ // информационной базе. // // Параметры: -// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтаксис-помощнике. +// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтакс-помощнике. // Процедура ПриПолученииДанныхОтПодчиненногоСобытие(Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт @@ -2320,7 +2309,7 @@ // информационной базе. // // Параметры: -// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. +// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтакс-помощнике. // Процедура ПриПолученииДанныхОтГлавногоСобытие(Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт @@ -2469,7 +2458,7 @@ Если Счет.ВидыСубконто[Индекс].ВидСубконто <> Строка.ВидСубконто Тогда ЗаписьЖурналаРегистрации( НСтр("ru = 'Обмен данными.Отключение связи с главным узлом'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Счет.Метаданные(), Счет, @@ -2965,8 +2954,8 @@ Функция ПараметрыАдминистрированияПоУмолчанию() - ПараметрыАдминистрированияКластера = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(); - ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(); + ПараметрыАдминистрированияКластера = АдминистрированиеКластера.ПараметрыАдминистрированияКластера(); + ПараметрыАдминистрированияИБ = АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(); // Объединяем структуры параметров. СтруктураПараметровАдминистрирования = ПараметрыАдминистрированияКластера; @@ -3306,12 +3295,9 @@ Функция ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти() - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() - ИЛИ ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() - ИЛИ Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - + Если ОбщегоНазначения.ЭтоВебКлиент() + Или Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда Возврат Ложь; - КонецЕсли; ОперативнаяПамять = ПараметрыКлиентаНаСервере().Получить("ОперативнаяПамять"); diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index 7581151af..dbe2cf9ab 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину. @@ -10,7 +18,7 @@ // ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. // Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: // - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки -// включаются в результат. +// включаются в результат; // - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в // случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а // при других разделителях результатом функции будет пустой массив. @@ -36,6 +44,18 @@ Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт + Если Разделитель = "," + И ПропускатьПустыеСтроки = Неопределено + И СокращатьНепечатаемыеСимволы Тогда + + Результат = СтрРазделить(Значение, ",", Ложь); + Для Индекс = 0 По Результат.ВГраница() Цикл + Результат[Индекс] = СокрЛП(Результат[Индекс]) + КонецЦикла; + Возврат Результат; + + КонецЕсли; + Результат = Новый Массив; // Для обеспечения обратной совместимости. @@ -157,7 +177,7 @@ // // Параметры: // ШаблонСтроки - Строка - шаблон строки с параметрами (вхождениями вида "%<номер параметра>", -// например, "%1 пошел в %2"); +// например "%1 пошел в %2"); // Параметр - Строка - значение подставляемого параметра. // // Возвращаемое значение: @@ -206,7 +226,7 @@ // // Параметры: // ШаблонСтроки - Строка - шаблон строки с параметрами (вхождениями вида "%<номер параметра>", -// например, "%1 пошел в %2"); +// например "%1 пошел в %2"); // Параметры - Массив - значения параметров в строке ШаблонСтроки. // // Возвращаемое значение: @@ -350,48 +370,6 @@ КонецФункции -// Проверяет, содержит ли строка только символы кириллического алфавита. -// -// Параметры: -// СтрокаПроверки - Строка - проверяемая строка. -// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением. -// ДопустимыеСимволы - Строка - дополнительные разрешенные символы, кроме кириллицы. -// -// Возвращаемое значение: -// Булево - Истина, если строка содержит только кириллические (или допустимые) символы или пустая; -// Ложь, если строка содержит иные символы. -// -Функция ТолькоКириллицаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт - - Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда - Возврат Ложь; - КонецЕсли; - - Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда - Возврат Истина; - КонецЕсли; - - КодыДопустимыхСимволов = Новый Массив; - КодыДопустимыхСимволов.Добавить(1105); // "ё" - КодыДопустимыхСимволов.Добавить(1025); // "Ё" - - Для Индекс = 1 По СтрДлина(ДопустимыеСимволы) Цикл - КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, Индекс, 1))); - КонецЦикла; - - Для Индекс = 1 По СтрДлина(СтрокаПроверки) Цикл - КодСимвола = КодСимвола(Сред(СтрокаПроверки, Индекс, 1)); - Если ((КодСимвола < 1040) Или (КодСимвола > 1103)) - И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) - И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Возврат Истина; - -КонецФункции - // Проверяет, содержит ли строка только символы латинского алфавита. // // Параметры: @@ -519,7 +497,7 @@ // Дополняет строку символами слева или справа до заданной длины и возвращает ее. // При этом удаляются незначащие символы слева и справа (подробнее про незначащие символы -// см. синтаксис-помощник к методу платформы СокрЛП). +// см. синтакс-помощник к методу платформы СокрЛП). // По умолчанию функция дополняет строку символами "0" (ноль) слева. // // Параметры: @@ -590,7 +568,7 @@ КонецФункции // Выполняет замену символов в строке. -// Предназначена для простых случаев, например, для замены латиницы на похожие кириллические символы. +// Предназначена для простых случаев - например, для замены латиницы на похожие кириллические символы. // // Параметры: // ЗаменяемыеСимволы - Строка - строка символов, каждый из которых требует замены; @@ -627,8 +605,8 @@ // Функция ПреобразоватьЧислоВРимскуюНотацию(АрабскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт - РимскоеЧисло = ""; - АрабскоеЧисло = ДополнитьСтроку(АрабскоеЧисло, 3); + РимскоеЧисло = ""; + АрабскоеЧисло = ДополнитьСтроку(АрабскоеЧисло, 3); Если ИспользоватьКириллицу Тогда c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М"; @@ -642,9 +620,9 @@ Десятки = Число(Сред(АрабскоеЧисло, 2, 1)); Сотни = Число(Сред(АрабскоеЧисло, 1, 1)); - РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Сотни, c100, c500, c1000); - РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Десятки, c10, c50, c100); - РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Единицы, c1, c5, c10); + РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Сотни, c100, c500, c1000); + РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Десятки, c10, c50, c100); + РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Единицы, c1, c5, c10); Возврат РимскоеЧисло; @@ -785,7 +763,7 @@ КонецФункции // Преобразует исходную строку в транслит. -// Может использоваться для отправки SMS сообщений латиницей или для сохранения +// Может использоваться для отправки SMS-сообщений латиницей или для сохранения // файлов и папок, чтобы обеспечить возможность их переноса между разными операционными системами. // Обратное преобразование из латинских символов не предусмотрено. // @@ -796,9 +774,13 @@ // Строка - строка, в которой кириллица заменена на транслит. // Функция СтрокаЛатиницей(Знач Значение) Экспорт + Результат = ""; - Соответствие = СоответствиеНациональногоАлфавитаИЛатиницы(); + Соответствие = Новый Соответствие; + СтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(Соответствие); + + ТолькоЗаглавныеВСтроке = ТолькоЗаглавныеВСтроке(Значение); Для Позиция = 1 По СтрДлина(Значение) Цикл Символ = Сред(Значение, Позиция, 1); @@ -807,7 +789,9 @@ // Другие символы остаются "как есть". СимволЛатиницей = Символ; Иначе - Если Символ = ВРег(Символ) Тогда + Если ТолькоЗаглавныеВСтроке Тогда + СимволЛатиницей = ВРег(СимволЛатиницей); // восстанавливаем регистр + ИначеЕсли Символ = ВРег(Символ) Тогда СимволЛатиницей = ТРег(СимволЛатиницей); // восстанавливаем регистр КонецЕсли; КонецЕсли; @@ -815,6 +799,7 @@ КонецЦикла; Возврат Результат; + КонецФункции // Форматирует строку в соответствии с заданным шаблоном. @@ -905,7 +890,7 @@ // Преобразует исходную строку в число без вызова исключений. // // Параметры: -// Значение - Строка - Строка, которую необходимо привести к числу. +// Значение - Строка - строка, которую необходимо привести к числу. // Например, "10", "+10", "010", вернет 10; // "(10)", "-10",вернет -10; // "10,2", "10.2",вернет 10.2; @@ -913,7 +898,7 @@ // "10текст", вернет Неопределено. // // Возвращаемое значение: -// Число, Неопределено - Полученное число, либо Неопределено, если строка не является числом. +// Число, Неопределено - полученное число, либо Неопределено, если строка не является числом. // Функция СтрокаВЧисло(Знач Значение) Экспорт @@ -938,7 +923,7 @@ // Преобразует исходную строку в дату. // // Параметры: -// Значение - Строка - Строка, которую необходимо привести к дате. +// Значение - Строка - строка, которую необходимо привести к дате. // Формат даты должен быть в виде "ДД.ММ.ГГГГ" или "ДД/ММ/ГГ" или "ДД-ММ-ГГ", // Например, "23.02.1980" или "23/02/80". // @@ -970,16 +955,16 @@ // Формирует представление числа для определенного языка и параметров числа. // // Параметры: -// Шаблон - Строка - Строка, содержит перечисленные через точку с запятой 6 форм строки +// Шаблон - Строка - строка, содержит перечисленные через точку с запятой 6 форм строки // для каждой категории числительного: // - %1 обозначает позицию числа; -// Число - Число - Число, которое будет подставлено в строку вместо параметра "%1". -// Вид - ВидЧисловогоЗначения - Определяет вид числового значения, для которого формируется представление. +// Число - Число - число, которое будет подставлено в строку вместо параметра "%1". +// Вид - ВидЧисловогоЗначения - определяет вид числового значения, для которого формируется представление. // - Количественное (по умолчанию) или Порядковое. -// ФорматнаяСтрока - Строка - Строка параметров форматирования. См. аналогичный параметр в СтрокаСЧислом. +// ФорматнаяСтрока - Строка - строка параметров форматирования. См. аналогичный параметр в СтрокаСЧислом. // // Возвращаемое значение: -// Строка - Представление строки числа в требуемой форме. +// Строка - представление строки числа в требуемой форме. // // Пример: // @@ -1206,12 +1191,57 @@ Возврат ЧислоЦифрамиПредметИсчисленияПрописью(Значение, ФормаДля1 + "," + ФормаДля2 + "," + ФормаДля5, Ложь); КонецФункции +// Устарела. Используйте СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке +// Проверяет, содержит ли строка только символы кириллического алфавита. +// +// Параметры: +// СтрокаПроверки - Строка - проверяемая строка. +// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением. +// ДопустимыеСимволы - Строка - дополнительные разрешенные символы, кроме кириллицы. +// +// Возвращаемое значение: +// Булево - Истина, если строка содержит только кириллические (или допустимые) символы или пустая; +// Ложь, если строка содержит иные символы. +// +Функция ТолькоКириллицаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт + + Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда + Возврат Истина; + КонецЕсли; + + КодыДопустимыхСимволов = Новый Массив; + КодыДопустимыхСимволов.Добавить(1105); // "ё" + КодыДопустимыхСимволов.Добавить(1025); // "Ё" + + Для Индекс = 1 По СтрДлина(ДопустимыеСимволы) Цикл + КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, Индекс, 1))); + КонецЦикла; + + Для Индекс = 1 По СтрДлина(СтрокаПроверки) Цикл + КодСимвола = КодСимвола(Сред(СтрокаПроверки, Индекс, 1)); + Если ((КодСимвола < 1040) Или (КодСимвола > 1103)) + И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) + И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + #КонецОбласти #КонецОбласти #Область СлужебныеПроцедурыИФункции +#Область ПреобразоватьЧислоВРимскуюНотацию + // Выполняет преобразование цифры в римскую нотацию. // // Параметры: @@ -1250,6 +1280,10 @@ КонецФункции +#КонецОбласти + +#Область ПодставитьПараметрыВСтроку + // Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д. Функция ПодставитьПараметрыСПроцентом(Знач СтрокаПодстановки, Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, @@ -1295,44 +1329,23 @@ Возврат Результат; КонецФункции -Функция СоответствиеНациональногоАлфавитаИЛатиницы() - // Транслитерация, используемая в загранпаспортах 1997-2010. - Соответствие = Новый Соответствие; - Соответствие.Вставить("а","a"); - Соответствие.Вставить("б","b"); - Соответствие.Вставить("в","v"); - Соответствие.Вставить("г","g"); - Соответствие.Вставить("д","d"); - Соответствие.Вставить("е","e"); - Соответствие.Вставить("ё","e"); - Соответствие.Вставить("ж","zh"); - Соответствие.Вставить("з","z"); - Соответствие.Вставить("и","i"); - Соответствие.Вставить("й","y"); - Соответствие.Вставить("к","k"); - Соответствие.Вставить("л","l"); - Соответствие.Вставить("м","m"); - Соответствие.Вставить("н","n"); - Соответствие.Вставить("о","o"); - Соответствие.Вставить("п","p"); - Соответствие.Вставить("р","r"); - Соответствие.Вставить("с","s"); - Соответствие.Вставить("т","t"); - Соответствие.Вставить("у","u"); - Соответствие.Вставить("ф","f"); - Соответствие.Вставить("х","kh"); - Соответствие.Вставить("ц","ts"); - Соответствие.Вставить("ч","ch"); - Соответствие.Вставить("ш","sh"); - Соответствие.Вставить("щ","shch"); - Соответствие.Вставить("ъ",""); // пропускается - Соответствие.Вставить("ы","y"); - Соответствие.Вставить("ь",""); // пропускается - Соответствие.Вставить("э","e"); - Соответствие.Вставить("ю","yu"); - Соответствие.Вставить("я","ya"); +#КонецОбласти + +#Область СтрокаЛатиницей + +Функция ТолькоЗаглавныеВСтроке(Значение) + + Для Позиция = 1 По СтрДлина(Значение) Цикл + Символ = Сред(Значение, Позиция, 1); + Если Символ <> ВРег(Символ) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; - Возврат Соответствие; КонецФункции #КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСерверРФ/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСерверРФ/Module.bsl new file mode 100644 index 000000000..45c440c70 --- /dev/null +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСерверРФ/Module.bsl @@ -0,0 +1,96 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// См. СтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации +// +Процедура ПриЗаполненииПравилТранслитерации(Правила) Экспорт + + // Транслитерация, используемая в загранпаспортах 1997-2010. + Правила.Вставить("а","a"); + Правила.Вставить("б","b"); + Правила.Вставить("в","v"); + Правила.Вставить("г","g"); + Правила.Вставить("д","d"); + Правила.Вставить("е","e"); + Правила.Вставить("ё","e"); // АПК:163 требуется транслитерация. + Правила.Вставить("ж","zh"); + Правила.Вставить("з","z"); + Правила.Вставить("и","i"); + Правила.Вставить("й","y"); + Правила.Вставить("к","k"); + Правила.Вставить("л","l"); + Правила.Вставить("м","m"); + Правила.Вставить("н","n"); + Правила.Вставить("о","o"); + Правила.Вставить("п","p"); + Правила.Вставить("р","r"); + Правила.Вставить("с","s"); + Правила.Вставить("т","t"); + Правила.Вставить("у","u"); + Правила.Вставить("ф","f"); + Правила.Вставить("х","kh"); + Правила.Вставить("ц","ts"); + Правила.Вставить("ч","ch"); + Правила.Вставить("ш","sh"); + Правила.Вставить("щ","shch"); + Правила.Вставить("ъ",""); // Пропускается. + Правила.Вставить("ы","y"); + Правила.Вставить("ь",""); // Пропускается. + Правила.Вставить("э","e"); + Правила.Вставить("ю","yu"); + Правила.Вставить("я","ya"); + +КонецПроцедуры + +// Проверяет, содержит ли строка только символы кириллического алфавита. +// +// Параметры: +// СтрокаПроверки - Строка - проверяемая строка. +// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением. +// ДопустимыеСимволы - Строка - дополнительные разрешенные символы, кроме кириллицы. +// +// Возвращаемое значение: +// Булево - Истина, если строка содержит только кириллические (или допустимые) символы или пустая; +// Ложь, если строка содержит иные символы. +// +Функция ТолькоКириллицаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт + + Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда + Возврат Истина; + КонецЕсли; + + // АПК:163-выкл В данных буква допустима. + КодыДопустимыхСимволов = Новый Массив; + КодыДопустимыхСимволов.Добавить(1105); // "ё" + КодыДопустимыхСимволов.Добавить(1025); // "Ё" + // АПК:163-вкл + + Для Индекс = 1 По СтрДлина(ДопустимыеСимволы) Цикл + КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, Индекс, 1))); + КонецЦикла; + + Для Индекс = 1 По СтрДлина(СтрокаПроверки) Цикл + КодСимвола = КодСимвола(Сред(СтрокаПроверки, Индекс, 1)); + Если ((КодСимвола < 1040) Или (КодСимвола > 1103)) + И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) + И Не (Не УчитыватьРазделителиСлов И СтроковыеФункцииКлиентСервер.ЭтоРазделительСлов(КодСимвола)) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/АдресныйКлассификаторКлиентСервер.mdo b/SSL/src/CommonModules/СтроковыеФункцииКлиентСерверРФ/СтроковыеФункцииКлиентСерверРФ.mdo similarity index 61% rename from SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/АдресныйКлассификаторКлиентСервер.mdo rename to SSL/src/CommonModules/СтроковыеФункцииКлиентСерверРФ/СтроковыеФункцииКлиентСерверРФ.mdo index d3e4885d6..c8dd9f457 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/АдресныйКлассификаторКлиентСервер.mdo +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСерверРФ/СтроковыеФункцииКлиентСерверРФ.mdo @@ -1,9 +1,9 @@ - - АдресныйКлассификаторКлиентСервер + + СтроковыеФункцииКлиентСерверРФ ru - Адресный классификатор клиент сервер + Строковые функции клиент сервер РФ true true diff --git a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl index 6b83f9e0e..ee541f301 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается для получения настроек подсистемы. diff --git a/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl index 0095fbe4c..aa6cddc3a 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl index ef54e21a6..64531b419 100644 --- a/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определяет список обработчиков для формирования (или обновления) diff --git a/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl index 37a7ca36a..eb31d92c0 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает массив подсистем командного интерфейса, в которые включен переданный diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl index c21bfe3c5..b50600fb3 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Заполняет список текущих дел пользователя. @@ -149,7 +157,7 @@ Функция ОбщиеПараметрыЗапросов() Экспорт ОбщиеПараметрыЗапросов = Новый Структура; - ОбщиеПараметрыЗапросов.Вставить("Пользователь", ПользователиКлиентСервер.ТекущийПользователь()); + ОбщиеПараметрыЗапросов.Вставить("Пользователь", Пользователи.ТекущийПользователь()); ОбщиеПараметрыЗапросов.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь()); ОбщиеПараметрыЗапросов.Вставить("ТекущаяДата", ТекущаяДатаСеанса()); ОбщиеПараметрыЗапросов.Вставить("ПустаяДата", '00010101000000'); diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl index bc406d6bc..fb1683cd3 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает соответствие объектов метаданных и подсистем командного интерфейса. diff --git a/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl index c299b510c..640befcb4 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Функция выполняет трансляцию произвольного XDTO-объекта diff --git a/SSL/src/CommonModules/ТрансляцияXDTOПереопределяемый/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTOПереопределяемый/Module.bsl index 4c7a0e4f6..76f796938 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTOПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTOПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Заполняет переданный массив обработчиками трансляции сообщений между версиями. diff --git a/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl index c029def84..5d873ecc6 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает описание версии сообщения. Возвращаемое значение используется для передачи @@ -293,7 +301,6 @@ КонецЕсли; РезультирующийОбъект = ФабрикаXDTO.Создать(ТипРезультирующегоОбъекта); - СвойстваИсходногоОбъекта = Объект.Свойства(); Для Каждого Свойство Из ТипРезультирующегоОбъекта.Свойства Цикл diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектов/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектов/Module.bsl new file mode 100644 index 000000000..3adeddd8f --- /dev/null +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектов/Module.bsl @@ -0,0 +1,38 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Состояние флажка для формы настроек удаления помеченных объектов. +// +// Возвращаемое значение: +// Булево - значение. +// +// Пример: +// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда +// МодульУдалениеПомеченныхОбъектов = ОбщегоНазначения.ОбщийМодуль("УдалениеПомеченныхОбъектов"); +// АвтоматическиУдалятьПомеченныеОбъекты = МодульУдалениеПомеченныхОбъектов.ЗначениеФлажкаУдалятьПоРасписанию(); +// Иначе +// Элементы.ГруппаАвтоматическимУдалениемОбъектов.Видимость = Ложь; +// КонецЕсли; +// +Функция ЗначениеФлажкаУдалятьПоРасписанию() Экспорт + + Отбор = Новый Структура; + Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.УдалениеПомеченных); + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); + + Для Каждого Задание Из Задания Цикл + Возврат Задание.Использование; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo b/SSL/src/CommonModules/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo new file mode 100644 index 000000000..d180e1f07 --- /dev/null +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектов/УдалениеПомеченныхОбъектов.mdo @@ -0,0 +1,11 @@ + + + УдалениеПомеченныхОбъектов + + ru + Удаление помеченных объектов + + true + true + true + diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовКлиент/Module.bsl new file mode 100644 index 000000000..be4eedb86 --- /dev/null +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовКлиент/Module.bsl @@ -0,0 +1,63 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Обработчик события ОбработкаОповещения для формы, на которой требуется отобразить флажок удаления по расписанию. +// +// Параметры: +// ИмяСобытия - Строка - имя события, которое было получено обработчиком события на форме. +// АвтоматическиУдалятьПомеченныеОбъекты - Число - Реквизит, в которое будет помещено значение. +// +// Пример: +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда +// МодульУдалениеПомеченныхОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УдалениеПомеченныхОбъектовКлиент"); +// МодульУдалениеПомеченныхОбъектовКлиент.ОбработкаОповещенияИзмененияФлажкаУдалятьПоРасписанию( +// ИмяСобытия, +// АвтоматическиУдалятьПомеченныеОбъекты); +// КонецЕсли; +// +Процедура ОбработкаОповещенияИзмененияФлажкаУдалятьПоРасписанию(Знач ИмяСобытия, АвтоматическиУдалятьПомеченныеОбъекты) Экспорт + + Если ИмяСобытия = "ИзменилсяРежимАвтоматическиУдалятьПомеченныеОбъекты" Тогда + АвтоматическиУдалятьПомеченныеОбъекты = + УдалениеПомеченныхОбъектовСлужебныйВызовСервера.ЗначениеФлажкаУдалятьПоРасписанию(); + КонецЕсли; + +КонецПроцедуры + +// Обработчик события ПриИзменении для флажка, выполняющего переключение режима автоматического удаления объектов. +// Флажок должен быть связан с реквизитом типа Булево. +// +// Параметры: +// ЗначениеФлажкаАвтоматическиУдалятьПомеченныеОбъекты - Булево - новое значение флажка, которое требуется обработать. +// +// Пример: +// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда +// МодульУдалениеПомеченныхОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УдалениеПомеченныхОбъектовКлиент"); +// МодульУдалениеПомеченныхОбъектовКлиент.ПриИзмененииФлажкаУдалятьПоРасписанию(АвтоматическиУдалятьПомеченныеОбъекты); +// КонецЕсли; +// +Процедура ПриИзмененииФлажкаУдалятьПоРасписанию(ЗначениеФлажкаАвтоматическиУдалятьПомеченныеОбъекты) Экспорт + + УдалениеПомеченныхОбъектовСлужебныйВызовСервера.УстановитьРежимУдалятьПоРасписанию( + ЗначениеФлажкаАвтоматическиУдалятьПомеченныеОбъекты); + + Оповестить("ИзменилсяРежимАвтоматическиУдалятьПомеченныеОбъекты"); + +КонецПроцедуры + +// Открывает форму удаления помеченных объектов. +// +Процедура НачатьУдалениеПомеченных() Экспорт + + ОткрытьФорму("Обработка.УдалениеПомеченныхОбъектов.Форма"); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовКлиент/УдалениеПомеченныхОбъектовКлиент.mdo b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовКлиент/УдалениеПомеченныхОбъектовКлиент.mdo new file mode 100644 index 000000000..a7721c702 --- /dev/null +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовКлиент/УдалениеПомеченныхОбъектовКлиент.mdo @@ -0,0 +1,10 @@ + + + УдалениеПомеченныхОбъектовКлиент + + ru + Удаление помеченных объектов клиент + + true + true + diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовПереопределяемый/Module.bsl index 4ffa7a1cb..20f9eea23 100644 --- a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается перед поиском объектов помеченных на удаление. diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl index 8918c0b6c..e683c6253 100644 --- a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйВызовСервера/Module.bsl new file mode 100644 index 000000000..59c89abd6 --- /dev/null +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйВызовСервера/Module.bsl @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Устанавливает режим автоматического удаления помеченных объектов +// +Функция УстановитьРежимУдалятьПоРасписанию(УдалятьПомеченныеОбъекты) Экспорт + + Если Не Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда + ВызватьИсключение НСтр("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..67f72fe0f --- /dev/null +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебныйВызовСервера/УдалениеПомеченныхОбъектовСлужебныйВызовСервера.mdo @@ -0,0 +1,10 @@ + + + УдалениеПомеченныхОбъектовСлужебныйВызовСервера + + ru + Удаление помеченных объектов служебный вызов сервера + + true + true + diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index 7fad4ef2e..6fdc5bfbb 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -431,10 +439,6 @@ // Проверяет, что чтение существующего объекта из в базы данных разрешено на уровне прав и // на уровне записей для текущего пользователя. // -// Важно: если подсистема работает в режиме стандартного ограничения, -// а не в режиме универсального ограничения, тогда проверяется только право на таблицу -// без проверки права на уровне записей. -// // Параметры: // ОписаниеДанных - СправочникСсылка, // ДокументСсылка, @@ -455,13 +459,83 @@ КонецФункции -// См. УправлениеДоступом.ЧтениеРазрешено. +// Проверяет, что изменение существующего объекта в базе данных разрешено на уровне прав и +// на уровне записей для текущего пользователя. +// +// Важно: если подсистема работает в режиме стандартного ограничения, +// а не в режиме универсального ограничения, тогда проверяется право +// Изменение на таблицу, а на уровне записей проверяется только право Чтение. +// +// Параметры: +// ОписаниеДанных - СправочникСсылка, +// ДокументСсылка, +// ПланВидовХарактеристикСсылка, +// ПланСчетовСсылка, +// ПланВидовРасчетаСсылка, +// БизнесПроцессСсылка, +// ЗадачаСсылка, +// ПланОбменаСсылка - ссылка на объект, который требуется проверить. +// - РегистрСведенийКлючЗаписи, +// РегистрНакопленияКлючЗаписи, +// РегистрБухгалтерииКлючЗаписи, +// РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. +// Функция ИзменениеРазрешено(ОписаниеДанных) Экспорт Возврат УправлениеДоступомСлужебный.ДоступРазрешен(ОписаниеДанных, Истина); КонецФункции +// Проверяет, что чтение существующего объекта из в базы данных разрешено на уровне прав и +// на уровне записей для текущего пользователя. Если не разрешено вызывается исключение. +// +// Параметры: +// ОписаниеДанных - СправочникСсылка, +// ДокументСсылка, +// ПланВидовХарактеристикСсылка, +// ПланСчетовСсылка, +// ПланВидовРасчетаСсылка, +// БизнесПроцессСсылка, +// ЗадачаСсылка, +// ПланОбменаСсылка - ссылка на объект, который требуется проверить. +// - РегистрСведенийКлючЗаписи, +// РегистрНакопленияКлючЗаписи, +// РегистрБухгалтерииКлючЗаписи, +// РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. +// +Процедура ПроверитьЧтениеРазрешено(ОписаниеДанных) Экспорт + + УправлениеДоступомСлужебный.ДоступРазрешен(ОписаниеДанных, Ложь, Истина); + +КонецПроцедуры + +// Проверяет, что изменение существующего объекта в базе данных разрешено на уровне прав и +// на уровне записей для текущего пользователя. Если не разрешено вызывается исключение. +// +// Важно: если подсистема работает в режиме стандартного ограничения, +// а не в режиме универсального ограничения, тогда проверяется право +// Изменение на таблицу, а на уровне записей проверяется только право Чтение. +// +// Параметры: +// ОписаниеДанных - СправочникСсылка, +// ДокументСсылка, +// ПланВидовХарактеристикСсылка, +// ПланСчетовСсылка, +// ПланВидовРасчетаСсылка, +// БизнесПроцессСсылка, +// ЗадачаСсылка, +// ПланОбменаСсылка - ссылка на объект, который требуется проверить. +// - РегистрСведенийКлючЗаписи, +// РегистрНакопленияКлючЗаписи, +// РегистрБухгалтерииКлючЗаписи, +// РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. +// +Процедура ПроверитьИзменениеРазрешено(ОписаниеДанных) Экспорт + + УправлениеДоступомСлужебный.ДоступРазрешен(ОписаниеДанных, Истина, Истина); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры для включения и исключения пользователя в профиле групп доступа. @@ -963,19 +1037,25 @@ // Таблица - Строка - полное имя объекта метаданных, например, "Документ.РасходнаяНакладная". // ТипЗначений - Тип - тип значений доступа, разрешенные значения которых нужно вернуть. // - Массив - массив указанных выше типов. +// Пользователь - Неопределено - вернуть разрешенные значения для авторизованного пользователя. +// - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - вернуть +// разрешенные значения для указанного пользователя. +// ВернутьВсе - Булево - если установить Истина, тогда будут возвращены все значение даже тогда, +// когда их более 100. // // Возвращаемое значение: -// Неопределено - если количество разрешенных значений превышает 100. +// Неопределено - либо все значения разрешены для типов, указанных в параметре ТипЗначений, +// либо (когда ВернутьВсе = Ложь) количество разрешенных значений превышает 100. // Массив - ссылки разрешенных значений указанных типов. // -Функция РазрешенныеЗначенияДляДинамическогоСписка(Таблица, ТипЗначений) Экспорт +Функция РазрешенныеЗначенияДляДинамическогоСписка(Таблица, ТипЗначений, Пользователь = Неопределено, ВернутьВсе = Ложь) Экспорт Если Не ОграничиватьДоступНаУровнеЗаписей() Или Пользователи.ЭтоПолноправныйПользователь( , , Ложь) Тогда Возврат Неопределено; КонецЕсли; - Возврат УправлениеДоступомСлужебный.РазрешенныеЗначенияДляДинамическогоСписка(Таблица, ТипЗначений); + Возврат УправлениеДоступомСлужебный.РазрешенныеЗначенияДляДинамическогоСписка(Таблица, ТипЗначений, , Пользователь, ВернутьВсе); КонецФункции @@ -995,7 +1075,7 @@ Функция ПраваПоИдентификаторам(Идентификаторы = Неопределено) Экспорт ОбъектыМетаданныхИдентификаторов = - Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам(Идентификаторы); + ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(Идентификаторы); ПраваПоИдентификаторам = Новый Соответствие; Для Каждого ОбъектМетаданныхИдентификатора Из ОбъектыМетаданныхИдентификаторов Цикл @@ -1206,8 +1286,8 @@ | ЗависимостиПравДоступа.ПодчиненнаяТаблица = &ПодчиненнаяТаблица | И ЗависимостиПравДоступа.ТипВедущейТаблицы = &ТипВедущейТаблицы"; - Запрос.УстановитьПараметр("ПодчиненнаяТаблица", - СсылкаНаПодчиненныйОбъект.Метаданные().ПолноеИмя()); + Запрос.УстановитьПараметр("ПодчиненнаяТаблица", ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + СсылкаНаПодчиненныйОбъект.Метаданные().ПолноеИмя())); МассивТипов = Новый Массив; МассивТипов.Добавить(ТипЗнч(СсылкаНаОбъект)); @@ -1553,7 +1633,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("МассивЗаменяемыхРолей", МассивЗаменяемыхРолей); Запрос.УстановитьПараметр("ПустойИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Запрос.Текст = "ВЫБРАТЬ @@ -1752,7 +1832,7 @@ | НастройкиПрав КАК НастройкиПрав"; Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиПравОбъектов"); + Блокировка.Добавить("РегистрСведений.НастройкиПравОбъектов"); НачатьТранзакцию(); Попытка @@ -2617,7 +2697,7 @@ КонецПроцедуры -Функция ЗаполнитьПриемникПоНаборамРезультата(Приемник, НаборыРезультата) +Процедура ЗаполнитьПриемникПоНаборамРезультата(Приемник, НаборыРезультата) Приемник = ТаблицаНаборыЗначенийДоступа(); @@ -2634,7 +2714,7 @@ КонецЦикла; КонецЦикла; -КонецФункции +КонецПроцедуры // Для процедур ПриСозданииФормыЗначенияДоступа, ГруппыЗначенийДоступаРазрешающиеИзменениеЗначенийДоступа. Функция СвойстваГруппЗначенияДоступа(ТипЗначенияДоступа, ЗаголовокОшибки) diff --git a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl index e3559995a..79ce3abf5 100644 --- a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Заполняет виды доступа, используемые в ограничениях прав доступа. diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index 9dcab3a63..aa7a93d88 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -82,11 +90,19 @@ // Значения - Неопределено - не учитывать. // - Массив - массив значений типов, указанных в параметре ТипЗначений. // +// Пользователь - Неопределено - вернуть разрешенные значения для авторизованного пользователя. +// - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - вернуть +// разрешенные значения для указанного пользователя. +// +// ВернутьВсе - Булево - если установить Истина, тогда будут возвращены все значение даже тогда, +// когда их более 100. +// // Возвращаемое значение: -// Неопределено - если количество разрешенных значений превышает 100 (когда параметр Значения не определен). +// Неопределено - либо все значения разрешены для типов, указанных в параметре ТипЗначений, +// либо (когда ВернутьВсе = Ложь) количество разрешенных значений превышает 100. // Массив - ссылки разрешенных значений указанных типов. // -Функция РазрешенныеЗначенияДляДинамическогоСписка(Таблица, ТипЗначений, Значения = Неопределено) Экспорт +Функция РазрешенныеЗначенияДляДинамическогоСписка(Таблица, ТипЗначений, Значения = Неопределено, Пользователь = Неопределено, ВернутьВсе = Ложь) Экспорт Если ТипЗнч(ТипЗначений) <> Тип("Массив") Тогда ТипыЗначений = Новый Массив; @@ -146,9 +162,10 @@ | КОНЕЦ) | И ЗначенияБезГрупп.Ссылка В(&Значения)"; - Если ТипЗнч(Значения) = Тип("Массив") Тогда + Если ТипЗнч(Значения) = Тип("Массив") Или ВернутьВсе Тогда ТекстЗапросаЗначенийБезГрупп = СтрЗаменить(ТекстЗапросаЗначенийБезГрупп, "ПЕРВЫЕ 101", ""); - Иначе + КонецЕсли; + Если ТипЗнч(Значения) <> Тип("Массив") Тогда ТекстЗапросаЗначенийБезГрупп = СтрЗаменить(ТекстЗапросаЗначенийБезГрупп, "ЗначенияБезГрупп.Ссылка В(&Значения)", "Истина"); КонецЕсли; @@ -200,9 +217,10 @@ | КОНЕЦ) | И ЗначенияСГруппами.Ссылка В(&Значения)"; - Если ТипЗнч(Значения) = Тип("Массив") Тогда + Если ТипЗнч(Значения) = Тип("Массив") Или ВернутьВсе Тогда ТекстЗапросаЗначенийСГруппами = СтрЗаменить(ТекстЗапросаЗначенийСГруппами, "ПЕРВЫЕ 101", ""); - Иначе + КонецЕсли; + Если ТипЗнч(Значения) <> Тип("Массив") Тогда ТекстЗапросаЗначенийСГруппами = СтрЗаменить(ТекстЗапросаЗначенийСГруппами, "ЗначенияСГруппами.Ссылка В(&Значения)", "Истина"); КонецЕсли; @@ -222,15 +240,20 @@ |ГДЕ | ВсеЗначения.Ссылка В(&Значения)"; - Если ТипЗнч(Значения) = Тип("Массив") Тогда + Если ТипЗнч(Значения) = Тип("Массив") Или ВернутьВсе Тогда ТекстЗапросаВсеЗначения = СтрЗаменить(ТекстЗапросаВсеЗначения, "ПЕРВЫЕ 101", ""); - Иначе + КонецЕсли; + Если ТипЗнч(Значения) <> Тип("Массив") Тогда ТекстЗапросаВсеЗначения = СтрЗаменить(ТекстЗапросаВсеЗначения, "ВсеЗначения.Ссылка В(&Значения)", "Истина"); КонецЕсли; СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(); ТекстЗапроса = ""; - АвторизованныйПользователь = Пользователи.АвторизованныйПользователь(); + Если Пользователь <> Неопределено Тогда + АвторизованныйПользователь = Пользователь; + Иначе + АвторизованныйПользователь = Пользователи.АвторизованныйПользователь(); + КонецЕсли; ДобавитьТекущегоПользователя = Ложь; ЕстьИспользуемыеВидыДоступа = Ложь; @@ -282,6 +305,7 @@ Выгрузка = Запрос.Выполнить().Выгрузить(); Если ТипЗнч(Значения) <> Тип("Массив") + И Не ВернутьВсе И Выгрузка.Количество() > 100 Тогда Возврат Неопределено; @@ -456,8 +480,6 @@ Функция ОшибкиОграниченийДоступа() Экспорт Ошибки = Новый Массив; - ОбъектОшибки = "ОбщийМодуль.УправлениеДоступомПереопределяемый"; - ОбщийКонтекст = ОбщийКонтекстРасчетаПараметровОграничения(Истина, Ложь); Попытка @@ -470,6 +492,7 @@ |общего модуля УправлениеДоступомПереопределяемый по причине: | |%1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ОбъектОшибки = "ОбщийМодуль.УправлениеДоступомПереопределяемый"; Ошибки.Добавить(Новый Структура("ПолноеИмя, ТекстОшибки", ОбъектОшибки, ТекстОшибки)); Возврат Ошибки; КонецПопытки; @@ -576,8 +599,6 @@ ЗначенияДоступа.Добавить(ИмяТипаСсылкиXML(ОписаниеВозможныхПрав.Ключ, ТипыТаблицПоИменам)); КонецЦикла; - ИдентификаторТранзакции = Новый УникальныйИдентификатор; - Если ДействующиеПараметры = Неопределено Тогда ОбщийКонтекст = ОбщийКонтекстРасчетаПараметровОграничения(Истина); НовыеХранимыеПараметры = ХранимыеПараметрыОграниченияДоступа(ОбщийКонтекст); @@ -980,7 +1001,7 @@ // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт - Обработчики.Вставить("ОграничениеДоступаНаУровнеЗаписейВключено", + Обработчики.Вставить("ОграничениеДоступаНаУровнеЗаписейИспользуется", "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); Обработчики.Вставить("ВидыДоступа*", @@ -1001,6 +1022,9 @@ Обработчики.Вставить("ИдентификаторыТаблицСОтдельнымиНастройкамиПрав", "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ТаблицыРасширенийСОграничениемДоступа", + "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + #Область УниверсальноеОграничение Обработчики.Вставить("ОграничениеДоступаНаУровнеЗаписейУниверсально", @@ -1289,7 +1313,7 @@ КонецЕсли; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.0.1.330"; + Обработчик.Версия = "3.0.2.139"; Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.Комментарий = НСтр("ru = 'Обновление данных по изменениям программы.'"); @@ -1299,6 +1323,11 @@ Обработчик.ЧитаемыеОбъекты = "РегистрСведений.ГруппыЗначенийДоступа"; Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ГруппыЗначенийДоступа"; + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ЗаполнитьНаименованиеПредопределенныхЭлементов"; + КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПослеОбновленияИнформационнойБазы. @@ -1696,7 +1725,7 @@ ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Автоматическое изменение группы доступа Администраторы'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.Пользователи, Администратор, @@ -2012,7 +2041,7 @@ Или УниверсальноеОграничение Или ИнформационнаяБазаЗаблокированаДляОбновления Тогда - ПараметрыСеанса.ОграничениеДоступаНаУровнеЗаписейВключено = + ПараметрыСеанса.ОграничениеДоступаНаУровнеЗаписейИспользуется = ?(ИнформационнаяБазаЗаблокированаДляОбновления Или УниверсальноеОграничение, "", Ложь); @@ -2024,7 +2053,7 @@ ПараметрыСеанса.ТипыЗначенийДоступаСГруппами = Новый ФиксированныйМассив(Новый Массив); - ПараметрыСеанса.ТаблицыСОтдельнымиНастройкамиПрав = ""; + ПараметрыСеанса.ТаблицыСОтдельнымиНастройкамиПрав = ""; ПараметрыСеанса.ИдентификаторыТаблицСОтдельнымиНастройкамиПрав = Новый ФиксированныйМассив(Новый Массив); @@ -2032,7 +2061,9 @@ ПараметрыСеанса.ТипыВладельцевНастроекПрав = Новый ФиксированныйМассив(Новый Массив); - УстановленныеПараметры.Добавить("ОграничениеДоступаНаУровнеЗаписейВключено"); + ПараметрыСеанса.ТаблицыРасширенийСОграничениемДоступа = ""; + + УстановленныеПараметры.Добавить("ОграничениеДоступаНаУровнеЗаписейИспользуется"); УстановленныеПараметры.Добавить("ВсеВидыДоступаКромеСпециальных"); УстановленныеПараметры.Добавить("ВидыДоступаСОтключеннымИспользованием"); УстановленныеПараметры.Добавить("ВидыДоступаБезГруппДляЗначенияДоступа"); @@ -2041,6 +2072,7 @@ УстановленныеПараметры.Добавить("ТаблицыСОтдельнымиНастройкамиПрав"); УстановленныеПараметры.Добавить("ИдентификаторыТаблицСОтдельнымиНастройкамиПрав"); УстановленныеПараметры.Добавить("ТипыВладельцевНастроекПрав"); + УстановленныеПараметры.Добавить("ТаблицыРасширенийСОграничениемДоступа"); КонецЕсли; Если Не ОграничиватьДоступНаУровнеЗаписей @@ -2055,7 +2087,7 @@ КонецЕсли; #КонецОбласти - ПараметрыСеанса.ОграничениеДоступаНаУровнеЗаписейВключено = Истина; + ПараметрыСеанса.ОграничениеДоступаНаУровнеЗаписейИспользуется = Истина; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); @@ -2161,9 +2193,16 @@ ПараметрыСеанса.ТипыВладельцевНастроекПрав = ВозможныеПрава.ТипыВладельцев; + ПолныеИмена = Справочники.ИдентификаторыОбъектовРасширений.ПолныеИменаТаблицСДанными(); + ТаблицыРасширений = СтрСоединить(ПолныеИмена, ";" + Символы.ПС + "|"); + ТаблицыРасширений = ?(ТаблицыРасширений = "", "", "|" + ТаблицыРасширений + ";" + Символы.ПС); + + ПараметрыСеанса.ТаблицыРасширенийСОграничениемДоступа = ТаблицыРасширений; + УстановленныеПараметры.Добавить("ТаблицыСОтдельнымиНастройкамиПрав"); УстановленныеПараметры.Добавить("ИдентификаторыТаблицСОтдельнымиНастройкамиПрав"); УстановленныеПараметры.Добавить("ТипыВладельцевНастроекПрав"); + УстановленныеПараметры.Добавить("ТаблицыРасширенийСОграничениемДоступа"); КонецПроцедуры @@ -2846,7 +2885,7 @@ Если КоличествоДанных < 10000 Тогда ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -2857,7 +2896,7 @@ Иначе ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -3116,7 +3155,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -4290,7 +4329,7 @@ | Справочник.ПрофилиГруппДоступа.Назначение КАК ПрофилиГруппДоступаНазначение)"; Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); @@ -4433,6 +4472,19 @@ КонецПроцедуры +// Заполняет наименования предопределенного профиля Администратор и группы Администраторы. +Процедура ЗаполнитьНаименованиеПредопределенныхЭлементов() Экспорт + + ПрофильАдминистратор = Справочники.ПрофилиГруппДоступа.Администратор.ПолучитьОбъект(); + ПрофильАдминистратор.Наименование = НСтр("ru='Администратор'"); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПрофильАдминистратор); + + ГруппаАдминистраторы = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); + ГруппаАдминистраторы.Наименование = НСтр("ru='Администраторы'"); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаАдминистраторы); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -5255,7 +5307,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПустойИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Если МассивПользователей = Неопределено Тогда Запрос.Текст = @@ -5422,8 +5474,7 @@ Итог.РолиПользователей.Индексы.Добавить("Пользователь"); ИдентификаторыРолей = Итог.РолиПользователей.ВыгрузитьКолонку("РольСсылка"); - МетаданныеРолей = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( - ИдентификаторыРолей, Истина); + МетаданныеРолей = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыРолей, Ложь); Для Каждого Строка Из Итог.РолиПользователей Цикл МетаданныеРоли = МетаданныеРолей.Получить(Строка.РольСсылка); @@ -5444,7 +5495,7 @@ Для Каждого Профиль Из Профили Цикл ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Роль не доступна пользователю'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.ПрофилиГруппДоступа, Профиль, @@ -5469,7 +5520,7 @@ Для Каждого Профиль Из Профили Цикл ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Роль не найдена в метаданных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.ПрофилиГруппДоступа, Профиль, @@ -5528,7 +5579,7 @@ Запрос.УстановитьПараметр("Роль", Роль); Запрос.УстановитьПараметр("ПустойИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -6762,18 +6813,24 @@ Процедура ПроверитьТипыПодпискиОбновитьГруппыЗначенийДоступа(ЗначенияДоступаСГруппами) ТекущиеТипыПодписки = УправлениеДоступомСлужебныйПовтИсп.ТипыПоляТаблицы( - "ОпределяемыйТип.ЗначениеДоступаСГруппамиЗначенийДоступаОбъект"); + "ОпределяемыйТип.ЗначениеДоступаОбъект"); ТребуемыеТипыПодписки = Новый Соответствие; Для Каждого КлючИЗначение Из ЗначенияДоступаСГруппами.ПоТипамДляОбновления Цикл - Если ЗначенияДоступаСГруппами.ПоТипамСсылокДляОбновления.Получить(КлючИЗначение.Ключ) <> Неопределено - Или ЗначенияДоступаСГруппами.ПоТипам.Получить(КлючИЗначение.Ключ) = Неопределено Тогда + Если ЗначенияДоступаСГруппами.ПоТипамСсылокДляОбновления.Получить(КлючИЗначение.Ключ) <> Неопределено Тогда Продолжить; КонецЕсли; ТребуемыеТипыПодписки.Вставить(КлючИЗначение.Ключ, Истина); КонецЦикла; НедостающиеТипы = Новый Массив; + ЛишниеТипы = Новый Массив; + + Для Каждого КлючИЗначение Из ТекущиеТипыПодписки Цикл + Если ТребуемыеТипыПодписки.Получить(КлючИЗначение.Ключ) = Неопределено Тогда + ЛишниеТипы.Добавить(КлючИЗначение.Ключ); + КонецЕсли; + КонецЦикла; Для Каждого КлючИЗначение Из ТребуемыеТипыПодписки Цикл Если ТекущиеТипыПодписки.Получить(КлючИЗначение.Ключ) = Неопределено Тогда @@ -6781,16 +6838,36 @@ КонецЕсли; КонецЦикла; - Если НедостающиеТипы.Количество() = 0 Тогда + Если НедостающиеТипы.Количество() = 0 И ЛишниеТипы.Количество() = 0 Тогда Возврат; КонецЕсли; - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'По данным, полученным из процедуры ПриЗаполненииВидовДоступа - |общего модуля УправлениеДоступомПереопределяемый, в определяемом типе - |""Значение доступа с группами значений доступа объект"" не указаны требуемые типы: - |- %1'"), - СтрСоединить(НедостающиеТипы, "," + Символы.ПС + "- ")); + Если НедостающиеТипы.Количество() = 0 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'По данным, полученным из процедуры ПриЗаполненииВидовДоступа + |общего модуля УправлениеДоступомПереопределяемый, + |в определяемом типе ""Значение доступа объект"" указаны лишние типы: + |- %1'"), + СтрСоединить(ЛишниеТипы, "," + Символы.ПС + "- ")); + ИначеЕсли ЛишниеТипы.Количество() = 0 Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'По данным, полученным из процедуры ПриЗаполненииВидовДоступа + |общего модуля УправлениеДоступомПереопределяемый, + |в определяемом типе ""Значение доступа объект"" не указаны требуемые типы: + |- %1'"), + СтрСоединить(НедостающиеТипы, "," + Символы.ПС + "- ")); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'По данным, полученным из процедуры ПриЗаполненииВидовДоступа + |общего модуля УправлениеДоступомПереопределяемый, + |в определяемом типе ""Значение доступа объект"" + |а) указаны лишние типы: + |- %1 + |б) не указаны требуемые типы: + |- %2'"), + СтрСоединить(ЛишниеТипы, "," + Символы.ПС + "- "), + СтрСоединить(НедостающиеТипы, "," + Символы.ПС + "- ")); + КонецЕсли; ВызватьИсключение ТекстОшибки; @@ -7092,7 +7169,7 @@ //////////////////////////////////////////////////////////////////////////////// // Универсальное ограничение доступа. -Функция ДоступРазрешен(ОписаниеДанных, Изменение) Экспорт +Функция ДоступРазрешен(ОписаниеДанных, Изменение, ВызыватьИсключение = Ложь) Экспорт Если Пользователи.ЭтоПолноправныйПользователь() Тогда Возврат Истина; @@ -7112,15 +7189,21 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; - Если Не ПравоДоступа(?(Изменение, "Изменение", "Чтение"), ОбъектМетаданных) Тогда + ИмяПраваДоступа = ?(Изменение, "Изменение", "Чтение"); + + Если ВызыватьИсключение Тогда + ВыполнитьПроверкуПравДоступа(ИмяПраваДоступа, ОбъектМетаданных); + + ИначеЕсли Не ПравоДоступа(ИмяПраваДоступа, ОбъектМетаданных) Тогда Возврат Ложь; КонецЕсли; + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + Если Не ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда - Возврат Истина; + Возврат ЧтениеДоступно(ПолноеИмя, ОбъектМетаданных, ОписаниеДанных, ВызыватьИсключение); КонецЕсли; - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); ИдентификаторТранзакции = Новый УникальныйИдентификатор; ПараметрыОграничения = ПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции); @@ -7134,27 +7217,86 @@ КонецЕсли; Если ПараметрыОграничения.ДоступЗапрещен Тогда - Возврат Ложь; + ДоступРазрешен = Ложь; + Иначе + Запрос = Новый Запрос; + УстановитьРазрешенныеНаборыВПараметрыЗапроса(Запрос); + + Запрос.Текст = ?(Изменение, ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение, + ПараметрыОграничения.ТекстЗапросаПроверкиПраваЧтение); + + Если ПараметрыОграничения.ЭтоСсылочныйТип Тогда + СсылкаНаОбъект = ?(ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ОписаниеДанных)), + ОписаниеДанных, ОписаниеДанных.Ссылка); + + Запрос.УстановитьПараметр("Объект", СсылкаНаОбъект); + + Если ПараметрыОграничения.ПолеВладельца <> Неопределено Тогда + Запрос.УстановитьПараметр("ИдентификаторТаблицыНастроекПрав", + ПараметрыОграничения.ИдентификаторТаблицыНастроекПрав); + КонецЕсли; + + ДоступРазрешен = Не Запрос.Выполнить().Пустой(); + ДанныеДляПредставления = СсылкаНаОбъект; + Иначе + НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).СоздатьНаборЗаписей(); + Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл + ЭлементОтбора.Значение = ОписаниеДанных[ЭлементОтбора.Имя]; + ЭлементОтбора.Использование = Истина; + КонецЦикла; + ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(НаборЗаписей, Запрос); + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | &ОтборПоИзмерениям"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапроса; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоИзмерениям", ОтборПоИзмерениям); + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + ДоступРазрешен = РезультатыЗапроса[0].Пустой() И Не РезультатыЗапроса[1].Пустой(); + ДанныеДляПредставления = НаборЗаписей; + КонецЕсли; КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Если ДоступРазрешен Или Не ВызыватьИсключение Тогда + Возврат ДоступРазрешен; + КонецЕсли; + + Если Изменение Тогда + ПравоЧтения = ДоступРазрешен(ОписаниеДанных, Ложь); + Иначе + ПравоЧтения = Ложь; + КонецЕсли; + + СообщитьОбОшибкеДоступа(ДанныеДляПредставления, Истина, ПравоЧтения, Ложь, Ложь); + +КонецФункции + +// Для функции ДоступРазрешен. +Функция ЧтениеДоступно(ПолноеИмя, ОбъектМетаданных, ОписаниеДанных, ВызыватьИсключение) + Запрос = Новый Запрос; - УстановитьРазрешенныеНаборыВПараметрыЗапроса(Запрос); - Запрос.Текст = ?(Изменение, ПараметрыОграничения.ТекстЗапросаПроверкиПравЧтениеИзменение, - ПараметрыОграничения.ТекстЗапросаПроверкиПраваЧтение); - - Если ПараметрыОграничения.ЭтоСсылочныйТип Тогда + Если ЭтоСсылочныйТипТаблицы(ПолноеИмя) Тогда СсылкаНаОбъект = ?(ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ОписаниеДанных)), ОписаниеДанных, ОписаниеДанных.Ссылка); - Запрос.УстановитьПараметр("Объект", СсылкаНаОбъект); - - Если ПараметрыОграничения.ПолеВладельца <> Неопределено Тогда - Запрос.УстановитьПараметр("ИдентификаторТаблицыНастроекПрав", - ПараметрыОграничения.ИдентификаторТаблицыНастроекПрав); - КонецЕсли; - - ДоступРазрешен = Не Запрос.Выполнить().Пустой(); + Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект); + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | ТекущаяТаблица.Ссылка = &Ссылка"; + ДанныеДляПредставления = СсылкаНаОбъект; Иначе НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).СоздатьНаборЗаписей(); Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл @@ -7169,18 +7311,21 @@ | &ТекущаяТаблица КАК ТекущаяТаблица |ГДЕ | &ОтборПоИзмерениям"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); - Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапроса; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоИзмерениям", ОтборПоИзмерениям); - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - ДоступРазрешен = РезультатыЗапроса[0].Пустой() И Не РезультатыЗапроса[1].Пустой(); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоИзмерениям", ОтборПоИзмерениям); + ДанныеДляПредставления = НаборЗаписей; КонецЕсли; - УстановитьПривилегированныйРежим(Ложь); - УстановитьОтключениеБезопасногоРежима(Ложь); + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ТекущаяТаблица", ПолноеИмя); - Возврат ДоступРазрешен; + Если Не Запрос.Выполнить().Пустой() Тогда + Возврат Истина; + КонецЕсли; + + Если Не ВызыватьИсключение Тогда + Возврат Ложь; + КонецЕсли; + + СообщитьОбОшибкеДоступа(ДанныеДляПредставления, Ложь, Ложь, Ложь, Ложь); КонецФункции @@ -8433,25 +8578,6 @@ КонецПроцедуры -// Для процедур ЗапланироватьОбновлениеДоступаПриИзмененииРазрешенныхЗначений, -// ЗапланироватьОбновлениеДоступа и вызова из модуля формы ОбновлениеДоступаРучноеУправление. -// -Процедура ОчиститьКэшЗначенийГруппДоступаДляРасчетаПрав() Экспорт - - УстановитьОтключениеБезопасногоРежима(Истина); - УстановитьПривилегированныйРежим(Истина); - - ИмяПараметраВерсии = "СтандартныеПодсистемы.УправлениеДоступом.ЗначенияГруппДоступаВерсия"; - СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметраВерсии, Новый УникальныйИдентификатор, Истина); - - ИмяПараметра = "СтандартныеПодсистемы.УправлениеДоступом.ЗначенияГруппДоступа"; - СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, Неопределено, Истина); - - УстановитьПривилегированныйРежим(Ложь); - УстановитьОтключениеБезопасногоРежима(Ложь); - -КонецПроцедуры - // Для процедур ЗапланироватьОбновлениеДоступаПриИзмененииУчастниковГруппыДоступа, // ЗапланироватьОбновлениеДоступаПослеОбновленияСоставовГруппПользователей, // ЗапланироватьОбновлениеДоступаПриИзмененииТаблицГруппДоступа, @@ -8480,8 +8606,7 @@ ИдентификаторыСписковПоПолнымИменам = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ОписаниеСписков); Иначе ПолныеИмена = ОписаниеСписков.ВыгрузитьКолонку("Таблица"); - ОбъектыМетаданныхСписков = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( - ПолныеИмена, Истина); + ОбъектыМетаданныхСписков = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(ПолныеИмена, Ложь); КонецЕсли; Для Каждого ОписаниеСписка Из ОписаниеСписков Цикл @@ -8829,7 +8954,7 @@ ПоследнееОбновлениеДоступа.ТекстОшибкиЗавершения = ""; ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания = - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); Попытка Если КонфигурацияБазыДанныхИзмененаДинамически() Тогда @@ -8917,7 +9042,7 @@ Свойства.Вставить("НачалоСеанса", '00010101'); Свойства.Вставить("ИмяКомпьютера", ""); Свойства.Вставить("ИдентификаторФоновогоЗадания", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Если ТипЗнч(ТекущееЗначение) <> Тип("ХранилищеЗначения") Тогда Возврат Свойства; @@ -9375,7 +9500,7 @@ Если ОбновлениеВЭтомСеансе И ИдентификаторыСписков.Количество() > 0 Тогда ОбъектыМетаданныхПоИдентификаторам = - Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыСписков, Истина); + ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыСписков, Ложь); Для Каждого КлючИЗначение Из ОбъектыМетаданныхПоИдентификаторам Цикл Кэш.ОбъектыМетаданныхПоИдентификаторам.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; @@ -9490,9 +9615,8 @@ // Для процедуры ОтключитьРегламентноеЗаданиеЕслиНетНовыхЗаданий. Процедура УстановитьНедоступныеСписки(РезультатЗапроса, НедоступныеСписки) - ОбъектыМетаданныхПоИдентификаторам = - Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( - РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Список"), Истина); + ОбъектыМетаданныхПоИдентификаторам = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам( + РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Список"), Ложь); Для Каждого КлючИЗначение Из ОбъектыМетаданныхПоИдентификаторам Цикл Если КлючИЗначение.Значение = Неопределено Тогда @@ -9974,7 +10098,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Обновление доступа на уровне записей'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); КонецПроцедуры @@ -10002,8 +10126,8 @@ ОбъектМетаданных = ОбщиеПараметрыОбновления.Кэш.ОбъектыМетаданныхПоИдентификаторам.Получить( ОбщиеПараметрыОбновления.ИдентификаторСписка); Иначе - ОбъектМетаданных = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектМетаданныхПоИдентификатору( - ОбщиеПараметрыОбновления.ИдентификаторСписка, Истина); + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору( + ОбщиеПараметрыОбновления.ИдентификаторСписка, Ложь); КонецЕсли; Если ОбъектМетаданных = Неопределено Тогда @@ -10101,14 +10225,14 @@ ПланОбновленияКлючей.Отбор.Список.Установить(ПараметрыОбновления.ИдентификаторСписка); ПланОбновленияКлючей.Отбор.ДляВнешнихПользователей.Установить(ПараметрыОбновления.ДляВнешнихПользователей); ПланОбновленияКлючей.Отбор.КлючУникальности.Установить( - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаКДанным"); ЭлементБлокировки.УстановитьЗначение("Список", ПараметрыОбновления.ИдентификаторСписка); ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); ЭлементБлокировки.УстановитьЗначение("КлючУникальности", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Для Каждого Строка Из Выгрузка Цикл Если Не ЗначениеЗаполнено(Строка.КлючУникальности) Тогда @@ -10223,13 +10347,13 @@ ПланОбновленияКлючей.Отбор.Список.Установить(ОбщиеПараметрыОбновления.ИдентификаторСписка); ПланОбновленияКлючей.Отбор.ДляВнешнихПользователей.Установить(ОбщиеПараметрыОбновления.ДляВнешнихПользователей); ПланОбновленияКлючей.Отбор.КлючУникальности.Установить( - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаКДанным"); ЭлементБлокировки.УстановитьЗначение("Список", ОбщиеПараметрыОбновления.ИдентификаторСписка); ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ОбщиеПараметрыОбновления.ДляВнешнихПользователей); - ЭлементБлокировки.УстановитьЗначение("КлючУникальности", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ЭлементБлокировки.УстановитьЗначение("КлючУникальности", ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); НачатьТранзакцию(); Попытка @@ -10728,7 +10852,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Запрос.Текст = "ВЫБРАТЬ @@ -10761,11 +10885,11 @@ Если ПараметрыОбновления.ДляВнешнихПользователей Тогда ТипЭлементовНабора = Справочники.ВнешниеПользователи.ПустаяСсылка(); - ПредставлениеЭлемента = НСтр("ru = 'Внешний пользователь'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ПредставлениеЭлемента = НСтр("ru = 'Внешний пользователь'", ОбщегоНазначения.КодОсновногоЯзыка()); Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); Иначе ТипЭлементовНабора = Справочники.Пользователи.ПустаяСсылка(); - ПредставлениеЭлемента = НСтр("ru = 'Пользователь'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ПредставлениеЭлемента = НСтр("ru = 'Пользователь'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); @@ -10966,7 +11090,7 @@ | ГруппыДоступаПользователей.Пользователь"; ОбновитьНаборыГруппВСправочнике(ПараметрыОбновления, ТекстЗапросаГрупп, ТекстЗапросаНовыхНаборовГрупп, - "НаборГруппДоступа", "ГруппыДоступа", НСтр("ru = 'Группы доступа'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + "НаборГруппДоступа", "ГруппыДоступа", НСтр("ru = 'Группы доступа'", ОбщегоНазначения.КодОсновногоЯзыка())); КонецПроцедуры @@ -11012,11 +11136,11 @@ Если ПараметрыОбновления.ДляВнешнихПользователей Тогда ИмяСправочникаГрупп = "ГруппыВнешнихПользователей"; ПредставлениеЭлемента = НСтр("ru = 'Группы внешних пользователей'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); Иначе ИмяСправочникаГрупп = "ГруппыПользователей"; ПредставлениеЭлемента = НСтр("ru = 'Группы пользователей'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; ОбновитьНаборыГруппВСправочнике(ПараметрыОбновления, ТекстЗапросаГрупп, ТекстЗапросаНовыхНаборовГрупп, @@ -11039,7 +11163,7 @@ Запрос.УстановитьПараметр("НомераГрупп", НомераГрупп); Запрос.УстановитьПараметр("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Запрос.Текст = "ВЫБРАТЬ @@ -11317,7 +11441,6 @@ Функция ГруппыНабораПоНомерам(НомераГрупп, ИменаЧастейНомера, ЧастиНомера) ГруппыНабора = Новый Массив; - ТекущаяЧастьНомера = 1; ИндексГруппы = 0; Делитель = 4294967296; // 2^32. @@ -12744,8 +12867,6 @@ Возврат; КонецЕсли; - МаксимальнаяДата = МаксимальнаяДата(); - Если Выгрузка.Количество() = 1 И Не ЗначениеЗаполнено(Выгрузка[0].КлючУникальности) Тогда @@ -12765,14 +12886,14 @@ ПланОбновленияКлючей.Отбор.Список.Установить(ПараметрыОбновления.ИдентификаторСписка); ПланОбновленияКлючей.Отбор.ДляВнешнихПользователей.Установить(ПараметрыОбновления.ДляВнешнихПользователей); ПланОбновленияКлючей.Отбор.КлючУникальности.Установить( - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаПользователей"); ЭлементБлокировки.УстановитьЗначение("Список", ПараметрыОбновления.ИдентификаторСписка); ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ПараметрыОбновления.ДляВнешнихПользователей); ЭлементБлокировки.УстановитьЗначение("КлючУникальности", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Для Каждого Строка Из Выгрузка Цикл Если Не ЗначениеЗаполнено(Строка.КлючУникальности) Тогда @@ -12858,13 +12979,13 @@ ПланОбновленияКлючей.Отбор.Список.Установить(ОбщиеПараметрыОбновления.ИдентификаторСписка); ПланОбновленияКлючей.Отбор.ДляВнешнихПользователей.Установить(ОбщиеПараметрыОбновления.ДляВнешнихПользователей); ПланОбновленияКлючей.Отбор.КлючУникальности.Установить( - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбновлениеКлючейДоступаПользователей"); ЭлементБлокировки.УстановитьЗначение("Список", ОбщиеПараметрыОбновления.ИдентификаторСписка); ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ОбщиеПараметрыОбновления.ДляВнешнихПользователей); - ЭлементБлокировки.УстановитьЗначение("КлючУникальности", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ЭлементБлокировки.УстановитьЗначение("КлючУникальности", ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); НачатьТранзакцию(); Попытка @@ -13018,7 +13139,7 @@ Запрос.УстановитьПараметр("ИдентификаторТаблицыНастроекПрав", ПараметрыОбновления.ИдентификаторТаблицыНастроекПрав); Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); РезультатыЗапроса = Запрос.ВыполнитьПакет(); Если РезультатыЗапроса[1].Пустой() Тогда @@ -13371,7 +13492,7 @@ Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапросаУчастников; Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); ДополнительныеГруппыДоступа = Новый Массив; ДополнительныеГруппыПользователей = Новый Массив; @@ -13570,6 +13691,25 @@ КонецПроцедуры +// Для процедур ЗапланироватьОбновлениеДоступаПриИзмененииРазрешенныхЗначений, +// ЗапланироватьОбновлениеДоступа и вызова из модуля формы ОбновлениеДоступаРучноеУправление. +// +Процедура ОчиститьКэшЗначенийГруппДоступаДляРасчетаПрав() Экспорт + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + ИмяПараметраВерсии = "СтандартныеПодсистемы.УправлениеДоступом.ЗначенияГруппДоступаВерсия"; + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметраВерсии, Новый УникальныйИдентификатор, Истина); + + ИмяПараметра = "СтандартныеПодсистемы.УправлениеДоступом.ЗначенияГруппДоступа"; + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, Неопределено, Истина); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + +КонецПроцедуры + // Для процедуры ОбновитьПраваПорцииКлючейДоступаСписка. Процедура ЗаполнитьПраваНаВедущиеКлючиДоступаИВедущиеСписки(РезультатыЗапроса, НомерТаблицы, ПараметрыОбновления) @@ -13594,15 +13734,14 @@ НенайденныеИдентификаторыСписков.Добавить(ИдентификаторСписка); КонецЕсли; КонецЦикла; - Результат = Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( - НенайденныеИдентификаторыСписков, Истина); + Результат = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам( + НенайденныеИдентификаторыСписков, Ложь); Для Каждого КлючИЗначение Из Результат Цикл ОбъектыМетаданныхПоИдентификаторам.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; Иначе - ОбъектыМетаданныхПоИдентификаторам = - Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( - ИдентификаторыСписков, Истина); + ОбъектыМетаданныхПоИдентификаторам = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам( + ИдентификаторыСписков, Ложь); КонецЕсли; Для Каждого Строка Из Дерево.Строки Цикл ОбъектМетаданных = ОбъектыМетаданныхПоИдентификаторам.Получить(Строка.Список); @@ -15253,7 +15392,7 @@ КонецЕсли; Если ДляВнешнихПользователей = Неопределено Тогда - ДляВнешнихПользователей = ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя(); + ДляВнешнихПользователей = Пользователи.ЭтоСеансВнешнегоПользователя(); КонецЕсли; Если ДляВнешнихПользователей Тогда @@ -16231,7 +16370,7 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПараметрыОграниченияДоступа.ДляЗаписиОбъектовИПроверкиПрав", "Неопределено"); - Запрос.Текст = СтрЗаменить(Запрос.Текст, ?(ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя(), + Запрос.Текст = СтрЗаменить(Запрос.Текст, ?(Пользователи.ЭтоСеансВнешнегоПользователя(), "ПараметрыОграниченияДоступа.ДляШаблоновВСеансахПользователей", "ПараметрыОграниченияДоступа.ДляШаблоновВСеансахВнешнихПользователей"), "Неопределено"); КонецЕсли; @@ -16405,7 +16544,13 @@ // для функции СтруктураХранимыхПараметровШаблонов. Функция ВерсииШаблоновОграниченияДоступа() - Возврат ",ДляОбъекта3,ДляРегистра3,"; + Возврат + ",ДляОбъекта4, + |,ДляРегистра4, + |,ПоЗначениям17, + |,ПоЗначениямРасширенный17, + |,ПоЗначениямИНаборамРасширенный17, + |,ПоНаборамЗначений17,"; КонецФункции @@ -16454,7 +16599,7 @@ ДляЗаписиОбъектовИПроверкиПрав = Неопределено; КонецЕсли; - ХранилищеДляШаблоновОграниченияДоступа = ?(ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя(), + ХранилищеДляШаблоновОграниченияДоступа = ?(Пользователи.ЭтоСеансВнешнегоПользователя(), ВерсияПараметров.ДляШаблоновВСеансахВнешнихПользователей, ВерсияПараметров.ДляШаблоновВСеансахПользователей); @@ -16497,17 +16642,8 @@ Возврат; КонецЕсли; - ВерсииШаблонов = СтрРазделить(ВерсииШаблоновОграниченияДоступа(), ",", Ложь); - УточненныеВерсииШаблонов = ""; - Для Каждого ВерсияШаблона Из ВерсииШаблонов Цикл - УточненныеВерсииШаблонов = "," + ВерсияШаблона; - Если СтрНайти(ПараметрыСеанса.ВерсииШаблоновОграниченияДоступа, "," + ВерсияШаблона + ",") = 0 Тогда - УточненныеВерсииШаблонов = УточненныеВерсииШаблонов + "ТребуетсяПерезапуститьСеанс"; - КонецЕсли; - КонецЦикла; - УточненныеВерсииШаблонов = УточненныеВерсииШаблонов + ","; - - ПараметрыСеанса.ВерсииШаблоновОграниченияДоступа = УточненныеВерсииШаблонов; + ПараметрыСеанса.ВерсииШаблоновОграниченияДоступа = ВерсииШаблоновОграниченияДоступа() + " + |,ТребуетсяПерезапуститьСеанс,"; КонецПроцедуры @@ -19701,7 +19837,7 @@ СоставИмени.Удалить(2); ПолноеИмя = СтрСоединить(СоставИмени, "."); Иначе - ИмяТабличнойЧасти = ""; + ТабличнаяЧасть = ""; ПолноеИмя = Таблица; КонецЕсли; @@ -22646,8 +22782,6 @@ КонецЦикла; Результат.НомерСтроки = НомерСтроки; - - Строка = СтрПолучитьСтроку(Текст, НомерСтроки); Результат.ПозицияВСтроке = ПозицияВТексте - ПозицияНачалаСтроки + 1; Возврат Результат; @@ -23615,8 +23749,6 @@ // Для функции ЧастиОграничения. Процедура РазобратьЧастьОграничения(СвойстваЧасти, ВнутренниеДанные) - ПервоеСлово = СвойстваЧасти.Строки[0]; - Если СвойстваЧасти.Имя = "ПрисоединитьДополнительныеТаблицы" Тогда СвойстваЧасти.Вставить("Состав", Новый Массив); СвойстваЧасти.Вставить("ПсевдонимОсновнойТаблицы", ""); @@ -27225,7 +27357,7 @@ Запрос.УстановитьПараметр("МаксимальнаяДата", МаксимальнаяДата()); Запрос.УстановитьПараметр("ДатаПоследнегоОбновления", Контекст.ХранимыеДанные.ДатаПоследнегоОбновления); Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Контекст.ХранимыеДанные.ДатаПоследнегоОбновления = ДатаНачалаОбновленияПрогресса; @@ -27393,9 +27525,8 @@ КонецЦикла; СпискиОбновленияЭлементов = РезультатыЗапроса[1].Выгрузить(); - ОбъектыМетаданныхПоИдентификаторам = - Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( - СпискиОбновленияЭлементов.ВыгрузитьКолонку("Список"), Истина); + ОбъектыМетаданныхПоИдентификаторам = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам( + СпискиОбновленияЭлементов.ВыгрузитьКолонку("Список"), Ложь); Для Каждого ОписаниеОбновления Из СпискиОбновленияЭлементов Цикл Строка = СтрокиСписков.Получить(ОписаниеОбновления.Список); @@ -27425,9 +27556,8 @@ КонецЦикла; СпискиОбновленияКлючейДоступа = РезультатыЗапроса[2].Выгрузить(); - ОбъектыМетаданныхПоИдентификаторам = - Справочники.ИдентификаторыОбъектовМетаданных.ОбъектыМетаданныхПоИдентификаторам( - СпискиОбновленияКлючейДоступа.ВыгрузитьКолонку("Список"), Истина); + ОбъектыМетаданныхПоИдентификаторам = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам( + СпискиОбновленияКлючейДоступа.ВыгрузитьКолонку("Список"), Ложь); Для Каждого ОписаниеОбновления Из СпискиОбновленияКлючейДоступа Цикл ОбъектМетаданных = ОбъектыМетаданныхПоИдентификаторам.Получить(ОписаниеОбновления.Список); diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl index 7ee0652bb..2800d0e6e 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl index fbb5310cc..349de06bb 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl index afd00ef2d..41929ca77 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl index 9ee2b8ad3..409d06ca6 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Определяет назначение профиля. diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index 657d9e2ed..f8828afe3 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // См. УправлениеДоступомСлужебный.СвойстваВидовДоступа. @@ -147,7 +155,6 @@ ТекущаяСтрока) + ПояснениеОшибки; Иначе - СвойстваВидаДоступа = ВидыДоступаПоИменам.Получить(ВидДоступа); НовоеОписание = ВидыДоступаПрав.Добавить(); НовоеОписание.Таблица = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Таблица); НовоеОписание.Право = Право; diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl index 5adc94043..1640b3649 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Рассчитывает итоги всех регистров бухгалтерии и накопления, у которых они включены. diff --git a/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl b/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl new file mode 100644 index 000000000..75b3ce3b1 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl @@ -0,0 +1,209 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// УправлениеКолонтитулами: механизм настройки и вывода колонтитулов. +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Получает сохраненные ранее настройки колонтитулов. Если настройки отсутствуют, то +// возвращается пустая структура настроек. +// +// Возвращаемое значение: +// Структура - значения настроек колонтитулов. +Функция НастройкиКолонтитулов() Экспорт + Перем Настройки; + + Хранилище = Константы.НастройкиКолонтитулов.Получить(); + Если ТипЗнч(Хранилище) = Тип("ХранилищеЗначения") Тогда + Настройки = Хранилище.Получить(); + Если ТипЗнч(Настройки) = Тип("Структура") Тогда + Если Не Настройки.Свойство("ВерхнийКолонтитул") + Или Не Настройки.Свойство("НижнийКолонтитул") Тогда + Настройки = Неопределено; + Иначе + ДополнитьНастройкиКолонтитула(Настройки.ВерхнийКолонтитул); + ДополнитьНастройкиКолонтитула(Настройки.НижнийКолонтитул); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Настройки = Неопределено Тогда + Настройки = ПустыеНастройкиКолонтитулов(); + КонецЕсли; + + Возврат Настройки; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Сохраняет переданные в параметре настройки колонтитулов для дальнейшего использования. +// +// Параметры: +// Настройки - Структура - значения настроек колонтитулов, которые необходимо сохранить. +// +Процедура СохранитьНастройкиКолонтитулов(Настройки) Экспорт + Константы.НастройкиКолонтитулов.Установить(Новый ХранилищеЗначения(Настройки)); +КонецПроцедуры + +// Устанавливает значения параметров НазваниеОтчета и Пользователь в строке шаблона. +// +// Шаблон - Строка - настройка колонтитула с еще не установленными значениями параметров. +// НазваниеОтчета - Строка - значение параметра, которое будет подставлено в шаблон. +// Пользователь - СправочникСсылка.Пользователи - значение параметра, которое будет подставлено в шаблон. +// +// Возвращаемое значение: +// Строка - настройка колонтитула с установленными значениями шаблона. +// +Функция ЗначениеСвойстваПоШаблону(Шаблон, НазваниеОтчета, Пользователь) + Результат = СтрЗаменить(Шаблон, "[&НазваниеОтчета]", СокрЛП(НазваниеОтчета)); + Результат = СтрЗаменить(Результат, "[&Пользователь]" , СокрЛП(Пользователь)); + + Возврат Результат; +КонецФункции + +// Устанавливает колонтитулы в табличном документе. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент - документ, в котором надо установить колонтитулы. +// НазваниеОтчета - Строка - значение параметра, которое будет подставлено в шаблон. +// Пользователь - СправочникСсылка.Пользователи - значение параметра, которое будет подставлено в шаблон. +// НастройкиКолонтитулов - Структура - индивидуальные настройки колонтитулов. +// +Процедура УстановитьКолонтитулы(ТабличныйДокумент, НазваниеОтчета = "", Пользователь = Неопределено, НастройкиКолонтитулов = Неопределено) Экспорт + Если Пользователь = Неопределено Тогда + Пользователь = Пользователи.АвторизованныйПользователь(); + КонецЕсли; + + Если НастройкиКолонтитулов = Неопределено Тогда + НастройкиКолонтитулов = НастройкиКолонтитулов(); + КонецЕсли; + + СвойстваКолонтитула = СвойстваКолонтитула(НастройкиКолонтитулов.ВерхнийКолонтитул, НазваниеОтчета, Пользователь); + ЗаполнитьЗначенияСвойств(ТабличныйДокумент.ВерхнийКолонтитул, СвойстваКолонтитула); + + СвойстваКолонтитула = СвойстваКолонтитула(НастройкиКолонтитулов.НижнийКолонтитул, НазваниеОтчета, Пользователь); + ЗаполнитьЗначенияСвойств(ТабличныйДокумент.НижнийКолонтитул, СвойстваКолонтитула); +КонецПроцедуры + +// Возвращает значения свойств колонтитула. +// +// Параметры: +// НастройкиКолонтитула - Структура - см. ПустыеНастройкиКолонтитулов(). +// НазваниеОтчета - Строка - значение, которое будет подставлено в шаблон [&НазваниеОтчета]. +// Пользователь - СправочникСсылка.Пользователи - значение, которое будет подставлено в шаблон [&Пользователь]. +// +// Возвращаемое значение: +// Структура - значения настроек колонтитулов. +// +Функция СвойстваКолонтитула(НастройкиКолонтитула, НазваниеОтчета, Пользователь) + СвойстваКолонтитула = Новый Структура; + Если ЗначениеЗаполнено(НастройкиКолонтитула.ТекстСлева) + Или ЗначениеЗаполнено(НастройкиКолонтитула.ТекстВЦентре) + Или ЗначениеЗаполнено(НастройкиКолонтитула.ТекстСправа) Тогда + + СвойстваКолонтитула.Вставить("Выводить", Истина); + СвойстваКолонтитула.Вставить("НачальнаяСтраница", НастройкиКолонтитула.НачальнаяСтраница); + СвойстваКолонтитула.Вставить("ВертикальноеПоложение", НастройкиКолонтитула.ВертикальноеПоложение); + СвойстваКолонтитула.Вставить("ТекстСлева", ЗначениеСвойстваПоШаблону( + НастройкиКолонтитула.ТекстСлева, НазваниеОтчета, Пользователь)); + СвойстваКолонтитула.Вставить("ТекстВЦентре", ЗначениеСвойстваПоШаблону( + НастройкиКолонтитула.ТекстВЦентре, НазваниеОтчета, Пользователь)); + СвойстваКолонтитула.Вставить("ТекстСправа", ЗначениеСвойстваПоШаблону( + НастройкиКолонтитула.ТекстСправа, НазваниеОтчета, Пользователь)); + + Если НастройкиКолонтитула.Свойство("Шрифт") И НастройкиКолонтитула.Шрифт <> Неопределено Тогда + СвойстваКолонтитула.Вставить("Шрифт", НастройкиКолонтитула.Шрифт); + Иначе + СвойстваКолонтитула.Вставить("Шрифт", Новый Шрифт); + КонецЕсли; + Иначе + СвойстваКолонтитула.Вставить("Выводить", Ложь); + КонецЕсли; + + Возврат СвойстваКолонтитула; +КонецФункции + +// Конструктор настроек колонтитулов. +// +// Возвращаемое значение: +// Структура - настройки колонтитулов со значениями по умолчанию. +// +Функция ПустыеНастройкиКолонтитулов() + ВерхнийКолонтитул = Новый Структура; + ВерхнийКолонтитул.Вставить("ТекстСлева", ""); + ВерхнийКолонтитул.Вставить("ТекстВЦентре", ""); + ВерхнийКолонтитул.Вставить("ТекстСправа", ""); + ВерхнийКолонтитул.Вставить("Шрифт", Новый Шрифт); + ВерхнийКолонтитул.Вставить("ВертикальноеПоложение", ВертикальноеПоложение.Низ); + ВерхнийКолонтитул.Вставить("НачальнаяСтраница", 0); + + НижнийКолонтитул = Новый Структура; + НижнийКолонтитул.Вставить("ТекстСлева", ""); + НижнийКолонтитул.Вставить("ТекстВЦентре", ""); + НижнийКолонтитул.Вставить("ТекстСправа", ""); + НижнийКолонтитул.Вставить("Шрифт", Новый Шрифт); + НижнийКолонтитул.Вставить("ВертикальноеПоложение", ВертикальноеПоложение.Верх); + НижнийКолонтитул.Вставить("НачальнаяСтраница", 0); + + Возврат Новый Структура("ВерхнийКолонтитул, НижнийКолонтитул", ВерхнийКолонтитул, НижнийКолонтитул); +КонецФункции + +Процедура ДополнитьНастройкиКолонтитула(НастройкиКолонтитула) + Если Не НастройкиКолонтитула.Свойство("ТекстСлева") + Или ТипЗнч(НастройкиКолонтитула.ТекстСлева) <> Тип("Строка") Тогда + НастройкиКолонтитула.Вставить("ТекстСлева", ""); + КонецЕсли; + Если Не НастройкиКолонтитула.Свойство("ТекстВЦентре") + Или ТипЗнч(НастройкиКолонтитула.ТекстВЦентре) <> Тип("Строка") Тогда + НастройкиКолонтитула.Вставить("ТекстВЦентре", ""); + КонецЕсли; + Если Не НастройкиКолонтитула.Свойство("ТекстСправа") + Или ТипЗнч(НастройкиКолонтитула.ТекстСправа) <> Тип("Строка") Тогда + НастройкиКолонтитула.Вставить("ТекстСправа", ""); + КонецЕсли; + Если Не НастройкиКолонтитула.Свойство("Шрифт") + Или ТипЗнч(НастройкиКолонтитула.Шрифт) <> Тип("Шрифт") Тогда + НастройкиКолонтитула.Вставить("Шрифт", Новый Шрифт); + КонецЕсли; + Если Не НастройкиКолонтитула.Свойство("ВертикальноеПоложение") + Или ТипЗнч(НастройкиКолонтитула.ВертикальноеПоложение) <> Тип("ВертикальноеПоложение") Тогда + НастройкиКолонтитула.Вставить("ВертикальноеПоложение", ВертикальноеПоложение.Центр); + КонецЕсли; + Если Не НастройкиКолонтитула.Свойство("НачальнаяСтраница") + Или ТипЗнч(НастройкиКолонтитула.НачальнаяСтраница) <> Тип("Число") + Или НастройкиКолонтитула.НачальнаяСтраница < 0 Тогда + НастройкиКолонтитула.Вставить("НачальнаяСтраница", 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..ccb581769 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеКолонтитулами/УправлениеКолонтитулами.mdo @@ -0,0 +1,11 @@ + + + УправлениеКолонтитулами + + ru + Управление колонтитулами + + true + true + true + diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index cb266ff67..83cf4f101 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -24,6 +32,7 @@ // * Значение - Строка - контактная информация во внутреннем формате JSON. // * Представление - Строка - Представление контактной информации. // * Дата - Дата - Дата, с которой действует запись контактной информации. +// * ИдентификаторСтрокиТабличнойЧасти - Число - Идентификатор строки этой табличной части // * ЗначенияПолей - Строка - устаревший XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. Для // обратной совместимости. // @@ -55,6 +64,7 @@ | КонтактнаяИнформация.Тип КАК Тип, | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, | КонтактнаяИнформация.Значение КАК Значение, + | КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти КАК ИдентификаторСтрокиТабличнойЧасти, | " + ДействуетС +" КАК Дата, | КонтактнаяИнформация.Представление КАК Представление |ИЗ @@ -62,9 +72,9 @@ Результат = Запрос.Выполнить().Выгрузить(); Для каждого СтрокаКонтактнойИнформации Из Результат Цикл - Если ПустаяСтрока(СтрокаКонтактнойИнформации.Значение) + Если ПустаяСтрока(СтрокаКонтактнойИнформации.Значение) И ЗначениеЗаполнено(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда - СтрокаКонтактнойИнформации.Значение = КонтактнаяИнформацияВJSON(СтрокаКонтактнойИнформации.ЗначенияПолей); + СтрокаКонтактнойИнформации.Значение = КонтактнаяИнформацияВJSON(СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаКонтактнойИнформации.Тип); КонецЕсли; КонецЦикла; @@ -86,15 +96,16 @@ // Для получения представление рекомендуется использовать см. функцию ПредставлениеКонтактнойИнформацииОбъекта. // // Возвращаемое значение: -// Строка - строковое представление значения, если параметр ТолькоПредставление установлен в Истина, иначе // ТаблицаЗначений - таблица с контактной информацией объекта содержащая колонки: // * СсылкиИлиОбъекты - Ссылка - Владелец контактной информации. // * Вид - СправочникСсылка.ВидыКонтактнойИнформации - Вид контактной информации. // * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. -// * ЗначенияПолей - Строка - XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. // * Значение - Строка - контактная информация во внутреннем формате JSON. // * Представление - Строка - Представление контактной информации. // * Дата - Дата - Дата с которой действует запись контактной информации. +// * ИдентификаторСтрокиТабличнойЧасти - Число - Идентификатор строки этой табличной части +// * ЗначенияПолей - Строка - устаревший XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. Для +// обратной совместимости. // Функция КонтактнаяИнформацияОбъекта(СсылкаИлиОбъект, ВидКонтактнойИнформации = Неопределено, Дата = Неопределено, ТолькоПредставление = Истина) Экспорт @@ -112,7 +123,7 @@ ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКонтактнойИнформации); Если ПустаяСтрока(НоваяСтрока.Значение) И ЗначениеЗаполнено(НоваяСтрока.ЗначенияПолей) Тогда - НоваяСтрока.Значение = КонтактнаяИнформацияВJSON(НоваяСтрока.ЗначенияПолей); + НоваяСтрока.Значение = КонтактнаяИнформацияВJSON(НоваяСтрока.ЗначенияПолей, СтрокаКонтактнойИнформации.Тип); КонецЕсли; НоваяСтрока.Объект = СсылкаИлиОбъект; КонецЕсли; @@ -198,19 +209,28 @@ КонецЕсли; РазделительВПредставлении = ?(БезПробелов, Разделитель, Разделитель + " "); - ПервыйПроход = Истина; + ПервыйПроход = Истина; КонтактнаяИнформация = КонтактнаяИнформацияОбъекта(СсылкаИлиОбъект, ВидКонтактнойИнформации, Дата, Ложь); - Для каждого ЗаписьКонтактнойИнформации Из КонтактнаяИнформация Цикл - Если ПервыйПроход Тогда - Представление = ЗаписьКонтактнойИнформации.Представление; - Если ТолькоПервая Тогда - Возврат Представление; + + Если ТипЗнч(КонтактнаяИнформация) = Тип("ТаблицаЗначений") Тогда + + Для каждого ЗаписьКонтактнойИнформации Из КонтактнаяИнформация Цикл + Если ПервыйПроход Тогда + Представление = ЗаписьКонтактнойИнформации.Представление; + Если ТолькоПервая Тогда + Возврат Представление; + КонецЕсли; + ПервыйПроход = Ложь; + Иначе + Представление = Представление + РазделительВПредставлении + ЗаписьКонтактнойИнформации.Представление; КонецЕсли; - ПервыйПроход = Ложь; - Иначе - Представление = Представление + РазделительВПредставлении + ЗаписьКонтактнойИнформации.Представление; - КонецЕсли; - КонецЦикла; + КонецЦикла; + + Иначе + + Представление = КонтактнаяИнформация; + + КонецЕсли; Возврат Представление; @@ -231,6 +251,7 @@ // * ЗначенияПолей - Строка - XML соответствующий XDTO пакету КонтактнаяИнформация или Адрес. // * Представление - Строка - Представление контактной информации. // * Дата - Дата - Дата с которой действует запись контактной информации. +// * ИдентификаторСтрокиТабличнойЧасти - Число - Идентификатор строки этой табличной части // Функция НоваяКонтактнаяИнформация(КолонкаОбъект = Истина) Экспорт @@ -241,12 +262,13 @@ КонтактнаяИнформация.Колонки.Добавить("Объект"); КонецЕсли; - КонтактнаяИнформация.Колонки.Добавить("Представление", ОписаниеТиповСтрока1500); - КонтактнаяИнформация.Колонки.Добавить("ЗначенияПолей", Новый ОписаниеТипов("Строка")); - КонтактнаяИнформация.Колонки.Добавить("Значение", Новый ОписаниеТипов("Строка")); - КонтактнаяИнформация.Колонки.Добавить("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации")); - КонтактнаяИнформация.Колонки.Добавить("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации")); - КонтактнаяИнформация.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); + КонтактнаяИнформация.Колонки.Добавить("Представление", ОписаниеТиповСтрока1500); + КонтактнаяИнформация.Колонки.Добавить("ЗначенияПолей", Новый ОписаниеТипов("Строка")); + КонтактнаяИнформация.Колонки.Добавить("Значение", Новый ОписаниеТипов("Строка")); + КонтактнаяИнформация.Колонки.Добавить("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации")); + КонтактнаяИнформация.Колонки.Добавить("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации")); + КонтактнаяИнформация.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); + КонтактнаяИнформация.Колонки.Добавить("ИдентификаторСтрокиТабличнойЧасти", Новый ОписаниеТипов("Число")); Возврат КонтактнаяИнформация; @@ -315,9 +337,8 @@ ЗначенияПолей = КонтактнаяИнформацияВXML(Значение); ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(Значение); Представление = ПредставлениеКонтактнойИнформации(ЗначениеИлиПредставление, ВидКонтактнойИнформации); - + Иначе - ОбъектКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип); Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ОбъектКонтактнойИнформации); ЗначенияПолей = КонтактнаяИнформацияВXML(Значение); @@ -492,7 +513,12 @@ ЭтоСсылка = ОбщегоНазначения.ЗначениеСсылочногоТипа(СсылкаИлиОбъект); Объект =?(ЭтоСсылка, СсылкаИлиОбъект.ПолучитьОбъект(), СсылкаИлиОбъект); - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект)); + Если ТипЗнч(СсылкаИлиОбъект) <> Тип("ДанныеФормыСтруктура") Тогда + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект)); + Иначе + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(СсылкаИлиОбъект.Ссылка)); + КонецЕсли; + Если МетаданныеОбъекта = Неопределено Или МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда ВызватьИсключение НСтр("ru = 'Добавление контактной информации невозможно, у объекта нет таблицы с контактной информацией.'");; @@ -510,6 +536,7 @@ КонецЕсли; Периодическая = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено; + БезИдентификатораТабличнойЧасти = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") = Неопределено; Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации); @@ -534,7 +561,8 @@ Если Замещать Тогда - Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата) Тогда + ИдентификаторСтрокиТабличнойЧасти = ?(БезИдентификатораТабличнойЧасти, Неопределено, СтрокаКонтактнойИнформацииОбъекта.ИдентификаторСтрокиТабличнойЧасти); + Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата, ИдентификаторСтрокиТабличнойЧасти) Тогда Продолжить; КонецЕсли; СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); @@ -578,25 +606,23 @@ //////////////////////////////////////////////////////////////////////////////// // Работа с контактной информацией из других подсистем. -// Преобразует все входящие форматы контактной информации в JSON. +// Преобразует входящие форматы контактной информации во внутренний формат JSON. // // Параметры: -// КонтактнаяИнформация - Строка, Структура - Описание полей контактной информации. -// Для строки внутренний формат JSON соответствующая структуре, описанной в функции -// РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации (для конфигурации с поддержкой специфики РФ) -// или УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации. -// Для строки c XML соответствующего XDTO пакету КонтактнаяИнформация или Адрес. -// У структуры состав полей должен соответствовать возвращаемым полям функций: -// РаботаСАдресами.ПоляАдреса или РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу, -// для конфигурации с поддержкой специфики РФ или -// УправлениеКонтактнойИнформациейКлиентСервер.СтруктураКонтактнойИнформацииПоТипу для международной конфигурации. -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации - -// Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей. +// КонтактнаяИнформация - Строка - строка в формате XML. Структура XML-документа соответствует XDTO-пакету КонтактнаяИнформация +// или Адрес (для адресов содержащих поля с национальной спецификой). +// Если передана строка во внутреннем формате JSON, то возвращаемое значение будет полностью совпадать с ней. +// - Структура - см. УправлениеКонтактнойИнформациейКлиентСервер.СтруктураКонтактнойИнформацииПоТипу. +// см. РаботаСАдресами.ПоляАдреса (для адресов содержащих поля с национальной спецификой), +// см. РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу +// (для других типов контактной информации содержащих поля с национальной спецификой). +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации - Используется для определения типа +// контактной информации, если его невозможно определить из переданной контактной информации в параметре КонтактнаяИнформация. // // Возвращаемое значение: -// Строка - Контактная информация в формате JSON, соответствующая структуре, описанной в функции -// УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации. -// Поля могут быть расширены национальной спецификой в одноименной функции общего модуля РаботаСАдресамиКлиентСервер. +// Строка - контактная информация во внутреннем формате JSON. +// Поля и их описание см. УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации. +// Дополнительные поля для конфигурации с поддержкой национальной специфики см. РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации // Функция КонтактнаяИнформацияВJSON(Знач КонтактнаяИнформация, Знач ОжидаемыйВид = Неопределено) Экспорт @@ -604,7 +630,7 @@ Возврат КонтактнаяИнформация; КонецЕсли; - КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, ОжидаемыйВид,, Ложь); + КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, ОжидаемыйВид,, Ложь); Возврат УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям); КонецФункции @@ -636,8 +662,8 @@ // Возвращает тип контактной информации. // // Параметры: -// КонтактнаяИнформация - Строка - Контактная информация в виде XML, соответствующего структуре -// XDTO пакетов КонтактнаяИнформация и Адрес. +// КонтактнаяИнформация - Строка - Контактная информация в виде XML, соответствующего структуре XDTO пакетов +// КонтактнаяИнформация и Адрес. // // Возвращаемое значение: // ПеречислениеСсылка.ТипыКонтактнойИнформации - соответствующий тип. @@ -678,8 +704,11 @@ // Возвращает представление контактной информации (адреса, телефона, электронной почты и т.п.). // // Параметры: -// КонтактнаяИнформация - Строка, ОбъектXDTO - Строка JSON или XML контактной информации соответствующая -// XDTO пакетам КонтактнаяИнформация или Адрес. +// КонтактнаяИнформация - Строка - Строка JSON или XML контактной информации соответствующая XDTO пакетам +// КонтактнаяИнформация или Адрес +// - ОбъектXDTO - XDTO объект КонтактнаяИнформация или Адрес. +// - Структура - Контактная информация с разбивкой по полям полученная функциями +// СведенияОбАдресе или СведенияОТелефоне. // ВидКонтактнойИнформации - Структура - Дополнительные параметры, влияющие на формирование представления адреса: // * ВключатьСтрануВПредставление - Булево - В представление будет включена страна адреса; // * ФорматАдреса - Строка - Варианты "ФИАС" или "КЛАДР". @@ -695,6 +724,33 @@ КонецФункции +// Вычисляет, что адрес был введен в свободной форме. +// +// Параметры: +// КонтактнаяИнформация - Строка - Строка JSON или XML контактной информации соответствующая XDTO пакетам +// КонтактнаяИнформация или Адрес +// +// Возвращаемое значение: +// Булево - новое значение. +// +Функция АдресВведенВСвободнойФорме(Знач КонтактнаяИнформация) Экспорт + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + КонтактнаяИнформацияJSON = КонтактнаяИнформацияВJSON(КонтактнаяИнформация); + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(КонтактнаяИнформацияJSON); + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(КонтактнаяИнформация); + КонецЕсли; + + Если ТипЗнч(КонтактнаяИнформация) = Тип("Структура") + И КонтактнаяИнформация.Свойство("AddressType") Тогда + Возврат УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(КонтактнаяИнформация.AddressType); + КонецЕсли; + + Возврат Ложь; + +КонецФункции + // Возвращает комментарий контактной информации. // // Параметры: @@ -825,7 +881,7 @@ КонецЕсли; Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда - КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация,,, Ложь); + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация); ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(КонтактнаяИнформация); КонецЕсли; @@ -833,7 +889,7 @@ Если КонтактнаяИнформацияСтруктурой.Свойство("Type") И КонтактнаяИнформацияСтруктурой.Свойство("Value") Тогда ДоменАдреса = СокрЛП(КонтактнаяИнформацияСтруктурой.Value); - Если Строка(КонтактнаяИнформацияСтруктурой.Type) = Строка(Перечисления.ТипыКонтактнойИнформации.ВебСтраница) Тогда + Если ТипКонтактнойИнформацииПоНаименованию(КонтактнаяИнформацияСтруктурой.Type) = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда Позиция = СтрНайти(ДоменАдреса, "://"); Если Позиция > 0 Тогда @@ -842,7 +898,7 @@ Позиция = СтрНайти(ДоменАдреса, "/"); Возврат ?(Позиция = 0, ДоменАдреса, Лев(ДоменАдреса, Позиция - 1)); - ИначеЕсли Строка(КонтактнаяИнформацияСтруктурой.Type) = Строка(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) Тогда + ИначеЕсли ТипКонтактнойИнформацииПоНаименованию(КонтактнаяИнформацияСтруктурой.Type) = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда Позиция = СтрНайти(ДоменАдреса, "@"); Возврат ?(Позиция = 0, ДоменАдреса, Сред(ДоменАдреса, Позиция + 1)); @@ -854,6 +910,42 @@ ВызватьИсключение НСтр("ru = 'Невозможно определить домен, ожидается электронная почта или веб-ссылка.'"); КонецФункции +// Возвращает сведения о телефоне или факсе. +// +// Параметры: +// КонтактнаяИнформация - Строка - Телефон во внутреннем формате JSON или в XML, соответствующем XDTO пакету контактная +// информация. +// - Неопределено - Конструктор, возвращает список незаполненных полей телефона. +// +// Возвращаемое значение: +// Структура - сведения об телефона: +// * Представление - Строка - представление телефона. +// * КодСтраны - Строка - Код страны. Например, +7. +// * КодГорода - Строка - Код города. Например, 495. +// * НомерТелефона - Строка - Номер телефона. +// * Добавочный - Строка - Добавочный номер телефона. +// * Комментарий - Строка - Комментарий к номеру телефона. +// +Функция СведенияОТелефоне(КонтактнаяИнформация = Неопределено) Экспорт + + Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейТелефона(); + Если КонтактнаяИнформация = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + ТелефонПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Телефон); + + Результат.Представление = Строка(ТелефонПоПолям.Value); + Результат.КодСтраны = Строка(ТелефонПоПолям.CountryCode); + Результат.КодГорода = Строка(ТелефонПоПолям.AreaCode); + Результат.НомерТелефона = Строка(ТелефонПоПолям.Number); + Результат.Добавочный = Строка(ТелефонПоПолям.ExtNumber); + Результат.Комментарий = Строка(ТелефонПоПолям.Comment); + + Возврат Результат; + +КонецФункции + // Возвращает строку с номером телефона без кода и дополнительного номера. // // Параметры: @@ -869,7 +961,7 @@ КонецЕсли; Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда - КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация,,, Ложь); + КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация); ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда КонтактнаяИнформацияСтруктурой = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(КонтактнаяИнформация); КонецЕсли; @@ -987,6 +1079,14 @@ МетаданныеОбъекта = Метаданные.НайтиПоТипу(ОбъектСКонтактнойИнформацией.Ключ); ИмяТаблицы = МетаданныеОбъекта.Имя; + ЕстьИдентификаторСтрокиТабличнойЧасти = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") <> Неопределено; + ТекстЗапросаИдентификаторСтрокиТабличнойЧасти = ""; + Если ЕстьИдентификаторСтрокиТабличнойЧасти Тогда + ТекстЗапросаИдентификаторСтрокиТабличнойЧасти = "КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти КАК ИдентификаторСтрокиТабличнойЧасти"; + Иначе + ТекстЗапросаИдентификаторСтрокиТабличнойЧасти = "0 КАК ИдентификаторСтрокиТабличнойЧасти"; + КонецЕсли; + Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено Тогда Если ТипЗнч(Дата) <> Тип("Дата") Тогда ВызватьИсключение НСтр("ru = 'Для получения контактной информации, хранящей историю изменений, @@ -1011,7 +1111,8 @@ | КонтактнаяИнформация.ДействуетС КАК ДействуетС, | КонтактнаяИнформация.Представление КАК Представление, | КонтактнаяИнформация.Значение, - | КонтактнаяИнформация.ЗначенияПолей + | КонтактнаяИнформация.ЗначенияПолей, + | " + ТекстЗапросаИдентификаторСтрокиТабличнойЧасти + " | " + СтрокаВременнойТаблицы + " |ИЗ | СрезКонтактнойИнформации" + ИмяТаблицы + " КАК СрезКонтактнойИнформации @@ -1027,7 +1128,8 @@ | ДАТАВРЕМЯ(1,1,1) КАК ДействуетС, | КонтактнаяИнформация.Представление КАК Представление, | КонтактнаяИнформация.Значение, - | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей + | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, + | " + ТекстЗапросаИдентификаторСтрокиТабличнойЧасти + " | " + СтрокаВременнойТаблицы + " |ИЗ | " + МетаданныеОбъекта.ПолноеИмя() + ".КонтактнаяИнформация КАК КонтактнаяИнформация @@ -1407,12 +1509,14 @@ ИсключаемыеВиды = ?(ДополнительныеПараметры.Свойство("ИсключаемыеВиды"), ДополнительныеПараметры.ИсключаемыеВиды, Неопределено); СкрываемыеВиды = ?(ДополнительныеПараметры.Свойство("СкрываемыеВиды"), ДополнительныеПараметры.СкрываемыеВиды, Неопределено); ИмяЭлементаДляРазмещения = ?(ДополнительныеПараметры.Свойство("ИмяЭлементаДляРазмещения"), ДополнительныеПараметры.ИмяЭлементаДляРазмещения, "ГруппаКонтактнаяИнформация"); + ОбработкаНавигационнойСсылки = ?(ДополнительныеПараметры.Свойство("ОбработкаНавигационнойСсылки"), ДополнительныеПараметры.ОбработкаНавигационнойСсылки, Ложь); Иначе ИмяЭлементаДляРазмещения = ?(ДополнительныеПараметры = Неопределено, "ГруппаКонтактнаяИнформация", ДополнительныеПараметры); ОтложеннаяИнициализация = УдалитьОтложеннаяИнициализация; ИсключаемыеВиды = УдалитьИсключаемыеВиды; СкрываемыеВиды = Неопределено; ПоложениеЗаголовкаКИ = УдалитьПоложениеЗаголовкаКИ; + ОбработкаНавигационнойСсылки = Ложь; КонецЕсли; Если ИсключаемыеВиды = Неопределено Тогда @@ -1526,11 +1630,19 @@ | |ВЫБРАТЬ | ВидыКонтактнойИнформации.Ссылка КАК Вид, - | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |КОНЕЦ КАК ИмяПредопределенногоВида, | ВидыКонтактнойИнформации.Тип КАК Тип, | ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение, | ВидыКонтактнойИнформации.ВидПоляДругое КАК ВидПоляДругое, - | ВидыКонтактнойИнформации.Наименование КАК Наименование, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА ВидыКонтактнойИнформации.Наименование + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ВидыКонтактнойИнформацииПредставления.Наименование, ВидыКонтактнойИнформации.Наименование) КАК СТРОКА(150)) + | КОНЕЦ КАК Наименование, | ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений, | ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге, | ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти, @@ -1552,6 +1664,9 @@ | КонтактнаяИнформация КАК КонтактнаяИнформация |ПО | ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид + |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКонтактнойИнформации.Представления КАК ВидыКонтактнойИнформацииПредставления + |ПО ВидыКонтактнойИнформацииПредставления.Ссылка = ВидыКонтактнойИнформации.Ссылка + | И ВидыКонтактнойИнформацииПредставления.КодЯзыка = &КодЯзыка |ГДЕ | ВидыКонтактнойИнформации.Используется | И ЕСТЬNULL(ВидыКонтактнойИнформации.Родитель.Используется, ИСТИНА) @@ -1573,35 +1688,23 @@ Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКонтактнойИнформации); Запрос.УстановитьПараметр("Владелец", СсылкаНаОбъект); Запрос.УстановитьПараметр("СкрываемыеВиды", СкрываемыеВиды); + Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); + Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); УстановитьПривилегированныйРежим(Истина); КонтактнаяИнформация = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией).Строки; УстановитьПривилегированныйРежим(Ложь); - // Конвертация - Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл - Если ПустаяСтрока(СтрокаКИ.Значение) Тогда - Если ЗначениеЗаполнено(СтрокаКИ.ЗначенияПолей) Тогда - - КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(СтрокаКИ.ЗначенияПолей, - СтрокаКИ.Тип, СтрокаКИ.Представление, Ложь); - СтрокаКИ.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям); - - ИначеЕсли ЗначениеЗаполнено(СтрокаКИ.Представление) Тогда - - СтрокаКИ.Значение = КонтактнаяИнформацияПоПредставлению(СтрокаКИ.Представление, СтрокаКИ.Тип); - - КонецЕсли; - КонецЕсли; - КонецЦикла; + КонвертацияКонтактнойИнформацииВJSON(КонтактнаяИнформация); КонтактнаяИнформация.Сортировать("РеквизитДопУпорядочивания, НомерСтроки"); - СоздатьРеквизитыКонтактнойИнформации(Форма, ДобавляемыеРеквизиты, ИмяОбъекта, ИсключаемыеВиды, КонтактнаяИнформация, ОтложеннаяИнициализация); + СоздатьРеквизитыКонтактнойИнформации(Форма, ДобавляемыеРеквизиты, ИмяОбъекта, ИсключаемыеВиды, КонтактнаяИнформация, ОтложеннаяИнициализация, ОбработкаНавигационнойСсылки); ПараметрыКонтактнойИнформации = ПараметрыВыводаКонтактнойИнформации(Форма, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ, ОтложеннаяИнициализация, ИсключаемыеВиды); ПараметрыКонтактнойИнформации.Владелец = СсылкаНаОбъект; ПараметрыКонтактнойИнформации.ПараметрыАдреса.ТипПомещения = ТипПомещения; + ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки = ОбработкаНавигационнойСсылки; // Кеш значений всех видов контактной информации у данного объекта. ДанныеВидовКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.ДанныеВидовКонтактнойИнформации( @@ -1611,7 +1714,7 @@ КоличествоАдресов = КонтактнаяИнформация.НайтиСтроки(Отбор).Количество(); // Создадим элементы на форме и заполним значения реквизитов. - СозданныеЭлементы = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИсключаемыеВиды); + СозданныеЭлементы = ОбщегоНазначения.СкопироватьРекурсивно(ИсключаемыеВиды); ПредыдущийВид = Неопределено; Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл @@ -1702,7 +1805,7 @@ МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя(); ИмяГруппыВидовКИ = СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""); - ГруппаВидовКИ = Справочники.ВидыКонтактнойИнформации[ИмяГруппыВидовКИ]; + ГруппаВидовКИ = ВидКонтактнойИнформацииПоИмени(ИмяГруппыВидовКИ); ИмяЭлементаДляРазмещения = Параметры.ГруппаДляРазмещения; ПоложениеЗаголовкаКИ = ?(ЗначениеЗаполнено(Параметры.ПоложениеЗаголовка), ПредопределенноеЗначение(Параметры.ПоложениеЗаголовка), ПоложениеЗаголовкаЭлементаФормы.Лево); @@ -1718,7 +1821,7 @@ МассивУдаляемыхРеквизитов = Новый Массив; ИмяОбъекта = Объект.Ссылка.Метаданные().Имя; - СтатическиеРеквизиты = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(Параметры.ИсключаемыеВиды); + СтатическиеРеквизиты = ОбщегоНазначения.СкопироватьРекурсивно(Параметры.ИсключаемыеВиды); ИменаТабличныхЧастейПоВидамКИ = Неопределено; Отбор = Новый Структура("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения); @@ -1796,7 +1899,7 @@ СтрокаКИ = НайденныеСтроки[0]; СтрокаТабличнойЧастиФормы[ИмяРеквизита] = СтрокаКИ.Представление; - СтрокаТабличнойЧастиФормы[ИмяРеквизита + "ЗначенияПолей"] = СтрокаКИ.ЗначенияПолей; + СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"] = СтрокаКИ.Значение; КонецЕсли; КонецЦикла; @@ -1847,7 +1950,7 @@ Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) И Не ВидИнформации.ПометкаУдаления Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле); ТекущийУровеньОшибок = 2; @@ -1874,7 +1977,9 @@ Продолжить; // Элемент не был создан. Не была вызвана отложенная инициализация. КонецЕсли; - Если СвойствоВидаИнформации.РедактированиеТолькоВДиалоге И Не УправлениеКонтактнойИнформациейКлиентСервер.КонтактнаяИнформацияЗаполнена(Форма[ИмяРеквизита]) Тогда + Если (СвойствоВидаИнформации.РедактированиеТолькоВДиалоге + Или ТипИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница) + И Не УправлениеКонтактнойИнформациейКлиентСервер.КонтактнаяИнформацияЗаполнена(Строка(Форма[ИмяРеквизита])) Тогда Представление = ""; Иначе Представление = Форма[ИмяРеквизита]; @@ -1884,7 +1989,7 @@ И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) Тогда // И нет других строк с данными для видов КИ с множественными значениями. - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита); ТекущийУровеньОшибок = 2; @@ -1919,65 +2024,9 @@ // Процедура ПередЗаписьюНаСервере(Форма, Объект, Отказ = Ложь) Экспорт + КонтактнаяИнформация = КонтактнаяИнформацияИзРеквизитовФормы(Форма, Объект); Объект.КонтактнаяИнформация.Очистить(); - - МетаданныеОбъекта = Объект.Ссылка.Метаданные(); - ИмяОбъектаМетаданных = МетаданныеОбъекта.Имя; - ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя(); - ГруппаВидовКонтактнойИнформации = ГруппаВидовКонтактнойИнформацииОбъекта(ПолноеИмяОбъектаМетаданных); - ИменаТабличныхЧастейПоВидамКИ = Неопределено; - - Для Каждого СтрокаТаблицы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл - - ВидИнформации = СтрокаТаблицы.Вид; - ТипИнформации = СтрокаТаблицы.Тип; - ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита; - - Если НЕ Форма.Элементы.Найти(СтрокаТаблицы.ИмяРеквизита) = Неопределено Тогда - Элемент = Форма.Элементы[СтрокаТаблицы.ИмяРеквизита]; - Если Элемент.Вид = ВидПоляФормы.ПолеНадписи И Элемент.Гиперссылка Тогда - Если ПустаяСтрока(СтрокаТаблицы.Представление) - ИЛИ СтрокаТаблицы.Представление = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки() Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - ВосстановитьПустыеЗначениеПредставление(СтрокаТаблицы); - - Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда - - Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда - Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина); - ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор, "Вид"); - ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъектаМетаданных); - КонецЕсли; - - ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[ВидИнформации]; - ТабличнаяЧастьФормы = Форма.Объект[ИмяТабличнойЧасти]; - Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл - - ИдентификаторСтроки = СтрокаТабличнойЧастиФормы.ПолучитьИдентификатор(); - СтрокаТабличнойЧастиФормы.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки; - - СтрокаТабличнойЧасти = Объект[ИмяТабличнойЧасти][СтрокаТабличнойЧастиФормы.НомерСтроки - 1]; - СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки; - - Значение = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"]; - ЗаписатьКонтактнуюИнформацию(Объект, Значение, ВидИнформации, ТипИнформации, ИдентификаторСтроки); - - КонецЦикла; - - Иначе - Если ВидИнформации.Родитель <> ГруппаВидовКонтактнойИнформации Тогда - Продолжить; - КонецЕсли; - - ДействуетС = ?(СтрокаТаблицы.Свойство("ДействуетС"), СтрокаТаблицы.ДействуетС, Неопределено); - ЗаписатьКонтактнуюИнформацию(Объект, СтрокаТаблицы.Значение, ВидИнформации, ТипИнформации,, ДействуетС); - КонецЕсли; - - КонецЦикла; + УстановитьКонтактнуюИнформациюОбъекта(Объект, КонтактнаяИнформация); КонецПроцедуры @@ -2142,6 +2191,36 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные функции и конструкторы. +// Возвращает ссылку на вид контактной информации. +// Если по виден не был найден по имени, то выполняется поиск по именам предопределенных элементов. +// +// Параметры: +// Имя - Строка - Уникальное имя вида контактной информации. +// +// Возвращаемое значение: +// СправочникСсылка.ВидыКонтактнойИнформации - Ссылка на элемент справочника виды контактной информации. +// +Функция ВидКонтактнойИнформацииПоИмени(Имя) Экспорт + + Вид = Неопределено; + Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда + Виды = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ВидыКонтактнойИнформацииПоИмени(); + Вид = Виды.Получить(Имя); + Иначе + Виды = ПредопределенныеВидыКонтактнойИнформации(Имя); + Если Виды.Количество() > 0 Тогда + Вид = Виды[0].Ссылка; + КонецЕсли; + КонецЕсли; + + Если Вид <> Неопределено Тогда + Возврат Вид; + КонецЕсли; + + Возврат Справочники.ВидыКонтактнойИнформации[Имя]; + +КонецФункции + // Описание параметров контактной информацией используемых в обработчике ПриСозданииНаСервере. // // Возвращаемое значение: @@ -2180,18 +2259,18 @@ // Проверяет контактную информацию. // // Параметры: -// Представление - Строка - Представление контактной информации. Используется, если невозможно определить -// представление из параметра ЗначенияПолей (отсутствие поля "Представление"). -// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - Описание полей контактной информации. -// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Используется для определения типа, если его невозможно +// Представление - Строка - Представление контактной информации. Используется, если невозможно определить +// представление из параметра ЗначенияПолей (отсутствие поля Представление). +// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - Описание полей контактной информации. +// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Используется для определения типа, если его невозможно // определить по параметру ЗначенияПолей. -// ТипИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. -// ИмяРеквизита - Строка - Имя реквизита на форме. -// Комментарий - Строка - Текст комментария. -// ПутьКРеквизиту - Строка - Путь к реквизиту. +// ТипИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации. +// ИмяРеквизита - Строка - Имя реквизита на форме. +// Комментарий - Строка - Текст комментария. +// ПутьКРеквизиту - Строка - Путь к реквизиту. // // Возвращаемое значение: -// Число - уровень ошибок, 0 - ошибки отсутствуют. +// Число - уровень ошибок, 0 - ошибки отсутствуют. // Функция ПроверитьКонтактнуюИнформацию(Представление, ЗначенияПолей, ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий = Неопределено, ПутьКРеквизиту = "") Экспорт @@ -2227,6 +2306,47 @@ //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. +// Устанавливает свойства группы контактной информации. +// +// Параметры: +// Параметры - Структура - содержит структуру с полями: +// * Код - Строка - Код вида контактной информации для идентификации элемента. +// * Наименование - Строка - Наименование вида контактной информации. +// * Используется - Булево -Признак использования вида контактной информации. Значение по умолчанию Истина. +// +Функция УстановитьСвойстваГруппыВидаКонтактнойИнформации(Параметры) Экспорт + + Объект = ОбъектВидаКонтактнойИнформации(Параметры.Имя, Истина); + + Объект.ИмяПредопределенногоВида = Параметры.Имя; + Объект.Родитель = Параметры.Группа; + Объект.Используется = Параметры.Используется; + + Если ПустаяСтрока(Параметры.Наименование) Тогда + + Наименования = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.НаименованияВидовКонтактнойИнформации(); + Для каждого Язык Из Метаданные.Языки Цикл + Представление = Наименования[Язык.КодЯзыка][СокрЛП(Объект.ИмяПредопределенногоВида)]; + Если ЗначениеЗаполнено(Представление) Тогда + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда + Объект.Наименование = Представление; + Иначе + НоваяСтрока = Объект.Представления.Добавить(); + НоваяСтрока.КодЯзыка = Язык.КодЯзыка; + НоваяСтрока.Наименование = Представление; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Иначе + Объект.Наименование = Параметры.Наименование; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Объект); + + Возврат Объект.Ссылка; + +КонецФункции + // Устанавливает свойства вида контактной информации. // Примечание. При использовании параметра Порядок следует внимательно следить за уникальностью назначаемого значения. // Если после выполнения обновления значения порядка окажутся неуникальными в пределах группы, то настройка порядка @@ -2288,21 +2408,49 @@ // Процедура УстановитьСвойстваВидаКонтактнойИнформации(Параметры) Экспорт - Если ТипЗнч(Параметры.Вид) = Тип("Строка") Тогда - Объект = Справочники.ВидыКонтактнойИнформации[Параметры.Вид].ПолучитьОбъект(); + Если Не ЗначениеЗаполнено(Параметры.Вид) Тогда + Объект = ОбъектВидаКонтактнойИнформации(Параметры.Имя); + ИначеЕсли ТипЗнч(Параметры.Вид) = Тип("Строка") Тогда + Объект = ОбъектВидаКонтактнойИнформации(Параметры.Вид); Иначе Объект = Параметры.Вид.ПолучитьОбъект(); КонецЕсли; - Объект.Тип = Параметры.Тип; - Объект.МожноИзменятьСпособРедактирования = Параметры.МожноИзменятьСпособРедактирования; - Объект.РедактированиеТолькоВДиалоге = Параметры.РедактированиеТолькоВДиалоге; - Объект.ОбязательноеЗаполнение = Параметры.ОбязательноеЗаполнение; - Объект.РазрешитьВводНесколькихЗначений = Параметры.РазрешитьВводНесколькихЗначений; - Объект.ЗапретитьРедактированиеПользователем = Параметры.ЗапретитьРедактированиеПользователем; - Объект.Используется = Параметры.Используется; - Объект.ХранитьИсториюИзменений = Параметры.ХранитьИсториюИзменений; - Объект.МеждународныйФорматАдреса = Параметры.МеждународныйФорматАдреса; + ЗаполнитьЗначенияСвойств(Объект, Параметры, "Тип, МожноИзменятьСпособРедактирования, + |РедактированиеТолькоВДиалоге, ОбязательноеЗаполнение, РазрешитьВводНесколькихЗначений, + |ЗапретитьРедактированиеПользователем, Используется, ХранитьИсториюИзменений ,МеждународныйФорматАдреса"); + + Если ПустаяСтрока(Параметры.Наименование) Тогда + + Наименования = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.НаименованияВидовКонтактнойИнформации(); + Для каждого Язык Из Метаданные.Языки Цикл + Представление = Наименования[Язык.КодЯзыка][СокрЛП(Объект.ИмяПредопределенногоВида)]; + Если ЗначениеЗаполнено(Представление) Тогда + Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда + Объект.Наименование = Представление; + Иначе + НоваяСтрока = Объект.Представления.Добавить(); + НоваяСтрока.КодЯзыка = Язык.КодЯзыка; + НоваяСтрока.Наименование = Представление; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Иначе + Объект.Наименование = Параметры.Наименование; + КонецЕсли; + + Если ЗначениеЗаполнено(Параметры.Имя) Тогда + Объект.ИмяПредопределенногоВида = Параметры.Имя; + КонецЕсли; + + Если ПустаяСтрока(Объект.ИмяПредопределенногоВида) Тогда + Объект.ИмяПредопределенногоВида = Объект.ИмяПредопределенныхДанных; + КонецЕсли; + + Если ПустаяСтрока(Объект.Родитель) Тогда + Объект.Родитель = Параметры.Группа; + КонецЕсли; + Объект.ИмяГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Родитель, "ИмяПредопределенногоВида"); Если Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда Объект.ВидПоляДругое = Параметры.ВидПоляДругое; @@ -2331,41 +2479,111 @@ Объект.РеквизитДопУпорядочивания = Параметры.Порядок; КонецЕсли; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + ЗначениеИспользуетсяУГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Родитель, "Используется"); + + Если ЗначениеИспользуетсяУГруппы = Ложь И Объект.Используется Тогда + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВидыКонтактнойИнформации"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Объект.Родитель.Ссылка); + Блокировка.Заблокировать(); + + Родитель = Объект.Родитель.ПолучитьОбъект(); + Родитель.Используется = Истина; + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Родитель); + + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Объект); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Иначе + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Объект); + КонецЕсли; КонецПроцедуры +// Возвращает структуру параметров группы вида контактной информации. +// +// Параметры: +// ГруппаКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации- группа контактной информации. +// +// Возвращаемое значение: +// Структура - содержит структуру с полями: +// * Имя - Строка - Уникальное имя вида контактной информации. +// * Наименование - Строка - Наименование вида контактной информации. +// * Группа - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу(родителя) элемента справочника. +// * Используется - Булево - Признак использования вида контактной информации. Значение по умолчанию Истина. +// +Функция ПараметрыГруппыВидаКонтактнойИнформации(ГруппаКонтактнойИнформации = Неопределено) Экспорт + + Результат = ОписаниеОбщихПараметровВидаКонтактнойИнформации(); + + Если ТипЗнч(ГруппаКонтактнойИнформации ) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда + Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ГруппаКонтактнойИнформации, "ИмяПредопределенногоВида, ИмяПредопределенныхДанных, Родитель, Наименование, Используется"); + Результат.Имя = ?(ЗначениеЗаполнено(Значения.ИмяПредопределенногоВида), Значения.ИмяПредопределенногоВида, Значения.ИмяПредопределенныхДанных); + Результат.Группа = Значения.Родитель; + Результат.Наименование = Значения.Наименование; + Результат.Используется = Значения.Используется; + КонецЕсли; + + Возврат Результат; + +КонецФункции + // Возвращает структуру параметров вида контактной информации для определенного типа. // // Параметры: -// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации, Строка - тип контактной информации для -// заполнения свойства НастройкиПроверки. -// +// ТипИлиВидКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации, Строка - тип контактной информации, +// - СправочникСсылка.ВидыКонтактнойИнформации- вид контактной информации для +// заполнения свойства НастройкиПроверки. +// // Возвращаемое значение: // Структура - содержит структуру с полями: +// * Имя - Строка - Уникальное имя вида контактной информации. +// * Наименование - Строка - Наименование вида контактной информации. // * Вид - СправочникСсылка.ВидыКонтактнойИнформации, Строка - Ссылка на вид контактной информации или // идентификатор предопределенного элемента. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации или его -// идентификатор. -// * Порядок - Число, Неопределено - Порядок вида контактной информации, положение в -// списке относительно других элементов: -// Неопределено - не переназначать; -// 0 - назначить автоматически; -// Число > 0 - назначить указанный порядок. -// * МожноИзменятьСпособРедактирования - Булево - Истина, если есть возможность изменять способ -// редактирования только в диалоге, Ложь - иначе. -// * РедактированиеТолькоВДиалоге - Булево - Истина, если редактировать только в диалоге, -// Ложь - иначе. -// * ОбязательноеЗаполнение - Булево - Истина, если требуется обязательное -// заполнение поля, Ложь - иначе. -// * РазрешитьВводНесколькихЗначений - Булево - Признак возможности использования дополнительных -// полей ввода для данного вида. -// * ЗапретитьРедактированиеПользователем - Булево - Признак недоступности редактирования -// пользователем свойства вида контактной -// информации. -// * Используется - Булево - Признак использования вида контактной информации. -// Значение по умолчанию Истина. -// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. +// * Группа - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу(родителя) элемента справочника. +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации или его идентификатор. +// * Порядок - Число, Неопределено - Порядок вида контактной информации, положение в списке относительно других элементов: +// Неопределено - не переназначать; +// 0 - назначить автоматически; +// Число > 0 - назначить указанный порядок. +// Примечание. При использовании параметра Порядок следует внимательно следить +// за уникальностью назначаемого значения. Если после выполнения обновления +// значения порядка окажутся неуникальными в пределах группы, то настройка +// порядка пользователем будет невозможна. В общем случае рекомендуется не +// использовать этот параметр (порядок не изменится), либо заполнять его +// значением 0 (порядок будет назначен автоматически в подсистеме "Настройка +// порядка элементов" при выполнении процедуры). Для размещения видов КИ в +// определенной последовательности относительно друг друга без явного +// размещения в начале списка достаточно вызывать данную процедуру в нужной +// последовательности для каждого вида КИ с указанием порядка 0. Если +// добавляется предопределенный вид КИ к уже существующим в ИБ, не +// рекомендуется назначать порядок в явном виде. +// * МожноИзменятьСпособРедактирования - Булево - Истина, если есть возможность изменять способ +// редактирования только в диалоге, Ложь - иначе. +// * РедактированиеТолькоВДиалоге - Булево - Истина, если редактировать только в диалоге, +// Ложь - иначе. +// * ХранитьИсториюИзменений - Булево - Признак возможности хранения истории контактной информации. Хранение +// истории допускается, если признак РедактированиеТолькоВДиалоге равен Истина. +// Свойство отсутствует, если в табличной части нет реквизита ДействуетС. +// * ОбязательноеЗаполнение - Булево - Истина, если требуется обязательное +// заполнение поля, Ложь - иначе. +// * РазрешитьВводНесколькихЗначений - Булево - Признак возможности использования дополнительных +// полей ввода для данного вида. +// * ЗапретитьРедактированиеПользователем - Булево - Признак недоступности редактирования +// пользователем свойства вида контактной +// информации. +// * Используется - Булево - Признак использования вида контактной информации. +// Значение по умолчанию Истина. +// * НастройкиПроверки - Структура, Неопределено - Настройки проверки вида контактной информации. // Для типа Адрес - Структура, содержащая поля: // * ТолькоНациональныйАдрес - Булево - Истина, если возможен ввод только российских адресов. // * ПроверятьКорректность - Булево - Истина, если требуется запрещать пользователю записывать @@ -2379,50 +2597,23 @@ // некорректный адрес электронной почты. // Для остальных типов или для задания настроек по умолчанию используется Неопределено. // -Функция ПараметрыВидаКонтактнойИнформации(Тип = Неопределено) Экспорт +Функция ПараметрыВидаКонтактнойИнформации(ТипИлиВидКонтактнойИнформации = Неопределено) Экспорт - Если ТипЗнч(Тип) = Тип("Строка") Тогда - УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации[Тип]; + Если ТипЗнч(ТипИлиВидКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда + + ПараметрыВида = ПараметрыИзВидаКонтактнойИнформации(ТипИлиВидКонтактнойИнформации); + Иначе - УстанавливаемыйТип = Тип; - КонецЕсли; - - ПараметрыВида = Новый Структура; - ПараметрыВида.Вставить("Вид"); - ПараметрыВида.Вставить("Тип", УстанавливаемыйТип); - ПараметрыВида.Вставить("Порядок"); - ПараметрыВида.Вставить("МожноИзменятьСпособРедактирования", Ложь); - ПараметрыВида.Вставить("РедактированиеТолькоВДиалоге", Ложь); - ПараметрыВида.Вставить("ОбязательноеЗаполнение", Ложь); - ПараметрыВида.Вставить("РазрешитьВводНесколькихЗначений", Ложь); - ПараметрыВида.Вставить("ЗапретитьРедактированиеПользователем", Ложь); - ПараметрыВида.Вставить("ХранитьИсториюИзменений", Ложь); - ПараметрыВида.Вставить("МеждународныйФорматАдреса", Ложь); - ПараметрыВида.Вставить("Используется", Истина); - - Если УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - НастройкиПроверки = Новый Структура; - НастройкиПроверки.Вставить("ТолькоНациональныйАдрес", Ложь); - НастройкиПроверки.Вставить("ПроверятьКорректность", Ложь); - НастройкиПроверки.Вставить("СкрыватьНеактуальныеАдреса", Ложь); - НастройкиПроверки.Вставить("ПроверятьПоФИАС", Истина); - НастройкиПроверки.Вставить("ВключатьСтрануВПредставление", Ложь); - НастройкиПроверки.Вставить("УказыватьОКТМО", Ложь); - ИначеЕсли УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда - НастройкиПроверки = Новый Структура; - НастройкиПроверки.Вставить("ПроверятьКорректность", Ложь); - ИначеЕсли УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - НастройкиПроверки = Новый Структура; - НастройкиПроверки.Вставить("ТелефонCДобавочнымНомером", Истина); - Иначе - Если УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда - ПараметрыВида.Вставить("ВидПоляДругое", "ОднострочноеШирокое"); + + Если ТипЗнч(ТипИлиВидКонтактнойИнформации) = Тип("Строка") Тогда + УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации[ТипИлиВидКонтактнойИнформации]; + Иначе + УстанавливаемыйТип = ТипИлиВидКонтактнойИнформации; КонецЕсли; - НастройкиПроверки = Неопределено; + + ПараметрыВида = ОписаниеПараметровВидаКонтактнойИнформации(УстанавливаемыйТип); КонецЕсли; - ПараметрыВида.Вставить("НастройкиПроверки", НастройкиПроверки); - Возврат ПараметрыВида; КонецФункции @@ -2507,7 +2698,11 @@ Запрос.Текст = "ВЫБРАТЬ | ВидыКонтактнойИнформации.Ссылка, - | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |КОНЕЦ КАК ИмяПредопределенногоВида |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ @@ -2528,8 +2723,8 @@ | ТИПЗНАЧЕНИЯ(ТаблицаСКонтактнойИнформацией.Ссылка)"; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Справочник") Тогда - ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 11); + Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, "Справочник") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, 11); Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда КонтактнаяИнформация = Метаданные.Справочники[ИмяОбъекта].ТабличныеЧасти.КонтактнаяИнформация; @@ -2538,8 +2733,8 @@ Разделитель = " ОБЪЕДИНИТЬ ВСЕ "; КонецЕсли; КонецЕсли; - ИначеЕсли СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Документ") Тогда - ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 9); + ИначеЕсли СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, "Документ") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, 9); Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда КонтактнаяИнформация = Метаданные.Документы[ИмяОбъекта].ТабличныеЧасти.КонтактнаяИнформация; @@ -2612,6 +2807,51 @@ КонецПроцедуры +// Удаляет информацию о соответствии элемента справочника виде контактной информации предопределенному значению, +// которое помечено как удаленное. Для однократного вызова в обработчиках обновления по отказу от предопределенных +// элементов справочника ВидыКонтактнойИнформации. +// +Процедура СнятьПризнакПредопределенныйДляВидовКонтактнойИнформации() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК ВидКИ, + | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | ЕСТЬNULL(ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных, """") КАК Группа, + | ВидыКонтактнойИнформации.ИмяПредопределенногоВида КАК ИмяПредопределенногоВида, + | ВидыКонтактнойИнформации.Предопределенный КАК Предопределенный + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации"; + + ВидыКонтактнойИнформации = Запрос.Выполнить().Выгрузить(); + ВидыКонтактнойИнформации.Индексы.Добавить("ИмяПредопределенногоВида"); + + Для каждого Вид Из ВидыКонтактнойИнформации Цикл + + Если Не Вид.Предопределенный Или Не СтрНачинаетсяС(НРег(Вид.ИмяПредопределенныхДанных), "удалить") Тогда + Продолжить; + КонецЕсли; + + ИмяПредопределенногоВида = Сред(Вид.ИмяПредопределенныхДанных, 8); + Если ВидыКонтактнойИнформации.Найти(ИмяПредопределенногоВида, "ИмяПредопределенногоВида") <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ОбъектВидКИ = Вид.ВидКИ.ПолучитьОбъект(); + Если Не ОбъектВидКИ.ЭтоГруппа Тогда + ОбъектВидКИ.ИмяГруппы = Сред(Вид.Группа, 8); + КонецЕсли; + + ОбъектВидКИ.ИмяПредопределенногоВида = ИмяПредопределенногоВида; + ОбъектВидКИ.ИмяПредопределенныхДанных = ""; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ОбъектВидКИ); + + КонецЦикла; + + +КонецПроцедуры + #Область УстаревшиеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -2622,13 +2862,13 @@ // XDTO пакетам КонтактнаяИнформация и Адрес. // Для адресов, введенных в свободной форме, корректное преобразование не гарантируется. // -// Параметры: -// Представление - Строка - Строковое представление контактной информации, выводимое пользователю. -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, +// Параметры: +// Представление - Строка - Строковое представление контактной информации, выводимое пользователю. +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, // Структура - Вид или тип контактной информации. // // Возвращаемое значение: -// Строка - Контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. +// Строка - Контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. // Функция КонтактнаяИнформацияXMLПоПредставлению(Представление, ОжидаемыйВид) Экспорт @@ -2755,7 +2995,7 @@ // ДополнительныеПараметры - Структура - параметры контактной информации. // * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать. // * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса. -// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов. +// * ПолноеНаименованиеСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов. // * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. // Возвращаемое значение: // Массив - содержит массив структур, содержимое структуры см. описание функции РаботаСАдресами.СведенияОбАдресе. @@ -2779,7 +3019,7 @@ // ДополнительныеПараметры - Структура - параметры контактной информации. // * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать. // * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса. -// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов. +// * ПолноеНаименованиеСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов. // * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. // Возвращаемое значение: // Структура - набор пар ключ-значение. Состав свойств для адреса: @@ -2955,9 +3195,9 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти КАК НомерСтроки, - | КонтактнаяИнформация.Представление КАК Представление, - | КонтактнаяИнформация.ЗначенияПолей + | ЕСТЬNULL(КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти, 0) КАК НомерСтроки, + | ЕСТЬNULL(КонтактнаяИнформация.Представление, "") КАК Представление, + | ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, "") |ИЗ | СрезКонтактнойИнформации КАК СрезКонтактнойИнформации | ЛЕВОЕ СОЕДИНЕНИЕ %1.КонтактнаяИнформация КАК КонтактнаяИнформация @@ -3159,35 +3399,6 @@ #Область СлужебныйПрограммныйИнтерфейс -// Возвращает сведения о телефоне или факсе. -// -// Параметры: -// КонтактнаяИнформация - Строка - адрес во внутреннем формате JSON или в XML, соответствующем XDTO пакету Адрес. -// -// Возвращаемое значение: -// Структура - сведения об телефона: -// * Представление - Строка - представление телефона. -// * КодСтраны - Строка - Код страны. Например, +7. -// * КодГорода - Строка - Код города. Например, 495. -// * НомерТелефона - Строка - Номер телефона. -// * Добавочный - Строка - Добавочный номер телефона. -// * Комментарий - Строка - Комментарий к номеру телефона. -// -Функция СведенияОТелефоне(КонтактнаяИнформация) Экспорт - - ТелефонаПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Телефон); - Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейТелефона(); - Результат.Представление = Строка(ТелефонаПоПолям.Value); - Результат.КодСтраны = Строка(ТелефонаПоПолям.CountryCode); - Результат.КодГорода = Строка(ТелефонаПоПолям.AreaCode); - Результат.НомерТелефона = Строка(ТелефонаПоПолям.Number); - Результат.Добавочный = Строка(ТелефонаПоПолям.ExtNumber); - Результат.Комментарий = Строка(ТелефонаПоПолям.Comment); - - Возврат Результат; - -КонецФункции - // Устанавливает доступность элементов контактной информации на форме. // // Параметры: @@ -3292,7 +3503,11 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВидыКонтактнойИнформации.Ссылка КАК Ссылка, - | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |КОНЕЦ КАК ИмяПредопределенногоВида |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ @@ -3302,7 +3517,7 @@ РезультатЗапроса = Запрос.Выполнить().Выбрать(); Пока РезультатЗапроса.Следующий() Цикл - Если СтрСравнить(РезультатЗапроса.ИмяПредопределенныхДанных, ИмяГруппыВидовКИ) = 0 Тогда + Если СтрСравнить(РезультатЗапроса.ИмяПредопределенногоВида, ИмяГруппыВидовКИ) = 0 Тогда ГруппаВидовКИ = РезультатЗапроса.Ссылка; Прервать; КонецЕсли; @@ -3338,6 +3553,7 @@ КонецФункции // Возвращает полные данные ОКСМ классификатора. +// Таблица значений в макете проиндексирована по полям "Код", "Наименование". // // Возвращаемое значение: // ТаблицаЗначений - данные классификатора с колонками: @@ -3347,8 +3563,6 @@ // * КодАльфа2 - Строка - данные страны. // * КодАльфа3 - Строка - данные страны. // -// Таблица значений проиндексирована по полям "Код", "Наименование". -// Функция ТаблицаКлассификатора() Экспорт Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор"); @@ -3377,11 +3591,13 @@ //////////////////////////////////////////////////////////////////////////////// // Инициализация элементов на форме объект-владельца контактной информации. -Процедура СоздатьРеквизитыКонтактнойИнформации(Знач Форма, Знач ДобавляемыеРеквизиты, Знач ИмяОбъекта, Знач ИсключаемыеВиды, - Знач КонтактнаяИнформация, Знач ОтложеннаяИнициализация) +Процедура СоздатьРеквизитыКонтактнойИнформации(Знач Форма, Знач ДобавляемыеРеквизиты, Знач ИмяОбъекта, Знач ИсключаемыеВиды, + Знач КонтактнаяИнформация, Знач ОтложеннаяИнициализация, Знач ОбработкаНавигационнойСсылки) - Строка1500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1500)); - СозданныеРеквизиты = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИсключаемыеВиды); + Строка1500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1500)); + ФорматированнаяСтрока = Новый ОписаниеТипов("ФорматированнаяСтрока"); + + СозданныеРеквизиты = ОбщегоНазначения.СкопироватьРекурсивно(ИсключаемыеВиды); ПредыдущийВид = Неопределено; ПорядковыйНомер = 1; @@ -3389,7 +3605,7 @@ Если ОбъектКонтактнойИнформации.ЭтоРеквизитТабличнойЧасти Тогда - ИмяВидаКИ = ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; + ИмяВидаКИ = ОбъектКонтактнойИнформации.ИмяПредопределенногоВида; Позиция = СтрНайти(ИмяВидаКИ, ИмяОбъекта); ИмяТабличнойЧасти = Сред(ИмяВидаКИ, Позиция + СтрДлина(ИмяОбъекта)); @@ -3438,11 +3654,17 @@ ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x") + ПорядковыйНомер; Если Не ОтложеннаяИнициализация Тогда + + ТипРеквизита = Строка1500; + Если ОбъектКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница И ОбработкаНавигационнойСсылки Тогда + ТипРеквизита = ФорматированнаяСтрока; + КонецЕсли; + ДобавляемыеРеквизиты.Добавить( - Новый РеквизитФормы(ОбъектКонтактнойИнформации.ИмяРеквизита, Строка1500, , ОбъектКонтактнойИнформации.Наименование, Истина)); + Новый РеквизитФормы(ОбъектКонтактнойИнформации.ИмяРеквизита, ТипРеквизита,, ОбъектКонтактнойИнформации.Наименование, Истина)); КонецЕсли; Иначе - ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; + ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + ОбъектКонтактнойИнформации.ИмяПредопределенногоВида; СозданныеРеквизиты.Удалить(Индекс); КонецЕсли; @@ -3620,8 +3842,17 @@ НоваяСтрока.ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения; НоваяСтрока.ЭтоРеквизитТабличнойЧасти = Ложь; + ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); + ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки; + + Если ОбработкаНавигационнойСсылки = Истина Тогда + ОписаниеТипаРеквизита = Новый ОписаниеТипов("ФорматированнаяСтрока"); + Иначе + ОписаниеТипаРеквизита = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)); + КонецЕсли; + МассивДобавляемыхРеквизитов = Новый Массив; - МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)), , ИнформацияОВидеКИ.Наименование, Истина)); + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита, ОписаниеТипаРеквизита,, ИнформацияОВидеКИ.Наименование, Истина)); Форма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов); ЕстьКомментарий = Ложь; @@ -3636,6 +3867,10 @@ // Отрисовка на форме ГруппаСтроки = Группа("Группа" + ИмяРеквизита, Форма, ДобавляемыйВид.Наименование, ИмяЭлементаДляРазмещения); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ГруппаСтроки.ОтображатьЗаголовок = Истина; + КонецЕсли; + Родитель = Родитель(Форма, ИмяЭлементаДляРазмещения); Если Не ЭтоПоследняяСтрока Тогда Если СледующаяСтрока = Неопределено Тогда @@ -3688,6 +3923,11 @@ КонецЕсли; ПолеВвода = СоздатьПолеВвода(Форма, ГруппаСтроки, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ, ОбязательноеЗаполнение); + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + КонецЕсли; + Если ЕстьКомментарий Тогда ПолеВвода.РасширеннаяПодсказка.Заголовок = ИнформацияОВидеКИ.Комментарий; ПолеВвода.РасширеннаяПодсказка.АвтоМаксимальнаяШирина = Ложь; @@ -3726,6 +3966,7 @@ Функция СоздатьПолеВвода(Форма, Родитель, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения,ЭтоНовыйВидКИ = Ложь, ОбязательноеЗаполнение = Ложь) ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); + ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки; ЗаголовокСлева = ЗаголовокСлева(ПараметрыКонтактнойИнформации.ПоложениеЗаголовка); Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Родитель); @@ -3738,13 +3979,35 @@ Если ПустаяСтрока(Форма[ИмяРеквизита]) Тогда Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); КонецЕсли; + + ИначеЕсли ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница И ОбработкаНавигационнойСсылки Тогда + + Элемент.Вид = ВидПоляФормы.ПолеНадписи; + Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_КонтактнаяИнформацияОбработкаНавигационнойСсылки"); + + Если ТипЗнч(ИнформацияОВидеКИ) <> Тип("Структура") И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ИнформацияОВидеКИ.Значение) Тогда + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ИнформацияОВидеКИ.Значение); + АдресСайта = КонтактнаяИнформация.value; + Представление = ?(КонтактнаяИнформация.Свойство("name") И ЗначениеЗаполнено(КонтактнаяИнформация.name), КонтактнаяИнформация.name, ИнформацияОВидеКИ.Представление); + Иначе + АдресСайта = ""; + Представление = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); + КонецЕсли; + + Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.АдресСайта(Представление, АдресСайта); + Иначе + Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.УстановитьДействие("Очистка", "Подключаемый_КонтактнаяИнформацияОчистка"); Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда Элемент.УстановитьДействие("Автоподбор", "Подключаемый_КонтактнаяИнформацияАвтоподбор"); Элемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_КонтактнаяИнформацияОбработкаВыбора"); + + КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элемент.МногострочныйРежим = Истина; КонецЕсли; КонецЕсли; @@ -3752,7 +4015,8 @@ Элемент.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; Элемент.РастягиватьПоГоризонтали = Ложь; Элемент.РастягиватьПоВертикали = Ложь; - Элемент.ВысотаЗаголовка = 2; + + Элемент.ВысотаЗаголовка = ?(ОбщегоНазначения.ЭтоМобильныйКлиент(), 1, 2); Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда Элемент.Ширина = 70; @@ -3870,7 +4134,7 @@ Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип) И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда - Элемент.КнопкаВыбора = Не ИнформацияОВидеКИ.ПометкаУдаления;; + Элемент.КнопкаВыбора = Не ИнформацияОВидеКИ.ПометкаУдаления; Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда Элемент.РедактированиеТекста = Ложь; Элемент.ЦветФона = ЦветаСтиля.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет; @@ -3954,13 +4218,17 @@ Группа = Форма.Элементы.Найти(ИмяГруппы); Если Группа = Неопределено Тогда - Группа = Форма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), Родитель(Форма, ИмяЭлементаДляРазмещения)); + Родитель = Родитель(Форма, ИмяЭлементаДляРазмещения); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Родитель.ШрифтЗаголовка = Новый Шрифт(,, Истина); + КонецЕсли; + Группа = Форма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), Родитель); Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; Группа.Заголовок = Заголовок; Группа.ОтображатьЗаголовок = Ложь; Группа.РазрешитьИзменениеСостава = Ложь; Группа.Отображение = ОтображениеОбычнойГруппы.Нет; - Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяГруппы, 5); КонецЕсли; @@ -4165,7 +4433,11 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных КАК ИмяВидаКонтактнойИнформации + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.Родитель.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.Родитель.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных + |КОНЕЦ КАК ИмяВидаКонтактнойИнформации |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ @@ -4175,14 +4447,34 @@ РезультатЗапроса = Запрос.Выполнить().Выбрать(); Если РезультатЗапроса.Следующий() Тогда - Возврат Сред(РезультатЗапроса.ИмяВидаКонтактнойИнформации, - СтрНайти(РезультатЗапроса.ИмяВидаКонтактнойИнформации, ИмяОбъекта) + СтрДлина(ИмяОбъекта)); + Возврат Сред(РезультатЗапроса.ИмяВидаКонтактнойИнформации, + СтрНайти(РезультатЗапроса.ИмяВидаКонтактнойИнформации, ИмяОбъекта) + СтрДлина(ИмяОбъекта)); КонецЕсли; Возврат ""; КонецФункции +Процедура ЗаполнитьТаблицуВидовКИ(ТаблицаВидов, ВетвьДерева) + + Для каждого СтрокаВида Из ВетвьДерева.Строки Цикл + + Группа = ТаблицаВидов.Добавить(); + Группа.Имя = СтрокаВида.Имя; + Группа.Наименование = СтрокаВида.Наименование; + Если СтрокаВида.Родитель <> Неопределено Тогда + Группа.Группа = ВетвьДерева.Наименование; + Группа.ИмяГруппы = ВетвьДерева.Имя; + КонецЕсли; + + Если СтрокаВида.Строки.Количество() > 0 Тогда + ЗаполнитьТаблицуВидовКИ(ТаблицаВидов, СтрокаВида); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + // Возвращает имена табличных частей документа по виду контактной информации. // // Параметры: @@ -4205,7 +4497,11 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных КАК ИмяТабличнойЧасти, + | ВЫБОР + | КОГДА ВидыКонтактнойИнформации.Родитель.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.Родитель.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных + | КОНЕЦ КАК ИмяТабличнойЧасти, | ВидыКИ.ВидКИ КАК ВидКонтактнойИнформации |ИЗ | ВидыКИ КАК ВидыКИ @@ -4236,7 +4532,7 @@ Функция ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Знач Форма, Знач ПроверяемаяСтрока, Знач ВидКонтактнойИнформации) ВсеСтрокиЭтогоВида = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки( - Новый Структура("Вид", ВидКонтактнойИнформации)); + Новый Структура("Вид", ВидКонтактнойИнформации)); Для Каждого СтрокаВида Из ВсеСтрокиЭтогоВида Цикл @@ -4255,13 +4551,34 @@ Процедура ВывестиСообщениеПользователю(ТекстСообщения, ИмяРеквизита, ПолеРеквизита) ИмяРеквизита = ?(ПустаяСтрока(ПолеРеквизита), ИмяРеквизита, ""); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, ПолеРеквизита, ИмяРеквизита); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, ПолеРеквизита, ИмяРеквизита); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Заполнение дополнительных реквизитов табличной части "Контактная информация". +Процедура КонвертацияКонтактнойИнформацииВJSON(КонтактнаяИнформация) + + // Конвертация + Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл + Если ПустаяСтрока(СтрокаКИ.Значение) Тогда + Если ЗначениеЗаполнено(СтрокаКИ.ЗначенияПолей) Тогда + + КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(СтрокаКИ.ЗначенияПолей, + СтрокаКИ.Тип, СтрокаКИ.Представление, Ложь); + СтрокаКИ.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформацияПоПолям); + + ИначеЕсли ЗначениеЗаполнено(СтрокаКИ.Представление) Тогда + + СтрокаКИ.Значение = КонтактнаяИнформацияПоПредставлению(СтрокаКИ.Представление, СтрокаКИ.Тип); + + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + Процедура СоздатьЭлементыТабличнойЧасти(Знач Форма, Знач ИмяОбъекта, ИмяЭлементаДляРазмещения, Знач СтрокаКонтактнойИнформации, Знач ДанныеВидовКонтактнойИнформации) @@ -4272,7 +4589,10 @@ ДанныеВидовКонтактнойИнформацииТЧ = УправлениеКонтактнойИнформациейСлужебный.ДанныеВидовКонтактнойИнформации( ВидыКонтактнойИнформацииТЧ); - ИмяВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид].ИмяПредопределенныхДанных; + ИмяВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид].ИмяПредопределенногоВида; + Если ПустаяСтрока(ИмяВидаКонтактнойИнформации) Тогда + ИмяВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид].ИмяПредопределенныхДанных; + КонецЕсли; Позиция = СтрНайти(ИмяВидаКонтактнойИнформации, ИмяОбъекта); ИмяТабличнойЧасти = Сред(ИмяВидаКонтактнойИнформации, Позиция + СтрДлина(ИмяОбъекта)); ПредыдущийВидТЧ = Неопределено; @@ -4363,7 +4683,6 @@ СтрокаТабличнойЧасти.Регион = ""; СтрокаТабличнойЧасти.Город = ""; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если Адрес.Свойство("Country") Тогда СтрокаТабличнойЧасти.Страна = Адрес.Country; @@ -4456,7 +4775,7 @@ Иначе АдресСтраницы = Источник.Состав; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(); Если АдресСтраницы <> Неопределено И АдресСтраницы.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда АдресСтрокой = АдресСтраницы.Значение; КонецЕсли; @@ -4672,7 +4991,7 @@ КонецЕсли; Если РезультатПреобразования.Свойство("ТекстОшибки") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатПреобразования.ТекстОшибки, , СтрокаКИ.ИмяРеквизита); + ОбщегоНазначения.СообщитьПользователю(РезультатПреобразования.ТекстОшибки, , СтрокаКИ.ИмяРеквизита); КонецЕсли; Форма.Модифицированность = Истина; @@ -4823,6 +5142,7 @@ ПараметрыКонтактнойИнформации.Вставить("СписокДобавляемыхЭлементов", Новый СписокЗначений); ПараметрыКонтактнойИнформации.Вставить("МожноОтправлятьSMS", МожноОтправлятьSMS); ПараметрыКонтактнойИнформации.Вставить("Владелец", Неопределено); + ПараметрыКонтактнойИнформации.Вставить("ОбработкаНавигационнойСсылки", Ложь); ПараметрыАдреса = Новый Структура("ТипПомещения, Страна, Индекс", "Квартира"); ПараметрыКонтактнойИнформации.Вставить("ПараметрыАдреса", ПараметрыАдреса); @@ -4834,7 +5154,38 @@ Функция ГруппаВидовКонтактнойИнформацииОбъекта(Знач ПолноеИмяОбъектаМетаданных) - Возврат Справочники.ВидыКонтактнойИнформации[СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", "")]; + Возврат ВидКонтактнойИнформацииПоИмени(СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", "")); + +КонецФункции + +// Возвращает виды контактной информации по имени. +// Если имя не указано, то возвращается полный список программно предопределенных видов. +// +// Возвращаемое значение: +// ТаблицаЗначений - Виды контактной информации. +// * Имя - Строка - Имя вида контактной информации. +// * Ссылка - СправочникСсылка.ВидыКонтактнойИнформации - Ссылка на элемент справочника виды контактной информации. +// +Функция ПредопределенныеВидыКонтактнойИнформации(Имя = "") Экспорт + + ТекстЗапроса = "ВЫБРАТЬ + | ВидыКонтактнойИнформации.ИмяПредопределенногоВида КАК Имя, + | ВидыКонтактнойИнформации.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | &Отбор"; + + Запрос = Новый Запрос(); + Если ЗначениеЗаполнено(Имя) Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Отбор", "ВидыКонтактнойИнформации.ИмяПредопределенногоВида = &Имя"); + Запрос.УстановитьПараметр("Имя", Имя); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Отбор", "ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """""); + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; + Возврат Запрос.Выполнить().Выгрузить(); КонецФункции @@ -4868,9 +5219,15 @@ Процедура СоздатьДействие(Форма, ВидКонтактнойИнформации, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий = Ложь, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") + ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); + ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки; + Тип = ВидКонтактнойИнформации.Тип; СоздаватьДействиеДляТипа = Новый Соответствие(); - СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.ВебСтраница, Истина); + Если Не ОбработкаНавигационнойСсылки Тогда + СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.ВебСтраница, Истина); + КонецЕсли; + СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты, Истина); СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.Телефон, Истина); СоздаватьДействиеДляТипа.Вставить(Перечисления.ТипыКонтактнойИнформации.Адрес, ?(КоличествоАдресов > 1, Истина, Ложь)); @@ -4889,16 +5246,29 @@ СоздаватьДействиеДляТипа[Тип] = Ложь; КонецЕсли; - ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); Если СоздаватьДействиеДляТипа[Тип] = Истина Тогда Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда ГруппаПодменюВерхнийУровень = Форма.Элементы.Добавить("КоманднаяПанель" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаДействий); ГруппаПодменюВерхнийУровень.Вид = ВидГруппыФормы.КоманднаяПанель; + ГруппаПодменю = Форма.Элементы.Добавить("Подменю" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаПодменюВерхнийУровень); + ГруппаПодменю.Заголовок = НСтр("ru='Контактная информация'"); ГруппаПодменю.Вид = ВидГруппыФормы.Подменю; ГруппаПодменю.Картинка = БиблиотекаКартинок.МенюДополнительныеФункции; ГруппаПодменю.Отображение = ОтображениеКнопки.Картинка; + ГруппаПодменю.РастягиватьПоГоризонтали = Ложь; + + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ГруппаДействий.ОтображатьЗаголовок = Истина; + + ГруппаПодменюВерхнийУровень.РастягиватьПоГоризонтали = Ложь; + ГруппаПодменюВерхнийУровень.Ширина = 5; + ГруппаПодменюВерхнийУровень.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право; + ГруппаПодменюВерхнийУровень.ВертикальноеПоложениеВГруппе = ВертикальноеПоложениеЭлемента.Центр; + КонецЕсли; + Иначе ГруппаПодменю = ГруппаДействий; @@ -4911,6 +5281,12 @@ Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; Элемент = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаПодменю); + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элемент.ВертикальноеПоложениеВГруппе = ВертикальноеПоложениеЭлемента.Центр; + Элемент.Ширина = 5; + КонецЕсли; + ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 2); Элемент.ИмяКоманды = ИмяКоманды; КонецЕсли; @@ -4990,18 +5366,18 @@ КонецЕсли; - ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда - - Элемент.Заголовок = НСтр("ru = 'Перейти'"); - Команда.Подсказка = НСтр("ru = 'Перейти по ссылке'"); - Команда.Картинка = БиблиотекаКартинок.КонтактнаяИнформацияПерейтиПоСсылке; - ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда Элемент.Заголовок = НСтр("ru = 'Написать письмо'"); Команда.Подсказка = НСтр("ru = 'Написать письмо'"); Команда.Картинка = БиблиотекаКартинок.ОтправитьЭлектронноеПисьмо; + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + + Элемент.Заголовок = НСтр("ru = 'Перейти'"); + Команда.Подсказка = НСтр("ru = 'Перейти по ссылке'"); + Команда.Картинка = БиблиотекаКартинок.КонтактнаяИнформацияПерейтиПоСсылке; + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Если Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].МожноОтправлятьSMS Тогда Элемент.Заголовок = НСтр("ru = 'Позвонить или отправить SMS'"); @@ -5061,13 +5437,18 @@ КонецФункции -Функция ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата) +Функция ЗапрещенВводНесколькихЗначений(ВидКонтактнойИнформации, КонтактнаяИнформация, Дата, ИдентификаторСтрокиТабличнойЧасти = Неопределено) Если ВидКонтактнойИнформации.РазрешитьВводНесколькихЗначений Тогда Возврат Ложь; КонецЕсли; Отбор = Новый Структура("Вид", ВидКонтактнойИнформации); + + Если ИдентификаторСтрокиТабличнойЧасти <> Неопределено Тогда + Отбор.Вставить("ИдентификаторСтрокиТабличнойЧасти", ИдентификаторСтрокиТабличнойЧасти); + КонецЕсли; + Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда Отбор.Вставить("ДействуетС", Дата); КонецЕсли; @@ -5093,7 +5474,7 @@ Процедура ВосстановитьПустыеЗначениеПредставление(СтрокаКонтактнойИнформации) - Если ПустаяСтрока(СтрокаКонтактнойИнформации.Тип) Тогда + Если ПустаяСтрока(СтрокаКонтактнойИнформации.Тип) Тогда СтрокаКонтактнойИнформации.Тип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации( СтрокаКонтактнойИнформации.Вид); КонецЕсли; @@ -5116,9 +5497,13 @@ Если ПустоеПредставление Тогда - ФорматКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаКонтактнойИнформации.Вид, + ФорматКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаКонтактнойИнформации.Вид, "Тип, ВключатьСтрануВПредставление, ПроверятьПоФИАС"); - ФорматКонтактнойИнформации.Вставить("ФорматАдреса", "ФИАС"); + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + МодульРаботаСАдресами.ОпределитьФорматКонтактнойИнформации(ФорматКонтактнойИнформации); + КонецЕсли; ИсточникЗначений = ?(ПустыеЗначенияПолей, СтрокаКонтактнойИнформации.Значение, СтрокаКонтактнойИнформации.ЗначенияПолей); @@ -5149,7 +5534,7 @@ ИначеЕсли ПустыеЗначенияПолей И ЕстьЗначенияПолей Тогда - СтрокаКонтактнойИнформации.ЗначенияПолей = КонтактнаяИнформацияВXML(СтрокаКонтактнойИнформации.Значение, + СтрокаКонтактнойИнформации.ЗначенияПолей = КонтактнаяИнформацияВXML(СтрокаКонтактнойИнформации.Значение, СтрокаКонтактнойИнформации.Представление, СтрокаКонтактнойИнформации.Вид); КонецЕсли; @@ -5300,4 +5685,272 @@ Возврат Результат; КонецФункции +Функция КонтактнаяИнформацияИзРеквизитовФормы(Форма, Объект) + + КонтактнаяИнформация = НоваяКонтактнаяИнформация(Ложь); + + МетаданныеОбъекта = Объект.Ссылка.Метаданные(); + ИмяОбъектаМетаданных = МетаданныеОбъекта.Имя; + ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя(); + ГруппаВидовКонтактнойИнформации = ГруппаВидовКонтактнойИнформацииОбъекта(ПолноеИмяОбъектаМетаданных); + ИменаТабличныхЧастейПоВидамКИ = Неопределено; + + Для Каждого СтрокаТаблицы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл + + ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита; + + Элемент = Форма.Элементы.Найти(ИмяРеквизита); + Если Элемент <> Неопределено Тогда + Если Элемент.Вид = ВидПоляФормы.ПолеНадписи И Элемент.Гиперссылка Тогда + Если ПустаяСтрока(СтрокаТаблицы.Представление) + ИЛИ СтрокаТаблицы.Представление = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки() Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ВосстановитьПустыеЗначениеПредставление(СтрокаТаблицы); + + Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда + + Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда + Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина); + ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор, "Вид"); + ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъектаМетаданных); + КонецЕсли; + + ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[СтрокаТаблицы.Вид]; + ТабличнаяЧастьФормы = Форма.Объект[ИмяТабличнойЧасти]; + Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл + + ИдентификаторСтроки = СтрокаТабличнойЧастиФормы.ПолучитьИдентификатор(); + СтрокаТабличнойЧастиФормы.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки; + + СтрокаТабличнойЧасти = Объект[ИмяТабличнойЧасти][СтрокаТабличнойЧастиФормы.НомерСтроки - 1]; + СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки; + + Значение = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"]; + + ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, Значение, ИдентификаторСтроки); + + КонецЦикла; + + Иначе + + Если СтрокаТаблицы.Вид.Родитель <> ГруппаВидовКонтактнойИнформации Тогда + Продолжить; + КонецЕсли; + + ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, СтрокаТаблицы.Значение); + + КонецЕсли; + + КонецЦикла; + + Возврат КонтактнаяИнформация; + +КонецФункции + +Процедура ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, Знач Значение, Знач ИдентификаторСтроки = Неопределено) + + Если ПустаяСтрока(Значение) Тогда + Возврат; + КонецЕсли; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Значение) Тогда + ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(Значение, СтрокаТаблицы.Тип); + Иначе + ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(Значение); + КонецЕсли; + + Если Не УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияЗаполнена(ОбъектКИ) Тогда + Возврат; + КонецЕсли; + + СтрокаКонтактнойИнформации = КонтактнаяИнформация.Добавить(); + + ДействуетС = ?(СтрокаТаблицы.Свойство("ДействуетС"), СтрокаТаблицы.ДействуетС, Неопределено); + ЗаполнитьЗначенияСвойств(СтрокаКонтактнойИнформации, СтрокаТаблицы, "Вид,Тип"); + + СтрокаКонтактнойИнформации.Представление = ОбъектКИ.Value; + СтрокаКонтактнойИнформации.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ОбъектКИ); + СтрокаКонтактнойИнформации.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзJSONВXML(ОбъектКИ, СтрокаТаблицы.Тип); + + Если ЗначениеЗаполнено(ДействуетС) Тогда + СтрокаКонтактнойИнформации.Дата = ДействуетС; + КонецЕсли; + + СтрокаКонтактнойИнформации.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки; + +КонецПроцедуры + +// Виды контактной информации + +Функция ОписаниеПараметровВидаКонтактнойИнформации(Знач УстанавливаемыйТип) + + ПараметрыВида = ОписаниеОбщихПараметровВидаКонтактнойИнформации(); + + ПараметрыВида.Вставить("Вид"); + ПараметрыВида.Вставить("Порядок"); + ПараметрыВида.Вставить("Тип", УстанавливаемыйТип); + ПараметрыВида.Вставить("МожноИзменятьСпособРедактирования", Ложь); + ПараметрыВида.Вставить("РедактированиеТолькоВДиалоге", Ложь); + ПараметрыВида.Вставить("ОбязательноеЗаполнение", Ложь); + ПараметрыВида.Вставить("РазрешитьВводНесколькихЗначений", Ложь); + ПараметрыВида.Вставить("ЗапретитьРедактированиеПользователем", Ложь); + ПараметрыВида.Вставить("ХранитьИсториюИзменений", Ложь); + ПараметрыВида.Вставить("МеждународныйФорматАдреса", Ложь); + + Если УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + НастройкиПроверки = Новый Структура; + НастройкиПроверки.Вставить("ТолькоНациональныйАдрес", Ложь); + НастройкиПроверки.Вставить("ПроверятьКорректность", Ложь); + НастройкиПроверки.Вставить("СкрыватьНеактуальныеАдреса", Ложь); + НастройкиПроверки.Вставить("ПроверятьПоФИАС", Истина); + НастройкиПроверки.Вставить("ВключатьСтрануВПредставление", Ложь); + НастройкиПроверки.Вставить("УказыватьОКТМО", Ложь); + ИначеЕсли УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда + НастройкиПроверки = Новый Структура; + НастройкиПроверки.Вставить("ПроверятьКорректность", Ложь); + ИначеЕсли УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + НастройкиПроверки = Новый Структура; + НастройкиПроверки.Вставить("ТелефонCДобавочнымНомером", Истина); + Иначе + Если УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда + ПараметрыВида.Вставить("ВидПоляДругое", "ОднострочноеШирокое"); + КонецЕсли; + НастройкиПроверки = Неопределено; + КонецЕсли; + + ПараметрыВида.Вставить("НастройкиПроверки", НастройкиПроверки); + Возврат ПараметрыВида; + +КонецФункции + +Функция ПараметрыИзВидаКонтактнойИнформации(Знач ВидКонтактнойИнформации) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВидыКонтактнойИнформации.Ссылка КАК Ссылка, + | ВидыКонтактнойИнформации.Родитель КАК Родитель, + | ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоГруппа, + | ВидыКонтактнойИнформации.Наименование КАК Наименование, + | ВидыКонтактнойИнформации.ТолькоНациональныйАдрес КАК ТолькоНациональныйАдрес, + | ВидыКонтактнойИнформации.ВидПоляДругое КАК ВидПоляДругое, + | ВидыКонтактнойИнформации.ВключатьСтрануВПредставление КАК ВключатьСтрануВПредставление, + | ВидыКонтактнойИнформации.ЗапретитьРедактированиеПользователем КАК ЗапретитьРедактированиеПользователем, + | ВидыКонтактнойИнформации.Используется КАК Используется, + | ВидыКонтактнойИнформации.МожноИзменятьСпособРедактирования КАК МожноИзменятьСпособРедактирования, + | ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение, + | ВидыКонтактнойИнформации.ПроверятьКорректность КАК ПроверятьКорректность, + | ВидыКонтактнойИнформации.РазрешитьВводНесколькихЗначений КАК РазрешитьВводНесколькихЗначений, + | ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге, + | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, + | ВидыКонтактнойИнформации.СкрыватьНеактуальныеАдреса КАК СкрыватьНеактуальныеАдреса, + | ВидыКонтактнойИнформации.ТелефонCДобавочнымНомером КАК ТелефонCДобавочнымНомером, + | ВидыКонтактнойИнформации.Тип КАК Тип, + | ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений, + | ВидыКонтактнойИнформации.ИмяПредопределенногоВида КАК Имя, + | ВидыКонтактнойИнформации.МеждународныйФорматАдреса КАК МеждународныйФорматАдреса + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", ВидКонтактнойИнформации); + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + + Если РезультатЗапроса.Количество() = 0 Тогда + ШаблонТекстаОшибки = НСтр("ru='При получении свойств контактной информации был передан неверный вид контактной информации. %1'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки , Строка(ВидКонтактнойИнформации)); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Тип = РезультатЗапроса[0].Тип; + + ТекущиеПараметры = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(РезультатЗапроса[0]); + ПараметрыВида = ОписаниеПараметровВидаКонтактнойИнформации(Тип); + ЗаполнитьЗначенияСвойств(ПараметрыВида,ТекущиеПараметры); + + Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + + ЗаполнитьЗначенияСвойств(ПараметрыВида.НастройкиПроверки, ТекущиеПараметры, "ВключатьСтрануВПредставление, + |ПроверятьКорректность,СкрыватьНеактуальныеАдреса,ТолькоНациональныйАдрес"); + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + МодульРаботаСАдресами.ДополнитьНастройкиПроверкиАдреса(ПараметрыВида, ВидКонтактнойИнформации); + КонецЕсли; + + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда + ПараметрыВида.НастройкиПроверки.ПроверятьКорректность = ТекущиеПараметры.ПроверятьКорректность; + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + ПараметрыВида.НастройкиПроверки.ТелефонCДобавочнымНомером = ТекущиеПараметры.ТелефонCДобавочнымНомером; + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда + ПараметрыВида.НастройкиПроверки.ВидПоляДругое = ТекущиеПараметры.ВидПоляДругое; + КонецЕсли; + + ПараметрыВида.Вид = РезультатЗапроса[0].Ссылка; + + Возврат ПараметрыВида; + +КонецФункции + +Функция ОбъектВидаКонтактнойИнформации(Имя, ЭтоГруппа = Ложь) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВидыКонтактнойИнформации.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ИмяПредопределенногоВида = &Имя + | И ВидыКонтактнойИнформации.ЭтоГруппа = &ЭтоГруппа"; + + Запрос.УстановитьПараметр("Имя", Имя); + Запрос.УстановитьПараметр("ЭтоГруппа", ЭтоГруппа); + + РезультатЗапроса = Запрос.Выполнить(); + Если Не РезультатЗапроса.Пустой() Тогда + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить(); + Ссылка = ВыборкаДетальныеЗаписи[0].Ссылка; + Возврат Ссылка.ПолучитьОбъект(); + КонецЕсли; + + ИменаПредопределенных = Метаданные.Справочники.ВидыКонтактнойИнформации.ПолучитьИменаПредопределенных(); + ИмяПредопределенного = ИменаПредопределенных.Найти(Имя); + + Если ИмяПредопределенного <> Неопределено Тогда + Объект = Справочники.ВидыКонтактнойИнформации[Имя].ПолучитьОбъект(); + Объект.ИмяПредопределенногоВида = Имя; + Возврат Объект; + КонецЕсли; + + Если ЭтоГруппа Тогда + НовыйЭлемент = Справочники.ВидыКонтактнойИнформации.СоздатьГруппу(); + Иначе + НовыйЭлемент = Справочники.ВидыКонтактнойИнформации.СоздатьЭлемент(); + КонецЕсли; + + НовыйЭлемент.ИмяПредопределенногоВида = Имя; + + Возврат НовыйЭлемент; + +КонецФункции + +Функция ОписаниеОбщихПараметровВидаКонтактнойИнформации() + + ПараметрыВида = Новый Структура; + ПараметрыВида.Вставить("Имя", ""); + ПараметрыВида.Вставить("Группа", Неопределено); + ПараметрыВида.Вставить("Наименование", ""); + ПараметрыВида.Вставить("Используется", Истина); + + Возврат ПараметрыВида; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index 692f4165f..f43f445fa 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обработчик события ПриИзменении поля формы контактной информации. @@ -279,22 +287,65 @@ КонецПроцедуры -// Обработчик события АвтоПодбор поля формы контактной информации. +// Обработчик навигационной ссылки, для открытия веб страницы // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". // // Параметры: -// Текст - Строка - Строка текста, введенная пользователем в поле контактной информации. -// ДанныеВыбора - СписокЗначений - Содержит список значений, который будет использован при стандартной -// обработке события. -// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной -// (системной) обработки события. Если в теле процедуры-обработчика -// установить данному параметру значение Ложь, стандартная обработка события -// производиться не будет. +// Форма - УправляемаяФорма - Форма владельца контактной информации. +// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. +// НавигационнаяСсылкаФорматированнойСтроки - Строка - Значение гиперссылки форматированной строки. Параметр +// передается по ссылке. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной +// системной) обработки события. Если в теле процедуры-обработчика +// установить данному параметру значение Ложь, стандартная обработка события +// производиться не будет. // -Процедура АвтоПодбор(Знач Текст, ДанныеВыбора, СтандартнаяОбработка = Ложь) Экспорт +Процедура ОбработкаНавигационнойСсылки(Форма, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + АдресСсылки = Форма[Элемент.Имя]; + Если НавигационнаяСсылкаФорматированнойСтроки = УправлениеКонтактнойИнформациейКлиентСервер.НавигационнаяСсылкаВебСайта() Или СокрЛП(Строка(АдресСсылки)) = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки() Тогда + + СтандартнаяОбработкаВыбора = Истина; + НачалоВыбора(Форма, Элемент, истина, СтандартнаяОбработкаВыбора); + + Иначе + ПерейтиПоВебСсылке("", НавигационнаяСсылкаФорматированнойСтроки); + КонецЕсли; + +КонецПроцедуры + +// Обработчик события АвтоПодбор поля формы контактной информации для подбора вариантов адреса по введенной строке. +// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". +// +// Параметры: +// Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. +// Текст - Строка - Строка текста, введенная пользователем в поле контактной информации. +// ДанныеВыбора - СписокЗначений - Содержит список значений, который будет использован при стандартной +// обработке события. +// ПараметрыПолученияДанных - Структура, Неопределено - Содержит параметры поиска, которые будут переданы +// в метод ПолучитьДанныеВыбора. Подробнее см. описание расширения поля формы для +// поля ввода АвтоПодбор в синтакс-помощнике. +// Ожидание - Число - Интервал в секундах после ввода текста, через который произошло событие. +// Если 0, то это означает, что событие было вызвано не по поводу ввода текста, +// а для формирования списка быстрого выбора. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной +// системной) обработки события. Если в теле процедуры-обработчика +// установить данному параметру значение Ложь, стандартная обработка события +// производиться не будет. +// +Процедура АвтоПодборАдреса(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) Экспорт Если СтрДлина(Текст) > 2 Тогда - УправлениеКонтактнойИнформациейСлужебныйВызовСервера.АвтоподборАдреса(Текст, ДанныеВыбора); + СтрокаПоиска = Текст; + ИначеЕсли СтрДлина(Элемент.ТекстРедактирования) > 2 Тогда + СтрокаПоиска = Элемент.ТекстРедактирования; + Иначе + Возврат; + КонецЕсли; + + Если СтрДлина(СтрокаПоиска) > 2 Тогда + УправлениеКонтактнойИнформациейСлужебныйВызовСервера.АвтоподборАдреса(СтрокаПоиска, ДанныеВыбора); Если ТипЗнч(ДанныеВыбора) = Тип("СписокЗначений") Тогда СтандартнаяОбработка = (ДанныеВыбора.Количество() = 0); КонецЕсли; @@ -508,10 +559,7 @@ ПараметрыОтправки = Новый Структура("Получатель", Получатель); МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыОтправки); Иначе - // Нет подсистемы почты, запускаем системное. - Оповещение = Новый ОписаниеОповещения("СоздатьПисьмоПоКонтактнойИнформацииЗавершение", ЭтотОбъект, АдресПочты); - ТекстПредложения = НСтр("ru = 'Для отправки письма необходимо установить расширение для работы с файлами.'"); - ОбщегоНазначенияКлиент.ПроверитьРасширениеРаботыСФайламиПодключено(Оповещение, ТекстПредложения); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("mailto:" + АдресПочты); КонецЕсли; КонецПроцедуры @@ -553,15 +601,24 @@ Если НЕ ЗначениеЗаполнено(НомерПолучателя) Тогда НомерПолучателя = СокрЛП(Представление); КонецЕсли; - НомераПолучателей = Новый Массив; - НомераПолучателей.Добавить(НомерПолучателя); - ДополнительныеПараметры = Новый Структура(); - ДополнительныеПараметры.Вставить("ИмяОтправителя", Неопределено); - ДополнительныеПараметры.Вставить("ПеревестиВТранслит", Ложь); - ДополнительныеПараметры.Вставить("ИсточникКонтактнойИнформации", ИсточникКонтактнойИнформации); + #Если МобильныйКлиент Тогда + SMS = Новый SMSСообщение(); + SMS.Получатели.Добавить(НомерПолучателя); + СредстваТелефонии.ПослатьSMS(SMS, Истина); + Возврат; + #КонецЕсли + + СведенияОПолучателе = Новый Структура(); + СведенияОПолучателе.Вставить("Телефон", НомерПолучателя); + СведенияОПолучателе.Вставить("Представление", Строка(ИсточникКонтактнойИнформации)); + СведенияОПолучателе.Вставить("ИсточникКонтактнойИнформации", ИсточникКонтактнойИнформации); + + НомераПолучателей = Новый Массив; + НомераПолучателей.Добавить(СведенияОПолучателе); + МодульОтправкаSMSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОтправкаSMSКлиент"); - МодульОтправкаSMSКлиент.ОтправитьSMS(НомераПолучателей, "", ДополнительныеПараметры); + МодульОтправкаSMSКлиент.ОтправитьSMS(НомераПолучателей, "", Новый Структура("ПеревестиВТранслит", Ложь)); КонецПроцедуры @@ -577,6 +634,11 @@ ИмяПротокола = "tel"; // по умолчанию используем "tel". + #Если МобильныйКлиент Тогда + СредстваТелефонии.НабратьНомер(НомерТелефона, Истина); + Возврат; + #КонецЕсли + #Если НЕ ВебКлиент Тогда ДоступноеИмяПротокола = ПрограммаТелефонииУстановлена(); Если ДоступноеИмяПротокола = Неопределено Тогда @@ -593,7 +655,7 @@ СтрокаЗапуска = ИмяПротокола + ":" + НомерТелефона; Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект); - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска, Оповещение); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска, Оповещение); КонецПроцедуры @@ -630,6 +692,10 @@ // Процедура ПерейтиПоВебСсылке(Знач ЗначенияПолей, Знач Представление = "", ОжидаемыйВид = Неопределено) Экспорт + Если ОжидаемыйВид = Неопределено Тогда + ОжидаемыйВид = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница"); + КонецЕсли; + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.ПривестиКонтактнуюИнформациюXML( Новый Структура("ЗначенияПолей, Представление, ВидКонтактнойИнформации", ЗначенияПолей, Представление, ОжидаемыйВид)); ТипИнформации = КонтактнаяИнформация.ТипКонтактнойИнформации; @@ -646,9 +712,9 @@ КонецЕсли; Если СтрНайти(АдресСсылки, "://") > 0 Тогда - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресСсылки); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(АдресСсылки); Иначе - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://" + АдресСсылки); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://" + АдресСсылки); КонецЕсли; КонецПроцедуры @@ -666,7 +732,7 @@ СтрокаЗапуска = "https://maps.yandex.ru/?text=" + АдресКодированный; КонецЕсли; - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска); КонецПроцедуры @@ -705,7 +771,28 @@ #Область УстаревшиеПроцедурыИФункции -// Устарела. Следует использовать ПриИзменении(). +// Устарела. Следует использовать АвтоПодборАдреса. +// Обработчик события АвтоПодбор поля формы контактной информации. +// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". +// +// Параметры: +// Текст - Строка - Строка текста, введенная пользователем в поле контактной информации. +// ДанныеВыбора - СписокЗначений - Содержит список значений, который будет использован при стандартной +// обработке события. +// СтандартнаяОбработка - Булево - В данный параметр передается признак выполнения стандартной +// (системной) обработки события. Если в теле процедуры-обработчика +// установить данному параметру значение Ложь, стандартная обработка события +// производиться не будет. +// +Процедура АвтоПодбор(Знач Текст, ДанныеВыбора, СтандартнаяОбработка = Ложь) Экспорт + + Если СтрДлина(Текст) > 2 Тогда + АвтоПодборАдреса(Неопределено, Текст, ДанныеВыбора, Неопределено, 0, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +// Устарела. Следует использовать ПриИзменении. // // Параметры: // Форма - УправляемаяФорма - Форма владельца контактной информации. @@ -716,7 +803,7 @@ ПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть); КонецПроцедуры -// Устарела. Следует использовать НачалоВыбора(). +// Устарела. Следует использовать НачалоВыбора. // // Параметры: // Форма - УправляемаяФорма - Форма владельца контактной информации. @@ -732,7 +819,7 @@ Возврат Неопределено; КонецФункции -// Устарела. Следует использовать Очистка(). +// Устарела. Следует использовать Очистка. // // Параметры: // Форма - УправляемаяФорма - Форма владельца контактной информации. @@ -746,7 +833,7 @@ Возврат Неопределено; КонецФункции -// Устарела. Следует использовать ВыполнитьКоманду(). +// Устарела. Следует использовать ВыполнитьКоманду. // // Параметры: // Форма - УправляемаяФорма - Форма владельца контактной информации. @@ -836,8 +923,6 @@ Форма = ДополнительныеПараметры.Форма; ТекстПредставления = РезультатЗакрытия.Представление; - ЗначенияПолей = РезультатЗакрытия.КонтактнаяИнформация; - Значение = РезультатЗакрытия.Значение; Комментарий = РезультатЗакрытия.Комментарий; Если ДанныеНаФорме.Свойство("ХранитьИсториюИзменений") И ДанныеНаФорме.ХранитьИсториюИзменений Тогда @@ -884,8 +969,6 @@ Если СтрокаСДействующимАдресом <> Неопределено Тогда ТекстПредставления = СтрокаСДействующимАдресом.Представление; - ЗначенияПолей = СтрокаСДействующимАдресом.ЗначенияПолей; - Значение = СтрокаСДействующимАдресом.Значение; Комментарий = СтрокаСДействующимАдресом.Комментарий; КонецЕсли; @@ -904,6 +987,10 @@ Иначе Форма.Элементы.Найти(Элемент.Имя).РасширеннаяПодсказка.Заголовок = Комментарий; + Если РезультатЗакрытия.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда + ТекстПредставления = УправлениеКонтактнойИнформациейКлиентСервер.АдресСайта(ТекстПредставления, РезультатЗакрытия.Адрес); + КонецЕсли; + ДанныеНаФорме.Представление = ТекстПредставления; ДанныеНаФорме.Значение = РезультатЗакрытия.Значение; ДанныеНаФорме.Комментарий = Комментарий; @@ -953,15 +1040,6 @@ КонецПроцедуры -////////////////////////////////////////////////////////////////////////////////////////////////// - -// Завершение модального диалога создания письма. -Процедура СоздатьПисьмоПоКонтактнойИнформацииЗавершение(Действие, АдресПочты) Экспорт - - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("mailto:" + АдресПочты); - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1001,7 +1079,7 @@ #КонецЕсли Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект); - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска, Оповещение); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска, Оповещение); КонецПроцедуры @@ -1211,7 +1289,7 @@ // Функция ПрограммаТелефонииУстановлена(ИмяПротокола = Неопределено) - Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда Если ЗначениеЗаполнено(ИмяПротокола) Тогда Возврат ?(ИмяПротоколаЗарегистрированоВРеестре(ИмяПротокола), ИмяПротокола, ""); Иначе @@ -1235,6 +1313,9 @@ Функция ИмяПротоколаЗарегистрированоВРеестре(ИмяПротокола) +#Если МобильныйКлиент Тогда + Возврат Ложь; +#Иначе Попытка Оболочка = Новый COMОбъект("Wscript.Shell"); Оболочка.RegRead("HKEY_CLASSES_ROOT\" + ИмяПротокола + "\"); @@ -1242,6 +1323,8 @@ Возврат Ложь; КонецПопытки; Возврат Истина; +#КонецЕсли + КонецФункции //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index 6f34e716b..5bc8ecaae 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -1,71 +1,12 @@ -#Область ПрограммныйИнтерфейс +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Формирует представление с указанным видом для формы ввода адреса. -// -// Параметры: -// СтруктураАдреса - Структура - Адрес в виде структуры. -// Описание структуры см. в функции РаботаСАдресами.СведенияОбАдресе. -// Описание предыдущей версии структуры см. в функции РаботаСАдресами.ПредыдущаяСтруктураКонтактнойИнформацииXML. -// Представление - Строка - Представление адреса. -// НаименованиеВида - Строка - Наименование вида. -// -// Возвращаемое значение: -// Строка - Представление адреса с видом. -// -Функция СформироватьПредставлениеАдреса(СтруктураАдреса, Представление, НаименованиеВида = Неопределено) Экспорт - - Представление = ""; - - Если ТипЗнч(СтруктураАдреса) <> Тип("Структура") Тогда - Возврат Представление; - КонецЕсли; - - ФорматФИАС = СтруктураАдреса.Свойство("Округ"); - - Если СтруктураАдреса.Свойство("Страна") Тогда - Представление = СтруктураАдреса.Страна; - КонецЕсли; - - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Индекс", Представление); - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Регион", Представление, "РегионСокращение", ФорматФИАС); - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Округ", Представление, "ОкругСокращение", ФорматФИАС); - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Район", Представление, "РайонСокращение", ФорматФИАС); - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Город", Представление, "ГородСокращение", ФорматФИАС); - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ВнутригородскойРайон", Представление, "ВнутригородскойРайонСокращение", ФорматФИАС); - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "НаселенныйПункт", Представление, "НаселенныйПунктСокращение", ФорматФИАС); - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Территория", Представление, "ТерриторияСокращение", ФорматФИАС); - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Улица", Представление, "УлицаСокращение", ФорматФИАС); - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ДополнительнаяТерритория", Представление, "ДополнительнаяТерриторияСокращение", ФорматФИАС); - ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ЭлементДополнительнойТерритории", Представление, "ЭлементДополнительнойТерриторииСокращение", ФорматФИАС); - - Если СтруктураАдреса.Свойство("Здание") Тогда - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", СтруктураАдреса.Здание)), ", " + ЗначениеПоКлючуСтруктуры("ТипЗдания", СтруктураАдреса.Здание) + " № ", Представление); - Иначе - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Дом", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипДома", СтруктураАдреса) + " № ", Представление); - КонецЕсли; - - Если СтруктураАдреса.Свойство("Корпуса") Тогда - Для каждого Корпус Из СтруктураАдреса.Корпуса Цикл - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", Корпус )), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", Корпус)+ " ", Представление); - КонецЦикла; - Иначе - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Корпус", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", СтруктураАдреса)+ " ", Представление); - КонецЕсли; - - Если СтруктураАдреса.Свойство("Помещения") Тогда - Для каждого Помещение Из СтруктураАдреса.Помещения Цикл - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", Помещение)), ", " + ЗначениеПоКлючуСтруктуры("ТипПомещения", Помещение)+ " ", Представление); - КонецЦикла; - Иначе - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Квартира", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКвартиры", СтруктураАдреса) + " ", Представление); - КонецЕсли; - - НаименованиеВида = ЗначениеПоКлючуСтруктуры("НаименованиеВида", СтруктураАдреса); - ПредставлениеСВидом = НаименованиеВида + ": " + Представление; - - Возврат ПредставлениеСВидом; - -КонецФункции +#Область ПрограммныйИнтерфейс // Формирует строковое представление телефона. // @@ -152,12 +93,81 @@ // Булево - Если Истина, то поле контактной информации было заполнено. // Функция КонтактнаяИнформацияЗаполнена(Значение) Экспорт - Возврат Значение <> ТекстПустогоАдресаВВидеГиперссылки(); + Возврат СокрЛП(Значение) <> ТекстПустогоАдресаВВидеГиперссылки(); КонецФункции #Область УстаревшиеПроцедурыИФункции -// Устарела. Следует использовать РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу. +// Устарела. Следует использовать УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации +// Формирует представление с указанным видом для формы ввода адреса. +// +// Параметры: +// СтруктураАдреса - Структура - Адрес в виде структуры. +// Описание структуры см. в функции РаботаСАдресами.СведенияОбАдресе. +// Описание предыдущей версии структуры см. в функции РаботаСАдресами.ПредыдущаяСтруктураКонтактнойИнформацииXML. +// Представление - Строка - Представление адреса. +// НаименованиеВида - Строка - Наименование вида. +// +// Возвращаемое значение: +// Строка - Представление адреса с видом. +// +Функция СформироватьПредставлениеАдреса(СтруктураАдреса, Представление, НаименованиеВида = Неопределено) Экспорт + + Представление = ""; + + Если ТипЗнч(СтруктураАдреса) <> Тип("Структура") Тогда + Возврат Представление; + КонецЕсли; + + ФорматФИАС = СтруктураАдреса.Свойство("Округ"); + + Если СтруктураАдреса.Свойство("Страна") Тогда + Представление = СтруктураАдреса.Страна; + КонецЕсли; + + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Индекс", Представление); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Регион", Представление, "РегионСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Округ", Представление, "ОкругСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Район", Представление, "РайонСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Город", Представление, "ГородСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ВнутригородскойРайон", Представление, "ВнутригородскойРайонСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "НаселенныйПункт", Представление, "НаселенныйПунктСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Территория", Представление, "ТерриторияСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Улица", Представление, "УлицаСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ДополнительнаяТерритория", Представление, "ДополнительнаяТерриторияСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ЭлементДополнительнойТерритории", Представление, "ЭлементДополнительнойТерриторииСокращение", ФорматФИАС); + + Если СтруктураАдреса.Свойство("Здание") Тогда + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", СтруктураАдреса.Здание)), ", " + ЗначениеПоКлючуСтруктуры("ТипЗдания", СтруктураАдреса.Здание) + " ", Представление); + Иначе + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Дом", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипДома", СтруктураАдреса) + " ", Представление); + КонецЕсли; + + Если СтруктураАдреса.Свойство("Корпуса") Тогда + Для каждого Корпус Из СтруктураАдреса.Корпуса Цикл + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", Корпус )), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", Корпус)+ " ", Представление); + КонецЦикла; + Иначе + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Корпус", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", СтруктураАдреса)+ " ", Представление); + КонецЕсли; + + Если СтруктураАдреса.Свойство("Помещения") Тогда + Для каждого Помещение Из СтруктураАдреса.Помещения Цикл + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", Помещение)), ", " + ЗначениеПоКлючуСтруктуры("ТипПомещения", Помещение)+ " ", Представление); + КонецЦикла; + Иначе + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Квартира", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКвартиры", СтруктураАдреса) + " ", Представление); + КонецЕсли; + + НаименованиеВида = ЗначениеПоКлючуСтруктуры("НаименованиеВида", СтруктураАдреса); + ПредставлениеСВидом = НаименованиеВида + ": " + Представление; + + Возврат ПредставлениеСВидом; + +КонецФункции + +// Устарела. Для получения адреса следует использовать РаботаСАдресами.СведенияОбАдресе, +// для получения структуры телефона или факса УправлениеКонтактнойИнформацией.СведенияОТелефоне. // Возвращает структуру контактной информации по типу. // // Параметры: @@ -168,7 +178,7 @@ // Структура - пустая структура контактной информации, ключи - имена полей, значения поля. // Функция СтруктураКонтактнойИнформацииПоТипу(ТипКИ, ФорматАдреса = Неопределено) Экспорт - + Если ТипКИ = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда Возврат СтруктураПолейАдреса(); ИначеЕсли ТипКИ = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда @@ -185,39 +195,29 @@ #Область СлужебныйПрограммныйИнтерфейс -// Возвращает пространство имен для оперирования с XDTO контактной информации. -// -// Возвращаемое значение: -// Строка - пространство имен. -// -Функция ПространствоИмен() Экспорт - Возврат "http://www.v8.1c.ru/ssl/contactinfo"; -КонецФункции - -// Описание структуры контактной информации для хранения ее в формате JSON. -// Список полей может быть расширен национальными полями в одноименной функции общего модуля РаботаСАдресамиКлиентСервер. +// Описание ключей контактной информации для хранения ее значений в формате JSON. +// Список ключей может быть расширен национальными полями в одноименной функции общего модуля РаботаСАдресамиКлиентСервер. // // Параметры: -// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - -// Тип контактной информации, определяющий состав полей контактной информации. +// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации, +// определяющий состав полей контактной информации. // // Возвращаемое значение: -// Структура - Поля контактной информации с полями: +// Структура - Поля контактной информации: // * Value - Строка - Представление контактной информации. // * Comment - Строка - Комментарий. -// * Type - Строка - Тип контактной информации. -// Для типа контактной информации адрес: -// * Type - Строка - Тип контактной информации. -// * Country - Строка - Наименование страны. -// * CountryCode - Строка -Код страны. -// * ZIPcode- Строка -Индекс. -// * Area - Строка - представление региона +// * Type - Строка - Тип контактной информации. См. значение в Перечисление.ТипыКонтактнойИнформации.Адрес. +// Расширенный состав полей для типа контактной информации адрес: +// * Country - Строка - наименование страны, например "Россия". +// * CountryCode - Строка -код страны. +// * ZIPcode- Строка - почтовый индекс. +// * Area - Строка - наименование региона. // * AreaType - Строка - сокращение(тип) региона. -// * City - Строка - представление города. -// * CityType - Строка - сокращение города. -// * Street - Строка - представление улицы. -// * StreetType - Строка - сокращение улицы. -// Для типа контактной информации телефон: +// * City - Строка - наименование города. +// * CityType - Строка - сокращение (тип) города, например "г". +// * Street - Строка - наименование улицы. +// * StreetType - Строка - сокращение (тип) улицы, например "ул". +// Расширенный состав полей для типа контактной информации телефон: // * CountryCode - Строка - код страны. // * AreaCode - Строка - региональный код. // * Number - Строка - телефонный номер. @@ -256,6 +256,10 @@ Результат.Вставить("number", ""); Результат.Вставить("extNumber", ""); + ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда + + Результат.Вставить("name", ""); + КонецЕсли; Возврат Результат; @@ -295,24 +299,16 @@ Возврат СтрСравнить(АдресВСвободнойФорме(), ТипАдреса) = 0; КонецФункции -Функция ЭтоИностранныйАдрес(ТипАдреса) Экспорт - Возврат СтрСравнить(ИностранныйАдрес(), ТипАдреса) = 0; -КонецФункции - Функция ЗначениеСтроенияИлиПомещения(Тип, Значение) Экспорт Возврат Новый Структура("type, number", Тип, Значение); КонецФункции -Функция ЭтоТипАдрес(ЗначениеТипа) Экспорт - Возврат СтрСравнить(ЗначениеТипа, Строка(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес"))) = 0; -КонецФункции - // Возвращает пустую структура адреса. // // Возвращаемое значение: // Структура - адрес, ключи - имена полей, значения поля. // -Функция СтруктураПолейАдреса() +Функция СтруктураПолейАдреса() Экспорт СтруктураАдреса = Новый Структура; СтруктураАдреса.Вставить("Представление", ""); @@ -349,21 +345,6 @@ Возврат Результат; КонецФункции -// Возвращает отдельно сокращение от значения. -// -// Параметры: -// Текст - Строка - Полное наименования. -// -// Возвращаемое значение: -// Строка - выделенное сокращение. -// -Функция Сокращение(Знач Текст) Экспорт - - Части = НаименованиеСокращение(Текст); - Возврат Части.Сокращение; - -КонецФункции - // Разделяет текст на слова по указанным разделителям. По умолчанию разделители - пробельные символы. // // Параметры: @@ -436,29 +417,6 @@ Возврат Результат; КонецФункции -// Возвращает первый элемент из списка. -// -// Параметры: -// СписокДанных - СписокЗначений, Массив, ПолеФормы. -// -// Возвращаемое значение: -// Произвольный - первый элемент. -// Неопределено - нет первого элемента. -// -Функция ПервыйИлиПустой(Знач СписокДанных) Экспорт - - ТипСписка = ТипЗнч(СписокДанных); - Если ТипСписка = Тип("СписокЗначений") И СписокДанных.Количество() > 0 Тогда - Возврат СписокДанных[0].Значение; - ИначеЕсли ТипСписка = Тип("Массив") И СписокДанных.Количество() > 0 Тогда - Возврат СписокДанных[0]; - ИначеЕсли ТипСписка = Тип("ПолеФормы") Тогда - Возврат ПервыйИлиПустой(СписокДанных.СписокВыбора); - КонецЕсли; - - Возврат Неопределено; -КонецФункции - #КонецОбласти #Область ПрочиеСлужебныеПроцедурыИФункции @@ -536,123 +494,24 @@ КонецФункции -// Возвращает список значений. Преобразует строку полей в список значений. -// -// Параметры: -// СтрокаПолей - Строка - строка полей. -// -// Возвращаемое значение: -// СписокЗначений - список значений полей. -// -Функция ПреобразоватьСтрокуВСписокПолей(СтрокаПолей) Экспорт +Функция АдресСайта(Знач Представление, Знач Ссылка) Экспорт - // XML сериализацию преобразовывать не надо. - Если ЭтоКонтактнаяИнформацияВXML(СтрокаПолей) Тогда - Возврат СтрокаПолей; + Если ПустаяСтрока(Представление) Или ПустаяСтрока(Ссылка) Тогда + Представление = ТекстПустогоАдресаВВидеГиперссылки(); + Ссылка = НавигационнаяСсылкаВебСайта(); КонецЕсли; - Результат = Новый СписокЗначений; - - СтруктураЗначенийПолей = СтруктураЗначенийПолей(СтрокаПолей); - Для каждого ЗначениеПоля Из СтруктураЗначенийПолей Цикл - Результат.Добавить(ЗначениеПоля.Значение, ЗначениеПоля.Ключ); - КонецЦикла; - - Возврат Результат; + ТекстПредставления = Новый ФорматированнаяСтрока(Представление,,,, Ссылка); + КартинкаИзменить = Новый ФорматированнаяСтрока(БиблиотекаКартинок.РедактироватьАдресСайта,,,, НавигационнаяСсылкаВебСайта()); + Возврат Новый ФорматированнаяСтрока(ТекстПредставления, " ", КартинкаИзменить); + КонецФункции -// Получает сокращение географического названия объекта. -// -// Параметры: -// ГеографическоеНазвание - Строка - географическое название объекта. -// -// Возвращаемое значение: -// Строка - пустая строка или последнее слово в географическом названии. -// -Функция АдресноеСокращение(Знач ГеографическоеНазвание) - - Сокращение = ""; - МассивСлов = СтрРазделить(ГеографическоеНазвание, " ", Ложь); - Если МассивСлов.Количество() > 1 Тогда - Сокращение = МассивСлов[МассивСлов.Количество() - 1]; - КонецЕсли; - - Возврат Сокращение; - +Функция НавигационнаяСсылкаВебСайта() Экспорт + Возврат "e1cib/app/Обработка.ВводКонтактнойИнформации.Форма.ВебСайт"; КонецФункции -// Преобразует строку полей вида ключ = значение в структуру. -// -// Параметры: -// СтрокаПолей - Строка - строка полей с данными в виде ключ = значение. -// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - для определения состава незаполненных -// полей. -// -// Возвращаемое значение: -// Структура - значения полей. -// -Функция СтруктураЗначенийПолей(СтрокаПолей, ВидКонтактнойИнформации = Неопределено) Экспорт - - Если ВидКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда - Результат = СтруктураПолейАдреса(); - ИначеЕсли ВидКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда - Результат = СтруктураПолейТелефона(); - Иначе - Результат = Новый Структура; - КонецЕсли; - - ПоследнийЭлемент = Неопределено; - - Для Итерация = 1 По СтрЧислоСтрок(СтрокаПолей) Цикл - ПолученнаяСтрока = СтрПолучитьСтроку(СтрокаПолей, Итерация); - Если СтрНачинаетсяС(ПолученнаяСтрока, Символы.Таб) Тогда - Если Результат.Количество() > 0 Тогда - Результат.Вставить(ПоследнийЭлемент, Результат[ПоследнийЭлемент] + Символы.ПС + Сред(ПолученнаяСтрока, 2)); - КонецЕсли; - Иначе - ПозицияСимвола = СтрНайти(ПолученнаяСтрока, "="); - Если ПозицияСимвола <> 0 Тогда - НазваниеПоля = Лев(ПолученнаяСтрока, ПозицияСимвола - 1); - ЗначениеПоля = Сред(ПолученнаяСтрока, ПозицияСимвола + 1); - Если НазваниеПоля = "Регион" Или НазваниеПоля = "Район" Или НазваниеПоля = "Город" - Или НазваниеПоля = "НаселенныйПункт" Или НазваниеПоля = "Улица" Тогда - Если СтрНайти(СтрокаПолей, НазваниеПоля + "Сокращение") = 0 Тогда - Результат.Вставить(НазваниеПоля + "Сокращение", АдресноеСокращение(ЗначениеПоля)); - КонецЕсли; - КонецЕсли; - Результат.Вставить(НазваниеПоля, ЗначениеПоля); - ПоследнийЭлемент = НазваниеПоля; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат Результат; -КонецФункции - -Процедура ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление) Экспорт - - Если ТипЗнч(Адрес) <> Тип("Структура") Тогда - ВызватьИсключение НСтр("ru='Для формирования представления адреса передан некорректный тип адреса'"); - КонецЕсли; - - СписокЗаполненныхУровней = Новый Массив; - - Если ВключатьСтрануВПредставление И Адрес.Свойство("Country") И НЕ ПустаяСтрока(Адрес.Country) Тогда - СписокЗаполненныхУровней.Добавить(Адрес.Country); - КонецЕсли; - - Если Адрес.Свойство("ZipCode") И НЕ ПустаяСтрока(Адрес.ZipCode) Тогда - СписокЗаполненныхУровней.Добавить(Адрес.ZipCode); - КонецЕсли; - - СписокЗаполненныхУровней.Добавить(Адрес["Area"] + " " + Адрес["AreaType"]); - СписокЗаполненныхУровней.Добавить(Адрес["City"] + " " + Адрес["CityType"]); - - Адрес.Value = СтрСоединить(СписокЗаполненныхУровней, ", "); - -КонецПроцедуры - #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl new file mode 100644 index 000000000..c3a9d8026 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl @@ -0,0 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Получает наименования видов контактной информации на разных языках. +// +// Параметры: +// Наименования - Соответствие - представление вида контактной информации на переданном языке: +// * Ключ - Строка - Имя вида контактной информации. Например, "_ДемоАдресПартнера". +// * Значение - Строка - Наименование вида контактной информации для переданного кода языка. +// КодЯзыка - Строка - Код языка. Например, "en". +// +// Пример: +// Наименования["_ДемоАдресПартнера"] = НСтр("ru='Адрес'; en='Address';", КодЯзыка); +// +Процедура ПриПолученииНаименованийВидовКонтактнойИнформации(Наименования, КодЯзыка) Экспорт + + + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/УправлениеКонтактнойИнформациейПереопределяемый.mdo b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/УправлениеКонтактнойИнформациейПереопределяемый.mdo new file mode 100644 index 000000000..5f980f0bd --- /dev/null +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/УправлениеКонтактнойИнформациейПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + УправлениеКонтактнойИнформациейПереопределяемый + + ru + Управление контактной информацией переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl index 3cef9d1f3..351b7b5f4 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Получить первое значение определенного вида контактной информации у объекта. @@ -25,7 +33,11 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК Наименование + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |КОНЕЦ КАК Наименование |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ @@ -43,17 +55,20 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформацииПодчиненный | ПО (ВидыКонтактнойИнформацииПодчиненный.Родитель = ВидыКонтактнойИнформации.Ссылка) |ГДЕ - | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных + | ВидыКонтактнойИнформации.ИмяПредопределенногоВида = &ИмяПредопределенногоВида | И ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА | И ВидыКонтактнойИнформацииПодчиненный.Тип = &Тип"; - Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", ИмяГруппыКонтактнойИнформации); + Запрос.УстановитьПараметр("ИмяПредопределенногоВида", ИмяГруппыКонтактнойИнформации); Запрос.УстановитьПараметр("Тип", ТипКонтактнойИнформации); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Если РезультатЗапроса.Следующий() Тогда - Результат = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта( - Ссылка, РезультатЗапроса.Ссылка, Дата); + КонтактнаяИнформацияОбъекта = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Ссылка, + РезультатЗапроса.Ссылка, Дата, Ложь); + Если КонтактнаяИнформацияОбъекта.Количество() > 0 Тогда + Результат = КонтактнаяИнформацияОбъекта[0].Представление; + КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; @@ -207,13 +222,39 @@ Обработчик.Комментарий = НСтр("ru = 'Обновление сведений о странах мирах в соответствии с общероссийским классификатором стран мира. |До завершения обработки наименование стран в документах в ряде случаев будет отображаться некорректно.'"); + Обработчик = Обработчики.Добавить(); + Обработчик.Процедура = "УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьНаименованияВидовКонтактнойИнформацииПользователя"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.НачальноеЗаполнение = Истина; + КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -#Область ОбновлениеИнформационнойБазы +// Возвращает пространство имен для оперирования с XDTO контактной информации. +// +// Возвращаемое значение: +// Строка - пространство имен. +// +Функция ПространствоИмен() Экспорт + Возврат "http://www.v8.1c.ru/ssl/contactinfo"; +КонецФункции + +// Заполняет список страна при автоподборе по введенному пользователем тексту. +// +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Экспорт + + Если Не ЕстьПравоДобавления() Тогда + // Нет прав на добавление страны мира, поведение по умолчанию. + Возврат; + КонецЕсли; + + ДанныеВыбора = ЗаполнитьДанныеВыбораАвтоподбораПоСтранам(Параметры); + СтандартнаяОбработка = (ДанныеВыбора.Количество() = 0); + +КонецПроцедуры Процедура АвтоподборАдреса(Знач Текст, ДанныеВыбора) Экспорт @@ -247,6 +288,7 @@ Адрес = СтрокаJSONВСтруктуру(СтрокаДанных.Значение.Адрес); СтрокаДанных.Значение.Представление = МодульРаботаСАдресамиКлиентСервер.ПредставлениеАдреса(Адрес, Ложь); КонецЕсли; + УстаревшийАдрес = Не СтрокаДанных.Значение.Муниципальный; Иначе УстаревшийАдрес = Ложь; @@ -275,6 +317,12 @@ КонецПроцедуры +Функция ЭтоТипАдрес(ЗначениеТипа) + Возврат СтрСравнить(ЗначениеТипа, Строка(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес"))) = 0; +КонецФункции + +#Область ОбновлениеИнформационнойБазы + // Неразделенный монопольный обработчик для копирования стран мира из нулевой области. // Сохраняет эталон и список областей данных - адресатов. // @@ -451,7 +499,11 @@ // получение адресов для обработки Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.Родитель.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.Родитель.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных + |КОНЕЦ КАК ИмяПредопределенногоВида |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ @@ -473,8 +525,8 @@ |СГРУППИРОВАТЬ ПО | ТаблицаСКонтактнойИнформацией.Ссылка"; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Справочник") Тогда - ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 11); + Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, "Справочник") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, 11); Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда ТекстЗапроса = ТекстЗапроса + Разделитель + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, "Справочник", ИмяОбъекта); Разделитель = " ОБЪЕДИНИТЬ ВСЕ "; @@ -533,7 +585,11 @@ // получение адресов для обработки (первый проход) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.Родитель.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.Родитель.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных + |КОНЕЦ КАК ИмяПредопределенногоВида |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ @@ -557,8 +613,8 @@ | ТаблицаСКонтактнойИнформацией.Ссылка"; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Справочник") Тогда - ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 11); + Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, "Справочник") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, 11); Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда ТекстЗапроса = ТекстЗапроса + Разделитель + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, "Справочник", ИмяОбъекта); Разделитель = " ОБЪЕДИНИТЬ ВСЕ "; @@ -675,17 +731,21 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ВидыКонтактнойИнформации.Ссылка + | ВидыКонтактнойИнформации.Ссылка КАК Ссылка, + | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ | НЕ ВидыКонтактнойИнформации.Используется"; - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл + Если СтрНачинаетсяС(ВРег(Выборка.ИмяПредопределенныхДанных), "УДАЛИТЬ") Тогда + Продолжить; + КонецЕсли; + ВидКонтактнойИнформацииОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВидКонтактнойИнформацииОбъект.Используется = Истина; ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВидКонтактнойИнформацииОбъект); @@ -694,46 +754,33 @@ КонецПроцедуры +// Вызывается при начальном заполнении. +// Установка наименования элементов выполняется в общем модуле УправлениеКонтактнойИнформациейПереопределяемый +// в процедуре ПриПолученииНаименованийВидовКонтактнойИнформации. +// +Процедура ЗаполнитьНаименованияВидовКонтактнойИнформацииПользователя() Экспорт + + ПараметрыГруппы = Справочники.ВидыКонтактнойИнформации.СправочникПользователи.ПолучитьОбъект(); + ПараметрыГруппы.Наименование = НСтр("ru='Контактная информация справочника ""Пользователи""'"); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПараметрыГруппы); + + ПараметрыВида = Справочники.ВидыКонтактнойИнформации.EmailПользователя.ПолучитьОбъект(); + ПараметрыВида.Наименование = НСтр("ru='Электронная почта'"); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПараметрыВида); + + ПараметрыВида = Справочники.ВидыКонтактнойИнформации.ТелефонПользователя.ПолучитьОбъект(); + ПараметрыВида.Наименование = НСтр("ru='Телефон'"); + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПараметрыВида); + +КонецПроцедуры + #КонецОбласти #Область ОбщиеСлужебныеПроцедурыИФункции -// Возвращает список значений -Функция ДоступныеДляКопированияАдреса(Знач ЗначенияПолейДляАнализа, Знач ВидАдреса) Экспорт - - ТолькоНациональныйАдрес = ВидАдреса.ТолькоНациональныйАдрес; - - Результат = Новый СписокЗначений; - - Для Каждого Адрес Из ЗначенияПолейДляАнализа Цикл - ДопустимыйИсточник = Истина; - - Представление = Адрес.Представление; - Если ПустаяСтрока(Представление) Тогда - // Не пустое представление - ДопустимыйИсточник = Ложь; - Иначе - Если ТолькоНациональныйАдрес Тогда - // В адрес, ограниченный Россией, нельзя копировать иностранный адрес. - XMLАдрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(Адрес.ЗначениеПолей, Представление, ВидАдреса); - XDTOАдрес = КонтактнаяИнформацияИзXML(XMLАдрес, ВидАдреса); - Если Не ЭтоНациональныйАдрес(XDTOАдрес) Тогда - ДопустимыйИсточник = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если ДопустимыйИсточник Тогда - Результат.Добавить(Адрес.Идентификатор, Строка(Адрес.ВидАдреса) + ": " + Представление); - КонецЕсли; - КонецЦикла; - - Возврат Результат; -КонецФункции - Функция СобытиеЖурналаРегистрации() - Возврат НСтр("ru = 'Контактная информация'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Контактная информация'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -828,12 +875,13 @@ Адрес.Country = НаименованиеОсновнаяСтрана; Иначе Адрес.Country = СокрЛП(ВРег(СтрокаСтраны.Значение)); - // Проверка наличия страны в справочнике Страны мира и неявное добавление ее в случае отсутствия. - СтранаМира = УправлениеКонтактнойИнформацией.СтранаМираПоКодуИлиНаименованию(Адрес.Country); КонецЕсли; // Обработка частых сокращений в адресе - ОбработкаЧастыхСокращенийВАдресах(ДанныеАнализа); + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + МодульРаботаСАдресами.ОбработкаЧастыхСокращенийВАдресах(ДанныеАнализа); + КонецЕсли; Если Адрес.Country = НаименованиеОсновнаяСтрана Тогда @@ -865,7 +913,7 @@ МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); МодульРаботаСАдресамиКлиентСервер.ОбновитьПредставлениеАдреса(Адрес, Ложь); Иначе - УправлениеКонтактнойИнформациейКлиентСервер.ОбновитьПредставлениеАдреса(Адрес, Ложь); + ОбновитьПредставлениеАдреса(Адрес, Ложь); КонецЕсли; КонецЕсли; @@ -907,22 +955,27 @@ КонецФункции -Процедура ОбработкаЧастыхСокращенийВАдресах(Знач ДанныеАнализа) +Процедура ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление) - СубъектРФ = Новый Соответствие(); - СубъектРФ.Вставить(НСтр("ru='САНКТ-ПЕТЕРБУРГ'"), "Санкт-Петербург"); - СубъектРФ.Вставить(НСтр("ru='МОСКВА'"), "Москва"); - СубъектРФ.Вставить(НСтр("ru='МСК'"), "Москва"); - СубъектРФ.Вставить(НСтр("ru='СПБ'"), "Санкт-Петербург"); + Если ТипЗнч(Адрес) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru='Для формирования представления адреса передан некорректный тип адреса'"); + КонецЕсли; + + СписокЗаполненныхУровней = Новый Массив; + + Если ВключатьСтрануВПредставление И Адрес.Свойство("Country") И НЕ ПустаяСтрока(Адрес.Country) Тогда + СписокЗаполненныхУровней.Добавить(Адрес.Country); + КонецЕсли; + + Если Адрес.Свойство("ZipCode") И НЕ ПустаяСтрока(Адрес.ZipCode) Тогда + СписокЗаполненныхУровней.Добавить(Адрес.ZipCode); + КонецЕсли; + + СписокЗаполненныхУровней.Добавить(Адрес["Area"] + " " + Адрес["AreaType"]); + СписокЗаполненныхУровней.Добавить(Адрес["City"] + " " + Адрес["CityType"]); + + Адрес.Value = СтрСоединить(СписокЗаполненныхУровней, ", "); - Для каждого ЧастьАдреса Из ДанныеАнализа Цикл - Наименование = ВРег(ЧастьАдреса.Наименование); - Если СубъектРФ.Получить(Наименование ) <> Неопределено И ПустаяСтрока(ЧастьАдреса.Сокращение) Тогда - ЧастьАдреса.Наименование = СубъектРФ.Получить(Наименование ); - ЧастьАдреса.Сокращение = "г"; - КонецЕсли; - КонецЦикла; - КонецПроцедуры Процедура РаспределитьАдресПоПолямБезКлассификатора(Адрес, ДанныеАнализа) @@ -1109,7 +1162,7 @@ КонецЕсли; // Пустой объект с представлением. - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); Результат.Состав.Состав = Представление; @@ -1163,7 +1216,7 @@ Возврат КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат.Представление = Представление; @@ -1212,10 +1265,25 @@ Вид = Неопределено; Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + КонтактнаяИнформация = СтрокаJSONВСтруктуру(КонтактнаяИнформация); + + ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("Структура") Тогда + + Если КонтактнаяИнформация.Свойство("НомерТелефона") Тогда + ТипКонтактнойИнформации =Перечисления.ТипыКонтактнойИнформации.Телефон; + Иначе + ТипКонтактнойИнформации =Перечисления.ТипыКонтактнойИнформации.Адрес; + КонецЕсли; + + КонтактнаяИнформация = КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, ТипКонтактнойИнформации); + ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Или ТипЗнч(КонтактнаяИнформация) = Тип("ОбъектXDTO") Тогда + КонтактнаяИнформация = КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация); + КонецЕсли; + Если ПустаяСтрока(КонтактнаяИнформация.Value) Тогда СформироватьПредставлениеКонтактнойИнформации(КонтактнаяИнформация, Вид); КонецЕсли; @@ -1267,7 +1335,7 @@ Если ТипЗнч(Информация) = Тип("Структура") Тогда - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоТипАдрес(Информация.Type) Тогда + Если ЭтоТипАдрес(Информация.Type) Тогда Возврат ПредставлениеАдреса(Информация, ВидИнформации); ИначеЕсли Информация.Type = Строка(Перечисления.ТипыКонтактнойИнформации.Телефон) @@ -1344,7 +1412,7 @@ МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); МодульРаботаСАдресамиКлиентСервер.ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление); Иначе - УправлениеКонтактнойИнформациейКлиентСервер.ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление); + ОбновитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление); КонецЕсли; Возврат Адрес.Value; @@ -1624,7 +1692,11 @@ Запрос.Текст = "ВЫБРАТЬ | ВидыКонтактнойИнформации.Ссылка, - | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |ВЫБОР + | КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> """" + | ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида + | ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных + |КОНЕЦ КАК ИмяПредопределенногоВида |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ @@ -1633,16 +1705,16 @@ РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Справочник") Тогда - ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 11); + Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, "Справочник") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, 11); Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда КонтактнаяИнформация = Метаданные.Справочники[ИмяОбъекта].ТабличныеЧасти.КонтактнаяИнформация; Если КонтактнаяИнформация.Реквизиты.Найти("ВидДляСписка") <> Неопределено Тогда ОбъектыМетаданных.Добавить(Справочники[ИмяОбъекта].ПустаяСсылка()); КонецЕсли; КонецЕсли; - ИначеЕсли СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Документ") Тогда - ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 9); + ИначеЕсли СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, "Документ") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенногоВида, 9); Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда КонтактнаяИнформация = Метаданные.Документы[ИмяОбъекта].ТабличныеЧасти.КонтактнаяИнформация; Если КонтактнаяИнформация.Реквизиты.Найти("ВидДляСписка") <> Неопределено Тогда @@ -1692,11 +1764,18 @@ Если НЕ ЗначениеЗаполнено(ВидКонтактнойИнформации.Тип) Тогда Результат.ЕстьОшибки = Истина; - Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполонено обязательное поле тип у вида контактной информации ""%1"".'"), + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено обязательное поле Тип у вида контактной информации ""%1"".'"), Строка(ВидКонтактнойИнформации.Наименование)); Возврат Результат; КонецЕсли; + Если НЕ ЗначениеЗаполнено(ВидКонтактнойИнформации.Наименование) Тогда + Результат.ЕстьОшибки = Истина; + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено обязательное поле Наименование у вида контактной информации ""%1"".'"), + Строка(ВидКонтактнойИнформации.ИмяПредопределенногоВида)); + Возврат Результат; + КонецЕсли; + Разделитель = ""; Если ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда @@ -1738,7 +1817,7 @@ Возврат ПравоДоступа("Добавление", Метаданные.Справочники.СтраныМира); КонецФункции -Функция ЗаполнитьДанныеВыбораАвтоподбораПоСтранам(Знач Параметры) Экспорт +Функция ЗаполнитьДанныеВыбораАвтоподбораПоСтранам(Знач Параметры) ДанныеВыбора = Новый СписокЗначений; @@ -1861,7 +1940,6 @@ Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда - СтандартнаяОбработка = Ложь; Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл @@ -1982,7 +2060,7 @@ ПеречислениеФакс = Перечисления.ТипыКонтактнойИнформации.Факс; ПеречислениеДругое = Перечисления.ТипыКонтактнойИнформации.Другое; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = ПространствоИмен(); Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Текст) Тогда ЧтениеXML = Новый ЧтениеXML; @@ -2185,36 +2263,41 @@ КонецФункции -// Параметры: Владелец - Структура, Неопределено -// Функция ЕстьЗаполненныеСвойстваКонтактнойИнформации(Знач Владелец) Если Владелец = Неопределено Тогда Возврат Ложь; КонецЕсли; - // Список игнорируемых при сравнении свойств текущего владельца - особенности контактной информации. - СписокПолейДляПроверки = Новый Массив; - СписокПолейДляПроверки.Добавить("Value"); - СписокПолейДляПроверки.Добавить("Type"); - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоТипАдрес(Владелец.Type) Тогда + Если Владелец.Свойство("Value") = Неопределено Или Владелец.Свойство("Type") = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Если ПустаяСтрока(Владелец.value) Или ПустаяСтрока(Владелец.type) Тогда + Возврат Ложь; + КонецЕсли; + + Если ЭтоТипАдрес(Владелец.Type) Тогда + СписокПолейДляПроверки = Новый Массив(); СписокПолейДляПроверки.Добавить("Country"); - КонецЕсли; - Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда - - МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокПолейДляПроверки, МодульРаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(Владелец, Истина)); - - КонецЕсли; - - Для каждого ИмяПоля Из СписокПолейДляПроверки Цикл - Если Владелец.Свойство(ИмяПоля) <> Неопределено И ЗначениеЗаполнено(Владелец[ИмяПоля]) Тогда - Возврат Истина; + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда + + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокПолейДляПроверки, МодульРаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(Владелец, Истина)); + КонецЕсли; - КонецЦикла; + + Для каждого ИмяПоля Из СписокПолейДляПроверки Цикл + Если Владелец.Свойство(ИмяПоля) <> Неопределено И ЗначениеЗаполнено(Владелец[ИмяПоля]) Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + КонецЕсли; - Возврат Ложь; + Возврат Истина; КонецФункции @@ -2237,7 +2320,7 @@ Возврат КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = ПространствоИмен(); Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); @@ -2261,7 +2344,7 @@ Если ТипЗнч(ЗначенияПолей)=Тип("СписокЗначений") Тогда СписокЗначенийПолей = ЗначенияПолей; ИначеЕсли Не ПустаяСтрока(ЗначенияПолей) Тогда - СписокЗначенийПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(ЗначенияПолей); + СписокЗначенийПолей = ПреобразоватьСтрокуВСписокПолей(ЗначенияПолей); КонецЕсли; ПолеПредставления = ""; @@ -2342,6 +2425,100 @@ Возврат Результат; КонецФункции +// Возвращает список значений. Преобразует строку полей в список значений. +// +// Параметры: +// СтрокаПолей - Строка - строка полей. +// +// Возвращаемое значение: +// СписокЗначений - список значений полей. +// +Функция ПреобразоватьСтрокуВСписокПолей(СтрокаПолей) Экспорт + + // XML сериализацию преобразовывать не надо. + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(СтрокаПолей) Тогда + Возврат СтрокаПолей; + КонецЕсли; + + Результат = Новый СписокЗначений; + + СтруктураЗначенийПолей = СтруктураЗначенийПолей(СтрокаПолей); + Для каждого ЗначениеПоля Из СтруктураЗначенийПолей Цикл + Результат.Добавить(ЗначениеПоля.Значение, ЗначениеПоля.Ключ); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Преобразует строку полей вида ключ = значение в структуру. +// +// Параметры: +// СтрокаПолей - Строка - строка полей с данными в виде ключ = значение. +// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - для определения состава незаполненных +// полей. +// +// Возвращаемое значение: +// Структура - значения полей. +// +Функция СтруктураЗначенийПолей(СтрокаПолей, ВидКонтактнойИнформации = Неопределено) Экспорт + + Если ВидКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда + Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейАдреса(); + ИначеЕсли ВидКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда + Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейТелефона(); + Иначе + Результат = Новый Структура; + КонецЕсли; + + ПоследнийЭлемент = Неопределено; + + Для Итерация = 1 По СтрЧислоСтрок(СтрокаПолей) Цикл + ПолученнаяСтрока = СтрПолучитьСтроку(СтрокаПолей, Итерация); + Если СтрНачинаетсяС(ПолученнаяСтрока, Символы.Таб) Тогда + Если Результат.Количество() > 0 Тогда + Результат.Вставить(ПоследнийЭлемент, Результат[ПоследнийЭлемент] + Символы.ПС + Сред(ПолученнаяСтрока, 2)); + КонецЕсли; + Иначе + ПозицияСимвола = СтрНайти(ПолученнаяСтрока, "="); + Если ПозицияСимвола <> 0 Тогда + НазваниеПоля = Лев(ПолученнаяСтрока, ПозицияСимвола - 1); + ЗначениеПоля = Сред(ПолученнаяСтрока, ПозицияСимвола + 1); + Если НазваниеПоля = "Регион" Или НазваниеПоля = "Район" Или НазваниеПоля = "Город" + Или НазваниеПоля = "НаселенныйПункт" Или НазваниеПоля = "Улица" Тогда + Если СтрНайти(СтрокаПолей, НазваниеПоля + "Сокращение") = 0 Тогда + Результат.Вставить(НазваниеПоля + "Сокращение", АдресноеСокращение(ЗначениеПоля)); + КонецЕсли; + КонецЕсли; + Результат.Вставить(НазваниеПоля, ЗначениеПоля); + ПоследнийЭлемент = НазваниеПоля; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Получает сокращение географического названия объекта. +// +// Параметры: +// ГеографическоеНазвание - Строка - географическое название объекта. +// +// Возвращаемое значение: +// Строка - пустая строка или последнее слово в географическом названии. +// +Функция АдресноеСокращение(Знач ГеографическоеНазвание) + + Сокращение = ""; + МассивСлов = СтрРазделить(ГеографическоеНазвание, " ", Ложь); + Если МассивСлов.Количество() > 1 Тогда + Сокращение = МассивСлов[МассивСлов.Количество() - 1]; + КонецЕсли; + + Возврат Сокращение; + +КонецФункции + Функция ДесериализацияТелефонаФаксаВJSON(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда @@ -2356,7 +2533,7 @@ Если ТипЗнч(ЗначенияПолей)=Тип("СписокЗначений") Тогда СписокЗначенийПолей = ЗначенияПолей; ИначеЕсли Не ПустаяСтрока(ЗначенияПолей) Тогда - СписокЗначенийПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(ЗначенияПолей); + СписокЗначенийПолей = ПреобразоватьСтрокуВСписокПолей(ЗначенияПолей); КонецЕсли; ПолеПредставления = ""; @@ -2538,7 +2715,7 @@ Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(Текст); ОбъектXDTO= ФабрикаXDTO.ПрочитатьXML(Чтение, - ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(), "КонтактнаяИнформация")); + ФабрикаXDTO.Тип(ПространствоИмен(), "КонтактнаяИнформация")); Состав = ОбъектXDTO.Состав; Если Состав <> Неопределено @@ -2736,7 +2913,7 @@ Возврат Результат; КонецФункции - + // Преобразует формат из XML в JSON // Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Знач Тип = Неопределено, Представление = "", ОбновлятьИдентификаторы = Истина) Экспорт @@ -2769,9 +2946,7 @@ Результат = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); - НаименованиеСтраны = ""; Формат9Запятых = Ложь; - ЭлементыАдреса = Новый Соответствие; Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда @@ -2787,6 +2962,7 @@ XDTOКонтактнаяИнформация = КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип,, Представление); КонецЕсли; КонецЕсли; + ИначеЕсли ТипЗнч(КонтактнаяИнформация) = Тип("Структура") Тогда СоответствиеПолей = Новый Соответствие(); @@ -2823,9 +2999,9 @@ Возврат Результат; КонецЕсли; - Если НЕ Формат9Запятых Тогда + Если Не Формат9Запятых Тогда - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = ПространствоИмен(); Состав = XDTOКонтактнаяИнформация.Состав; Если Состав = Неопределено Тогда @@ -2838,13 +3014,10 @@ Результат.Вставить("Country", Строка(Состав.Страна)); Страна = Справочники.СтраныМира.НайтиПоНаименованию(Состав.Страна, Истина); - НаименованиеСтраны = Страна.Наименование; Результат.Вставить("CountryCode", СокрЛП(Страна.Код)); - ИначеЕсли - - XDTOТип = ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(), "НомерТелефона") - Или XDTOТип = ФабрикаXDTO.Тип(УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(), "НомерФакса") Тогда + ИначеЕсли XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "НомерТелефона") + Или XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "НомерФакса") Тогда Результат.CountryCode = Состав.КодСтраны; Результат.AreaCode = Состав.КодГорода; @@ -2861,7 +3034,7 @@ Функция СоответствиеXDTOТиповКонтактнойИнформации(НайденТип) Экспорт - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = ПространствоИмен(); СоответствиеТипов = Новый Соответствие; СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес"), Перечисления.ТипыКонтактнойИнформации.Адрес); @@ -3800,6 +3973,12 @@ ДополнительныеПравилаПреобразования = МодульРаботаСАдресами.ДополнительныеПравилаПреобразования(); КонецЕсли; + ОсновнаяСтрана = ""; + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресамиКлиентСервер") <> Неопределено Тогда + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + ОсновнаяСтрана = МодульРаботаСАдресамиКлиентСервер.ОсновнаяСтрана(); + КонецЕсли; + Преобразователь = Новый ПреобразованиеXSL; Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(" | | " + XSLT_ШаблоныСтроковыхФункций() + " | - | РОССИЯ + | " + ОсновнаяСтрана + " | | | @@ -4033,6 +4212,16 @@ // Строка - фрагмент XML для использования в преобразовании. // Функция XSLT_ШаблоныСтроковыхФункций() + + НаборБуквНижнийРегистр = "abcdefghijklmnopqrstuvwxyz"; + НаборБуквВерхнийРегистр = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + НаборБуквНижнийРегистр = МодульРаботаСАдресами.НаборБуквВНижнемРегистре(); + НаборБуквВерхнийРегистр = МодульРаботаСАдресами.НаборБуквВВерхнемРегистре(); + КонецЕсли; + Возврат " | | @@ -4099,8 +4288,8 @@ | | | - | - | + | + | | | | @@ -4212,10 +4401,12 @@ Значение[ЭлементСтруктуры.Ключ] = ""; ИначеЕсли ТипЗнч(ЭлементСтруктуры.Значение) = Тип("Массив") Тогда - Для каждого СтроенияИПомещения Из ЭлементСтруктуры.Значение Цикл - Если ПустаяСтрока(СтроенияИПомещения.Number) И СтроенияИПомещения.Number <> "" Тогда - СтроенияИПомещения.Number = ""; + Индекс = ЭлементСтруктуры.Значение.Количество() - 1; + Пока Индекс >=0 Цикл + Если ПустаяСтрока(ЭлементСтруктуры.Значение[Индекс].number) Тогда + ЭлементСтруктуры.Значение.Удалить(Индекс); КонецЕсли; + Индекс = Индекс - 1; КонецЦикла; КонецЕсли; @@ -4281,7 +4472,7 @@ КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = ПространствоИмен(); ЭтоНовый = ПустаяСтрока(КонтактнаяИнформация); Представление = ""; @@ -4355,7 +4546,7 @@ КонецЕсли; // Старый формат через разделитель строк и равенство. - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); @@ -4408,7 +4599,7 @@ Возврат КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = ПространствоИмен(); Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); @@ -4486,7 +4677,7 @@ Возврат КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); КонецЕсли; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Если ПустаяСтрока(Представление) И ЗначенияПолей.Свойство("Value") И ЗначениеЗаполнено(ЗначенияПолей.Value) Тогда diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl index a7b0f7588..88e9573f7 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Разбирает представление контактной информации и возвращает строку XML со значениями полей. @@ -33,14 +41,6 @@ Возврат УправлениеКонтактнойИнформациейСлужебный.ПривестиКонтактнуюИнформациюXML(Данные); КонецФункции -// Возвращает список идентификаторов строк доступных для копирования в текущий адресов. -// -Функция ДоступныеДляКопированияАдреса(Знач ЗначенияПолейДляАнализа, Знач ВидАдреса) Экспорт - - Возврат УправлениеКонтактнойИнформациейСлужебный.ДоступныеДляКопированияАдреса(ЗначенияПолейДляАнализа, ВидАдреса); - -КонецФункции - // Возвращает найденную ссылку или создает новую страну мира и возвращает ссылку на нее. // Функция СтранаМираПоДаннымКлассификатора(Знач КодСтраны) Экспорт @@ -59,20 +59,6 @@ КонецПроцедуры -// Заполняет список страна при автоподборе по введенному пользователем тексту. -// -Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Экспорт - - Если Не УправлениеКонтактнойИнформациейСлужебный.ЕстьПравоДобавления() Тогда - // Нет прав на добавление страны мира, поведение по умолчанию. - Возврат; - КонецЕсли; - - ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьДанныеВыбораАвтоподбораПоСтранам(Параметры); - СтандартнаяОбработка = (ДанныеВыбора.Количество() = 0); - -КонецПроцедуры - // Заполняет список вариантов адреса при автоподборе по введенному пользователем тексту. // Процедура АвтоподборАдреса(Знач Текст, ДанныеВыбора) Экспорт diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl index 41046708f..ab2fd60e1 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Определяет наличие подсистемы АдресныйКлассификатор и наличие записей о регионах в регистре сведений @@ -48,4 +56,37 @@ Возврат Результат; КонецФункции +Функция НаименованияВидовКонтактнойИнформации() Экспорт + + Результат = Новый Соответствие; + Для каждого Язык Из Метаданные.Языки Цикл + Наименования = Новый Соответствие; + УправлениеКонтактнойИнформациейПереопределяемый.ПриПолученииНаименованийВидовКонтактнойИнформации(Наименования, Язык.КодЯзыка); + Результат[Язык.КодЯзыка] = Наименования; + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Результат); + +КонецФункции + +// Возвращает список предопределенных видов контактной информации. +// +// Возвращаемое значение: +// ФиксированноеСоответствие - с полями: +// * Ключ - Строка - имя предопределенного вида. +// * Значение - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на элемент справочника ВидыКонтактнойИнформации. +Функция ВидыКонтактнойИнформацииПоИмени() Экспорт + + Виды = Новый Соответствие; + ПредопределенныеВиды = УправлениеКонтактнойИнформацией.ПредопределенныеВидыКонтактнойИнформации(); + + Для каждого ПредопределенныеВид Из ПредопределенныеВиды Цикл + Виды.Вставить(ПредопределенныеВид.Имя, ПредопределенныеВид.Ссылка); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Виды); + +КонецФункции + + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index 5c7f651c5..934e1f135 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает описание найденной в коллекции печатной формы. @@ -82,7 +90,23 @@ НомерСтрокиОкончание = ТабличныйДокумент.ВысотаТаблицы; ТабличныйДокумент.Область(НомерСтрокиНачало, , НомерСтрокиОкончание, ).Имя = ИмяОбласти; - + + Для Каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл + ЭтоПодписьИПечать = Ложь; + Для Каждого ИмяОбластиСПодписьюИПечатью Из ПрефиксыИменОбластейСПодписьюИПечатью() Цикл + Если СтрНайти(Рисунок.Имя, ИмяОбластиСПодписьюИПечатью) > 0 Тогда + ЭтоПодписьИПечать = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не ЭтоПодписьИПечать Тогда + Продолжить; + КонецЕсли; + Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Картинка И СтрНайти(Рисунок.Имя, "_Документ_") = 0 Тогда + Рисунок.Имя = Рисунок.Имя + "_" + ИмяОбласти; + КонецЕсли; + КонецЦикла; + КонецПроцедуры // Возвращает список внешних печатных форм. @@ -98,7 +122,7 @@ Функция СписокПечатныхФормИзВнешнихИсточников(ПолноеИмяОбъектаМетаданных) Экспорт ВнешниеПечатныеФормы = Новый СписокЗначений; - Если Не ПустаяСтрока(ПолноеИмяОбъектаМетаданных) Тогда + Если Не ПустаяСтрока(ПолноеИмяОбъектаМетаданных) И ПолноеИмяОбъектаМетаданных <> "Справочник.ИдентификаторыОбъектовМетаданных" Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); МодульДополнительныеОтчетыИОбработки.ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных); @@ -543,9 +567,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с шаблонами офисных документов. - // Добавляет к параметру НаборОбластей новую запись об области. // // Параметры: @@ -651,7 +672,7 @@ Запрос = Новый Запрос(ТекстЗапроса); Запрос.Параметры.Вставить("Объект", ИмяОбъекта); - Запрос.Параметры.Вставить("ИмяМакета", "%" + ИмяМакета + "%"); + Запрос.Параметры.Вставить("ИмяМакета", ИмяМакета + "%"); Выборка = Запрос.Выполнить().Выбрать(); @@ -660,22 +681,7 @@ СписокМакетов.Вставить(Выборка.ИмяМакета, Выборка.Макет.Получить()); КонецЦикла; - ИменаПоиска = Новый Массив; - Если СтрНайти(ИмяМакета, "ПФ_DOC_") > 0 - Или СтрНайти(ИмяМакета, "ПФ_ODT_") > 0 Тогда // Для обратной совместимости. - - ТекущийЯзык = ТекущийЯзык(); - Если ТипЗнч(ТекущийЯзык) <> Тип("ОбъектМетаданных") Тогда - ТекущийЯзык = Метаданные.ОсновнойЯзык; - КонецЕсли; - КодЯзыка = ТекущийЯзык.КодЯзыка; - ИменаПоиска.Добавить(ИмяМакета + "_" + КодЯзыка); - Если КодЯзыка <> Метаданные.ОсновнойЯзык.КодЯзыка Тогда - ИменаПоиска.Добавить(ИмяМакета + "_" + Метаданные.ОсновнойЯзык.КодЯзыка); - КонецЕсли; - - КонецЕсли; - ИменаПоиска.Добавить(ИмяМакета); + ИменаПоиска = ИменаМакета(ИмяМакета); Для Каждого ИмяПоиска Из ИменаПоиска Цикл НайденныйМакет = СписокМакетов[ИмяПоиска]; @@ -711,7 +717,142 @@ КонецФункции +// Проверяет, использование пользовательского макет вместо поставляемого. +// +// Параметры: +// ПутьКМакету - Строка - полный путь к макету в формате: +// "Документ.<ИмяДокумента>.<ИмяМакета>" +// "Обработка.<ИмяОбработки>.<ИмяМакета>" +// "ОбщийМакет.<ИмяМакета>". +// Возвращаемое значение: +// Булево - Истина, если используется пользовательский макет. +// +Функция ИспользуетсяПользовательскийМакет(ПутьКМакету) Экспорт + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Макет ""%1"" не существует. Операция прервана.'"), ПутьКМакету); + ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина); + Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ИмяМакета = ЧастиПути[ЧастиПути.ВГраница()]; + ЧастиПути.Удалить(ЧастиПути.ВГраница()); + ИмяОбъекта = СтрСоединить(ЧастиПути, "."); + + ТекстЗапроса = + "ВЫБРАТЬ + | ПользовательскиеМакетыПечати.ИмяМакета КАК ИмяМакета + |ИЗ + | РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати + |ГДЕ + | ПользовательскиеМакетыПечати.Объект = &Объект + | И ПользовательскиеМакетыПечати.ИмяМакета ПОДОБНО &ИмяМакета"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.Параметры.Вставить("Объект", ИмяОбъекта); + Запрос.Параметры.Вставить("ИмяМакета", ИмяМакета + "%"); + + Выборка = Запрос.Выполнить().Выбрать(); + + СписокМакетов = Новый Соответствие; + Пока Выборка.Следующий() Цикл + СписокМакетов.Вставить(Выборка.ИмяМакета, Истина); + КонецЦикла; + + ИменаПоиска = ИменаМакета(ИмяМакета); + + Для Каждого ИмяПоиска Из ИменаПоиска Цикл + НайденныйМакет = СписокМакетов[ИмяПоиска]; + Если НайденныйМакет <> Неопределено Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Проверяет, был ли изменен поставляемый макет по сравнению с предыдущей версией конфигурации. +// +// Параметры: +// ПутьКМакету - Строка - полный путь к макету в формате: +// "Документ.<ИмяДокумента>.<ИмяМакета>" +// "Обработка.<ИмяОбработки>.<ИмяМакета>" +// "ОбщийМакет.<ИмяМакета>". +// Возвращаемое значение: +// Булево - Истина, если макет был изменен. +// +Функция ПоставляемыйМакетИзменен(ПутьКМакету) Экспорт + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Макет ""%1"" не существует. Операция прервана.'"), ПутьКМакету); + ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина); + Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ИмяМакета = ЧастиПути[ЧастиПути.ВГраница()]; + ЧастиПути.Удалить(ЧастиПути.ВГраница()); + ИмяОбъекта = СтрСоединить(ЧастиПути, "."); + ОбъектМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ИмяОбъекта); + + ТекстЗапроса = + "ВЫБРАТЬ + | ПоставляемыеМакетыПечати.ПредыдущаяКонтрольнаяСумма <> """" + | И ПоставляемыеМакетыПечати.КонтрольнаяСумма <> ПоставляемыеМакетыПечати.ПредыдущаяКонтрольнаяСумма КАК Изменен, + | ПоставляемыеМакетыПечати.ИмяМакета КАК ИмяМакета + |ИЗ + | РегистрСведений.ПоставляемыеМакетыПечати КАК ПоставляемыеМакетыПечати + |ГДЕ + | ПоставляемыеМакетыПечати.Объект = &Объект + | И ПоставляемыеМакетыПечати.ИмяМакета ПОДОБНО &ИмяМакета + | И ПоставляемыеМакетыПечати.ВерсияМакета = &ВерсияМакета"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.Параметры.Вставить("Объект", ОбъектМетаданных); + Запрос.Параметры.Вставить("ИмяМакета", ИмяМакета + "%"); + Запрос.Параметры.Вставить("ВерсияМакета", Метаданные.Версия); + + Выборка = Запрос.Выполнить().Выбрать(); + + СписокМакетов = Новый Соответствие; + Пока Выборка.Следующий() Цикл + СписокМакетов.Вставить(Выборка.ИмяМакета, Выборка.Изменен); + КонецЦикла; + + ИменаПоиска = ИменаМакета(ИмяМакета); + + Для Каждого ИмяПоиска Из ИменаПоиска Цикл + Изменен = СписокМакетов[ИмяПоиска]; + Если Изменен <> Неопределено Тогда + Возврат Изменен; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + // Переключает использование пользовательского макета на макет из конфигурации. +// Применяется в случае, когда макет печатной формы конфигурации и/или алгоритм вывода изменены без поддержки обратной +// совместимости с макетом предыдущей версии конфигурации. +// Для использования в обработчиках обновления. +// +// В общем случае, при внесении изменений в макеты и процедуры формирования печатных форм необходимо учитывать +// возможность того, что макеты могут быть изменены пользователями (т.е. взят за основу типовой макет из конфигурации +// и в него добавлен статический текст, изменен шрифт, цвет и другое оформление ячеек, которое не требует программной +// обработки со стороны алгоритмов конфигурации). +// +// Однако в ряде случаев точное следование порядку заполнения форм важнее, чем совместимость с возможными изменениями +// пользователя в макетах предыдущих версий (например, это справедливо для строго регламентированных печатных форм, +// при нарушении порядка их применения контролирующие органы могут накладывать штрафы, отказывать в проведении +// операций, в налоговых вычетах и т.п. В них недопустимо сокращение количества полей на форме, перекомпоновка). +// Примерами таких форм являются счет-фактура, созданные на его основе УПД и УКД, кассовые ордера (КО-1 и КО-2), +// платежное поручение. +// Поэтому если у пользователя есть измененный макет, то при обновлении его следует отключать, чтобы эти печатные формы +// формировались корректно. +// // // Параметры: // ПутьКМакету - Строка - полный путь к макету в формате: @@ -824,7 +965,7 @@ Попытка ДвоичныеДанныеКартинки = ГенераторQRКода.GenerateQRCode(QRСтрока, УровеньКоррекции, Размер); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Формирование QR-кода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Формирование QR-кода'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -832,160 +973,122 @@ КонецФункции -// Формирует форматную строку согласно "Унифицированному формату электронных банковских сообщений" для ее отображения в -// виде QR-кода. +// Формирует печатные формы в требуемом формате и записывает в файлы. +// Ограничение: печатные формы, формируемые на клиенте не поддерживаются. // // Параметры: -// ДанныеДокумента - Структура - содержит значения полей документа. -// Данные документа будут закодированы согласно стандарту -// "СТАНДАРТЫ ФИНАНСОВЫХ ОПЕРАЦИЙ Символы двумерного штрихового кода для осуществления платежей физических лиц". -// ДанныеДокумента должны содержать информацию в полях, описанных ниже. -// Обязательные поля структуры: -// * ТекстПолучателя - Наименование получателя платежа - Макс. 160 символов; -// * НомерСчетаПолучателя - Номер счета получателя платежа - Макс. 20 символов; -// * НаименованиеБанкаПолучателя - Наименование банка получателя платежа - Макс. 45 символов; -// * БИКБанкаПолучателя - БИК - Макс. 9 символов; -// * СчетБанкаПолучателя - Номер к/с банка получателя платежа - Макс. 20 символов; -// Дополнительные поля структуры: -// * СуммаЧислом - Сумма платежа, в рублях - Макс. 16 символов. -// * НазначениеПлатежа - Наименование платежа (назначение) - Макс. 210 символов; -// * ИННПолучателя - ИНН получателя платежа - Макс. 12 символов; -// * ИННПлательщика - ИНН плательщика - Макс. 12 символов; -// * СтатусСоставителя - Статус составителя платежного документа - Макс. 2 символа; -// * КПППолучателя - КПП получателя платежа - Макс. 9 символов. -// * КодБК - КБК - Макс. 20 символов; -// * КодОКТМО - Код КодОКТМО - Макс. 11 символов; -// * ПоказательОснования - Основание налогового платежа - Макс. 2 символа; -// * ПоказательПериода - Налоговый период - Макс. 10 символов; -// * ПоказательНомера - Номер документа - Макс. 15 символов; -// * ПоказательДаты - Дата документа - Макс. 10 символ. -// * ПоказательТипа - Тип платежа - Макс. 2 символа. -// Прочие дополнительные поля. -// * ФамилияПлательщика - Фамилия плательщика. -// * ИмяПлательщика - Имя плательщика. -// * ОтчествоПлательщика - Отчество плательщика. -// * АдресПлательщика - Адрес плательщика. -// * ЛицевойСчетБюджетногоПолучателя - Лицевой счет бюджетного получателя. -// * ИндексПлатежногоДокумента - Индекс платежного документа. -// * СНИЛС - № лицевого счета в системе персонифицированного учета в ПФР - СНИЛС. -// * НомерДоговора - Номер договора. -// * НомерЛицевогоСчетаПлательщика - Номер лицевого счета плательщика в организации (в системе учета ПУ). -// * НомерКвартиры - Номер квартиры. -// * НомерТелефона - Номер телефона. -// * ВидПлательщика - Вид ДУЛ плательщика. -// * НомерПлательщик - Номер ДУЛ плательщика. -// * ФИОРебенка - Ф.И.О. ребенка/учащегося. -// * ДатаРождения - Дата рождения. -// * СрокПлатежа - Срок платежа/дата выставления счета. -// * ПериодОплаты - Период оплаты. -// * ВидПлатежа - Вид платежа. -// * КодУслуги - Код услуги/название прибора учета. -// * НомерПрибораУчета - Номер прибора учета. -// * ПоказаниеПрибораУчета - Показание прибора учета. -// * НомерИзвещения - Номер извещения, начисления, счета. -// * ДатаИзвещения - Дата извещения/начисления/счета/постановления (для ГИБДД). -// * НомерУчреждения - Номер учреждения (образовательного, медицинского). -// * НомерГруппы - Номер группы детсада/класса школы. -// * ФИОПреподавателя - ФИО преподавателя, специалиста, оказывающего услугу. -// * СуммаСтраховки - Сумма страховки/дополнительной услуги/Сумма пени (в копейках). -// * НомерПостановления - Номер постановления (для ГИБДД). -// * НомерИсполнительногоПроизводства - Номер исполнительного производства. -// * КодВидаПлатежа - Код вида платежа (например, для платежей в адрес Росреестра). -// * ИдентификаторНачисления - Уникальный идентификатор начисления. -// * ТехническийКод - Технический код, рекомендуемый для заполнения поставщиком услуг. -// Может использоваться принимающей организацией для вызова соответствующей -// обрабатывающей ИТ-системы. -// Перечень значений кода представлен ниже. -// -// Код назначения Наименование назначения платежа -// платежа. -// -// 01 Мобильная связь, стационарный телефон. -// 02 Коммунальные услуги, ЖКХ. -// 03 ГИБДД, налоги, пошлины, бюджетные платежи. -// 04 Охранные услуги -// 05 Услуги, оказываемые УФМС. -// 06 ПФР -// 07 Погашение кредитов -// 08 Образовательные учреждения. -// 09 Интернет и ТВ -// 10 Электронные деньги -// 11 Отдых и путешествия. -// 12 Инвестиции и страхование. -// 13 Спорт и здоровье -// 14 Благотворительные и общественные организации. -// 15 Прочие услуги. +// КомандаПечати - Структура - команда печати формы, см. УправлениеПечатью.КомандыПечатиФормы. +// СписокОбъектов - Массив - ссылки на печатаемые объекты. +// НастройкиСохранения - Структура - см. УправлениеПечатью.НастройкиСохранения. // // Возвращаемое значение: -// Строка - строка данных в формате УФЭБС. +// ТаблицаЗначений - файлы печатных форм: +// * ИмяФайла - Строка - имя файла; +// * ДвоичныеДанные - ДвоичныеДанные - файл печатной формы. // -Функция ФорматнаяСтрокаУФЭБС(ДанныеДокумента) Экспорт +Функция НапечататьВФайл(КомандаПечати, СписокОбъектов, НастройкиСохранения) Экспорт - ТекстОшибки = ""; - СтрокаОбязательныхРеквизитов = СтрокаОбязательныхРеквизитов(ДанныеДокумента, ТекстОшибки); + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ИмяФайла"); + Результат.Колонки.Добавить("ДвоичныеДанные"); - Если ПустаяСтрока(СтрокаОбязательныхРеквизитов) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , ,); - Возврат ""; + ДанныеПечати = Неопределено; + Если КомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" Тогда + Источник = КомандаПечати.ДополнительныеПараметры.Ссылка; + ДанныеПечати = СформироватьВнешнююПечатнуюФорму(Источник, КомандаПечати.Идентификатор, СписокОбъектов); + Иначе + ДанныеПечати = СформироватьПечатныеФормы(КомандаПечати.МенеджерПечати, КомандаПечати.Идентификатор, + СписокОбъектов, КомандаПечати.ДополнительныеПараметры); + КонецЕсли; + + КоллекцияПечатныхФорм = ДанныеПечати.КоллекцияПечатныхФорм; + ОбъектыПечати = ДанныеПечати.ОбъектыПечати; + + ПодписиИПечатиОбластей = Неопределено; + Если НастройкиСохранения.ПодписьИПечать Тогда + ПодписиИПечатиОбластей = ПодписиИПечатиОбластей(ОбъектыПечати); КонецЕсли; - СтруктураПредставленийИРеквизитов = СтруктураПредставленийИРеквизитов(); - СтрокаДополнительныхРеквизитов = ""; - ДополнительныеРеквизиты = Новый Структура; - ДобавитьДополнительныеРеквизиты(ДополнительныеРеквизиты); + ТаблицаФорматов = НастройкиФорматовСохраненияТабличногоДокумента(); - Для Каждого Элемент Из ДополнительныеРеквизиты Цикл - - Если Не ДанныеДокумента.Свойство(Элемент.Ключ) Тогда - ДанныеДокумента.Вставить(Элемент.Ключ, ""); + Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл + Если ЗначениеЗаполнено(ПечатнаяФорма.ОфисныеДокументы) Тогда + Для Каждого ОфисныйДокумент Из ПечатнаяФорма.ОфисныеДокументы Цикл + Файл = Результат.Добавить(); + Файл.ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ОфисныйДокумент.Значение + ".docx"); + Файл.ДвоичныеДанные = ПолучитьИзВременногоХранилища(ОфисныйДокумент.Ключ); + КонецЦикла; Продолжить; КонецЕсли; - Если ЗначениеЗаполнено(ДанныеДокумента[Элемент.Ключ]) Тогда - Если Элемент.Ключ = "СуммаЧислом" Тогда - ЗначениеСтрокой = Формат(ДанныеДокумента.СуммаЧислом * 100, "ЧГ="); - Иначе - ЗначениеСтрокой = СтрЗаменить(СокрЛП(Строка(ДанныеДокумента[Элемент.Ключ])), "|", ""); - КонецЕсли; - СтрокаДополнительныхРеквизитов = СтрокаДополнительныхРеквизитов + СтруктураПредставленийИРеквизитов[Элемент.Ключ] - + "=" + ЗначениеСтрокой + "|"; + Если НастройкиСохранения.ПодписьИПечать Тогда + ДобавитьПодписьИПечать(ПечатнаяФорма.ТабличныйДокумент, ПодписиИПечатиОбластей); + Иначе + УбратьПодписьИПечать(ПечатнаяФорма.ТабличныйДокумент); КонецЕсли; + + ПечатныеФормыПоОбъектам = ПечатныеФормыПоОбъектам(ПечатнаяФорма.ТабличныйДокумент, ОбъектыПечати); + Для Каждого СоответствиеОбъектаПечатнойФорме Из ПечатныеФормыПоОбъектам Цикл + + ОбъектПечати = СоответствиеОбъектаПечатнойФорме.Ключ; + ТабличныйДокумент = СоответствиеОбъектаПечатнойФорме.Значение; + + Для Каждого Формат Из НастройкиСохранения.ФорматыСохранения Цикл + ТипФайла = Формат; + Если ТипЗнч(ТипФайла) = Тип("Строка") Тогда + ТипФайла = ТипФайлаТабличногоДокумента[ТипФайла]; + КонецЕсли; + НастройкиФормата = ТаблицаФорматов.НайтиСтроки(Новый Структура("ТипФайлаТабличногоДокумента", ТипФайла))[0]; + + РасширениеФайла = НастройкиФормата.Расширение; + ЗаданныеИменаПечатныхФорм = ПечатнаяФорма.ИмяФайлаПечатнойФормы; + НазваниеПечатнойФормы = ПечатнаяФорма.СинонимМакета; + + ИмяФайла = ИмяФайлаПечатнойФормыОбъекта(ОбъектПечати, ЗаданныеИменаПечатныхФорм, НазваниеПечатнойФормы) + "." + РасширениеФайла; + Если НастройкиСохранения.ПереводитьИменаФайловВТранслит Тогда + ИмяФайла = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ИмяФайла) + КонецЕсли; + ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла); + + Файл = Результат.Добавить(); + Файл.ИмяФайла = ИмяФайла; + Файл.ДвоичныеДанные = ТабличныйДокументВДвоичныеДанные(ТабличныйДокумент, ТипФайла); + КонецЦикла; + КонецЦикла; КонецЦикла; - Если Не ПустаяСтрока(СтрокаДополнительныхРеквизитов) Тогда - ДлинаСтроки = СтрДлина(СтрокаДополнительныхРеквизитов); - СтрокаДополнительныхРеквизитов = Сред(СтрокаДополнительныхРеквизитов, 1, ДлинаСтроки - 1); + Если НастройкиСохранения.УпаковатьВАрхив Тогда + ДвоичныеДанные = УпаковатьВАрхив(Результат); + Результат.Очистить(); + Файл = Результат.Добавить(); + Файл.ИмяФайла = ИмяФайла(ПолучитьИмяВременногоФайла("zip")); + Файл.ДвоичныеДанные = ДвоичныеДанные; КонецЕсли; + + Возврат Результат; + +КонецФункции - ПрочиеДополнительныеРеквизиты = Новый Структура; - ДобавитьПрочиеДополнительныеРеквизиты(ПрочиеДополнительныеРеквизиты); - СтрокаПрочихДополнительныхРеквизитов = ""; +// Конструктор параметра НастройкиСохранения функции УправлениеПечатью.НапечататьВФайл. +// Определяет формат и другие настройки записи табличного документа в файл. +// +// Возвращаемое значение: +// Структура - настройки записи табличного документа в файл: +// * ФорматыСохранения - Массив - коллекция значений типа ТипФайлаТабличногоДокумента; +// * УпаковатьВАрхив - Булево - если установить значение Истина, будет создан один файл архива с файлами указанных форматов; +// * ПереводитьИменаФайловВТранслит - Булево - если установить Истина, то имена полученных файлов будут на латинице. +// * ПодписьИПечать - Булево - если установить Истина и сохраняемый табличный документ поддерживает размещение +// подписей и печатей, то в записанных файлах будут размещены подписи и печати. +// +Функция НастройкиСохранения() Экспорт - Для Каждого Элемент Из ПрочиеДополнительныеРеквизиты Цикл - - Если Не ДанныеДокумента.Свойство(Элемент.Ключ) Тогда - ДанныеДокумента.Вставить(Элемент.Ключ, ""); - Продолжить; - КонецЕсли; - - Если ЗначениеЗаполнено(ДанныеДокумента[Элемент.Ключ]) Тогда - ЗначениеСтрокой = СтрЗаменить(СокрЛП(Строка(ДанныеДокумента[Элемент.Ключ])), "|", ""); - СтрокаПрочихДополнительныхРеквизитов = СтрокаПрочихДополнительныхРеквизитов - + СтруктураПредставленийИРеквизитов[Элемент.Ключ] + "=" + ЗначениеСтрокой - + "|"; - КонецЕсли; - КонецЦикла; + НастройкиСохранения = Новый Структура; + НастройкиСохранения.Вставить("ФорматыСохранения", Новый Массив); + НастройкиСохранения.Вставить("УпаковатьВАрхив", Ложь); + НастройкиСохранения.Вставить("ПереводитьИменаФайловВТранслит", Ложь); + НастройкиСохранения.Вставить("ПодписьИПечать", Ложь); - Если Не ПустаяСтрока(СтрокаПрочихДополнительныхРеквизитов) Тогда - ДлинаСтроки = СтрДлина(СтрокаПрочихДополнительныхРеквизитов); - СтрокаПрочихДополнительныхРеквизитов = Сред(СтрокаПрочихДополнительныхРеквизитов, 1, ДлинаСтроки - 1); - КонецЕсли; - - ИтоговаяСтрока = СтрокаОбязательныхРеквизитов - + ?(ПустаяСтрока(СтрокаДополнительныхРеквизитов), "", "|" + СтрокаДополнительныхРеквизитов) - + ?(ПустаяСтрока(СтрокаПрочихДополнительныхРеквизитов), "", "|" + СтрокаПрочихДополнительныхРеквизитов); - - Возврат ИтоговаяСтрока; + Возврат НастройкиСохранения; КонецФункции @@ -1063,7 +1166,7 @@ // Функция ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета, Знач УдалитьТипМакета, Знач УдалитьИмяМакета = "") Экспорт - Макет = УправлениеПечатьюСлужебный.ПолучитьМакет(ДвоичныеДанныеМакета); + Макет = УправлениеПечатьюСлужебный.МакетИзДвоичныхДанных(ДвоичныеДанныеМакета); Если Макет <> Неопределено Тогда Макет.Вставить("Тип", "DOCX"); Макет.Вставить("НастройкиСтраницыМакета", Новый Соответствие); @@ -1318,6 +1421,106 @@ Возврат ""; КонецФункции +// Устарела. Следует использовать УправлениеПечатьюРФ.ФорматнаяСтрокаУФЭБС. +// +// Формирует форматную строку согласно "Унифицированному формату электронных банковских сообщений" для ее отображения в +// виде QR-кода. +// +// Параметры: +// ДанныеДокумента - Структура - содержит значения полей документа. +// Данные документа будут закодированы согласно стандарту +// "СТАНДАРТЫ ФИНАНСОВЫХ ОПЕРАЦИЙ Символы двумерного штрихового кода для осуществления платежей физических лиц". +// ДанныеДокумента должны содержать информацию в полях, описанных ниже. +// Обязательные поля структуры: +// * ТекстПолучателя - Наименование получателя платежа - Макс. 160 символов; +// * НомерСчетаПолучателя - Номер счета получателя платежа - Макс. 20 символов; +// * НаименованиеБанкаПолучателя - Наименование банка получателя платежа - Макс. 45 символов; +// * БИКБанкаПолучателя - БИК - Макс. 9 символов; +// * СчетБанкаПолучателя - Номер к/с банка получателя платежа - Макс. 20 символов; +// Дополнительные поля структуры: +// * СуммаЧислом - Сумма платежа, в рублях - Макс. 16 символов. +// * НазначениеПлатежа - Наименование платежа (назначение) - Макс. 210 символов; +// * ИННПолучателя - ИНН получателя платежа - Макс. 12 символов; +// * ИННПлательщика - ИНН плательщика - Макс. 12 символов; +// * СтатусСоставителя - Статус составителя платежного документа - Макс. 2 символа; +// * КПППолучателя - КПП получателя платежа - Макс. 9 символов. +// * КодБК - КБК - Макс. 20 символов; +// * КодОКТМО - Код КодОКТМО - Макс. 11 символов; +// * ПоказательОснования - Основание налогового платежа - Макс. 2 символа; +// * ПоказательПериода - Налоговый период - Макс. 10 символов; +// * ПоказательНомера - Номер документа - Макс. 15 символов; +// * ПоказательДаты - Дата документа - Макс. 10 символ. +// * ПоказательТипа - Тип платежа - Макс. 2 символа. +// Прочие дополнительные поля. +// * ФамилияПлательщика - Фамилия плательщика. +// * ИмяПлательщика - Имя плательщика. +// * ОтчествоПлательщика - Отчество плательщика. +// * АдресПлательщика - Адрес плательщика. +// * ЛицевойСчетБюджетногоПолучателя - Лицевой счет бюджетного получателя. +// * ИндексПлатежногоДокумента - Индекс платежного документа. +// * СНИЛС - № лицевого счета в системе персонифицированного учета в ПФР - СНИЛС. +// * НомерДоговора - Номер договора. +// * НомерЛицевогоСчетаПлательщика - Номер лицевого счета плательщика в организации (в системе учета ПУ). +// * НомерКвартиры - Номер квартиры. +// * НомерТелефона - Номер телефона. +// * ВидПлательщика - Вид ДУЛ плательщика. +// * НомерПлательщик - Номер ДУЛ плательщика. +// * ФИОРебенка - Ф.И.О. ребенка/учащегося. +// * ДатаРождения - Дата рождения. +// * СрокПлатежа - Срок платежа/дата выставления счета. +// * ПериодОплаты - Период оплаты. +// * ВидПлатежа - Вид платежа. +// * КодУслуги - Код услуги/название прибора учета. +// * НомерПрибораУчета - Номер прибора учета. +// * ПоказаниеПрибораУчета - Показание прибора учета. +// * НомерИзвещения - Номер извещения, начисления, счета. +// * ДатаИзвещения - Дата извещения/начисления/счета/постановления (для ГИБДД). +// * НомерУчреждения - Номер учреждения (образовательного, медицинского). +// * НомерГруппы - Номер группы детсада/класса школы. +// * ФИОПреподавателя - ФИО преподавателя, специалиста, оказывающего услугу. +// * СуммаСтраховки - Сумма страховки/дополнительной услуги/Сумма пени (в копейках). +// * НомерПостановления - Номер постановления (для ГИБДД). +// * НомерИсполнительногоПроизводства - Номер исполнительного производства. +// * КодВидаПлатежа - Код вида платежа (например, для платежей в адрес Росреестра). +// * ИдентификаторНачисления - Уникальный идентификатор начисления. +// * ТехническийКод - Технический код, рекомендуемый для заполнения поставщиком услуг. +// Может использоваться принимающей организацией для вызова соответствующей +// обрабатывающей ИТ-системы. +// Перечень значений кода представлен ниже. +// +// Код назначения Наименование назначения платежа +// платежа. +// +// 01 Мобильная связь, стационарный телефон. +// 02 Коммунальные услуги, ЖКХ. +// 03 ГИБДД, налоги, пошлины, бюджетные платежи. +// 04 Охранные услуги +// 05 Услуги, оказываемые УФМС. +// 06 ПФР +// 07 Погашение кредитов +// 08 Образовательные учреждения. +// 09 Интернет и ТВ +// 10 Электронные деньги +// 11 Отдых и путешествия. +// 12 Инвестиции и страхование. +// 13 Спорт и здоровье +// 14 Благотворительные и общественные организации. +// 15 Прочие услуги. +// +// Возвращаемое значение: +// Строка - строка данных в формате УФЭБС. +// +Функция ФорматнаяСтрокаУФЭБС(ДанныеДокумента) Экспорт + + МодульУправлениеПечатьюРФ = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатьюРФ"); + Если МодульУправлениеПечатьюРФ <> Неопределено Тогда + Возврат МодульУправлениеПечатьюРФ.ФорматнаяСтрокаУФЭБС(ДанныеДокумента); + КонецЕсли; + + Возврат ""; + +КонецФункции + #КонецОбласти #КонецОбласти @@ -1395,81 +1598,9 @@ Возврат Результат; КонецФункции -// Конструктор для параметра КоллекцияПечатныхФорм процедуры Печать. -// -// ВозвращаемоеЗначение: -// ТаблицаЗначений - пустая коллекция печатных форм: -// * ИмяМакета - Строка - идентификатор печатной формы; -// * ИмяВРЕГ - Строка - идентификатор в верхнем регистре символов для быстрого поиска; -// * СинонимМакета - Строка - представление печатной формы; -// * ТабличныйДокумент - ТабличныйДокумент - печатная форма; -// * Экземпляров - Число - количество копий, которое необходимо вывести на печать; -// * Картинка - Картинка - (не используется); -// * ПолныйПутьКМакету - Строка - используется для быстрого перехода к редактированию макета печатной формы; -// * ИмяФайлаПечатнойФормы - Строка - имя файла; -// - Соответствие - имена файлов для каждого объекта: -// ** Ключ - ЛюбаяСсылка - ссылка на объект печати; -// ** Значение - Строка - имя файла; -// * ОфисныеДокументы - Соответствие - коллекция печатных форм в формате офисных документов: -// ** Ключ - Строка - адрес во временном хранилище двоичных данных печатной формы; -// ** Значение - Строка - имя файла печатной формы. -Функция ПодготовитьКоллекциюПечатныхФорм(Знач ИменаМакетов) Экспорт - - Макеты = Новый ТаблицаЗначений; - Макеты.Колонки.Добавить("ИмяМакета"); - Макеты.Колонки.Добавить("ИмяВРЕГ"); - Макеты.Колонки.Добавить("СинонимМакета"); - Макеты.Колонки.Добавить("ТабличныйДокумент"); - Макеты.Колонки.Добавить("Экземпляров"); - Макеты.Колонки.Добавить("Картинка"); - Макеты.Колонки.Добавить("ПолныйПутьКМакету"); - Макеты.Колонки.Добавить("ИмяФайлаПечатнойФормы"); - Макеты.Колонки.Добавить("ОфисныеДокументы"); - - Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда - ИменаМакетов = СтрРазделить(ИменаМакетов, ","); - КонецЕсли; - - Для Каждого ИмяМакета Из ИменаМакетов Цикл - Макет = Макеты.Найти(ИмяМакета, "ИмяМакета"); - Если Макет = Неопределено Тогда - Макет = Макеты.Добавить(); - Макет.ИмяМакета = ИмяМакета; - Макет.ИмяВРЕГ = ВРег(ИмяМакета); - Макет.Экземпляров = 1; - Иначе - Макет.Экземпляров = Макет.Экземпляров + 1; - КонецЕсли; - КонецЦикла; - - Возврат Макеты; - -КонецФункции - -// Подготовить структуру параметров вывода для менеджера объекта формирующего печатные формы. -// -Функция ПодготовитьСтруктуруПараметровВывода() Экспорт - - ПараметрыВывода = Новый Структура; - ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); // не используется - - СтруктураПараметровПисьма = Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); - ПараметрыВывода.Вставить("ПараметрыОтправки", СтруктураПараметровПисьма); - - Возврат ПараметрыВывода; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Шаблоны сообщений. -// Подготавливает печатные формы для шаблонов сообщений -// -Функция ПодготовитьПечатныеФормы(Знач ИмяМенеджераПечати, Знач ИменаМакетов, Знач МассивОбъектов, Знач ПараметрыПечати, - ДопустимыеТипыОбъектовПечати = Неопределено) Экспорт - Возврат СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, ДопустимыеТипыОбъектовПечати); -КонецФункции - // Возвращает допустимые для сохранения форматы печатных форм для шаблонов сообщений. // Функция ФорматыСохраненияТабличногоДокумента() Экспорт @@ -1490,7 +1621,7 @@ // КоллекцияПечатныхФорм - ТаблицаЗначений - см. описание процедуры Печать() в документации. // ОбъектыПечати - СписокЗначений - см. описание процедуры Печать() в документации. // ПараметрыВывода - Структура - см. описание процедуры Печать() в документации. -// +// Процедура ПечатьПоВнешнемуИсточнику(ДополнительнаяОбработкаСсылка, ПараметрыИсточника, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт @@ -1632,6 +1763,13 @@ Обработчик.ЧитаемыеОбъекты = "РегистрСведений.ПользовательскиеМакетыПечати"; Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ПользовательскиеМакетыПечати"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "РегистрыСведений.ПоставляемыеМакетыПечати.ОбновитьКонтрольнуюСуммуМакетов"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Комментарий = НСтр("ru = 'Определяет, какие поставляемые макеты печатных форм изменились по отношению к предыдущей версии конфигурации.'"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("51f71246-67e3-40e0-80e5-ebb3192fa6c0"); + КонецПроцедуры // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. @@ -1823,7 +1961,7 @@ Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда ИменаМакетов = СтрРазделить(ИменаМакетов, ","); Иначе // Тип("Массив") - ИменаМакетов = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИменаМакетов); + ИменаМакетов = ОбщегоНазначения.СкопироватьРекурсивно(ИменаМакетов); КонецЕсли; ПрефиксВнешнихПечатныхФорм = "ВнешняяПечатнаяФорма."; @@ -1886,8 +2024,6 @@ КонецЕсли; // Проверка соответствия печатаемых объектов выбранной печатной форме. - ОжидаемыйТипОбъекта = Неопределено; - ОбъектыСоответствующиеПечатнойФорме = МассивОбъектов; Если ДопустимыеТипыОбъектовПечати <> Неопределено И ДопустимыеТипыОбъектовПечати.Количество() > 0 Тогда Если ТипЗнч(МассивОбъектов) = Тип("Массив") Тогда @@ -2078,11 +2214,9 @@ Функция НастройкиФорматовСохраненияТабличногоДокумента() Экспорт ТаблицаФорматов = СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента(); - - // Дополнительные форматы / изменение списка текущих. - УправлениеПечатьюПереопределяемый.ПриЗаполненииНастроекФорматовСохраненияТабличногоДокумента(ТаблицаФорматов); Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл + // Для возможности использования в мобильном клиенте. ФорматСохранения.Представление = Строка(ФорматСохранения.Ссылка); КонецЦикла; @@ -2092,8 +2226,7 @@ // Фильтрует список команд печати в соответствии с установленными функциональными опциями. Процедура ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати, Форма = Неопределено) - Для НомерКоманды = -КомандыПечати.Количество() + 1 По 0 Цикл - ОписаниеКомандыПечати = КомандыПечати[-НомерКоманды]; + Для каждого ОписаниеКомандыПечати Из КомандыПечати Цикл ФункциональныеОпцииКомандыПечати = СтрРазделить(ОписаниеКомандыПечати.ФункциональныеОпции, ", ", Ложь); ВидимостьКоманды = ФункциональныеОпцииКомандыПечати.Количество() = 0; Для Каждого ФункциональнаяОпция Из ФункциональныеОпцииКомандыПечати Цикл @@ -2155,188 +2288,22 @@ КонецПроцедуры -Функция СтрокаОбязательныхРеквизитов(ДанныеДокумента, ТекстСообщения) - - ОбязательныеРеквизиты = Новый Структура(); - СтруктураПредставленийИРеквизитов = СтруктураПредставленийИРеквизитов(); - ДобавитьОбязательныеРеквизиты(ОбязательныеРеквизиты); - - Если Не ЗначениеЗаполнено(ДанныеДокумента.СчетБанкаПолучателя) Тогда - ДанныеДокумента.СчетБанкаПолучателя = "0"; - КонецЕсли; - - СлужебныеДанные = "ST00012"; - ОбязательныеДанные = ""; - - Для Каждого Элемент Из ОбязательныеРеквизиты Цикл - Если Не ЗначениеЗаполнено(ДанныеДокумента[Элемент.Ключ]) Тогда - ТекстСообщения = НСтр("ru = 'Не заполнен обязательный реквизит: %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Элемент.Ключ); - Возврат ""; - КонецЕсли; - - ЗначениеСтрокой = СтрЗаменить(СокрЛП(Строка(ДанныеДокумента[Элемент.Ключ])), "|", ""); - - ОбязательныеДанные = ОбязательныеДанные + "|" + СтруктураПредставленийИРеквизитов[Элемент.Ключ] + "=" - + ЗначениеСтрокой; - - КонецЦикла; - - Если СтрДлина(ОбязательныеДанные) > 300 Тогда - Шаблон = НСтр("ru = 'Невозможно создать QR-код для документа %1 - |Строка обязательных реквизитов должна быть меньше 300 символов: - |""%2""'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ДанныеДокумента.Ссылка, ОбязательныеДанные); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); - Возврат ""; - КонецЕсли; - - Возврат СлужебныеДанные + ОбязательныеДанные; - -КонецФункции - -Функция СтруктураПредставленийИРеквизитов() - - СтруктураВозврата = Новый Структура(); - - СтруктураВозврата.Вставить("ТекстПолучателя", "Name"); - СтруктураВозврата.Вставить("НомерСчетаПолучателя", "PersonalAcc"); - СтруктураВозврата.Вставить("НаименованиеБанкаПолучателя", "BankName"); - СтруктураВозврата.Вставить("БИКБанкаПолучателя", "BIC"); - СтруктураВозврата.Вставить("СчетБанкаПолучателя", "CorrespAcc"); - - СтруктураВозврата.Вставить("СуммаЧислом", "Sum"); - СтруктураВозврата.Вставить("НазначениеПлатежа", "Purpose"); - СтруктураВозврата.Вставить("ИННПолучателя", "PayeeINN"); - СтруктураВозврата.Вставить("ИННПлательщика", "PayerINN"); - СтруктураВозврата.Вставить("СтатусСоставителя", "DrawerStatus"); - СтруктураВозврата.Вставить("КПППолучателя", "KPP"); - СтруктураВозврата.Вставить("КодБК", "CBC"); - СтруктураВозврата.Вставить("КодОКТМО", "OKTMO"); - СтруктураВозврата.Вставить("ПоказательОснования", "PaytReason"); - СтруктураВозврата.Вставить("ПоказательПериода", "TaxPeriod"); - СтруктураВозврата.Вставить("ПоказательНомера", "DocNo"); - СтруктураВозврата.Вставить("ПоказательДаты", "DocDate"); - СтруктураВозврата.Вставить("ПоказательТипа", "TaxPaytKind"); - - СтруктураВозврата.Вставить("ФамилияПлательщика", "lastName"); - СтруктураВозврата.Вставить("ИмяПлательщика", "firstName"); - СтруктураВозврата.Вставить("ОтчествоПлательщика", "middleName"); - СтруктураВозврата.Вставить("АдресПлательщика", "payerAddress"); - СтруктураВозврата.Вставить("ЛицевойСчетБюджетногоПолучателя", "personalAccount"); - СтруктураВозврата.Вставить("ИндексПлатежногоДокумента", "docIdx"); - СтруктураВозврата.Вставить("СНИЛС", "pensAcc"); - СтруктураВозврата.Вставить("НомерДоговора", "contract"); - СтруктураВозврата.Вставить("НомерЛицевогоСчетаПлательщика", "persAcc"); - СтруктураВозврата.Вставить("НомерКвартиры", "flat"); - СтруктураВозврата.Вставить("НомерТелефона", "phone"); - СтруктураВозврата.Вставить("ВидПлательщика", "payerIdType"); - СтруктураВозврата.Вставить("НомерПлательщика", "payerIdNum"); - СтруктураВозврата.Вставить("ФИОРебенка", "childFio"); - СтруктураВозврата.Вставить("ДатаРождения", "birthDate"); - СтруктураВозврата.Вставить("СрокПлатежа", "paymTerm"); - СтруктураВозврата.Вставить("ПериодОплаты", "paymPeriod"); - СтруктураВозврата.Вставить("ВидПлатежа", "category"); - СтруктураВозврата.Вставить("КодУслуги", "serviceName"); - СтруктураВозврата.Вставить("НомерПрибораУчета", "counterId"); - СтруктураВозврата.Вставить("ПоказаниеПрибораУчета", "counterVal"); - СтруктураВозврата.Вставить("НомерИзвещения", "quittId"); - СтруктураВозврата.Вставить("ДатаИзвещения", "quittDate"); - СтруктураВозврата.Вставить("НомерУчреждения", "instNum"); - СтруктураВозврата.Вставить("НомерГруппы", "classNum"); - СтруктураВозврата.Вставить("ФИОПреподавателя", "specFio"); - СтруктураВозврата.Вставить("СуммаСтраховки", "addAmount"); - СтруктураВозврата.Вставить("НомерПостановления", "ruleId"); - СтруктураВозврата.Вставить("НомерИсполнительногоПроизводства", "execId"); - СтруктураВозврата.Вставить("КодВидаПлатежа", "regType"); - СтруктураВозврата.Вставить("ИдентификаторНачисления", "uin"); - СтруктураВозврата.Вставить("ТехническийКод", "TechCode"); - - Возврат СтруктураВозврата; - -КонецФункции - Функция КомпонентаФормированияQRКода() ТекстОшибки = НСтр("ru = 'Не удалось подключить внешнюю компоненту для генерации QR-кода. Подробности в журнале регистрации.'"); QRCodeGenerator = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("QRCodeExtension", "ОбщийМакет.КомпонентаПечатиQRКода"); Если QRCodeGenerator = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); КонецЕсли; Возврат QRCodeGenerator; КонецФункции -Процедура ДобавитьОбязательныеРеквизиты(СтруктураДанных) - - СтруктураДанных.Вставить("ТекстПолучателя"); - СтруктураДанных.Вставить("НомерСчетаПолучателя"); - СтруктураДанных.Вставить("НаименованиеБанкаПолучателя"); - СтруктураДанных.Вставить("БИКБанкаПолучателя"); - СтруктураДанных.Вставить("СчетБанкаПолучателя"); - -КонецПроцедуры - -Процедура ДобавитьДополнительныеРеквизиты(СтруктураДанных) - - СтруктураДанных.Вставить("СуммаЧислом"); - СтруктураДанных.Вставить("НазначениеПлатежа"); - СтруктураДанных.Вставить("ИННПолучателя"); - СтруктураДанных.Вставить("ИННПлательщика"); - СтруктураДанных.Вставить("СтатусСоставителя"); - СтруктураДанных.Вставить("КПППолучателя"); - СтруктураДанных.Вставить("КодБК"); - СтруктураДанных.Вставить("КодОКТМО"); - СтруктураДанных.Вставить("ПоказательОснования"); - СтруктураДанных.Вставить("ПоказательПериода"); - СтруктураДанных.Вставить("ПоказательНомера"); - СтруктураДанных.Вставить("ПоказательДаты"); - СтруктураДанных.Вставить("ПоказательТипа"); - -КонецПроцедуры - -Процедура ДобавитьПрочиеДополнительныеРеквизиты(СтруктураДанных) - - СтруктураДанных.Вставить("ФамилияПлательщика"); - СтруктураДанных.Вставить("ИмяПлательщика"); - СтруктураДанных.Вставить("ОтчествоПлательщика"); - СтруктураДанных.Вставить("АдресПлательщика"); - СтруктураДанных.Вставить("ЛицевойСчетБюджетногоПолучателя"); - СтруктураДанных.Вставить("ИндексПлатежногоДокумента"); - СтруктураДанных.Вставить("СНИЛС"); - СтруктураДанных.Вставить("НомерДоговора"); - СтруктураДанных.Вставить("НомерЛицевогоСчетаПлательщика"); - СтруктураДанных.Вставить("НомерКвартиры"); - СтруктураДанных.Вставить("НомерТелефона"); - СтруктураДанных.Вставить("ВидПлательщика"); - СтруктураДанных.Вставить("НомерПлательщика"); - СтруктураДанных.Вставить("ФИОРебенка"); - СтруктураДанных.Вставить("ДатаРождения"); - СтруктураДанных.Вставить("СрокПлатежа"); - СтруктураДанных.Вставить("ПериодОплаты"); - СтруктураДанных.Вставить("ВидПлатежа"); - СтруктураДанных.Вставить("КодУслуги"); - СтруктураДанных.Вставить("НомерПрибораУчета"); - СтруктураДанных.Вставить("ПоказаниеПрибораУчета"); - СтруктураДанных.Вставить("НомерИзвещения"); - СтруктураДанных.Вставить("ДатаИзвещения"); - СтруктураДанных.Вставить("НомерУчреждения"); - СтруктураДанных.Вставить("НомерГруппы"); - СтруктураДанных.Вставить("ФИОПреподавателя"); - СтруктураДанных.Вставить("СуммаСтраховки"); - СтруктураДанных.Вставить("НомерПостановления"); - СтруктураДанных.Вставить("НомерИсполнительногоПроизводства"); - СтруктураДанных.Вставить("КодВидаПлатежа"); - СтруктураДанных.Вставить("ИдентификаторНачисления"); - СтруктураДанных.Вставить("ТехническийКод"); - -КонецПроцедуры - Процедура СообщитьПечатнаяФормаНедоступна(Объект) ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Печать %1 не выполнена: выбранная печатная форма недоступна.'"), Объект); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Объект); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Объект); КонецПроцедуры // Формирует пакет документов для отправки на принтер. @@ -2399,9 +2366,13 @@ // Собирает список команд печати из нескольких объектов. Процедура ЗаполнитьКомандыПечатиДляСпискаОбъектов(СписокОбъектов, КомандыПечати) - ИсточникиКомандПечати = ИсточникиКомандПечати(); + ИсточникиКомандПечати = Новый Соответствие; + Для Каждого ИсточникКомандПечати Из ИсточникиКомандПечати() Цикл + ИсточникиКомандПечати.Вставить(ИсточникКомандПечати, Истина); + КонецЦикла; + Для Каждого ОбъектМетаданных Из СписокОбъектов Цикл - Если ИсточникиКомандПечати.Найти(ОбъектМетаданных) = Неопределено Тогда + Если ИсточникиКомандПечати[ОбъектМетаданных] = Неопределено Тогда Продолжить; КонецЕсли; @@ -2409,25 +2380,20 @@ Для Каждого ДобавляемаяКомандаПечати Из КомандыПечатиФормы Цикл // Поиск аналогичной ранее добавленной команды печати. - НайденныеКоманды = Новый Массив; - Для Каждого ИмеющаясяКомандаПечати Из КомандыПечати Цикл - Если ИмеющаясяКомандаПечати.УникальныйИдентификатор = ДобавляемаяКомандаПечати.УникальныйИдентификатор Тогда - НайденныеКоманды.Добавить(ИмеющаясяКомандаПечати); + НайденныеКоманды = КомандыПечати.НайтиСтроки(Новый Структура("УникальныйИдентификатор", ДобавляемаяКомандаПечати.УникальныйИдентификатор)); + + Для Каждого ИмеющаясяКомандаПечати Из НайденныеКоманды Цикл + // Если уже есть такая команда, дополняем список типов объектов, для которых она предназначена. + ТипОбъекта = Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка.")); + Если ИмеющаясяКомандаПечати.ТипыОбъектовПечати.Найти(ТипОбъекта) = Неопределено Тогда + ИмеющаясяКомандаПечати.ТипыОбъектовПечати.Добавить(ТипОбъекта); + КонецЕсли; + // Очистим МенеджерПечати в случае, если у имеющейся команды он отличается. + Если ИмеющаясяКомандаПечати.МенеджерПечати <> ДобавляемаяКомандаПечати.МенеджерПечати Тогда + ИмеющаясяКомандаПечати.МенеджерПечати = ""; КонецЕсли; КонецЦикла; - Если НайденныеКоманды.Количество() > 0 Тогда - Для Каждого ИмеющаясяКомандаПечати Из НайденныеКоманды Цикл - // Если уже есть такая команда, дополняем список типов объектов, для которых она предназначена. - ТипОбъекта = Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка.")); - Если ИмеющаясяКомандаПечати.ТипыОбъектовПечати.Найти(ТипОбъекта) = Неопределено Тогда - ИмеющаясяКомандаПечати.ТипыОбъектовПечати.Добавить(ТипОбъекта); - КонецЕсли; - // Очистим МенеджерПечати в случае, если у имеющейся команды он отличается. - Если ИмеющаясяКомандаПечати.МенеджерПечати <> ДобавляемаяКомандаПечати.МенеджерПечати Тогда - ИмеющаясяКомандаПечати.МенеджерПечати = ""; - КонецЕсли; - КонецЦикла; Продолжить; КонецЕсли; @@ -2464,22 +2430,28 @@ ТекстЗапроса = "ВЫБРАТЬ - | НастройкиКомандПечати.УникальныйИдентификатор + | НастройкиКомандПечати.УникальныйИдентификатор КАК УникальныйИдентификатор |ИЗ | РегистрСведений.НастройкиКомандПечати КАК НастройкиКомандПечати |ГДЕ | НастройкиКомандПечати.Владелец = &Владелец - | И НастройкиКомандПечати.Видимость = ЛОЖЬ"; + | И НЕ НастройкиКомандПечати.Видимость"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Владелец", Владелец); - СписокОтключенных = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("УникальныйИдентификатор"); + Выборка = Запрос.Выполнить().Выбрать(); + + СписокОтключенных = Новый Соответствие; + Пока Выборка.Следующий() Цикл + СписокОтключенных.Вставить(Выборка.УникальныйИдентификатор, Истина); + КонецЦикла; Для Каждого КомандаПечати Из КомандыПечати Цикл КомандаПечати.УникальныйИдентификатор = УникальныйИдентификаторКомандыПечати(КомандаПечати); - Если СписокОтключенных.Найти(КомандаПечати.УникальныйИдентификатор) <> Неопределено Тогда + Если СписокОтключенных[КомандаПечати.УникальныйИдентификатор] <> Неопределено Тогда КомандаПечати.Отключена = Истина; КонецЕсли; + КомандаПечати.ФорматСохранения = Строка(КомандаПечати.ФорматСохранения); КонецЦикла; КонецПроцедуры @@ -2530,6 +2502,7 @@ МодульДополнительныеОтчетыИОбработки.ПриПолученииКомандПечати(КомандыПечати, Источник.ПолноеИмя); КонецЕсли; + КомандыПечати.Индексы.Добавить("МенеджерПечати"); Найденные = ПодключенныеОтчетыИОбработки.НайтиСтроки(Новый Структура("ДобавитьКомандыПечати", Истина)); Для Каждого ПодключенныйОбъект Из Найденные Цикл ПодключенныйОбъект.Менеджер.ДобавитьКомандыПечати(КомандыПечати); @@ -2547,6 +2520,7 @@ УстановитьНастройкиКомандПечати(КомандыПечати, Источник.СсылкаМетаданных); ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати); + КомандыПечати.Индексы.Добавить("УникальныйИдентификатор"); Возврат КомандыПечати; КонецФункции @@ -2611,4 +2585,364 @@ Возврат НСтр("ru = 'Тип области не указан или указан некорректно.'"); КонецФункции +Функция ПодписиИПечатиОбластей(ОбъектыПечати) Экспорт + + ПодписиИПечати = ПодписиИПечатиОбъектов(ОбъектыПечати); + + ПодписиИПечатиОбластей = Новый Соответствие; + Для Каждого ОбъектПечати Из ОбъектыПечати Цикл + СсылкаНаОбъект = ОбъектПечати.Значение; + КомплектПодписейИПечатей = ПодписиИПечати[СсылкаНаОбъект]; + ПодписиИПечатиОбластей.Вставить(ОбъектПечати.Представление, КомплектПодписейИПечатей); + КонецЦикла; + + Возврат ПодписиИПечатиОбластей; + +КонецФункции + +Функция ПодписиИПечатиОбъектов(Знач ОбъектыПечати) Экспорт + + СписокОбъектов = ОбъектыПечати.ВыгрузитьЗначения(); + ПодписиИПечати = Новый Соответствие; + УправлениеПечатьюПереопределяемый.ПриПолученииПодписейИПечатей(СписокОбъектов, ПодписиИПечати); + + Возврат ПодписиИПечати; + +КонецФункции + +Процедура ДобавитьПодписьИПечать(ТабличныйДокумент, ПодписиИПечатиОбластей) Экспорт + + Для Каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл + Позиция = СтрНайти(Рисунок.Имя, "_Документ_"); + Если Позиция > 0 Тогда + ИмяОбластиОбъекта = Сред(Рисунок.Имя, Позиция + 1); + + КомплектПодписейИПечатей = ПодписиИПечатиОбластей[ИмяОбластиОбъекта]; + Если КомплектПодписейИПечатей = Неопределено Тогда + Продолжить; + КонецЕсли; + + Картинка = КомплектПодписейИПечатей[Лев(Рисунок.Имя, Позиция - 1)]; + Если Картинка <> Неопределено Тогда + Рисунок.Картинка = Картинка; + КонецЕсли; + Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура УбратьПодписьИПечать(ТабличныйДокумент) Экспорт + + Для Каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл + Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Картинка И СтрНайти(Рисунок.Имя, "_Документ_") > 0 Тогда + Рисунок.Картинка = Новый Картинка; + Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ПрефиксыИменОбластейСПодписьюИПечатью() + + Результат = Новый Массив; + Результат.Добавить("Печать"); + Результат.Добавить("Подпись"); + Результат.Добавить("Факсимиле"); + + Возврат Результат; + +КонецФункции + +Функция СформироватьВнешнююПечатнуюФорму(ДополнительнаяОбработкаСсылка, Идентификатор, СписокОбъектов) + + ПараметрыИсточника = Новый Структура; + ПараметрыИсточника.Вставить("ИдентификаторКоманды", Идентификатор); + ПараметрыИсточника.Вставить("ОбъектыНазначения", СписокОбъектов); + + КоллекцияПечатныхФорм = Неопределено; + ОбъектыПечати = Новый СписокЗначений; + ПараметрыВывода = ПодготовитьСтруктуруПараметровВывода(); + + ПечатьПоВнешнемуИсточнику(ДополнительнаяОбработкаСсылка, ПараметрыИсточника, КоллекцияПечатныхФорм, + ОбъектыПечати, ПараметрыВывода); + + Результат = Новый Структура; + Результат.Вставить("КоллекцияПечатныхФорм", КоллекцияПечатныхФорм); + Результат.Вставить("ОбъектыПечати", ОбъектыПечати); + Результат.Вставить("ПараметрыВывода", ПараметрыВывода); + + Возврат Результат; + +КонецФункции + +Процедура ВставитьКартинкиВHTML(ИмяФайлаHTML) Экспорт + + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + ТекстовыйДокумент.Прочитать(ИмяФайлаHTML, КодировкаТекста.UTF8); + ТекстHTML = ТекстовыйДокумент.ПолучитьТекст(); + + ФайлHTML = Новый Файл(ИмяФайлаHTML); + + ИмяПапкиКартинок = ФайлHTML.ИмяБезРасширения + "_files"; + ПутьКПапкеКартинок = СтрЗаменить(ФайлHTML.ПолноеИмя, ФайлHTML.Имя, ИмяПапкиКартинок); + + // Ожидается, что в папке будут только картинки. + ФайлыКартинок = НайтиФайлы(ПутьКПапкеКартинок, "*"); + + Для Каждого ФайлКартинки Из ФайлыКартинок Цикл + КартинкаТекстом = Base64Строка(Новый ДвоичныеДанные(ФайлКартинки.ПолноеИмя)); + КартинкаТекстом = "data:image/" + Сред(ФайлКартинки.Расширение,2) + ";base64," + Символы.ПС + КартинкаТекстом; + + ТекстHTML = СтрЗаменить(ТекстHTML, ИмяПапкиКартинок + "\" + ФайлКартинки.Имя, КартинкаТекстом); + КонецЦикла; + + ТекстовыйДокумент.УстановитьТекст(ТекстHTML); + ТекстовыйДокумент.Записать(ИмяФайлаHTML, КодировкаТекста.UTF8); + +КонецПроцедуры + +Функция ИмяФайла(ПутьКФайлу) + Файл = Новый Файл(ПутьКФайлу); + Возврат Файл.Имя; +КонецФункции + +Функция УпаковатьВАрхив(СписокФайлов) + + Если СписокФайлов.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + ПотокВПамяти = Новый ПотокВПамяти; + ЗаписьZipФайла = Новый ЗаписьZipФайла(ПотокВПамяти); + + ВременнаяПапка = ФайловаяСистема.СоздатьВременныйКаталог(); + + СоздатьКаталог(ВременнаяПапка); + + Для Каждого Файл Из СписокФайлов Цикл + ИмяФайла = ВременнаяПапка + Файл.ИмяФайла; + ИмяФайла = УникальноеИмяФайла(ИмяФайла); + Файл.ДвоичныеДанные.Записать(ИмяФайла); + ЗаписьZipФайла.Добавить(ИмяФайла); + КонецЦикла; + + ЗаписьZipФайла.Записать(); + ПотокВПамяти.Перейти(0, ПозицияВПотоке.Начало); + + ЧтениеДанных = Новый ЧтениеДанных(ПотокВПамяти); + РезультатЧтенияДанных = ЧтениеДанных.Прочитать(); + ДвоичныеДанные = РезультатЧтенияДанных.ПолучитьДвоичныеДанные(); + + ЧтениеДанных.Закрыть(); + ПотокВПамяти.Закрыть(); + + ФайловаяСистема.УдалитьВременныйКаталог(ВременнаяПапка); + + Возврат ДвоичныеДанные; + +КонецФункции + +Функция УникальноеИмяФайла(ИмяФайла) + + Файл = Новый Файл(ИмяФайла); + ИмяБезРасширения = Файл.ИмяБезРасширения; + Расширение = Файл.Расширение; + Папка = Файл.Путь; + + Счетчик = 1; + Пока Файл.Существует() Цикл + Счетчик = Счетчик + 1; + Файл = Новый Файл(Папка + ИмяБезРасширения + " (" + Счетчик + ")" + Расширение); + КонецЦикла; + + Возврат Файл.ПолноеИмя; + +КонецФункции + +Функция ТабличныйДокументВДвоичныеДанные(ТабличныйДокумент, Формат) + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + ТабличныйДокумент.Записать(ИмяВременногоФайла, Формат); + + Если Формат = ТипФайлаТабличногоДокумента.HTML Тогда + ВставитьКартинкиВHTML(ИмяВременногоФайла); + КонецЕсли; + + ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла); + + Возврат ДвоичныеДанные; + +КонецФункции + +Функция ПечатныеФормыПоОбъектам(ПечатнаяФорма, ОбъектыПечати) Экспорт + + Если ОбъектыПечати.Количество() = 0 Тогда + Возврат Новый Структура("ОбъектыПечатиНеЗаданы", ПечатнаяФорма); + КонецЕсли; + + Результат = Новый Соответствие; + + Для Каждого ОбъектПечати Из ОбъектыПечати Цикл + ИмяОбласти = ОбъектПечати.Представление; + Область = ПечатнаяФорма.Области.Найти(ИмяОбласти); + Если Область = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ОбъектыПечати.Количество() = 1 Тогда + ТабличныйДокумент = ПечатнаяФорма; + Иначе + ТабличныйДокумент = ПечатнаяФорма.ПолучитьОбласть(Область.Верх, , Область.Низ); + ЗаполнитьЗначенияСвойств(ТабличныйДокумент, ПечатнаяФорма, КопируемыеСвойстваТабличногоДокумента()); + КонецЕсли; + + Результат.Вставить(ОбъектПечати.Значение, ТабличныйДокумент); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ИмяФайлаПечатнойФормыОбъекта(ОбъектПечати, ИмяФайлаПечатнойФормы, НазваниеПечатнойФормы) Экспорт + + Если ОбъектПечати = Неопределено Или ОбъектПечати = "ОбъектыПечатиНеЗаданы" Тогда + Если ЗначениеЗаполнено(НазваниеПечатнойФормы) Тогда + Возврат НазваниеПечатнойФормы; + КонецЕсли; + Возврат ПолучитьИмяВременногоФайла(); + КонецЕсли; + + Если ТипЗнч(ИмяФайлаПечатнойФормы) = Тип("Соответствие") Тогда + Возврат Строка(ИмяФайлаПечатнойФормы[ОбъектПечати]); + ИначеЕсли ТипЗнч(ИмяФайлаПечатнойФормы) = Тип("Строка") И Не ПустаяСтрока(ИмяФайлаПечатнойФормы) Тогда + Возврат ИмяФайлаПечатнойФормы; + КонецЕсли; + + Возврат ИмяФайлаПечатнойФормыПоУмолчанию(ОбъектПечати, НазваниеПечатнойФормы); + +КонецФункции + +Функция ИмяФайлаПечатнойФормыПоУмолчанию(ОбъектПечати, НазваниеПечатнойФормы) + + Если ОбщегоНазначения.ЭтоДокумент(Метаданные.НайтиПоТипу(ТипЗнч(ОбъектПечати))) Тогда + + ДокументСодержитНомер = ОбъектПечати.Метаданные().ДлинаНомера > 0; + + Если ДокументСодержитНомер Тогда + СписокРеквизитов = "Дата,Номер"; + Шаблон = НСтр("ru = '[НазваниеПечатнойФормы] № [Номер] от [Дата]'"); + Иначе + СписокРеквизитов = "Дата"; + Шаблон = НСтр("ru = '[НазваниеПечатнойФормы] от [Дата]'"); + КонецЕсли; + + ПараметрыДляВставки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбъектПечати, СписокРеквизитов); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") И ДокументСодержитНомер Тогда + МодульПрефиксацияОбъектовКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПрефиксацияОбъектовКлиентСервер"); + ПараметрыДляВставки.Номер = МодульПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ПараметрыДляВставки.Номер); + КонецЕсли; + ПараметрыДляВставки.Дата = Формат(ПараметрыДляВставки.Дата, "ДЛФ=D"); + ПараметрыДляВставки.Вставить("НазваниеПечатнойФормы", НазваниеПечатнойФормы); + + Иначе + + ПараметрыДляВставки = Новый Структура; + ПараметрыДляВставки.Вставить("НазваниеПечатнойФормы",НазваниеПечатнойФормы); + ПараметрыДляВставки.Вставить("ПредставлениеОбъекта", ОбщегоНазначения.ПредметСтрокой(ОбъектПечати)); + ПараметрыДляВставки.Вставить("ТекущаяДата",Формат(ТекущаяДатаСеанса(), "ДЛФ=D")); + Шаблон = НСтр("ru = '[НазваниеПечатнойФормы] - [ПредставлениеОбъекта] - [ТекущаяДата]'"); + + КонецЕсли; + + Возврат СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Шаблон, ПараметрыДляВставки); + +КонецФункции + +// Список возможных имен макета: +// 1) на языке сеанса, +// 2) на языке конфигурации, +// 3) без указания языка. +Функция ИменаМакета(Знач ИмяМакета) + + Результат = Новый Массив; + Если СтрНайти(ИмяМакета, "ПФ_DOC_") > 0 + Или СтрНайти(ИмяМакета, "ПФ_ODT_") > 0 Тогда + + ТекущийЯзык = ТекущийЯзык(); + Если ТипЗнч(ТекущийЯзык) <> Тип("ОбъектМетаданных") Тогда + ТекущийЯзык = Метаданные.ОсновнойЯзык; + КонецЕсли; + КодЯзыка = ТекущийЯзык.КодЯзыка; + Результат.Добавить(ИмяМакета + "_" + КодЯзыка); + Если КодЯзыка <> Метаданные.ОсновнойЯзык.КодЯзыка Тогда + Результат.Добавить(ИмяМакета + "_" + Метаданные.ОсновнойЯзык.КодЯзыка); + КонецЕсли; + + КонецЕсли; + Результат.Добавить(ИмяМакета); + Возврат Результат; + +КонецФункции + +// Конструктор для параметра КоллекцияПечатныхФорм процедуры Печать. +// +// ВозвращаемоеЗначение: +// ТаблицаЗначений - пустая коллекция печатных форм: +// * ИмяМакета - Строка - идентификатор печатной формы; +// * ИмяВРЕГ - Строка - идентификатор в верхнем регистре символов для быстрого поиска; +// * СинонимМакета - Строка - представление печатной формы; +// * ТабличныйДокумент - ТабличныйДокумент - печатная форма; +// * Экземпляров - Число - количество копий, которое необходимо вывести на печать; +// * Картинка - Картинка - (не используется); +// * ПолныйПутьКМакету - Строка - используется для быстрого перехода к редактированию макета печатной формы; +// * ИмяФайлаПечатнойФормы - Строка - имя файла; +// - Соответствие - имена файлов для каждого объекта: +// ** Ключ - ЛюбаяСсылка - ссылка на объект печати; +// ** Значение - Строка - имя файла; +// * ОфисныеДокументы - Соответствие - коллекция печатных форм в формате офисных документов: +// ** Ключ - Строка - адрес во временном хранилище двоичных данных печатной формы; +// ** Значение - Строка - имя файла печатной формы. +Функция ПодготовитьКоллекциюПечатныхФорм(Знач Идентификаторы) + + Результат = Новый ТаблицаЗначений; + Для Каждого ИмяКолонки Из УправлениеПечатьюКлиентСервер.ИменаПолейКоллекцииПечатныхФорм() Цикл + Результат.Колонки.Добавить(ИмяКолонки); + КонецЦикла; + + Если ТипЗнч(Идентификаторы) = Тип("Строка") Тогда + Идентификаторы = СтрРазделить(Идентификаторы, ","); + КонецЕсли; + + Для Каждого Идентификатор Из Идентификаторы Цикл + ПечатнаяФорма = Результат.Найти(Идентификатор, "ИмяМакета"); + Если ПечатнаяФорма = Неопределено Тогда + ПечатнаяФорма = Результат.Добавить(); + ПечатнаяФорма.ИмяМакета = Идентификатор; + ПечатнаяФорма.ИмяВРЕГ = ВРег(Идентификатор); + ПечатнаяФорма.Экземпляров = 1; + Иначе + ПечатнаяФорма.Экземпляров = ПечатнаяФорма.Экземпляров + 1; + КонецЕсли; + КонецЦикла; + + Результат.Индексы.Добавить("ИмяВРЕГ"); + Возврат Результат; + +КонецФункции + +// Подготовить структуру параметров вывода для менеджера объекта формирующего печатные формы. +// +Функция ПодготовитьСтруктуруПараметровВывода() Экспорт + + ПараметрыВывода = Новый Структура; + ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); // не используется + + СтруктураПараметровПисьма = Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); + ПараметрыВывода.Вставить("ПараметрыОтправки", СтруктураПараметровПисьма); + + Возврат ПараметрыВывода; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index df849621b..d3c5ff6e7 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////// // Печать с использованием макетов в формате Microsoft Word (doc) на клиенте. Для обратной совместимости. // @@ -26,6 +34,7 @@ Handler = Новый Структура("Тип", "DOC"); +#Если Не МобильныйКлиент Тогда Попытка COMОбъект = Новый COMОбъект("Word.Application"); Исключение @@ -45,7 +54,6 @@ НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке()); КонецПопытки; - НастройкиСтраницыМакета = Макет; // Для обратной совместимости (изменен тип входного параметра функции). Если ТипЗнч(Макет) = Тип("Структура") Тогда НастройкиСтраницыМакета = Макет.НастройкиСтраницыМакета; @@ -70,6 +78,8 @@ // Запомнить вид просмотра документа. Handler.Вставить("ViewType", COMОбъект.Application.ActiveWindow.View.Type); +#КонецЕсли + Возврат Handler; КонецФункции @@ -86,6 +96,7 @@ Функция ПолучитьМакетMSWord(Знач ДвоичныеДанныеМакета, Знач ИмяВременногоФайла) Экспорт Handler = Новый Структура("Тип", "DOC"); +#Если Не МобильныйКлиент Тогда Попытка COMОбъект = Новый COMОбъект("Word.Application"); Исключение @@ -133,6 +144,7 @@ // Пропустить, если настройка не поддерживается данной версией программы. КонецПопытки; КонецЦикла; +#КонецЕсли Возврат Handler; @@ -593,18 +605,18 @@ КонецФункции Функция СобытиеЖурналаРегистрации() - Возврат НСтр("ru = 'Печать'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Печать'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); КонецФункции Процедура НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке) -#Если ВебКлиент Тогда +#Если ВебКлиент Или МобильныйКлиент Тогда ТекстУточнения = НСтр("ru = 'Для формирования этой печатной формы необходимо воспользоваться тонким клиентом.'"); #Иначе - ТекстУточнения = ""; + ТекстУточнения = НСтр("ru = 'Для вывода печатных форм в формате Microsoft Word требуется, чтобы на компьютере был установлен пакет Microsoft Office.'"); #КонецЕсли ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось сформировать печатную форму: %1. - |Для вывода печатных форм в формате Microsoft Word требуется, чтобы на компьютере был установлен пакет Microsoft Office. %2'"), + |%2'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ТекстУточнения); ВызватьИсключение ТекстИсключения; КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index 098a85b95..470dbee71 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Печать с использованием макетов в формате OpenDocument Text (odt) на клиенте. Для обратной совместимости. // @@ -16,6 +24,10 @@ // ему устанавливаются свойства. Функция ИнициализироватьПечатнуюФормуOOWriter(Знач Шаблон = Неопределено) Экспорт + Handler = Новый Структура("ServiceManager,Desktop,Document,Тип"); + +#Если Не МобильныйКлиент Тогда + Попытка ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); Исключение @@ -46,7 +58,6 @@ Document.getCurrentController().getFrame().getContainerWindow().setVisible(Ложь); #КонецЕсли - // Настраиваем поля по шаблону. Если Шаблон <> Неопределено Тогда TemplateStyleName = Шаблон.Document.CurrentController.getViewCursor().PageStyleName; TemplateStyle = Шаблон.Document.StyleFamilies.getByName("PageStyles").getByName(TemplateStyleName); @@ -60,12 +71,12 @@ Style.BottomMargin = TemplateStyle.BottomMargin; КонецЕсли; - // Подготавливаем ссылку на макет. - Handler = Новый Структура("ServiceManager,Desktop,Document,Тип"); Handler.ServiceManager = ServiceManager; Handler.Desktop = Desktop; Handler.Document = Document; +#КонецЕсли + Возврат Handler; КонецФункции @@ -81,6 +92,7 @@ Handler = Новый Структура("ServiceManager,Desktop,Document,ИмяФайла"); +#Если Не МобильныйКлиент Тогда Попытка ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); Исключение @@ -129,19 +141,20 @@ Document.getCurrentController().getFrame().getContainerWindow().setVisible(Ложь); #КонецЕсли - // Подготавливаем ссылку на макет. Handler.ServiceManager = ServiceManager; Handler.Desktop = Desktop; Handler.Document = Document; Handler.ИмяФайла = ИмяВременногоФайла; +#КонецЕсли + Возврат Handler; КонецФункции // Закрывает макет печатной формы и затирает ссылки на COM объект. // -Функция ЗакрытьСоединение(Handler, Знач ЗакрытьПриложение) Экспорт +Процедура ЗакрытьСоединение(Handler, Знач ЗакрытьПриложение) Экспорт Если ЗакрытьПриложение Тогда Handler.Document.Close(0); @@ -150,7 +163,6 @@ Handler.Document = Неопределено; Handler.Desktop = Неопределено; Handler.ServiceManager = Неопределено; - ScriptControl = Неопределено; Если Handler.Свойство("ИмяФайла") Тогда УдалитьФайлы(Handler.ИмяФайла); @@ -158,7 +170,7 @@ Handler = Неопределено; -КонецФункции +КонецПроцедуры // Устанавливает свойство видимости у приложения OO Writer. // Handler - ссылка на печатную форму. @@ -489,7 +501,7 @@ scr.language = "javascript"; scr.eval("Массив=new Array()"); Возврат scr.eval("Массив"); -#Иначе +#ИначеЕсли Не МобильныйКлиент Тогда Возврат Новый COMSafeArray("VT_DISPATCH", 1); #КонецЕсли @@ -500,15 +512,15 @@ КонецФункции Процедура НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке) -#Если ВебКлиент Тогда - ТекстУточнения = Символы.ПС + НСтр("ru = 'Для формирования этой печатной формы необходимо воспользоваться тонким клиентом.'"); -#Иначе - ТекстУточнения = ""; +#Если ВебКлиент Или МобильныйКлиент Тогда + ТекстУточнения = НСтр("ru = 'Для формирования этой печатной формы необходимо воспользоваться тонким клиентом.'"); +#Иначе + ТекстУточнения = НСтр("ru = 'Для вывода печатных форм в формате OpenOffice.org Writer требуется, чтобы на компьютере был установлен пакет OpenOffice.org.'"); #КонецЕсли ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для вывода печатных форм в формате OpenOffice.org Writer требуется, чтобы на компьютере был установлен пакет OpenOffice.org. %1 - |Технические подробности: %2'"), - ТекстУточнения, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + НСтр("ru = 'Не удалось сформировать печатную форму: %1. + |%2'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ТекстУточнения); ВызватьИсключение ТекстИсключения; КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl index 88b649ca0..5213cdf0d 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -64,8 +72,4 @@ КонецФункции -Функция НоваяКоллекцияПечатныхФорм(Идентификаторы) Экспорт - Возврат ОбщегоНазначения.ТаблицаЗначенийВМассив(УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(Идентификаторы)); -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl index 5199f15fb..67df2bfab 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Формирует и выводит на экран печатные формы. @@ -51,7 +59,6 @@ ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати); Если НЕ ПечатныеФормы.Отказ Тогда ОбъектыПечати = Новый СписокЗначений; - ТабличныеДокументы = ПолучитьИзВременногоХранилища(ПечатныеФормы.Адрес); Для Каждого ОбъектПечати Из ПечатныеФормы.ОбъектыПечати Цикл ОбъектыПечати.Добавить(ОбъектПечати.Значение, ОбъектПечати.Ключ); КонецЦикла; @@ -63,7 +70,7 @@ #КонецЕсли Если ПечатныеФормы.Отказ Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Нет прав для вывода печатной формы на принтер, обратитесь к администратору.'")); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Нет прав для вывода печатной формы на принтер, обратитесь к администратору.'")); Возврат; КонецЕсли; @@ -154,8 +161,33 @@ // Возвращаемое значение: // Массив - коллекция описаний печатных форм. Коллекция предназначена для использования в качестве // параметра КоллекцияПечатныхФорм в других процедурах клиентского программного интерфейса подсистемы. -Функция НоваяКоллекцияПечатныхФорм(Идентификаторы) Экспорт - Возврат УправлениеПечатьюВызовСервера.НоваяКоллекцияПечатныхФорм(Идентификаторы); +// +Функция НоваяКоллекцияПечатныхФорм(Знач Идентификаторы) Экспорт + + Если ТипЗнч(Идентификаторы) = Тип("Строка") Тогда + Идентификаторы = СтрРазделить(Идентификаторы, ","); + КонецЕсли; + + Поля = УправлениеПечатьюКлиентСервер.ИменаПолейКоллекцииПечатныхФорм(); + ДобавленныеПечатныеФормы = Новый Соответствие; + Результат = Новый Массив; + + Для Каждого Идентификатор Из Идентификаторы Цикл + ПечатнаяФорма = ДобавленныеПечатныеФормы[Идентификатор]; + Если ПечатнаяФорма = Неопределено Тогда + ПечатнаяФорма = Новый Структура(СтрСоединить(Поля, ",")); + ПечатнаяФорма.ИмяМакета = Идентификатор; + ПечатнаяФорма.ИмяВРЕГ = ВРег(Идентификатор); + ПечатнаяФорма.Экземпляров = 1; + ДобавленныеПечатныеФормы.Вставить(Идентификатор, ПечатнаяФорма); + Результат.Добавить(ПечатнаяФорма); + Иначе + ПечатнаяФорма.Экземпляров = ПечатнаяФорма.Экземпляров + 1; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + КонецФункции // Возвращает описание найденной в коллекции печатной формы. @@ -184,6 +216,14 @@ КонецПроцедуры +// Открывает форму с инструкцией как сделать факсимильную подпись и печать. +Процедура ПоказатьИнструкциюПоСозданиюФаксимильнойПодписиИПечати() Экспорт + + ВыполнитьКомандуПечати("РегистрСведений.ПоставляемыеМакетыПечати", "ИнструкцияПоСозданиюФаксимильнойПодписиИПечати", + ПредопределенноеЗначение("Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка"), Неопределено, Новый Структура); + +КонецПроцедуры + #Область УстаревшиеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиентПереопределяемый/Module.bsl new file mode 100644 index 000000000..b5bb8d958 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиентПереопределяемый/Module.bsl @@ -0,0 +1,48 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Вызывается после выполнения процедуры ПриОткрытии формы ПечатьДокументов. +// +// Параметры: +// Форма - УправляемаяФорма - форма ПечатьДокументов. +Процедура ПечатьДокументовПослеОткрытия(Форма) Экспорт + +КонецПроцедуры + +// Переопределяемая часть обработчика формы ПриСохраненииДанныхВНастройкахНаСервере. +// +// Параметры: +// Форма - УправляемаяФорма - форма ПечатьДокументов. +// Элемент - ПолеФормы - элемент формы, вызвавший данное событие. +// НавигационнаяСсылкаФорматированнойСтроки - Строка - значение гиперссылки форматированной строки. Передается по ссылке. +// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. Если установить +// значение Ложь, стандартная обработка события производиться не будет. +// +Процедура ПечатьДокументовОбработкаНавигационнойСсылки(Форма, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Переопределяемая часть обработчика формы ПриСохраненииДанныхВНастройкахНаСервере. +// Описание параметров см. в синтакс-помощнике. +// +// Параметры: +// Форма - УправляемаяФорма - форма ПечатьДокументов. +// Команда - КомандаФормы - выполняемая команда. +// ПродолжитьВыполнениеНаСервере - Булево - при установке значения Истина, выполнение обработчика будет продолжено в +// серверном контексте, в процедуре УправлениеПечатьюПереопределяемый.ПечатьДокументовПриВыполненииКоманды. +// ДополнительныеПараметры - Произвольный - параметры, которые необходимо передать в серверный контекст. +// +Процедура ПечатьДокументовВыполнитьКоманду(Форма, Команда, ПродолжитьВыполнениеНаСервере, ДополнительныеПараметры) Экспорт + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиентПереопределяемый/УправлениеПечатьюКлиентПереопределяемый.mdo b/SSL/src/CommonModules/УправлениеПечатьюКлиентПереопределяемый/УправлениеПечатьюКлиентПереопределяемый.mdo new file mode 100644 index 000000000..ed1bb8ef9 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиентПереопределяемый/УправлениеПечатьюКлиентПереопределяемый.mdo @@ -0,0 +1,10 @@ + + + УправлениеПечатьюКлиентПереопределяемый + + ru + Управление печатью клиент переопределяемый + + true + true + diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl index 2d99686ae..f80033e72 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область УстаревшиеПроцедурыИФункции @@ -16,4 +24,25 @@ #КонецОбласти -#КонецОбласти \ No newline at end of file +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ИменаПолейКоллекцииПечатныхФорм() Экспорт + + Поля = Новый Массив; + Поля.Добавить("ИмяМакета"); + Поля.Добавить("ИмяВРЕГ"); + Поля.Добавить("СинонимМакета"); + Поля.Добавить("ТабличныйДокумент"); + Поля.Добавить("Экземпляров"); + Поля.Добавить("Картинка"); + Поля.Добавить("ПолныйПутьКМакету"); + Поля.Добавить("ИмяФайлаПечатнойФормы"); + Поля.Добавить("ОфисныеДокументы"); + + Возврат Поля; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index 0406401eb..322832d02 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определяет объекты конфигурации, в модулях менеджеров которых размещена процедура ДобавитьКомандыПечати, @@ -11,22 +19,6 @@ -КонецПроцедуры - -// Переопределяет таблицу возможных форматов для сохранения табличного документа. -// Используется в случае, когда необходимо сократить список форматов сохранения, предлагаемый пользователю -// перед сохранением печатной формы в файл, либо перед отправкой по почте. -// -// Параметры: -// ТаблицаФорматов - ТаблицаЗначений - коллекция форматов сохранения: -// * ТипФайлаТабличногоДокумента - ТипФайлаТабличногоДокумента - значение в платформе, соответствующее формату; -// * Ссылка - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка на метаданные, где хранится представление; -// * Представление - Строка - представление типа файла (заполняется из перечисления); -// * Расширение - Строка - тип файла для операционной системы; -// * Картинка - Картинка - значок формата. -// -Процедура ПриЗаполненииНастроекФорматовСохраненияТабличногоДокумента(ТаблицаФорматов) Экспорт - КонецПроцедуры // Переопределяет список команд печати, получаемый функцией УправлениеПечатью.КомандыПечатиФормы. @@ -100,4 +92,69 @@ КонецПроцедуры +// Определяет набор подписей и печатей для документов. +// +// Параметры: +// Документы - Массив - коллекция ссылок на объекты печати; +// ПодписиИПечати - Соответствие - коллекция объектов печати и комплектов подписей/печатей к ним: +// * Ключ - ЛюбаяСсылка - ссылка на объект печати; +// * Значение - Структура - комплект подписей и печатей: +// ** Ключ - Строка - идентификатор подписи или печати в макете печатной формы, +// должен начинаться с "Подпись...", "Печать..." или "Факсимиле...", +// например, "ПодписьРуководителя", "ПечатьОрганизации"; +// ** Значение - Картинка - изображение подписи или печати. +// +Процедура ПриПолученииПодписейИПечатей(Документы, ПодписиИПечати) Экспорт + + + +КонецПроцедуры + +// Переопределяемая часть обработчика формы ПриСозданииНаСервере. +// +// Параметры: +// Форма - УправляемаяФорма - форма ПечатьДокументов. +// Отказ - Булево - признак отказа от создания формы. Если в теле процедуры-обработчика установить +// данному параметру значение Истина, то форма создана не будет. +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения стандартной (системной) обработки +// события. Если в теле процедуры-обработчика установить данному параметру +// значение Ложь, стандартная обработка события производиться не будет. +// +Процедура ПечатьДокументовПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Переопределяемая часть обработчика формы ПриЗагрузкеДанныхИзНастроекНаСервере. +// +// Параметры: +// Форма - УправляемаяФорма - форма ПечатьДокументов. +// Настройки - Соответствие - значения реквизитов формы. +// +Процедура ПечатьДокументовПриЗагрузкеДанныхИзНастроекНаСервере(Форма, Настройки) Экспорт + +КонецПроцедуры + +// Переопределяемая часть обработчика формы ПриСохраненииДанныхВНастройкахНаСервере. +// +// Параметры: +// Форма - УправляемаяФорма - форма ПечатьДокументов. +// Настройки - Соответствие - значения реквизитов формы. +// +Процедура ПечатьДокументовПриСохраненииДанныхВНастройкахНаСервере(Форма, Настройки) Экспорт + +КонецПроцедуры + +// Серверная часть обработчика динамически подключенной команды на форме ПечатьДокументов. +// См. УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовВыполнитьКоманду. +// +// Параметры: +// Форма - УправляемаяФорма - форма ПечатьДокументов. +// ДополнительныеПараметры - Произвольный - параметры, переданные из УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовВыполнитьКоманду. +// +Процедура ПечатьДокументовПриВыполненииКоманды(Форма, ДополнительныеПараметры) Экспорт + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюРФ/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюРФ/Module.bsl new file mode 100644 index 000000000..c1739ebdb --- /dev/null +++ b/SSL/src/CommonModules/УправлениеПечатьюРФ/Module.bsl @@ -0,0 +1,338 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Формирует форматную строку согласно "Унифицированному формату электронных банковских сообщений" для ее отображения в +// виде QR-кода. +// +// Параметры: +// ДанныеДокумента - Структура - содержит значения полей документа. +// Данные документа будут закодированы согласно стандарту +// "СТАНДАРТЫ ФИНАНСОВЫХ ОПЕРАЦИЙ Символы двумерного штрихового кода для осуществления платежей физических лиц". +// ДанныеДокумента должны содержать информацию в полях, описанных ниже. +// Обязательные поля структуры: +// * ТекстПолучателя - Наименование получателя платежа - Макс. 160 символов; +// * НомерСчетаПолучателя - Номер счета получателя платежа - Макс. 20 символов; +// * НаименованиеБанкаПолучателя - Наименование банка получателя платежа - Макс. 45 символов; +// * БИКБанкаПолучателя - БИК - Макс. 9 символов; +// * СчетБанкаПолучателя - Номер к/с банка получателя платежа - Макс. 20 символов; +// Дополнительные поля структуры: +// * СуммаЧислом - Сумма платежа, в рублях - Макс. 16 символов. +// * НазначениеПлатежа - Наименование платежа (назначение) - Макс. 210 символов; +// * ИННПолучателя - ИНН получателя платежа - Макс. 12 символов; +// * ИННПлательщика - ИНН плательщика - Макс. 12 символов; +// * СтатусСоставителя - Статус составителя платежного документа - Макс. 2 символа; +// * КПППолучателя - КПП получателя платежа - Макс. 9 символов. +// * КодБК - КБК - Макс. 20 символов; +// * КодОКТМО - Код КодОКТМО - Макс. 11 символов; +// * ПоказательОснования - Основание налогового платежа - Макс. 2 символа; +// * ПоказательПериода - Налоговый период - Макс. 10 символов; +// * ПоказательНомера - Номер документа - Макс. 15 символов; +// * ПоказательДаты - Дата документа - Макс. 10 символ. +// * ПоказательТипа - Тип платежа - Макс. 2 символа. +// Прочие дополнительные поля. +// * ФамилияПлательщика - Фамилия плательщика. +// * ИмяПлательщика - Имя плательщика. +// * ОтчествоПлательщика - Отчество плательщика. +// * АдресПлательщика - Адрес плательщика. +// * ЛицевойСчетБюджетногоПолучателя - Лицевой счет бюджетного получателя. +// * ИндексПлатежногоДокумента - Индекс платежного документа. +// * СНИЛС - № лицевого счета в системе персонифицированного учета в ПФР - СНИЛС. +// * НомерДоговора - Номер договора. +// * НомерЛицевогоСчетаПлательщика - Номер лицевого счета плательщика в организации (в системе учета ПУ). +// * НомерКвартиры - Номер квартиры. +// * НомерТелефона - Номер телефона. +// * ВидПлательщика - Вид ДУЛ плательщика. +// * НомерПлательщик - Номер ДУЛ плательщика. +// * ФИОРебенка - Ф.И.О. ребенка/учащегося. +// * ДатаРождения - Дата рождения. +// * СрокПлатежа - Срок платежа/дата выставления счета. +// * ПериодОплаты - Период оплаты. +// * ВидПлатежа - Вид платежа. +// * КодУслуги - Код услуги/название прибора учета. +// * НомерПрибораУчета - Номер прибора учета. +// * ПоказаниеПрибораУчета - Показание прибора учета. +// * НомерИзвещения - Номер извещения, начисления, счета. +// * ДатаИзвещения - Дата извещения/начисления/счета/постановления (для ГИБДД). +// * НомерУчреждения - Номер учреждения (образовательного, медицинского). +// * НомерГруппы - Номер группы детсада/класса школы. +// * ФИОПреподавателя - ФИО преподавателя, специалиста, оказывающего услугу. +// * СуммаСтраховки - Сумма страховки/дополнительной услуги/Сумма пени (в копейках). +// * НомерПостановления - Номер постановления (для ГИБДД). +// * НомерИсполнительногоПроизводства - Номер исполнительного производства. +// * КодВидаПлатежа - Код вида платежа (например, для платежей в адрес Росреестра). +// * ИдентификаторНачисления - Уникальный идентификатор начисления. +// * ТехническийКод - Технический код, рекомендуемый для заполнения поставщиком услуг. +// Может использоваться принимающей организацией для вызова соответствующей +// обрабатывающей ИТ-системы. +// Перечень значений кода представлен ниже. +// +// Код назначения Наименование назначения платежа +// платежа. +// +// 01 Мобильная связь, стационарный телефон. +// 02 Коммунальные услуги, ЖКХ. +// 03 ГИБДД, налоги, пошлины, бюджетные платежи. +// 04 Охранные услуги +// 05 Услуги, оказываемые УФМС. +// 06 ПФР +// 07 Погашение кредитов +// 08 Образовательные учреждения. +// 09 Интернет и ТВ +// 10 Электронные деньги +// 11 Отдых и путешествия. +// 12 Инвестиции и страхование. +// 13 Спорт и здоровье +// 14 Благотворительные и общественные организации. +// 15 Прочие услуги. +// +// Возвращаемое значение: +// Строка - строка данных в формате УФЭБС. +// +Функция ФорматнаяСтрокаУФЭБС(ДанныеДокумента) Экспорт + + ТекстОшибки = ""; + СтрокаОбязательныхРеквизитов = СтрокаОбязательныхРеквизитов(ДанныеДокумента, ТекстОшибки); + + Если ПустаяСтрока(СтрокаОбязательныхРеквизитов) Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , , ,); + Возврат ""; + КонецЕсли; + + СтруктураПредставленийИРеквизитов = СтруктураПредставленийИРеквизитов(); + СтрокаДополнительныхРеквизитов = ""; + ДополнительныеРеквизиты = Новый Структура; + ДобавитьДополнительныеРеквизиты(ДополнительныеРеквизиты); + + Для Каждого Элемент Из ДополнительныеРеквизиты Цикл + + Если Не ДанныеДокумента.Свойство(Элемент.Ключ) Тогда + ДанныеДокумента.Вставить(Элемент.Ключ, ""); + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(ДанныеДокумента[Элемент.Ключ]) Тогда + Если Элемент.Ключ = "СуммаЧислом" Тогда + ЗначениеСтрокой = Формат(ДанныеДокумента.СуммаЧислом * 100, "ЧГ="); + Иначе + ЗначениеСтрокой = СтрЗаменить(СокрЛП(Строка(ДанныеДокумента[Элемент.Ключ])), "|", ""); + КонецЕсли; + СтрокаДополнительныхРеквизитов = СтрокаДополнительныхРеквизитов + СтруктураПредставленийИРеквизитов[Элемент.Ключ] + + "=" + ЗначениеСтрокой + "|"; + КонецЕсли; + КонецЦикла; + + Если Не ПустаяСтрока(СтрокаДополнительныхРеквизитов) Тогда + ДлинаСтроки = СтрДлина(СтрокаДополнительныхРеквизитов); + СтрокаДополнительныхРеквизитов = Сред(СтрокаДополнительныхРеквизитов, 1, ДлинаСтроки - 1); + КонецЕсли; + + ПрочиеДополнительныеРеквизиты = Новый Структура; + ДобавитьПрочиеДополнительныеРеквизиты(ПрочиеДополнительныеРеквизиты); + СтрокаПрочихДополнительныхРеквизитов = ""; + + Для Каждого Элемент Из ПрочиеДополнительныеРеквизиты Цикл + + Если Не ДанныеДокумента.Свойство(Элемент.Ключ) Тогда + ДанныеДокумента.Вставить(Элемент.Ключ, ""); + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(ДанныеДокумента[Элемент.Ключ]) Тогда + ЗначениеСтрокой = СтрЗаменить(СокрЛП(Строка(ДанныеДокумента[Элемент.Ключ])), "|", ""); + СтрокаПрочихДополнительныхРеквизитов = СтрокаПрочихДополнительныхРеквизитов + + СтруктураПредставленийИРеквизитов[Элемент.Ключ] + "=" + ЗначениеСтрокой + + "|"; + КонецЕсли; + КонецЦикла; + + Если Не ПустаяСтрока(СтрокаПрочихДополнительныхРеквизитов) Тогда + ДлинаСтроки = СтрДлина(СтрокаПрочихДополнительныхРеквизитов); + СтрокаПрочихДополнительныхРеквизитов = Сред(СтрокаПрочихДополнительныхРеквизитов, 1, ДлинаСтроки - 1); + КонецЕсли; + + ИтоговаяСтрока = СтрокаОбязательныхРеквизитов + + ?(ПустаяСтрока(СтрокаДополнительныхРеквизитов), "", "|" + СтрокаДополнительныхРеквизитов) + + ?(ПустаяСтрока(СтрокаПрочихДополнительныхРеквизитов), "", "|" + СтрокаПрочихДополнительныхРеквизитов); + + Возврат ИтоговаяСтрока; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СтрокаОбязательныхРеквизитов(ДанныеДокумента, ТекстСообщения) + + ОбязательныеРеквизиты = Новый Структура(); + СтруктураПредставленийИРеквизитов = СтруктураПредставленийИРеквизитов(); + ДобавитьОбязательныеРеквизиты(ОбязательныеРеквизиты); + + Если Не ЗначениеЗаполнено(ДанныеДокумента.СчетБанкаПолучателя) Тогда + ДанныеДокумента.СчетБанкаПолучателя = "0"; + КонецЕсли; + + СлужебныеДанные = "ST00012"; + ОбязательныеДанные = ""; + + Для Каждого Элемент Из ОбязательныеРеквизиты Цикл + Если Не ЗначениеЗаполнено(ДанныеДокумента[Элемент.Ключ]) Тогда + ТекстСообщения = НСтр("ru = 'Не заполнен обязательный реквизит: %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Элемент.Ключ); + Возврат ""; + КонецЕсли; + + ЗначениеСтрокой = СтрЗаменить(СокрЛП(Строка(ДанныеДокумента[Элемент.Ключ])), "|", ""); + + ОбязательныеДанные = ОбязательныеДанные + "|" + СтруктураПредставленийИРеквизитов[Элемент.Ключ] + "=" + + ЗначениеСтрокой; + + КонецЦикла; + + Если СтрДлина(ОбязательныеДанные) > 300 Тогда + Шаблон = НСтр("ru = 'Невозможно создать QR-код для документа %1 + |Строка обязательных реквизитов должна быть меньше 300 символов: + |""%2""'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ДанныеДокумента.Ссылка, ОбязательныеДанные); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); + Возврат ""; + КонецЕсли; + + Возврат СлужебныеДанные + ОбязательныеДанные; + +КонецФункции + +Функция СтруктураПредставленийИРеквизитов() + + СтруктураВозврата = Новый Структура(); + + СтруктураВозврата.Вставить("ТекстПолучателя", "Name"); + СтруктураВозврата.Вставить("НомерСчетаПолучателя", "PersonalAcc"); + СтруктураВозврата.Вставить("НаименованиеБанкаПолучателя", "BankName"); + СтруктураВозврата.Вставить("БИКБанкаПолучателя", "BIC"); + СтруктураВозврата.Вставить("СчетБанкаПолучателя", "CorrespAcc"); + + СтруктураВозврата.Вставить("СуммаЧислом", "Sum"); + СтруктураВозврата.Вставить("НазначениеПлатежа", "Purpose"); + СтруктураВозврата.Вставить("ИННПолучателя", "PayeeINN"); + СтруктураВозврата.Вставить("ИННПлательщика", "PayerINN"); + СтруктураВозврата.Вставить("СтатусСоставителя", "DrawerStatus"); + СтруктураВозврата.Вставить("КПППолучателя", "KPP"); + СтруктураВозврата.Вставить("КодБК", "CBC"); + СтруктураВозврата.Вставить("КодОКТМО", "OKTMO"); + СтруктураВозврата.Вставить("ПоказательОснования", "PaytReason"); + СтруктураВозврата.Вставить("ПоказательПериода", "TaxPeriod"); + СтруктураВозврата.Вставить("ПоказательНомера", "DocNo"); + СтруктураВозврата.Вставить("ПоказательДаты", "DocDate"); + СтруктураВозврата.Вставить("ПоказательТипа", "TaxPaytKind"); + + СтруктураВозврата.Вставить("ФамилияПлательщика", "lastName"); + СтруктураВозврата.Вставить("ИмяПлательщика", "firstName"); + СтруктураВозврата.Вставить("ОтчествоПлательщика", "middleName"); + СтруктураВозврата.Вставить("АдресПлательщика", "payerAddress"); + СтруктураВозврата.Вставить("ЛицевойСчетБюджетногоПолучателя", "personalAccount"); + СтруктураВозврата.Вставить("ИндексПлатежногоДокумента", "docIdx"); + СтруктураВозврата.Вставить("СНИЛС", "pensAcc"); + СтруктураВозврата.Вставить("НомерДоговора", "contract"); + СтруктураВозврата.Вставить("НомерЛицевогоСчетаПлательщика", "persAcc"); + СтруктураВозврата.Вставить("НомерКвартиры", "flat"); + СтруктураВозврата.Вставить("НомерТелефона", "phone"); + СтруктураВозврата.Вставить("ВидПлательщика", "payerIdType"); + СтруктураВозврата.Вставить("НомерПлательщика", "payerIdNum"); + СтруктураВозврата.Вставить("ФИОРебенка", "childFio"); + СтруктураВозврата.Вставить("ДатаРождения", "birthDate"); + СтруктураВозврата.Вставить("СрокПлатежа", "paymTerm"); + СтруктураВозврата.Вставить("ПериодОплаты", "paymPeriod"); + СтруктураВозврата.Вставить("ВидПлатежа", "category"); + СтруктураВозврата.Вставить("КодУслуги", "serviceName"); + СтруктураВозврата.Вставить("НомерПрибораУчета", "counterId"); + СтруктураВозврата.Вставить("ПоказаниеПрибораУчета", "counterVal"); + СтруктураВозврата.Вставить("НомерИзвещения", "quittId"); + СтруктураВозврата.Вставить("ДатаИзвещения", "quittDate"); + СтруктураВозврата.Вставить("НомерУчреждения", "instNum"); + СтруктураВозврата.Вставить("НомерГруппы", "classNum"); + СтруктураВозврата.Вставить("ФИОПреподавателя", "specFio"); + СтруктураВозврата.Вставить("СуммаСтраховки", "addAmount"); + СтруктураВозврата.Вставить("НомерПостановления", "ruleId"); + СтруктураВозврата.Вставить("НомерИсполнительногоПроизводства", "execId"); + СтруктураВозврата.Вставить("КодВидаПлатежа", "regType"); + СтруктураВозврата.Вставить("ИдентификаторНачисления", "uin"); + СтруктураВозврата.Вставить("ТехническийКод", "TechCode"); + + Возврат СтруктураВозврата; + +КонецФункции + +Процедура ДобавитьОбязательныеРеквизиты(СтруктураДанных) + + СтруктураДанных.Вставить("ТекстПолучателя"); + СтруктураДанных.Вставить("НомерСчетаПолучателя"); + СтруктураДанных.Вставить("НаименованиеБанкаПолучателя"); + СтруктураДанных.Вставить("БИКБанкаПолучателя"); + СтруктураДанных.Вставить("СчетБанкаПолучателя"); + +КонецПроцедуры + +Процедура ДобавитьДополнительныеРеквизиты(СтруктураДанных) + + СтруктураДанных.Вставить("СуммаЧислом"); + СтруктураДанных.Вставить("НазначениеПлатежа"); + СтруктураДанных.Вставить("ИННПолучателя"); + СтруктураДанных.Вставить("ИННПлательщика"); + СтруктураДанных.Вставить("СтатусСоставителя"); + СтруктураДанных.Вставить("КПППолучателя"); + СтруктураДанных.Вставить("КодБК"); + СтруктураДанных.Вставить("КодОКТМО"); + СтруктураДанных.Вставить("ПоказательОснования"); + СтруктураДанных.Вставить("ПоказательПериода"); + СтруктураДанных.Вставить("ПоказательНомера"); + СтруктураДанных.Вставить("ПоказательДаты"); + СтруктураДанных.Вставить("ПоказательТипа"); + +КонецПроцедуры + +Процедура ДобавитьПрочиеДополнительныеРеквизиты(СтруктураДанных) + + СтруктураДанных.Вставить("ФамилияПлательщика"); + СтруктураДанных.Вставить("ИмяПлательщика"); + СтруктураДанных.Вставить("ОтчествоПлательщика"); + СтруктураДанных.Вставить("АдресПлательщика"); + СтруктураДанных.Вставить("ЛицевойСчетБюджетногоПолучателя"); + СтруктураДанных.Вставить("ИндексПлатежногоДокумента"); + СтруктураДанных.Вставить("СНИЛС"); + СтруктураДанных.Вставить("НомерДоговора"); + СтруктураДанных.Вставить("НомерЛицевогоСчетаПлательщика"); + СтруктураДанных.Вставить("НомерКвартиры"); + СтруктураДанных.Вставить("НомерТелефона"); + СтруктураДанных.Вставить("ВидПлательщика"); + СтруктураДанных.Вставить("НомерПлательщика"); + СтруктураДанных.Вставить("ФИОРебенка"); + СтруктураДанных.Вставить("ДатаРождения"); + СтруктураДанных.Вставить("СрокПлатежа"); + СтруктураДанных.Вставить("ПериодОплаты"); + СтруктураДанных.Вставить("ВидПлатежа"); + СтруктураДанных.Вставить("КодУслуги"); + СтруктураДанных.Вставить("НомерПрибораУчета"); + СтруктураДанных.Вставить("ПоказаниеПрибораУчета"); + СтруктураДанных.Вставить("НомерИзвещения"); + СтруктураДанных.Вставить("ДатаИзвещения"); + СтруктураДанных.Вставить("НомерУчреждения"); + СтруктураДанных.Вставить("НомерГруппы"); + СтруктураДанных.Вставить("ФИОПреподавателя"); + СтруктураДанных.Вставить("СуммаСтраховки"); + СтруктураДанных.Вставить("НомерПостановления"); + СтруктураДанных.Вставить("НомерИсполнительногоПроизводства"); + СтруктураДанных.Вставить("КодВидаПлатежа"); + СтруктураДанных.Вставить("ИдентификаторНачисления"); + СтруктураДанных.Вставить("ТехническийКод"); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюРФ/УправлениеПечатьюРФ.mdo b/SSL/src/CommonModules/УправлениеПечатьюРФ/УправлениеПечатьюРФ.mdo new file mode 100644 index 000000000..7f15b8e4e --- /dev/null +++ b/SSL/src/CommonModules/УправлениеПечатьюРФ/УправлениеПечатьюРФ.mdo @@ -0,0 +1,11 @@ + + + УправлениеПечатьюРФ + + ru + Управление печатью РФ + + true + true + true + diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl index 9e0fba2a7..01a56f026 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции ////////////////////////////////////////////////////////////////////////////////// @@ -58,7 +66,7 @@ // Функция ИнициализироватьПечатнуюФорму(Макет) Экспорт - ИмяВременногоКаталога = ОбщегоНазначения.СоздатьВременныйКаталог(); + ИмяВременногоКаталога = ФайловаяСистема.СоздатьВременныйКаталог(); КопироватьСодержимоеКаталога(Макет.ИмяКаталога, ИмяВременногоКаталога); @@ -83,7 +91,7 @@ // Возвращаемое значение: // Структура - Макет печатной формы. // -Функция ПолучитьМакет(ДвоичныеДанныеМакета) Экспорт +Функция МакетИзДвоичныхДанных(ДвоичныеДанныеМакета) Экспорт Расширение = ОпределитьРасширениеФайлаДанныхПоСигнатуре(ДвоичныеДанныеМакета); Если НЕ Расширение = "docx" Тогда @@ -92,7 +100,7 @@ КонецЕсли; ИмяВременногоФайла = ПолучитьИмяВременногоФайла("docx"); - ИмяВременногоКаталога = ОбщегоНазначения.СоздатьВременныйКаталог(); + ИмяВременногоКаталога = ФайловаяСистема.СоздатьВременныйКаталог(); ДвоичныеДанныеМакета.Записать(ИмяВременногоФайла); @@ -119,7 +127,7 @@ Процедура ЗакрытьСоединение(ПечатнаяФорма) Экспорт Попытка - ОбщегоНазначения.УдалитьВременныйКаталог(ПечатнаяФорма.ИмяКаталога); + ФайловаяСистема.УдалитьВременныйКаталог(ПечатнаяФорма.ИмяКаталога); Исключение ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение(НСтр("ru = 'Не удалось удалить временный каталог шаблона печатной формы по причине:'") + Символы.ПС @@ -3014,7 +3022,7 @@ Функция СобытиеЖурналаРегистрации() - Возврат НСтр("ru = 'Печать'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Печать'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl index 33fe73296..1aa2565ed 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Обработчик подключенной команды. @@ -70,7 +78,7 @@ Форма = ДополнительныеПараметры.Форма; ОбъектыПечати = ДополнительныеПараметры.ОбъектыПечати; - ОписаниеКоманды = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ОписаниеКоманды); + ОписаниеКоманды = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ОписаниеКоманды); ОписаниеКоманды.Вставить("ОбъектыПечати", ОбъектыПечати); Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда @@ -153,7 +161,7 @@ ШаблонСообщения = НСтр("ru = 'Документ %1 не проведен: %2'"); НепроведенныеДокументы = Новый Массив; Для Каждого ИнформацияОДокументе Из ДанныеОНепроведенныхДокументах Цикл - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(ИнформацияОДокументе.Ссылка), ИнформацияОДокументе.ОписаниеОшибки), ИнформацияОДокументе.Ссылка); НепроведенныеДокументы.Добавить(ИнформацияОДокументе.Ссылка); diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index 5b23ca08c..dcea8cf47 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -174,10 +182,11 @@ ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект); КонецЕсли; - Ошибки = Неопределено; - Для каждого Строка Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл Если Строка.ЗаполнятьОбязательно И НЕ Строка.Удалено Тогда + Если Не РеквизитДоступенПоФункциональнымОпциям(Строка) Тогда + Продолжить; + КонецЕсли; Результат = Истина; Если Объект = Неопределено Тогда ОписаниеОбъекта = Форма.Объект; @@ -203,7 +212,7 @@ КонецЕсли; Если НЕ ЗначениеЗаполнено(Форма[Строка.ИмяРеквизитаЗначение]) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), Строка.Наименование), , Строка.ИмяРеквизитаЗначение, @@ -233,7 +242,10 @@ УстановитьПривилегированныйРежим(Истина); НаборСвойств = ВидОбъекта[ИмяРеквизитаНабораСвойств]; - РодительНабора = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяОбъектаСоСвойствами]; + РодительНабора = НаборСвойствПоИмени(ИмяОбъектаСоСвойствами); + Если РодительНабора = Неопределено Тогда + РодительНабора = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяОбъектаСоСвойствами]; + КонецЕсли; Если ЗначениеЗаполнено(НаборСвойств) Тогда @@ -288,7 +300,6 @@ | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ"; - Выборка = Запрос.Выполнить().Выбрать(); ВыборкаСвойств = Запрос.Выполнить().Выбрать(); Пока ВыборкаСвойств.Следующий() Цикл @@ -325,6 +336,26 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для нестандартной обработки дополнительных свойств. +// Возвращает ссылку на предопределенный набор свойств по имени набора. +// Предназначена для наборов, указанных в процедуре +// УправлениеСвойствамиПереопределяемый.ПриСозданииПредопределенныхНаборовСвойств. +// +// Параметры: +// ИмяНабора - Строка - Имя получаемого набора свойств. +// +// Пример: +// Ссылка = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Пользователи"); +// +Функция НаборСвойствПоИмени(ИмяНабора) Экспорт + ПредопределенныеНаборыСвойств = УправлениеСвойствамиПовтИсп.ПредопределенныеНаборыСвойств(); + Набор = ПредопределенныеНаборыСвойств.Получить(ИмяНабора); + Если Набор = Неопределено Тогда + Возврат Неопределено; + Иначе + Возврат Набор.Ссылка; + КонецЕсли; +КонецФункции + // Создает/пересоздает дополнительные реквизиты и элементы в форме владельца свойств. // // Параметры: @@ -488,16 +519,29 @@ ПутьКРеквизиту = "Параметры.Форма." + ОписаниеДополнительногоРеквизита.ИмяРеквизитаЗначение; КонецЕсли; + // Преобразование старого условия для обратной совместимости. + УсловиеЧастями = СтрРазделить(СтрокаТаблицы.Условие, " "); + НовоеУсловие = ""; + Если УсловиеЧастями.Количество() > 0 Тогда + Для Каждого ЧастьУсловия Из УсловиеЧастями Цикл + НовоеУсловие = НовоеУсловие + ВРег(Лев(ЧастьУсловия, 1)) + Сред(ЧастьУсловия, 2); + КонецЦикла; + КонецЕсли; + + Если ЗначениеЗаполнено(НовоеУсловие) Тогда + СтрокаТаблицы.Условие = НовоеУсловие; + КонецЕсли; + ШаблонУсловия = ""; Если СтрокаТаблицы.Условие = "Равно" Тогда ШаблонУсловия = "%1 = %2"; - ИначеЕсли СтрокаТаблицы.Условие = "Не равно" Тогда // не ошибка, идентификатор. + ИначеЕсли СтрокаТаблицы.Условие = "НеРавно" Тогда ШаблонУсловия = "%1 <> %2"; КонецЕсли; - Если СтрокаТаблицы.Условие = "В списке" Тогда // не ошибка, идентификатор. + Если СтрокаТаблицы.Условие = "ВСписке" Тогда ШаблонУсловия = "%2.НайтиПоЗначению(%1) <> Неопределено" - ИначеЕсли СтрокаТаблицы.Условие = "Не в списке" Тогда // не ошибка, идентификатор. + ИначеЕсли СтрокаТаблицы.Условие = "НеВСписке" Тогда ШаблонУсловия = "%2.НайтиПоЗначению(%1) = Неопределено" КонецЕсли; @@ -508,7 +552,7 @@ Если СтрокаТаблицы.Условие = "Заполнено" Тогда ШаблонУсловия = "ЗначениеЗаполнено(%1)"; - ИначеЕсли СтрокаТаблицы.Условие = "Не заполнено" Тогда // не ошибка, идентификатор. + ИначеЕсли СтрокаТаблицы.Условие = "НеЗаполнено" Тогда ШаблонУсловия = "Не ЗначениеЗаполнено(%1)"; КонецЕсли; @@ -605,7 +649,8 @@ Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), ГруппаГиперссылки); - Если Не ПоляНадписей Тогда + РеквизитДоступен = РеквизитДоступенПоФункциональнымОпциям(ОписаниеСвойства); + Если РеквизитДоступен И Не ПоляНадписей Тогда ИмяКнопки = "Кнопка_" + ОписаниеСвойства.ИмяУникальнаяЧасть; Кнопка = Форма.Элементы.Добавить( ИмяКнопки, @@ -726,20 +771,6 @@ Элемент.КнопкаВыпадающегоСписка = Ложь; Элемент.РедактированиеТекста = Ложь; КонецЕсли; - - ИначеЕсли НЕ ПоляНадписей Тогда - - ТипыДополнительныхЗначений = Новый Соответствие; - ТипыДополнительныхЗначений.Вставить(Тип("СправочникСсылка.ЗначенияСвойствОбъектов"), Истина); - ТипыДополнительныхЗначений.Вставить(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия"), Истина); - - ИспользуетсяТипДополнительныхЗначений = Истина; - Для каждого Тип Из ОписаниеСвойства.ТипЗначения.Типы() Цикл - Если ТипыДополнительныхЗначений.Получить(Тип) = Неопределено Тогда - ИспользуетсяТипДополнительныхЗначений = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; КонецЕсли; Если НЕ ПоляНадписей И ОписаниеСвойства.ДополнительноеЗначение И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда @@ -1284,7 +1315,10 @@ КонецЕсли; ЗаписатьОбъект = Ложь; - НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяНабораСвойств]; + НаборСвойств = НаборСвойствПоИмени(ИмяНабораСвойств); + Если НаборСвойств = Неопределено Тогда + НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяНабораСвойств]; + КонецЕсли; НаборСвойствОбъект = НаборСвойств.ПолучитьОбъект(); Для Каждого Параметр Из Параметры Цикл Если НаборСвойствОбъект[Параметр.Ключ] = Параметр.Значение Тогда @@ -1634,8 +1668,8 @@ Процедура УстановитьУсловиеЗависимости(СтруктураЗависимостей, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия, Условие) Если СтруктураЗависимостей = Неопределено Тогда ЗначенияПараметров = Новый Соответствие; - Если Условие = "В списке" - Или Условие = "Не в списке" Тогда + Если Условие = "ВСписке" + Или Условие = "НеВСписке" Тогда Значение = Новый СписокЗначений; Значение.Добавить(СтрокаТаблицы.Значение); Иначе @@ -1645,12 +1679,12 @@ СтруктураЗависимостей = Новый Структура; СтруктураЗависимостей.Вставить("КодУсловия", КодУсловия); СтруктураЗависимостей.Вставить("ЗначенияПараметров", ЗначенияПараметров); - ИначеЕсли (Условие = "В списке" Или Условие = "Не в списке") + ИначеЕсли (Условие = "ВСписке" Или Условие = "НеВСписке") И ТипЗнч(СтруктураЗависимостей.ЗначенияПараметров[ПутьКРеквизиту]) = Тип("СписокЗначений") Тогда СтруктураЗависимостей.ЗначенияПараметров[ПутьКРеквизиту].Добавить(СтрокаТаблицы.Значение); Иначе СтруктураЗависимостей.КодУсловия = СтруктураЗависимостей.КодУсловия + " И " + КодУсловия; - Если Условие = "В списке" Или Условие = "Не в списке" Тогда + Если Условие = "ВСписке" Или Условие = "НеВСписке" Тогда Значение = Новый СписокЗначений; Значение.Добавить(СтрокаТаблицы.Значение); Иначе @@ -1735,7 +1769,21 @@ КонецФункции - +Функция РеквизитДоступенПоФункциональнымОпциям(ОписаниеСвойства) + ОбъектДоступен = Истина; + Для Каждого Тип Из ОписаниеСвойства.ТипЗначения.Типы() Цикл + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + Если ОбъектМетаданных = Неопределено Тогда + Продолжить; + КонецЕсли; + ОбъектДоступен = ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных); + Если ОбъектДоступен Тогда + Прервать; // Если хоть один тип доступен, то реквизит не скрывается. + КонецЕсли; + КонецЦикла; + + Возврат ОбъектДоступен; +КонецФункции Функция ИспользуютсяСвойства(Форма, ДополнительныеПараметры) @@ -1762,7 +1810,10 @@ МассивИмениФормы = СтрРазделить(ПолноеИмя, "."); ИмяЭлемента = МассивИмениФормы[0] + "_" + МассивИмениФормы[1]; - НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяЭлемента]; + НаборСвойств = НаборСвойствПоИмени(ИмяЭлемента); + Если НаборСвойств = Неопределено Тогда + НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяЭлемента]; + КонецЕсли; ИспользуютсяСвойства = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств, "Используется"); diff --git a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl index 42daf53b4..c1b6c8130 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Определяет, что указанное событие - это событие об изменении набора свойств. @@ -59,6 +67,10 @@ Возврат; КонецЕсли; + Если Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Если Объект = Неопределено Тогда ОписаниеОбъекта = Форма.Объект; Иначе @@ -131,9 +143,7 @@ Возврат; КонецЕсли; - Если Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.Количество() > 0 Тогда - Форма.ПодключитьОбработчикОжидания("ОбновитьЗависимостиДополнительныхРеквизитов", 2); - КонецЕсли; + Форма.ПодключитьОбработчикОжидания("ОбновитьЗависимостиДополнительныхРеквизитов", 2); КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl index e956fb318..3de4d6a8c 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl @@ -1,5 +1,49 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс +// Получает описание предопределенных наборов свойств. +// +// Параметры: +// Наборы - ДеревоЗначений - с колонками: +// * Имя - Строка - Имя набора свойств. Формируется из полного имени объекта +// метаданных заменой символа "." на "_". +// Например, "Документ_ЗаказПокупателя". +// * Идентификатор - УникальныйИдентификатор - Идентификатор ссылки предопределенного элемента. +// * Используется - Неопределено, Булево - Признак того, что набор свойств используется. +// Например, можно использовать для скрытия набора по функциональным опциям. +// Значение по умолчанию - Неопределено, соответствует значению Истина. +// * ЭтоГруппа - Булево - Истина, если набор свойств является группой. +// +Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт + + + +КонецПроцедуры + +// Получает наименования наборов свойств второго уровня на разных языках. +// +// Параметры: +// Наименования - Соответствие - представление набора на переданном языке: +// * Ключ - Строка - Имя набора свойств. Например, "Справочник_Партнеры_Общие". +// * Значение - Строка - Наименование набора для переданного кода языка. +// КодЯзыка - Строка - Код языка. Например, "en". +// +// Пример: +// Наименования["Справочник_Партнеры_Общие"] = НСтр("ru='Общие'; en='General';", КодЯзыка); +// +Процедура ПриПолученииНаименованийНаборовСвойств(Наименования, КодЯзыка) Экспорт + + + +КонецПроцедуры + // Заполняет наборы свойств объекта. Обычно требуется, если наборов более одного. // // Параметры: diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПовтИсп/Module.bsl new file mode 100644 index 000000000..871aa27c9 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеСвойствамиПовтИсп/Module.bsl @@ -0,0 +1,27 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Только для внутреннего использования. +// +Функция ПредопределенныеНаборыСвойств() Экспорт + + Возврат Справочники.НаборыДополнительныхРеквизитовИСведений.ПредопределенныеНаборыСвойств(); + +КонецФункции + +// Только для внутреннего использования. +// +Функция НаименованияНаборовСвойств() Экспорт + + Возврат УправлениеСвойствамиСлужебный.НаименованияНаборовСвойств(); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПовтИсп/УправлениеСвойствамиПовтИсп.mdo b/SSL/src/CommonModules/УправлениеСвойствамиПовтИсп/УправлениеСвойствамиПовтИсп.mdo new file mode 100644 index 000000000..aeeda2501 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеСвойствамиПовтИсп/УправлениеСвойствамиПовтИсп.mdo @@ -0,0 +1,12 @@ + + + УправлениеСвойствамиПовтИсп + + ru + Управление свойствами повт исп + + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index 9c940314d..da5b2be5d 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Возвращает список всех свойств для объекта метаданных. @@ -147,8 +155,9 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; + Обработчик.Процедура = "УправлениеСвойствамиСлужебный.СоздатьПредопределенныеНаборыСвойств"; Обработчик.РежимВыполнения = "Оперативно"; - Обработчик.Процедура = "УправлениеСвойствами.ОбновитьНаименованияНаборовИСвойств"; + Обработчик.НачальноеЗаполнение = Истина; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.6.7"; @@ -173,12 +182,6 @@ Обработчик.Процедура = "УправлениеСвойствамиСлужебный.ЗаполнитьНовыеСвойстваДополнительныхРеквизитовИСведений"; Обработчик.РежимВыполнения = "Монопольно"; - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.3.1.21"; - Обработчик.Процедура = "УправлениеСвойствамиСлужебный.УстановитьЗначениеПризнакаИспользуется"; - Обработчик.РежимВыполнения = "Оперативно"; - Обработчик.НачальноеЗаполнение = Истина; - Обработчик = Обработчики.Добавить(); Обработчик.Версия = "3.0.1.101"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("ecd6aad4-4b04-43be-82bc-cd4f563beb0b"); @@ -193,6 +196,15 @@ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.БлокируемыеОбъекты = "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("ee1168cd-6428-4980-9ee6-602812264cfa"); + Обработчик.Комментарий = НСтр("ru = 'Реструктуризация дополнительных реквизитов и сведений. + |До завершения обработки дополнительные реквизиты и сведения некоторых документов + |и справочников будут недоступны.'"); + Обработчик.Процедура = "Справочники.НаборыДополнительныхРеквизитовИСведений.ОбработатьНаборыСвойствДляПереходаНаНовуюВерсию"; + КонецПроцедуры // См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. @@ -211,8 +223,11 @@ // См. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта. Процедура ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты) Экспорт - Если УправлениеСвойствами.ИспользоватьДопРеквизиты(Объект.Ссылка) Тогда - Для Каждого ЗначениеСвойства Из УправлениеСвойствами.ЗначенияСвойств(Объект.Ссылка) Цикл + ПолучатьДопРеквизиты = УправлениеСвойствами.ИспользоватьДопРеквизиты(Объект.Ссылка); + ПолучатьДопСведения = УправлениеСвойствами.ИспользоватьДопСведения(Объект.Ссылка); + + Если ПолучатьДопРеквизиты Или ПолучатьДопСведения Тогда + Для Каждого ЗначениеСвойства Из УправлениеСвойствами.ЗначенияСвойств(Объект.Ссылка, ПолучатьДопРеквизиты, ПолучатьДопСведения) Цикл Реквизит = ДополнительныеРеквизиты.Добавить(); Реквизит.Наименование = ЗначениеСвойства.Свойство; Реквизит.Значение = ЗначениеСвойства.Значение; @@ -484,6 +499,9 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("Свойства", Свойства); Запрос.УстановитьПараметр("НаборыСвойств", НаборыСвойств); + Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык); + Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); + Запрос.Текст = "ВЫБРАТЬ | НаборыСвойств.Набор, @@ -555,14 +573,22 @@ | ВсеСвойства.Свойство, | ДополнительныеРеквизитыИСведения.ВладелецДополнительныхЗначений, | ДополнительныеРеквизитыИСведения.ЗаполнятьОбязательно, - | ДополнительныеРеквизитыИСведения.Заголовок КАК Наименование, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА ДополнительныеРеквизитыИСведения.Заголовок + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, ДополнительныеРеквизитыИСведения.Заголовок) КАК СТРОКА(150)) + | КОНЕЦ КАК Наименование, | ДополнительныеРеквизитыИСведения.ТипЗначения, | ДополнительныеРеквизитыИСведения.ФорматСвойства, | ДополнительныеРеквизитыИСведения.МногострочноеПолеВвода, | ВсеСвойства.Удалено КАК Удалено, | ДополнительныеРеквизитыИСведения.Доступен, | ДополнительныеРеквизитыИСведения.Виден, - | ДополнительныеРеквизитыИСведения.Подсказка, + | ВЫБОР + | КОГДА &ЭтоОсновнойЯзык + | ТОГДА ДополнительныеРеквизитыИСведения.Подсказка + | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Подсказка, ДополнительныеРеквизитыИСведения.Подсказка) КАК СТРОКА(150)) + | КОНЕЦ КАК Подсказка, | ДополнительныеРеквизитыИСведения.ВыводитьВВидеГиперссылки, | ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов.( | ЗависимоеСвойство, @@ -574,6 +600,9 @@ | ВсеСвойства КАК ВсеСвойства | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | ПО ВсеСвойства.Свойство = ДополнительныеРеквизитыИСведения.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления + | ПО (СвойстваПредставления.Ссылка = ДополнительныеРеквизитыИСведения.Ссылка) + | И СвойстваПредставления.КодЯзыка = &КодЯзыка | |УПОРЯДОЧИТЬ ПО | Удалено, @@ -686,11 +715,18 @@ Возврат Неопределено; КонецЕсли; + ПредопределенныеНаборыСвойств = УправлениеСвойствамиПовтИсп.ПредопределенныеНаборыСвойств(); + Если ТипЗнч(Ссылка) = Тип("Структура") Тогда СвойстваСсылки = Ссылка; Иначе СвойстваСсылки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - Ссылка, "ПометкаУдаления, ЭтоГруппа, Предопределенный, Родитель, ИмяПредопределенныхДанных"); + Ссылка, "ПометкаУдаления, ЭтоГруппа, Предопределенный, Родитель, ИмяПредопределенныхДанных, ИмяПредопределенногоНабора"); + КонецЕсли; + + Если ЗначениеЗаполнено(СвойстваСсылки.ИмяПредопределенногоНабора) Тогда + СвойстваСсылки.ИмяПредопределенныхДанных = СвойстваСсылки.ИмяПредопределенногоНабора; + СвойстваСсылки.Предопределенный = Истина; КонецЕсли; Если УчитыватьПометкуУдаления И СвойстваСсылки.ПометкаУдаления Тогда @@ -701,7 +737,8 @@ СсылкаПредопределенного = Ссылка; ИначеЕсли СвойстваСсылки.Предопределенный - И СвойстваСсылки.Родитель = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда + И СвойстваСсылки.Родитель = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() + Или СвойстваСсылки.Родитель = Неопределено Тогда СсылкаПредопределенного = Ссылка; Иначе @@ -709,7 +746,12 @@ КонецЕсли; Если Ссылка <> СсылкаПредопределенного Тогда - ИмяПредопределенного = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаПредопределенного, "ИмяПредопределенныхДанных"); + СвойстваНабора = ПредопределенныеНаборыСвойств.Получить(СвойстваСсылки.Родитель); + Если СвойстваНабора <> Неопределено Тогда + ИмяПредопределенного = ПредопределенныеНаборыСвойств.Получить(СсылкаПредопределенного).Имя; + Иначе + ИмяПредопределенного = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаПредопределенного, "ИмяПредопределенныхДанных"); + КонецЕсли; Иначе ИмяПредопределенного = СвойстваСсылки.ИмяПредопределенныхДанных; КонецЕсли; @@ -764,7 +806,7 @@ Ссылки = ВсеНаборы.ВыгрузитьКолонку("Набор"); СвойстваСсылок = ОбщегоНазначения.ЗначенияРеквизитовОбъектов( - Ссылки, "ПометкаУдаления, ЭтоГруппа, Предопределенный, Родитель, ИмяПредопределенныхДанных"); + Ссылки, "ПометкаУдаления, ЭтоГруппа, Предопределенный, Родитель, ИмяПредопределенныхДанных, ИмяПредопределенногоНабора"); Для Каждого СвойстваСсылки Из СвойстваСсылок Цикл ТипСсылки = Неопределено; @@ -993,6 +1035,8 @@ // Функция НаименованиеПредопределенногоНабора(Набор) Экспорт + ПредопределенныеНаборыСвойств = УправлениеСвойствамиПовтИсп.ПредопределенныеНаборыСвойств(); + Если ТипЗнч(Набор) = Тип("Строка") Тогда ИмяПредопределенного = Набор; Иначе @@ -1046,7 +1090,8 @@ Запрос.УстановитьПараметр("Группа", Группа); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ДополнительныеРеквизиты.Свойство КАК Свойство + | ДополнительныеРеквизиты.Свойство КАК Свойство, + | ДополнительныеРеквизиты.ИмяПредопределенногоНабора КАК ИмяПредопределенногоНабора |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты |ГДЕ @@ -1058,7 +1103,8 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ДополнительныеСведения.Свойство КАК Свойство + | ДополнительныеСведения.Свойство КАК Свойство, + | ДополнительныеСведения.ИмяПредопределенногоНабора КАК ИмяПредопределенногоНабора |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ @@ -1155,6 +1201,162 @@ КонецФункции +Функция ЛокализованныеЗначенияРеквизитов(Ссылка, Реквизиты) Экспорт + + ТекстЗапроса = "ВЫБРАТЬ + |%1 + | + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Таблица + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК ТаблицаПредставления + | ПО ТаблицаПредставления.Ссылка = Таблица.Ссылка + | И ТаблицаПредставления.КодЯзыка = &КодЯзыка + | + |ГДЕ + | Таблица.Ссылка = &Ссылка"; + + ТекстВставки = ""; + Шаблон = "ВЫРАЗИТЬ(ЕСТЬNULL(ТаблицаПредставления.%1, Таблица.%1) КАК СТРОКА(150)) КАК %1"; + Для Каждого Реквизит Из Реквизиты Цикл + Если Не ЗначениеЗаполнено(ТекстВставки) Тогда + ТекстВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Реквизит); + Иначе + ТекстВставки = ТекстВставки + "," + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Реквизит); + КонецЕсли; + КонецЦикла; + + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗапроса, ТекстВставки); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); + Результат = Запрос.Выполнить().Выгрузить(); + + Возврат Результат[0]; + +КонецФункции + +Процедура СоздатьПредопределенныеНаборыСвойств() Экспорт + + ПредопределенныеНаборыСвойств = УправлениеСвойствамиПовтИсп.ПредопределенныеНаборыСвойств(); + НаименованияНаборовСвойств = УправлениеСвойствамиПовтИсп.НаименованияНаборовСвойств(); + + Для Каждого ПредопределенныйНабор Из ПредопределенныеНаборыСвойств Цикл + Если ТипЗнч(ПредопределенныйНабор.Ключ) = Тип("Строка") Или ЗначениеЗаполнено(ПредопределенныйНабор.Значение.Родитель) Тогда + Продолжить; + КонецЕсли; + СвойстваНабора = ПредопределенныйНабор.Значение; + Объект = СвойстваНабора.Ссылка.ПолучитьОбъект(); + СоздатьНаборСвойств(Объект, СвойстваНабора); + + Для Каждого ДочернийНабор Из СвойстваНабора.ДочерниеНаборы Цикл + СвойстваНабора = ДочернийНабор.Значение; + ДочернийОбъект = СвойстваНабора.Ссылка.ПолучитьОбъект(); + СоздатьНаборСвойств(ДочернийОбъект, СвойстваНабора, НаименованияНаборовСвойств, Объект.Ссылка); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Процедура СоздатьНаборСвойств(Объект, СвойстваНабора, НаименованияНаборовСвойств = Неопределено, Родитель = Неопределено) + + Записать = Ложь; + Если Объект = Неопределено Тогда + Если СвойстваНабора.ДочерниеНаборы = Неопределено + Или СвойстваНабора.ДочерниеНаборы.Количество() = 0 Тогда + Объект = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьЭлемент(); + Иначе + Объект = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьГруппу(); + КонецЕсли; + Если Родитель <> Неопределено Тогда + Объект.Родитель = Родитель; + КонецЕсли; + Объект.УстановитьСсылкуНового(СвойстваНабора.Ссылка); + Объект.ИмяПредопределенногоНабора = СвойстваНабора.Имя; + Записать = Истина; + КонецЕсли; + + Если СвойстваНабора.Используется <> Неопределено Тогда + Если Объект.Используется <> СвойстваНабора.Используется Тогда + Объект.Используется = СвойстваНабора.Используется; + Записать = Истина; + КонецЕсли; + Иначе + Если Объект.Используется <> Истина Тогда + Объект.Используется = Истина; + Записать = Истина; + КонецЕсли; + КонецЕсли; + + Если Объект.Наименование <> СвойстваНабора.Наименование Тогда + Объект.Наименование = СвойстваНабора.Наименование; + Записать = Истина; + КонецЕсли; + + Если Объект.ИмяПредопределенногоНабора <> СвойстваНабора.Имя Тогда + Объект.ИмяПредопределенногоНабора = СвойстваНабора.Имя; + Записать = Истина; + КонецЕсли; + + Если Родитель = Неопределено Тогда + Для Каждого СтрокаТаблицы Из Объект.ДополнительныеРеквизиты Цикл + Если СтрокаТаблицы.ИмяПредопределенногоНабора <> СвойстваНабора.Имя Тогда + СтрокаТаблицы.ИмяПредопределенногоНабора = СвойстваНабора.Имя; + Записать = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если Родитель = Неопределено Тогда + Для Каждого СтрокаТаблицы Из Объект.ДополнительныеСведения Цикл + Если СтрокаТаблицы.ИмяПредопределенногоНабора <> СвойстваНабора.Имя Тогда + СтрокаТаблицы.ИмяПредопределенногоНабора = СвойстваНабора.Имя; + Записать = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если Объект.ПометкаУдаления Тогда + Объект.ПометкаУдаления = Ложь; + Записать = Истина; + КонецЕсли; + + Если НаименованияНаборовСвойств <> Неопределено Тогда + Для Каждого Язык Из Метаданные.Языки Цикл + Если Язык.КодЯзыка = ТекущийЯзык().КодЯзыка Тогда + Продолжить; + КонецЕсли; + ЛокализованныеНаименования = НаименованияНаборовСвойств[Язык.КодЯзыка]; + ЛокализованноеНаименование = ЛокализованныеНаименования[СвойстваНабора.Имя]; + СтрокаПредставления = Объект.Представления.Найти(Язык.КодЯзыка, "КодЯзыка"); + Если СтрокаПредставления = Неопределено И ЗначениеЗаполнено(ЛокализованноеНаименование) Тогда + Строка = Объект.Представления.Добавить(); + Строка.КодЯзыка = Язык.КодЯзыка; + Строка.Наименование = ЛокализованноеНаименование; + Записать = Истина; + ИначеЕсли СтрокаПредставления <> Неопределено И ЗначениеЗаполнено(ЛокализованноеНаименование) Тогда + СтрокаПредставления.Наименование = ЛокализованноеНаименование; + Записать = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если Записать Тогда + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Объект, Ложь); + КонецЕсли; + +КонецПроцедуры + +Функция НаименованияНаборовСвойств() Экспорт + Результат = Новый Соответствие; + Для Каждого Язык Из Метаданные.Языки Цикл + Наименования = Новый Соответствие; + УправлениеСвойствамиПереопределяемый.ПриПолученииНаименованийНаборовСвойств(Наименования, Язык.КодЯзыка); + Результат[Язык.КодЯзыка] = Наименования; + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Результат); +КонецФункции + Процедура УдалитьНедопустимыеСимволы(Строка) Экспорт НедопустимыеСимволы = """'`/\[]{}:;|=?*<>,.()+#№@!%^&~"; Строка = СтрСоединить(СтрРазделить(Строка, НедопустимыеСимволы, Истина)); @@ -1183,11 +1385,9 @@ // Функция ПолучитьОсновнойНаборСвойствДляОбъекта(ВладелецСвойств) - ПереданОбъект = Ложь; Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ВладелецСвойств) Тогда Ссылка = ВладелецСвойств; Иначе - ПереданОбъект = Истина; Ссылка = ВладелецСвойств.Ссылка; КонецЕсли; @@ -1202,7 +1402,12 @@ КонецЕсли; КонецЕсли; ИмяЭлемента = ВидОбъектаМетаданных + "_" + ИмяОбъектаМетаданных; - Возврат Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяЭлемента]; + ОсновнойНабор = УправлениеСвойствами.НаборСвойствПоИмени(ИмяЭлемента); + Если ОсновнойНабор = Неопределено Тогда + ОсновнойНабор = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяЭлемента]; + КонецЕсли; + + Возврат ОсновнойНабор; КонецФункции @@ -1270,7 +1475,7 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; Обработчик.РежимВыполнения = "Оперативно"; - Обработчик.Процедура = "УправлениеСвойствами.ОбновитьНаименованияНаборовИСвойств"; + Обработчик.Процедура = "УправлениеСвойствамиСлужебный.СоздатьПредопределенныеНаборыСвойств"; КонецЕсли; КонецПроцедуры @@ -1561,30 +1766,4 @@ КонецПроцедуры -// Устанавливает значения свойства Используется в значение Истина. -// -Процедура УстановитьЗначениеПризнакаИспользуется() Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | НаборыДополнительныхРеквизитовИСведений.Ссылка - |ИЗ - | Справочник.НаборыДополнительныхРеквизитовИСведений КАК НаборыДополнительныхРеквизитовИСведений - |ГДЕ - | НЕ НаборыДополнительныхРеквизитовИСведений.Используется"; - - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - - Пока Выборка.Следующий() Цикл - - НаборОбъект = Выборка.Ссылка.ПолучитьОбъект(); - НаборОбъект.Используется = Истина; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборОбъект); - - КонецЦикла; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 9d0b90c9b..7470e48ff 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -30,7 +38,7 @@ ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Начато регламентное получение и отправка электронной почты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + НСтр("ru = 'Начато регламентное получение и отправка электронной почты'", ОбщегоНазначения.КодОсновногоЯзыка())); СтруктураМассивовПисем = СтруктураМассиваПисем(); @@ -148,7 +156,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -167,7 +175,20 @@ Попытка ПараметрыПисьма = Неопределено; - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма); + + Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP + И НЕ СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(Профиль.АдресСервераSMTP) + И Не ВыборкаПисьма.УдалятьПослеОтправки Тогда + + ПротоколПочты = "Все"; + + Иначе + + ПротоколПочты = ""; + + КонецЕсли; + + Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, ПротоколПочты); Исключение @@ -187,18 +208,18 @@ Если ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов И Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда - + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Следующие адресаты электронного письма %1 не приняты почтовым сервером: - |%2. Письмо отправлено остальным адресатам.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2. Письмо отправлено остальным адресатам.'", ОбщегоНазначения.КодОсновногоЯзыка()), ВыборкаПисьма.ПредставлениеПисьма, ПредставлениеОшибочныхАдресатов); Иначе - + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), ВыборкаПисьма.ПредставлениеПисьма, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -223,46 +244,12 @@ КонецПопытки; - ИдентификаторПисьма = ПараметрыПисьма.ИдентификаторСообщения; - ИдентификаторСообщенияОтправкаIMAP = ""; - Если ВыборкаПисьма.УдалятьПослеОтправки Тогда + ПисьмоОбъект.Удалить(); + Иначе - Попытка - - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP - И Не СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(Профиль.АдресСервераSMTP) Тогда - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, "IMAP"); - ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщения; - КонецЕсли; - - Исключение - - ДанныеАнализаОшибочныхПолучателей = РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ПараметрыПисьма.ОшибочныеПолучатели); - - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = ДанныеАнализаОшибочныхПолучателей.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов; - - Если Не ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов Тогда - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время передачи электронного письма %1 на сервер произошла ошибка - |%2. - |Письмо отправлено, но не сохранено на почтовом сервере.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - ВыборкаПисьма.ПредставлениеПисьма, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); - - КонецЕсли; - - КонецПопытки; - - ПисьмоОбъект.ИдентификаторСообщения = ИдентификаторПисьма; - ПисьмоОбъект.ИдентификаторСообщенияОтправкаIMAP = ИдентификаторСообщенияОтправкаIMAP; ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; ПисьмоОбъект.Размер = Взаимодействия.ОценитьРазмерИсходящегоЭлектронногоПисьма(ПисьмоОбъект.Ссылка); ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); @@ -328,7 +315,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -353,7 +340,7 @@ ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Закончено регламентное получение и отправка электронной почты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + НСтр("ru = 'Закончено регламентное получение и отправка электронной почты'", ОбщегоНазначения.КодОсновногоЯзыка())); КонецПроцедуры @@ -365,7 +352,7 @@ // записей. // ЕстьОшибки - Булево - признак наличия ошибок при получении писем. // -Процедура ЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки) Экспорт +Процедура ЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки) Запрос = Новый Запрос; Запрос.Текст = @@ -405,7 +392,7 @@ ПолученоПисем = 0; ДоступноУчетныхЗаписей = Выборка.Количество(); Если ДоступноУчетныхЗаписей = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Нет доступных для получения почты учетных записей'")); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Нет доступных для получения почты учетных записей'")); Возврат; КонецЕсли; @@ -429,7 +416,7 @@ КонецПроцедуры // Выполняет отправку писем пользователя. -Процедура ОтправитьПочтуПользователя() Экспорт +Процедура ОтправитьПочтуПользователя() ТекущийПользователь = Пользователи.ТекущийПользователь(); @@ -482,6 +469,9 @@ МассивПисем = Новый Массив; ВыборкаУчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + УстановитьПривилегированныйРежим(Истина); + Пока ВыборкаУчетныеЗаписи.Следующий() Цикл Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(ВыборкаУчетныеЗаписи.УчетнаяЗапись); @@ -509,11 +499,11 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаУчетныеЗаписи.УчетнаяЗапись); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаУчетныеЗаписи.УчетнаяЗапись); Продолжить; @@ -526,7 +516,20 @@ Попытка ПараметрыПисьма = Неопределено; - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма); + + Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP + И НЕ СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ВыборкаПисьма.СерверИсходящейПочты) + И Не ВыборкаПисьма.УдалятьПослеОтправки Тогда + + ПротоколПочты = "Все"; + + Иначе + + ПротоколПочты = ""; + + КонецЕсли; + + Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, ПротоколПочты); Исключение @@ -541,7 +544,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Следующие адресаты электронного письма %1 не приняты почтовым сервером: - |%2. Письмо отправлено остальным адресатам.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2. Письмо отправлено остальным адресатам.'", ОбщегоНазначения.КодОсновногоЯзыка()), ВыборкаПисьма.ПредставлениеПисьма, ПредставлениеОшибочныхАдресатов); @@ -549,13 +552,13 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), ВыборкаПисьма.ПредставлениеПисьма, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаПисьма.Ссылка); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаПисьма.Ссылка); Если НЕ ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов Или ВсеАдресатыПисьмаОтвергнутыСервером Тогда @@ -572,49 +575,16 @@ КонецПопытки; - ИдентификаторПисьма = ПараметрыПисьма.ИдентификаторСообщения; - ИдентификаторСообщенияОтправкаIMAP = ""; - Если ВыборкаПисьма.УдалятьПослеОтправки Тогда ПисьмоОбъект.Удалить(); Иначе - Попытка - - Если ПротоколПодключения = ПротоколИнтернетПочты.IMAP - И НЕ СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ВыборкаПисьма.СерверИсходящейПочты) Тогда - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект, Соединение, ПараметрыПисьма, "IMAP"); - ИдентификаторСообщенияОтправкаIMAP = ПараметрыПисьма.ИдентификаторСообщения; - КонецЕсли; - - Исключение - - ДанныеАнализаОшибочныхПолучателей = РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ПараметрыПисьма.ОшибочныеПолучатели); - - ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = ДанныеАнализаОшибочныхПолучателей.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов; - - Если Не ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов Тогда - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время передачи электронного письма %1 на сервер произошла ошибка - |%2. - |Письмо отправлено, но не сохранено на почтовом сервере.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - ВыборкаПисьма.ПредставлениеПисьма, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаПисьма.Ссылка); - - КонецЕсли; - - КонецПопытки; - - ПисьмоОбъект.ИдентификаторСообщения = ИдентификаторПисьма; - ПисьмоОбъект.ИдентификаторСообщенияОтправкаIMAP = ИдентификаторСообщенияОтправкаIMAP; ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; ПисьмоОбъект.Размер = Взаимодействия.ОценитьРазмерИсходящегоЭлектронногоПисьма(ПисьмоОбъект.Ссылка); ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); ПисьмоОбъект.ДополнительныеСвойства.Вставить("НеЗаписыватьКонтакты", Истина); ПисьмоОбъект.Записать(РежимЗаписиДокумента.Запись); + Если ВыборкаПисьма.ТребуетсяОпределениеПапки Тогда МассивПисем.Добавить(ВыборкаПисьма.Ссылка); КонецЕсли; @@ -673,11 +643,11 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке,ВыборкаУчетныеЗаписи.УчетнаяЗапись); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке,ВыборкаУчетныеЗаписи.УчетнаяЗапись); Продолжить; @@ -696,6 +666,24 @@ КонецПроцедуры +Процедура ОтправитьЗагрузитьПочтуПользователя(ПараметрыВыгрузки, АдресХранилища) Экспорт + + ПолученоПисем = 0; + ДоступноУчетныхЗаписей = 0; + ЕстьОшибки = Ложь; + + ОтправитьПочтуПользователя(); + ЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки); + + СтруктураВозврата = Новый Структура; + СтруктураВозврата.Вставить("ПолученоПисем", ПолученоПисем); + СтруктураВозврата.Вставить("ДоступноУчетныхЗаписей", ДоступноУчетныхЗаписей); + СтруктураВозврата.Вставить("ЕстьОшибки", ЕстьОшибки); + + ПоместитьВоВременноеХранилище(СтруктураВозврата, АдресХранилища); + +КонецПроцедуры + Функция РезультатАнализаОшибочныхПолучателей(ПисьмоОбъект, ОшибочныеПолучатели) Экспорт Результат = Новый Структура; @@ -831,7 +819,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), ДанныеУчетнойЗаписи.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -922,7 +910,7 @@ ОтменитьТранзакцию(); ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При получении письма %1 от %2, отправленное c адреса %3 произошла ошибка - |%4'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%4'", ОбщегоНазначения.КодОсновногоЯзыка()), Сообщение.Тема, Сообщение.ДатаОтправления, Сообщение.Отправитель.Адрес, @@ -1469,13 +1457,13 @@ ПризнакРассмотрено = ?(ЭтоИсходящееПисьмо, Истина, Ложь); КонецЕсли; - СтруктураДляЗаписи = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); + СтруктураДляЗаписи = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); СтруктураДляЗаписи.Папка = Папка; - СтруктураДляЗаписи.Предмет = ?(ЗначениеЗаполнено(Предмет),Предмет,Письмо.Ссылка); + СтруктураДляЗаписи.Предмет = ?(ЗначениеЗаполнено(Предмет), Предмет, Письмо.Ссылка); СтруктураДляЗаписи.Рассмотрено = ПризнакРассмотрено; СтруктураДляЗаписи.РассчитыватьРассмотрено = Ложь; + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Письмо.Ссылка, СтруктураДляЗаписи); - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Письмо.Ссылка, СтруктураДляЗаписи); МассивИменВложений = Новый Массив; МассивДублирующихсяИменВложений = Новый Массив; @@ -1496,12 +1484,10 @@ КонецЦикла; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьСлужебныйКлиентСервер = - ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйКлиентСервер"); + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); СоответствиеВложенийИПодписей = - МодульЭлектроннаяПодписьСлужебныйКлиентСервер.ИменаФайловПодписейИменФайловДанных( - МассивИменВложений); + МодульЭлектроннаяПодписьСлужебный.ИменаФайловПодписейИменФайловДанных(МассивИменВложений); Иначе СоответствиеВложенийИПодписей = Новый Соответствие; Для Каждого ИмяФайлаВложения Из МассивИменВложений Цикл @@ -2329,7 +2315,7 @@ Иначе ДанныеВложения = Вложение.Данные.ПолучитьИсходныеДанные(); - ИмяФайла = ВзаимодействияКлиентСервер.ПредставлениеПисьма(Вложение.Данные.Тема, Вложение.Данные.ДатаПолучения) + ".eml"; + ИмяФайла = Взаимодействия.ПредставлениеПисьма(Вложение.Данные.Тема, Вложение.Данные.ДатаПолучения) + ".eml"; ЭтоВложениеПисьмо = Истина; КонецЕсли; @@ -2496,7 +2482,7 @@ КоличествоПустыхИменВоВложениях = 0) Экспорт ИмяФайлаДляРазбора = ИмяФайла; - РасширениеБезТочки = ВзаимодействияКлиентСервер.РасширениеФайла(ИмяФайлаДляРазбора); + РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайлаДляРазбора); ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаДляРазбора); Если ПустаяСтрока(ИмяБезРасширения) Тогда @@ -2711,7 +2697,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время регламентной отправки уведомления о прочтении электронного письма %1 произошла ошибка - |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%2'", ОбщегоНазначения.КодОсновногоЯзыка()), Выборка.ПредставлениеПисьма, ОписаниеОшибки()); @@ -2727,7 +2713,7 @@ Выборка.ПредставлениеПисьма, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке,Выборка.Письмо); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке,Выборка.Письмо); КонецЕсли; @@ -2887,7 +2873,7 @@ // Возвращает имя события журнала регистрации подсистемы Взаимодействия. Функция СобытиеЖурналаРегистрации() Экспорт - Возврат НСтр("ru = 'Взаимодействия'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Взаимодействия'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -2898,6 +2884,8 @@ // Процедура ПолучитьДоступныеУчетныеЗаписиДляОтправки(СписокВыбора,ТаблицаДанныхУчетнойЗаписи) Экспорт + СписокВыбора.Очистить(); + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl index 2f76ea378..e9f817857 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Открывает вложенный файл электронного письма. @@ -104,7 +112,7 @@ Если РезультатВыполнения.ЕстьОшибки Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'При получении почты были ошибки. Подробности см. в журнале регистрации'")); КонецЕсли; diff --git a/SSL/src/CommonModules/ФайловаяСистема/Module.bsl b/SSL/src/CommonModules/ФайловаяСистема/Module.bsl new file mode 100644 index 000000000..c58cdeccb --- /dev/null +++ b/SSL/src/CommonModules/ФайловаяСистема/Module.bsl @@ -0,0 +1,353 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +#Область ВременныеФайлы + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с временными файлами. + +// Создает временный каталог. После окончания работы с временным каталогом его необходимо удалить +// с помощью ФайловаяСистема.УдалитьВременныйКаталог. +// +// Параметры: +// Расширение - Строка - расширение каталога, которое идентифицирует назначение временного каталога +// и подсистему, которая его создала. +// Рекомендуется указывать на английском языке. +// +// Возвращаемое значение: +// Строка - полный путь к каталогу с разделителем пути. +// +Функция СоздатьВременныйКаталог(Знач Расширение = "") Экспорт + + ПутьККаталогу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла(Расширение)); + СоздатьКаталог(ПутьККаталогу); + Возврат ПутьККаталогу; + +КонецФункции + +// Удаляет временный каталог вместе с его содержимым, если возможно. +// Если временный каталог не может быть удален (например, он занят каким-то процессом), +// то в журнал регистрации записывается соответствующее предупреждение, а процедура завершается. +// +// Для совместного использования с ФайловаяСистема.СоздатьВременныйКаталог, +// после окончания работы с временным каталогом. +// +// Параметры: +// Путь - Строка - полный путь к временному каталогу. +// +Процедура УдалитьВременныйКаталог(Знач Путь) Экспорт + + Если ЭтоИмяВременногоФайла(Путь) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение параметра Путь в ФайловаяСистема.УдалитьВременныйКаталог: + |Каталог не является временным ""%1""'"), + Путь); + КонецЕсли; + + УдалитьВременныеФайлы(Путь); + +КонецПроцедуры + +// Удаляет временный файл. +// Если временный файл не может быть удален (например, он занят каким-то процессом), +// то в журнал регистрации записывается соответствующее предупреждение, а процедура завершается. +// +// Для совместного использования с методом ПолучитьИмяВременногоФайла, +// после окончания работы с временным файлом. +// +// Параметры: +// Путь - Строка - полный путь к временному файлу. +// +Процедура УдалитьВременныйФайл(Знач Путь) Экспорт + + Если ЭтоИмяВременногоФайла(Путь) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение параметра Путь в ФайловаяСистема.УдалитьВременныйФайл: + |Файл не является временным ""%1""'"), + Путь); + КонецЕсли; + + УдалитьВременныеФайлы(Путь); + +КонецПроцедуры + +#КонецОбласти + +#Область ЗапускВнешнихПриложений + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с внешними приложениями. + +// Возвращаемое значение: +// Структура - где: +// * ТекущийКаталог - Строка - задает текущий каталог запускаемого приложения. +// * ДождатьсяЗавершения - Булево - Ложь - дожидаться завершения запущенного приложения +// перед продолжением работы. +// * ПолучитьПотокВывода - Булево - Ложь - результат, направленный в поток stdout, +// если не указан ДождатьсяЗавершения - игнорируется. +// * ПолучитьПотокОшибок - Булево - Ложь - ошибки, направленные в поток stderr, +// если не указан ДождатьсяЗавершения - игнорируется. +// * КодировкаПотоков - КодировкаТекста, Строка - Кодировка, используемая для чтения stdout и stderr. +// По умолчанию используется для Windows OEM (cp437), остальные КодировкаТекста.Системная. +// * КодировкаИсполнения - Строка - кодировка, устанавливаемая в Windows с помощью команды chcp. +// В Linux и MacOS игнорируется. Возможные значения: "OEM" и "UTF8". +// +Функция ПараметрыЗапускаПрограммы() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ТекущийКаталог", ""); + Параметры.Вставить("ДождатьсяЗавершения", Ложь); + Параметры.Вставить("ПолучитьПотокВывода", Ложь); + Параметры.Вставить("ПолучитьПотокОшибок", Ложь); + Параметры.Вставить("КодировкаПотоков", Неопределено); + Параметры.Вставить("КодировкаИсполнения", Неопределено); + + Возврат Параметры; + +КонецФункции + +// Запускает внешнюю программу в соответствии с параметрами запуска. +// +// Параметры: +// КомандаЗапуска - Строка - командная строка для запуска программы. +// - Массив - первый элемент массива, путь к исполняемому приложению, +// остальные элементы массива - это передаваемые параметры, +// массив соответствует тому, который получит вызываемая программа в argv. +// ПараметрыЗапускаПрограммы - - Структура - См. ФайловаяСистема.ПараметрыЗапускаПрограммы +// +// Возвращаемое значение: +// Структура - где: +// * КодВозврата - Число - код возврата программы; +// * ПотокВывода - Строка - результат работы программы, направленный в поток stdout; +// * ПотокОшибок - Строка - ошибки исполнения программы, направленные в поток stderr. +// +// Пример: +// // Простой запуск +// ФайловаяСистема.ЗапуститьПрограмму("calc"); +// +// // Запуск с ожиданием завершения +// ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы(); +// ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; +// ФайловаяСистема.ЗапуститьПрограмму("C:\Program Files\1cv8\common\1cestart.exe", +// ПараметрыЗапускаПрограммы); +// +// // Запуск с ожиданием завершения и получением потока вывода +// ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы(); +// ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; +// ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; +// Результат = ФайловаяСистема("ping 127.0.0.1 -n 5", ПараметрыЗапускаПрограммы); +// ОбщегоНазначений.СообщитьПользователю(Результат.ПотокВывода); +// +// // Запуск с ожиданием завершения и получением потока вывода и с конкатенацией команды запуска +// ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы(); +// ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; +// ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; +// КомандаЗапуска = Новый Массив; +// КомандаЗапуска.Добавить("ping"); +// КомандаЗапуска.Добавить("127.0.0.1"); +// КомандаЗапуска.Добавить("-n"); +// КомандаЗапуска.Добавить(5); +// Результат = ФайловаяСистема.ЗапуститьПрограмму(КомандаЗапуска, ПараметрыЗапускаПрограммы); +// ОбщегоНазначений.СообщитьПользователю(Результат.ПотокВывода); +// +Функция ЗапуститьПрограмму(Знач КомандаЗапуска, ПараметрыЗапускаПрограммы = Неопределено) Экспорт + + // АПК:534-выкл методы безопасного запуска обеспечиваются этой функцией + + СтрокаКоманды = ОбщегоНазначенияСлужебныйКлиентСервер.БезопаснаяСтрокаКоманды(КомандаЗапуска); + + Если ПараметрыЗапускаПрограммы = Неопределено Тогда + ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); + КонецЕсли; + + ТекущийКаталог = ПараметрыЗапускаПрограммы.ТекущийКаталог; + ДождатьсяЗавершения = ПараметрыЗапускаПрограммы.ДождатьсяЗавершения; + ПолучитьПотокВывода = ПараметрыЗапускаПрограммы.ПолучитьПотокВывода; + ПолучитьПотокОшибок = ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок; + КодировкаПотоков = ПараметрыЗапускаПрограммы.КодировкаПотоков; + КодировкаИсполнения = ПараметрыЗапускаПрограммы.КодировкаИсполнения; + + ПроверитьТекущийКаталог(СтрокаКоманды, ТекущийКаталог); + + Если ДождатьсяЗавершения Тогда + Если ПолучитьПотокВывода Тогда + ИмяФайлаПотокаВывода = ПолучитьИмяВременногоФайла("stdout.tmp"); + СтрокаКоманды = СтрокаКоманды + " > """ + ИмяФайлаПотокаВывода + """"; + КонецЕсли; + + Если ПолучитьПотокОшибок Тогда + ИмяФайлаПотокаОшибок = ПолучитьИмяВременногоФайла("stderr.tmp"); + СтрокаКоманды = СтрокаКоманды + " 2>""" + ИмяФайлаПотокаОшибок + """"; + КонецЕсли; + КонецЕсли; + + Если КодировкаПотоков = Неопределено Тогда + КодировкаПотоков = КодировкаСтандартныхПотоков(); + КонецЕсли; + + КодВозврата = Неопределено; + + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда + + ИмяФайлаКоманды = ПолучитьИмяВременногоФайла("run.bat"); + ТекстовыйДокумент = ОбщегоНазначенияСлужебныйКлиентСервер.НовыйФайлЗапускаКомандыWindows( + СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодировкаИсполнения); + ТекстовыйДокумент.Записать(ИмяФайлаКоманды, КодировкаПотоков); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + // В файловой информационной базе показывать окно консоли не следует и в серверном контексте. + Оболочка = Новый COMОбъект("Wscript.Shell"); + КодВозврата = Оболочка.Run(ИмяФайлаКоманды, 0, ДождатьсяЗавершения); + Оболочка = Неопределено; + Иначе + ЗапуститьПриложение(ИмяФайлаКоманды,, ДождатьсяЗавершения, КодВозврата); + КонецЕсли; + + Если ДождатьсяЗавершения Тогда + // Автоматически удаление включено только в случае не ожидания завершения, т.к. код возврата там не интересен. + // В случае, когда нужен корректный код возврата автоматического удаления нет, потому следует удалить файл здесь. + УдалитьВременныйФайл(ИмяФайлаКоманды); + КонецЕсли; + Иначе + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодВозврата); + КонецЕсли; + + ПотокВывода = ""; + ПотокОшибок = ""; + + Если ДождатьсяЗавершения Тогда + Если ПолучитьПотокВывода Тогда + ПотокВывода = ПрочитатьФайлЕслиСуществует(ИмяФайлаПотокаВывода, КодировкаПотоков); + УдалитьВременныйФайл(ИмяФайлаПотокаВывода); + КонецЕсли; + + Если ПолучитьПотокОшибок Тогда + ПотокОшибок = ПрочитатьФайлЕслиСуществует(ИмяФайлаПотокаОшибок, КодировкаПотоков); + УдалитьВременныйФайл(ИмяФайлаПотокаОшибок); + КонецЕсли; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("КодВозврата", КодВозврата); + Результат.Вставить("ПотокВывода", ПотокВывода); + Результат.Вставить("ПотокОшибок", ПотокОшибок); + + Возврат Результат; + + // АПК:534-вкл + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура УдалитьВременныеФайлы(Знач Путь) + + Попытка + УдалитьФайлы(Путь); + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Стандартные подсистемы'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить временный файл ""%1"" по причине: + |%2'"), + Путь, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + КонецПопытки; + +КонецПроцедуры + +Функция ЭтоИмяВременногоФайла(Путь) + + // Ожидается, что Путь получен методом ПолучитьИмяВременногоФайла(). + // Перед проверкой разворачиваем слэши в одну сторону. + Возврат Не СтрНачинаетсяС(СтрЗаменить(Путь, "/", "\"), СтрЗаменить(КаталогВременныхФайлов(), "/", "\")); + +КонецФункции + +#Область ЗапуститьПрограмму + +Процедура ПроверитьТекущийКаталог(СтрокаКоманды, ТекущийКаталог) + + Если Не ПустаяСтрока(ТекущийКаталог) Тогда + + ФайлИнфо = Новый Файл(ТекущийКаталог); + + Если Не ФайлИнфо.Существует() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось запустить программу + |%1 + |по причине: + |Не существует каталог, указанный как ТекущийКаталог + |%2'"), + СтрокаКоманды, + ТекущийКаталог); + КонецЕсли; + + Если Не ФайлИнфо.ЭтоКаталог() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось запустить программу + |%1 + |по причине: + |ТекущийКаталог не является каталогом %2'"), + СтрокаКоманды, + ТекущийКаталог); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Функция ПрочитатьФайлЕслиСуществует(Путь, Кодировка) + + Результат = Неопределено; + + ФайлИнфо = Новый Файл(Путь); + + Если ФайлИнфо.Существует() Тогда + + ЧтениеПотокаОшибок = Новый ЧтениеТекста(Путь, Кодировка); + Результат = ЧтениеПотокаОшибок.Прочитать(); + ЧтениеПотокаОшибок.Закрыть(); + + КонецЕсли; + + Если Результат = Неопределено Тогда + Результат = ""; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает кодировку стандартных поток вывода и ошибок, используемую в текущей ОС. +// +// Возвращаемое значение: +// КодировкаТекста - кодировка стандартных потоков вывода и ошибок. +// +Функция КодировкаСтандартныхПотоков() + + Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда + Кодировка = КодировкаТекста.OEM; + Иначе + Кодировка = КодировкаТекста.Системная; + КонецЕсли; + + Возврат Кодировка; + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ФайловаяСистема/ФайловаяСистема.mdo b/SSL/src/CommonModules/ФайловаяСистема/ФайловаяСистема.mdo new file mode 100644 index 000000000..3ad6bdec3 --- /dev/null +++ b/SSL/src/CommonModules/ФайловаяСистема/ФайловаяСистема.mdo @@ -0,0 +1,11 @@ + + + ФайловаяСистема + + ru + Файловая система + + true + true + true + diff --git a/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl b/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl new file mode 100644 index 000000000..9f73a7f86 --- /dev/null +++ b/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl @@ -0,0 +1,789 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +#Область ЗагрузкаФайлов + +// Показывает диалог выбора файла и помещает выбранный файл во временное хранилище. +// Совмещает работу методов глобального контекста НачатьПомещениеФайла и НачатьПомещениеФайлов, +// возвращая идентичный результат вне зависимости от того, подключено расширение работы с файлами или нет. +// Ограничения: +// Не используется для выбора каталогов - эта опция не поддерживается веб-клиентом. +// +// Параметры: +// ОбработчикЗавершения- ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после +// загрузки файла со следующими параметрами: +// * ПомещенныеФайлы - Неопределено - пользователь отказался от выбора. +// - Структура - пользователь выбрал файл. +// ** Хранение - Строка - расположение данных во временном хранилище. +// ** Имя - Строка - локальный путь, по которому должен быть получен файл. +// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта +// ОписаниеОповещения. +// ПараметрыЗагрузки - Структура - См. ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла. +// ИмяФайла - Строка - полный путь к файлу, который будет предложен пользователю в начале +// интерактивного выбора или помещен во временное хранилище в неинтерактивном. Если +// выбран неинтерактивный режим и параметр не заполнен, будет вызвано исключение. +// АдресВоВременномХранилище - Строка - адрес, по которому будет сохранен файл. +// +// Пример: +// Оповещение = Новый ОписаниеОповещения("ВыбратьФайлПослеПомещенияФайла", ЭтотОбъект, Контекст); +// ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); +// ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; +// ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); +// +Процедура ЗагрузитьФайл( + ОбработчикЗавершения, + ПараметрыЗагрузки = Неопределено, + ИмяФайла = "", + АдресВоВременномХранилище = "") Экспорт + + Если ПараметрыЗагрузки = Неопределено Тогда + ПараметрыЗагрузки = ПараметрыЗагрузкиФайла(); + ИначеЕсли Не ПараметрыЗагрузки.Интерактивно + И ПустаяСтрока(ИмяФайла) Тогда + ВызватьИсключение НСтр("ru ='Не указано имя файла для загрузки в неинтерактивном режиме.'"); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ПараметрыЗагрузки.ИдентификаторФормы) Тогда + ПараметрыЗагрузки.ИдентификаторФормы = Новый УникальныйИдентификатор; + КонецЕсли; + + ОписаниеФайла = Новый ОписаниеПередаваемогоФайла(ИмяФайла, АдресВоВременномХранилище); + ЗагружаемыеФайлы = Новый Массив; + ЗагружаемыеФайлы.Добавить(ОписаниеФайла); + ПараметрыЗагрузки.Вставить("ЗагружаемыеФайлы", ЗагружаемыеФайлы); + + ПараметрыЗагрузки.Диалог.ПолноеИмяФайла = ИмяФайла; + ПараметрыЗагрузки.Диалог.МножественныйВыбор = Ложь; + ПоказатьПомещениеФайла(ОбработчикЗавершения, ПараметрыЗагрузки); + +КонецПроцедуры + +// Показывает диалог выбора файлов и помещает выбранные файлы во временное хранилище. +// Совмещает работу методов глобального контекста НачатьПомещениеФайла и НачатьПомещениеФайлов, +// возвращая идентичный результат вне зависимости от того, подключено расширение работы с файлами или нет. +// Ограничения: +// Не используется для выбора каталогов - эта опция не поддерживается веб-клиентом. +// Не поддерживается множественный выбор в веб-клиенте, если не установлено расширение работы с файлами. +// +// Параметры: +// ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после +// загрузки файлов со следующими параметрами: +// * ПомещенныеФайлы - Неопределено - пользователь отказался от выбора. +// - Массив - Содержит объекты типа ОписаниеПереданногоФайла. Пользователь выбрал файл. +// ** Хранение - Строка - расположение данных во временном хранилище. +// ** Имя - Строка - локальный путь, по которому должен быть получен файл. +// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// ПараметрыЗагрузки - Структура - См. ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла. +// ЗагружаемыеФайлы - Массив - содержит объекты типа ОписаниеПередаваемогоФайла. Может быть заполнен полностью, +// в этом случае загружаемые файлы будут сохранены по указанным адресам. Может быть заполнен +// частично - у элементов массива заполнены только имена. В этом случае, загружаемые файлы будут +// размещены в новых временных хранилищах. Массив может быть не заполнен. В этом случае набор +// помещаемых файлов определяется по значениям, указанным в параметре ПараметрыЗагрузки. Если в +// параметрах загрузки выбран неинтерактивный режим и параметр ЗагружаемыеФайлы не заполнен, будет +// вызвано исключение. +// +// Пример: +// Оповещение = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеПомещенияФайлов", ЭтотОбъект, Контекст); +// ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); +// ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; +// ФайловаяСистемаКлиент.ЗагрузитьФайлы(Оповещение, ПараметрыЗагрузки); +// +Процедура ЗагрузитьФайлы( + ОбработчикЗавершения, + ПараметрыЗагрузки = Неопределено, + ЗагружаемыеФайлы = Неопределено) Экспорт + + Если ПараметрыЗагрузки = Неопределено Тогда + ПараметрыЗагрузки = ПараметрыЗагрузкиФайла(); + КонецЕсли; + + Если Не ПараметрыЗагрузки.Интерактивно + И (ЗагружаемыеФайлы = Неопределено + Или (ТипЗнч(ЗагружаемыеФайлы) = Тип("Массив") + И ЗагружаемыеФайлы.Количество() = 0)) Тогда + + ВызватьИсключение НСтр("ru ='Не указаны файлы для загрузки в неинтерактивном режиме.'"); + + КонецЕсли; + + Если ЗагружаемыеФайлы = Неопределено Тогда + ЗагружаемыеФайлы = Новый Массив; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ПараметрыЗагрузки.ИдентификаторФормы) Тогда + ПараметрыЗагрузки.ИдентификаторФормы = Новый УникальныйИдентификатор; + КонецЕсли; + + ПараметрыЗагрузки.Диалог.МножественныйВыбор = Истина; + ПараметрыЗагрузки.Вставить("ЗагружаемыеФайлы", ЗагружаемыеФайлы); + ПоказатьПомещениеФайла(ОбработчикЗавершения, ПараметрыЗагрузки); + +КонецПроцедуры + +#КонецОбласти + +#Область СохранениеФайлов + +// Получает файл и сохраняет его в локальную файловую систему пользователя. +// +// Параметры: +// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - содержит описание процедуры, которая +// будет вызвана после завершения со следующими параметрами: +// * ПолученныеФайлы - Неопределено - файлы не были получены. +// - Массив - Содержит объекты типа ОписаниеПереданногоФайла. Сохраненные файлы. +// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// АдресВоВременномХранилище - Строка - расположение данных во временном хранилище. +// ИмяФайла - Строка - полный путь, по которому должен быть сохранен получаемый файл или имя файла +// с расширением. +// ПараметрыСохранения - Структура - См. ФайловаяСистемаКлиент.ПараметрыСохраненияФайла +// +// Пример: +// Оповещение = Новый ОписаниеОповещения("СохранитьСертификатПослеПолученияФайлов", ЭтотОбъект, Контекст); +// ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); +// ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, Контекст.АдресСертификата, ИмяФайла, ПараметрыСохранения); +// +Процедура СохранитьФайл(ОбработчикЗавершения, АдресВоВременномХранилище, ИмяФайла = "", + ПараметрыСохранения = Неопределено) Экспорт + + Если ПараметрыСохранения = Неопределено Тогда + ПараметрыСохранения = ПараметрыСохраненияФайла(); + КонецЕсли; + + ДанныеФайла = Новый ОписаниеПередаваемогоФайла(ИмяФайла, АдресВоВременномХранилище); + + СохраняемыеФайлы = Новый Массив; + СохраняемыеФайлы.Добавить(ДанныеФайла); + + ПоказатьПолучениеФайлов(ОбработчикЗавершения, СохраняемыеФайлы, ПараметрыСохранения); + +КонецПроцедуры + +// Получает файлы и сохраняет их в локальную файловую систему пользователя. +// Для сохранения файлов в неинтерактивном режиме свойство Имя параметра СохраняемыеФайлы должно содержать +// полный путь к сохраняемому файлу или, если свойство Имя содержит только имя файла с расширением, необходимо +// заполнить свойство Каталог элемента Диалог параметра ПараметрыСохранения. В иных случаях будет вызвано +// исключение. +// +// Параметры: +// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - содержит описание процедуры, которая +// будет вызвана после завершения со следующими параметрами: +// * ПолученныеФайлы - Неопределено - файлы не были получены. +// - Массив - содержит объекты типа ОписаниеПереданногоФайла. Сохраненные файлы. +// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта +// ОписаниеОповещения. +// СохраняемыеФайлы - Массив - содержит объекты типа ОписаниеПереданногоФайла: +// * Хранение - расположение данных во временном хранилище. +// * Имя - Строка - полный путь, по которому должен быть сохранен получаемый файл или имя файла с расширением. +// ПараметрыСохранения - Структура - см. ФайловаяСистемаКлиент.ПараметрыСохраненияФайла +// +// Пример: +// Оповещение = Новый ОписаниеОповещения("СохранитьПечатнуюФормуВФайлПослеПолученияФайлов", ЭтотОбъект); +// ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов(); +// ФайловаяСистемаКлиент.СохранитьФайлы(Оповещение, ПолучаемыеФайлы, ПараметрыСохранения); +// +Процедура СохранитьФайлы(ОбработчикЗавершения, СохраняемыеФайлы, ПараметрыСохранения = Неопределено) Экспорт + + Если ПараметрыСохранения = Неопределено Тогда + ПараметрыСохранения = ПараметрыСохраненияФайлов(); + КонецЕсли; + + ПоказатьПолучениеФайлов(ОбработчикЗавершения, СохраняемыеФайлы, ПараметрыСохранения); + +КонецПроцедуры + +#КонецОбласти + +#Область Параметры + +// Инициализирует структуру параметров для загрузки файла из файловой системы. +// Для использования в ФайловаяСистемаКлиент.ЗагрузитьФайл и ФайловаяСистемаКлиент.ЗагрузитьФайлы +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ИдентификаторФормы - УникальныйИдентификатор - Уникальный идентификатор формы, из +// которой выполняется размещение файла. Если параметр не заполнен, +// необходимо вызывать метод глобального контекста УдалитьИзВременногоХранилища +// после завершения работы с полученными двоичными данными. Значение по +// умолчанию - Неопределено. +// * Интерактивно - Булево - Указывает использование интерактивного режима, при котором +// пользователю показывается диалог выбора файлов. Значение по +// умолчанию - Истина. +// * Диалог - ДиалогВыбораФайла - свойства см. в синтакс-помощнике. +// Используется, если свойство Интерактивно принимает значение Истина и +// удалось подключить расширение работы с файлами. +// * ТекстПредложения - Строка - текст предложения об установке расширения. Если параметр +// принимает значение "", будет выведен стандартный текст предложения. +// Значение по умолчанию - "". +// +// Пример: +// ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); +// ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите документ'"); +// ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Файлы MS Word (*.doc;*.docx)|*.doc;*.docx|Все файлы(*.*)|*.*'"); +// ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); +// +Функция ПараметрыЗагрузкиФайла() Экспорт + + ПараметрыЗагрузки = КонтекстОперации(РежимДиалогаВыбораФайла.Открытие); + ПараметрыЗагрузки.Вставить("ИдентификаторФормы", Неопределено); + Возврат ПараметрыЗагрузки; + +КонецФункции + +// Инициализирует структуру параметров для сохранения файла в файловую систему. +// Для использования в ФайловаяСистемаКлиент.СохранитьФайл. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * Интерактивно - Булево - указывает использование интерактивного режима, при котором +// пользователю показывается диалог выбора файлов. Значение по +// умолчанию - Истина. +// * Диалог - ДиалогВыбораФайла - свойства см. в синтакс-помощнике. +// Используется, если свойство Интерактивно принимает значение Истина и +// удалось подключить расширение работы с файлами. +// * ТекстПредложения - Строка - текст предложения об установке расширения. Если параметр +// принимает значение "", будет выведен стандартный текст предложения. +// Значение по умолчанию - "". +// +// Пример: +// ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); +// ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Сохранить профиль ключевых операций в файл'"); +// ПараметрыСохранения.Диалог.Фильтр = "Файлы профиля ключевых операций (*.xml)|*.xml"; +// ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, СохранитьПрофильКлючевыхОперацийНаСервере(), , ПараметрыСохранения); +// +Функция ПараметрыСохраненияФайла() Экспорт + + Возврат КонтекстОперации(РежимДиалогаВыбораФайла.Сохранение); + +КонецФункции + +// Инициализирует структуру параметров для сохранения файла в файловую систему. +// Для использования в ФайловаяСистемаКлиент.СохранитьФайлы +// +// Возвращаемое значение: +// Структура - со свойствами: +// * Интерактивно - Булево - указывает использование интерактивного режима, при котором +// пользователю показывается диалог выбора файлов. Значение по +// умолчанию - Истина. +// * Диалог - ДиалогВыбораФайла - свойства см. в синтакс-помощнике. +// Используется, если свойство Интерактивно принимает значение Истина и +// удалось подключить расширение работы с файлами. +// * ТекстПредложения - Строка - текст предложения об установке расширения. Если параметр +// принимает значение "", будет выведен стандартный текст предложения. +// Значение по умолчанию - "". +// +// Пример: +// ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов(); +// ПараметрыСохранения.Диалог.Заголовок = НСтр("ru ='Выбор папки для сохранения сформированного документа'"); +// ФайловаяСистемаКлиент.СохранитьФайлы(Оповещение, ПолучаемыеФайлы, ПараметрыСохранения); +// +Функция ПараметрыСохраненияФайлов() Экспорт + + Возврат КонтекстОперации(РежимДиалогаВыбораФайла.ВыборКаталога); + +КонецФункции + +// Инициализирует структуру параметров для открытия файла. +// Для использования в ФайловаяСистемаКлиент.ОткрытьФайл +// +// Возвращаемое значение: +// Структура - со свойствами: +// *Кодировка - Строка - кодировка текстового файла. Если параметр не задан, формат текста +// будет определен автоматически. Список кодировок см. в синтакс-помощнике в +// описании метода Записать текстового документа. Значение по умолчанию - "". +// *ДляРедактирования - Булево - Истина, если файл открывается для редактирования, иначе Ложь. Если +// параметр принимает значение Истина, ожидает закрытия программы и если в параметре +// РасположениеФайла хранится адрес во временном хранилище, обновляет данные файла. +// Значение по умолчанию - Ложь. +// +Функция ПараметрыОткрытияФайла() Экспорт + + Контекст = Новый Структура; + Контекст.Вставить("Кодировка", ""); + Контекст.Вставить("ДляРедактирования", Ложь); + Возврат Контекст; + +КонецФункции + +#КонецОбласти + +#Область ЗапускВнешнихПриложений + +// Открывает файл для просмотра или редактирования. +// Если файл открывается из двоичных данных во временном хранилище, предварительно сохраняет +// его во временный каталог. +// +// Параметры: +// РасположениеФайла - Строка - полный путь к файлу в файловой системе или адрес данных файла +// во временном хранилище. +// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - описание процедуры, принимающей результат работы +// метода, с параметрами: +// * ФайлИзменен - Булево - изменен файл на диске или двоичные данные во временном хранилище. +// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта +// ОписаниеОповещения. +// ИмяФайла - Строка - имя файла с расширением или расширение файла без точки. Если +// параметр РасположениеФайла содержит адрес во временном хранилище и параметр +// ИмяФайла не заполнен, будет вызвано исключение. +// ПараметрыОткрытия - Структура - см. ФайловаяСистемаКлиент.ПараметрыОткрытияФайла. +// +Процедура ОткрытьФайл( + РасположениеФайла, + ОбработчикЗавершения = Неопределено, + ИмяФайла = "", + ПараметрыОткрытия = Неопределено) Экспорт + + Если ПараметрыОткрытия = Неопределено Тогда + ПараметрыОткрытия = ПараметрыОткрытияФайла(); + КонецЕсли; + + ПараметрыОткрытия.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + Если ЭтоАдресВременногоХранилища(РасположениеФайла) Тогда + + Если ПустаяСтрока(ИмяФайла) Тогда + ВызватьИсключение НСтр("ru ='Не указано имя файла.'"); + КонецЕсли; + + ПутьКФайлу = ПолноеИмяВременногоФайла(ИмяФайла); + + ПараметрыОткрытия.Вставить("ПутьКФайлу", ПутьКФайлу); + ПараметрыОткрытия.Вставить("АдресДвоичныхДанныхДляОбновления", РасположениеФайла); + ПараметрыОткрытия.Вставить("УдалятьПослеОбновленияДанных", Истина); + + ПараметрыСохранения = ПараметрыСохраненияФайла(); + ПараметрыСохранения.Интерактивно = Ложь; + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ОткрытьФайлПослеСохранения", ФайловаяСистемаСлужебныйКлиент, ПараметрыОткрытия); + + СохранитьФайл(ОписаниеОповещения, РасположениеФайла, ПутьКФайлу, ПараметрыСохранения); + + Иначе + ФайловаяСистемаСлужебныйКлиент.ОткрытьФайлПослеСохранения(Новый Структура("Имя", РасположениеФайла), ПараметрыОткрытия); + КонецЕсли; + +КонецПроцедуры + +// Открывает проводник с указанным путем. +// Если передан путь к файлу, то выполняет позиционирование курсора в проводнике на этом файле. +// +// Параметры: +// ПутьККаталогуИлиФайлу - Строка - полный путь к файлу или каталогу на диске. +// +// Пример: +// // Для Windows +// ФайловаяСистемаКлиент.ОткрытьПроводник("C:\Users"); +// ФайловаяСистемаКлиент.ОткрытьПроводник("C:\Program Files\1cv8\common\1cestart.exe"); +// // Для Linux +// ФайловаяСистемаКлиент.ОткрытьПроводник("/home/"); +// ФайловаяСистемаКлиент.ОткрытьПроводник("/opt/1C/v8.3/x86_64/1cv8c"); +// +Процедура ОткрытьПроводник(ПутьККаталогуИлиФайлу) Экспорт + + ФайлИнфо = Новый Файл(ПутьККаталогуИлиФайлу); + + Контекст = Новый Структура; + Контекст.Вставить("ФайлИнфо", ФайлИнфо); + + Оповещение = Новый ОписаниеОповещения( + "ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); + + ТекстПредложения = НСтр("ru = 'Для открытия папки необходимо установить расширение работы с файлами.'"); + ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + +КонецПроцедуры + +// Открывает навигационную ссылку в программе, которая ассоциирована с протоколом навигационной ссылки. +// +// Допустимые протоколы: http, https, e1c, v8help, mailto, tel, skype. +// +// Для открытия проводника или файла в программе просмотра не следует формировать ссылку по протоколу file:// +// - для открытия проводника см. ОткрытьПроводник. +// - для открытия файла по расширению см. ОткрытьФайлВПрограммеПросмотра. +// +// Параметры: +// НавигационнаяСсылка - Строка - ссылка, которую требуется открыть. +// Оповещение - ОписаниеОповещения - оповещение о результате открытия. +// если оповещение не задано, в случае ошибки будет показано предупреждение. +// - ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. +// - ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// +// Пример: +// ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("e1cib/navigationpoint/startpage"); // начальная страница. +// ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("v8help://1cv8/QueryLanguageFullTextSearchInData"); +// ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://1c.ru"); +// ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("mailto:help@1c.ru"); +// ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("skype:echo123?call"); +// +Процедура ОткрытьНавигационнуюСсылку(НавигационнаяСсылка, Знач Оповещение = Неопределено) Экспорт + + // АПК:534-выкл методы безопасного запуска обеспечиваются этой функцией + + Контекст = Новый Структура; + Контекст.Вставить("НавигационнаяСсылка", НавигационнаяСсылка); + Контекст.Вставить("Оповещение", Оповещение); + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось перейти по ссылке ""%1"" по причине: + |Неверно задана навигационная ссылка.'"), + НавигационнаяСсылка); + + Если Не ФайловаяСистемаСлужебныйКлиент.ЭтоДопустимаяСсылка(НавигационнаяСсылка) Тогда + + ФайловаяСистемаСлужебныйКлиент.ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + + ИначеЕсли ФайловаяСистемаСлужебныйКлиент.ЭтоВебСсылка(НавигационнаяСсылка) + Или ОбщегоНазначенияСлужебныйКлиент.ЭтоНавигационнаяСсылка(НавигационнаяСсылка) Тогда + + Попытка + +#Если ТолстыйКлиентОбычноеПриложение Тогда + + // Особенность платформы: ПерейтиПоНавигационнойСсылке не доступен в толстом клиенте обычного приложения. + Оповещение = Новый ОписаниеОповещения( + ,, Контекст, + "ОткрытьНавигационнуюСсылкуПриОбработкеОшибки", ФайловаяСистемаСлужебныйКлиент); + НачатьЗапускПриложения(Оповещение, НавигационнаяСсылка); +#Иначе + ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка); +#КонецЕсли + + Если Оповещение <> Неопределено Тогда + ПриложениеЗапущено = Истина; + ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); + КонецЕсли; + + Исключение + ФайловаяСистемаСлужебныйКлиент.ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецПопытки; + + ИначеЕсли ФайловаяСистемаСлужебныйКлиент.ЭтоСсылкаНаСправку(НавигационнаяСсылка) Тогда + + ОткрытьСправку(НавигационнаяСсылка); + + Иначе + + Оповещение = Новый ОписаниеОповещения( + "ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); + + ТекстПредложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для открытия ссылки ""%1"" необходимо установить расширение работы с файлами.'"), + НавигационнаяСсылка); + ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + + КонецЕсли; + + // АПК:534-вкл + +КонецПроцедуры + +// Возвращаемое значение: +// Структура - где: +// * ТекущийКаталог - Строка - Задает текущий каталог запускаемого приложения. +// * Оповещение - ОписаниеОповещения - оповещение о результате завершения запущенного приложения, +// если оповещение не задано в случае ошибки будет показано предупреждение. +// - Результат - Структура - результат работы программы: +// -- ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. +// -- ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. +// -- КодВозврата - Число - код возврата программы. +// -- ПотокВывода - Строка - результат работы программы, направленный в поток stdout. +// В веб-клиенте всегда принимает значение "". +// -- ПотокОшибок - Строка - ошибки исполнения программы, направленные в поток stderr. +// В веб-клиенте всегда принимает значение "". +// - ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// * ДождатьсяЗавершения - Булево - Истина, дожидаться завершения запущенного приложения перед продолжением работы. +// * ПолучитьПотокВывода - Булево - Ложь - результат, направленный в поток stdout, +// если не указан ДождатьсяЗавершения - игнорируется. +// * ПолучитьПотокОшибок - Булево - Ложь - ошибки, направленные в поток stderr, +// если не указан ДождатьсяЗавершения - игнорируется. +// * КодировкаИсполнения - Строка - Кодировка, устанавливаемая в Windows с помощью команды chcp. +// в Linux и MacOS игнорируется. Возможные значения "OEM" и "UTF8". +// * ВыполнитьСНаивысшимиПравами - Булево - Истина, если требуется запустить программу на исполнение +// с повышением привилегий системы: +// - Windows: запрос UAC; +// - Linux: исполнение с командой pkexec; +// - OSX, веб-клиент и мобильный клиент: будет возвращено Результат.ОписаниеОшибки. +// +Функция ПараметрыЗапускаПрограммы() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ТекущийКаталог", ""); + Параметры.Вставить("Оповещение", Неопределено); + Параметры.Вставить("ДождатьсяЗавершения", Истина); + Параметры.Вставить("ПолучитьПотокВывода", Ложь); + Параметры.Вставить("ПолучитьПотокОшибок", Ложь); + Параметры.Вставить("КодировкаИсполнения", Неопределено); + Параметры.Вставить("ВыполнитьСНаивысшимиПравами", Ложь); + + Возврат Параметры; + +КонецФункции + +// Запускает внешнюю программу в соответствии с параметрами запуска. +// +// Параметры: +// КомандаЗапуска - Строка - командная строка для запуска программы. +// - Массив - первый элемент массива, путь к исполняемому приложению, +// если Массив, то первый элемент массива - путь к исполняемому приложению, остальные - передаваемые параметры, +// массив соответствует тому, который получит вызываемая программа в argv. +// ПараметрыЗапускаПрограммы - Структура - См. ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы +// +Процедура ЗапуститьПрограмму(Знач КомандаЗапуска, ПараметрыЗапускаПрограммы = Неопределено) Экспорт + + Если ПараметрыЗапускаПрограммы = Неопределено Тогда + ПараметрыЗапускаПрограммы = ПараметрыЗапускаПрограммы(); + КонецЕсли; + + СтрокаКоманды = ОбщегоНазначенияСлужебныйКлиентСервер.БезопаснаяСтрокаКоманды(КомандаЗапуска); + + ИмяФайлаПотокаВывода = ""; + ИмяФайлаПотокаОшибок = ""; + +#Если Не ВебКлиент Тогда + Если ПараметрыЗапускаПрограммы.ДождатьсяЗавершения Тогда + + // АПК:441-выкл временные файлы удаляются после асинхронных операций + + Если ПараметрыЗапускаПрограммы.ПолучитьПотокВывода Тогда + ИмяФайлаПотокаВывода = ПолучитьИмяВременногоФайла("stdout.tmp"); + СтрокаКоманды = СтрокаКоманды + " > """ + ИмяФайлаПотокаВывода + """"; + КонецЕсли; + + Если ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок Тогда + ИмяФайлаПотокаОшибок = ПолучитьИмяВременногоФайла("stderr.tmp"); + СтрокаКоманды = СтрокаКоманды + " 2> """ + ИмяФайлаПотокаОшибок + """"; + КонецЕсли; + + // АПК:441-вкл + + КонецЕсли; +#КонецЕсли + + Контекст = Новый Структура; + Контекст.Вставить("СтрокаКоманды", СтрокаКоманды); + Контекст.Вставить("ТекущийКаталог", ПараметрыЗапускаПрограммы.ТекущийКаталог); + Контекст.Вставить("Оповещение", ПараметрыЗапускаПрограммы.Оповещение); + Контекст.Вставить("ДождатьсяЗавершения", ПараметрыЗапускаПрограммы.ДождатьсяЗавершения); + Контекст.Вставить("КодировкаИсполнения", ПараметрыЗапускаПрограммы.КодировкаИсполнения); + Контекст.Вставить("ПолучитьПотокВывода", ПараметрыЗапускаПрограммы.ПолучитьПотокВывода); + Контекст.Вставить("ПолучитьПотокОшибок", ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок); + Контекст.Вставить("ИмяФайлаПотокаВывода", ИмяФайлаПотокаВывода); + Контекст.Вставить("ИмяФайлаПотокаОшибок", ИмяФайлаПотокаОшибок); + Контекст.Вставить("ВыполнитьСНаивысшимиПравами", ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами); + + Оповещение = Новый ОписаниеОповещения( + "ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); + ТекстПредложения = + НСтр("ru = 'Для создания временного каталога необходимо установить расширение работы с файлами.'"); + ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + +КонецПроцедуры + +#КонецОбласти + +#Область Прочее + +// Показывает диалог выбора каталога. +// +// Параметры: +// ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после +// закрытия диалога выбора со следующими параметрами: +// - ПутьККаталогу - Строка - полный путь к каталогу. Если не установлено расширение работы с файлами +// или пользователь отказался от выбора, возвращает пустую строку. +// - ДополнительныеПараметры - значение, которое было указано при создании объекта ОписаниеОповещения. +// Заголовок - Строка - заголовок диалога выбора каталога. +// +Процедура ВыбратьКаталог(ОбработчикЗавершения, Заголовок = "") Экспорт + + Контекст = Новый Структура; + Контекст.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + Контекст.Вставить("Заголовок", Заголовок); + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ВыбратьКаталогПриПодключенииРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); + ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); + +КонецПроцедуры + +// Показывает диалог выбора файла. +// +// Параметры: +// ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после +// закрытия диалога выбора со следующими параметрами: +// Диалог - ДиалогВыбораФайла - свойства см. в синтакс-помощнике. +// +Процедура ПоказатьДиалогВыбора(ОбработчикЗавершения, Диалог) Экспорт + + Контекст = Новый Структура; + Контекст.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + Контекст.Вставить("Диалог", Диалог); + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ПоказатьДиалогВыбораПриПодключенииРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); + ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); + +КонецПроцедуры + +// Получение имени временного каталога. +// +// Параметры: +// Оповещение - ОписаниеОповещения - оповещение о результате получения со следующими параметрами. +// - ИмяКаталога - Строка - путь к созданному каталогу. +// - ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// Расширение - Строка - суффикс в имени каталога, который поможет идентифицировать каталог при анализе. +// +Процедура СоздатьВременныйКаталог(Знач Оповещение, Расширение = "") Экспорт + + Контекст = Новый Структура; + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("Расширение", Расширение); + + Оповещение = Новый ОписаниеОповещения("СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами", + ФайловаяСистемаСлужебныйКлиент, Контекст); + + ТекстПредложения = НСтр("ru = 'Для создания временного каталога необходимо установить расширение работы с файлами.'"); + ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + +КонецПроцедуры + +// Предлагает пользователю установить расширение работы с файлами в веб-клиенте. +// Предназначена для использования в начале участков кода, в которых ведется работа с файлами. +// +// Параметры: +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана после закрытия +// формы со следующими параметрами: +// - РасширениеПодключено - Булево - Истина, если расширение было подключено. +// - ДополнительныеПараметры - Произвольный - параметры, заданные в ОписаниеОповещенияОЗакрытии. +// ТекстПредложения - Строка - текст сообщения. Если не указан, то выводится текст по умолчанию. +// ВозможноПродолжениеБезУстановки - Булево - если Истина, будет показана кнопка ПродолжитьБезУстановки, +// если Ложь, будет показана кнопка Отмена. +// +// Пример: +// +// Оповещение = Новый ОписаниеОповещения("ПечатьДокументаЗавершение", ЭтотОбъект); +// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение работы с файлами.'"); +// ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстСообщения); +// +// Процедура ПечатьДокументаЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт +// Если РасширениеПодключено Тогда +// // код печати документа, рассчитывающий на то, что расширение подключено. +// // ... +// Иначе +// // код печати документа, который работает без подключенного расширения. +// // ... +// КонецЕсли; +// +Процедура ПодключитьРасширениеДляРаботыСФайлами( + ОписаниеОповещенияОЗакрытии, + ТекстПредложения = "", + ВозможноПродолжениеБезУстановки = Истина) Экспорт + + ОписаниеОповещенияЗавершение = Новый ОписаниеОповещения( + "НачатьПодключениеРасширенияРаботыСФайламиПриОтветеНаВопросОбУстановке", ФайловаяСистемаСлужебныйКлиент, + ОписаниеОповещенияОЗакрытии); + +#Если Не ВебКлиент Тогда + // В мобильном, тонком и толстом клиентах расширение подключено всегда. + ВыполнитьОбработкуОповещения(ОписаниеОповещенияЗавершение, "ПодключениеНеТребуется"); + Возврат; +#КонецЕсли + + Контекст = Новый Структура; + Контекст.Вставить("ОписаниеОповещенияЗавершение", ОписаниеОповещенияЗавершение); + Контекст.Вставить("ТекстПредложения", ТекстПредложения); + Контекст.Вставить("ВозможноПродолжениеБезУстановки", ВозможноПродолжениеБезУстановки); + + Оповещение = Новый ОписаниеОповещения( + "НачатьПодключениеРасширенияРаботыСФайламиПриУстановкеРасширения", ФайловаяСистемаСлужебныйКлиент, Контекст); + НачатьПодключениеРасширенияРаботыСФайлами(Оповещение); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Инициализирует структуру параметров для взаимодействия с файловой системой. +// +// Параметры: +// РежимДиалога - РежимДиалогаВыбораФайла - режим работы конструируемого диалога выбора файлов. +// +// Возвращаемое значение: +// Структура - См ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла и ФайловаяСистемаКлиент.ПараметрыСохраненияФайла +// +Функция КонтекстОперации(РежимДиалога) + + Контекст = Новый Структура(); + Контекст.Вставить("Диалог", Новый ДиалогВыбораФайла(РежимДиалога)); + Контекст.Вставить("Интерактивно", Истина); + Контекст.Вставить("ТекстПредложения", ""); + + Возврат Контекст; + +КонецФункции + +// Помещает выбранные файлы во временное хранилище. +// См. ФайловаяСистемаКлиент.ЗагрузитьФайл и ФайловаяСистемаКлиент.ЗагрузитьФайлы +// +Процедура ПоказатьПомещениеФайла(ОбработчикЗавершения, ПараметрыПомещения) + + ПараметрыПомещения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + ОписаниеОповещения = Новый ОписаниеОповещения( + "ПоказатьПомещениеФайлаПриПодключенииРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, ПараметрыПомещения); + ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения, ПараметрыПомещения.ТекстПредложения); + +КонецПроцедуры + +// Сохраняет файлы из временного хранилища в файловую систему. +// См. ФайловаяСистемаКлиент.СохранитьФайл и ФайловаяСистемаКлиент.СохранитьФайлы +// +Процедура ПоказатьПолучениеФайлов(ОбработчикЗавершения, СохраняемыеФайлы, ПараметрыПолучения) + + ПараметрыПолучения.Вставить("ПолучаемыеФайлы", СохраняемыеФайлы); + ПараметрыПолучения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ПоказатьПолучениеФайловПриПодключенииРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, ПараметрыПолучения); + ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения, ПараметрыПолучения.ТекстПредложения); + +КонецПроцедуры + +// Получает путь для сохранения файла в каталоге временных файлов. +// +// Параметры: +// ИмяФайла - Строка - Имя файла с расширением или расширение без точки. +// +// Возвращаемое значение: +// Строка - Путь для сохранения файла. +// +Функция ПолноеИмяВременногоФайла(Знач ИмяФайла) + +#Если ВебКлиент Тогда + + Возврат ?(СтрНайти(ИмяФайла, ".") = 0, + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=yyyyMMddHHmmss") + "." + ИмяФайла, ИмяФайла); + +#Иначе + + ПозицияРасширения = СтрНайти(ИмяФайла, "."); + Пока ПозицияРасширения > 0 Цикл + + ИмяФайла = Сред(ИмяФайла, ПозицияРасширения + 1); + ПозицияРасширения = СтрНайти(ИмяФайла, "."); + + КонецЦикла; + + Возврат ПолучитьИмяВременногоФайла(ИмяФайла); + +#КонецЕсли + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ФайловаяСистемаКлиент/ФайловаяСистемаКлиент.mdo b/SSL/src/CommonModules/ФайловаяСистемаКлиент/ФайловаяСистемаКлиент.mdo new file mode 100644 index 000000000..94da50350 --- /dev/null +++ b/SSL/src/CommonModules/ФайловаяСистемаКлиент/ФайловаяСистемаКлиент.mdo @@ -0,0 +1,10 @@ + + + ФайловаяСистемаКлиент + + ru + Файловая система клиент + + true + true + diff --git a/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..4652b29b2 --- /dev/null +++ b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl @@ -0,0 +1,1143 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +#Область ЗагрузкаФайловИзФайловойСистемы + +// Продолжение процедуры ФайловаяСистемаКлиент.ПоказатьПомещениеФайла. +Процедура ПоказатьПомещениеФайлаПриПодключенииРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + Диалог = Контекст.Диалог; + Интерактивно = Контекст.Интерактивно; + ЗагружаемыеФайлы = Контекст.ЗагружаемыеФайлы; + ИдентификаторФормы = Контекст.ИдентификаторФормы; + ОбработчикЗавершения = Контекст.ОбработчикЗавершения; + + ПараметрыОбработкиРезультата = Новый Структура; + ПараметрыОбработкиРезультата.Вставить("МножественныйВыбор", Диалог.МножественныйВыбор); + ПараметрыОбработкиРезультата.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + + Если РасширениеПодключено Тогда + + Если Интерактивно Тогда + ПомещаемыеФайлы = Новый Массив; + Иначе + Диалог = ""; + ПомещаемыеФайлы = ЗагружаемыеФайлы; + КонецЕсли; + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ОбработатьРезультатПомещенияФайлов", ЭтотОбъект, ПараметрыОбработкиРезультата); + + Если ЗначениеЗаполнено(ИдентификаторФормы) Тогда + НачатьПомещениеФайлов(ОписаниеОповещения, ПомещаемыеФайлы, Диалог, Интерактивно, ИдентификаторФормы); + Иначе + НачатьПомещениеФайлов(ОписаниеОповещения, ПомещаемыеФайлы, Диалог, Интерактивно); + КонецЕсли; + + Иначе + + Обработчик = Новый ОписаниеОповещения( + "ОбработатьРезультатПомещенияФайла", ЭтотОбъект, ПараметрыОбработкиРезультата); + + Если ЗначениеЗаполнено(ИдентификаторФормы) Тогда + НачатьПомещениеФайла(Обработчик, , Диалог.ПолноеИмяФайла, Истина, ИдентификаторФормы); + Иначе + НачатьПомещениеФайла(Обработчик, , Диалог.ПолноеИмяФайла, Истина); + КонецЕсли; + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +// Завершение помещения файлов. +Процедура ОбработатьРезультатПомещенияФайлов(ПомещенныеФайлы, ПараметрыОбработкиРезультата) Экспорт + + ОбработатьРезультатПомещенияФайла(ПомещенныеФайлы <> Неопределено, ПомещенныеФайлы, Неопределено, + ПараметрыОбработкиРезультата); + +КонецПроцедуры + +// Завершение помещения файла. +Процедура ОбработатьРезультатПомещенияФайла(ВыборВыполнен, АдресИлиРезультатВыбора, ВыбранноеИмяФайла, + ПараметрыОбработкиРезультата) Экспорт + + Если ВыборВыполнен = Истина Тогда + + Если ТипЗнч(АдресИлиРезультатВыбора) = Тип("Массив") Тогда + + Если ПараметрыОбработкиРезультата.МножественныйВыбор Тогда + ПомещенныеФайлы = АдресИлиРезультатВыбора; + Иначе + + ПомещенныеФайлы = Новый Структура; + ПомещенныеФайлы.Вставить("Хранение", АдресИлиРезультатВыбора[0].Хранение); + ПомещенныеФайлы.Вставить("Имя", АдресИлиРезультатВыбора[0].Имя); + + КонецЕсли; + + Иначе + + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Хранение", АдресИлиРезультатВыбора); + ОписаниеФайла.Вставить("Имя", ВыбранноеИмяФайла); + + Если ПараметрыОбработкиРезультата.МножественныйВыбор Тогда + ПомещенныеФайлы = Новый Массив; + ПомещенныеФайлы.Добавить(ОписаниеФайла); + Иначе + ПомещенныеФайлы = ОписаниеФайла; + КонецЕсли; + + КонецЕсли; + + Иначе + ПомещенныеФайлы = Неопределено; + КонецЕсли; + + ВыполнитьОбработкуОповещения(ПараметрыОбработкиРезультата.ОбработчикЗавершения, ПомещенныеФайлы); + +КонецПроцедуры + +#КонецОбласти + +#Область СохранениеФайловВФайловуюСистему + +// Продолжение процедуры ФайловаяСистемаКлиент.ПоказатьПолучениеФайлов. +Процедура ПоказатьПолучениеФайловПриПодключенииРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + Интерактивно = Контекст.Интерактивно; + Диалог = ?(Интерактивно, Контекст.Диалог, Контекст.Диалог.Каталог); + + Если РасширениеПодключено Тогда + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ОповеститьОЗавершенииПолученияФайлов", ЭтотОбъект, Контекст); + НачатьПолучениеФайлов(ОповещениеОЗавершении, Контекст.ПолучаемыеФайлы, + Диалог, Интерактивно); + + Иначе + + Для Каждого ПолучаемыйФайл Из Контекст.ПолучаемыеФайлы Цикл + ПолучитьФайл(ПолучаемыйФайл.Хранение, ПолучаемыйФайл.Имя, Истина); + КонецЦикла; + + Если Контекст.ОбработчикЗавершения <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ПоказатьПолучениеФайлов. +Процедура ОповеститьОЗавершенииПолученияФайлов(ПолученныеФайлы, ДополнительныеПараметры) Экспорт + + Если ДополнительныеПараметры.ОбработчикЗавершения <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикЗавершения, ПолученныеФайлы); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОткрытиеФайлов + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +Процедура ОткрытьФайлПослеСохранения(СохраненныеФайлы, ПараметрыОткрытия) Экспорт + + Если СохраненныеФайлы = Неопределено Тогда + ВыполнитьОбработкуОповещения(ПараметрыОткрытия.ОбработчикЗавершения, Ложь); + Иначе + + ОписаниеФайла = + ?(ТипЗнч(СохраненныеФайлы) = Тип("Массив"), + СохраненныеФайлы[0], + СохраненныеФайлы); + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ОткрытьФайлПослеЗавершенияРедактирования", ЭтотОбъект, ПараметрыОткрытия); + + ОткрытьФайлВПрограммеПросмотра(ОписаниеФайла.Имя, ОбработчикЗавершения, ПараметрыОткрытия.ДляРедактирования); + + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +// Открывает файл в программе просмотра, ассоциированной с расширением файла в операционной системе. +// Блокирует возможность открытия файлов, расширение которых относятся к исполняемым файлам. +// +// Параметры: +// ПутьКФайлу - Строка - полный путь к файлу на диске, который требуется открыть. +// Оповещение - ОписаниеОповещения - оповещение о результате открытия. +// если оповещение не задано, в случае ошибки будет показано предупреждение. +// - ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. +// - ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// ДляРедактирования - Булево - Истина, если файл открывается для редактирования, иначе Ложь. +// +// Пример: +// ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(КаталогДокументов() + "test.pdf"); +// ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(КаталогДокументов() + "test.xlsx"); +// +Процедура ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу, Знач Оповещение = Неопределено, + Знач ДляРедактирования = Ложь) + + ФайлИнфо = Новый Файл(ПутьКФайлу); + + Контекст = Новый Структура; + Контекст.Вставить("ФайлИнфо", ФайлИнфо); + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("ДляРедактирования", ДляРедактирования); + + Оповещение = Новый ОписаниеОповещения( + "ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, Контекст); + + ТекстПредложения = НСтр("ru = 'Для открытия файла необходимо установить расширение работы с файлами.'"); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + ФайлИнфо = Контекст.ФайлИнфо; + Если РасширениеПодключено Тогда + + Оповещение = Новый ОписаниеОповещения( + "ОткрытьФайлВПрограммеПросмотраПослеПроверкиСуществования", ЭтотОбъект, Контекст, + "ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки", ЭтотОбъект); + ФайлИнфо.НачатьПроверкуСуществования(Оповещение); + + Иначе + + ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие файла невозможно.'"); + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); + + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиСуществования(Существует, Контекст) Экспорт + + ФайлИнфо = Контекст.ФайлИнфо; + Если Существует Тогда + + Оповещение = Новый ОписаниеОповещения( + "ОткрытьФайлВПрограммеПросмотраПослеПроверкиЭтоФайл", ЭтотОбъект, Контекст, + "ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки", ЭтотОбъект); + ФайлИнфо.НачатьПроверкуЭтоФайл(Оповещение); + + Иначе + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найден файл, который требуется открыть: + |%1'"), + ФайлИнфо.ПолноеИмя); + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); + + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиЭтоФайл(ЭтоФайл, Контекст) Экспорт + + // АПК:534-выкл методы безопасного запуска обеспечиваются этой функцией + + ФайлИнфо = Контекст.ФайлИнфо; + Если ЭтоФайл Тогда + + Если ПустаяСтрока(ФайлИнфо.Расширение) Тогда + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Имя файла не содержит расширения: + |%1'"), + ФайлИнфо.ПолноеИмя); + + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); + Возврат; + + КонецЕсли; + + Если ЭтоРасширениеИсполняемогоФайла(ФайлИнфо.Расширение) Тогда + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Исполняемые файлы открывать запрещено: + |%1'"), + ФайлИнфо.ПолноеИмя); + + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); + Возврат; + + КонецЕсли; + + Оповещение = Контекст.Оповещение; + ДождатьсяЗавершения = Контекст.ДляРедактирования; + + Оповещение = Новый ОписаниеОповещения( + "ОткрытьФайлВПрограммеПросмотраПослеЗапускаПриложения", ЭтотОбъект, Контекст, + "ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, ФайлИнфо.ПолноеИмя,, ДождатьсяЗавершения); + + Иначе + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найден файл, который требуется открыть: + |%1'"), + ФайлИнфо.ПолноеИмя); + + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст); + + КонецЕсли; + + // АПК:534-вкл + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +Процедура ОткрытьФайлВПрограммеПросмотраПослеЗапускаПриложения(КодВозврата, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + Если Оповещение <> Неопределено Тогда + ПриложениеЗапущено = (КодВозврата = 0); + ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +Процедура ОткрытьФайлВПрограммеПросмотраПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке("", Контекст); + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +Процедура ОткрытьФайлПослеЗавершенияРедактирования(ПриложениеЗапущено, ПараметрыОткрытия) Экспорт + + Если ПриложениеЗапущено + И ПараметрыОткрытия.Свойство("АдресДвоичныхДанныхДляОбновления") Тогда + + Оповещение = Новый ОписаниеОповещения( + "ОткрытьФайлПослеОбновленияДанныхВХранилище", ЭтотОбъект, ПараметрыОткрытия); + + НачатьПомещениеФайла(Оповещение, ПараметрыОткрытия.АдресДвоичныхДанныхДляОбновления, + ПараметрыОткрытия.ПутьКФайлу, Ложь); + + Иначе + ВыполнитьОбработкуОповещения(ПараметрыОткрытия.ОбработчикЗавершения, ПриложениеЗапущено); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +Процедура ОткрытьФайлПослеОбновленияДанныхВХранилище(ДанныеОбновлены, АдресДанных, ИмяФайла, + ПараметрыОткрытия) Экспорт + + Если ПараметрыОткрытия.Свойство("УдалятьПослеОбновленияДанных") Тогда + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ДанныеОбновлены", ДанныеОбновлены); + ДополнительныеПараметры.Вставить("ПараметрыОткрытия", ПараметрыОткрытия); + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ОткрытьФайлПослеУдаленияВременногоФайла", ЭтотОбъект, ДополнительныеПараметры); + + НачатьУдалениеФайлов(ОписаниеОповещения, ИмяФайла); + + Иначе + ВыполнитьОбработкуОповещения(ПараметрыОткрытия.ОбработчикЗавершения, ДанныеОбновлены); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +Процедура ОткрытьФайлПослеУдаленияВременногоФайла(ДополнительныеПараметры) Экспорт + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ПараметрыОткрытия.ОбработчикЗавершения, + ДополнительныеПараметры.ДанныеОбновлены); + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. +Процедура ОткрытьФайлВПрограммеПросмотраОповеститьОбОшибке(ОписаниеОшибки, Контекст) + + Если Не ПустаяСтрока(ОписаниеОшибки) Тогда + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + + ПриложениеЗапущено = Ложь; + ВыполнитьОбработкуОповещения(Контекст.Оповещение, ПриложениеЗапущено); + +КонецПроцедуры + +// Параметры: +// Расширение - Строка - свойство Расширение объекта Файл. +// +Функция ЭтоРасширениеИсполняемогоФайла(Знач Расширение) + + Расширение = ВРег(Расширение); + + // Windows + Возврат Расширение = ".BAT" // Batch File + Или Расширение = ".BIN" // Binary Executable + Или Расширение = ".CMD" // Command Script + Или Расширение = ".COM" // Приложение MS-DOS + Или Расширение = ".CPL" // Control Panel Extension + Или Расширение = ".EXE" // Исполняемый файл + Или Расширение = ".GADGET" // Binary Executable + Или Расширение = ".HTA" // HTML Application + Или Расширение = ".INF1" // Setup Information File + Или Расширение = ".INS" // Internet Communication Settings + Или Расширение = ".INX" // InstallShield Compiled Script + Или Расширение = ".ISU" // InstallShield Uninstaller Script + Или Расширение = ".JOB" // Windows Task Scheduler Job File + Или Расширение = ".LNK" // File Shortcut + Или Расширение = ".MSC" // Microsoft Common Console Document + Или Расширение = ".MSI" // Windows Installer Package + Или Расширение = ".MSP" // Windows Installer Patch + Или Расширение = ".MST" // Windows Installer Setup Transform File + Или Расширение = ".OTM" // Макрос Microsoft Outlook + Или Расширение = ".PAF" // Portable Application Installer File + Или Расширение = ".PIF" // Program Information File + Или Расширение = ".PS1" // Windows PowerShell Cmdlet + Или Расширение = ".REG" // Registry Data File + Или Расширение = ".RGS" // Registry Script + Или Расширение = ".SCT" // Windows Scriptlet + Или Расширение = ".SHB" // Windows Document Shortcut + Или Расширение = ".SHS" // Shell Scrap Object + Или Расширение = ".U3P" // U3 Smart Application + Или Расширение = ".VB" // VBScript File + Или Расширение = ".VBE" // VBScript Encoded Script + Или Расширение = ".VBS" // VBScript File + Или Расширение = ".VBSCRIPT" // Visual Basic Script + Или Расширение = ".WS" // Windows Script + Или Расширение = ".WSF" // Windows Script + // Linux + Или Расширение = ".CSH" // C Shell Script + Или Расширение = ".KSH" // Unix Korn Shell Script + Или Расширение = ".OUT" // Исполняемый файл + Или Расширение = ".RUN" // Исполняемый файл + Или Расширение = ".SH" // Shell Script + // MacOS + Или Расширение = ".ACTION" // Automator Action + Или Расширение = ".APP" // Исполняемый файл + Или Расширение = ".COMMAND" // Terminal Command + Или Расширение = ".OSX" // Исполняемый файл + Или Расширение = ".WORKFLOW" // Automator Workflow + // Прочие + Или Расширение = ".AIR" // Установочный пакет Adobe AIR + Или Расширение = ".COFFIE" // Сценарий CoffeeScript (JavaScript) + Или Расширение = ".JAR" // Архив Java + Или Расширение = ".JS" // JScript File + Или Расширение = ".JSE" // JScript Encoded File + Или Расширение = ".PLX" // Исполняемый файл Perl + Или Расширение = ".PYC" // Компилированный файл Python + Или Расширение = ".PYO"; // Оптимизированный код Python + +КонецФункции + +#КонецОбласти + +#Область ОткрытьПроводник + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. +Процедура ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + ФайлИнфо = Контекст.ФайлИнфо; + + Если РасширениеПодключено Тогда + Оповещение = Новый ОписаниеОповещения( + "ОткрытьПроводникПослеПроверкиСуществования", ЭтотОбъект, Контекст, + "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); + ФайлИнфо.НачатьПроверкуСуществования(Оповещение); + Иначе + ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие папки не возможно.'"); + ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. +Процедура ОткрытьПроводникПослеПроверкиСуществования(Существует, Контекст) Экспорт + + ФайлИнфо = Контекст.ФайлИнфо; + + Если Существует Тогда + Оповещение = Новый ОписаниеОповещения( + "ОткрытьПроводникПослеПроверкиЭтоФайл", ЭтотОбъект, Контекст, + "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); + ФайлИнфо.НачатьПроверкуЭтоФайл(Оповещение); + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдена папка, которую требуется открыть в проводнике: + |""%1""'"), + ФайлИнфо.ПолноеИмя); + ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. +Процедура ОткрытьПроводникПослеПроверкиЭтоФайл(ЭтоФайл, Контекст) Экспорт + + // АПК:534-выкл методы безопасного запуска обеспечиваются этой функцией + + ФайлИнфо = Контекст.ФайлИнфо; + + Оповещение = Новый ОписаниеОповещения(,,, "ОткрытьПроводникПриОбработкеОшибки", ЭтотОбъект); + Если ЭтоФайл Тогда + Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + НачатьЗапускПриложения(Оповещение, "explorer.exe /select, """ + ФайлИнфо.ПолноеИмя + """"); + Иначе // Это Linux или MacOS. + НачатьЗапускПриложения(Оповещение, "file:///" + ФайлИнфо.Путь); + КонецЕсли; + Иначе // Это каталог. + НачатьЗапускПриложения(Оповещение, "file:///" + ФайлИнфо.ПолноеИмя); + КонецЕсли; + + // АПК:534-вкл + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. +Процедура ОткрытьПроводникПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ОткрытьПроводникОповеститьОбОшибке("", Контекст); + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьПроводник. +Процедура ОткрытьПроводникОповеститьОбОшибке(ОписаниеОшибки, Контекст) + + Если Не ПустаяСтрока(ОписаниеОшибки) Тогда + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОткрытьНавигационнуюСсылку + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. +Процедура ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + // АПК:534-выкл методы безопасного запуска обеспечиваются этой функцией + + НавигационнаяСсылка = Контекст.НавигационнаяСсылка; + + Если РасширениеПодключено Тогда + + Оповещение = Контекст.Оповещение; + ДождатьсяЗавершения = (Оповещение <> Неопределено); + + Оповещение = Новый ОписаниеОповещения( + "ОткрытьНавигационнуюСсылкуПослеЗапускаПриложения", ЭтотОбъект, Контекст, + "ОткрытьНавигационнуюСсылкуПриОбработкеОшибки", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, НавигационнаяСсылка,, ДождатьсяЗавершения); + + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Расширение для работы с файлами не установлено, переход по ссылке ""%1"" невозможен.'"), + НавигационнаяСсылка); + ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + + // АПК:534-вкл + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. +Процедура ОткрытьНавигационнуюСсылкуПослеЗапускаПриложения(КодВозврата, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + Если Оповещение <> Неопределено Тогда + ПриложениеЗапущено = (КодВозврата = 0 Или КодВозврата = Неопределено); + ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. +Процедура ОткрытьНавигационнуюСсылкуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ОткрытьНавигационнуюСсылкуОповеститьОбОшибке("", Контекст); + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку. +Процедура ОткрытьНавигационнуюСсылкуОповеститьОбОшибке(ОписаниеОшибки, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + + Если Оповещение = Неопределено Тогда + Если Не ПустаяСтрока(ОписаниеОшибки) Тогда + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + Иначе + ПриложениеЗапущено = Ложь; + ВыполнитьОбработкуОповещения(Оповещение, ПриложениеЗапущено); + КонецЕсли; + +КонецПроцедуры + +// Проверяет, является ли переданная строка веб ссылкой. +// +// Параметры: +// Строка - Строка - переданная ссылка. +// +Функция ЭтоВебСсылка(Строка) Экспорт + + Возврат СтрНачинаетсяС(Строка, "http://") // обычное соединение. + Или СтрНачинаетсяС(Строка, "https://");// защищенное соединение. + +КонецФункции + +// Проверяет, является ли переданная строка ссылкой на встроенную справку. +// +// Параметры: +// Строка - Строка - переданная ссылка. +// +Функция ЭтоСсылкаНаСправку(Строка) Экспорт + + Возврат СтрНачинаетсяС(Строка, "v8help://"); + +КонецФункции + +// Проверяет, является ли переданная строка допустимой ссылкой по белому списку протоколов. +// +// Параметры: +// Строка - Строка - переданная ссылка. +// +Функция ЭтоДопустимаяСсылка(Строка) Экспорт + + Возврат СтрНачинаетсяС(Строка, "e1cib/") + Или СтрНачинаетсяС(Строка, "http:") + Или СтрНачинаетсяС(Строка, "https:") + Или СтрНачинаетсяС(Строка, "e1c:") + Или СтрНачинаетсяС(Строка, "v8help:") + Или СтрНачинаетсяС(Строка, "mailto:") + Или СтрНачинаетсяС(Строка, "tel:") + Или СтрНачинаетсяС(Строка, "skype:"); + +КонецФункции + +#КонецОбласти + +#Область ЗапуститьПрограмму + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + Если РасширениеПодключено Тогда + + ТекущийКаталог = Контекст.ТекущийКаталог; + + Если ПустаяСтрока(ТекущийКаталог) Тогда + ЗапуститьПрограммуНачатьЗапуск(Контекст); + Иначе + ФайлИнфо = Новый Файл(ТекущийКаталог); + Оповещение = Новый ОписаниеОповещения( + "ЗапуститьПрограммуПослеПроверкиСуществования", ЭтотОбъект, Контекст, + "ЗапуститьПрограммуПриОбработкеОшибки", ЭтотОбъект); + ФайлИнфо.НачатьПроверкуСуществования(Оповещение); + КонецЕсли; + + Иначе + ОписаниеОшибки = НСтр("ru = 'Расширение для работы с файлами не установлено, запуск программы невозможен.'"); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуПослеПроверкиСуществования(Существует, Контекст) Экспорт + + ТекущийКаталог = Контекст.ТекущийКаталог; + ФайлИнфо = Новый Файл(ТекущийКаталог); + + Если Существует Тогда + Оповещение = Новый ОписаниеОповещения( + "ЗапуститьПрограммуПослеПроверкиЭтоКаталог", ЭтотОбъект, Контекст, + "ЗапуститьПрограммуПриОбработкеОшибки", ЭтотОбъект); + ФайлИнфо.НачатьПроверкуЭтоКаталог(Оповещение); + Иначе + СтрокаКоманды = Контекст.СтрокаКоманды; + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось запустить программу + |%1 + |по причине: + |Не существует каталог, указанный как ТекущийКаталог + |%2'"), + СтрокаКоманды, + ТекущийКаталог); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра. +Процедура ЗапуститьПрограммуПослеПроверкиЭтоКаталог(ЭтоКаталог, Контекст) Экспорт + + Если ЭтоКаталог Тогда + ЗапуститьПрограммуНачатьЗапуск(Контекст); + Иначе + СтрокаКоманды = Контекст.СтрокаКоманды; + ТекущийКаталог = Контекст.ТекущийКаталог; + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось запустить программу + |%1 + |по причине: + |ТекущийКаталог не является каталогом %2'"), + СтрокаКоманды, + ТекущийКаталог); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуНачатьЗапуск(Контекст) + + // АПК:534-выкл методы безопасного запуска обеспечиваются этой функцией + + Если Контекст.ВыполнитьСНаивысшимиПравами Тогда + ЗапуститьПрограммуСНаивысшимиПравами(Контекст); + Иначе + + СтрокаКоманды = Контекст.СтрокаКоманды; + ТекущийКаталог = Контекст.ТекущийКаталог; + ДождатьсяЗавершения = Контекст.ДождатьсяЗавершения; + + Оповещение = Новый ОписаниеОповещения( + "ЗапуститьПрограммуПослеЗапускаПриложения", ЭтотОбъект, Контекст, + "ЗапуститьПрограммуПриОбработкеОшибки", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); + КонецЕсли; + + // АПК:534-вкл + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуПослеЗапускаПриложения(КодВозврата, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + Если Оповещение = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Контекст.ДождатьсяЗавершения И КодВозврата = Неопределено Тогда + ОписаниеОшибки = НСтр("ru = 'Произошла неизвестная ошибка при запуске программы.'"); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + Возврат; + КонецЕсли; + + Результат = РезультатЗапускаПрограммы(); + Результат.ПриложениеЗапущено = Истина; + Результат.КодВозврата = КодВозврата; + Если Контекст.ДождатьсяЗавершения Тогда + ЗаполнитьРезультатПотока(Результат, Контекст); + КонецЕсли; + ВыполнитьОбработкуОповещения(Оповещение, Результат); + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст) + + Оповещение = Контекст.Оповещение; + Если Оповещение = Неопределено Тогда + Если Не ПустаяСтрока(ОписаниеОшибки) Тогда + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + Возврат; + КонецЕсли; + + Результат = РезультатЗапускаПрограммы(); + Результат.ОписаниеОшибки = ОписаниеОшибки; + Если Контекст.ДождатьсяЗавершения Тогда + ЗаполнитьРезультатПотока(Результат, Контекст); + КонецЕсли; + ВыполнитьОбработкуОповещения(Оповещение, Результат); + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Функция РезультатЗапускаПрограммы() + + Результат = Новый Структура; + Результат.Вставить("ПриложениеЗапущено", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + Результат.Вставить("КодВозврата", -13); + Результат.Вставить("ПотокВывода", ""); + Результат.Вставить("ПотокОшибок", ""); + + Возврат Результат; + +КонецФункции + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуСНаивысшимиПравами(Контекст) + +#Если ВебКлиент Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось запустить программу + |%1 + |по причине: + |Запуск программ с повышением привилегий недоступен в веб-клиенте.'"), + Контекст.СтрокаКоманды); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); +#ИначеЕсли МобильныйКлиент Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось запустить программу + |%1 + |по причине: + |Запуск программ с повышением привилегий недоступен в мобильном клиенте.'"), + Контекст.СтрокаКоманды); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); +#Иначе + + Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + ЗапуститьПрограммуСНаивысшимиПравамиWindows(Контекст); + ИначеЕсли ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() Тогда + ЗапуститьПрограммуСНаивысшимиПравамиLinux(Контекст); + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось запустить программу + |%1 + |по причине: + |Запуск программ с повышением привилегий доступен только в Windows и Linux.'"), + Контекст.СтрокаКоманды); + ЗапуститьПрограммуОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +#КонецЕсли + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗаполнитьРезультатПотока(Результат, Контекст) + +#Если Не ВебКлиент Тогда + + Если Контекст.ПолучитьПотокВывода + И Не ПустаяСтрока(Контекст.ИмяФайлаПотокаВывода) Тогда + Результат.ПотокВывода = ПрочитатьФайлПотока(Контекст.ИмяФайлаПотокаВывода); + КонецЕсли; + + Если Контекст.ПолучитьПотокОшибок + И Не ПустаяСтрока(Контекст.ИмяФайлаПотокаОшибок) Тогда + Результат.ПотокОшибок = ПрочитатьФайлПотока(Контекст.ИмяФайлаПотокаОшибок); + КонецЕсли; + +#КонецЕсли + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Функция ПрочитатьФайлПотока(ПутьКФайлу) + + // АПК:566-выкл - синхронные вызовы вне тонкого клиента + +#Если ВебКлиент Тогда + Возврат ""; +#Иначе + ФайлПотока = Новый Файл(ПутьКФайлу); + Если Не ФайлПотока.Существует() Тогда + Возврат ""; + КонецЕсли; + + ЧтениеФайлаПотока = Новый ЧтениеТекста(ПутьКФайлу); + Результат = ЧтениеФайлаПотока.Прочитать(); + ЧтениеФайлаПотока.Закрыть(); + + УдалитьФайлы(ПутьКФайлу); + + Возврат ?(Результат = Неопределено, "", Результат); +#КонецЕсли + + // АПК:566-вкл + +КонецФункции + +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуСНаивысшимиПравамиWindows(Контекст) + + // АПК:534-выкл методы безопасного запуска обеспечиваются этой функцией + + СтрокаКоманды = Контекст.СтрокаКоманды; + ТекущийКаталог = Контекст.ТекущийКаталог; + КодировкаИсполнения = Контекст.КодировкаИсполнения; + + ДождатьсяЗавершения = Ложь; + + ИмяФайлаКоманды = ПолучитьИмяВременногоФайла("run.bat"); // АПК:441 удаляется автоматически после запуска. + ТекстовыйДокумент = ОбщегоНазначенияСлужебныйКлиентСервер.НовыйФайлЗапускаКомандыWindows( + СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодировкаИсполнения); + ТекстовыйДокумент.Записать(ИмяФайлаКоманды, КодировкаТекста.OEM); + + Попытка + Оболочка = Новый COMОбъект("Shell.Application"); + // Запуск с передачей глагола действия - повышения привилегий. + КодВозврата = Оболочка.ShellExecute("cmd", "/c """ + ИмяФайлаКоманды + """",, "runas", 0); + Оболочка = Неопределено; + Исключение + Оболочка = Неопределено; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + СтандартнаяОбработка = Истина; + ЗапуститьПрограммуПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст); + Возврат; + КонецПопытки; + + Если КодВозврата = Неопределено Тогда + КодВозврата = 0; + КонецЕсли; + + ЗапуститьПрограммуПослеЗапускаПриложения(КодВозврата, Контекст); + + // АПК:534-вкл + +КонецПроцедуры + +// Продолжение процедуры ОбщегоНазначенияКлиент.ЗапуститьПрограмму. +Процедура ЗапуститьПрограммуСНаивысшимиПравамиLinux(Контекст) + + // АПК:534-выкл методы безопасного запуска обеспечиваются этой функцией + + ТекущийКаталог = Контекст.ТекущийКаталог; + СтрокаКоманды = Контекст.СтрокаКоманды; + + КомандаCПовышениемПривилегий = "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY " + СтрокаКоманды; + ДождатьсяЗавершения = Истина; + + Оповещение = Новый ОписаниеОповещения( + "ЗапуститьПрограммуПослеЗапускаПриложения", ЭтотОбъект, Контекст, + "ЗапуститьПрограммуПриОбработкеОшибки", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, КомандаCПовышениемПривилегий, ТекущийКаталог, ДождатьсяЗавершения); + + // АПК:534-вкл + +КонецПроцедуры + +#КонецЕсли + +#КонецОбласти + +#Область ВыборКаталога + +// Продолжение процедуры ФайловаяСистемаКлиент.ВыбратьКаталог. +Процедура ВыбратьКаталогПриПодключенииРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + Если Не РасширениеПодключено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, ""); + КонецЕсли; + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ВыбратьКаталогПриОкончанииВыбора", ЭтотОбъект, Контекст.ОбработчикЗавершения); + + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + Диалог.МножественныйВыбор = Ложь; + Если Не ПустаяСтрока(Контекст.Заголовок) Тогда + Диалог.Заголовок = Контекст.Заголовок; + КонецЕсли; + + Диалог.Показать(ОписаниеОповещения); + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.ВыбратьКаталог. +Процедура ВыбратьКаталогПриОкончанииВыбора(МассивКаталогов, ОбработчикЗавершения) Экспорт + + ПутьККаталогу = + ?(МассивКаталогов = Неопределено Или МассивКаталогов.Количество() = 0, + "", + МассивКаталогов[0]); + + ВыполнитьОбработкуОповещения(ОбработчикЗавершения, ПутьККаталогу); + +КонецПроцедуры + +#КонецОбласти + +#Область ПоказатьДиалогВыбора + +// Продолжение процедуры ФайловаяСистемаКлиент.ПоказатьДиалогВыбораП. +Процедура ПоказатьДиалогВыбораПриПодключенииРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + Если Не РасширениеПодключено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, ""); + КонецЕсли; + + Контекст.Диалог.Показать(Контекст.ОбработчикЗавершения); + +КонецПроцедуры + +#КонецОбласти + +#Область РасширениеРаботыСФайлами + +// Продолжение процедуры ФайловаяСистемаКлиент.НачатьПодключениеРасширенияРаботыСФайлами. +Процедура НачатьПодключениеРасширенияРаботыСФайламиПриУстановкеРасширения(Подключено, Контекст) Экспорт + + // Если расширение и так уже подключено, незачем про него спрашивать. + Если Подключено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОписаниеОповещенияЗавершение, "ПодключениеНеТребуется"); + Возврат; + КонецЕсли; + + // В веб клиенте под MacOS расширение не доступно. + Если ОбщегоНазначенияКлиент.ЭтоOSXКлиент() Тогда + ВыполнитьОбработкуОповещения(Контекст.ОписаниеОповещенияЗавершение); + Возврат; + КонецЕсли; + + ИмяПараметра = "СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"; + ПервоеОбращениеЗаСеанс = ПараметрыПриложения[ИмяПараметра] = Неопределено; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, ПредлагатьУстановкуРасширенияРаботыСФайлами()); + КонецЕсли; + + ПредлагатьУстановкуРасширенияРаботыСФайлами = ПараметрыПриложения[ИмяПараметра] Или ПервоеОбращениеЗаСеанс; + Если Контекст.ВозможноПродолжениеБезУстановки И Не ПредлагатьУстановкуРасширенияРаботыСФайлами Тогда + + ВыполнитьОбработкуОповещения(Контекст.ОписаниеОповещенияЗавершение); + + Иначе + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекстПредложения", Контекст.ТекстПредложения); + ПараметрыФормы.Вставить("ВозможноПродолжениеБезУстановки", Контекст.ВозможноПродолжениеБезУстановки); + ОткрытьФорму( + "ОбщаяФорма.ВопросОбУстановкеРасширенияРаботыСФайлами", + ПараметрыФормы,,,,, + Контекст.ОписаниеОповещенияЗавершение); + + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.НачатьПодключениеРасширенияРаботыСФайлами. +Процедура НачатьПодключениеРасширенияРаботыСФайламиПриОтветеНаВопросОбУстановке(Действие, ОповещениеОЗакрытии) Экспорт + + РасширениеПодключено = (Действие = "РасширениеПодключено" Или Действие = "ПодключениеНеТребуется"); + +#Если ВебКлиент Тогда + Если Действие = "БольшеНеПредлагать" + Или Действие = "РасширениеПодключено" Тогда + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; + ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"] = Ложь; + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, Ложь); + + КонецЕсли; +#КонецЕсли + + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, РасширениеПодключено); + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.НачатьПодключениеРасширенияРаботыСФайлами. +Функция ПредлагатьУстановкуРасширенияРаботыСФайлами() + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; + Возврат ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( + "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, Истина); + +КонецФункции + +#КонецОбласти + +#Область ВременныеФайлы + +#Область СоздатьВременныйКаталог + +// Продолжение процедуры ФайловаяСистемаКлиент.СоздатьВременныйКаталог. +Процедура СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт + + Если РасширениеПодключено Тогда + + Оповещение = Новый ОписаниеОповещения( + "СоздатьВременныйКаталогПослеПолученияВременногоКаталога", ЭтотОбъект, Контекст, + "СоздатьВременныйКаталогПриОбработкеОшибки", ЭтотОбъект); + + НачатьПолучениеКаталогаВременныхФайлов(Оповещение); + + Иначе + ОписаниеОшибки = + НСтр("ru = 'Расширение для работы с файлами не установлено, создание временного каталога невозможно.'"); + СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.СоздатьВременныйКаталог. +Процедура СоздатьВременныйКаталогПослеПолученияВременногоКаталога(ИмяКаталогаВременныхФайлов, Контекст) Экспорт + + Оповещение = Контекст.Оповещение; + Расширение = Контекст.Расширение; + + ИмяКаталога = "v8_" + Строка(Новый УникальныйИдентификатор); + + Если Не ПустаяСтрока(Расширение) Тогда + ИмяКаталога = ИмяКаталога + "." + Расширение; + КонецЕсли; + + НачатьСозданиеКаталога(Оповещение, ИмяКаталогаВременныхФайлов + ИмяКаталога); + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.СоздатьВременныйКаталог. +Процедура СоздатьВременныйКаталогПриОбработкеОшибки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст); + +КонецПроцедуры + +// Продолжение процедуры ФайловаяСистемаКлиент.СоздатьВременныйКаталог. +Процедура СоздатьВременныйКаталогОповеститьОбОшибке(ОписаниеОшибки, Контекст) + + ПоказатьПредупреждение(, ОписаниеОшибки); + ИмяКаталога = ""; + ВыполнитьОбработкуОповещения(Контекст.Оповещение, ИмяКаталога); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/ФайловаяСистемаСлужебныйКлиент.mdo b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/ФайловаяСистемаСлужебныйКлиент.mdo new file mode 100644 index 000000000..7eadb07f3 --- /dev/null +++ b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/ФайловаяСистемаСлужебныйКлиент.mdo @@ -0,0 +1,10 @@ + + + ФайловаяСистемаСлужебныйКлиент + + ru + Файловая система служебный клиент + + true + true + diff --git a/SSL/src/CommonModules/ФайловыеФункции/Module.bsl b/SSL/src/CommonModules/ФайловыеФункции/Module.bsl index 55ea0109f..d4663eca8 100644 --- a/SSL/src/CommonModules/ФайловыеФункции/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункции/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl index 88726e7ea..4b8252c77 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl index 03e96cfc8..ad2830392 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -185,7 +193,7 @@ Попытка Блокировка = Новый БлокировкаДанных(); - БлокировкаРегистра = Блокировка.Добавить("РегистрСведений.ОчередьИзвлеченияТекста"); + Блокировка.Добавить("РегистрСведений.ОчередьИзвлеченияТекста"); Блокировка.Заблокировать(); ТекстЗапроса = diff --git a/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl index a7d4e7747..c972a5e6d 100644 --- a/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Раскладывает полное имя физического лица на составные части - фамилию, имя и отчество. @@ -18,8 +26,8 @@ // вернет структуру со значениями свойств: "Иванов", "Иван", "Иванович". // 2. ФизическиеЛицаКлиентСервер.ЧастиИмени("Смит Джон") // вернет структуру со значениями свойств: "Смит", "Джон", "". -// 3. ФизическиеЛицаКлиентСервер.ЧастиИмени("Алиев Ахмед Октай оглы Мамедов") -// вернет структуру со значениями свойств: "Алиев", "Алиев", "Октай оглы Мамедов". +// 3. ФизическиеЛицаКлиентСервер.ЧастиИмени("Алиев Ахмед Октай оглы") +// вернет структуру со значениями свойств: "Алиев", "Ахмед", "Октай оглы". // Функция ЧастиИмени(ФамилияИмяОтчество) Экспорт @@ -109,7 +117,7 @@ ДопустимыеСимволы = "-"; Возврат (Не ТолькоКириллица И СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке(ФИО, Ложь, ДопустимыеСимволы)) - Или СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(ФИО, Ложь, ДопустимыеСимволы); + Или СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(ФИО, Ложь, ДопустимыеСимволы); КонецФункции diff --git a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl index 507d266fb..6e08231e8 100644 --- a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейсОбщий diff --git a/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl index 7ea2d91ad..ea640e555 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаГлобальный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Выводит запрос на отправку дампов. diff --git a/SSL/src/CommonModules/ЦентрМониторингаКлиент/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаКлиент/Module.bsl index 835875142..89fc528fb 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейсБизнесСтатистики diff --git a/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl index e7c7e7ddb..e7fb7bc7e 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаКлиентСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс Процедура ПриВыполненииСтандартныхПериодическихПроверокНаКлиенте(Параметры) Экспорт diff --git a/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl index 315b63ce2..c53634856 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Выполняется при запуске регламентного задания. diff --git a/SSL/src/CommonModules/ЦентрМониторингаПовтИсп/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаПовтИсп/Module.bsl index 077cdd170..2cfc85201 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Функция ПолучитьСсылкуОперацииСтатистики(ИмяОперацииСтатистики) Экспорт diff --git a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl index 176674410..92a02c567 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl @@ -1,4 +1,11 @@ - +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Получает регламентное задание по имени. @@ -37,7 +44,7 @@ // Значение - Произвольный тип - значение параметра центра мониторинга. // Функция УстановитьПараметрЦентраМониторингаВнешнийВызов(Параметр, Значение) Экспорт - УстановитьПараметрЦентраМониторинга(Параметр, Значение); + Возврат УстановитьПараметрЦентраМониторинга(Параметр, Значение); КонецФункции // Получает параметры центра мониторинга по умолчанию. @@ -300,8 +307,6 @@ Разделы.Добавить(РазделАдминистрирование); КонецЕсли; - ТекущийПользователь = Пользователи.ТекущийПользователь(); - // 1. Обработать запрос на получение дампов. ЗапросНаПолучениеДампов = ПараметрыЦентраМониторинга.ОтправлятьФайлыДампов = 2 И ПараметрыЦентраМониторинга.БазовыеПроверкиПройдены; Для Каждого Раздел Из Разделы Цикл @@ -371,6 +376,7 @@ Если Задания.Количество() = 0 Тогда Если СоздатьНовое Тогда Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные["РегламентныеЗадания"][ИмяРегламентногоЗадания]); + Задание.Использование = Истина; Задание.Записать(); Результат = Задание; КонецЕсли; @@ -439,7 +445,7 @@ Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации( НСтр("ru = 'Центр мониторинга - регистрация дампов'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -462,7 +468,7 @@ Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации( НСтр("ru = 'Центр мониторинга - регистрация операций статистики'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -484,7 +490,7 @@ Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации( НСтр("ru = 'Центр мониторинга - собрать статистику конфигурации'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -506,7 +512,7 @@ Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации( НСтр("ru = 'Центр мониторинга - сформировать пакет для отправки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -516,11 +522,14 @@ Попытка HTTPОтвет = ОтправитьДанныеМониторинга(); + Если HTTPОтвет.КодСостояния = 200 Тогда + // Все хорошо. + КонецЕсли; Исключение Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации( НСтр("ru = 'Центр мониторинга - отправить данные мониторинга'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -671,7 +680,7 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Агрегировать замеры операций статистики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Агрегировать замеры операций статистики'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; КонецЕсли; @@ -723,7 +732,7 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Удалить устаревшие данные операций статистики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Удалить устаревшие данные операций статистики'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; @@ -775,21 +784,39 @@ КонецЦикла; КонецЕсли; - Колонки = Новый Массив; - Для Каждого ТекКолонка Из Данные.Колонки Цикл - Колонки.Добавить(ТекКолонка.Имя); - КонецЦикла; - Секция.Вставить("columns", Колонки); - Строки = Новый Массив; Выборка = Данные.Выбрать(); + // Предназначена для хранения структуры данных. + СтруктурыКоллекций = Новый Структура; + // Предназначено для хранения коллекций данных в виде ключевое поле - реквизиты со значениями. + СоответствияКоллекций = Новый Соответствие; + // Список исключаемых из выгрузки колонок. Их данные идут в СоответствияКоллекций. + ИсключаемыеКолонки = Новый Соответствие; Если КолонкиИндекса <> Неопределено Тогда ИндексыЗначений = Новый Соответствие; Для Каждого ТекКолонка Из КолонкиИндекса Цикл ИндексыЗначений.Вставить(ТекКолонка.Ключ, Новый Соответствие); + Если ТекКолонка.Значение.Количество() Тогда + СоответствияКоллекций.Вставить(ТекКолонка.Ключ, Новый Соответствие); + СтруктураОбъекта = Новый Структура; + Для Каждого Запись Из ТекКолонка.Значение Цикл + СтруктураОбъекта.Вставить(Запись.Ключ); + ИсключаемыеКолонки.Вставить(Запись.Ключ, Истина); + КонецЦикла; + СтруктурыКоллекций.Вставить(ТекКолонка.Ключ, СтруктураОбъекта); + КонецЕсли; КонецЦикла; КонецЕсли; + Колонки = Новый Массив; + Для Каждого ТекКолонка Из Данные.Колонки Цикл + Если ИсключаемыеКолонки[ТекКолонка.Имя] = Истина Тогда + Продолжить; + КонецЕсли; + Колонки.Добавить(ТекКолонка.Имя); + КонецЦикла; + Секция.Вставить("columns", Колонки); + Пока Выборка.Следующий() Цикл Строка = Новый Массив; Для Каждого ТекКолонка Из Колонки Цикл @@ -804,10 +831,23 @@ ЗначениеДляДобавления = КолонкиИндекса[ТекКолонка][ЗначениеДляДобавления]; КонецЕсли; + Если СтруктурыКоллекций.Свойство(ТекКолонка) + И СоответствияКоллекций[ТекКолонка][Выборка[ТекКолонка]] = Неопределено Тогда + СоответствиеОбъекта = Новый Соответствие; + Для Каждого Запись Из СтруктурыКоллекций[ТекКолонка] Цикл + СоответствиеОбъекта.Вставить(Запись.Ключ, Выборка[Запись.Ключ]); + КонецЦикла; + СоответствияКоллекций[ТекКолонка].Вставить(Выборка[ТекКолонка], СоответствиеОбъекта); + КонецЕсли; + Строка.Добавить(ЗначениеДляДобавления); КонецЦикла; Строки.Добавить(Строка); КонецЦикла; + + Для Каждого Запись Из СоответствияКоллекций Цикл + Секция.Вставить(Запись.Ключ, Запись.Значение); + КонецЦикла; Секция.Вставить("columnsValueIndex", ИндексыЗначений); Секция.Вставить("rows", Строки); @@ -836,20 +876,38 @@ КонецЦикла; КонецЕсли; - Колонки = Новый Массив; - Для Каждого ТекКолонка Из Данные.Колонки Цикл - Колонки.Добавить(ТекКолонка.Имя); - КонецЦикла; - Секция.Вставить("columns", Колонки); - Строки = Новый Массив; + // Предназначена для хранения структуры данных. + СтруктурыКоллекций = Новый Структура; + // Предназначено для хранения коллекций данных в виде ключевое поле - реквизиты со значениями. + СоответствияКоллекций = Новый Соответствие; + // Список исключаемых из выгрузки колонок. Их данные идут в СоответствияКоллекций. + ИсключаемыеКолонки = Новый Соответствие; Если КолонкиИндекса <> Неопределено Тогда ИндексыЗначений = Новый Соответствие; Для Каждого ТекКолонка Из КолонкиИндекса Цикл ИндексыЗначений.Вставить(ТекКолонка.Ключ, Новый Соответствие); + Если ТекКолонка.Значение.Количество() Тогда + СоответствияКоллекций.Вставить(ТекКолонка.Ключ, Новый Соответствие); + СтруктураОбъекта = Новый Структура; + Для Каждого Запись Из ТекКолонка.Значение Цикл + СтруктураОбъекта.Вставить(Запись.Ключ); + ИсключаемыеКолонки.Вставить(Запись.Ключ, Истина); + КонецЦикла; + СтруктурыКоллекций.Вставить(ТекКолонка.Ключ, СтруктураОбъекта); + КонецЕсли; КонецЦикла; КонецЕсли; + Колонки = Новый Массив; + Для Каждого ТекКолонка Из Данные.Колонки Цикл + Если ИсключаемыеКолонки[ТекКолонка.Имя] = Истина Тогда + Продолжить; + КонецЕсли; + Колонки.Добавить(ТекКолонка.Имя); + КонецЦикла; + Секция.Вставить("columns", Колонки); + Для Каждого Выборка Из Данные Цикл Строка = Новый Массив; Для Каждого ТекКолонка Из Колонки Цикл @@ -864,10 +922,23 @@ ЗначениеДляДобавления = КолонкиИндекса[ТекКолонка][ЗначениеДляДобавления]; КонецЕсли; + Если СтруктурыКоллекций.Свойство(ТекКолонка) + И СоответствияКоллекций[ТекКолонка][Выборка[ТекКолонка]] = Неопределено Тогда + СоответствиеОбъекта = Новый Соответствие; + Для Каждого Запись Из СтруктурыКоллекций[ТекКолонка] Цикл + СоответствиеОбъекта.Вставить(Запись.Ключ, Выборка[Запись.Ключ]); + КонецЦикла; + СоответствияКоллекций[ТекКолонка].Вставить(Выборка[ТекКолонка], СоответствиеОбъекта); + КонецЕсли; + Строка.Добавить(ЗначениеДляДобавления); КонецЦикла; Строки.Добавить(Строка); КонецЦикла; + + Для Каждого Запись Из СоответствияКоллекций Цикл + Секция.Вставить(Запись.Ключ, Запись.Значение); + КонецЦикла; Секция.Вставить("columnsValueIndex", ИндексыЗначений); Секция.Вставить("rows", Строки); @@ -1017,7 +1088,6 @@ ОбластьДанныхСтрока = Строка(Выборка.ОбластьДанных); ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); - СтатистикаПоОбластям = Новый Массив; Если РегистрыСведений.ОбластиСтатистики.СобиратьСтатистикуКонфигурации(ОбластьДанныхСтрока) Тогда РезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьСтатистику(0, ТаблицаЗначенийИмена, ОбластьДанныхСсылка); СтатистикаКонфигурацииОбласти = СформироватьJSONСтруктуру(ОбластьДанныхСтрока, РезультатЗапроса); @@ -1079,7 +1149,6 @@ ОбластьДанныхСтрока = Строка(Выборка.ОбластьДанных); ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); - СтатистикаПоОбластям = Новый Массив; Если РегистрыСведений.ОбластиСтатистики.СобиратьСтатистикуКонфигурации(ОбластьДанныхСтрока) Тогда РезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьСтатистику(1, ТаблицаЗначенийИмена, ОбластьДанныхСсылка); СтатистикаКонфигурацииОбласти = СформироватьJSONСтруктуру(ОбластьДанныхСтрока, РезультатЗапроса); @@ -1106,9 +1175,12 @@ Если ПараметрыЦентраМониторинга.РегистрироватьПроизводительность Тогда РезультатЗапроса = МодульОценкаПроизводительностиСлужебный.ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодУдаления, ТопApdex); КолонкиИндекса = Новый Соответствие; - КолонкиИндекса.Вставить("Период", Новый Соответствие); - КолонкиИндекса.Вставить("КлючеваяОперация", Новый Соответствие); - + КолонкиИндекса.Вставить("Period", Новый Соответствие); + КоллекцияКлючевойОперации = Новый Соответствие; + КоллекцияКлючевойОперации.Вставить("KOD"); + КоллекцияКлючевойОперации.Вставить("KON"); + КолонкиИндекса.Вставить("KOHash", КоллекцияКлючевойОперации); + ДополнительныеПараметры = Новый Соответствие; ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); ДополнительныеПараметры.Вставить("ДатаОкончания", ДопПараметры); @@ -1120,8 +1192,11 @@ Если ПараметрыЦентраМониторинга.РегистрироватьПроизводительностьТехнологическую Тогда РезультатЗапроса = МодульОценкаПроизводительностиСлужебный.ПолучитьТопAPDEXТехнологический(ДатаНачала, ДатаОкончания, ПериодУдаления, ТопApdexTech); КолонкиИндекса = Новый Соответствие; - КолонкиИндекса.Вставить("Период", Новый Соответствие); - КолонкиИндекса.Вставить("КлючеваяОперация", Новый Соответствие); + КолонкиИндекса.Вставить("Period", Новый Соответствие); + КоллекцияКлючевойОперации = Новый Соответствие; + КоллекцияКлючевойОперации.Вставить("KOD"); + КоллекцияКлючевойОперации.Вставить("KON"); + КолонкиИндекса.Вставить("KOHash", КоллекцияКлючевойОперации); ДополнительныеПараметры = Новый Соответствие; ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); @@ -1137,7 +1212,7 @@ JSONСтруктура = Новый Структура; JSONСтруктура.Вставить("ib", ИдентификаторИнформационнойБазы); JSONСтруктура.Вставить("ibConst", ИдентификаторИнформационнойБазыПостоянный); - JSONСтруктура.Вставить("versionPacket", "1.0.3.0"); + JSONСтруктура.Вставить("versionPacket", "1.0.5.0"); JSONСтруктура.Вставить("datePacket", ТекущаяУниверсальнаяДата()); Если ПараметрыЦентраМониторинга.РегистрироватьИнформациюОСистеме Тогда @@ -1231,8 +1306,8 @@ ИнтернетПрокси = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); - ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"); + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + ИнтернетПрокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("https"); КонецЕсли; HTTPСоединение = Новый HTTPСоединение( @@ -1420,14 +1495,13 @@ ВремяНачала = МодульОценкаПроизводительности.НачатьЗамерВремени(); КонецЕсли; - СтатистикаКонфигурации = Неопределено; Если ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации Тогда РегистрыСведений.СтатистикаКонфигурации.ЗаписатьСтатистикуКонфигурации(); НеобходимаЗаписьОценкиПроизводительности = Истина; КонецЕсли; Если ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации Тогда - СтатистикаКонфигурации = РегистрыСведений.СтатистикаКонфигурации.ЗаписатьНастройкиКонфигурации(); + РегистрыСведений.СтатистикаКонфигурации.ЗаписатьНастройкиКонфигурации(); НеобходимаЗаписьОценкиПроизводительности = Истина; КонецЕсли; @@ -1455,16 +1529,15 @@ Выборка = ОбластиДанныхРезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл ОбластьДанныхСтрока = Строка(Выборка.ОбластьДанных); - ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку(ОбластьДанныхСтрока); Если РегистрыСведений.ОбластиСтатистики.СобиратьСтатистикуКонфигурации(ОбластьДанныхСтрока) Тогда Попытка УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); Исключение Инфо = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Статистика конфигурации переопределяемая'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Статистика конфигурации переопределяемая'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, ,, - НСтр("ru = 'Не удалось установить разделение сеанса.Область данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + " = " + Формат(Выборка.ОбластьДанных, "ЧГ=0") + НСтр("ru = 'Не удалось установить разделение сеанса.Область данных'", ОбщегоНазначения.КодОсновногоЯзыка()) + " = " + Формат(Выборка.ОбластьДанных, "ЧГ=0") + Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); УстановитьРазделениеСеанса(Ложь); @@ -1535,7 +1608,7 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Формирование пакета для отправки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Формирование пакета для отправки'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; @@ -1576,9 +1649,6 @@ КонецЕсли; АдресРесурса = АдресРесурса + GUID + "/" + PACKET_NUMBER + "/" + HASH; - - СтрокаСоединения = ТипСоединения + "://" + Параметры.Сервер + ":" + Параметры.Порт + АдресРесурса; - ПараметрыHTTP = Новый Структура; ПараметрыHTTP.Вставить("Сервер", Параметры.Сервер); ПараметрыHTTP.Вставить("АдресРесурса", АдресРесурса); @@ -1950,7 +2020,7 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Установка параметров отправки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Установка параметров отправки'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; @@ -1959,8 +2029,9 @@ КонецФункции Функция УстановитьПараметрыЦентраМониторинга(НовыеПараметры) + Ошибка = "Успешно"; Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); + Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); НачатьТранзакцию(); @@ -1988,9 +2059,10 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Установка параметров центра мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Установка параметров центра мониторинга'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; + Возврат Ошибка; КонецФункции Процедура УдалитьПараметрыЦентраМониторинга() @@ -2000,14 +2072,15 @@ Константы.ПараметрыЦентраМониторинга.Установить(Хранилище); Исключение Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Удалить параметры центра мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Удалить параметры центра мониторинга'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; КонецПроцедуры Функция УстановитьПараметрЦентраМониторинга(Параметр, Значение) + Ошибка = "Успешно"; Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); + Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); НачатьТранзакцию(); Попытка @@ -2028,9 +2101,10 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Установка параметров центра мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Установка параметров центра мониторинга'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; + Возврат Ошибка; КонецФункции Функция ПолучитьПараметрыСервисаОтправки() @@ -2102,7 +2176,6 @@ Попытка ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя, Новый ПараметрыЧтенияXML(,,,,,,,Истина, Истина)); - Префикс = ?(ЗначениеЗаполнено(ЧтениеXML.Префикс), ЧтениеXML.Префикс + ":", ЧтениеXML.Префикс); Пока ЧтениеXML.Прочитать() Цикл Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.ИмеетИмя И ВРЕГ(ЧтениеXML.Имя) = "DUMP" Тогда ПараметрыДампов = Новый Структура; @@ -2118,7 +2191,7 @@ Сообщение = Сообщение + " """ +Файл.ПолноеИмя + """." + Символы.ПС; Сообщение = Сообщение + НСтр("ru='Скорее всего файл поврежден. Регистрация дампов не возможна. Удалите поврежденный файл или восстановите настройки.'"); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); КаталогДампов.Путь = Неопределено; КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка чтения файла настроек технологического журнала'"); @@ -2132,7 +2205,7 @@ Сообщение = Сообщение + НСтр("ru='Регистрация дампов не возможна. Удалите файл или восстановите настройки.'"); ЧтениеXML.Закрыть(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); КаталогДампов.Путь = Неопределено; КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка секции сбора дампов в файле настроек технологического журнала'"); @@ -2221,7 +2294,7 @@ Сообщение = Сообщение + " """ +Файл.ПолноеИмя + """." + Символы.ПС; Сообщение = Сообщение + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга - регистрация дампов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга - регистрация дампов'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); КаталогДампов.Путь = Неопределено; КаталогДампов.ОписаниеОшибки = НСтр("ru='Ошибка записи файла настроек технологического журнала. Регистрация дампов не возможна.'"); @@ -2258,7 +2331,7 @@ Сообщение = Сообщение + " """ +ПутьКаталога + ИмяФайлаНастроек + """." + Символы.ПС; Сообщение = Сообщение + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,,Сообщение); КаталогДампов = Неопределено; @@ -2286,7 +2359,7 @@ Если КаталогиНастроек.Найти(ПутьКаталога) <> Неопределено Тогда КаталогНастроек.Путь = ""; КаталогНастроек.Существует = Ложь; - КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Обнаружена циклическая ссылка'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Обнаружена циклическая ссылка'", ОбщегоНазначения.КодОсновногоЯзыка()); ПоискКаталога = Ложь; Иначе @@ -2317,7 +2390,7 @@ Иначе КаталогНастроек.Путь = ""; КаталогНастроек.Существует = Ложь; - КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Не найден файл конфигурации настроек в каталоге'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + " " + ПутьКаталога; + КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Не найден файл конфигурации настроек в каталоге'", ОбщегоНазначения.КодОсновногоЯзыка()) + " " + ПутьКаталога; ПоискКаталога = Ложь; КонецЕсли; @@ -2357,7 +2430,7 @@ Иначе КаталогНастроек.Путь = СформироватьПутьСРазделителем(ФайлКонфигурацииНастроек.Путь); КаталогНастроек.Существует = Ложь; - КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Не найдена секция ConfLocation в файле'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + " " + ФайлКонфигурацииНастроек.ПолноеИмя; + КаталогНастроек.ОписаниеОшибки = НСтр("ru = 'Не найдена секция ConfLocation в файле'", ОбщегоНазначения.КодОсновногоЯзыка()) + " " + ФайлКонфигурацииНастроек.ПолноеИмя; КонецЕсли; Возврат КаталогНастроек; @@ -2584,7 +2657,7 @@ // Получение данных об использовании ролей. Запрос = Новый Запрос(ТекстЗапросаИспользованияРолей()); - Запрос.УстановитьПараметр("ПустойУИД", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.УстановитьПараметр("ПустойУИД", ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса())); РезультатПакет = Запрос.ВыполнитьПакет(); @@ -2913,11 +2986,11 @@ #Область ОбщиеФункции Функция СобытиеЖурналаРегистрацииЦентрМониторингаУдалениеДампа() - Возврат НСтр("ru = 'Центр мониторинга.Удаление дампа'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Центр мониторинга.Удаление дампа'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция СобытиеЖурналаРегистрацииЦентрМониторингаРазобратьБуферОперацийСтатистики() - Возврат НСтр("ru = 'Центр мониторинга.Разобрать буфер операций статистики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Центр мониторинга.Разобрать буфер операций статистики'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции #КонецОбласти @@ -3554,13 +3627,13 @@ КоманднаяСтрока = "typeperf ""\LogicalDisk(" + БукваДиска + ")\Free Megabytes"" -sc 1"; - ПараметрыЗапускаПрограммы = ОбщегоНазначенияКлиентСервер.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы(); ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина; - ПараметрыЗапускаПрограммы.Кодировка = "437"; + ПараметрыЗапускаПрограммы.КодировкаИсполнения = "OEM"; - РезультатЗапуска = ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(КоманднаяСтрока, ПараметрыЗапускаПрограммы); + РезультатЗапуска = ФайловаяСистема.ЗапуститьПрограмму(КоманднаяСтрока, ПараметрыЗапускаПрограммы); ПотокОшибок = РезультатЗапуска.ПотокОшибок; ПотокВывода = РезультатЗапуска.ПотокВывода; @@ -3935,7 +4008,7 @@ Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации( НСтр("ru = 'Центр мониторинга - сформировать тестовый пакет для отправки'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -3953,7 +4026,7 @@ Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, HTTPОтвет.КодСостояния); ЗаписьЖурналаРегистрации( НСтр("ru = 'Центр мониторинга - отправить тестовые данные мониторинга'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -3965,7 +4038,7 @@ Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации( НСтр("ru = 'Центр мониторинга - отправить тестовые данные мониторинга'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , diff --git a/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl index 986995783..63ef5a3b2 100644 --- a/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщений/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Создает сообщение на основании предмета по шаблону сообщения. @@ -358,5 +366,28 @@ КонецФункции +// Обработчик подписки на событие ОбработкаПолученияФормы для переопределения формы файла. +// +// Параметры: +// Источник - СправочникМенеджер - менеджер справочника с именем "*ПрисоединенныеФайлы". +// ВидФормы - Строка - имя стандартной формы. +// Параметры - Структура - параметры формы. +// ВыбраннаяФорма - Строка - имя или объект метаданных открываемой формы. +// ДополнительнаяИнформация - Структура - дополнительная информация открытия формы. +// СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события. +// +Процедура ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, + ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + МодульРаботаСФайлами.ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, + ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl index 4b65fe5ed..9f7069812 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Открывает окно выбора шаблона для формирования электронного письма или сообщения SMS по указанному предмету diff --git a/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl index afb5a2293..011842677 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Описывает параметр шаблона для использования их в внешних обработках. @@ -78,6 +86,7 @@ Результат.Вставить("Ссылка", Неопределено); Результат.Вставить("Наименование", ""); Результат.Вставить("ПараметрыСообщения", Новый Структура); + Результат.Вставить("ПодписьИПечать", Ложь); Возврат Результат; diff --git a/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl index 054e436b0..6829f3507 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСервер/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСервер/Module.bsl index f41380e69..7ee49c10c 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСервер/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСервер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Обратная совместимость. diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl index b03967761..17f41d979 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Создание сообщения по шаблону @@ -34,7 +42,7 @@ Если ЗначениеЗаполнено(ПараметрыШаблона.ПолноеИмяТипаНазначения) Тогда МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения); Если МетаданныеОбъекта <> Неопределено Тогда - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения); + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПараметрыШаблона.ПолноеИмяТипаНазначения); КонецЕсли; КонецЕсли; @@ -306,10 +314,10 @@ Сообщение = Новый Структура(); Сообщение.Вставить("Тема", ""); Сообщение.Вставить("Текст", ""); - Сообщение.Вставить("Получатель", Новый СписокЗначений); + Сообщение.Вставить("Получатель", Неопределено); Сообщение.Вставить("ДополнительныеПараметры", ?(ПараметрыШаблона <> Неопределено, ПараметрыШаблона, Новый Структура())); - Сообщение.Вставить("СообщенияПользователю", Новый Массив()); + Сообщение.Вставить("СообщенияПользователю", Новый ФиксированныйМассив(Новый Массив())); ТипСтрока = Новый ОписаниеТипов("Строка"); Вложения = Новый ТаблицаЗначений; @@ -444,9 +452,7 @@ Функция ОбъектЯвляетсяПредметомШаблона(ПолноеИмяТипаНазначения) Экспорт - НастройкиШаблоновСообщений = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек(); Результат = ШаблоныСообщенийСлужебныйПовтИсп.ПриОпределенииНастроек().ПредметыШаблонов.Найти(ПолноеИмяТипаНазначения, "Имя"); - Возврат Результат <> Неопределено; КонецФункции @@ -515,8 +521,8 @@ Если ПараметрыОтправки.ДополнительныеПараметры.Свойство("ВидСообщения") И ПараметрыОтправки.ДополнительныеПараметры.ВидСообщения = "СообщениеSMS" Тогда ПараметрыШаблона.ТипШаблона = "SMS"; - КонецЕсли; - + КонецЕсли; + МенеджерОбъекта = Неопределено; Если ПараметрыОтправки.Свойство("Предмет") И ЗначениеЗаполнено(ПараметрыОтправки.Предмет) Тогда МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ПараметрыОтправки.Предмет)); @@ -768,8 +774,7 @@ ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаДляРазбора); Если ПустаяСтрока(ИмяБезРасширения) Тогда - ИмяФайлаБезРасширения = - НСтр("ru = 'Вложение без имени'") + ?(КоличествоПустыхИменВоВложениях = 0, ""," " + Строка(КоличествоПустыхИменВоВложениях + 1)); + ИмяБезРасширения = НСтр("ru = 'Вложение без имени'") + ?(КоличествоПустыхИменВоВложениях = 0, ""," " + Строка(КоличествоПустыхИменВоВложениях + 1)); КоличествоПустыхИменВоВложениях = КоличествоПустыхИменВоВложениях + 1; Иначе @@ -800,6 +805,13 @@ // Процедура ДобавитьВыбранныеПечатныеФормыВоВложения(ПараметрыОтправки, СведенияОШаблоне, Вложения, ПараметрыШаблона) + ФорматыСохранения = Новый Массив; + Для каждого ФорматВложения Из ПараметрыШаблона.ФорматыВложений Цикл + ФорматыСохранения.Добавить(?(ТипЗнч(ФорматВложения.Значение) = Тип("ТипФайлаТабличногоДокумента"), + ФорматВложения.Значение, + ТипФайлаТабличногоДокумента[ФорматВложения.Значение])); + КонецЦикла; + Для каждого ВложениеПечатнаяФорма Из СведенияОШаблоне.Вложения Цикл ИмяПараметраВыбраннойПечатнойФормы = ПараметрыШаблона.ВыбранныеВложения[ВложениеПечатнаяФорма.Идентификатор]; Если ВложениеПечатнаяФорма.Статус = "ПечатнаяФорма" И ИмяПараметраВыбраннойПечатнойФормы <> Неопределено Тогда @@ -815,35 +827,37 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); - Если ИмяМенеджераПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" Тогда - ИменаМакетов = "ВнешняяПечатнаяФорма." + ИменаМакетов; - КонецЕсли; Попытка - КоллекцияПечатныхФорм = МодульУправлениеПечатью.ПодготовитьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати); + КомандаПечати = Новый Структура; + КомандаПечати.Вставить("Идентификатор", ИменаМакетов); + КомандаПечати.Вставить("МенеджерПечати", ИмяМенеджераПечати); + КомандаПечати.Вставить("ДополнительныеПараметры", ПараметрыПечати); + + НастройкиСохранения = МодульУправлениеПечатью.НастройкиСохранения(); + НастройкиСохранения.ФорматыСохранения = ФорматыСохранения; + НастройкиСохранения.УпаковатьВАрхив = ПараметрыШаблона.УпаковатьВАрхив; + НастройкиСохранения.ПереводитьИменаФайловВТранслит = ПараметрыШаблона.ТранслитерироватьИменаФайлов; + НастройкиСохранения.ПодписьИПечать = ПараметрыШаблона.ПодписьИПечать; + + КоллекцияПечатныхФорм = МодульУправлениеПечатью.НапечататьВФайл(КомандаПечати, МассивОбъектов, НастройкиСохранения); + Исключение // Ошибка при создании внешний печатной формы. Создаем дальше письмо, без этой печатной формы. + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации( ИмяСобытияЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка,,, НСтр("ru = 'Ошибка при создании внешний печатной формы. По причине:'") - + Символы.ПС + ОписаниеОшибки()); - Прервать; + УровеньЖурналаРегистрации.Ошибка,,, НСтр("ru = 'Ошибка при создании внешней печатной формы. По причине:'") + Символы.ПС + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + ОбщегоНазначения.СообщитьПользователю(ИнформацияОбОшибке.Описание) // сообщения обрабатываются в СформироватьСообщение КонецПопытки; - Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм.КоллекцияПечатныхФорм Цикл - Если ПечатнаяФорма = Неопределено Или ПечатнаяФорма.ТабличныйДокумент.ВысотаТаблицы = 0 Тогда - - Если ТипЗнч(ПечатнаяФорма.ОфисныеДокументы) = Тип("Соответствие") Тогда - Для каждого ОфисныйДокумент Из ПечатнаяФорма.ОфисныеДокументы Цикл - Вложения.Вставить(ОфисныйДокумент.Значение, ОфисныйДокумент.Ключ); - КонецЦикла; - КонецЕсли; - Продолжить; - КонецЕсли; - Результат = ПоместитьТабличныйДокументВоВременноеХранилище(ПечатнаяФорма, ПараметрыШаблона, ПараметрыОтправки.УникальныйИдентификатор); - Для Каждого СохраненнаяПечатнаяФорма Из Результат Цикл - Вложения.Вставить(СохраненнаяПечатнаяФорма.ИмяФайла, СохраненнаяПечатнаяФорма.АдресВоВременномХранилище); - КонецЦикла; + Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл + + АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПечатнаяФорма.ДвоичныеДанные, ПараметрыОтправки.УникальныйИдентификатор); + Вложения.Вставить(ПечатнаяФорма.ИмяФайла, АдресВоВременномХранилище); КонецЦикла; КонецЕсли; @@ -852,116 +866,6 @@ КонецПроцедуры -Функция ПоместитьТабличныйДокументВоВременноеХранилище(ПечатнаяФорма, ПараметрыШаблоны, УникальныйИдентификатор) - - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("АдресВоВременномХранилище"); - Результат.Колонки.Добавить("ИмяФайла"); - Результат.Колонки.Добавить("Размер"); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда - МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); - Если ПараметрыШаблоны.УпаковатьВАрхив Тогда - ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); - ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива); - КонецЕсли; - - // подготовка временной папки - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяВременнойПапки); - ИспользованныеИменаФайлов = Новый Соответствие; - ТаблицаФорматов = МодульУправлениеПечатью.ФорматыСохраненияТабличногоДокумента(); - - Для Каждого ЭлементСписка Из ПараметрыШаблоны.ФорматыВложений Цикл - - НастройкиФормата = ТаблицаФорматов.НайтиСтроки(Новый Структура("ТипФайлаТабличногоДокумента", ЭлементСписка.Значение))[0]; - ТабличныйДокумент = ПечатнаяФорма.ТабличныйДокумент; - - ИмяФайла = ПолучитьИмяВременногоФайлаДляПечатнойФормы(ПечатнаяФорма.СинонимМакета, НастройкиФормата.Расширение, ИспользованныеИменаФайлов, ПараметрыШаблоны.ТранслитерироватьИменаФайлов); - ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + ИмяФайла; - - ТабличныйДокумент.Записать(ПолноеИмяФайла, ЭлементСписка.Значение); - - Если ЗаписьZipФайла <> Неопределено Тогда - ЗаписьZipФайла.Добавить(ПолноеИмяФайла); - Иначе - ДвоичныеДанные = Новый ДвоичныеДанные(ПолноеИмяФайла); - АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); - НоваяСтрока = Результат.Добавить(); - НоваяСтрока.АдресВоВременномХранилище = АдресВоВременномХранилище; - НоваяСтрока.ИмяФайла = ИмяФайла; - НоваяСтрока.Размер = ДвоичныеДанные.Размер(); - КонецЕсли; - - КонецЦикла; - - // если архив подготовлен, записываем и помещаем его во временное хранилище - Если ЗаписьZipФайла <> Неопределено Тогда - ЗаписьZipФайла.Записать(); - ФайлАрхива = Новый Файл(ИмяАрхива); - ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива); - АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); - НоваяСтрока = Результат.Добавить(); - НоваяСтрока.ИмяФайла = ИмяФайлаДляАрхива(ИмяФайла); - НоваяСтрока.Размер = ДвоичныеДанные.Размер(); - НоваяСтрока.АдресВоВременномХранилище = АдресВоВременномХранилище; - КонецЕсли; - - УдалитьФайлы(ИмяВременнойПапки); - Если ЗначениеЗаполнено(ИмяАрхива) Тогда - УдалитьФайлы(ИмяАрхива); - КонецЕсли; - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -Функция ПолучитьИмяВременногоФайлаДляПечатнойФормы(ИмяМакета, Расширение, ИспользованныеИменаФайлов, ТранслитерироватьИменаФайлов) - - ШаблонИмениФайла = "%1%2.%3"; - - ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениФайла, ИмяМакета, "", Расширение)); - - НомерИспользования = ?(ИспользованныеИменаФайлов[ИмяВременногоФайла] <> Неопределено, - ИспользованныеИменаФайлов[ИмяВременногоФайла] + 1, - 1); - - ИспользованныеИменаФайлов.Вставить(ИмяВременногоФайла, НомерИспользования); - - // если имя уже было ранее использовано, прибавляем счетчик в конце имени - Если НомерИспользования > 1 Тогда - ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонИмениФайла, - ИмяМакета, - " (" + НомерИспользования + ")", - Расширение)); - КонецЕсли; - - Если ТранслитерироватьИменаФайлов Тогда - ИмяВременногоФайла = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(ИмяВременногоФайла); - КонецЕсли; - - Возврат ИмяВременногоФайла; - -КонецФункции - -Функция ИмяФайлаДляАрхива(ИмяФайла) - - МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяФайла,"."); - Если МассивСтрок.Количество() = 2 Тогда - Возврат МассивСтрок[0] +".zip"; - ИначеЕсли МассивСтрок.Количество() = 1 Тогда - Возврат ИмяФайла + ".zip"; - Иначе - Возврат ИмяФайла; - КонецЕсли; - -КонецФункции - Функция ТаблицаВложений() ТипСтрока = Новый ОписаниеТипов("Строка"); @@ -1027,6 +931,8 @@ Результат.Текст = Шаблон.ТекстШаблонаПисьма; КонецЕсли; Результат.ТранслитерироватьИменаФайлов = Шаблон.ТранслитерироватьИменаФайлов; + Результат.ПодписьИПечать = Шаблон.ПодписьИПечать; + ЗаполнитьЗначенияСвойств(Результат, Шаблон,, "Параметры"); Для каждого ПечатныеФормыИВложения Из Шаблон.ПечатныеФормыИВложения Цикл @@ -1061,6 +967,7 @@ | ШаблоныСообщений.ФорматВложений, | ШаблоныСообщений.ПредназначенДляSMS, | ШаблоныСообщений.ОтправлятьВТранслите, + | ШаблоныСообщений.ПодписьИПечать, | ШаблоныСообщений.ШаблонПоВнешнейОбработке, | ШаблоныСообщений.ВнешняяОбработка, | ШаблоныСообщений.Ссылка, @@ -1117,6 +1024,7 @@ Результат.Тема = СтрокаСведенийОШаблоне.ТемаПисьма; Результат.УпаковатьВАрхив = СтрокаСведенийОШаблоне.УпаковатьВАрхив; Результат.ФорматПисьма = СтрокаСведенийОШаблоне.ТипТекстаПисьма; + Результат.ПодписьИПечать = СтрокаСведенийОШаблоне.ПодписьИПечать; КонецЕсли; ЗаполнитьЗначенияСвойств(Результат, СтрокаСведенийОШаблоне); @@ -1616,7 +1524,6 @@ КонецПроцедуры -//Процедура ОбработатьКартинкуВТекстеHTMLДляФорматированногоДокумента(Картинка, ПрисоединенныйФайл, СформированноеСообщение, АтрибутИсточникКартинки, ПараметрыОтправки) Процедура ОбработатьКартинкуВТекстеHTMLДляФорматированногоДокумента(Картинка, ПрисоединенныйФайл, СформированноеСообщение, АтрибутИсточникКартинки, Представление, Идентификатор) НовыйАтрибутКартинки = АтрибутИсточникКартинки.КлонироватьУзел(Ложь); @@ -1841,7 +1748,7 @@ КонецФункции -Функция ОбработатьОпределитьРеквизитыДляЗапросаПоМетаданным(ПараметрыОснования, МетаданныеОбъекта) +Процедура ОбработатьОпределитьРеквизитыДляЗапросаПоМетаданным(ПараметрыОснования, МетаданныеОбъекта) Для каждого ПараметрОснования Из ПараметрыОснования Цикл Позиция = СтрНайти(ПараметрОснования.Ключ, "{"); @@ -1874,7 +1781,7 @@ КонецЕсли; КонецЦикла; -КонецФункции +КонецПроцедуры Процедура ОпределитьОшибочныеРеквизиты(ПараметрыТекстаСообщения, ОшибочныеРеквизиты, СведенияОШаблоне, Префикс = "") Экспорт @@ -1912,9 +1819,7 @@ Если ТипЗнч(ПараметрОснования.Значение) = Тип("Соответствие") Тогда МетаданныеОбъектаПоКлючу = МетаданныеОбъекта.Реквизиты.Найти(ПараметрОснования.Ключ); Если МетаданныеОбъектаПоКлючу <> Неопределено Тогда - Для каждого Тип Из МетаданныеОбъектаПоКлючу.Тип.Типы() Цикл - ЗаполнитьРеквизитыСвойствИКонтактнойИнформации(ПараметрОснования.Значение, Предмет[ПараметрОснования.Ключ]); - КонецЦикла; + ЗаполнитьРеквизитыСвойствИКонтактнойИнформации(ПараметрОснования.Значение, Предмет[ПараметрОснования.Ключ]); КонецЕсли; Иначе РеквизитНеНайден = Истина; @@ -2163,6 +2068,7 @@ Иначе + Результат.Получатель = Новый СписокЗначений(); Для каждого Получатели Из Получатели Цикл Если ЗначениеЗаполнено(Получатели.Адрес) Тогда Результат.Получатель.Добавить(Получатели.Адрес, Получатели.Представление); @@ -2195,6 +2101,7 @@ Иначе + Результат.Получатель = Новый СписокЗначений; Для каждого Получатели Из Получатели Цикл Если ЗначениеЗаполнено(Получатели.НомерТелефона) Тогда Результат.Получатель.Добавить(Получатели.НомерТелефона, Получатели.Представление); @@ -2290,7 +2197,7 @@ Функция ИмяСобытияЖурналаРегистрации() - Возврат НСтр("ru = 'Формирование шаблона сообщений'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Формирование шаблона сообщений'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСлужебныйПовтИсп/Module.bsl index 9374642c9..c45e12b35 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Функция ПриОпределенииНастроек() Экспорт diff --git a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl index dc86775c4..18354f712 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает текущую настройку использования электронных подписей. @@ -7,7 +15,7 @@ // Функция ИспользоватьЭлектронныеПодписи() Экспорт - Возврат ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ИспользоватьЭлектронныеПодписи; + Возврат ОбщиеНастройки().ИспользоватьЭлектронныеПодписи; КонецФункции @@ -18,7 +26,7 @@ // Функция ИспользоватьШифрование() Экспорт - Возврат ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ИспользоватьШифрование; + Возврат ОбщиеНастройки().ИспользоватьШифрование; КонецФункции @@ -29,7 +37,7 @@ // Функция ПроверятьЭлектронныеПодписиНаСервере() Экспорт - Возврат ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере; + Возврат ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере; КонецФункции @@ -41,7 +49,7 @@ // Функция СоздаватьЭлектронныеПодписиНаСервере() Экспорт - Возврат ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере; + Возврат ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере; КонецФункции @@ -74,6 +82,16 @@ Функция УстановленныеПодписи(Объект) Экспорт ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.УстановленныеПодписи", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПроверитьЧтениеРазрешено(Объект); + КонецЕсли; + + Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда + ОбъектСсылка = Объект; + Иначе + ОбъектСсылка = Объект.Ссылка; + КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -99,14 +117,9 @@ |УПОРЯДОЧИТЬ ПО | ПорядковыйНомер"; - Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда - Запрос.УстановитьПараметр("ПодписанныйОбъект", Объект); - Иначе - Запрос.УстановитьПараметр("ПодписанныйОбъект", Объект.Ссылка); - КонецЕсли; + Запрос.УстановитьПараметр("ПодписанныйОбъект", ОбъектСсылка); РезультатЗапроса = Запрос.Выполнить(); - ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); МассивЭлектронныхПодписей = Новый Массив; @@ -172,6 +185,10 @@ ВерсияОбъекта = Неопределено, ЗаписанныйОбъект = Неопределено) Экспорт ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.ДобавитьПодпись"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПроверитьИзменениеРазрешено(Объект); + КонецЕсли; Если ТипЗнч(СвойстваПодписи) = Тип("Строка") Тогда СвойстваПодписи = ПолучитьИзВременногоХранилища(СвойстваПодписи); @@ -185,9 +202,11 @@ КонецЦикла; КонецЕсли; + ЭтоСсылка = ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)); + НачатьТранзакцию(); Попытка - Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда + Если ЭтоСсылка Тогда ЗаблокироватьДанныеДляРедактирования(Объект, ВерсияОбъекта, ИдентификаторФормы); ОбъектДанных = Объект.ПолучитьОбъект(); Иначе @@ -211,7 +230,7 @@ ОбъектДанных.ПодписанЭП = Истина; КонецЕсли; - Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда + Если ЭтоСсылка Тогда // Чтобы определить, что это запись с целью добавления/удаления подписи. ОбъектДанных.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); Если ОбъектДанных.Модифицированность() Тогда @@ -227,7 +246,7 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); Если ЗначениеЗаполнено(СообщениеЖурналаРегистрации) Тогда ЗаписьЖурналаРегистрации( - НСтр("ru = 'Электронная подпись.Ошибка добавления подписи'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Электронная подпись.Ошибка добавления подписи'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, Объект.Метаданные(), Объект.Ссылка, @@ -268,6 +287,10 @@ Процедура ОбновитьПодпись(Объект, Знач СвойстваПодписи) Экспорт ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.ОбновитьПодпись", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПроверитьИзменениеРазрешено(Объект); + КонецЕсли; Если ТипЗнч(СвойстваПодписи) = Тип("Строка") Тогда СвойстваПодписи = ПолучитьИзВременногоХранилища(СвойстваПодписи); @@ -327,10 +350,15 @@ ВерсияОбъекта = Неопределено, ЗаписанныйОбъект = Неопределено) Экспорт ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.УдалитьПодпись"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПроверитьИзменениеРазрешено(Объект); + КонецЕсли; + ЭтоСсылка = ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)); НачатьТранзакцию(); Попытка - Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда + Если ЭтоСсылка Тогда ЗаблокироватьДанныеДляРедактирования(Объект, ВерсияОбъекта, ИдентификаторФормы); ОбъектДанных = Объект.ПолучитьОбъект(); Иначе @@ -352,10 +380,12 @@ ОбновитьНумерациюПодписей(ОбъектДанных); - Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда + Если ЭтоСсылка Тогда // Чтобы определить, что это запись с целью добавления/удаления подписи. ОбъектДанных.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - ОбъектДанных.Записать(); + Если ОбъектДанных.Модифицированность() Тогда + ОбъектДанных.Записать(); + КонецЕсли; РазблокироватьДанныеДляРедактирования(Объект.Ссылка, ИдентификаторФормы); ЗаписанныйОбъект = ОбъектДанных; КонецЕсли; @@ -365,7 +395,7 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); Если ЗначениеЗаполнено(СообщениеЖурналаРегистрации) Тогда ЗаписьЖурналаРегистрации( - НСтр("ru = 'Электронная подпись.Ошибка удаления подписи'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Электронная подпись.Ошибка удаления подписи'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, Объект.Метаданные(), Объект.Ссылка, @@ -388,6 +418,10 @@ Функция СертификатыШифрования(Объект) Экспорт ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.СертификатыШифрования", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПроверитьЧтениеРазрешено(Объект); + КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -452,9 +486,16 @@ // ЗаписанныйОбъект - Объект - объект, который был получен и записан, если передавалась ссылка. // Процедура ЗаписатьСертификатыШифрования(Объект, Знач СертификатыШифрования, ИдентификаторФормы = Неопределено, - ВерсияОбъекта = Неопределено, ЗаписанныйОбъект = Неопределено) Экспорт + ВерсияОбъекта = Неопределено, ЗаписанныйОбъект = Неопределено) Экспорт ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.ЗаписатьСертификатыШифрования", Ложь); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПроверитьИзменениеРазрешено(Объект); + КонецЕсли; + + ЭтоСсылка = ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)); + ОбъектСсылка = ?(ЭтоСсылка, Объект, Объект.Ссылка); Если ТипЗнч(СертификатыШифрования) = Тип("Строка") Тогда СертификатыШифрования = ПолучитьИзВременногоХранилища(СертификатыШифрования); @@ -462,8 +503,8 @@ НачатьТранзакцию(); Попытка - Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда - ЗаблокироватьДанныеДляРедактирования(Объект, ВерсияОбъекта, ИдентификаторФормы); + Если ЭтоСсылка Тогда + ЗаблокироватьДанныеДляРедактирования(ОбъектСсылка, ВерсияОбъекта, ИдентификаторФормы); ОбъектДанных = Объект.ПолучитьОбъект(); Иначе ОбъектДанных = Объект; @@ -484,8 +525,8 @@ ОбъектДанных.Зашифрован = НаборЗаписей.Количество() > 0; НаборЗаписей.Записать(); - Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда - РазблокироватьДанныеДляРедактирования(Объект.Ссылка, ИдентификаторФормы); + Если ЭтоСсылка Тогда + РазблокироватьДанныеДляРедактирования(ОбъектСсылка, ИдентификаторФормы); ЗаписанныйОбъект = ОбъектДанных; КонецЕсли; @@ -633,33 +674,36 @@ СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); СертификатОбъект.Отпечаток = Base64Строка(СертификатКриптографии.Отпечаток); - СертификатОбъект.Добавил = ПользователиКлиентСервер.АвторизованныйПользователь(); + СертификатОбъект.Добавил = Пользователи.АвторизованныйПользователь(); КонецЕсли; Если СертификатОбъект.ДанныеСертификата.Получить() <> ДвоичныеДанныеСертификата Тогда СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); КонецЕсли; - ОбновитьЗначение(СертификатОбъект.Подписание, СертификатКриптографии.ИспользоватьДляПодписи); - ОбновитьЗначение(СертификатОбъект.Шифрование, СертификатКриптографии.ИспользоватьДляШифрования); + СвойстваСертификата = СвойстваСертификата(СертификатКриптографии); + ОбновитьЗначение(СертификатОбъект.Подписание, СвойстваСертификата.Подписание); + ОбновитьЗначение(СертификатОбъект.Шифрование, СвойстваСертификата.Шифрование); + ОбновитьЗначение(СертификатОбъект.КомуВыдан, СвойстваСертификата.КомуВыдан); + ОбновитьЗначение(СертификатОбъект.КемВыдан, СвойстваСертификата.КемВыдан); + ОбновитьЗначение(СертификатОбъект.ДействителенДо, СвойстваСертификата.ДатаОкончания); - СтруктураСертификата = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(СертификатКриптографии); - ОбновитьЗначение(СертификатОбъект.КомуВыдан, СтруктураСертификата.КомуВыдан); - ОбновитьЗначение(СертификатОбъект.КемВыдан, СтруктураСертификата.КемВыдан); - ОбновитьЗначение(СертификатОбъект.ДействителенДо, СтруктураСертификата.ДействителенДо); - - СвойстваСубъекта = ЭлектроннаяПодписьКлиентСервер.СвойстваСубъектаСертификата(СертификатКриптографии); + СвойстваСубъекта = СвойстваСубъектаСертификата(СертификатКриптографии); ОбновитьЗначение(СертификатОбъект.Фамилия, СвойстваСубъекта.Фамилия, Истина); ОбновитьЗначение(СертификатОбъект.Имя, СвойстваСубъекта.Имя, Истина); - ОбновитьЗначение(СертификатОбъект.Отчество, СвойстваСубъекта.Отчество, Истина); - ОбновитьЗначение(СертификатОбъект.Должность, СвойстваСубъекта.Должность, Истина); ОбновитьЗначение(СертификатОбъект.Фирма, СвойстваСубъекта.Организация, Истина); + Если СвойстваСубъекта.Свойство("Отчество") Тогда + ОбновитьЗначение(СертификатОбъект.Отчество, СвойстваСубъекта.Отчество, Истина); + КонецЕсли; + Если СвойстваСубъекта.Свойство("Должность") Тогда + ОбновитьЗначение(СертификатОбъект.Должность, СвойстваСубъекта.Должность, Истина); + КонецЕсли; Если СертификатОбъект.ЭтоНовый() И Не ДополнительныеПараметры.Свойство("Наименование") Тогда ДополнительныеПараметры.Вставить("Наименование", - ЭлектроннаяПодписьКлиентСервер.ПредставлениеСертификата(СертификатКриптографии)); + ПредставлениеСертификата(СертификатКриптографии)); КонецЕсли; Для Каждого КлючИЗначение Из ДополнительныеПараметры Цикл @@ -688,21 +732,17 @@ // Функция ШтампВизуализацииЭлектроннойПодписи(Сертификат, ДатаПодписи = Неопределено, ТекстОтметки = "", ЛоготипОрганизации = Неопределено) Экспорт - СертификатКриптографии = Сертификат; - - СвойстваСубъекта = ЭлектроннаяПодписьКлиентСервер.СвойстваСубъектаСертификата(СертификатКриптографии); - СвойстваСертификата = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(СертификатКриптографии); - ДатыСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатыСертификата(СертификатКриптографии); + СвойстваСертификата = СвойстваСертификата(Сертификат); ПериодДействия = НСтр("ru = 'с %1 по %2'"); ПериодДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПериодДействия, - Формат(ДатыСертификата.ДатаНачала, "ДЛФ=D"), - Формат(ДатыСертификата.ДатаОкончания, "ДЛФ=D")); + Формат(СвойстваСертификата.ДатаНачала, "ДЛФ=D"), + Формат(СвойстваСертификата.ДатаОкончания, "ДЛФ=D")); Штамп = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПолучитьМакет("Штамп"); Штамп.Параметры.ДатаПодписи = ДатаПодписи; - Штамп.Параметры.НомерСертификата = СертификатКриптографии.СерийныйНомер; + Штамп.Параметры.НомерСертификата = СвойстваСертификата.СерийныйНомер; Штамп.Параметры.ВыдалСертификат = СвойстваСертификата.КемВыдан; Штамп.Параметры.ВладелецСертификата = СвойстваСертификата.КомуВыдан; Штамп.Параметры.СрокДействия = ПериодДействия; @@ -788,6 +828,50 @@ КонецПроцедуры +// См. ЭлектроннаяПодписьКлиент.ПредставлениеСертификата. +Функция ПредставлениеСертификата(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСертификата(Сертификат, + ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), МодульЛокализации()); + +КонецФункции + +// См. ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта. +Функция ПредставлениеСубъекта(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСубъекта(Сертификат, МодульЛокализации()); + +КонецФункции + +// См. ЭлектроннаяПодписьКлиент.ПредставлениеИздателя. +Функция ПредставлениеИздателя(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеИздателя(Сертификат, МодульЛокализации()); + +КонецФункции + +// См. ЭлектроннаяПодписьКлиент.СвойстваСертификата. +Функция СвойстваСертификата(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(Сертификат, + ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), МодульЛокализации()); + +КонецФункции + +// См. ЭлектроннаяПодписьКлиент.СвойстваСубъектаСертификата. +Функция СвойстваСубъектаСертификата(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат, МодульЛокализации()); + +КонецФункции + +// См. ЭлектроннаяПодписьКлиент.СвойстваИздателяСертификата. +Функция СвойстваИздателяСертификата(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваИздателяСертификата(Сертификат, МодульЛокализации()); + +КонецФункции + #Область ДляВызоваИзДругихПодсистем // ЭлектронноеВзаимодействие @@ -841,7 +925,7 @@ // которые были подписаны. // - Структура - со свойствами: // * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего -// модуля ЭлектроннаяПодписьКлиентСервер. +// модуля ЭлектроннаяПодпись. // * КонвертSOAP - Строка - шаблон сообщения . // // Подпись - ДвоичныеДанные - двоичные данные электронной подписи. @@ -976,7 +1060,9 @@ Возврат Ложь; КонецПопытки; - ОшибкаПросрочки = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатПросрочен(СертификатДляПроверки, НаДату); + ОшибкаПросрочки = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатПросрочен(СертификатДляПроверки, + НаДату, ЭлектроннаяПодписьСлужебный.ДобавкаВремени()); + Если ЗначениеЗаполнено(ОшибкаПросрочки) Тогда ОписаниеОшибки = ОшибкаПросрочки; Возврат Ложь; @@ -1071,7 +1157,7 @@ | Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК Программы"; Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрограммыЭлектроннойПодписиИШифрования"); + Блокировка.Добавить("Справочник.ПрограммыЭлектроннойПодписиИШифрования"); НачатьТранзакцию(); Попытка @@ -1144,6 +1230,13 @@ КонецФункции +// См. ЭлектроннаяПодписьКлиент.ПараметрыXMLDSig. +Функция ПараметрыXMLDSig() Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыXMLDSig(); + +КонецФункции + // Конец ЭлектронноеВзаимодействие #КонецОбласти @@ -1152,28 +1245,6 @@ #Область СлужебныйПрограммныйИнтерфейс -// Возвращает общие настройки всех пользователей для работы с электронной подписью. -// -// Возвращаемое значение: -// Структура - Общие настройки подсистемы для работы с электронной подписью. -// * ИспользоватьЭлектронныеПодписи - Булево - если Истина, то электронный подписи используются. -// * ИспользоватьШифрование - Булево - если Истина, то шифрование используются. -// * ПроверятьЭлектронныеПодписиНаСервере - Булево - если Истина, то электронные подписи и -// сертификаты проверяются на сервере. -// * СоздаватьЭлектронныеПодписиНаСервере - Булево - если Истина, то электронные подписи создаются -// сначала на сервере, а в случае неудачи на клиенте. -// -// См. также: -// ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки() - единая точка входа. -// ОбщаяФорма.НастройкиЭлектроннойПодписиИШифрования - место определения данных параметров и -// их текстовые описания. -// -Функция ОбщиеНастройки() Экспорт - - Возврат ЭлектроннаяПодписьСлужебныйПовтИсп.ОбщиеНастройки(); - -КонецФункции - // Извлекает сертификаты из данных подписи. // // Параметры: @@ -1208,7 +1279,7 @@ Результат = Новый Структура; Результат.Вставить("Отпечаток", Base64Строка(Сертификат.Отпечаток)); - Результат.Вставить("КомуВыданСертификат", ЭлектроннаяПодписьКлиентСервер.ПредставлениеСубъекта(Сертификат)); + Результат.Вставить("КомуВыданСертификат", ПредставлениеСубъекта(Сертификат)); Результат.Вставить("ДвоичныеДанныеСертификата", Сертификат.Выгрузить()); Результат.Вставить("Подпись", Новый ХранилищеЗначения(Подпись)); Результат.Вставить("Сертификат", Новый ХранилищеЗначения(Сертификат.Выгрузить())); @@ -1218,10 +1289,6 @@ КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - // Возвращает настройки текущего пользователя для работы с электронной подписью. // // Возвращаемое значение: @@ -1236,8 +1303,8 @@ // * РасширениеДляЗашифрованныхФайлов - Строка - Расширение для зашифрованных файлов. // // См. также: -// ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки() - программный интерфейс для получения. -// ОбщаяФорма.ПерсональныеНастройкиЭП - место ввода данных параметров и их пользовательские представления. +// ОбщаяФорма.НастройкиЭлектроннойПодписиИШифрования - место определения данных параметров и +// их текстовые описания. // Функция ПерсональныеНастройки() Экспорт @@ -1266,6 +1333,31 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает общие настройки всех пользователей для работы с электронной подписью. +// +// Возвращаемое значение: +// Структура - Общие настройки подсистемы для работы с электронной подписью. +// * ИспользоватьЭлектронныеПодписи - Булево - если Истина, то электронный подписи используются. +// * ИспользоватьШифрование - Булево - если Истина, то шифрование используются. +// * ПроверятьЭлектронныеПодписиНаСервере - Булево - если Истина, то электронные подписи и +// сертификаты проверяются на сервере. +// * СоздаватьЭлектронныеПодписиНаСервере - Булево - если Истина, то электронные подписи создаются +// сначала на сервере, а в случае неудачи на клиенте. +// +// См. также: +// ОбщаяФорма.НастройкиЭлектроннойПодписиИШифрования - место определения данных параметров и +// их текстовые описания. +// +Функция ОбщиеНастройки() Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйПовтИсп.ОбщиеНастройки(); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -1324,7 +1416,7 @@ НоваяЗапись.Записать(); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Электронная подпись.Добавление подписи'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Электронная подпись.Добавление подписи'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, ОбъектДанных.Метаданные(), ОбъектДанных.Ссылка, @@ -1385,7 +1477,7 @@ КонецЕсли; ЗаписьЖурналаРегистрации( - НСтр("ru = 'Электронная подпись.Удаление подписи'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Электронная подпись.Удаление подписи'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, ПодписанныйОбъект.Метаданные(), ПодписанныйОбъект.Ссылка, @@ -1399,36 +1491,7 @@ УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЭлектронныеПодписи.ПодписанныйОбъект, - | ЭлектронныеПодписи.ПорядковыйНомер КАК ПорядковыйНомер, - | ЭлектронныеПодписи.ДатаПодписи, - | ЭлектронныеПодписи.ДатаПроверкиПодписи, - | ЭлектронныеПодписи.ИмяФайлаПодписи, - | ЭлектронныеПодписи.Комментарий, - | ЭлектронныеПодписи.КомуВыданСертификат, - | ЭлектронныеПодписи.Отпечаток, - | ЭлектронныеПодписи.Подпись, - | ЭлектронныеПодписи.ПодписьВерна, - | ЭлектронныеПодписи.Сертификат, - | ЭлектронныеПодписи.УстановившийПодпись - |ИЗ - | РегистрСведений.ЭлектронныеПодписи КАК ЭлектронныеПодписи - |ГДЕ - | ЭлектронныеПодписи.ПодписанныйОбъект = &ПодписанныйОбъект - | - |УПОРЯДОЧИТЬ ПО - | ПорядковыйНомер"; - - Запрос.УстановитьПараметр("ПодписанныйОбъект", ПодписанныйОбъект.Ссылка); - - РезультатЗапроса = Запрос.Выполнить(); - - ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); - - ПодписанныйОбъект.ПодписанЭП = Ложь; + ПодписанЭП = Ложь; НаборЗаписей = РегистрыСведений.ЭлектронныеПодписи.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ПодписанныйОбъект.Установить(ПодписанныйОбъект.Ссылка); @@ -1438,9 +1501,13 @@ Для Каждого ЭлектроннаяПодписьОбъекта Из НаборЗаписей Цикл ЭлектроннаяПодписьОбъекта.ПорядковыйНомер = ПорядковыйНомер; ПорядковыйНомер = ПорядковыйНомер + 1; - ПодписанныйОбъект.ПодписанЭП = Истина; + ПодписанЭП = Истина; КонецЦикла; + Если ПодписанныйОбъект.ПодписанЭП <> ПодписанЭП Тогда + ПодписанныйОбъект.ПодписанЭП = ПодписанЭП; + КонецЕсли; + НаборЗаписей.Записать(Истина); УстановитьПривилегированныйРежим(Ложь); @@ -1465,14 +1532,20 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Объект", Объект, ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыВладельцев(ТолькоСсылки)); - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - Возврат; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПроверитьФайлОбработан(Объект, ИмяПроцедуры); КонецЕсли; - ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект,, - "РаботаСФайламиСлужебныйВызовСервера.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений", - ИмяПроцедуры); - КонецПроцедуры +Функция МодульЛокализации() + + Если ЭлектроннаяПодписьСлужебныйПовтИсп.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно Тогда + Возврат ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); + КонецЕсли; + Возврат Неопределено; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl index db763daae..7dd9f4658 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Возвращает текущую настройку использования электронных подписей. @@ -7,7 +15,7 @@ // Функция ИспользоватьЭлектронныеПодписи() Экспорт - Возврат ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ИспользоватьЭлектронныеПодписи; + Возврат ОбщиеНастройки().ИспользоватьЭлектронныеПодписи; КонецФункции @@ -18,7 +26,7 @@ // Функция ИспользоватьШифрование() Экспорт - Возврат ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ИспользоватьШифрование; + Возврат ОбщиеНастройки().ИспользоватьШифрование; КонецФункции @@ -29,7 +37,7 @@ // Функция ПроверятьЭлектронныеПодписиНаСервере() Экспорт - Возврат ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере; + Возврат ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере; КонецФункции @@ -41,7 +49,7 @@ // Функция СоздаватьЭлектронныеПодписиНаСервере() Экспорт - Возврат ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере; + Возврат ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере; КонецФункции @@ -112,7 +120,7 @@ // в ОписаниеДанных уже вставлен параметр ВыбранныйСертификат (см. ниже). // - Структура - со свойствами: // * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего -// модуля ЭлектроннаяПодписьКлиентСервер. +// модуля ЭлектроннаяПодписьКлиент. // * КонвертSOAP - Строка - шаблон сообщения . // * Объект - Ссылка - (необязательный) - ссылка на объект , к которому нужно добавить подпись. // Если не указан, то подпись не требуется добавлять. @@ -296,9 +304,6 @@ КлиентскиеПараметры.Вставить("ОбработкаРезультата", ОбработкаРезультата); ЭлектроннаяПодписьСлужебныйКлиент.НастроитьПредставлениеДанных(КлиентскиеПараметры, СерверныеПараметры); - Обработчик = Новый ОписаниеОповещения("СтандартноеЗавершение", - ЭлектроннаяПодписьСлужебныйКлиент, КлиентскиеПараметры); - ФормаДобавления = ОткрытьФорму("ОбщаяФорма.ДобавлениеЭлектроннойПодписиИзФайла", СерверныеПараметры,,,,, Новый ОписаниеОповещения("СтандартноеЗавершение", ЭлектроннаяПодписьСлужебныйКлиент, КлиентскиеПараметры)); @@ -311,16 +316,14 @@ ФормаДобавления.КлиентскиеПараметры = КлиентскиеПараметры; - ОбщиеНастройки = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); - Контекст = Новый Структура; Контекст.Вставить("ОбработкаРезультата", ОбработкаРезультата); Контекст.Вставить("ФормаДобавления", ФормаДобавления); Контекст.Вставить("ПроверитьМенеджерКриптографииНаКлиенте", Истина); Контекст.Вставить("ОписаниеДанных", ОписаниеДанных); - Если ( ОбщиеНастройки.ПроверятьЭлектронныеПодписиНаСервере - Или ОбщиеНастройки.СоздаватьЭлектронныеПодписиНаСервере) + Если ( ПроверятьЭлектронныеПодписиНаСервере() + Или СоздаватьЭлектронныеПодписиНаСервере()) И Не ЗначениеЗаполнено(ФормаДобавления.МенеджерКриптографииНаСервереОписаниеОшибки) Тогда Контекст.ПроверитьМенеджерКриптографииНаКлиенте = Ложь; @@ -400,7 +403,7 @@ // - Строка - адрес временного хранилища, содержащего исходные двоичные данные. // - Структура - со свойствами: // * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего -// модуля ЭлектроннаяПодписьКлиентСервер. +// модуля ЭлектроннаяПодписьКлиент. // * КонвертSOAP - Строка - шаблон сообщения . // // Подпись - ДвоичныеДанные - двоичные данные электронной подписи. @@ -886,7 +889,7 @@ // Процедура ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами() Экспорт - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://its.1c.ru/bmk/dsig/errors"); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://its.1c.ru/bmk/dsig/errors"); КонецПроцедуры @@ -913,6 +916,236 @@ КонецПроцедуры +// Возвращает представление сертификата в справочнике, формируемое +// из представления субъекта (КомуВыдан) и срока действия сертификата. +// +// Параметры: +// Сертификат - СертификатКриптографии - Сертификат криптографии. +// +// Возвращаемое значение: +// Строка - представление сертификата в справочнике. +// +Функция ПредставлениеСертификата(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСертификата(Сертификат, + ЭлектроннаяПодписьСлужебныйКлиент.ДобавкаВремени(), МодульЛокализации()); + +КонецФункции + +// Возвращает представление субъекта сертификата (КомуВыдан). +// +// Параметры: +// Сертификат - СертификатКриптографии - Сертификат криптографии. +// +// Возвращаемое значение: +// Строка - представление субъекта в формате "Фамилия Имя, Организация, Подразделение, Должность". +// Если ФИО не удалось определить, тогда оно заменяется на ОбщееИмя. +// Организация, Подразделение и Должность могут отсутствовать, если не указаны или +// их не удалось определить. +// +Функция ПредставлениеСубъекта(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеСубъекта(Сертификат, МодульЛокализации()); + +КонецФункции + +// Возвращает представление издателя сертификата (КемВыдан). +// +// Параметры: +// Сертификат - СертификатКриптографии - Сертификат криптографии. +// +// Возвращаемое значение: +// Строка - представление издателя в формате "ОбщееИмя, Организация, Подразделение", +// Организация и Подразделение могут отсутствовать, если не указаны. +// +Функция ПредставлениеИздателя(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеИздателя(Сертификат, МодульЛокализации()); + +КонецФункции + +// Возвращает основные свойства сертификата в виде структуры. +// +// Параметры: +// Сертификат - СертификатКриптографии - Сертификат криптографии. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * Отпечаток - Строка - отпечаток сертификата в формате строки Base64. +// * СерийныйНомер - ДвоичныеДанные - свойство сертификата СерийныйНомер. +// * Представление - Строка - см. ЭлектроннаяПодписьКлиент.ПредставлениеСертификата. +// * КомуВыдан - Строка - см. ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта. +// * КемВыдан - Строка - см. ЭлектроннаяПодписьКлиент.ПредставлениеИздателя. +// * ДатаНачала - Дата - свойство сертификата ДатаНачала в часовом поясе сеанса. +// * ДатаОкончания - Дата - свойство сертификата ДатаОкончания в часовом поясе сеанса. +// * Назначение - Строка - описание расширенного свойства сертификата EKU. +// * Подписание - Булево - свойство сертификата ИспользоватьДляПодписи. +// * Шифрование - Булево - свойство сертификата ИспользоватьДляШифрования. +// +Функция СвойстваСертификата(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(Сертификат, + ЭлектроннаяПодписьСлужебныйКлиент.ДобавкаВремени(), МодульЛокализации()); + +КонецФункции + +// Возвращает свойства субъекта сертификата криптографии. +// +// Параметры: +// Сертификат - СертификатКриптографии - для которого нужно вернуть свойства субъекта. +// +// Возвращаемое значение: +// Структура - со свойствами, состав которых зависит от национальной специфики. +// Пример для Российской Федерации: +// * ОбщееИмя - Строка - (64) - извлекается из поля CN. +// ЮЛ: В зависимости от типа конечного владельца СКПЭП +// - наименование организации; +// - название автоматизированной системы; +// - другое отображаемое имя по требованиям информационной системы. +// ФЛ: ФИО. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Страна - Строка - (2) - извлекается из поля C - двухсимвольный код страны +// согласно ИСО 3166-1:1997 (ГОСТ 7.67-2003). +// - Неопределено - нужное свойство сертификата не найдено. +// +// * Регион - Строка - (128) - извлекается из поля S - наименование субъекта РФ. +// ЮЛ: По адресу местонахождения. +// ФЛ: По адресу регистрации. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * НаселенныйПункт - Строка - (128) - извлекается из поля L - наименование населенного пункта. +// ЮЛ: По адресу местонахождения. +// ФЛ: По адресу регистрации. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Улица - Строка - (128) - извлекается из поля Street - наименование улицы, дома, офиса. +// ЮЛ: По адресу местонахождения. +// ФЛ: По адресу регистрации. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Организация - Строка - (64) - извлекается из поля O. +// ЮЛ: Полное или сокращенное наименование организации. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Подразделение - Строка - (64) - извлекается из поля OU. +// ЮЛ: В случае выпуска СКПЭП на должностное лицо - подразделение организации. +// Подразделение - это территориальная структурная единица крупной организации, +// которое обычно не заполняется в сертификате. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * ЭлектроннаяПочта - Строка - (128) - извлекается из поля E - адрес электронной почты. +// ЮЛ: адрес электронной почты должностного лица. +// ФЛ: адрес электронной почты физического лица. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Должность - Строка - (64) - извлекается из поля T. +// ЮЛ: В случае выпуска СКПЭП на должностное лицо - его должность. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * ОГРН - Строка - (13) - извлекается из поля OGRN. +// ЮЛ: ОГРН организации. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * ОГРНИП - Строка - (15) - извлекается из поля OGRNIP. +// ИП: ОГРН индивидуального предпринимателя. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * СНИЛС - Строка - (11) - извлекается из поля SNILS. +// ФЛ: СНИЛС +// ЮЛ: Не обязательно, в случае выпуска СКПЭП на должностное лицо - его СНИЛС. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * ИНН - Строка - (12) - извлекается из поля INN. +// ФЛ: ИНН. +// ИП: ИНН. +// ЮЛ: Не обязательно, но может быть заполнен для целей взаимодействия с ФНС. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Фамилия - Строка - (64) - извлекается из поля SN, если заполнено. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Имя - Строка - (64) - извлекается из поля GN, если заполнено. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Отчество - Строка - (64) - извлекается из поля GN, если заполнено. +// - Неопределено - такое свойство сертификата отсутствует. +// +Функция СвойстваСубъектаСертификата(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат, МодульЛокализации()); + +КонецФункции + +// Возвращает свойства издателя сертификата криптографии. +// +// Параметры: +// Сертификат - СертификатКриптографии - для которого нужно вернуть свойства издателя. +// +// Возвращаемое значение: +// Структура - со свойствами, состав которых зависит от национальной специфики. +// Пример для Российской Федерации: +// * ОбщееИмя - Строка - (64) - извлекается из поля CN - псевдоним удостоверяющего центра. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Страна - Строка - (2) - извлекается из поля C - двухсимвольный код страны +// согласно ИСО 3166-1:1997 (ГОСТ 7.67-2003). +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Регион - Строка - (128) - извлекается из поля S - наименование субъекта РФ +// по адресу местонахождения ПАК УЦ. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * НаселенныйПункт - Строка - (128) - извлекается из поля L - наименование населенного пункта +// по адресу местонахождения ПАК УЦ. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Улица - Строка - (128) - извлекается из поля Street - наименование улицы, дома, офиса +// по адресу местонахождения ПАК УЦ. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Организация - Строка - (64) - извлекается из поля O +// полное или сокращенное наименование организации. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * Подразделение - Строка - (64) - извлекается из поля OU подразделение организации. +// Подразделение - это территориальная структурная единица крупной организации, +// которое обычно не заполняется в сертификате. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * ЭлектроннаяПочта - Строка - (128) - извлекается из поля E - адрес электронной почты удостоверяющего центра. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * ОГРН - Строка - (13) - извлекается из поля OGRN - ОГРН организации удостоверяющего центра. +// - Неопределено - такое свойство сертификата отсутствует. +// +// * ИНН - Строка - (12) - извлекается из поля INN - ИНН организации удостоверяющего центра. +// - Неопределено - такое свойство сертификата отсутствует. +// +Функция СвойстваИздателяСертификата(Сертификат) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваИздателяСертификата(Сертификат, МодульЛокализации()); + +КонецФункции + +// Формирует структуру свойств для уточнения данных конверта 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() Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыXMLDSig(); + +КонецФункции + #Область ДляВызоваИзДругихПодсистем // ЭлектронноеВзаимодействие @@ -1150,10 +1383,6 @@ Возврат; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиентПодMacOS() Тогда - Возврат; - КонецЕсли; - СвойстваПодписи = Новый Структура( "ДатаПодписи, Комментарий, КомуВыданСертификат, Отпечаток, |АдресПодписи, УстановившийПодпись, АдресСертификата, @@ -1254,4 +1483,31 @@ КонецПроцедуры +// См. ЭлектроннаяПодпись.ПерсональныеНастройки. +Функция ПерсональныеНастройки() Экспорт + + Возврат СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭлектроннаяПодпись.ПерсональныеНастройки; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// См. ЭлектроннаяПодпись.ОбщиеНастройки. +Функция ОбщиеНастройки() Экспорт + + Возврат СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭлектроннаяПодпись.ОбщиеНастройки; + +КонецФункции + +Функция МодульЛокализации() + + Если СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭлектроннаяПодпись.ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно Тогда + Возврат ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); + КонецЕсли; + Возврат Неопределено; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl index a73f99251..684fcb22b 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс // Вызывается после создания на сервере, но до открытия форм ПодписаниеДанных, РасшифровкаДанных. diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl index 1451d775c..d81632ab9 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl @@ -1,645 +1,121 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс -// Возвращает представление сертификата в справочнике, формируемое -// - либо из фамилии, имени, организации, должности, срока действия. -// Л либо из общего имени и срока действия (если фамилия и имя не определены). -// -// Параметры: -// Сертификат - СертификатКриптографии - Сертификат криптографии. -// Отчество - Булево - включать отчество в представление. -// СрокДействия - Булево - включать срок действия в представление. -// -// Возвращаемое значение: -// Строка - представление сертификата в справочнике. +#Область УстаревшиеПроцедурыИФункции + +// Устарела. +// См. ЭлектроннаяПодписьКлиент.ПредставлениеСертификата. +// См. ЭлектроннаяПодпись.ПредставлениеСертификата. // Функция ПредставлениеСертификата(Сертификат, Отчество = Ложь, СрокДействия = Истина) Экспорт - ДатыСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатыСертификата(Сертификат); - - Возврат ПредставлениеСубъекта(Сертификат, Отчество) + ", " - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'до %1'"), - Формат(ДатыСертификата.ДатаОкончания, "ДФ=MM.yyyy")); +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если СрокДействия Тогда + Возврат ЭлектроннаяПодпись.ПредставлениеСертификата(Сертификат); + Иначе + Возврат ЭлектроннаяПодпись.ПредставлениеСубъекта(Сертификат); + КонецЕсли; +#Иначе + Если СрокДействия Тогда + Возврат ЭлектроннаяПодписьКлиент.ПредставлениеСертификата(Сертификат); + Иначе + Возврат ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта(Сертификат); + КонецЕсли; +#КонецЕсли КонецФункции -// Возвращает представление субъекта сертификата (КомуВыдан). -// -// Параметры: -// Сертификат - СертификатКриптографии - Сертификат криптографии. -// -// Отчество - Булево - включать отчество в представление. -// -// Возвращаемое значение: -// Строка - представление субъекта в формате "Фамилия Имя, Организация, Подразделение, Должность". -// Если ФИО не удалось определить, тогда оно заменяется на ОбщееИмя. -// Организация, Подразделение и Должность могут отсутствовать, если не указаны или -// их не удалось определить. +// Устарела. +// См. ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта. +// См. ЭлектроннаяПодпись.ПредставлениеСубъекта. // Функция ПредставлениеСубъекта(Сертификат, Отчество = Истина) Экспорт - Субъект = СвойстваСубъектаСертификата(Сертификат); - - Представление = ""; - - Если ЗначениеЗаполнено(Субъект.Фамилия) - И ЗначениеЗаполнено(Субъект.Имя) Тогда - - Представление = Субъект.Фамилия + " " + Субъект.Имя; - - ИначеЕсли ЗначениеЗаполнено(Субъект.Фамилия) Тогда - Представление = Субъект.Фамилия; - - ИначеЕсли ЗначениеЗаполнено(Субъект.Имя) Тогда - Представление = Субъект.Имя; - КонецЕсли; - - Если Отчество И ЗначениеЗаполнено(Субъект.Отчество) Тогда - Представление = Представление + " " + Субъект.Отчество; - КонецЕсли; - - Если ЗначениеЗаполнено(Представление) Тогда - Если ЗначениеЗаполнено(Субъект.Организация) Тогда - Представление = Представление + ", " + Субъект.Организация; - КонецЕсли; - Если ЗначениеЗаполнено(Субъект.Подразделение) Тогда - Представление = Представление + ", " + Субъект.Подразделение; - КонецЕсли; - Если ЗначениеЗаполнено(Субъект.Должность) Тогда - Представление = Представление + ", " + Субъект.Должность; - КонецЕсли; - - ИначеЕсли ЗначениеЗаполнено(Субъект.ОбщееИмя) Тогда - Представление = Субъект.ОбщееИмя; - КонецЕсли; - - Возврат Представление; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат ЭлектроннаяПодпись.ПредставлениеСубъекта(Сертификат); +#Иначе + Возврат ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта(Сертификат); +#КонецЕсли КонецФункции -// Возвращает представление издателя сертификата (КемВыдан). -// -// Параметры: -// Сертификат - СертификатКриптографии - Сертификат криптографии. -// -// Возвращаемое значение: -// Строка - представление издателя в формате "ОбщееИмя, Организация, Подразделение", -// Организация и Подразделение могут отсутствовать, если не указаны. +// Устарела. +// См. ЭлектроннаяПодписьКлиент.ПредставлениеИздателя. +// См. ЭлектроннаяПодпись.ПредставлениеИздателя. // Функция ПредставлениеИздателя(Сертификат) Экспорт - Издатель = СвойстваИздателяСертификата(Сертификат); - - Представление = ""; - - Если ЗначениеЗаполнено(Издатель.ОбщееИмя) Тогда - Представление = Издатель.ОбщееИмя; - КонецЕсли; - - Если ЗначениеЗаполнено(Издатель.ОбщееИмя) - И ЗначениеЗаполнено(Издатель.Организация) - И СтрНайти(Издатель.ОбщееИмя, Издатель.Организация) = 0 Тогда - - Представление = Издатель.ОбщееИмя + ", " + Издатель.Организация; - КонецЕсли; - - Если ЗначениеЗаполнено(Издатель.Подразделение) Тогда - Представление = Представление + ", " + Издатель.Подразделение; - КонецЕсли; - - Возврат Представление; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат ЭлектроннаяПодпись.ПредставлениеИздателя(Сертификат); +#Иначе + Возврат ЭлектроннаяПодписьКлиент.ПредставлениеИздателя(Сертификат); +#КонецЕсли КонецФункции -// Заполняет структуру полями сертификата. -// -// Параметры: -// Сертификат - СертификатКриптографии - Сертификат криптографии. -// -// Возвращаемое значение: -// Структура - Структура с полями сертификата. +// Устарела. +// См. ЭлектроннаяПодписьКлиент.СвойстваСертификата. +// См. ЭлектроннаяПодпись.СвойстваСертификата. // Функция ЗаполнитьСтруктуруСертификата(Сертификат) Экспорт - ДатыСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатыСертификата(Сертификат); - - Свойства = Новый Структура; - Свойства.Вставить("Отпечаток", Base64Строка(Сертификат.Отпечаток)); - Свойства.Вставить("Представление", ПредставлениеСертификата(Сертификат)); - Свойства.Вставить("КомуВыдан", ПредставлениеСубъекта(Сертификат)); - Свойства.Вставить("КемВыдан", ПредставлениеИздателя(Сертификат)); - Свойства.Вставить("ДействителенДо", ДатыСертификата.ДатаОкончания); - Свойства.Вставить("Назначение", ПолучитьНазначение(Сертификат)); - - Возврат Свойства; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат ЭлектроннаяПодпись.СвойстваСертификата(Сертификат); +#Иначе + Возврат ЭлектроннаяПодписьКлиент.СвойстваСертификата(Сертификат); +#КонецЕсли КонецФункции -// Формирует структуру свойств для уточнения данных конверта 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АлгоритмаХеширования", ""); - - Возврат ДанныеАлгоритмаПодписания; - -КонецФункции - -// Возвращает свойства субъекта сертификата криптографии с учетом их состава (ЮЛ,ИП,ФЛ). -// -// Параметры: -// Сертификат - СертификатКриптографии - для которого нужно вернуть свойства субъекта. -// -// Возвращаемое значение: -// Структура - возвращаемое значение, со свойствами: -// * ОбщееИмя - Строка - (64) - извлекается из поля CN. -// ЮЛ: В зависимости от типа конечного владельца СКПЭП -// - наименование организации; -// - название автоматизированной системы; -// - другое отображаемое имя по требованиям информационной системы. -// ФЛ: ФИО. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Страна - Строка - (2) - извлекается из поля C - двухсимвольный код страны -// согласно ГОСТ 7.67-2003 (ИСО 3166-1:1997). -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Регион - Строка - (128) - извлекается из поля S - наименование субъекта РФ. -// ЮЛ: По адресу местонахождения. -// ФЛ: По адресу регистрации. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * НаселенныйПункт - Строка - (128) - извлекается из поля L - наименование населенного пункта. -// ЮЛ: По адресу местонахождения. -// ФЛ: По адресу регистрации. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Улица - Строка - (128) - извлекается из поля Street - наименование улицы, дома, офиса. -// ЮЛ: По адресу местонахождения. -// ФЛ: По адресу регистрации. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Организация - Строка - (64) - извлекается из поля O. -// ЮЛ: Полное или сокращенное наименование организации. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Подразделение - Строка - (64) - извлекается из поля OU. -// ЮЛ: В случае выпуска СКПЭП на должностное лицо - подразделение организации. -// Подразделение - это территориальная структурная единица крупной организации, -// которое обычно не заполняется в сертификате. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Должность - Строка - (64) - извлекается из поля T. -// ЮЛ: В случае выпуска СКПЭП на должностное лицо - его должность. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * ЭлектроннаяПочта - Строка - (128) - извлекается из поля E - адрес электронной почты. -// ЮЛ: адрес электронной почты должностного лица. -// ФЛ: адрес электронной почты физического лица. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * ОГРН - Строка - (13) - извлекается из поля OGRN. -// ЮЛ: ОГРН организации. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * ОГРНИП - Строка - (15) - извлекается из поля OGRNIP. -// ИП: ОГРН индивидуального предпринимателя. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * СНИЛС - Строка - (11) - извлекается из поля SNILS. -// ФЛ: СНИЛС -// ЮЛ: Не обязательно, в случае выпуска СКПЭП на должностное лицо - его СНИЛС. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * ИНН - Строка - (12) - извлекается из поля INN. -// ФЛ: ИНН. -// ИП: ИНН. -// ЮЛ: Не обязательно, но может быть заполнен для целей взаимодействия с ФНС. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Фамилия - Строка - (64) - извлекается из поля SN, если заполнено. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Имя - Строка - (64) - извлекается из поля GN, если заполнено. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Отчество - Строка - (64) - извлекается из поля GN, если заполнено. -// - Неопределено - нужное свойство сертификата не найдено. +// Устарела. +// См. ЭлектроннаяПодписьКлиент.СвойстваСубъектаСертификата. +// См. ЭлектроннаяПодпись.СвойстваСубъектаСертификата. // Функция СвойстваСубъектаСертификата(Сертификат) Экспорт - Субъект = Сертификат.Субъект; - - Свойства = Новый Структура; - Свойства.Вставить("ОбщееИмя"); - Свойства.Вставить("Страна"); - Свойства.Вставить("Регион"); - Свойства.Вставить("НаселенныйПункт"); - Свойства.Вставить("Улица"); - Свойства.Вставить("Организация"); - Свойства.Вставить("Подразделение"); - Свойства.Вставить("Должность"); - Свойства.Вставить("ЭлектроннаяПочта"); - Свойства.Вставить("ОГРН"); - Свойства.Вставить("ОГРНИП"); - Свойства.Вставить("СНИЛС"); - Свойства.Вставить("ИНН"); - Свойства.Вставить("Фамилия"); - Свойства.Вставить("Имя"); - Свойства.Вставить("Отчество"); - - Если Субъект.Свойство("CN") Тогда - Свойства.ОбщееИмя = ПодготовитьСтроку(Субъект.CN); - КонецЕсли; - - Если Субъект.Свойство("C") Тогда - Свойства.Страна = ПодготовитьСтроку(Субъект.C); - КонецЕсли; - - Если Субъект.Свойство("ST") Тогда - Свойства.Регион = ПодготовитьСтроку(Субъект.ST); - КонецЕсли; - - Если Субъект.Свойство("L") Тогда - Свойства.НаселенныйПункт = ПодготовитьСтроку(Субъект.L); - КонецЕсли; - - Если Субъект.Свойство("Street") Тогда - Свойства.Улица = ПодготовитьСтроку(Субъект.Street); - КонецЕсли; - - Если Субъект.Свойство("O") Тогда - Свойства.Организация = ПодготовитьСтроку(Субъект.O); - КонецЕсли; - - Если Субъект.Свойство("OU") Тогда - Свойства.Подразделение = ПодготовитьСтроку(Субъект.OU); - КонецЕсли; - - Если Субъект.Свойство("E") Тогда - Свойства.ЭлектроннаяПочта = ПодготовитьСтроку(Субъект.E); - КонецЕсли; - - Если Субъект.Свойство("OGRN")Тогда - Свойства.ОГРН = ПодготовитьСтроку(Субъект.OGRN); - - ИначеЕсли Субъект.Свойство("OID1_2_643_100_1") Тогда - Свойства.ОГРН = ПодготовитьСтроку(Субъект.OID1_2_643_100_1); - КонецЕсли; - - Если Субъект.Свойство("OGRNIP") Тогда - Свойства.ОГРНИП = ПодготовитьСтроку(Субъект.OGRNIP); - - ИначеЕсли Субъект.Свойство("OID1_2_643_100_5") Тогда - Свойства.ОГРНИП = ПодготовитьСтроку(Субъект.OID1_2_643_100_5); - КонецЕсли; - - Если Субъект.Свойство("SNILS") Тогда - Свойства.СНИЛС = ПодготовитьСтроку(Субъект.SNILS); - - ИначеЕсли Субъект.Свойство("OID1_2_643_100_3") Тогда - Свойства.СНИЛС = ПодготовитьСтроку(Субъект.OID1_2_643_100_3); - КонецЕсли; - - Если Субъект.Свойство("INN") Тогда - Свойства.ИНН = ПодготовитьСтроку(Субъект.INN); - - ИначеЕсли Субъект.Свойство("OID1_2_643_3_131_1_1")Тогда - Свойства.ИНН = ПодготовитьСтроку(Субъект.OID1_2_643_3_131_1_1); - КонецЕсли; - - Если Субъект.Свойство("SN") Тогда // Наличие фамилии (обычно для должностного лица). - - // Извлечение ФИО из поля SN и GN. - Свойства.Фамилия = ПодготовитьСтроку(Субъект.SN); - - Если Субъект.Свойство("GN") Тогда - GivenName = ПодготовитьСтроку(Субъект.GN); - Позиция = СтрНайти(GivenName, " "); - Если Позиция = 0 Тогда - Свойства.Имя = GivenName; - Иначе - Свойства.Имя = Лев(GivenName, Позиция - 1); - Свойства.Отчество = ПодготовитьСтроку(Сред(GivenName, Позиция + 1)); - КонецЕсли; - КонецЕсли; - - ИначеЕсли Субъект.Свойство("OGRNIP") // Признак индивидуального предпринимателя. - Или Субъект.Свойство("OID1_2_643_100_5") // Признак индивидуального предпринимателя. - Или Субъект.Свойство("T") // Признак должностного лица. - Или Субъект.Свойство("OID2_5_4_12") // Признак должностного лица. - Или Субъект.Свойство("SNILS") // Признак физического лица. - Или Субъект.Свойство("OID1_2_643_100_3") // Признак физического лица. - Или ЭтоИННФизЛица(Субъект.Свойство("INN")) // Признак физического лица. - Или ЭтоИННФизЛица(Субъект.Свойство("OID1_2_643_3_131_1_1")) Тогда // Признак физического лица. - - Если Свойства.ОбщееИмя <> Свойства.Организация - И Не (Субъект.Свойство("T") И Свойства.ОбщееИмя = ПодготовитьСтроку(Субъект.T)) - И Не (Субъект.Свойство("OID2_5_4_12") И Свойства.ОбщееИмя = ПодготовитьСтроку(Субъект.OID2_5_4_12)) Тогда - - // Извлечение ФИО из поля CN. - Массив = СтрРазделить(Свойства.ОбщееИмя, " ", Ложь); - - Если Массив.Количество() < 4 Тогда - Если Массив.Количество() > 0 Тогда - Свойства.Фамилия = СокрЛП(Массив[0]); - КонецЕсли; - Если Массив.Количество() > 1 Тогда - Свойства.Имя = СокрЛП(Массив[1]); - КонецЕсли; - Если Массив.Количество() > 2 Тогда - Свойства.Отчество = СокрЛП(Массив[2]); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если ЗначениеЗаполнено(Свойства.Фамилия) - Или ЗначениеЗаполнено(Свойства.Имя) Тогда - - Если Субъект.Свойство("T") Тогда - Свойства.Должность = ПодготовитьСтроку(Субъект.T); - - ИначеЕсли Субъект.Свойство("OID2_5_4_12") Тогда - Свойства.Должность = ПодготовитьСтроку(Субъект.OID2_5_4_12); - КонецЕсли; - КонецЕсли; - - Возврат Свойства; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат ЭлектроннаяПодпись.СвойстваСубъектаСертификата(Сертификат); +#Иначе + Возврат ЭлектроннаяПодписьКлиент.СвойстваСубъектаСертификата(Сертификат); +#КонецЕсли КонецФункции -// Возвращает свойства издателя сертификата криптографии. -// -// Параметры: -// Сертификат - СертификатКриптографии - для которого нужно вернуть свойства издателя. -// -// Возвращаемое значение: -// Структура - возвращаемое значение, со свойствами: -// * ОбщееИмя - Строка - (64) - извлекается из поля CN - псевдоним удостоверяющего центра. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Страна - Строка - (2) - извлекается из поля C - двухсимвольный код страны -// согласно ГОСТ 7.67-2003 (ИСО 3166-1:1997). -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Регион - Строка - (128) - извлекается из поля S - наименование субъекта РФ -// по адресу местонахождения ПАК УЦ. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * НаселенныйПункт - Строка - (128) - извлекается из поля L - наименование населенного пункта -// по адресу местонахождения ПАК УЦ. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Улица - Строка - (128) - извлекается из поля Street - наименование улицы, дома, офиса -// по адресу местонахождения ПАК УЦ. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Организация - Строка - (64) - извлекается из поля O -// полное или сокращенное наименование организации. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * Подразделение - Строка - (64) - извлекается из поля OU подразделение организации. -// Подразделение - это территориальная структурная единица крупной организации, -// которое обычно не заполняется в сертификате. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * ЭлектроннаяПочта - Строка - (128) - извлекается из поля E - адрес электронной почты удостоверяющего центра. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * ОГРН - Строка - (13) - извлекается из поля OGRN- ОГРН организации удостоверяющего центра. -// - Неопределено - нужное свойство сертификата не найдено. -// -// * ИНН - Строка - (12) - извлекается из поля INN - ИНН организации удостоверяющего центра. -// - Неопределено - нужное свойство сертификата не найдено. +// Устарела. +// См. ЭлектроннаяПодписьКлиент.СвойстваИздателяСертификата. +// См. ЭлектроннаяПодпись.СвойстваИздателяСертификата. // Функция СвойстваИздателяСертификата(Сертификат) Экспорт - Издатель = Сертификат.Издатель; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат ЭлектроннаяПодпись.СвойстваИздателяСертификата(Сертификат); +#Иначе + Возврат ЭлектроннаяПодписьКлиент.СвойстваИздателяСертификата(Сертификат); +#КонецЕсли - Свойства = Новый Структура; - Свойства.Вставить("ОбщееИмя"); - Свойства.Вставить("Страна"); - Свойства.Вставить("Регион"); - Свойства.Вставить("НаселенныйПункт"); - Свойства.Вставить("Улица"); - Свойства.Вставить("Организация"); - Свойства.Вставить("Подразделение"); - Свойства.Вставить("ЭлектроннаяПочта"); - Свойства.Вставить("ОГРН"); - Свойства.Вставить("ИНН"); +КонецФункции + +// Устарела. +// См. ЭлектроннаяПодписьКлиент.ПараметрыXMLDSig. +// См. ЭлектроннаяПодпись.ПараметрыXMLDSig. +// +Функция ПараметрыXMLDSig() Экспорт - Если Издатель.Свойство("CN") Тогда - Свойства.ОбщееИмя = ПодготовитьСтроку(Издатель.CN); - КонецЕсли; - - Если Издатель.Свойство("C") Тогда - Свойства.Страна = ПодготовитьСтроку(Издатель.C); - КонецЕсли; - - Если Издатель.Свойство("ST") Тогда - Свойства.Регион = ПодготовитьСтроку(Издатель.ST); - КонецЕсли; - - Если Издатель.Свойство("L") Тогда - Свойства.НаселенныйПункт = ПодготовитьСтроку(Издатель.L); - КонецЕсли; - - Если Издатель.Свойство("Street") Тогда - Свойства.Улица = ПодготовитьСтроку(Издатель.Street); - КонецЕсли; - - Если Издатель.Свойство("O") Тогда - Свойства.Организация = ПодготовитьСтроку(Издатель.O); - КонецЕсли; - - Если Издатель.Свойство("OU") Тогда - Свойства.Подразделение = ПодготовитьСтроку(Издатель.OU); - КонецЕсли; - - Если Издатель.Свойство("E") Тогда - Свойства.ЭлектроннаяПочта = ПодготовитьСтроку(Издатель.E); - КонецЕсли; - - Если Издатель.Свойство("OGRN") Тогда - Свойства.ОГРН = ПодготовитьСтроку(Издатель.OGRN); - - ИначеЕсли Издатель.Свойство("OID1_2_643_100_1") Тогда - Свойства.ОГРН = ПодготовитьСтроку(Издатель.OID1_2_643_100_1); - КонецЕсли; - - Если Издатель.Свойство("INN") Тогда - Свойства.ИНН = ПодготовитьСтроку(Издатель.INN); - - ИначеЕсли Издатель.Свойство("OID1_2_643_3_131_1_1")Тогда - Свойства.ИНН = ПодготовитьСтроку(Издатель.OID1_2_643_3_131_1_1); - КонецЕсли; - - Возврат Свойства; +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат ЭлектроннаяПодпись.ПараметрыXMLDSig(); +#Иначе + Возврат ЭлектроннаяПодписьКлиент.ПараметрыXMLDSig(); +#КонецЕсли КонецФункции #КонецОбласти -#Область СлужебныйПрограммныйИнтерфейс - -// Возвращает структуру, содержащую различные общие настройки. -// -// Возвращаемое значение: -// См. ЭлектроннаяПодпись.ОбщиеНастройки(). -// -// См. также: -// ОбщаяФорма.НастройкиЭлектроннойПодписиИШифрования - место определения данных параметров и -// их текстовые описания. -// -Функция ОбщиеНастройки() Экспорт - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Возврат ЭлектроннаяПодпись.ОбщиеНастройки(); - #Иначе - Возврат СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭлектроннаяПодпись.ОбщиеНастройки; - #КонецЕсли -КонецФункции - -// Возвращает структуру, содержащую различные персональные настройки. -// -// Возвращаемое значение: -// Структура - Персональные настройки для работы с электронной подписью. -// * ДействияПриСохраненииСЭП - Строка - Что делать при сохранении файлов с электронной подписью: -// ** "Спрашивать" - Показывать диалог выбора подписей для сохранения. -// ** "СохранятьВсеПодписи" - Всегда все подписи. -// * ПутиКПрограммамЭлектроннойПодписиИШифрования - Соответствие - где: -// ** Ключ - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования - программа. -// ** Значение - Строка - путь к программе на компьютере пользователя. -// * РасширениеДляФайловПодписи - Строка - Расширение для файлов ЭП. -// * РасширениеДляЗашифрованныхФайлов - Строка - Расширение для зашифрованных файлов. -// -// См. также: -// ОбщаяФорма.НастройкиЭлектроннойПодписиИШифрования - место ввода данных параметров и -// их пользовательские представления. -// -Функция ПерсональныеНастройки() Экспорт - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - Возврат ЭлектроннаяПодпись.ПерсональныеНастройки(); - #Иначе - Возврат СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭлектроннаяПодпись.ПерсональныеНастройки; - #КонецЕсли -КонецФункции - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Заполняет таблицу описания сертификата из четырех полей: КомуВыдан, КемВыдан, ДействуетДо, Назначение. -Функция ЗаполнитьОписаниеДанныхСертификата(Таблица, Сертификат) Экспорт - - Если ТипЗнч(Сертификат) = Тип("СертификатКриптографии") Или ТипЗнч(Сертификат) = Тип("ФиксированнаяСтруктура") Тогда - СтруктураСертификата = ЗаполнитьСтруктуруСертификата(Сертификат); - ДляПодписи = Сертификат.ИспользоватьДляПодписи; - ДляШифрования = Сертификат.ИспользоватьДляШифрования; - - Иначе // Это ДанныеФормыСтруктура объекта справочника. - СтруктураСертификата = Сертификат; - ДляПодписи = Сертификат.Подписание; - ДляШифрования = Сертификат.Шифрование; - КонецЕсли; - - Если ДляПодписи И ДляШифрования Тогда - Назначение = НСтр("ru = 'Подписание данных, Шифрование данных'"); - - ИначеЕсли ДляПодписи Тогда - Назначение = НСтр("ru = 'Подписание данных'"); - Иначе - Назначение = НСтр("ru = 'Шифрование данных'"); - КонецЕсли; - - Таблица.Очистить(); - Строка = Таблица.Добавить(); - Строка.Свойство = НСтр("ru = 'Кому выдан:'"); - Строка.Значение = СокрЛП(СтруктураСертификата.КомуВыдан); - - Строка = Таблица.Добавить(); - Строка.Свойство = НСтр("ru = 'Кем выдан:'"); - Строка.Значение = СокрЛП(СтруктураСертификата.КемВыдан); - - Строка = Таблица.Добавить(); - Строка.Свойство = НСтр("ru = 'Действителен до:'"); - Строка.Значение = Формат(СтруктураСертификата.ДействителенДо, "ДЛФ=D"); - - Строка = Таблица.Добавить(); - Строка.Свойство = НСтр("ru = 'Назначение:'"); - Строка.Значение = Назначение; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. - -// Получает назначение сертификата. -// -// Параметры: -// Сертификат - СертификатКриптографии - сертификат назначение которого нужно получить. -// -Функция ПолучитьНазначение(Сертификат) - - Если Не Сертификат.РасширенныеСвойства.Свойство("EKU") Тогда - Возврат ""; - КонецЕсли; - - ФиксированныйМассивСвойств = Сертификат.РасширенныеСвойства.EKU; - - Назначение = ""; - - Для Индекс = 0 По ФиксированныйМассивСвойств.Количество() - 1 Цикл - Назначение = Назначение + ФиксированныйМассивСвойств.Получить(Индекс); - Назначение = Назначение + Символы.ПС; - КонецЦикла; - - Возврат ПодготовитьСтроку(Назначение); - -КонецФункции - -Функция ЭтоИННФизЛица(ИНН) - - Если СтрДлина(ИНН) <> 12 Тогда - Возврат Ложь; - КонецЕсли; - - Для НомерСимвола = 1 По 12 Цикл - Если СтрНайти("0123456789", Сред(ИНН,НомерСимвола,1)) = 0 Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Если СтрНачинаетсяС(ИНН, "00") Тогда - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -Функция ПодготовитьСтроку(СтрокаИзСертификата) - - Возврат СокрЛП(ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(СтрокаИзСертификата)); - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/Module.bsl new file mode 100644 index 000000000..634574547 --- /dev/null +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/Module.bsl @@ -0,0 +1,232 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Функция ПредставлениеСертификата(Сертификат, ДобавкаВремени) Экспорт + + ДатыСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатыСертификата(Сертификат, ДобавкаВремени); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1, до %2'"), + ПредставлениеСубъекта(Сертификат, Ложь), + Формат(ДатыСертификата.ДатаОкончания, "ДФ=MM.yyyy")); + +КонецФункции + +Функция ПредставлениеСубъекта(Сертификат, Отчество = Истина) Экспорт + + Субъект = ЭлектроннаяПодписьКлиентСервер.СвойстваСубъектаСертификата(Сертификат); + + Представление = ""; + + Если ЗначениеЗаполнено(Субъект.Фамилия) + И ЗначениеЗаполнено(Субъект.Имя) Тогда + + Представление = Субъект.Фамилия + " " + Субъект.Имя; + + ИначеЕсли ЗначениеЗаполнено(Субъект.Фамилия) Тогда + Представление = Субъект.Фамилия; + + ИначеЕсли ЗначениеЗаполнено(Субъект.Имя) Тогда + Представление = Субъект.Имя; + КонецЕсли; + + Если Отчество И ЗначениеЗаполнено(Субъект.Отчество) Тогда + Представление = Представление + " " + Субъект.Отчество; + КонецЕсли; + + Если ЗначениеЗаполнено(Представление) Тогда + Если ЗначениеЗаполнено(Субъект.Организация) Тогда + Представление = Представление + ", " + Субъект.Организация; + КонецЕсли; + Если ЗначениеЗаполнено(Субъект.Подразделение) Тогда + Представление = Представление + ", " + Субъект.Подразделение; + КонецЕсли; + Если ЗначениеЗаполнено(Субъект.Должность) Тогда + Представление = Представление + ", " + Субъект.Должность; + КонецЕсли; + + ИначеЕсли ЗначениеЗаполнено(Субъект.ОбщееИмя) Тогда + Представление = Субъект.ОбщееИмя; + КонецЕсли; + + Возврат Представление; + +КонецФункции + +Функция РасширенныеСвойстваСубъектаСертификата(Субъект) Экспорт + + Свойства = Новый Структура; + Свойства.Вставить("ОГРН"); + Свойства.Вставить("ОГРНИП"); + Свойства.Вставить("СНИЛС"); + Свойства.Вставить("ИНН"); + Свойства.Вставить("Фамилия"); + Свойства.Вставить("Имя"); + Свойства.Вставить("Отчество"); + Свойства.Вставить("Должность"); + + Если Субъект.Свойство("OGRN")Тогда + Свойства.ОГРН = ПодготовитьСтроку(Субъект.OGRN); + + ИначеЕсли Субъект.Свойство("OID1_2_643_100_1") Тогда + Свойства.ОГРН = ПодготовитьСтроку(Субъект.OID1_2_643_100_1); + КонецЕсли; + + Если Субъект.Свойство("OGRNIP") Тогда + Свойства.ОГРНИП = ПодготовитьСтроку(Субъект.OGRNIP); + + ИначеЕсли Субъект.Свойство("OID1_2_643_100_5") Тогда + Свойства.ОГРНИП = ПодготовитьСтроку(Субъект.OID1_2_643_100_5); + КонецЕсли; + + Если Субъект.Свойство("SNILS") Тогда + Свойства.СНИЛС = ПодготовитьСтроку(Субъект.SNILS); + + ИначеЕсли Субъект.Свойство("OID1_2_643_100_3") Тогда + Свойства.СНИЛС = ПодготовитьСтроку(Субъект.OID1_2_643_100_3); + КонецЕсли; + + Если Субъект.Свойство("INN") Тогда + Свойства.ИНН = ПодготовитьСтроку(Субъект.INN); + + ИначеЕсли Субъект.Свойство("OID1_2_643_3_131_1_1")Тогда + Свойства.ИНН = ПодготовитьСтроку(Субъект.OID1_2_643_3_131_1_1); + КонецЕсли; + + Если Субъект.Свойство("SN") Тогда // Наличие фамилии (обычно для должностного лица). + + // Извлечение ФИО из поля SN и GN. + Свойства.Фамилия = ПодготовитьСтроку(Субъект.SN); + + Если Субъект.Свойство("GN") Тогда + GivenName = ПодготовитьСтроку(Субъект.GN); + Позиция = СтрНайти(GivenName, " "); + Если Позиция = 0 Тогда + Свойства.Имя = GivenName; + Иначе + Свойства.Имя = Лев(GivenName, Позиция - 1); + Свойства.Отчество = ПодготовитьСтроку(Сред(GivenName, Позиция + 1)); + КонецЕсли; + КонецЕсли; + + ИначеЕсли Субъект.Свойство("OGRNIP") // Признак индивидуального предпринимателя. + Или Субъект.Свойство("OID1_2_643_100_5") // Признак индивидуального предпринимателя. + Или Субъект.Свойство("T") // Признак должностного лица. + Или Субъект.Свойство("OID2_5_4_12") // Признак должностного лица. + Или Субъект.Свойство("SNILS") // Признак физического лица. + Или Субъект.Свойство("OID1_2_643_100_3") // Признак физического лица. + Или ЭтоИННФизЛица(Субъект.Свойство("INN")) // Признак физического лица. + Или ЭтоИННФизЛица(Субъект.Свойство("OID1_2_643_3_131_1_1")) Тогда // Признак физического лица. + + Если Свойства.ОбщееИмя <> Свойства.Организация + И Не (Субъект.Свойство("T") И Свойства.ОбщееИмя = ПодготовитьСтроку(Субъект.T)) + И Не (Субъект.Свойство("OID2_5_4_12") И Свойства.ОбщееИмя = ПодготовитьСтроку(Субъект.OID2_5_4_12)) Тогда + + // Извлечение ФИО из поля CN. + Массив = СтрРазделить(Свойства.ОбщееИмя, " ", Ложь); + + Если Массив.Количество() < 4 Тогда + Если Массив.Количество() > 0 Тогда + Свойства.Фамилия = СокрЛП(Массив[0]); + КонецЕсли; + Если Массив.Количество() > 1 Тогда + Свойства.Имя = СокрЛП(Массив[1]); + КонецЕсли; + Если Массив.Количество() > 2 Тогда + Свойства.Отчество = СокрЛП(Массив[2]); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(Свойства.Фамилия) Или ЗначениеЗаполнено(Свойства.Имя) Тогда + Если Субъект.Свойство("T") Тогда + Свойства.Должность = ПодготовитьСтроку(Субъект.T); + + ИначеЕсли Субъект.Свойство("OID2_5_4_12") Тогда + Свойства.Должность = ПодготовитьСтроку(Субъект.OID2_5_4_12); + КонецЕсли; + КонецЕсли; + + Возврат Свойства; + +КонецФункции + +Функция ПредставленияСвойствСубъектаСертификата() Экспорт + + ПредставленияСвойств = Новый Соответствие; + ПредставленияСвойств["Должность"] = НСтр("ru = 'Должность'"); + ПредставленияСвойств["ОГРН"] = НСтр("ru = 'ОГРН'"); + ПредставленияСвойств["ОГРНИП"] = НСтр("ru = 'ОГРНИП'"); + ПредставленияСвойств["СНИЛС"] = НСтр("ru = 'СНИЛС'"); + ПредставленияСвойств["ИНН"] = НСтр("ru = 'ИНН'"); + ПредставленияСвойств["Фамилия"] = НСтр("ru = 'Фамилия'"); + ПредставленияСвойств["Имя"] = НСтр("ru = 'Имя'"); + ПредставленияСвойств["Отчество"] = НСтр("ru = 'Отчество'"); + Возврат ПредставленияСвойств; + +КонецФункции + +Функция РасширенныеСвойстваИздателяСертификата(Издатель) Экспорт + + Свойства = Новый Структура; + Свойства.Вставить("ОГРН"); + Свойства.Вставить("ИНН"); + + Если Издатель.Свойство("OGRN") Тогда + Свойства.ОГРН = ПодготовитьСтроку(Издатель.OGRN); + + ИначеЕсли Издатель.Свойство("OID1_2_643_100_1") Тогда + Свойства.ОГРН = ПодготовитьСтроку(Издатель.OID1_2_643_100_1); + КонецЕсли; + + Если Издатель.Свойство("INN") Тогда + Свойства.ИНН = ПодготовитьСтроку(Издатель.INN); + + ИначеЕсли Издатель.Свойство("OID1_2_643_3_131_1_1")Тогда + Свойства.ИНН = ПодготовитьСтроку(Издатель.OID1_2_643_3_131_1_1); + КонецЕсли; + + Возврат Свойства; + +КонецФункции + +Функция ПредставленияСвойствИздателяСертификата() Экспорт + + ПредставленияСвойств = Новый Соответствие; + ПредставленияСвойств["ОГРН"] = НСтр("ru = 'ОГРН'"); + ПредставленияСвойств["ИНН"] = НСтр("ru = 'ИНН'"); + Возврат ПредставленияСвойств; + +КонецФункции + +Функция ПодготовитьСтроку(СтрокаИзСертификата) + Возврат СокрЛП(ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(СтрокаИзСертификата)); +КонецФункции + +Функция ЭтоИННФизЛица(ИНН) + + Если СтрДлина(ИНН) <> 12 Тогда + Возврат Ложь; + КонецЕсли; + + Для НомерСимвола = 1 По 12 Цикл + Если СтрНайти("0123456789", Сред(ИНН,НомерСимвола,1)) = 0 Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Если СтрНачинаетсяС(ИНН, "00") Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/ЭлектроннаяПодписьЛокализацияКлиентСервер.mdo b/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/ЭлектроннаяПодписьЛокализацияКлиентСервер.mdo new file mode 100644 index 000000000..e46154b8f --- /dev/null +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализацияКлиентСервер/ЭлектроннаяПодписьЛокализацияКлиентСервер.mdo @@ -0,0 +1,12 @@ + + + ЭлектроннаяПодписьЛокализацияКлиентСервер + + ru + Электронная подпись локализация клиент сервер + + true + true + true + true + diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl index 61dbe1fe4..bdb449de8 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьПереопределяемый/Module.bsl @@ -1,218 +1,13 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ПрограммныйИнтерфейс -// Вызывается в форме добавления заявления на новый сертификат для заполнения реквизитов организации и при ее выборе. -// -// Параметры: -// Параметры - Структура - со свойствами: -// -// * Организация - СправочникСсылка.Организации - организация, которую нужно заполнить. -// Если организация уже заполнена, требуется перезаполнить ее свойства, например, -// при повтором вызове, когда пользователь выбрал другую организацию. -// - Неопределено, если ОпределяемыйТип.Организации не настроен. -// Пользователю недоступен выбор организации. -// -// * ЭтоИндивидуальныйПредприниматель - Булево - (возвращаемое значение): -// Ложь - начальное значение - указанная организация является юридическим лицом, -// Истина - указанная организация является индивидуальным предпринимателем. -// -// * НаименованиеСокращенное - Строка - (возвращаемое значение) краткое наименование организации. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * НаименованиеПолное - Строка - (возвращаемое значение) краткое наименование организации. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * ИНН - Строка - (возвращаемое значение) ИНН организации. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * КПП - Строка - (возвращаемое значение) КПП организации. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * ОГРН - Строка - (возвращаемое значение) ОГРН организации. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * РасчетныйСчет - Строка - (возвращаемое значение) основной расчетный счет организации для договора. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * БИК - Строка - (возвращаемое значение) БИК банка расчетного счета. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * КорреспондентскийСчет - Строка - (возвращаемое значение) корреспондентский счет банка расчетного счета. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * Телефон - Строка - (возвращаемое значение) телефон организации в формате JSON, как его -// возвращает функция КонтактнаяИнформацияОбъекта общего модуля УправлениеКонтактнойИнформацией. -// -// * ЮридическийАдрес - Строка - (возвращаемое значение) юридический адрес организации в формате JSON, как его -// возвращает функция КонтактнаяИнформацияОбъекта общего модуля УправлениеКонтактнойИнформацией. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * ФактическийАдрес - Строка - (возвращаемое значение) фактический адрес организации в формате JSON, как его -// возвращает функция КонтактнаяИнформацияОбъекта общего модуля УправлениеКонтактнойИнформацией. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -Процедура ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Параметры) Экспорт - - - -КонецПроцедуры - -// Вызывается в форме добавления заявления на новый сертификат для заполнении реквизитов владельца и при его выборе. -// -// Параметры: -// Параметры - Структура - со свойствами: -// * Организация - СправочникСсылка.Организации - выбранная организация, на которую оформляется сертификат. -// - Неопределено, если ОпределяемыйТип.Организации не настроен. -// -// * ТипВладельца - ОписаниеТипов - (возвращаемое значение) содержит ссылочные типы из которых можно сделать выбор. -// - Неопределено - (возвращаемое значение) выбор владельца не поддерживается. -// -// * Сотрудник - ТипВладельца - (возвращаемое значение) - это владелец сертификата, которого нужно заполнить. -// Если уже заполнен (выбран пользователем), его не следует изменять. -// - Неопределено - если ТипВладельца не определен, тогда реквизит не доступен пользователю. -// -// * Директор - ТипВладельца - (возвращаемое значение) - это директор, который может быть выбран, -// как владелец сертификата. -// - Неопределено - начальное значение - скрыть директора из списка выбора. -// -// * ГлавныйБухгалтер - ТипВладельца - (возвращаемое значение) это главный бухгалтер, который может быть выбран, -// как владелец сертификата. -// - Неопределено - начальное значение - скрыть главного бухгалтера из списка выбора. -// -// * Пользователь - СправочникСсылка.Пользователи - (возвращаемое значение) пользователь-владелец сертификата. -// В общем случае, может быть не заполнено. Рекомендуется заполнить, если есть возможность. -// Записывается в сертификат в поле Пользователь, может быть изменено в дальнейшем. -// -// * Фамилия - Строка - (возвращаемое значение) фамилия сотрудника. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * Имя - Строка - (возвращаемое значение) имя сотрудника. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * Отчество - Строка - (возвращаемое значение) отчество сотрудника. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * ДатаРождения - Дата - (возвращаемое значение) дата рождения сотрудника. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * Пол - Строка - (возвращаемое значение) пол сотрудника "Мужской" или "Женский". -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * МестоРождения - Строка - (возвращаемое значение) описание места рождения сотрудника. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * Гражданство - СправочникСсылка.СтраныМира - (возвращаемое значение) гражданство сотрудника. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * СтраховойНомерПФР - Строка - (возвращаемое значение) СНИЛС сотрудника. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * Должность - Строка - (возвращаемое значение) должность сотрудника в организации. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * Подразделение - Строка - (возвращаемое значение) обособленное подразделение организации, -// в котором работает сотрудник. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// -// * ДокументВид - Строка - (возвращаемое значение) строки "21" или "91". 21 - паспорт гражданина РФ, -// 91 - иной документ предусмотренный законодательством РФ (по СПДУЛ). -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// -// * ДокументНомер - Строка - (возвращаемое значение) номер документа сотрудника (серия и -// номер для паспорта гражданина РФ). -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// -// * ДокументКемВыдан - Строка - (возвращаемое значение) кем выдан документ сотрудника. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// -// * ДокументКодПодразделения - Строка - (возвращаемое значение) - код подразделения, если вид документа 21. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// -// * ДокументДатаВыдачи - Дата - (возвращаемое значение) дата выдачи документа сотрудника. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// -// * ЭлектроннаяПочта - Строка - (возвращаемое значение) адрес электронной почты сотрудника в формате XML, как его -// возвращает функция КонтактнаяИнформацияВXML общего модуля УправлениеКонтактнойИнформацией. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// -Процедура ПриЗаполненииРеквизитовВладельцаВЗаявленииНаСертификат(Параметры) Экспорт - - - -КонецПроцедуры - -// Вызывается в форме добавления заявления на новый сертификат для заполнения реквизитов руководителя и при его выборе. -// Только для юридического лица. Для индивидуального предпринимателя не требуется. -// -// Параметры: -// Параметры - Структура - со свойствами: -// * Организация - СправочникСсылка.Организации - выбранная организация, на которую оформляется сертификат. -// - Неопределено, если ОпределяемыйТип.Организации не настроен. -// -// * ТипРуководителя - ОписаниеТипов - (возвращаемое значение) содержит ссылочные типы из которых можно сделать выбор. -// - Неопределено - (возвращаемое значение) выбор партнера не поддерживается. -// -// * Руководитель - ТипРуководителя - это значение, выбранное пользователем по которому нужно заполнить должность. -// - Неопределено - ТипРуководителя не определен. -// - ЛюбаяСсылка - (возвращаемое значение) - руководитель, который будет подписывать документы. -// -// * Представление - Строка - (возвращаемое значение) представление руководителя. -// - Неопределено - получить представление от значения Руководитель. -// -// * Должность - Строка - (возвращаемое значение) - должность руководителя, который будет подписывать документы. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * Основание - Строка - (возвращаемое значение) - основание на котором действует -// должностное лицо (устав, доверенность, ...). -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -Процедура ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Параметры) Экспорт - - - -КонецПроцедуры - -// Вызывается в форме добавления заявления на новый сертификат для заполнения реквизитов партнера и при его выборе. -// -// Параметры: -// Параметры - Структура - со свойствами: -// * Организация - СправочникСсылка.Организации - выбранная организация, на которую оформляется сертификат. -// - Неопределено, если ОпределяемыйТип.Организации не настроен. -// -// * ТипПартнера - ОписаниеТипов - содержит ссылочные типы из которых можно сделать выбор. -// - Неопределено - выбор партнера не поддерживается. -// -// * Партнер - ТипПартнера - это контрагент (обслуживающая организация), выбранный пользователем, -// по которому нужно заполнить реквизиты, описанные ниже. -// - Неопределено - ТипПартнера не определен. -// - ЛюбаяСсылка - (возвращаемое значение) - значение сохраняемое в заявке для истории. -// -// * Представление - Строка - (возвращаемое значение) представление партнера. -// - Неопределено - получить представление от значения Партнер. -// -// * ЭтоИндивидуальныйПредприниматель - Булево - (возвращаемое значение): -// Ложь - начальное значение - указанный партнер является юридическим лицом, -// Истина - указанный партнер является индивидуальным предпринимателем. -// -// * ИНН - Строка - (возвращаемое значение) ИНН партнера. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -// * КПП - Строка - (возвращаемое значение) КПП партнера. -// - Неопределено - значение не указано, не изменять имеющееся значение. -// -Процедура ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Параметры) Экспорт - - - -КонецПроцедуры - - // Вызывается в форме элемента справочника СертификатыКлючейЭлектроннойПодписиИШифрования и в других местах, // где создаются или обновляются сертификаты, например в форме ВыборСертификатаДляПодписанияИлиРасшифровки. // Допускается вызов исключения, если требуется остановить действие и что-то сообщить пользователю, @@ -255,8 +50,6 @@ // Процедура ПередНачаломОперации(Операция, ВходныеПараметры, ВыходныеПараметры) Экспорт - - КонецПроцедуры // Вызывается для расширения состава выполняемых проверок. @@ -314,6 +107,34 @@ +КонецПроцедуры + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат. +// +Процедура ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Параметры) Экспорт + +КонецПроцедуры + +// Устарела. Следует использовать ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовВладельцаВЗаявленииНаСертификат. +// +Процедура ПриЗаполненииРеквизитовВладельцаВЗаявленииНаСертификат(Параметры) Экспорт + +КонецПроцедуры + +// Устарела. Следует использовать ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат. +// +Процедура ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Параметры) Экспорт + +КонецПроцедуры + +// Устарела. Следует использовать ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат. +// +Процедура ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Параметры) Экспорт + КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl index 0226f293e..2934490c6 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныйПрограммныйИнтерфейс // Добавляет сертификаты к переданному объекту. @@ -92,6 +100,67 @@ Возврат ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования); КонецФункции +// Из переданных имен файлов выделяются имена файлов данных и имена файлов их подписей. +// Сопоставление происходит по правилам формирования имени подписи и расширения файла подписи (p7s). +// Например: +// Имя файла данных: "example.txt" +// имя файла подписи: "example-Ivanov Petr.p7s" +// имя файла подписи: "example-Ivanov Petr (1).p7s". +// +// Параметры: +// ИменаФайлов - Массив - имена файлов типа Строка. +// +// Возвращаемое значение: +// Соответствие - содержит: +// * Ключ - Строка - имя файла. +// * Значение - Массив - имена файлов подписей типа Строка. +// +Функция ИменаФайловПодписейИменФайловДанных(ИменаФайлов) Экспорт + + РасширениеДляФайловПодписи = ЭлектроннаяПодпись.ПерсональныеНастройки().РасширениеДляФайловПодписи; + + Результат = Новый Соответствие; + + // Разделяем файлы по расширению. + ИменаФайловДанных = Новый Массив; + ИменаФайловПодписей = Новый Массив; + + Для Каждого ИмяФайла Из ИменаФайлов Цикл + Если СтрЗаканчиваетсяНа(ИмяФайла, РасширениеДляФайловПодписи) Тогда + ИменаФайловПодписей.Добавить(ИмяФайла); + Иначе + ИменаФайловДанных.Добавить(ИмяФайла); + КонецЕсли; + КонецЦикла; + + // Отсортируем имена файлов данных по убыванию числа символов в строке. + + Для ИндексА = 1 По ИменаФайловДанных.Количество() Цикл + ИндексМАКС = ИндексА; // Считаем что текущий файл имеет самое большое число символов. + Для ИндексБ = ИндексА+1 По ИменаФайловДанных.Количество() Цикл + Если СтрДлина(ИменаФайловДанных[ИндексМАКС-1]) > СтрДлина(ИменаФайловДанных[ИндексБ-1]) Тогда + ИндексМАКС = ИндексБ; + КонецЕсли; + КонецЦикла; + своп = ИменаФайловДанных[ИндексА-1]; + ИменаФайловДанных[ИндексА-1] = ИменаФайловДанных[ИндексМАКС-1]; + ИменаФайловДанных[ИндексМАКС-1] = своп; + КонецЦикла; + + // Поиск соответствий имен файлов. + Для Каждого ИмяФайлаДанных Из ИменаФайловДанных Цикл + Результат.Вставить(ИмяФайлаДанных, НайтиИменаФайловПодписей(ИмяФайлаДанных, ИменаФайловПодписей)); + КонецЦикла; + + // Оставшиеся файлы подписей не распознаны как подписи относящиеся к какому то файлу. + Для Каждого ИмяФайлаПодписи Из ИменаФайловПодписей Цикл + Результат.Вставить(ИмяФайлаПодписи, Новый Массив); + КонецЦикла; + + Возврат Результат; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем конфигурации. @@ -393,6 +462,13 @@ КонецФункции +// Только для внутреннего использования. +Функция ДобавкаВремени() Экспорт + + Возврат ТекущаяДатаСеанса() - ТекущаяУниверсальнаяДата(); + +КонецФункции + // Сохраняет настройки текущего пользователя для работы с электронной подписью. Процедура СохранитьПерсональныеНастройки(ПерсональныеНастройки) Экспорт @@ -459,7 +535,7 @@ Если Не Запрос.Выполнить().Пустой() Тогда ТекстСообщения = НСтр("ru = 'Сертификат с таким представлением уже существует.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, Поле,, Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, Поле,, Отказ); КонецЕсли; КонецПроцедуры @@ -471,11 +547,11 @@ СвойстваСертификата = СвойстваПодписи.ОписаниеСертификата; Иначе СвойстваСертификата = Новый Структура; - СвойстваСертификата.Вставить("СерийныйНомер", ""); + СвойстваСертификата.Вставить("СерийныйНомер", Base64Значение("")); СвойстваСертификата.Вставить("КемВыдан", ""); СвойстваСертификата.Вставить("КомуВыдан", ""); - СвойстваСертификата.Вставить("ДатаНачала", ""); - СвойстваСертификата.Вставить("ДатаОкончания", ""); + СвойстваСертификата.Вставить("ДатаНачала", '00010101'); + СвойстваСертификата.Вставить("ДатаОкончания", '00010101'); Если ТипЗнч(СвойстваПодписи.Сертификат) = Тип("Строка") И ЭтоАдресВременногоХранилища(СвойстваПодписи.Сертификат) Тогда @@ -486,14 +562,7 @@ Если ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда СертификатКриптографии = Новый СертификатКриптографии(Сертификат); - СвойстваСертификатаКриптографии = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(СертификатКриптографии); - ДатыСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатыСертификата(СертификатКриптографии); - - СвойстваСертификата.СерийныйНомер = Строка(СертификатКриптографии.СерийныйНомер); - СвойстваСертификата.КемВыдан = СвойстваСертификатаКриптографии.КемВыдан; - СвойстваСертификата.КомуВыдан = СвойстваСертификатаКриптографии.КомуВыдан; - СвойстваСертификата.ДатаНачала = Формат(ДатыСертификата.ДатаНачала, "ДЛФ=D"); - СвойстваСертификата.ДатаОкончания = Формат(ДатыСертификата.ДатаОкончания, "ДЛФ=D"); + СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии); ИначеЕсли СвойстваПодписи.Свойство("КомуВыданСертификат") Тогда СвойстваСертификата.КомуВыдан = СвойстваПодписи.КомуВыданСертификат; @@ -512,11 +581,11 @@ |Кем выдан: %2 |Владелец: %3 |Действителен: с %4 по %5'"), - СвойстваСертификата.СерийныйНомер, + Строка(СвойстваСертификата.СерийныйНомер), СвойстваСертификата.КемВыдан, СвойстваСертификата.КомуВыдан, - СвойстваСертификата.ДатаНачала, - СвойстваСертификата.ДатаОкончания); + Формат(СвойстваСертификата.ДатаНачала, "ДЛФ=D"), + Формат(СвойстваСертификата.ДатаОкончания, "ДЛФ=D")); Возврат СведенияОПодписи; @@ -538,14 +607,14 @@ Если ЭтоОшибкаПодписания Тогда ИмяСобытия = НСтр("ru = 'Электронная подпись.Ошибка подписания данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); СообщениеЖурналаРегистрации = СообщениеЖурналаРегистрации + " | |" + ОписаниеОшибки; Иначе ИмяСобытия = НСтр("ru = 'Электронная подпись.Подписание данных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ЭлементДанных.ПредставлениеДанных)) Тогда @@ -583,7 +652,7 @@ ТаблицаСвойствСертификатов.Индексы.Добавить("Отпечаток"); - Если ЭлектроннаяПодпись.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда МенеджерКриптографии = МенеджерКриптографии("ПолучениеСертификатов", Ложь, Ошибка); Если МенеджерКриптографии <> Неопределено Тогда @@ -591,15 +660,15 @@ МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты).ПолучитьВсе(); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( - ТаблицаСвойствСертификатов, МассивСертификатов, БезОтбора); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, + МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса()); Если Не Личные Тогда МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( ТипХранилищаСертификатовКриптографии.СертификатыПолучателей).ПолучитьВсе(); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( - ТаблицаСвойствСертификатов, МассивСертификатов, БезОтбора); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, + МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса()); КонецЕсли; КонецЕсли; КонецЕсли; @@ -608,14 +677,14 @@ МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов"); МассивСертификатов = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( - ТаблицаСвойствСертификатов, МассивСертификатов, БезОтбора, , Истина); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, + МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), , Истина); Если Не Личные Тогда МассивСертификатов = МодульХранилищеСертификатов.Получить("СертификатыПолучателей"); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( - ТаблицаСвойствСертификатов, МассивСертификатов, БезОтбора, , Истина); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, + МассивСертификатов, БезОтбора, ДобавкаВремени(), ТекущаяДатаСеанса(), , Истина); КонецЕсли; КонецЕсли; @@ -770,7 +839,7 @@ ЗаполнитьДополнительныеСвойстваСертификата(Форма); Форма.МенеджерКриптографииНаСервереОписаниеОшибки = Новый Структура; - Если ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда МенеджерКриптографии("ПолучениеСертификатов", Ложь, Форма.МенеджерКриптографииНаСервереОписаниеОшибки); КонецЕсли; @@ -852,9 +921,9 @@ СохраненныеСвойства.Организация = МодульОрганизации.ОрганизацияПоУмолчанию(); КонецЕсли; КонецЕсли; - СохраненныеСвойства.Наименование = ЭлектроннаяПодписьКлиентСервер.ПредставлениеСертификата(СертификатКриптографии); + СохраненныеСвойства.Наименование = ЭлектроннаяПодпись.ПредставлениеСертификата(СертификатКриптографии); Если Не ДляШифрования Тогда - СохраненныеСвойства.Пользователь = ПользователиКлиентСервер.ТекущийПользователь(); + СохраненныеСвойства.Пользователь = Пользователи.ТекущийПользователь(); КонецЕсли; КонецЕсли; @@ -991,7 +1060,7 @@ Исключение ЗаписьЖурналаРегистрации( НСтр("ru = 'Электронная подпись.Удаление временного файла'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -1121,7 +1190,6 @@ XPathПодписываемыйТег = ДанныеАлгоритмаПодписания.XPathПодписываемыйТег; XPathSignedInfo = ДанныеАлгоритмаПодписания.XPathSignedInfo; OIDАлгоритмаХеширования = ДанныеАлгоритмаПодписания.OIDАлгоритмаХеширования; - ИмяАлгоритмаПодписи = ДанныеАлгоритмаПодписания.ИмяАлгоритмаПодписи; Пароль = МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу; @@ -1133,10 +1201,10 @@ КонвертSOAP = СтрЗаменить( КонвертSOAP, "%BinarySecurityToken%", - ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(СертификатКриптографии.Выгрузить())); + СертификатКриптографииBase64(СертификатКриптографии.Выгрузить())); ПроверитьАлгоритмПодписи(ОбъектКомпоненты, - ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(СертификатКриптографии.Выгрузить()), + СертификатКриптографииBase64(СертификатКриптографии.Выгрузить()), ДанныеАлгоритмаПодписания); DigestValue = Hash( @@ -1166,7 +1234,6 @@ XPathПодписываемыйТег = ДанныеАлгоритмаПодписания.XPathПодписываемыйТег; XPathSignedInfo = ДанныеАлгоритмаПодписания.XPathSignedInfo; OIDАлгоритмаХеширования = ДанныеАлгоритмаПодписания.OIDАлгоритмаХеширования; - ИмяАлгоритмаПодписи = ДанныеАлгоритмаПодписания.ИмяАлгоритмаПодписи; ОбъектКомпоненты = ОбъектВнешнейКомпонентыXMLDSig(); @@ -1240,7 +1307,8 @@ ИнформацияМодуляКриптографии = МенеджерКриптографии.ПолучитьИнформациюМодуляКриптографии(); ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя; - ОписаниеПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеПрограммыПоИмениКриптопровайдера(ИмяКриптопровайдера); + ОписаниеПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеПрограммыПоИмениКриптопровайдера(ИмяКриптопровайдера, + ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм); Если ОписаниеПрограммы = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось определить тип криптопровайдера %1'"), ИмяКриптопровайдера); @@ -1317,7 +1385,7 @@ Попытка SignatureValue = ОбъектКомпоненты.Sign( КаноникализированныйТекстXMLSignedInfo, - ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(СертификатКриптографии.Выгрузить()), + СертификатКриптографииBase64(СертификатКриптографии.Выгрузить()), ПарольДоступаКЗакрытомуКлючу); Исключение ВызватьИсключение НСтр("ru = 'Ошибка вызова метода Sign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -1674,7 +1742,7 @@ СписокВыбора.Очистить(); - Если ЭлектроннаяПодпись.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда МенеджерКриптографии = МенеджерКриптографии("ПолучениеСертификатов", Ложь); @@ -1683,7 +1751,7 @@ МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилища).ПолучитьВсе(); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьОтпечаткиСертификатов( - ОтпечаткиСертификатовНаКлиенте, МассивСертификатов); + ОтпечаткиСертификатовНаКлиенте, МассивСертификатов, ДобавкаВремени(), ТекущаяДатаСеанса()); КонецЕсли; КонецЕсли; @@ -1692,7 +1760,7 @@ МассивСертификатов = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьОтпечаткиСертификатов( - ОтпечаткиСертификатовНаКлиенте, МассивСертификатов); + ОтпечаткиСертификатовНаКлиенте, МассивСертификатов, ДобавкаВремени(), ТекущаяДатаСеанса()); КонецЕсли; ОтборПоОрганизации = Ложь; @@ -1706,7 +1774,7 @@ Если ОтпечаткиСертификатовНаКлиенте.Найти(Свойства.Отпечаток) <> Неопределено Тогда ТекущийСписок.Добавить(Свойства.Ссылка, Свойства.Наименование, - Свойства.Пользователь = ПользователиКлиентСервер.АвторизованныйПользователь()); + Свойства.Пользователь = Пользователи.АвторизованныйПользователь()); КонецЕсли; КонецЦикла; Для Каждого ЭлементСписка Из ТекущийСписок Цикл @@ -1727,7 +1795,6 @@ Если ОтборОтпечатков <> Неопределено Тогда Отбор = ПолучитьИзВременногоХранилища(ОтборОтпечатков); - Отпечатки = Новый Массив; Для каждого Отпечаток Из ОтпечаткиСертификатовНаКлиенте Цикл Если Отбор[Отпечаток] = Неопределено Тогда Продолжить; @@ -1758,7 +1825,7 @@ КонецЕсли; Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", ПользователиКлиентСервер.ТекущийПользователь()); + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); Запрос.Параметры.Вставить("Отпечатки", ОтпечаткиСертификатовНаКлиенте); Запрос.Текст = "ВЫБРАТЬ @@ -1794,15 +1861,13 @@ Возврат; КонецЕсли; - Элементы = Форма.Элементы; - ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Форма.Сертификат, "УсиленнаяЗащитаЗакрытогоКлюча, Отпечаток, Программа, |ДействителенДо, ПользовательОповещенОСрокеДействия, ДанныеСертификата"); Попытка ДвоичныеДанныеСертификата = ЗначенияРеквизитов.ДанныеСертификата.Получить(); - СертификатКриптографии = Новый СертификатКриптографии(ДвоичныеДанныеСертификата); + Сертификат = Новый СертификатКриптографии(ДвоичныеДанныеСертификата); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); Сертификат = Форма.Сертификат; @@ -1829,7 +1894,7 @@ Форма.СертификатНаСервереОписаниеОшибки = Новый Структура; - Если Не ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если Не ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда Возврат; КонецЕсли; @@ -1842,7 +1907,7 @@ Функция НовыйМенеджерКриптографии(Программа, Ошибки, ИмяКомпьютера) ОписанияПрограмм = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииОписанияПрограмм( - Программа, Ошибки); + Программа, Ошибки, ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм); Если ОписанияПрограмм = Неопределено Тогда Возврат Неопределено; @@ -1960,4 +2025,47 @@ КонецФункции +// Для функции ПолучитьСоответствиеФайловИПодписей. +Функция НайтиИменаФайловПодписей(ИмяФайлаДанных, ИменаФайловПодписей) + + ИменаПодписей = Новый Массив; + + СтруктураИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаДанных); + ИмяБезРасширения = СтруктураИмени.ИмяБезРасширения; + + Для Каждого ИмяФайлаПодписи Из ИменаФайловПодписей Цикл + Если СтрНайти(ИмяФайлаПодписи, ИмяБезРасширения) > 0 Тогда + ИменаПодписей.Добавить(ИмяФайлаПодписи); + КонецЕсли; + КонецЦикла; + + Для Каждого ИмяФайлаПодписи Из ИменаПодписей Цикл + ИменаФайловПодписей.Удалить(ИменаФайловПодписей.Найти(ИмяФайлаПодписи)); + КонецЦикла; + + Возврат ИменаПодписей; + +КонецФункции + +// Для функций Подписать и Sign. + +// Преобразует сертификат криптографии в корректно отформатированную строку в формате Base64. +// +// Параметры: +// ДанныеСертификата - ДвоичныеДанные - данные сертификата, которые подлежат преобразованию. +// +// Возвращаемое значение: +// Строка - преобразованный в строку в формате Base64 сертификат. +// +Функция СертификатКриптографииBase64(ДанныеСертификата) + + СтрокаBase64 = Base64Строка(ДанныеСертификата); + + Значение = СтрЗаменить(СтрокаBase64, Символы.ВК, ""); + Значение = СтрЗаменить(Значение, Символы.ПС, ""); + + Возврат Значение; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl index 6c2a78f46..0dd1b579e 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Только для внутреннего использования @@ -20,7 +28,7 @@ ТаблицаСвойствСертификатов.Индексы.Добавить("Отпечаток"); - Если ЭлектроннаяПодпись.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("ПолучениеСертификатов", Ложь, Ошибка); Если МенеджерКриптографии <> Неопределено Тогда @@ -28,8 +36,8 @@ МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов( ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты).ПолучитьВсе(); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( - ТаблицаСвойствСертификатов, МассивСертификатов, Истина); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, + МассивСертификатов, Истина, ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса()); КонецЕсли; КонецЕсли; @@ -37,8 +45,8 @@ МодульХранилищеСертификатов = ОбщегоНазначения.ОбщийМодуль("ХранилищеСертификатов"); МассивСертификатов = МодульХранилищеСертификатов.Получить("ПерсональныеСертификаты"); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( - ТаблицаСвойствСертификатов, МассивСертификатов, Истина, , Истина); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, + МассивСертификатов, Истина, ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса(), , Истина); КонецЕсли; Возврат ОбработатьЛичныеСертификаты(ТаблицаСвойствСертификатов, Отбор); @@ -146,15 +154,15 @@ КонецФункции // Только для внутреннего использования. -Функция ПредставлениеСертификата(АдресСертификата) Экспорт +Функция ПредставлениеСубъекта(АдресСертификата) Экспорт ДанныеСертификата = ПолучитьИзВременногоХранилища(АдресСертификата); СертификатКриптографии = Новый СертификатКриптографии(ДанныеСертификата); - АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификата); + АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификата, АдресСертификата); - Возврат ЭлектроннаяПодписьКлиентСервер.ПредставлениеСертификата(СертификатКриптографии, Истина, Ложь); + Возврат ЭлектроннаяПодпись.ПредставлениеСубъекта(СертификатКриптографии); КонецФункции @@ -257,11 +265,11 @@ ОперацияНачалась = Истина; Если Параметры.Операция = "Подписание" Тогда - СвойстваСертификата = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(СертификатКриптографии); + СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии); СвойстваСертификата.Вставить("ДвоичныеДанные", СертификатКриптографии.Выгрузить()); СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДвоичныеДанныеРезультата, - СвойстваСертификата, Параметры.Комментарий); + СвойстваСертификата, Параметры.Комментарий, Пользователи.АвторизованныйПользователь()); Если Параметры.СертификатВерен <> Неопределено Тогда СвойстваПодписи.ДатаПодписи = ТекущаяДатаСеанса(); @@ -361,7 +369,7 @@ ПараметрыВыполнения.Вставить("Индекс", -1); ПараметрыВыполнения.Вставить("ПоказатьОшибку", Ложь); ПараметрыВыполнения.Вставить("СвойстваОшибки", Новый Структура("Ошибки", Новый Массив)); - ПараметрыВыполнения.Вставить("ЭтоLinux", Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент()); + ПараметрыВыполнения.Вставить("ЭтоLinux", ОбщегоНазначения.ЭтоLinuxСервер()); ПараметрыВыполнения.Вставить("Менеджер", Неопределено); Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); @@ -377,7 +385,8 @@ Контекст.ОписаниеПрограммы, Контекст.ЭтоLinux, Контекст.СвойстваОшибки.Ошибки, - Ложь); + Ложь, + ЭлектроннаяПодпись.ПерсональныеНастройки().ПутиКПрограммамЭлектроннойПодписиИШифрования); Если СвойстваПрограммы = Неопределено Тогда НайтиУстановленныеПрограммыНаСервереЦиклНачало(ПараметрыВыполнения); @@ -515,10 +524,4 @@ КонецФункции -Функция ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Экспорт - - Возврат ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса(); - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl index 17932a162..f86d9475a 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции Функция ИспользуетсяИнтерактивныйРежимКриптографии(МенеджерКриптографии) Экспорт @@ -81,9 +89,8 @@ ПараметрыОповещения.Вставить("Программы", ЭлектроннаяПодписьСлужебныйВызовСервера.ЗаполнитьСписокПрограммДляПоиска(ОписаниеПрограмм)); ПараметрыОповещения.Вставить("ОповещениеОЗавершении", Оповещение); Если ПроверятьНаСервере = Неопределено Тогда - ОбщиеНастройки = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); - ПроверятьНаСервере = ОбщиеНастройки.ПроверятьЭлектронныеПодписиНаСервере - Или ОбщиеНастройки.СоздаватьЭлектронныеПодписиНаСервере; + ПроверятьНаСервере = ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() + Или ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере(); КонецЕсли; ПараметрыОповещения.Вставить("ПроверятьНаСервере", ПроверятьНаСервере); @@ -138,7 +145,7 @@ ПараметрыВыполнения.Вставить("Индекс", -1); ПараметрыВыполнения.Вставить("ПоказатьОшибку", Ложь); ПараметрыВыполнения.Вставить("СвойстваОшибки", Новый Структура("Ошибки", Новый Массив)); - ПараметрыВыполнения.Вставить("ЭтоLinux", Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент()); + ПараметрыВыполнения.Вставить("ЭтоLinux", Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент()); ПараметрыВыполнения.Вставить("Менеджер", Неопределено); ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения( "НайтиУстановленныеПрограммыЦиклПродолжение", ЭтотОбъект, Контекст)); @@ -208,7 +215,7 @@ Контекст.Вставить("АдресСертификата", Неопределено); Если ТипЗнч(ДанныеСертификата) = Тип("СертификатКриптографии") Тогда - Контекст.СертификатКриптографии.НачатьВыгрузку(Новый ОписаниеОповещения( + ДанныеСертификата.НачатьВыгрузку(Новый ОписаниеОповещения( "ОткрытьСертификатПослеВыгрузкиСертификата", ЭтотОбъект, Контекст)); Иначе ОткрытьСертификатПродолжение(Контекст); @@ -324,16 +331,6 @@ Контекст.Вставить("ИмяФайлаБезРасширения", ИмяФайлаБезРасширения); Контекст.Вставить("АдресСертификата", Неопределено); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами( - Новый ОписаниеОповещения("СохранитьСертификатПослеУстановкиРасширения", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры СохранитьСертификат. -Процедура СохранитьСертификатПослеУстановкиРасширения(РасширениеПодключено, Контекст) Экспорт - - Контекст.Вставить("РасширениеПодключено", РасширениеПодключено); - Если ТипЗнч(Контекст.Сертификат) = Тип("СертификатКриптографии") Тогда Контекст.Сертификат.НачатьВыгрузку(Новый ОписаниеОповещения( "СохранитьСертификатПослеВыгрузкиСертификата", ЭтотОбъект, Контекст)); @@ -346,8 +343,7 @@ // Продолжение процедуры СохранитьСертификат. Процедура СохранитьСертификатПослеВыгрузкиСертификата(ВыгруженныеДанные, Контекст) Экспорт - Контекст.АдресСертификата = ПоместитьВоВременноеХранилище(ВыгруженныеДанные); - + Контекст.АдресСертификата = ПоместитьВоВременноеХранилище(ВыгруженныеДанные, Новый УникальныйИдентификатор); СохранитьСертификатПродолжение(Контекст); КонецПроцедуры @@ -359,10 +355,10 @@ // Сертификат подготовлен. ИначеЕсли ТипЗнч(Контекст.Сертификат) = Тип("ДвоичныеДанные") Тогда - Контекст.АдресСертификата = ПоместитьВоВременноеХранилище(Контекст.Сертификат); + Контекст.АдресСертификата = ПоместитьВоВременноеХранилище(Контекст.Сертификат, Новый УникальныйИдентификатор); ИначеЕсли ТипЗнч(Контекст.Сертификат) = Тип("Строка") - И ЭтоАдресВременногоХранилища(Контекст.Сертификат) Тогда + И ЭтоАдресВременногоХранилища(Контекст.Сертификат) Тогда Контекст.АдресСертификата = Контекст.Сертификат; Иначе @@ -373,30 +369,17 @@ КонецЕсли; Если Не ЗначениеЗаполнено(Контекст.ИмяФайлаБезРасширения) Тогда - Контекст.ИмяФайлаБезРасширения = ЭлектроннаяПодписьСлужебныйВызовСервера.ПредставлениеСертификата( - Контекст.АдресСертификата); + Контекст.ИмяФайлаБезРасширения = ЭлектроннаяПодписьСлужебныйВызовСервера.ПредставлениеСубъекта(Контекст.АдресСертификата); КонецЕсли; ИмяФайла = ПодготовитьСтрокуДляИмениФайла(Контекст.ИмяФайлаБезРасширения) + ".cer"; + Оповещение = Новый ОписаниеОповещения("СохранитьСертификатПослеПолученияФайлов", ЭтотОбъект, Контекст); - Если Не Контекст.РасширениеПодключено Тогда - ПолучитьФайл(Контекст.АдресСертификата, ИмяФайла); - Если Контекст.Оповещение <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение); - КонецЕсли; - Возврат; - КонецЕсли; + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения сертификата'"); + ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы сертификатов (*.cer)|*.cer|Все файлы (*.*)|*.*'"); - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения сертификата'"); - Диалог.Фильтр = НСтр("ru = 'Файлы сертификатов (*.cer)|*.cer|Все файлы (*.*)|*.*'"); - Диалог.МножественныйВыбор = Ложь; - - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, Контекст.АдресСертификата)); - - НачатьПолучениеФайлов(Новый ОписаниеОповещения( - "СохранитьСертификатПослеПолученияФайлов", ЭтотОбъект, Контекст), ПолучаемыеФайлы, Диалог); + ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, Контекст.АдресСертификата, ИмяФайла, ПараметрыСохранения); КонецПроцедуры @@ -431,61 +414,32 @@ // Процедура СохранитьЗапросНаСертификат(Оповещение, ЗапросНаСертификат, ИмяФайлаБезРасширения = "") Экспорт - Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("ЗапросНаСертификат", ЗапросНаСертификат); - Контекст.Вставить("ИмяФайлаБезРасширения", ИмяФайлаБезРасширения); + ИмяФайла = ПодготовитьСтрокуДляИмениФайла(ИмяФайлаБезРасширения + ".p10"); + ОповещениеОСохранении = Новый ОписаниеОповещения("СохранитьЗапросНаСертификатПослеПолученияФайлов", ЭтотОбъект, Оповещение); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами( - Новый ОписаниеОповещения("СохранитьЗапросНаСертификатПослеУстановкиРасширения", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры СохранитьЗапросНаСертификат. -Процедура СохранитьЗапросНаСертификатПослеУстановкиРасширения(РасширениеПодключено, Контекст) Экспорт - - ЗапросНаСертификат = Контекст.ЗапросНаСертификат; - ИмяФайлаБезРасширения = Контекст.ИмяФайлаБезРасширения; + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения запроса на сертификат'"); + ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы сертификатов (*.p10)|*.p10|Все файлы (*.*)|*.*'"); Если ТипЗнч(ЗапросНаСертификат) = Тип("ДвоичныеДанные") Тогда - АдресЗапросаНаСертификат = ПоместитьВоВременноеХранилище(ЗапросНаСертификат); - + ФайловаяСистемаКлиент.СохранитьФайл(ОповещениеОСохранении, + ПоместитьВоВременноеХранилище(ЗапросНаСертификат, Новый УникальныйИдентификатор), ИмяФайла, ПараметрыСохранения); ИначеЕсли ТипЗнч(ЗапросНаСертификат) = Тип("Строка") - И ЭтоАдресВременногоХранилища(ЗапросНаСертификат) Тогда + И ЭтоАдресВременногоХранилища(ЗапросНаСертификат) Тогда + + ФайловаяСистемаКлиент.СохранитьФайл(ОповещениеОСохранении, ЗапросНаСертификат, ИмяФайла, ПараметрыСохранения); - АдресЗапросаНаСертификат = ЗапросНаСертификат; Иначе - Если Контекст.Оповещение <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); + Если Оповещение <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Оповещение, Ложь); КонецЕсли; Возврат; КонецЕсли; - ИмяФайла = ПодготовитьСтрокуДляИмениФайла(ИмяФайлаБезРасширения + ".p10"); - - Если Не РасширениеПодключено Тогда - ПолучитьФайл(АдресЗапросаНаСертификат, ИмяФайла); - Если Контекст.Оповещение <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение); - КонецЕсли; - Возврат; - КонецЕсли; - - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения запроса на сертификат'"); - Диалог.Фильтр = НСтр("ru = 'Файлы сертификатов (*.p10)|*.p10|Все файлы (*.*)|*.*'"); - Диалог.МножественныйВыбор = Ложь; - - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, АдресЗапросаНаСертификат)); - - НачатьПолучениеФайлов(Новый ОписаниеОповещения( - "СохранитьЗапросНаСертификатПослеПолученияФайлов", ЭтотОбъект, Контекст), ПолучаемыеФайлы, Диалог); - КонецПроцедуры // Продолжение процедуры СохранитьЗапросНаСертификат. -Процедура СохранитьЗапросНаСертификатПослеПолученияФайлов(ПолученныеФайлы, Контекст) Экспорт +Процедура СохранитьЗапросНаСертификатПослеПолученияФайлов(ПолученныеФайлы, Оповещение) Экспорт Если ПолученныеФайлы = Неопределено Или ПолученныеФайлы.Количество() = 0 Тогда @@ -497,8 +451,8 @@ ПолученныеФайлы[0].Имя); КонецЕсли; - Если Контекст.Оповещение <> Неопределено Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение, ЕстьПолученныеФайлы); + Если Оповещение <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Оповещение, ЕстьПолученныеФайлы); КонецЕсли; КонецПроцедуры @@ -506,40 +460,16 @@ // Сохраняет подпись на диск Процедура СохранитьПодпись(АдресПодписи) Экспорт - Контекст = Новый Структура; - Контекст.Вставить("АдресПодписи", АдресПодписи); - - НачатьПодключениеРасширенияРаботыСФайлами(Новый ОписаниеОповещения( - "СохранитьПодписьПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры СохранитьПодпись. -Процедура СохранитьПодписьПослеПодключенияРасширенияРаботыСФайлами(Подключено, Контекст) Экспорт - - Если Не Подключено Тогда - ПолучитьФайл(Контекст.АдресПодписи); - Возврат; - КонецЕсли; - - РасширениеДляФайловПодписи = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляФайловПодписи; - - ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - + Оповещение = Новый ОписаниеОповещения("СохранитьПодписьПослеПолученияФайла", ЭтотОбъект, Неопределено); Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Файлы электронных подписей (*.%1)|*.%1|Все файлы (*.*)|*.*'"), - РасширениеДляФайловПодписи); + ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().РасширениеДляФайловПодписи); - ДиалогОткрытияФайла.Фильтр = Фильтр; - ДиалогОткрытияФайла.МножественныйВыбор = Ложь; - ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файл для сохранения подписи'"); + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Фильтр = Фильтр; + ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения подписи'"); - ПередаваемыеФайлы = Новый Массив; - ПередаваемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла("", Контекст.АдресПодписи)); - - // Сохранение Файла из информационной базы на диск. - НачатьПолучениеФайлов(Новый ОписаниеОповещения( - "СохранитьПодписьПослеПолученияФайла", ЭтотОбъект, Контекст), ПередаваемыеФайлы, ДиалогОткрытияФайла); + ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, АдресПодписи, "", ПараметрыСохранения); КонецПроцедуры @@ -619,7 +549,7 @@ КонецЕсли; ИнформацияОбОшибке = ИнформацияОбОшибке(); ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - ПолучитьСертификатПоОтпечаткуЗавершение(, ПредставлениеОшибки, Контекст); + ПолучитьСертификатПоОтпечаткуЗавершение(Неопределено, ПредставлениеОшибки, Контекст); Возврат; КонецПопытки; @@ -641,7 +571,7 @@ СтандартнаяОбработка = Ложь; ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - ПолучитьСертификатПоОтпечаткуЗавершение(, ПредставлениеОшибки, Контекст); + ПолучитьСертификатПоОтпечаткуЗавершение(Неопределено, ПредставлениеОшибки, Контекст); КонецПроцедуры @@ -666,14 +596,14 @@ ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - ПолучитьСертификатПоОтпечаткуЗавершение(, ПредставлениеОшибки, Контекст); + ПолучитьСертификатПоОтпечаткуЗавершение(Неопределено, ПредставлениеОшибки, Контекст); КонецПроцедуры // Продолжение процедуры ПолучитьСертификатПоОтпечатку. Процедура ПолучитьСертификатПоОтпечаткуПослеПоиска(Сертификат, Контекст) Экспорт - ПолучитьСертификатПоОтпечаткуЗавершение(Сертификат, , Контекст); + ПолучитьСертификатПоОтпечаткуЗавершение(Сертификат, "", Контекст); КонецПроцедуры @@ -747,6 +677,12 @@ КонецПроцедуры +// Только для внутреннего использования. +Функция ДобавкаВремени() Экспорт + + Возврат ОбщегоНазначенияКлиент.ДатаСеанса() - ОбщегоНазначенияКлиент.ДатаУниверсальная(); + +КонецФункции // Проверяет действительность подписи и сертификата. // Сертификат всегда проверяется на сервере, если администратор @@ -788,7 +724,7 @@ Контекст.Вставить("Подпись", Подпись); Контекст.Вставить("НаДату", НаДату); Контекст.Вставить("ПроверятьНаСервере", - ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере); + ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере()); Если ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда ПроверитьПодписьВМоделиСервиса(Контекст); @@ -815,7 +751,7 @@ Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии); - Если Не ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере Тогда + Если Не ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда // Проверка подписи и сертификата на стороне клиента. Если МенеджерКриптографии = Неопределено Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, Неопределено); @@ -921,7 +857,6 @@ // Продолжение процедуры ПроверитьПодпись. Процедура ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписиXMLDSig(ТекстОшибки, Контекст) Экспорт - СтандартнаяОбработка = Ложь; ВыполнитьОбработкуОповещения(Контекст.Оповещение, ТекстОшибки); КонецПроцедуры @@ -1017,7 +952,7 @@ Контекст.Вставить("ОписаниеОшибкиНаСервере", Неопределено); Если Контекст.МенеджерКриптографии = Неопределено - И ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере Тогда + И ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда // Проверка на сервере перед проверкой на клиенте. Если ТипЗнч(Сертификат) = Тип("СертификатКриптографии") Тогда @@ -1136,7 +1071,7 @@ Процедура ПроверитьСертификатНаКлиентеПослеПроверки(Контекст) Экспорт ОшибкаПросрочки = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатПросрочен( - Контекст.СертификатКриптографии, Контекст.НаДату); + Контекст.СертификатКриптографии, Контекст.НаДату, ДобавкаВремени()); Если ЗначениеЗаполнено(ОшибкаПросрочки) Тогда ПроверитьСертификатНаКлиентеПослеОшибкиПроверки(ОшибкаПросрочки, Ложь, Контекст); @@ -1182,7 +1117,6 @@ // программы из справочника для которой удалось его создать. // - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования - программа // для которой нужно создать и вернуть менеджер криптографии. -// // ИнтерактивныйРежим - Булево - если Истина, тогда менеджер криптографии будет создан // в режиме использования интерактивного режима криптографии // (установка свойства ПарольДоступаКЗакрытомуКлючу будет запрещена). @@ -1269,12 +1203,12 @@ Контекст.Вставить("ЗаголовокОшибки", ЗаголовокОшибки); Контекст.Вставить("СвойстваОшибки", СвойстваОшибки); // Здесь проверяется что это Linux или OS X клиент. - Контекст.Вставить("ЭтоLinux", Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент()); + Контекст.Вставить("ЭтоLinux", Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент()); СвойстваОшибки.Вставить("Ошибки", Новый Массив); ОписанияПрограмм = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииОписанияПрограмм( - Контекст.Программа, СвойстваОшибки.Ошибки); + Контекст.Программа, СвойстваОшибки.Ошибки, ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм); Контекст.Вставить("Менеджер", Неопределено); @@ -1306,7 +1240,8 @@ Контекст.ОписаниеПрограммы, Контекст.ЭтоLinux, Контекст.СвойстваОшибки.Ошибки, - Ложь); + Ложь, + ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().ПутиКПрограммамЭлектроннойПодписиИШифрования); Если СвойстваПрограммы = Неопределено Тогда СоздатьМенеджерКриптографииЦиклНачало(Контекст); @@ -1523,8 +1458,8 @@ Если Назначение = "ЗаявлениеНаВыпускСертификата" Тогда ПараметрыФормы.Вставить("ЛичныйСписокПриДобавлении", ПараметрыСоздания.ВЛичныйСписок); ПараметрыФормы.Вставить("Организация", ПараметрыСоздания.Организация); - ИмяОбработкиЗаявления = "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"; - ОткрытьФорму(ИмяОбработкиЗаявления, ПараметрыФормы); + ИмяФормы = "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.Форма"; + ОткрытьФорму(ИмяФормы, ПараметрыФормы); Возврат; КонецЕсли; @@ -1572,7 +1507,7 @@ Если Контекст.ПараметрыСоздания.Свойство("Организация") Тогда ПараметрыФормы.Вставить("Организация", Контекст.ПараметрыСоздания.Организация); КонецЕсли; - Форма = ОткрытьФорму("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Форма.ДобавлениеСертификатаДляШифрования", + ОткрытьФорму("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Форма.ДобавлениеСертификатаДляШифрования", ПараметрыФормы); КонецПроцедуры @@ -1667,6 +1602,8 @@ Контекст.Результат.СвойстваСертификатовНаКлиенте, Контекст.МассивСертификатов, Контекст.БезОтбора, + ДобавкаВремени(), + ОбщегоНазначенияКлиент.ДатаСеанса(), Контекст.ТолькоОтпечатки); ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Результат); @@ -1677,28 +1614,14 @@ // Только для внутреннего назначения. Процедура ДобавитьСертификатТолькоДляШифрованияИзФайла(ПараметрыСоздания) Экспорт - Контекст = Новый Структура("ПараметрыСоздания", ПараметрыСоздания); - НачатьПодключениеРасширенияРаботыСФайлами(Новый ОписаниеОповещения( - "ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПодключенияРасширения", ЭтотОбъект, Контекст)); + Оповещение = Новый ОписаниеОповещения("ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПомещенияФайлов", + ЭтотОбъект, ПараметрыСоздания); -КонецПроцедуры - -// Продолжение процедуры ДобавитьСертификатТолькоДляШифрованияИзФайла. -Процедура ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПодключенияРасширения(Подключено, Контекст) Экспорт + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл сертификата (только для шифрования)'"); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Сертификат X.509 (*.cer;*.crt)|*.cer;*.crt|Все файлы(*.*)|*.*'"); - Если Не Подключено Тогда - НачатьПомещениеФайла(Новый ОписаниеОповещения( - "ДобавитьСертификатТолькоДляШифрованияИзФайлаПриНачалеПомещенияФайла", ЭтотОбъект, Контекст)); - Возврат; - КонецЕсли; - - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - Диалог.Заголовок = НСтр("ru = 'Выберите файл сертификата (только для шифрования)'"); - Диалог.Фильтр = НСтр("ru = 'Сертификат X.509 (*.cer;*.crt)|*.cer;*.crt|Все файлы(*.*)|*.*'"); - - НачатьПомещениеФайлов(Новый ОписаниеОповещения( - "ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПомещенияФайлов", ЭтотОбъект, Контекст), - , Диалог, Ложь); + ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); КонецПроцедуры @@ -1713,17 +1636,6 @@ КонецПроцедуры -// Продолжение процедуры ДобавитьСертификатТолькоДляШифрованияИзФайла. -Процедура ДобавитьСертификатТолькоДляШифрованияИзФайлаПриНачалеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, Контекст) Экспорт - - Если Результат <> Истина Тогда - Возврат; - КонецЕсли; - - ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПомещенияФайла(Адрес, Контекст); - -КонецПроцедуры - // Продолжение процедуры ДобавитьСертификатТолькоДляШифрованияИзФайла. Процедура ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПомещенияФайла(Адрес, Контекст) @@ -1810,7 +1722,7 @@ Контекст.ПараметрыФормы.Вставить("РасширениеПодключено", Подключено); - Форма = ОткрытьФорму("Справочник.ПрограммыЭлектроннойПодписиИШифрования.Форма.ОшибкаОбращенияКПрограмме", + ОткрытьФорму("Справочник.ПрограммыЭлектроннойПодписиИШифрования.Форма.ОшибкаОбращенияКПрограмме", Контекст.ПараметрыФормы,,,, , Контекст.ОбработкаПродолжения); КонецПроцедуры @@ -1964,7 +1876,7 @@ КонецЕсли; Если ЗначениеЗаполнено(НедоступныеСертификаты) Тогда - Если ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда Если ЗначениеЗаполнено(ДоступныеСертификаты) Тогда Заголовок = НСтр("ru = 'Следующие разрешенные сертификаты не найдены ни на компьютере, ни на сервере:'"); Иначе @@ -2131,7 +2043,7 @@ Контекст.Вставить("ОписаниеДанных", ОписаниеДанных); Контекст.Вставить("ОбработкаРезультата", ОбработкаРезультата); - ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); + ПерсональныеНастройки = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки(); СохранятьВсеПодписи = ПерсональныеНастройки.ДействияПриСохраненииСЭП = "СохранятьВсеПодписи"; СохранятьСертификатВместеСПодписью = ПерсональныеНастройки.СохранятьСертификатВместеСПодписью; @@ -2232,7 +2144,7 @@ ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Контекст.ПолноеИмяФайла)); Если ЗначениеЗаполнено(Контекст.СоставИмениФайлаДанных.Путь) Тогда - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Новый ОписаниеОповещения( + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения( "СохранитьДанныеВместеСПодписьюПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст)); Иначе СохранитьДанныеВместеСПодписьюПослеПодключенияРасширенияРаботыСФайлами(Ложь, Контекст); @@ -2246,7 +2158,7 @@ Контекст.Вставить("Подключено", Подключено); Контекст.Вставить("РасширениеДляФайловПодписи", - ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляФайловПодписи); + ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().РасширениеДляФайловПодписи); Если Контекст.Подключено Тогда Контекст.Вставить("ПолучаемыеФайлы", Новый Массив); @@ -2457,7 +2369,6 @@ // Сохранение Файла из базы данных на диск. Если Контекст.ПолучаемыеФайлы.Количество() > 0 Тогда - ПолученныеФайлы = Новый Массив; Контекст.Вставить("ПолучаемыеФайлы", Контекст.ПолучаемыеФайлы); Вызовы = Новый Массив; @@ -2498,9 +2409,12 @@ КонецЕсли; ИначеЕсли РазрешенияПолучены Тогда - НачатьПолучениеФайлов(Новый ОписаниеОповещения( - "СохранитьДанныеВместеСПодписьюПослеПолученияФайлов", ЭтотОбъект, Контекст), - Контекст.ПолучаемыеФайлы, Контекст.ПутьКФайлам, Ложь); + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов(); + ПараметрыСохранения.Диалог.Каталог = Контекст.ПутьКФайлам; + ФайловаяСистемаКлиент.СохранитьФайлы(Новый ОписаниеОповещения( + "СохранитьДанныеВместеСПодписьюПослеПолученияФайлов", ЭтотОбъект, Контекст), + Контекст.ПолучаемыеФайлы, ПараметрыСохранения); Иначе СохранитьДанныеВместеСПодписьюПослеПолученияФайлов(Неопределено, Контекст); КонецЕсли; @@ -2555,9 +2469,9 @@ ЭлектроннаяПодписьКлиентПереопределяемый.ПриОпределенииРазделаСтатьиНаИТС(Раздел); Если Раздел = "УчетВГосударственныхУчреждениях" Тогда - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://its.1c.ru/bmk/bud/digsig"); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://its.1c.ru/bmk/bud/digsig"); Иначе - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://its.1c.ru/bmk/comm/digsig"); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://its.1c.ru/bmk/comm/digsig"); КонецЕсли; КонецПроцедуры @@ -2684,7 +2598,7 @@ Контекст.Вставить("Оповещение", Оповещение); Контекст.Вставить("ОшибкаНаСервере", Новый Структура); - Если ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда + Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда Если Не ЗначениеЗаполнено(Форма.МенеджерКриптографииНаСервереОписаниеОшибки) Тогда ВыполнитьОбработкуОповещения(Оповещение, Истина); Возврат; @@ -2756,8 +2670,8 @@ ОтпечаткиСертификатовНаКлиенте = Новый Массив; - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьОтпечаткиСертификатов( - ОтпечаткиСертификатовНаКлиенте, МассивСертификатов); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьОтпечаткиСертификатов(ОтпечаткиСертификатовНаКлиенте, + МассивСертификатов, ДобавкаВремени(), ОбщегоНазначенияКлиент.ДатаСеанса()); ВыполнитьОбработкуОповещения(Контекст.Оповещение, ОтпечаткиСертификатовНаКлиенте); @@ -3056,7 +2970,7 @@ // Продолжение процедуры ВыполнитьНаСтороне. Процедура ВыполнитьНаСторонеПослеВыгрузкиСертификата(ВыгруженныеДанные, Контекст) Экспорт - Контекст.Вставить("СвойстваСертификата", ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата( + Контекст.Вставить("СвойстваСертификата", ЭлектроннаяПодписьКлиент.СвойстваСертификата( Контекст.СертификатКриптографии)); Контекст.СвойстваСертификата.Вставить("ДвоичныеДанные", ВыгруженныеДанные); @@ -3120,10 +3034,10 @@ Контекст.ОперацияНачалась = Истина; - СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи( - КонвертSOAP, + СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(КонвертSOAP, Контекст.СвойстваСертификата, - Контекст.Форма.Комментарий); + Контекст.Форма.Комментарий, + ПользователиКлиент.АвторизованныйПользователь()); Если Контекст.СертификатВерен <> Неопределено Тогда СвойстваПодписи.ДатаПодписи = ОбщегоНазначенияКлиент.ДатаСеанса(); @@ -3138,8 +3052,6 @@ // Продолжение процедуры ВыполнитьНаСтороне. Процедура ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиентеXMLDSig(ТекстОшибки, Контекст) Экспорт - СтандартнаяОбработка = Ложь; - ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", ТекстОшибки); ОшибкаНаКлиенте.Вставить("Инструкция", Истина); @@ -3322,7 +3234,10 @@ Если Контекст.Операция = "Подписание" Тогда СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДвоичныеДанные, - Контекст.СвойстваСертификата, Контекст.Форма.Комментарий); + Контекст.СвойстваСертификата, + Контекст.Форма.Комментарий, + ПользователиКлиент.АвторизованныйПользователь()); + Если Контекст.СертификатВерен <> Неопределено Тогда СвойстваПодписи.ДатаПодписи = ОбщегоНазначенияКлиент.ДатаСеанса(); СвойстваПодписи.ДатаПроверкиПодписи = СвойстваПодписи.ДатаПодписи; @@ -3562,6 +3477,7 @@ Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); Результат = Новый Структура("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ПолучитьДанныеИзОписанияДанныхПродолжение(Результат, Контекст); КонецПопытки; Иначе ПолучитьДанныеИзОписанияДанныхПродолжение(Новый Структура("Данные", ИсточникДанных), Контекст); @@ -3626,13 +3542,14 @@ ВыполнитьОбработкуОповещения(Контекст.Оповещение, Данные); Иначе // Путь к файлу - ПомещаемыеФайлы = Новый Массив; Попытка - ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(Данные)); - НачатьПомещениеФайлов(Новый ОписаниеОповещения( - "ПолучитьДанныеИзОписанияДанныхЗавершение", ЭтотОбъект, Контекст, - "ПолучитьДанныеИзОписанияДанныхЗавершениеПоОшибке", ЭтотОбъект), - ПомещаемыеФайлы, , Ложь, Контекст.Форма.УникальныйИдентификатор); + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.ИдентификаторФормы = Контекст.Форма.УникальныйИдентификатор; + ПараметрыЗагрузки.Интерактивно = Ложь; + ФайловаяСистемаКлиент.ЗагрузитьФайл(Новый ОписаниеОповещения( + "ПолучитьДанныеИзОписанияДанныхЗавершение", ЭтотОбъект, Контекст, + "ПолучитьДанныеИзОписанияДанныхЗавершениеПоОшибке", ЭтотОбъект), + ПараметрыЗагрузки, Данные); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекущийРезультат = Новый Структура("ОписаниеОшибки", @@ -3793,7 +3710,8 @@ Процедура ПослеПолученияИнформацииМодуляКриптографии(ИнформацияМодуляКриптографии, Контекст) Экспорт ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя; - ОписаниеПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеПрограммыПоИмениКриптопровайдера(ИмяКриптопровайдера); + ОписаниеПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеПрограммыПоИмениКриптопровайдера( + ИмяКриптопровайдера, ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм); Если ОписаниеПрограммы = Неопределено Тогда ЗавершитьОперациюСОшибкой(Контекст, @@ -3806,10 +3724,10 @@ Контекст.ТипКриптопровайдера = ОписаниеПрограммы.ТипПрограммы; Контекст.ИмяКриптопровайдера = ИмяКриптопровайдера; - Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда ПутьКПрограмме = ""; Иначе - ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); + ПерсональныеНастройки = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки(); ПутьКПрограмме = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить( ОписаниеПрограммы.Ссылка); КонецЕсли; @@ -3823,7 +3741,7 @@ Процедура ПослеУстановкиСвойстваКомпонентыПутьККриптопровайдеру(Контекст) Экспорт - Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда Контекст.ОбъектКомпоненты.НачатьУстановкуЗапретитьПользовательскийИнтерфейс( Новый ОписаниеОповещения("ПослеУстановкиСвойстваЗапретитьПользовательскийИнтерфейс", ЭтотОбъект, Контекст), Ложь); @@ -4619,7 +4537,7 @@ // Продолжение процедуры ПроверитьПодпись. Процедура ПроверитьПодписьВМоделиСервиса(Контекст) - Если Не ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере Тогда + Если Не ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда Если ТипЗнч(Контекст.ИсходныеДанные) = Тип("Строка") И ЭтоАдресВременногоХранилища(Контекст.ИсходныеДанные) Тогда @@ -4656,14 +4574,14 @@ КонецПроцедуры // Продолжение процедуры ПроверитьСертификат. -Процедура ПроверитьСертификатВМоделиСервиса(Результат, Контекст) Экспорт +Процедура ПроверитьСертификатВМоделиСервиса(Результат, Контекст) ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина); КонецПроцедуры // Продолжение процедуры ВыполнитьНаСтороне. -Процедура ВыполнитьНаСторонеВМоделиСервиса(Результат, Контекст) Экспорт +Процедура ВыполнитьНаСторонеВМоделиСервиса(Результат, Контекст) Контекст.Вставить("СертификатКриптографии", Результат); @@ -4716,7 +4634,7 @@ // Продолжение процедуры ВыполнитьНаСтороне. Процедура ВыполнитьНаСторонеПослеВыгрузкиСертификатаВМоделиСервиса(ВыгруженныеДанные, Контекст) Экспорт - Контекст.Вставить("СвойстваСертификата", ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата( + Контекст.Вставить("СвойстваСертификата", ЭлектроннаяПодписьКлиент.СвойстваСертификата( ВыгруженныеДанные.Сертификат)); Контекст.СвойстваСертификата.Вставить("ДвоичныеДанные", ВыгруженныеДанные.Сертификат.Сертификат); diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl index 99ca31be9..e6fe7df2f 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl @@ -1,74 +1,16 @@ -#Область СлужебныйПрограммныйИнтерфейс +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Из переданных имен файлов выделяются имена файлов данных и имена файлов их подписей. -// Сопоставление происходит по правилам формирования имени подписи и расширения файла подписи (p7s). -// Например: -// Имя файла данных: "example.txt" -// имя файла подписи: "example-Ivanov Petr.p7s" -// имя файла подписи: "example-Ivanov Petr (1).p7s". -// -// Параметры: -// ИменаФайлов - Массив - имена файлов типа Строка. -// -// Возвращаемое значение: -// Соответствие - содержит: -// * Ключ - Строка - имя файла. -// * Значение - Массив - имена файлов подписей типа Строка. -// -Функция ИменаФайловПодписейИменФайловДанных(ИменаФайлов) Экспорт - - ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); - РасширениеДляФайловПодписи = ПерсональныеНастройки.РасширениеДляФайловПодписи; - - Результат = Новый Соответствие; - - // Разделяем файлы по расширению. - ИменаФайловДанных = Новый Массив; - ИменаФайловПодписей = Новый Массив; - - Для Каждого ИмяФайла Из ИменаФайлов Цикл - Если СтрЗаканчиваетсяНа(ИмяФайла, РасширениеДляФайловПодписи) Тогда - ИменаФайловПодписей.Добавить(ИмяФайла); - Иначе - ИменаФайловДанных.Добавить(ИмяФайла); - КонецЕсли; - КонецЦикла; - - // Отсортируем имена файлов данных по убыванию числа символов в строке. - - Для ИндексА = 1 По ИменаФайловДанных.Количество() Цикл - ИндексМАКС = ИндексА; // Считаем что текущий файл имеет самое большое число символов. - Для ИндексБ = ИндексА+1 По ИменаФайловДанных.Количество() Цикл - Если СтрДлина(ИменаФайловДанных[ИндексМАКС-1]) > СтрДлина(ИменаФайловДанных[ИндексБ-1]) Тогда - ИндексМАКС = ИндексБ; - КонецЕсли; - КонецЦикла; - своп = ИменаФайловДанных[ИндексА-1]; - ИменаФайловДанных[ИндексА-1] = ИменаФайловДанных[ИндексМАКС-1]; - ИменаФайловДанных[ИндексМАКС-1] = своп; - КонецЦикла; - - // Поиск соответствий имен файлов. - Для Каждого ИмяФайлаДанных Из ИменаФайловДанных Цикл - Результат.Вставить(ИмяФайлаДанных, НайтиИменаФайловПодписей(ИмяФайлаДанных, ИменаФайловПодписей)); - КонецЦикла; - - // Оставшиеся файлы подписей не распознаны как подписи относящиеся к какому то файлу. - Для Каждого ИмяФайлаПодписи Из ИменаФайловПодписей Цикл - Результат.Вставить(ИмяФайлаПодписи, Новый Массив); - КонецЦикла; - - Возврат Результат; - -КонецФункции +#Область СлужебныйПрограммныйИнтерфейс // Формирует имя файла подписи по шаблону. // -Функция ИмяФайлаПодписи(ИмяБезРасширения, КомуВыданСертификат, РасширениеДляФайловПодписи = Неопределено, ТребуетсяРазделитель = Истина) Экспорт - - Если НЕ ЗначениеЗаполнено(РасширениеДляФайловПодписи) Тогда - РасширениеДляФайловПодписи = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляФайловПодписи; - КонецЕсли; +Функция ИмяФайлаПодписи(ИмяБезРасширения, КомуВыданСертификат, РасширениеДляФайловПодписи, ТребуетсяРазделитель = Истина) Экспорт Разделитель = ?(ТребуетсяРазделитель, " - ", " "); @@ -96,9 +38,7 @@ #Область СлужебныеПроцедурыИФункции -Функция ОписаниеПрограммыПоИмениКриптопровайдера(ИмяКриптопровайдера) Экспорт - - ОписанияПрограмм = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ОписанияПрограмм; +Функция ОписаниеПрограммыПоИмениКриптопровайдера(ИмяКриптопровайдера, ОписанияПрограмм) Экспорт ПрограммаНайдена = Ложь; Для Каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл @@ -124,9 +64,7 @@ КонецФункции // Только для внутреннего использования. -Функция МенеджерКриптографииОписанияПрограмм(Программа, Ошибки) Экспорт - - ОписанияПрограмм = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ОписанияПрограмм; +Функция МенеджерКриптографииОписанияПрограмм(Программа, Ошибки, Знач ОписанияПрограмм) Экспорт Если Программа <> Неопределено Тогда ПрограммаНеНайдена = Истина; @@ -151,7 +89,7 @@ // Только для внутреннего использования. Функция МенеджерКриптографииСвойстваПрограммы(ОписаниеПрограммы, ЭтоLinux, Ошибки, ЭтоСервер, - ПутиКПрограммамНаСерверахLinux = Неопределено) Экспорт + ПутиКПрограммамНаСерверахLinux) Экспорт Если Не ЗначениеЗаполнено(ОписаниеПрограммы.ИмяПрограммы) Тогда МенеджерКриптографииДобавитьОшибку(Ошибки, ОписаниеПрограммы.Ссылка, @@ -168,13 +106,7 @@ СвойстваПрограммы = Новый Структура("ИмяПрограммы, ПутьКПрограмме, ТипПрограммы"); Если ЭтоLinux Тогда - Если ПутиКПрограммамНаСерверахLinux = Неопределено Тогда - ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); - ПутьКПрограмме = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить( - ОписаниеПрограммы.Ссылка); - Иначе - ПутьКПрограмме = ПутиКПрограммамНаСерверахLinux.Получить(ОписаниеПрограммы.Ссылка); - КонецЕсли; + ПутьКПрограмме = ПутиКПрограммамНаСерверахLinux.Получить(ОписаниеПрограммы.Ссылка); Если Не ЗначениеЗаполнено(ПутьКПрограмме) Тогда МенеджерКриптографииДобавитьОшибку(Ошибки, ОписаниеПрограммы.Ссылка, @@ -287,13 +219,13 @@ КонецФункции // Только для внутреннего использования. -Функция СертификатПросрочен(Сертификат, НаДату) Экспорт +Функция СертификатПросрочен(Сертификат, НаДату, ДобавкаВремени) Экспорт Если Не ЗначениеЗаполнено(НаДату) Тогда Возврат ""; КонецЕсли; - ДатыСертификата = ДатыСертификата(Сертификат); + ДатыСертификата = ДатыСертификата(Сертификат, ДобавкаВремени); Если ДатыСертификата.ДатаОкончания > НачалоДня(НаДату) Тогда Возврат ""; @@ -304,23 +236,6 @@ КонецФункции -// Только для внутреннего использования. -Функция ДатыСертификата(Сертификат) Экспорт - - #Если ВебКлиент Или ТонкийКлиент ИЛИ МобильныйКлиент Тогда - ДобавкаВремени = ОбщегоНазначенияКлиент.ДатаСеанса() - ОбщегоНазначенияКлиент.ДатаУниверсальная(); - #Иначе - ДобавкаВремени = ТекущаяДатаСеанса() - ТекущаяУниверсальнаяДата(); - #КонецЕсли - - ДатыСертификата = Новый Структура; - ДатыСертификата.Вставить("ДатаНачала", Сертификат.ДатаНачала + ДобавкаВремени); - ДатыСертификата.Вставить("ДатаОкончания", Сертификат.ДатаОкончания + ДобавкаВремени); - - Возврат ДатыСертификата; - -КонецФункции - // Только для внутреннего использования. Функция ТипХранилищаДляПоискаСертификата(ТолькоВЛичномХранилище) Экспорт @@ -337,13 +252,8 @@ КонецФункции // Только для внутреннего использования. -Процедура ДобавитьСвойстваСертификатов(Таблица, МассивСертификатов, БезОтбора, ТолькоОтпечатки = Ложь, ВОблачномСервисе = Ложь) Экспорт - - #Если ВебКлиент Или ТонкийКлиент ИЛИ МобильныйКлиент Тогда - ТекущаяДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса(); - #Иначе - ТекущаяДатаСеанса = ТекущаяДатаСеанса(); - #КонецЕсли +Процедура ДобавитьСвойстваСертификатов(Таблица, МассивСертификатов, БезОтбора, + ДобавкаВремени, ТекущаяДатаСеанса, ТолькоОтпечатки = Ложь, ВОблачномСервисе = Ложь) Экспорт Если ТолькоОтпечатки Тогда ОтпечаткиУжеДобавленныхСертификатов = Таблица; @@ -353,9 +263,11 @@ НаСервере = ТипЗнч(Таблица) <> Тип("Массив"); КонецЕсли; + МодульЛокализации = МодульЛокализации(); + Для Каждого ТекущийСертификат Из МассивСертификатов Цикл Отпечаток = Base64Строка(ТекущийСертификат.Отпечаток); - ДатыСертификата = ДатыСертификата(ТекущийСертификат); + ДатыСертификата = ДатыСертификата(ТекущийСертификат, ДобавкаВремени); Если ДатыСертификата.ДатаОкончания <= ТекущаяДатаСеанса Тогда Если Не БезОтбора Тогда @@ -386,10 +298,9 @@ СвойстваСертификата.Вставить("Отпечаток", Отпечаток); СвойстваСертификата.Вставить("Представление", - ЭлектроннаяПодписьКлиентСервер.ПредставлениеСертификата(ТекущийСертификат)); + ПредставлениеСертификата(ТекущийСертификат, ДобавкаВремени, МодульЛокализации)); - СвойстваСертификата.Вставить("КемВыдан", - ЭлектроннаяПодписьКлиентСервер.ПредставлениеИздателя(ТекущийСертификат)); + СвойстваСертификата.Вставить("КемВыдан", ПредставлениеИздателя(ТекущийСертификат, МодульЛокализации)); Если ТипЗнч(Таблица) = Тип("Массив") Тогда Таблица.Добавить(СвойстваСертификата); @@ -405,18 +316,27 @@ КонецПроцедуры -// Только для внутреннего использования. -Процедура ДобавитьОтпечаткиСертификатов(Массив, МассивСертификатов) Экспорт +Функция МодульЛокализации() - #Если ВебКлиент Или ТонкийКлиент ИЛИ МобильныйКлиент Тогда - ТекущаяДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса(); - #Иначе - ТекущаяДатаСеанса = ТекущаяДатаСеанса(); - #КонецЕсли +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если ЭлектроннаяПодписьСлужебныйПовтИсп.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно Тогда + Возврат ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); + КонецЕсли; +#Иначе + Если СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭлектроннаяПодпись.ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно Тогда + Возврат ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьЛокализацияКлиентСервер"); + КонецЕсли; +#КонецЕсли + Возврат Неопределено; + +КонецФункции + +// Только для внутреннего использования. +Процедура ДобавитьОтпечаткиСертификатов(Массив, МассивСертификатов, ДобавкаВремени, ТекущаяДатаСеанса) Экспорт Для Каждого ТекущийСертификат Из МассивСертификатов Цикл Отпечаток = Base64Строка(ТекущийСертификат.Отпечаток); - ДатыСертификата = ДатыСертификата(ТекущийСертификат); + ДатыСертификата = ДатыСертификата(ТекущийСертификат, ДобавкаВремени); Если ДатыСертификата.ДатаОкончания <= ТекущаяДатаСеанса Тогда Продолжить; // Пропуск просроченных сертификатов. @@ -428,11 +348,12 @@ КонецПроцедуры // Только для внутреннего использования. -Функция СвойстваПодписи(ДвоичныеДанныеПодписи, СвойстваСертификата, Комментарий, ИмяФайлаПодписи = "") Экспорт +Функция СвойстваПодписи(ДвоичныеДанныеПодписи, СвойстваСертификата, Комментарий, + АвторизованныйПользователь, ИмяФайлаПодписи = "") Экспорт СвойстваПодписи = Новый Структура; СвойстваПодписи.Вставить("Подпись", ДвоичныеДанныеПодписи); - СвойстваПодписи.Вставить("УстановившийПодпись", ПользователиКлиентСервер.АвторизованныйПользователь()); + СвойстваПодписи.Вставить("УстановившийПодпись", АвторизованныйПользователь); СвойстваПодписи.Вставить("Комментарий", Комментарий); СвойстваПодписи.Вставить("ИмяФайлаПодписи", ИмяФайлаПодписи); СвойстваПодписи.Вставить("ДатаПодписи", Дата('00010101')); // Устанавливается перед записью. @@ -566,47 +487,287 @@ КонецФункции -// Преобразует сертификат криптографии в корректно отформатированную строку в формате Base64. -// -// Параметры: -// ДанныеСертификата - ДвоичныеДанные - данные сертификата, которые подлежат преобразованию. -// -// Возвращаемое значение: -// Строка - преобразованный в строку в формате Base64 сертификат. -// -Функция СертификатКриптографииBase64(ДанныеСертификата) Экспорт +// См. ЭлектроннаяПодписьКлиент.ПредставлениеСертификата. +Функция ПредставлениеСертификата(Сертификат, ДобавкаВремени, МодульЛокализации) Экспорт - СтрокаBase64 = Base64Строка(ДанныеСертификата); + Представление = ""; + Если МодульЛокализации <> Неопределено Тогда + Представление = МодульЛокализации.ПредставлениеСертификата(Сертификат, ДобавкаВремени); + КонецЕсли; + Если ПустаяСтрока(Представление) Тогда + ДатыСертификата = ДатыСертификата(Сертификат, ДобавкаВремени); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1, до %2'"), + ПредставлениеСубъекта(Сертификат, МодульЛокализации), + Формат(ДатыСертификата.ДатаОкончания, "ДФ=MM.yyyy")); + КонецЕсли; + Возврат Представление; - Значение = СтрЗаменить(СтрокаBase64, Символы.ВК, ""); - Значение = СтрЗаменить(Значение, Символы.ПС, ""); +КонецФункции + +// См. ЭлектроннаяПодписьКлиент.ПредставлениеСубъекта. +Функция ПредставлениеСубъекта(Сертификат, МодульЛокализации) Экспорт - Возврат Значение; + Представление = ""; + Если МодульЛокализации <> Неопределено Тогда + Представление = МодульЛокализации.ПредставлениеСубъекта(Сертификат); + КонецЕсли; + Если ПустаяСтрока(Представление) Тогда + Субъект = СвойстваСубъектаСертификата(Сертификат, МодульЛокализации); + Если ЗначениеЗаполнено(Субъект.ОбщееИмя) Тогда + Представление = Субъект.ОбщееИмя; + КонецЕсли; + КонецЕсли; + Возврат Представление; + +КонецФункции + +// См. ЭлектроннаяПодписьКлиент.ПредставлениеИздателя. +Функция ПредставлениеИздателя(Сертификат, МодульЛокализации) Экспорт + + Издатель = СвойстваИздателяСертификата(Сертификат, МодульЛокализации); + + Представление = ""; + + Если ЗначениеЗаполнено(Издатель.ОбщееИмя) Тогда + Представление = Издатель.ОбщееИмя; + КонецЕсли; + + Если ЗначениеЗаполнено(Издатель.ОбщееИмя) + И ЗначениеЗаполнено(Издатель.Организация) + И СтрНайти(Издатель.ОбщееИмя, Издатель.Организация) = 0 Тогда + + Представление = Издатель.ОбщееИмя + ", " + Издатель.Организация; + КонецЕсли; + + Если ЗначениеЗаполнено(Издатель.Подразделение) Тогда + Представление = Представление + ", " + Издатель.Подразделение; + КонецЕсли; + + Возврат Представление; + +КонецФункции + +// См. ЭлектроннаяПодписьКлиент.СвойстваСертификата. +Функция СвойстваСертификата(Сертификат, ДобавкаВремени, МодульЛокализации) Экспорт + + ДатыСертификата = ДатыСертификата(Сертификат, ДобавкаВремени); + + Свойства = Новый Структура; + Свойства.Вставить("Отпечаток", Base64Строка(Сертификат.Отпечаток)); + Свойства.Вставить("СерийныйНомер", Сертификат.СерийныйНомер); + Свойства.Вставить("Представление", ПредставлениеСертификата(Сертификат, ДобавкаВремени, МодульЛокализации)); + Свойства.Вставить("КомуВыдан", ПредставлениеСубъекта(Сертификат, МодульЛокализации)); + Свойства.Вставить("КемВыдан", ПредставлениеИздателя(Сертификат, МодульЛокализации)); + Свойства.Вставить("ДатаНачала", ДатыСертификата.ДатаНачала); + Свойства.Вставить("ДатаОкончания", ДатыСертификата.ДатаОкончания); + Свойства.Вставить("ДействителенДо", ДатыСертификата.ДатаОкончания); + Свойства.Вставить("Назначение", ПолучитьНазначение(Сертификат)); + Свойства.Вставить("Подписание", Сертификат.ИспользоватьДляПодписи); + Свойства.Вставить("Шифрование", Сертификат.ИспользоватьДляШифрования); + + Возврат Свойства; + +КонецФункции + +// Заполняет таблицу описания сертификата из четырех полей: КомуВыдан, КемВыдан, ДействуетДо, Назначение. +Процедура ЗаполнитьОписаниеДанныхСертификата(Таблица, СвойстваСертификата) Экспорт + + Если СвойстваСертификата.Подписание И СвойстваСертификата.Шифрование Тогда + Назначение = НСтр("ru = 'Подписание данных, Шифрование данных'"); + + ИначеЕсли СвойстваСертификата.Подписание Тогда + Назначение = НСтр("ru = 'Подписание данных'"); + Иначе + Назначение = НСтр("ru = 'Шифрование данных'"); + КонецЕсли; + + Таблица.Очистить(); + Строка = Таблица.Добавить(); + Строка.Свойство = НСтр("ru = 'Кому выдан:'"); + Строка.Значение = СокрЛП(СвойстваСертификата.КомуВыдан); + + Строка = Таблица.Добавить(); + Строка.Свойство = НСтр("ru = 'Кем выдан:'"); + Строка.Значение = СокрЛП(СвойстваСертификата.КемВыдан); + + Строка = Таблица.Добавить(); + Строка.Свойство = НСтр("ru = 'Действителен до:'"); + Строка.Значение = Формат(СвойстваСертификата.ДатаОкончания, "ДЛФ=D"); + + Строка = Таблица.Добавить(); + Строка.Свойство = НСтр("ru = 'Назначение:'"); + Строка.Значение = Назначение; + +КонецПроцедуры + +// См. ЭлектроннаяПодписьКлиент.СвойстваСубъектаСертификата. +Функция СвойстваСубъектаСертификата(Сертификат, МодульЛокализации) Экспорт + + Субъект = Сертификат.Субъект; + + Свойства = Новый Структура; + Свойства.Вставить("ОбщееИмя"); + Свойства.Вставить("Страна"); + Свойства.Вставить("Регион"); + Свойства.Вставить("НаселенныйПункт"); + Свойства.Вставить("Улица"); + Свойства.Вставить("Организация"); + Свойства.Вставить("Подразделение"); + Свойства.Вставить("ЭлектроннаяПочта"); + + Если Субъект.Свойство("CN") Тогда + Свойства.ОбщееИмя = ПодготовитьСтроку(Субъект.CN); + КонецЕсли; + + Если Субъект.Свойство("C") Тогда + Свойства.Страна = ПодготовитьСтроку(Субъект.C); + КонецЕсли; + + Если Субъект.Свойство("ST") Тогда + Свойства.Регион = ПодготовитьСтроку(Субъект.ST); + КонецЕсли; + + Если Субъект.Свойство("L") Тогда + Свойства.НаселенныйПункт = ПодготовитьСтроку(Субъект.L); + КонецЕсли; + + Если Субъект.Свойство("Street") Тогда + Свойства.Улица = ПодготовитьСтроку(Субъект.Street); + КонецЕсли; + + Если Субъект.Свойство("O") Тогда + Свойства.Организация = ПодготовитьСтроку(Субъект.O); + КонецЕсли; + + Если Субъект.Свойство("OU") Тогда + Свойства.Подразделение = ПодготовитьСтроку(Субъект.OU); + КонецЕсли; + + Если Субъект.Свойство("E") Тогда + Свойства.ЭлектроннаяПочта = ПодготовитьСтроку(Субъект.E); + КонецЕсли; + + Если МодульЛокализации <> Неопределено Тогда + РасширенныеСвойства = МодульЛокализации.РасширенныеСвойстваСубъектаСертификата(Субъект); + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Свойства, РасширенныеСвойства, Истина); + КонецЕсли; + + Возврат Свойства; + +КонецФункции + +// См. ЭлектроннаяПодписьКлиент.СвойстваИздателяСертификата. +Функция СвойстваИздателяСертификата(Сертификат, МодульЛокализации) Экспорт + + Издатель = Сертификат.Издатель; + + Свойства = Новый Структура; + Свойства.Вставить("ОбщееИмя"); + Свойства.Вставить("Страна"); + Свойства.Вставить("Регион"); + Свойства.Вставить("НаселенныйПункт"); + Свойства.Вставить("Улица"); + Свойства.Вставить("Организация"); + Свойства.Вставить("Подразделение"); + Свойства.Вставить("ЭлектроннаяПочта"); + + Если Издатель.Свойство("CN") Тогда + Свойства.ОбщееИмя = ПодготовитьСтроку(Издатель.CN); + КонецЕсли; + + Если Издатель.Свойство("C") Тогда + Свойства.Страна = ПодготовитьСтроку(Издатель.C); + КонецЕсли; + + Если Издатель.Свойство("ST") Тогда + Свойства.Регион = ПодготовитьСтроку(Издатель.ST); + КонецЕсли; + + Если Издатель.Свойство("L") Тогда + Свойства.НаселенныйПункт = ПодготовитьСтроку(Издатель.L); + КонецЕсли; + + Если Издатель.Свойство("Street") Тогда + Свойства.Улица = ПодготовитьСтроку(Издатель.Street); + КонецЕсли; + + Если Издатель.Свойство("O") Тогда + Свойства.Организация = ПодготовитьСтроку(Издатель.O); + КонецЕсли; + + Если Издатель.Свойство("OU") Тогда + Свойства.Подразделение = ПодготовитьСтроку(Издатель.OU); + КонецЕсли; + + Если Издатель.Свойство("E") Тогда + Свойства.ЭлектроннаяПочта = ПодготовитьСтроку(Издатель.E); + КонецЕсли; + + Если МодульЛокализации <> Неопределено Тогда + РасширенныеСвойства = МодульЛокализации.РасширенныеСвойстваИздателяСертификата(Издатель); + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Свойства, РасширенныеСвойства, Истина); + КонецЕсли; + + Возврат Свойства; + +КонецФункции + +// См. ЭлектроннаяПодписьКлиент.ПараметрыXMLDSig. +Функция ПараметрыXMLDSig() Экспорт + + ДанныеАлгоритмаПодписания = Новый Структура; + + ДанныеАлгоритмаПодписания.Вставить("XPathSignedInfo", ""); + ДанныеАлгоритмаПодписания.Вставить("XPathПодписываемыйТег", ""); + + ДанныеАлгоритмаПодписания.Вставить("ИмяАлгоритмаПодписи", ""); + ДанныеАлгоритмаПодписания.Вставить("OIDАлгоритмаПодписи", ""); + + ДанныеАлгоритмаПодписания.Вставить("ИмяАлгоритмаХеширования", ""); + ДанныеАлгоритмаПодписания.Вставить("OIDАлгоритмаХеширования", ""); + + Возврат ДанныеАлгоритмаПодписания; КонецФункции //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -// Для функции ПолучитьСоответствиеФайловИПодписей. -Функция НайтиИменаФайловПодписей(ИмяФайлаДанных, ИменаФайловПодписей) +// Для функций СертификатПросрочен, ПредставлениеСертификата, СвойстваСертификата. +Функция ДатыСертификата(Сертификат, ДобавкаВремени) Экспорт - ИменаПодписей = Новый Массив; + ДатыСертификата = Новый Структура; + ДатыСертификата.Вставить("ДатаНачала", Сертификат.ДатаНачала + ДобавкаВремени); + ДатыСертификата.Вставить("ДатаОкончания", Сертификат.ДатаОкончания + ДобавкаВремени); - СтруктураИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаДанных); - ИмяБезРасширения = СтруктураИмени.ИмяБезРасширения; + Возврат ДатыСертификата; - Для Каждого ИмяФайлаПодписи Из ИменаФайловПодписей Цикл - Если СтрНайти(ИмяФайлаПодписи, ИмяБезРасширения) > 0 Тогда - ИменаПодписей.Добавить(ИмяФайлаПодписи); - КонецЕсли; +КонецФункции + +// Для функции СвойстваСертификата. +Функция ПолучитьНазначение(Сертификат) + + Если Не Сертификат.РасширенныеСвойства.Свойство("EKU") Тогда + Возврат ""; + КонецЕсли; + + ФиксированныйМассивСвойств = Сертификат.РасширенныеСвойства.EKU; + + Назначение = ""; + + Для Индекс = 0 По ФиксированныйМассивСвойств.Количество() - 1 Цикл + Назначение = Назначение + ФиксированныйМассивСвойств.Получить(Индекс); + Назначение = Назначение + Символы.ПС; КонецЦикла; - Для Каждого ИмяФайлаПодписи Из ИменаПодписей Цикл - ИменаФайловПодписей.Удалить(ИменаФайловПодписей.Найти(ИмяФайлаПодписи)); - КонецЦикла; + Возврат ПодготовитьСтроку(Назначение); - Возврат ИменаПодписей; +КонецФункции + +// Для функций СвойстваСубъектаСертификата, СвойстваИздателяСертификата. +Функция ПодготовитьСтроку(СтрокаИзСертификата) + + Возврат СокрЛП(ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(СтрокаИзСертификата)); КонецФункции diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl index 4420372d9..a718bfa06 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. @@ -15,7 +23,7 @@ Если ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ИнформационнаяБазаФайловая() - И Не ОбщегоНазначенияКлиентСервер.КлиентПодключенЧерезВебСервер() Тогда + И Не ОбщегоНазначения.КлиентПодключенЧерезВебСервер() Тогда ОбщиеНастройки.Вставить("ПроверятьЭлектронныеПодписиНаСервере", Ложь); ОбщиеНастройки.Вставить("СоздаватьЭлектронныеПодписиНаСервере", Ложь); @@ -27,19 +35,12 @@ Константы.СоздаватьЭлектронныеПодписиНаСервере.Получить()); КонецЕсли; - // Использование подсистем. - // 1. Подсистема Контактная информация - российский адрес. - // 2. Подсистема Адресный классификатор - код региона по наименованию. - // 3. Подсистема Печать - стандартная печатная форма для заявления на выпуск сертификата. - // 4. Подсистема Работа с контрагентами - проверка ИНН, КПП, ОГРН, лицевого счета по БИК, СНИЛС. - // 5. Подсистема Интернет поддержка пользователей - подключение сервисам 1С. - - ОбщиеНастройки.Вставить("ЗаявлениеНаВыпускСертификатаДоступно", - ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") - И ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") - И Метаданные.Обработки.Найти("ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата") <> Неопределено); + ОбщиеНастройки.Вставить("ЗаявлениеНаВыпускСертификатаДоступно", + Метаданные.Обработки.Найти("ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата") <> Неопределено); + Если ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно Тогда + Заявление = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"); + ОбщиеНастройки.ЗаявлениеНаВыпускСертификатаДоступно = Заявление.ЗаявлениеНаВыпускСертификатаДоступно(); + КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = diff --git a/SSL/src/CommonPictures/ВертикальноеПоложениеВерх/Picture.zip b/SSL/src/CommonPictures/ВертикальноеПоложениеВерх/Picture.zip new file mode 100644 index 000000000..cb9a54ceb Binary files /dev/null and b/SSL/src/CommonPictures/ВертикальноеПоложениеВерх/Picture.zip differ diff --git a/SSL/src/CommonPictures/ВертикальноеПоложениеВерх/ВертикальноеПоложениеВерх.mdo b/SSL/src/CommonPictures/ВертикальноеПоложениеВерх/ВертикальноеПоложениеВерх.mdo new file mode 100644 index 000000000..e42eb5a59 --- /dev/null +++ b/SSL/src/CommonPictures/ВертикальноеПоложениеВерх/ВертикальноеПоложениеВерх.mdo @@ -0,0 +1,8 @@ + + + ВертикальноеПоложениеВерх + + ru + Вертикальное положение верх + + diff --git a/SSL/src/CommonPictures/ВертикальноеПоложениеНиз/Picture.zip b/SSL/src/CommonPictures/ВертикальноеПоложениеНиз/Picture.zip new file mode 100644 index 000000000..7fe19ea39 Binary files /dev/null and b/SSL/src/CommonPictures/ВертикальноеПоложениеНиз/Picture.zip differ diff --git a/SSL/src/CommonPictures/ВертикальноеПоложениеНиз/ВертикальноеПоложениеНиз.mdo b/SSL/src/CommonPictures/ВертикальноеПоложениеНиз/ВертикальноеПоложениеНиз.mdo new file mode 100644 index 000000000..6fcf54fef --- /dev/null +++ b/SSL/src/CommonPictures/ВертикальноеПоложениеНиз/ВертикальноеПоложениеНиз.mdo @@ -0,0 +1,8 @@ + + + ВертикальноеПоложениеНиз + + ru + Вертикальное положение низ + + diff --git a/SSL/src/CommonPictures/ВертикальноеПоложениеЦентр/Picture.zip b/SSL/src/CommonPictures/ВертикальноеПоложениеЦентр/Picture.zip new file mode 100644 index 000000000..f57423c76 Binary files /dev/null and b/SSL/src/CommonPictures/ВертикальноеПоложениеЦентр/Picture.zip differ diff --git a/SSL/src/CommonPictures/ВертикальноеПоложениеЦентр/ВертикальноеПоложениеЦентр.mdo b/SSL/src/CommonPictures/ВертикальноеПоложениеЦентр/ВертикальноеПоложениеЦентр.mdo new file mode 100644 index 000000000..bf52a26dd --- /dev/null +++ b/SSL/src/CommonPictures/ВертикальноеПоложениеЦентр/ВертикальноеПоложениеЦентр.mdo @@ -0,0 +1,8 @@ + + + ВертикальноеПоложениеЦентр + + ru + Вертикальное положение центр + + diff --git a/SSL/src/CommonPictures/Количество/Picture.zip b/SSL/src/CommonPictures/Количество/Picture.zip new file mode 100644 index 000000000..bcd040488 Binary files /dev/null and b/SSL/src/CommonPictures/Количество/Picture.zip differ diff --git a/SSL/src/CommonPictures/Количество/Количество.mdo b/SSL/src/CommonPictures/Количество/Количество.mdo new file mode 100644 index 000000000..a19a83463 --- /dev/null +++ b/SSL/src/CommonPictures/Количество/Количество.mdo @@ -0,0 +1,8 @@ + + + Количество + + ru + Количество + + diff --git a/SSL/src/CommonPictures/Максимум/Picture.zip b/SSL/src/CommonPictures/Максимум/Picture.zip new file mode 100644 index 000000000..8e3731691 Binary files /dev/null and b/SSL/src/CommonPictures/Максимум/Picture.zip differ diff --git a/SSL/src/CommonPictures/Максимум/Максимум.mdo b/SSL/src/CommonPictures/Максимум/Максимум.mdo new file mode 100644 index 000000000..1cdb45e2a --- /dev/null +++ b/SSL/src/CommonPictures/Максимум/Максимум.mdo @@ -0,0 +1,8 @@ + + + Максимум + + ru + Максимум + + diff --git a/SSL/src/CommonPictures/Минимум/Picture.zip b/SSL/src/CommonPictures/Минимум/Picture.zip new file mode 100644 index 000000000..26c0b56be Binary files /dev/null and b/SSL/src/CommonPictures/Минимум/Picture.zip differ diff --git a/SSL/src/CommonPictures/Минимум/Минимум.mdo b/SSL/src/CommonPictures/Минимум/Минимум.mdo new file mode 100644 index 000000000..6e81da190 --- /dev/null +++ b/SSL/src/CommonPictures/Минимум/Минимум.mdo @@ -0,0 +1,8 @@ + + + Минимум + + ru + Минимум + + diff --git a/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/Picture.png b/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/Picture.png deleted file mode 100644 index b811fba5f..000000000 Binary files a/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/Picture.zip b/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/Picture.zip new file mode 100644 index 000000000..90070db0a Binary files /dev/null and b/SSL/src/CommonPictures/РасширениеКонфигурацииИзГлавногоУзла/Picture.zip differ diff --git a/SSL/src/CommonPictures/РедактироватьАдресСайта/Picture.png b/SSL/src/CommonPictures/РедактироватьАдресСайта/Picture.png new file mode 100644 index 000000000..f6ae7281e Binary files /dev/null and b/SSL/src/CommonPictures/РедактироватьАдресСайта/Picture.png differ diff --git a/SSL/src/CommonPictures/РедактироватьАдресСайта/РедактироватьАдресСайта.mdo b/SSL/src/CommonPictures/РедактироватьАдресСайта/РедактироватьАдресСайта.mdo new file mode 100644 index 000000000..71c576da2 --- /dev/null +++ b/SSL/src/CommonPictures/РедактироватьАдресСайта/РедактироватьАдресСайта.mdo @@ -0,0 +1,8 @@ + + + РедактироватьАдресСайта + + ru + Редактировать адрес сайта + + diff --git a/SSL/src/CommonPictures/СостоянияРасширенийБудетПодключено/Picture.zip b/SSL/src/CommonPictures/СостоянияРасширенийБудетПодключено/Picture.zip new file mode 100644 index 000000000..27c080e19 Binary files /dev/null and b/SSL/src/CommonPictures/СостоянияРасширенийБудетПодключено/Picture.zip differ diff --git a/SSL/src/CommonPictures/СостоянияРасширенийБудетПодключено/СостоянияРасширенийБудетПодключено.mdo b/SSL/src/CommonPictures/СостоянияРасширенийБудетПодключено/СостоянияРасширенийБудетПодключено.mdo new file mode 100644 index 000000000..dedb132e0 --- /dev/null +++ b/SSL/src/CommonPictures/СостоянияРасширенийБудетПодключено/СостоянияРасширенийБудетПодключено.mdo @@ -0,0 +1,8 @@ + + + СостоянияРасширенийБудетПодключено + + ru + Состояния расширений: будет подключено + + diff --git a/SSL/src/CommonPictures/СостоянияРасширенийКонфигурации/Picture.zip b/SSL/src/CommonPictures/СостоянияРасширенийКонфигурации/Picture.zip index 448c220a1..5d82722b1 100644 Binary files a/SSL/src/CommonPictures/СостоянияРасширенийКонфигурации/Picture.zip and b/SSL/src/CommonPictures/СостоянияРасширенийКонфигурации/Picture.zip differ diff --git a/SSL/src/CommonPictures/СостоянияРасширенийОшибка/Picture.zip b/SSL/src/CommonPictures/СостоянияРасширенийОшибка/Picture.zip new file mode 100644 index 000000000..75ae97d1e Binary files /dev/null and b/SSL/src/CommonPictures/СостоянияРасширенийОшибка/Picture.zip differ diff --git a/SSL/src/CommonPictures/СостоянияРасширенийОшибка/СостоянияРасширенийОшибка.mdo b/SSL/src/CommonPictures/СостоянияРасширенийОшибка/СостоянияРасширенийОшибка.mdo new file mode 100644 index 000000000..66ebfb2ef --- /dev/null +++ b/SSL/src/CommonPictures/СостоянияРасширенийОшибка/СостоянияРасширенийОшибка.mdo @@ -0,0 +1,8 @@ + + + СостоянияРасширенийОшибка + + ru + Состояния расширений: ошибка подключения + + diff --git a/SSL/src/CommonPictures/СостоянияРасширенийПодключено/Picture.zip b/SSL/src/CommonPictures/СостоянияРасширенийПодключено/Picture.zip new file mode 100644 index 000000000..88cee3e8f Binary files /dev/null and b/SSL/src/CommonPictures/СостоянияРасширенийПодключено/Picture.zip differ diff --git a/SSL/src/CommonPictures/СостоянияРасширенийПодключено/СостоянияРасширенийПодключено.mdo b/SSL/src/CommonPictures/СостоянияРасширенийПодключено/СостоянияРасширенийПодключено.mdo new file mode 100644 index 000000000..3d15aa33f --- /dev/null +++ b/SSL/src/CommonPictures/СостоянияРасширенийПодключено/СостоянияРасширенийПодключено.mdo @@ -0,0 +1,8 @@ + + + СостоянияРасширенийПодключено + + ru + Состояния расширений: подключено + + diff --git a/SSL/src/CommonPictures/Среднее/Picture.zip b/SSL/src/CommonPictures/Среднее/Picture.zip new file mode 100644 index 000000000..fb37e3de5 Binary files /dev/null and b/SSL/src/CommonPictures/Среднее/Picture.zip differ diff --git a/SSL/src/CommonPictures/Среднее/Среднее.mdo b/SSL/src/CommonPictures/Среднее/Среднее.mdo new file mode 100644 index 000000000..9b4a81122 --- /dev/null +++ b/SSL/src/CommonPictures/Среднее/Среднее.mdo @@ -0,0 +1,8 @@ + + + Среднее + + ru + Среднее + + diff --git a/SSL/src/CommonPictures/СтрелкаВнизЗеленая/Picture.zip b/SSL/src/CommonPictures/СтрелкаВнизЗеленая/Picture.zip new file mode 100644 index 000000000..13bdd9e93 Binary files /dev/null and b/SSL/src/CommonPictures/СтрелкаВнизЗеленая/Picture.zip differ diff --git a/SSL/src/CommonPictures/СтрелкаВнизЗеленая/СтрелкаВнизЗеленая.mdo b/SSL/src/CommonPictures/СтрелкаВнизЗеленая/СтрелкаВнизЗеленая.mdo new file mode 100644 index 000000000..e1c586a9d --- /dev/null +++ b/SSL/src/CommonPictures/СтрелкаВнизЗеленая/СтрелкаВнизЗеленая.mdo @@ -0,0 +1,8 @@ + + + СтрелкаВнизЗеленая + + ru + Стрелка вниз зеленая + + diff --git a/SSL/src/CommonPictures/Фотокамера/Picture.zip b/SSL/src/CommonPictures/Фотокамера/Picture.zip new file mode 100644 index 000000000..c032e139b Binary files /dev/null and b/SSL/src/CommonPictures/Фотокамера/Picture.zip differ diff --git a/SSL/src/CommonPictures/Фотокамера/Фотокамера.mdo b/SSL/src/CommonPictures/Фотокамера/Фотокамера.mdo new file mode 100644 index 000000000..0c3cfbb1b --- /dev/null +++ b/SSL/src/CommonPictures/Фотокамера/Фотокамера.mdo @@ -0,0 +1,8 @@ + + + Фотокамера + + ru + Фотокамера + + diff --git a/SSL/src/CommonPictures/Шрифт/Picture.zip b/SSL/src/CommonPictures/Шрифт/Picture.zip new file mode 100644 index 000000000..c514274c1 Binary files /dev/null and b/SSL/src/CommonPictures/Шрифт/Picture.zip differ diff --git a/SSL/src/CommonPictures/Шрифт/Шрифт.mdo b/SSL/src/CommonPictures/Шрифт/Шрифт.mdo new file mode 100644 index 000000000..632c510f7 --- /dev/null +++ b/SSL/src/CommonPictures/Шрифт/Шрифт.mdo @@ -0,0 +1,8 @@ + + + Шрифт + + ru + Шрифт + + diff --git a/SSL/src/CommonTemplates/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати/Template.mxlx b/SSL/src/CommonTemplates/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати/Template.mxlx new file mode 100644 index 000000000..9e9aea1c6 --- /dev/null +++ b/SSL/src/CommonTemplates/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати/Template.mxlx @@ -0,0 +1,5492 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 34 + + -1 + + 1 + + + + 0 + + 1 + + + + 1 + + 1 + + + + 2 + + 1 + + + + 3 + + 1 + + + + 4 + + 1 + + + + 5 + + 1 + + + + 6 + + 1 + + + + 7 + + 1 + + + + 8 + + 1 + + + + 9 + + 1 + + + + 10 + + 1 + + + + 11 + + 1 + + + + 12 + + 1 + + + + 13 + + 1 + + + + 14 + + 1 + + + + 15 + + 1 + + + + 16 + + 1 + + + + 17 + + 1 + + + + 18 + + 1 + + + + 19 + + 1 + + + + 20 + + 1 + + + + 21 + + 1 + + + + 22 + + 1 + + + + 23 + + 1 + + + + 24 + + 1 + + + + 25 + + 1 + + + + 26 + + 1 + + + + 27 + + 1 + + + + 28 + + 1 + + + + 29 + + 1 + + + + 30 + + 1 + + + + 31 + + 1 + + + + 32 + + 1 + + + + 33 + + 1 + + + + + 0 + + 2 + + + 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 + + + + + 3 + + + + + 0 + + + + + + 1 + + 2 + + + 0 + + + + + 4 + + + + + 4 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + 20 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 4 + + + + + 4 + + + + + 4 + + + + + 5 + + + + + 0 + + + + + + 2 + + 2 + + + 0 + + + + + 0 + + + + 32 + + 5 + + + + + 6 + + + + + + 3 + + 2 + + + 0 + + + + + 0 + + + + 32 + + 5 + + + + + 6 + + + + + + 4 + + + + 0 + + + + + 0 + + + + 5 + + 7 + + + ru + Место печати + + + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 8 + + + + + 8 + + + + + 8 + + + + + 8 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 7 + + + ru + Подпись руководителя + + + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + 32 + + 5 + + + + + 6 + + + + + + 5 + + + + 0 + + + + + 0 + + + + 5 + + 9 + + + + + 9 + + + + + 9 + + + + + 10 + + + + + 10 + + + + + 10 + + + + + 11 + + + + + 10 + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 12 + + + + + 13 + + + + + 14 + + + + + 14 + + + + + 14 + + + + + 15 + + + + + 15 + + + + + 15 + + + + + 15 + + + + + 16 + + + + 32 + + 5 + + + + + 6 + + + + + + 6 + + + + 0 + + + + + 0 + + + + 5 + + 17 + + + + + 18 + + + + + 19 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 20 + + + + + 21 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 22 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 23 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 24 + + + + 32 + + 5 + + + + + 0 + + + + + + 7 + + + + 0 + + + + + 25 + + + + + 26 + + + + 5 + + 27 + + + + + 28 + + + + + 29 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 30 + + + + + 31 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 32 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 33 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 34 + + + + + 4 + + + + + 4 + + + + + 4 + + + + + 5 + + + + + 0 + + + + + + 8 + + + + 0 + + + + + 25 + + + + + 26 + + + + 5 + + 27 + + + + + 28 + + + + + 29 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 30 + + + + + 31 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 35 + + + + + 36 + + + + + 36 + + + + + 36 + + + + + 37 + + + + + 36 + + + + + 36 + + + + + 36 + + + + + 38 + + + + + 4 + + + + + 4 + + + + + 4 + + + + + 5 + + + + + 0 + + + + + + 9 + + + + 0 + + + + + 25 + + + + + 26 + + + + 5 + + 27 + + + + + 28 + + + + + 29 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 30 + + + + + 31 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 33 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 4 + + + + + 4 + + + + + 4 + + + + + 5 + + + + + 0 + + + + + + 10 + + + + 0 + + + + + 25 + + + + + 26 + + + + 5 + + 27 + + + + + 28 + + + + + 29 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 30 + + + + + 31 + + + + + 29 + + + + + 29 + + + + + 29 + + + + + 29 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 39 + + + ru + Подпись гл. бухгалтера + + + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 4 + + + + + 4 + + + + + 4 + + + + + 5 + + + + + 0 + + + + + + 11 + + + + 0 + + + + + 40 + + + + + 41 + + + + 5 + + 27 + + + + + 28 + + + + + 29 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 30 + + + + + 31 + + + + + 29 + + + + + 29 + + + + + 29 + + + + + 29 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 33 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 4 + + + + + 4 + + + + + 4 + + + + + 5 + + + + + 0 + + + + + + 12 + + + + 0 + + + + + 40 + + + + + 41 + + + + + 41 + + + + + 28 + + + + + 27 + + + + + 28 + + + + + 29 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 30 + + + + + 31 + + + + + 29 + + + + + 29 + + + + + 29 + + + + + 29 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 22 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 23 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + 24 + + + + + 4 + + + + + 4 + + + + + 4 + + + + + 5 + + + + + 0 + + + + + + 13 + + + 5 + + 27 + + + + + 28 + + + + + 29 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 30 + + + + + 31 + + + + + 29 + + + + + 29 + + + + + 29 + + + + + 29 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 32 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 33 + + + + + 28 + + + + + 28 + + + + + 28 + + + + + 34 + + + + 32 + + 3 + + + + + + 14 + + + 5 + + 42 + + + + + 36 + + + + + 43 + + + + + 36 + + + + + 36 + + + + + 36 + + + + + 44 + + + + + 45 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 3 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 35 + + + + + 36 + + + + + 36 + + + + + 36 + + + + + 37 + + + + + 36 + + + + + 36 + + + + + 36 + + + + + 38 + + + + 32 + + 3 + + + + + + 15 + + + 1 + + 46 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 47 + + + + + 48 + + + + + + 16 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 17 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 18 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 19 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 20 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 21 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 22 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 23 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 24 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 25 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 26 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 27 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 28 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 29 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 30 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 31 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 32 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 33 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 34 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 35 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 36 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 37 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 38 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 39 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 40 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 41 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 42 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 43 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 44 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 45 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 46 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 47 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 48 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 49 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 50 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 51 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 52 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 53 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 54 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 55 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 56 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 57 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 58 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 59 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 60 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 61 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 62 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 63 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 64 + + + 1 + + 49 + + + + 32 + + 50 + + + + + + 67 + + + 2 + + 0 + + + + + 6 + + 0 + + + + + + + 68 + + + 2 + + 0 + + + + + + + Picture + 6 + 0 + 19 + 6 + 65 + 30 + 1 + 18 + 32 + 51 + false + Stretch + 0 + 1 + + true + 51 + 69 + 69 + + 4 + 5 + 7 + + + 4 + 20 + 8 + + + 10 + 20 + 8 + + + Columns + -1 + -1 + 0 + 33 + + + None + + + LargeDashed + + + + + 24 + + + 0 + + + 22 + + + d3p1:Gray + + + d3p1:Gray + 22 + + + 15 + + + 0 + d3p1:Gray + 24 + Center + + + d3p1:Gray + 24 + + + 0 + 36 + d3p1:Gray + 24 + + + 0 + 36 + d3p1:Gray + 24 + + + 0 + 36 + d3p1:Gray + 24 + Right + + + 36 + 24 + + + 0 + 32 + d3p1:Gray + 24 + Left + + + 1 + 0 + 32 + d3p1:Gray + 24 + + + 0 + 32 + d3p1:Gray + 24 + + + 0 + 32 + d3p1:Gray + 24 + Right + + + 1 + 1 + 1 + 0 + d3p1:Gray + 24 + + + 1 + 0 + d3p1:Gray + 24 + + + 0 + 1 + 0 + 0 + d3p1:Gray + 24 + + + 1 + 0 + d3p1:Gray + 24 + Right + + + 1 + 1 + 0 + 24 + + + 1 + 1 + 0 + d3p1:Gray + 24 + + + 1 + 0 + d3p1:Gray + 22 + + + 1 + 1 + 0 + d3p1:Gray + 24 + + + 1 + d3p1:Gray + + + 0 + d3p1:Gray + + + 1 + 1 + 0 + d3p1:Gray + 24 + + + 0 + d3p1:Gray + 24 + + + 0 + d3p1:Gray + 24 + + + 0 + d3p1:Gray + 24 + Right + + + 1 + 0 + 24 + + + 1 + 0 + d3p1:Gray + 24 + + + 0 + d3p1:Gray + 22 + + + 1 + 0 + d3p1:Gray + 24 + + + 1 + 1 + d3p1:Gray + 24 + + + 1 + d3p1:Gray + 24 + + + 1 + d3p1:Gray + 22 + + + 1 + 1 + d3p1:Gray + 24 + + + 0 + 0 + d3p1:Gray + 24 + Center + + + 1 + d3p1:Gray + 24 + + + 1 + 0 + d3p1:Gray + 24 + + + 1 + 1 + 1 + d3p1:Gray + 24 + + + 0 + 0 + 0 + 1 + d3p1:Gray + 24 + + + 1 + d3p1:Gray + 24 + Right + + + 1 + 1 + 24 + + + 0 + 0 + + + 0 + + + 0 + 0 + + + 0 + + + 0 + + + 72 + + + 0 + iVBORw0KGgoAAAANSUhEUgAABEIAAAR+CAIAAABbGAf4AAAAAXNSR0IArs4c6QAA +AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAP+lSURBVHhe7P0J +YFXlve//hzEhgQQyMScIBgmTCqFqBWwrnKrYHgtqT3HoeBU9/9tqe/8/teq93lOt +eu+t2p7frUNt7XGgpwraQQQFJ8CRBJEpSAgkYcycQBISSOD32fu7WN3sJDs7E2Tt +vF8nZ/dZz3r2mvaOeT6s9azV5+TJk1EAAAAA4B19nf8FAAAAAI8gxgAAAADwGGIM +AAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAA +AI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8h +xgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAA +AADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADw +GGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIM +AAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAA +AI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8h +xgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAA +AADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADw +GGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwmD4n +T550ivCUurq6goLCsrKy0tJSFTSpyiVLbk1JSbYGAAAAQKQixnhA88SSm7vDmdfM +T396R1bWTGcCAAAAiETEmJ6lXYmlRTNnzvjZz+50JgAAAIBIRIw5azqfWFqzdOkL +TgkAAACIRMSYM6GbEstgGTI4KSlp4MCBn238zKmNirrvvp9PnpzpTAAAAAARhxjT +xc5AYhk5cqReVXbm+a1ZvaawsNDKV1zx9ZtvvtHKAAAAQOQhxnTc2UosLdq2ddvH +H39s5fT0tIcffsjKAAAAQOQhxoRr+/ZcBZXCwsLSUl9uKSws0qQzr6M6llhaVHOk +5s9//rMzERX1618/zp2XAQAAEKmIMS3ojsSiiJKYlNgliaU1f/7PP9fU1Fh5yZJb +5s6dY2UAAAAgwvT2GNN9iWXIYN//ubnFmded1r6/Ni8vz8rKMEoyVgYAAAAiTC+K +MZGUWFqkXVuzeo2VY2Njn332aSsDAAAAESaSY0x2do5+IjKxtOjYsWMvPP+PJ8Y8 +/PCD6enpzgQAAAAQQSI2xixf/ury5a85E+3U8xNLa1asWHHo4CErL1r0rUWLFloZ +AAAAiCQRG2N+8YuHwrn9sXcTS4s2btzoPgeT2y4DAAAgUkVsjPnVrx7PydnoTPhF +WGJpUXl5+V9e+4szERX17LNPx8bGOhMAAABApIjYGLNy5aoXXnjJyomJid9a+C0r +R7wXnn/h2LFjVv7pT+/IypppZQAAACBi9HX+N+JMnpzplKKiKioqnJKX1RypOXjw +4MaNGz/95NO33nxz+bJlv3/296pxZp8SOKw/OzvHKQEAAAARJJLvVPajH93q3qDs +qgVXeegSsmPHjpWXlyu36P+OHD5y+PDhkpISm5WZOSk2NnbcuPSUlJSVK1fFxyd8 +6aIv2SyTtzNv7dq1Vk5OTv7Nbx63MgAAABAxIjnGBI7yv3DGhTNmzLByT6PEotxy +8ODBo3VHa2trSkvL6uvrVZ+UlJSampKersSS7H+VZHuLUYz5299ev/a6a51pP267 +DAAAgIgXyTEm8J7LI0aOWLBggZXPIjvNUlFecbzxeElx8eHDR6qrq21WZuYkCypu +brH6EBR4fvKTO7/97W8PHjLYqfJ77dXX3OvobrrphiuvvMLKAAAAQGSI5BizfXvu +gw/+0pmIivrhj37olM6UgwcPWm45XF2twt69+6w+LW1sXFzc5MmZvtSSnDxuXHqH +7yf24x/fce65GVOmTnGm/T7++ONtW7dZWeno/vvvtTIAAAAQGSI5xsjixTc5pW4e +HmPjWJRbGo83VlVVHjlypKrKd5pl0KBBSikSFxebmZmp1669xOv551/ctm3bP339 +6860nzbjjRVvOBNRUUuX/uMaMwAAACACRHiM6Y7hMXaCpc3x98nJyYF3S+sm2dk5 +jz32xE033zRw4ECnyo/bLgMAACCCRXiM6fzwmA6Pvz9jFi++ad78eUEnedasXlNY +WGjlK674+s0332hlAAAAIAJEeIxp1/AYO83SVePvz5hf/erx2tq6S2df6kz7bdu6 +7eOPP7Yyt10GAABAhInwGCNtDo/5YP0HtbU13TH+/sxYu3bdn/7056DbLtccqfnz +n//sTERF/frXj5+tk0UAAABAl4v8GBM4PObiiy8OuqmXvPTii+ecc86iRQu7fPz9 +mWG3Xb7mW9ckJSU5VX5//s8/19TUWHnJklvmzp1jZQAAAMDr+jr/G7kCx9kfPHjQ +KQUYP358SkqKmnkxw4j/Irc0dySMK33cP3Znw4ZspwQAAAB4X+THmMzMNmJMcnLK +tm3bnQlv0j7u37ffmTgl8PI593wUAAAAEAF619kYG8TvTJyi7r4qS0vLnGkPysqa +WVJS4t5h2QSeXKqrq9u+PdeZAAAAADwu8mOMZGZOckpRUYcOHnJKpwweMjghISE7 +28OXXSmqDRo0qLAg+LqyESNHOCX/E2acEgAAAOBxvSLGtDk8ZuTIkV4/WTFrVpb7 +FE7XuPRxTsl3XRlnYwAAABAhesnZmDZiTGpqqtdjjKJaQcEeZ+KUwLMxhYVFdXV1 +zgQAAADgZb3ubExrw2OOHj3a/GZfHpKVNbO+viFo15KSkgYPHuxMcF0ZAAAAIkXk +PzfG3HPPvYWFRVZu8ekxy15Z9s1vXn3llVc40x6kfYyPT/jSRV9ypv3Wvr82Ly/P +ynPnzlmy5BaltdLSMnstLS21WUFSfJJjY30P0un5DwAFAABAb9NbYszzz7+4atWb +VlbXfN78eVZ2ZW/I7t+/389+dqcz7UHLl7+6bt0H3/jmN2zSzjvl7VSKcWJM3759 +T5w4YeV2UYzJzJw02f9oncBTWwAAAMBZ0VtiTHZ2zmOPPWHlgQMH3nTzTVZ2FRYW +frD+g9///hln2mvq6uref3/tCy+8NHHixMNHDleUVwTdf7kLKdLYWZr09DT9v1ML +AAAAnCm9Jcaol/+jH93qTERFXfOta5KSkpwJP3X6X3j+hYcfftAr/fLt23PLysoK +CpS/CvV69OhRVcbExNTX11uDM8ZSjZ2rSUlJdmoBAACAbtNbYoy0OTzm73/7+5w5 +ly5atNCZ7kl8YaWwqLS0VOmlpKTUhvLHxET37duvA/cfi4+PHzp0aFra2AQZmuDU +nlJdVS0qFBUV+UrVh60+HP7hNGkWaUg1AAAA6Ca9KMa0OTzm008+bWw8fv/99zrT +Z48ii43CLygoLCkp2bt3nyr79+8/cODA437WrE3REhMTFxdXW1t72J9MgijJpKWl +pQ6XVCUap/Z09fUNyjMlxcV6LSra69SGJzk5Walm3Lj0zMxMbhUAAACArtKLYkzg +8JjBgwd/+1++bWWXYsOa1WuWLn3BmT5T7I5hubm5Fl3slNEAv2PHjjU2NlqzNllo +iY+Pj4mJUTG+WSyxMKPXOv1/ba1Te0pCQnyqL9CkpqUr2qQ5tc0UF5co0ujFH2w6 +kmq4VQAAAAA6qRfFmKDhMd/+9rcHD/nHM1XEhsfcd9/Pu7WHrc2wAS12kVhu7g6r +j42NPXGiqb6+wSbb1GZoCU3pSGHGd8XY4cO1NTVNTU3OjFNSfZkm1T1X49Q2o0Bj +52r8yabEqQ2P3SHAXkk1AAAACF8vijESODxm7ty5GRMzrOzq8uExbmixMy179hTY +EPzY2EE6+OEPa+lkaGlTQ0ODnaiRDl9+Joo0drpGhXYNqhFugAYAAIAw9a4YEzg8 +JiMjY+5lc63s2rRpU11tbWeGx9gNxGwsfnFxcUVFpSrj4uL69u175MgRa9Om7g4t +bQqMNEo4Tu0pYV5+Vl/foEBTVOgPNiXFHUs1dgUatwoAAABAoN4VY9ocHnPw4ME3 +VrwR/vAY9zRLQYHvx24gNmjQoD592nGmRSFHWSU2Lu5shZbQwrn8THlmuP8qtBCX +nwXeKkDBpnk6CoEboAEAACBQ74oxbQ6Pkd8/+/uf/vSOrKyZznSAU0PwfYmlrExl +3/VpdgOx8Mfiu6HFV/DfRsyZ4RGhLz/TrrkjavSqXObMaEa5yL38rDM3QGNQDQAA +QC/Uu2KMtDk85q0335wyZcrNN98YeAOxoLH4Omj2uMk2eT20tCmcy89852r82cap +bYlFGv/VZ+27AZoizbXXLpw7d44zDQAAgF6g18WY1obHlJeX19TU6DVvZ94JPxuL +P2TIEJXVTbdmoUV8aAmtqy4/EwUauwLNn2zavgFaenrakiW3pHNjAAAAgN6h18WY +oOExSUlJR44cqaiosJp26eWhpU1tXn7muz9AetrEiRkhbn1mbDiNXYHW2q0CYmNj +lWRavBoQAAAAEaZXxJjCgIH4hw4d2r//gDOjPQgtnRTi8rOsWVmzZ88OMZAmUOAN +0PLy8pzaU7r7sT8AAADoCSIzxnz00ccffvjRgQMH6+rqqlt6Cko4+vXrN3LUKEJL +d2hsbFSYOXz4cEV5uUUaJZl58y63ueHTh7vi9RWBY2liY2MffvghbmUGAAAQ2SIt +xqxdu+7ll1+xp7W014ABA/R6/PhxmxQlmcSkpERJSnKq0HUUZiorKvbs3t3U1JSW +NnbxDYudGe2kJLNly1Znwv/Amc48+QcAAAA9X+TEmLq6ul/84iH3LmRt8l0hFjto +yJAhGRMnjhw5YsyYMVZfX9+Qt1PyAi9YUp5JSEhQmIlPSNAbnVq0n11a1tDQYFeX +ObVRUQsXLZzY7K5x4QtKMkuW3MK9ywAAACJYhMSY9mYYEx8fP+6ccVlZWampKU5V +gBbzjMTFxSnMpKSmcqVZmxRXGurrq6ur6/yjYoKGxJhp06ZmzZoV+sZl4fjD759z +72mWnJz8m988bmUAAABEngiJMcow7nNdjP+mvqnqQPu1fG8rV3R09IQJ4y+cMWPs +WOecTCB7/LwiTdBtsuySs4SEhGGJif3793dqezdlFUssPi3dc1nso7F7Lod+mEy7 +6NNZ+tKfnImoqIcffrAn3H+5srJSOVmF/Px8q+mARx999O6773YmmrnuFGcanaPP +S5/a6tWrx48fr8nrr7/+lVdeyc7OnjmTm+ABANCDREKMCbyHsqiXvODqBYH/ut/a +eZXmlExGjR518cUXTZgwwak6ne/uWP5FBT3MJC4uLiU1NT4hoVedorEHxRgrODMC +KCJaXFHea/NxMZ209KWl7nD/K674+s0332jls8g6weoQd1+MMbfccsvTTz/tTKAT +nnnmmVtvvdWZ8Js3b55SjTMBAAB6hkiIMYGnYpRhFt+wuLVb97rnVZRDWrzAydWn +T5/EpMQLzr9g1pd8/5TenEUjLS1oUeq1K8xE6l0BtKe1NTWKK4cPH27QIWjpGNqT ++33RJd0XXcSZ0f02bMh+e83bVu4JA/0tw6jQJTGmtc60+tzqeaugGKMwY5XoDB1P +HfDKSt+dQnRIH3nkkWHDhtksAADQQ3g+xtTV1f3oR//4p9PFN3wnzOuUFD8s0rR5 +ydnQoUMnnDthzpw5raUjCzNFhUVBp2iUZXyRJinJu3cFaG1EfqC0tLGKLYorXXuR +WAcEXld2dofH5OTkKF3o1Sa7NcaIJZmZM2dmZ2c7VQAAABHN8zFm+/bcBx/8pZUT +EuJvu/02K4evtevEmouLi1Oeae2WAFJdXa0wo0UFXb2mGKMwY6nGqeqR7CIx7YVe +Lbo4MwLoICuxKK640cWZ0QMExhhZuvQFp3RmudeAKVeIAkZ3xxjlJRuBU1FRwXkD +AADQG/R1/tezCgsLnZKvh92RkKCO+Ow5s3/ww+/fdvuSy+ddnpY21pnRjLr1mz/f +/Iff/+Hxx55YvuzVvXv3OTNO0QZMmz5t0bUL777nroWLFmbNylKnX/WKBAcPHNi2 +deunH3/8RW5uaUlJi5djnXnaI23M3qIi27YNn3yiwr69e9UbdjNMamrqtGlTZ8++ +dPEN37njzjsUFBffsFhHbOLEjB6VYXqONWvW6PWRRx7Jzs62YeLdzY0udh2UaBuU +fPoEcK9wC6KWmuU06tNHkcldiJkwYYIzryV2PZtL79USlNhtrgqadOb512X1u3fv +dqpOsbUELa3NvXBqWxG4apWV9JwZpzYsaE/nz5+vWYHvEm2qvUVzrcYmWxP4dm1q +4LFV2b4b4dB7bXvMrbfeGvhercWZ0QqnXVufiFh9a4IaBwncwuYC32s1QZ+vjq1t +WPOxiIHbrLUEfuiaZfWtcdoBACKd52NMXV2dU/Jd3dSpK5oUQmbNylIfXZ31BQuu +ysho9TEmCiF5eXkvvfjS//5f/+ell5Zu2rTJmRFAvfx58y5Xpz8wHTU1NSkh7MrL +25idvXnTJuWHFs94dBN7dr4ClTZAceWjDz7QNqis3KJ6u6tYdHS0NlUBTEdAuUV5 +TAFvwdULlFt0eFu7rA6BrrvuOn3Kd911lzPd/dxUYHlG/Tz1/II6oNalDqpUtzKo +j6jYoJqg/n2Y7KSQluC+XQVNqpPaPLe0Kfy9CE2r1gZoM9xr/MQ2zG5K5lS1Imi4 +f/i0/KDQpXLzPWqR2gRlHvuk2rXjoiXYvnfJJ9LltDvNj79qgr5F2gsdjaAIBACA +52NMd1BnPfCkyrRpU1sb3KKu/96ivatWvvnoI//rd797dsOn2fX1wadZAtORLc1O +0SjAKD8oSHz68cfKEqUlJYoZ9pauorhVUV6usPRFbq6Ck51sKdizR+tyB7poYxTY +Zs++VNumxHXnT+/QpiqA6Qic3YEu3nXLLbec4Su7rIc3b948rVfdU3UBNanNOHnK +yy+/bOeFAvvBaml9dMtdarZ69WotQd395l3Gp59+2hblCjrRpE6n+ppapl38Zm1U +0KQq1QV32oUnzL1wZvjZrMDttCSpxlqa5rpbpZ21eyGoPnTnWMGj+fkTW4gJsVLb +yEceecSZcfKkyqrRfoVeqdbYfN9tg1Vv26O1ODNOnrQ71GlLnGk/1dgnotfAfVdj ++5K4n4jVm9Z2J7TAfTS2nNC0Iy0eB+2jvoHaSH3ctjS7mbjqLdiEs+8AgN6AGNOG +iRMzFly9QJ377//g++5FYs3pb2d5Wfnbb7/9xONPPPXk06tXr2meZ5SObGm33X6b +lqbkkJrquyhLWUi5QklGMcNO0Sh7dOyqM4UTLUpBxS4SU3T5YscOu0jMXWBa2lhF +qcvnXW4nW7QxCmx2kVjHrsrDWaQOn/tP/tbTdSON9fCMOoLWh1ZHUF1Yq7SW6gKq +v2i5S+9ye+G+Fu2hpWnJM2fOtOhilRZptAoLDLaWcIS/F6GppS1Ky3G3SpuhSW2q +yqGXY3HCfWP47ADqwAbGAJVtd0IfXttg7Wzgvqvc3o9Gy9Hua2ezs7PdXdCXRJ+I +CvaJWOVZYRE6KPC4n5c+aEsvYt9PdxYAAIYYE67hw1PtIjElEGUASyAtqqqqysnO +UZ554vFfv/HGypKSUmdGAHdAjl3A5p7wsVM0yh5KIHbRlwKJEo6yjfujrKKfwBq1 +UUu1t8YHDxwIukhMkUlr0ZYrtyy+YbGi1KxZWT3nZEtxccnOnXnr161f+tLSxx97 +4pGHH3V/li97dcvmLU673m3NqYElgbKysizDuN0++6dx66oGah4h7N/1Lfy47J+6 +lXud6bDZZrhdz0C2Cq3O3QZ1Sa3QmvD3IjS113KkeRRpc1EKDOrra4/aG2N0KCw/ +ND8aOhSq12IDr3ALYmch9OpMn2IxRoexzaNn3HAbtKfKb7Zh9gU4K+zY6sAGff1s +k7TBQfV2tjAwEwIAQIxpNyUQZQD3lgAhhtDU19fbLQH+z//+1Z//88/NbwkgdgGb +nfBZfMN3lDeUOtxr2JRq7ASLso37o6yin8AatQkckW8XidmIfLtITJFJa+k5I/KV +WxRO1qx5W7lFWeW5Pzz36vJX16//QKEs6DRUXl7eihVvPPnbJ4uKipwqnE49fnX3 +W+zhqa+s/qLc7R/xYpXu+QcrhHP9TzhsaVqRE7AC2DkNNdC6rEvdrg506L1oF1uO +KP7ZNrS2HEUFNVNBh9dqwmfL1BKc/T+dhZAwt1/b4LzNPzrfKsN8rzWzk05BrDJE +lOpWIY6tbXNXfScBAJGNGNNxNuhl0bULg86oNNfY2LhnT4HdEuA//vh87vZcZ8bp +0tLSlDeUOpQ9tEzlkIWLFiqQ6EcLV7xp8SdrVpadbHFH5NtFYj1qRL5CyIYN2Ste +X/GH3z9nuUXhJHtDtnKLNdChUy9tzNix502aNGXq1EsuvXRGVpbKKf6zXtXVh5e+ +9Kdeflpm3rx5/vMKwRRggk4XqIOubro6vjZUWqzXGMT600H/VN9htrQQrIGdB9Am +uRcIWUpp/vYw9yIceq8/CPgClWmzB6822iT1s7upS93m4QohzPdasxY/36760DvG +jq2+ty1GLDm7mwcA8ApiTBcIPKMSOIi/uaampoMHD/71r39Tnlm+7NXqVh4oKVqm +csjEiRkKJPrRwhVvWvyZN+9yO9nScy4Sq69vUG5Zv2699tFyi0LI22ve3rJlq/tw +nri4OMstCi2zLrrIF1oyMxXLEpOS7Ok6vmCTlHRuRoZmqbFqlHw4J9OmV/y3w7Ju +urqJ6oib5hdomc70pwNZ19MuiGqRPTlHnVcLBrfeeqtFC0spQZvR3r0IQct384/W +bssJHC7S3O5TI3mCLm1qF222s+ctCXPJ2mDnDe2/0s8+kRY/3xAJp7vpM7Vjq11z +qprpqu8kACCyEWO6WOAg/hC3BFCeycvLe/K3T7355lvNbwbgOcpj7uCWJ3/75BOP +P6Hcsn79B9rHwNySkpo67pxz7GTL9AsusNyi0NK/f39r0yLlmclTpzpJ5vUVEXC4 +upV12dVLVsdXnXV1Fk3zrqH9W3jQFUpqZumizfMVQSyctPkuNdNWBXbiFSeUK4K6 +1OHvRWiKQ9okLVwL0aK0IluO9j3Eomz0efOtCpN7KDrWHbfnpdjIlkDulXj2wbUp +xCdildbgDFNk1Wtrx9Y2qflVc3qXjsn111/vTAMAQIzpPu4tAWwITWu3BPhs42fP +/u53xcVOX98rbHCLOyhfecwd3FJdfdjaKJ+MHDXq3IwMJRbLLSqrxk62tItyjjKP +Clr4li2M+A/FeqjNB5c3v8uTnY4Iqrfes7qYYfaVXbZGLa15H1S9T/VB3QewaOFP +B9zS1wb2BHVqw9+L0GxjtC9Bu6NI0GL/XnQENFftO3wqRgfWdqf5VXBaqS8jtvQA +UJd7JG3SZTXasBYDQHPucoLSlLbBPuUQ56PC1IFUGfrY2iZpsUG7bxsc9CECAHo5 +Yky3syE0dkuABQuuSvM/BzNQTU3tSy++1MOTTFFRUdCg/BUr3ggclN+vXz/lExvc +MiMrS7llytSp4845JyU11U6kdFJ0dLQikArcuCw06+rdfffdbkdZXcCsUyPaA1lX +Us3s6SIqq439Y7lyha9Fe2hp6l5rOfPnz3f7oLZw64O2a5nh70Vo9q/7epebKLSF +Wqx7q4DmLN480v6R/S4dB9tZrVThzd0FHRZbr45ViDMh9l5ts/u56FVl2/fww5X7 +iQQeNx1G2wZtQPiLapGW7O5amGwzQhxbbbBtlT4j+9qI9l0rcmcBAGCIMWeO8sy0 +6dP8A1q+E3Sx2bFjx3pUkrHBLYGD8pe+9KfWBuUrrii3fOnii1WwwS2aZW26lg33 +LykpiYzrytSls3+Yd7uYXcI6weqLT5gwwZavXqAm7eEbNsvf0NeRtSeTqL9oFzKp +g6u+qSJEB2KMFr7a//RM9TjdcS/aBuuMakUhOu7Nhb8XoV133XVuIrLlaE+VLuxK +NtW3uBy9q5NnKrT91udWdHF3QYfFDm/ojNT8c9GrHUYtM/yufOAnok/WtsGikVbR +/IbO4bOvrrZKi9KkHeEwaftDH1sdHC1QS9am2ja7XyH76AEAMMSYsyAtLe37P/jB +tGlTnWk/JZnX//762eqgW26xQfnu4Jbmg/IVJJoPyo9PSOim3BLEPatTUlJsBTSn +Lrh6qIE9RXWp8/PzVS+aDOy4q0+pnq7VG3Uis7OznYl2Uu9TK9ISArubWnvQYJhw +aJPC34vQtIOBsUEbqQ6xu9fqLjdfVOiYESatRbtgazEWYHQ02uyO63AFHTTLNuJM +h8f9RJxp/3I0qUrNcqo6R5sUfuTTjrd5bNVG+65m7lHS8oO+pQAASJ+TJ086RW9a +vvzV5ctfs7Lv3sRzZlvZE1a8vkI5wZnwO2O7UF1dXVysOFCs9KJC0NNajPKJkoMi +il47MKClO2zMztamLr7hOy3elk37ovTlTERFLV36glMCAABAZCHGnGXLl72al5fn +TERFDRgw4F//f//aHc97sdCiF99rS7mlX79+cYMHK7FIrP/VmdGTbNu69XB1NTEG +AACglyPGnGX19Q3P/eEP7t29JHAv7FovBQ+VbWiN1YfDTrPovdXV1e6AlkCWW+Lj +432RZfDgM3NhWCcRYwAAACCMjTnLYmKiLz/9yvLPPvvMCjk5OU88/sTKN1aW+61Y +8cZnG51ZrVE/PnBQvg1uaXFQ/qyLLjoDg/IBAACA7kCMOfsmTswIvAtzbW2dPd1/ +9VtrkpOTf/azO7OyZsbGxqombvBgf5MWKMA8+dsnFV2aD8p3nzgZOCg/9BMnAQAA +gJ6MGNMjTJt22tViFmPmzJ0zYMCA//N/Hlu//sPGxqbFN3xHgccaBKqvb1jx+goF +GLsyTREl8En5HX7iZDgaGhoOa63V1aUlJXuLiirKy1VubGx0ZgMAAADdg7ExPYKi +yBOPP+FMREVdeOEFX7/i685ESHrj0peW2ukXZRWFlm69PEwppba2Vq8KMCo4tafr +16/fly6+2JnoaoyNAQAAgHA2pkeIiYkOvK6svr7eKYUUmGEUYKZMndpNGaa0pOSL +3NxPP/5YKaJgz56KiorWMowkJiU5JQAAAKB7EGN6ioSA674CQ4LdrEzsSrNAry5f +rgzTr1+/6RdcYE+473J7i4qUXnbl5Sm6NDU1ObWtSExMVJRSoHKmAQAAgO5BjOkp +AmOMUXT543P/YQ/U18+Tv31q29ZtzryoqA0bsu0WZIoN3fSMF6WXfXv3hk4v0dHR +SlDahlkXXXReZmYPeUomAAAAIhsxpud6dflrjY2N993384cffnDRom+ppr7Budis +vr5h/br1KowcNar7LuJKTEwMiiXKS6pRbhkzdux5kybNyMrSjzKMarj1GQAAAM4Y +YkzPNWLE8LKysgcf/OU999z3zjvvzZk7Z+bMmTYre8OGhoaG6OhoxQmr6Q4KSHbH +M/dn+gUX2GVjPG0GAAAAZxExpuf6l+/8yx133vH9H3z/7nvuunXJLZde+mVnhv+K +Mr2OHDWKcyAAAADohYgxPVpMTPTw4cFj94uKihoaGlTopmH9AAAAQA9HjPGeosIi +vcbzJH4AAAD0VsSYnqu6uvqdt995+qlnHnn4Uf2oUFTkCzDFxf6HXcbH+1sBAAAA +vQ4xpuf609L/3L17z9VXX3XffT9ftOhblZWV+/ftV33DqfuVAQAAAL0TMabnqq+v +LysrW7t23YMP/nL58tfOOWfchTNmOPMAAACAXowY03MtuW3J4hu+M3XqVL3edvuS +b//Lt2NiuMExAAAAQIzpwRRa0tLSpk2fptfmz/gHAAAAei1iDAAAAACPIcYAAAAA +8BhiDAAAAACPIcYAAAAA8BhiDLzkcHW1U2pLbGysUwIAAEDEIcbAMxobG60QHR1j +hSDVVf8IOenpaU4JAAAAESeiYkx12P9UDy9yT8UMH55qhSA7d+Y5paiolJQUpwQA +AICI4/kYk56e7pSIMZFFoSXoErKKigq9ZmRk2GSQ4uKSvLx/xJisrJlOCQAAABHH +8zEmJSXZKUVFFRXtdUrwoNra2oMHDuzKy9u8adNHH3ywbetW/ZSWlNjcxsZGK0+c +2HKMWfH6CqcUFZWcnEyMAQAAiGCRcDYmcDB34GVF6OEaGhqUTAr27FFcUW5RelFZ +NcozTosA+/b6MmpCQvy06dOsJpAyTMmpwCNXXvl1pwQAAIBIFAljYzIzJzmlqKjs +DRucEnqexsbGw9XVe4uKlFs+/fjjjdnZu/LyDh44EOL+Y9HR0XpVAzVTYfbs2f7q +f6ivb1i+7NUtW7Y60/7B/VdeeYUzAQAAgEgUCTHmssvmOiX/dWVFRUXOBHoASyBf +5OYqtGz45BMFmH1796qyqanJadG6fv36xSck1NbW7sjN1WRa2tjAUzHV1dXr161/ +8rdPBg6JiY2NXbLkFmcCAAAAEarPyZMnnaKX/fjHd5aVlVk5NTX1Bz/8vpU9RD3y +9es/sLL664tvWGzl5pa+tFRpbczYsWPTeuI9hZU66mprlTH02uLlYeFLSU0dOWqU +IlBDQ0N0dPR1119bV3e0pLhYSbW4uESVTrtTlGHuv//ngXd9AAAAQESKhLMxcu21 +C51SVFRJSUngaG90N8WJivJyu1TMhrjsystrbYhLuwwZMmTbli1aft++fZW3X3zh +pVeXv6qwpxRHhgEAAOjNIiTGzJ07J3CEzJYtW7ds3uJMoKu5Q1y+yM21IS5f7Nhh +l4o5LbpCTEzM7vx8u/bsxIkTx44ds/oW6Qvwm988ToYBAADoJSIkxsiSJbcG3rJs +xYo31q9b70yg02yIy668vMAhLhUVFeEMcQk0aNAgfUyBn1Rr6uvrnVLr0tPTrrji +67/+9eNLltwSzjIBAAAQGSJkbIzJzs557LEnnAm/tLSxC65ekJCQ4Ez3YD1tbIwN +cREFmM5cHqbc0r9//yNHjqiclJQ0bly6fkpLywp9fDdjGDJkyNGjRxsbG/3N25Cc +nKzooiVkZmZOnpzp1AIAAKCXiagYI2vXrnvqqWeciVOmTZuaNWvW8OGpznSPdNZj +TENDQ21NjS+3HD6sQntPs7hazC1KHXoNOmFSV1dXUFCYm5ur1+3btx89Wq836u32 +Xpdyjj47LeHCCy+YNOk8pxYAAAC9WKTFGGkxyUhCQnzGxIlpaWmtPQb+7DrzMaax +sTHwlmLNB82HKfzcElppaZlFGr3aiZrY2EH6eh49etQamMzMSenpvlUkJydzQgYA +AKB3isAYI4WFhb/61RPuLZiDREdHK8kozyjVxMT4nq7YE5yZGOM72eK/SKwzd0Pu +fG45dKj4UHGxXidNmjiulXH527crzvhSzZ49eyoqKrXGgQMH1tXVObNPSU9PU6qx +V1INAABALxGZMUbU3125ctXKlW827/gGyshQlslIS0876+NnuinGNDQ0WG6RDt9J +rPO5paqqWsmloKBIr/X1DSNGDB8xfLhegzJMQWHh0IShQ4cGfxY2lkbBRq+5uTtU +ExcX19TUqEVZAxepBgAAoDeI2BhjlGHef3/t2rXr7CKlEFJTU6dNn6ZIc7byTFfF +GLsbsi+0dGKIS1fllkOHipVMNKlo0lpucc/MxMREa+6k885TM2d2MzacZvnyV/WB +WkAdMGDA8ePHbW5zpBoAAICIFOExxmXjLjZsyM7J2ehUtcKG0EybNu0M3xKgvTHm +vEmTEpOSrMbOtFh66dgQl67NLfX1DUOHJii3+JZzem6x0GLpRbllhKLNqTMzTotm +7CSMcsv27dvLyspVo6jZp49vjdYgfMozc+fOufLKK5xpAAAAeFNviTGuurq67Owc +9Yz1Gvp6MxtCo0hzZm4JEH6MeeThR/U6ZerUeP+Jo4ry8i92+K6zapfO55b6+npf +ICko1KvKMTExllv0qrLTKGAYjP5Pk+3KLQUFBQpsqklNTU1MTBw6dGhiUuLIkSOt +mZSXl1f4/08OHfQtPxw//ekdWVkznQkAAAB4UK+LMYHcPNPazQCM8ozd36xbbwkQ +ZowpKipa+tKfVLjk0kutpmDPnoMHDlg5hK7NLVVV1XYNWOjc4g6DUctwcou9qqa1 +3NKaY8eOKcls27rt4MGDoZ/3L5mZk+6//15nAgAAAB7Uq2OMS33n999f597nNwQF +DDs/0+VDaMKMMSteX7Fly9a4uLjpF1xgNRuzs1u8kKzzuUXs6i+9urnFH0tGBI7C +D3MYTKDmuWX48OFJSYnx8Qntyi0KLXYupqamxpnRFu37ww8/lJKS7EwDAADAg4gx +pyktLcv2ybHbYYWQmppq52e6aghNODGmvr7hyd8+qdBybkZGSqpvvbW1tZs3bbK5 +MmTIkC7JLf7zLVWabDO32DAYaxYityis+KPLP3KLcmByclJ8QoJCS7fmFuM+/n/u +3LlkGAAAAK8jxrTMhtCEf0uAzj9V006zWLm1GLN82at5eXnR0dEzsrKs5ovc3IqK +Cisrq6invmjRwo7lFr22NubevZzMzS2+68SaXU4WyOKK3iKWCQNzi1LWwIEDrWVr +uiq3tDfIAQAAoOcjxrRNecZ+wrwlgCJNB4bQ2P3HrJyRkbHo2oVWdm3ZvGXFijdU +cO9RVlpSsisvzz/T8etfPx7OqQaFix07diq8qBw6t+g1xPD9QOQWAAAAnDHEmHaw ++wHoJ/QtAcSeqqn/DzPP1Nc3PPH4E85EVNS0aVMXXL3AmfBzM0xKauq5Gb7TPqWl +pbt37Tpx4oR/vkLUwD59+p5zzrjJk9WNzwz9jJSqqmqFk9ZyS4hhMIGa5xa1TE5O +GRI/JMzcUnOkxm4yRm4BAABAuxBjOkIdd0WaLnyqZuDAGFm4aKF7idquXbvef2+t +QovKcXFxwxIT6/yPtmxsbLQGgfr37z9w4IC6uqMqZ2ZOsmc+6qfNLr7CiALJGcst +dsqlzVuKBSG3AAAAwBBjOsVuCaBI05mnahYXlyx9aWng3cayZmU11NcfOHBQPX6n +KmzKEglDE+Ji4/r163fsWMPevftUmZY2dtw450RN+APctXf+6OLLbEovR48ejYmJ +TtH7U1IUWpISkwYPGew0bQW5BQAAAN2BGNM1wn+qpvJMmp/ChiaLCos2bGj5jslh +stySmpI6eszosWPHOrUBlCIOHTxUWlqyf//++vqGQYMG2Ska/aSffm8xcgsAAAA8 +gRjT9Wz8jJJAm0NoQuvTp9VPZ8TIEcNThyu0DG/9mZItUsxQwCgpKamsrCwuLlZN +ZuYk5RlyCwAAADyEGNONCsN+qmYHKMkoaPgGpYQRNlqkyKHsUXyouKqqMnX48GHD +hpFbAAAA4AnEmDPBhtCEc0sAiYmJGTBgQFNTU+iL0wINHjzYBtlbtnFquwi5BQAA +AD0NMeaMcofQlJaW5ubusGewNDU1pqenn3/+dL2KOwRf4Sc313etV7vO5wwcODAx +KVGpxoJNm3cPa47cAgAAgB6OGOMNyj+WZxSBFGnCP1GTmJg4cpTvwjOlmtYuGCO3 +AAAAwFuIMZ5kNxNTnmnXjQQGDhxoZ2kSkxKVVcgtAAAA8ChijOfZXZL9qcZ5KmWX +U2ixq93ILQAAAOgJiDGRRnnm1IiaHeFfexbEcou9Tp6c6dQCAAAAPQMxJpLZTQLs +RE3omwSQWwAAAOAhxJjeoq6uzvKM/3TNDnILAAAAvIsYAwAAAMBj+jr/CwAAAAAe +QYwBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wB +AAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA +4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHE +GAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAA +AAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAe +Q4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wB +AAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA +4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHE +GAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAA +AAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAe +Q4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wB +AAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAeQ4wBAAAA4DHEGAAAAAAe0+fkyZNO +MYIUFhbW1tY5E+iEFJ9kZwIAAADoGSIwxqxdu+6pp55xJtA5sbGx99//8/T0dGca +AAAA6AEiMMYsXnyTU0JXUJJ59tmnnQkAAACgB2BsDNpQV8fleQAAAOhZIvlszH33 +/Xzy5Ewro72WL391+fLXrLx06QtWAAAAAHoCzsYAAAAA8BhiDAAAAACPIcYAAAAA +8BhiDAAAAACPIcYAAAAA8BhiDAAAAACPIcYAAAAA8BhiDAAAAACPIcZ4Q2VlpVNq +hRq02QYAAACIDMSYqD59+uTk5CQmJjrTZ9b111+vDdCrM90KNQjdRnO1CyQZAAAA +9AbEGJ+srKxhw4YpTjz66KMTJkxQQaywe/dum9Qsvc6fP1/1btl9VTNnWe2k4LF6 +9Wq92uqURvRqVLZKvarlK6+8orhls7TBCi0q3HrrrdbGlrZmzRqrF3u7LTBwg63c +4Q0GAAAAzrreHmOUH+bNm6cMo/L48eNnzpyp/v0jjzxy3XXXuR19lUUFzdUst/7p +p59WvZKDlmA1HaBVG1ussope3TW61MB9Fa3RTry4b3RnuSdktGFW0KJs12xnlYWs +HgAAAPCoPidPnnSKkWLx4puscN99P588OdPKnqBA4sYYBQ+rDKQGd99998svv6xX +xZKgqGNsIZql17vuusupbb/ly19dvvw1Ky9d+oIVAAAAgJ6gV8eY733ve+P8VNDk +e++9Z/Xyla98Ra+ha0SVBQUFf/zjH/WqhVibdtm0aVNVVdXQoUMvuOACp8qvrq7u +ySefvvnmm1JSkp2qADk5OYoxzkR7aF1aowpanVZqlS0ixgAAAKDH6tUx5gE/Z6Jz +LN50IMbccccd11xzjRtjbDkNDQ3PPPPsT37y47lz5zQPTnptnq+keWXz91qMEa0u +9NYSYwAAANBj9eoYo15+i135urq6999fm52dU1hYpLJVpqenZWZmXnbZnPT0dKsJ +VFBQoNdx48bZZPhajFL33HNvcnLyz352pzPd1SzeEGMAAADgUb16iH+L/Xh133/8 +4ztfeOGl3Nwdii4zZ85YtOhbmZmTamvrVq1685577vvFLx4qLCx0Wp9iF6c5E+1h +17MpLGmxFpm0AaWlZbfddqt/fre4wM+ZAAAAALyGGy7/g1LEPffcu3z5a7GxsTfc +8J2vfPUrx4835uRsVM3hw4dHjx71jW9crVSjePOLX/xy7dp1zts6x8KP1jh5cuaT +Tz6tAKPV3XzzjaqxBt1hqJ8zAQAAAHhNr44xfU49bkXsfEhhYdGXv3zJ+PHjlSVq +a2onTTrvhz/8wc9/fs8111wzduzYzZu37Nmz56abblD7p556JijJBA1Eaa8rr7zC +H5AeysycNHfuHKcWAAAAQDOcjXH86lePW4bR69GjR2+//bb58+dNnz59+PDhmpuQ +kKDyDTcs/trXvvbKK8uvvPLrsbGxSjLNry5rLxtUI1qgAkxZWdmiRQutpvtU+TkT +AAAAgNcQY3zWrl2Xm7vjggvOV4ZJTEz8xjeujomJceadbuLEiQozK1asvOqqKzT5 +q189YfUd9sc//tEpRUXdfPNNDz/84Bl41o3drMyZAAAAALyGGOOzbNmrsbGxo0eP +jouLVYZxalsxfPjwRYsWvf76G1/+8iVlZWWdHCRTVVX13nvvWahISUlu8TZoXShw +dQAAAIBH9eoYYzebzs7OURq55JJL3n77nfnz59us0NLT0zIyMgYPHqzyhg3ZVhn6 +/sWtsTuVuZQxXM1rpHml1Ygz7de8RqxSuFMZAAAAPK1XPzfG2ANSrr124ebNW669 +9lqntpni4uJPP91QWloSHx8/ceLE4cOHr1r1Znz8kNzcHRH5WBWeGwMAAIAeizuV +RW3fnqvXysqqtLQWLuiqr6/fvn37smXLsrNzdu7cOWXKlJ0785RnFGP2799vMcmW +EHi6AwAAAED3YWyMT3p62t69++ymZNXV1YorVli9es3rr7+em7ujvr5hx44dU6ZM +bmo6cfXVC2680XfP5XPOOaeqqtr3/u5XWVnplAAAAIBejxhzGuWWF1986e9/f337 +9u3/9//+tra2RgFmz549dsPlr3zlK1/+8iUqtHYfsw64/vrr+/Tpo1dnuhVq0GKb +3bt3Z2Vl5eTkONMAAABAL0CM8SksLBo7dkxxcbHKE/127syLjo6uqam98cYbbrrp +xm984+r58+cFpRfFm6FDE5yJjqqsrFy9erVeJ0yYYHlGr0Zlq9SrWr7yyiuKK5p8 +5plnbK4qH330USWZ+fPnK8yomQqapZZ6tXLgAo3N5fQOAAAAvIs7lUXZ+JZhw4YW +FRV+6UuzNm/ePH369H79+v3rv95+7bWLNMsuNgui5DN69GgbFWNL6NidyoadojSi +SWUMvV7n55/vUAN7Vb0SiF6t5bx586xeldZGs2xRyjya+8gjj6hm/Pjx1lJsLjEG +AAAA3sWdynw3XH7ssScuv/zyDz744Ic//MEXX+ycPn1am5eN/f3vr48ff85f//q3 +mTNn/Oxndzq1naOA4cYYBY/S0jKVU1KS/TNDufvuu2fOnKl3OdMt0cLV7OWXX3am +28KdygAAANBjcaeyqKysmcnJyR999NHll3/t9ddXfOlLs9rMMIWFRXl5eaWlpSrP +mpVllR27U9kDfvYsf0UXJQ2xa8meeuppZRjfdWAB7F3OhJ8mFWDEmfZr3kzLVIYp +KCjQ6u644w6egAkAAADvYmyMz7XXLqyrqzt06FBjY+Pf//66U9uK4uLi5cuXX331 +VR9++JHyz9y5c5wZHaVc4T4E86Tfhg3ZP/zhLTfffKNb4wpsZjQ5c+bM5pVBNaKa +cePGaXXXXHNNVVWVtQEAAAA8hxjjoyiSmTkpJ2djenpaRUXFsmXL6uvrnXmn27lz +50svLV2w4Mo33lilyZ/97A6r7zDlCr0qRNklZKLCU089s2jRt9LTW3iOTZcY6udM +AAAAAF5DjHH87Gd3KsN8+OFHeh01evRvf/vk6tVrCguLlGeqq6tVWLdunQLMO++8 +841vXL1y5ZsKHkuW3NL5pGHnYWJjYx977PHCwkKVn3rqaW3DlVde4Z/fLS7wcyYA +AAAAr+FOZQ4Fifvvv9eSzKeffKoUkZqa8sknnyjP/N//+9v33nu3qanpS1+aNXz4 +8FdeWab2yjBBl5N17E5lrptuuvFXv3oiOzsnN3eHXU4GAAAAoEWcjfkHJZmHH35o +0aJvqfzaa39ZseKN48ePnXPOOMWV+Pj4TZs+V4BRxsjMnHT//T/v/JCYIHZTtcce +e+KKK77efZeTAQAAABGgV8eYFu8ttmjRwt/85vElS26ZOXNGaWmZcsvatev0mpKS +rIDx8MMP+k/aBMeMAj9noj3sHmXmssvmJCcnX3vtQme622zycyYAAAAAryHGtCA2 +Nnbu3Dk/+9mdzz779NKlL9jPww8/dPPNN7Z2nqTDMSbwXZagtHZnuttU+TkTAAAA +gNf06sdffu973xvn597vuAOUQ/74xz/qVQvpwPAYe6+7DYHJypYWlLWaV7orDee9 +trUq275bfYt4/CUAAAB6LJ7i/w+hY0BrwcApRRxiDAAAAHosYgxaRowBAABAj8Wd +ygAAAAB4DDEGAAAAgMcQYwAAAAB4TK8eG/PRRx+NHDnSmehlSktLZ82a5Uy0hLEx +AAAA6LF6dYyxOx07E73Mrl27zj33XGeiJcQYAAAA9FhcVAYAAADAY4gxAAAAADyG +GBPK8ePHi4tLnAkAAAAAPQMx5jR5eXkrV725YsXKZctf+4/nX3zhxaUvvvSnoqIi +ZzYAAACAHoAYc5rKyqqYmJjBg+PGnzNuzuwvf/MbV0+fNnXLlq3ObAAAAAA9ADHm +NGPGjN69e88ll1ycnp4WFdVn165d5RXlH330yX/8x/Ov/eWvH374keaWlZU7rQEA +AACcDcSY03z++eb169b927899NgT//6nP7/yyYacyqrDo9PSqmvqdnyR99aad1av +eXv9Bx+uXLnKeUNUVG1tbWNjY35+vjPdzKFDh9TAmQAAAADQaTw3xnluTFNjk17/ +8te/jRg5YtNnmyoqKwcOGNhvwICmpqYB/fuPGjVSP/369aupqYmJiVHjr33tK2qv +DPO73/3un//5n//2t7/16dMnMTGxoaGhtLT0nHPO0axjx44NHDgwLy8vLS1Ny7ns +sstWrlw5cuTIqqqqa6655uWXXx48ePCAAQPS09Mvv/xy/1acOTw3BgAAAN7V74EH +HnCKkcLtfM+dOyclJcXKLVKcGDp0qJVPnDih1135u0eMGD5hwoRzz52QkBA/oH+/ +9LS0AQMHVFdXf/bZpuKS0orKqvzde8aOHX3OOb78o5SSlJSUkJAwffp0hZzhw4dP +mTJFYSYjI0N5ZubMmco2o0aNUoAZMmSI5irDqEFqaqqCTWxsrAJMfHz8pEmTFI36 +9j2jZ8YqKiq0nc5ES3J9dlh50aKFVgAAAAB6As7GOGdjGo/7rvt6/Y2V48efYzWD +Bg1avXpN7dH6QTExFnKUSaS2pnZW1gw7G+NdnI0BAACAdzE2xtG3X1/99PFnFatR +wEtNTTnR1KRC//797YqyoqKihmP1R+uPWhsAAAAAZx4xxtHXb8SI4UWFRQV7Cmpr +awcMGHCi6URVZWVDfX3/fn2Hxg+ZNmXylMxJJ5ua9u3dW1FR4bwTAAAAwJlFjDnN +RRd9acGCK7/61cuONTSsWb0mP393Y+NxZZuokyf3+40fP/7GGxb/8Ic/CD2wBAAA +AED3YWyMMzamNSdOnCgtLe3fv39SUpJTFREYGwMAAADv4mxMG/r27Tt8+PAIyzAA +AACApxFjAAAAAHgMMQYAAACAxxBjAAAAAHgMMQYAAACAxxBjTlNVVZWbuyP0z/bt +ucf9j/wHAAAAcFYQY06TnZ1TU1OTl5eXm7t93759h/127ty5Z8+e3bt379q1q7Cw +cM+eAnHeAAAAAOCMI8acJi4uburUKXV1R6urj6SmpmZlzZw1K2vo0KFjx47NzJw0 +adJ55547Yfr0aX379nHeALTk0UcfzcrK6nPK9ddfv2bNGmde+2lpzoLaopbOewAA +ACIaMSZYTU1NQ8Mx5ZmNGz/r16+fuoZDhgxWbqn3O3bsWFRUpD0wFF2osrJSAebu +u+/OyclxqqKiXnnllfnz55MxAAAAugoxJlhCQkJj4/G4uMFpaWNPnDhx8uTJ0tKy +8vIKzVKGqauri4riVAxadeuttyrADBs27Omnn9aXR/Lz86+77jrNUrZRnrFmHTBv +3jxbYIs012kHAADQCxBjTnP8+PHt27dPnz510KDooUOHbtmyVT9xyjSDBzc0HNPP +8cYm1fTt28/aHz58ePXq1eXl5evWrdu0adOuU7Zu3VpYWFhUVKRCTU3Njh071JfV +kjdv3qxCQUGBysXFxXrjFi1u61YVvvjiC82tqqqyJcOLFGAsqLz88su33HKLVY4f +P16TFjM4IQMAANAliDGnmTt3TmZm5qpVq5Vhpk+fNm3aVP18+cuXXHDB+fp59tnf +//qJ3/Tr1/ecc8ZZ+4qKitLSUmWPpKSkNWvWrFix4ujRoy+99JL6sg899FB2dvby +5csVZt5+++1nn332rbfeWrly5e9+97s33njjj3/8o9ocOnQoNzdX7ZcuXfq///f/ +zsvL06sWaAuH59iFZMotzc+N2AmZwCvNAAAA0HHOJSkR5DvfudF+tm3b7lS1Ys+e +PU7pdEV79/76N//vvff9j9f+8rf9+w+opqGhYfWatx9//N9/fu9/f/e9tQUFBdZS +jh071tTUpMIJP6ts9LOC1Rw5cqS6utrKbjNjbzcqB83tJopMTqkVy5Ytd4+kU4VO +ePrppzv8G/fII4/ojeFcVKaWzvQpL7/8siUoo/Lq1audeQFUGdhMy1FEd+adbGMw +WOBKtZy77rrLmeGnxWobnNl+innOvADDhg0L2njbazV2pk9nc0Nw2vmFeRCCuB9Z +i5pvWJhrcU/TNRd4BFo8Si73ksXWjpL7KbgtTegPWqw+6F35+fn6gFTf2sfh6uTb +w9xroy3X9tuSJegrpD21eq3dqTrF1tL8yIT+6jq1rbBVt/ZxAAC6A2djWjB2zJgf +/9d//f73bt6yZcs777z70kt/ysvb9dnGTedmTJgzZ/aGDRuOHq13mkZFDRgwoG9f +32G0W0VZZT8/K1jN4MGD4+Pjrew2M/Z2o3LQXESG3bt363XmzJk2eWZc7xc4IEfl +5jcbeOaZZ1QZ2Ozuu+9WTWVlpTMdHi22+cK1WG1Dm1fTaV1aqVo6013HFtvmQegk +34Hu/rWESV+2Ftfb4Q9aS2vvlyFQJ9/eopycHLuXhrtk+wpNmDDBftfaRVvY4a8u +AOBsIca0asKE8Xf85L8OHDhgWOKwnI0b6+uPlpeV6eerX/nKpEnnOY2AMKiDpR6k +CoH/EN7d1P2yDustt9xi/2iRH3CzAdseUZ/v1ltvVUGz7B/mV69ePWzYMHUT3Tb2 +dtP8X7Lt37C1HC1WBXd18vLLL1v75n3BoH8Lt3MU2uAwr7vTSp13njptEvRP4NZM +67VVB/47vf2TeeBBCKH5v6zb6gJpFeEc6kBBJ2rsKDUXdJSktZaB7AMNEs4H3aI1 +a9aEc6Ba04G3t7nX+oVSwNAezZs3zz2SKmhSlQokTrvwhPnVdWb42azA7Qw6kwMA +OAOIMaEMGTLk+uuvm5WVlZ6WduGFF+7Zs+eSSy7KyprhzAbCo+6jOl7q+pyxvo5W +53bf3W63NsC98MntnFkX02bZ9TnqC9p2um3CYcvRewN7+VqXZQZtjzqLVtki911q +aYUuYbugXQs88irb6tq1g60J/1Ab20H3Uqgupw9CycH62YE6/EFb+Gm+wDB18u0t +0r7o6zRz5kyLLlapgia1Is1Sg/CPcCe/ugCAs4UY07aUlOTLLpt72WVzzj333Lff +fs+pBcJzt/8+y+pUqfvoVHU/dWStu2xnOQJZz1U9MzvvoZZ6DWqmNif9Yw+c6TCo +z6e3qB/pTJ8SZm/SOrtq3IXX3emw6yBomRYnAml/Ve8ehM4I/1Cbbo0xWrhlksAe +uenYB62lafvVxW++d+Ho5NtbY+e+mn+sYivSzrpH2A54CJ386gIAzhZiTLiGDBly +442L/8t/+YEzDYRBGca6lcowZ3JgjPqOetUam3fF3ErrW1vLrv3Hci1Zey3affcK +H1uRS7nFP5rMYf987p4ocOldTotTtNigRbXGmqkX67zzdNa7DXNRIdgSwjnUxtp3 +7QF32WkK9e/dcxSuDqzXDUV2XqK9Ovn2EGxf9O1yPssAdnmYGmhP7eBbfgtTOF/d +Nqm9szWnaIHtXQgAoE3EGKC7qKeu7ov6UoGXvpxJzTvWJrDeevOttWwX9RezsrLU +abOx16Ldd+aFQVtil/eEpsVOmDChXX3TEGz3Oy+cQy1anbqz3RRotWQdHK2xxdjQ +gQ9aS9O77rrrro5tcCffHkKbn5o1sNM12gz3e2UppfnbO/nVbZMW2IVfWgCAIcYA +XU8dSvWH7AzD2cow0lpvz+oDe7Rt9gvb9Ir/xlx22kHdVvWkTfNrdczTpw/jtvMw +WkhQkhl/+gj77Oxs6xNff/31YW6z2jtvbklXXewU5qG2jmw3fR/UV9arYkOIUy7h +f9D6KO0LbJfGtVcn3x6aHU99Z5xPsZn8/Hw1cA+Fe+rPUkrQQWjvV7dNnf/SAgDC +QYwBupj9y656Req7uD2YM8x6b9qG5t0mt9La2OYFXfGiBtbts75dOOxfr5UKrN+m +HqQJs9923XXXWaKwYQ+t0dbaqA8tts1tC3EQulD4h9pq9NodXwl963TotCIdc6fq +dO39oC0UqTfvZrB26eTbQ3OPuU22Rs30VQxMqgqQzTepk1/dNrXrSwsACB8xBuhK +6k3O9z+IQx2m1f77Jjkzziyt3fpqQSc3xDpt2jDr19qZgaBmliW0hPA73NY/az7q +uvkGnDHuQWh+gZC21rrvQd36Dgj/UOtbYSco7Jh3LbtHgvroNtlcuz5o1eubrMqO +na3q5NvbZF8z7Uvzj+/666/Xx2pHQ7Rrgef99CupfGKfl6sHfnUBAOEgxgBdRv1U +9aJUUAdOHaag3tKZpFWru6bC3Xff7XbpbPOs52pzxTqa6g66V7yoA+penuRrER7r +B+uNbs9SK8rKytLSbDI0NbZeY1B/OoiWZrvTvOfdnHsQFCf0LnfDtCIbva1973zO +DP9Qa72q12SXfzG0a6Kg0rwv7mrXB22fWohQFFon394m7YuOofZCn6MbNmzXgo55 +ODr51W1Tu760AIDwEWPa4eTJk1VVVXv37ispKXGqgADWT1XB/cf+5ty+kQpBNV1L +PTnruWqrbEWJiYluJ89mifrxdsWLZqmBmtnZJPW32tUXtMba8QkTJtjq1KfUpHvz +Mfs3b5c6dtbMWN9aG+NumFHP0mnh545h0DaHEwYCD4K7YVq17WBX9bPDOdSqtMyg +V2sTyDrQmqWNVKFj7HNsTXs/aG12Z84adfLtoemjt38m0HFzv0g6dHbMtZvtSqft +/eq2qZNfWgBAmIgxbTjWcGzPnoIPP/zoxReX/vbJp//9/z755ptvDRgwwJkNBOim +QNJh6japKxbYm1TnUv2/oO67VQb+Q74aZGdnOxPh0duD1qXeoT3M3pbcZl/QVtpm +B7T51oZmByGwvQUYrasL+5RhHuruoxV14NC19kHryHRmyzv59nDoQ9S3S2sJ/BD1 +ldPuaDed6fDogHTyq9um9n5pAQDh6HPy5EmnGCkWL77JCvfd9/PJkzOt3KKCgoJx +48Y5E83s378/J2dj/p6CPlH6vz5NTU0Txo+7+KIvjRgxwmnhZbt27Tr33HOdiZYs +X/7q8uWvWXnp0hesAKBj+vTpo46y+rLOdEvURlHE7rIFAABC42xMC4qLi3/37O+X +v/rXvfsPDhwYfez48fghg3/4/e9e88/fjIwMAwAAAHgaMeY0jY2Na9eu+/PLy6L6 +9Ovbr78mjxw5/LWvzP3ed28aOjTBaRSgrKzs1VdframpWbp06eeff56Xl6eaPXv2 +NDQ0HDx4UJNVVVWf+O3du1fNtm3bppqCgoIvvvhCDbT83NzcAwcO7Ny5U41LSkr0 +qpaatW/fPrUsLS09cuRIfn6+3lLpf3De9u3b9ary/v37nY0AAAAAehkuKnMuKtu2 +bbteV616s+HY8b59+wwaNGjw4LihCUP7REVVVlUNGDBgzJjRWtqIESMOHz5cX1+/ +f/+B88+frozx97//fe7cucohffv21WRhYeGxY8fS09NzcnJSUlJiYmJ0hDWp1DFt +2jStURHl3HPPjY2N1SrS0tI2btyo98bFxR0/flxrGThwYGJiohLRiRMnvvzlL3/w +wQc//OEP165dq3SkVSvhqFJJ5tChQ4MHD77tttuGDBli299eXFQGnElcVAYAQNci +xjgx5o03VulVEWXz5s0KEl/96mXnnXeeooLNbWg4tmNH7vr1H+7bty993Li0sWML +Cgu/992bFUasQWvq6uqUWJyJVugjUPfFmThTiDEAAADwLi4qc8yYcYF+hgwZ8uUv +f3nieefl7dr9wotLf/Ob//eVV5Zt3PjZhx9+uGPHzv4D+g8ZEi/5+bsHDBgYTvRo +M8PImc8wAAAAgKcRYxwj/BYsuPLqq6+amHHu8YaGPlF9LrjwgnMzMt597/2SktKR +o0ZGR0fHxETvLSqaPn3q8NRkTTpvBgAAAHAGEWNaMGnSeTfdfOMtt/wwLjY2Jzvn +6NGjNTU1xxoavnzJJT/5yX+9444fz50755vf/Ebfvhw9AAAA4CygI94qpZSZM2f8 +6Ec/uO/ee374w+/Pm3f5xIkZ/fr1i46O5jIwAAAA4CwixgAAAADwGGIMAAAAAI8h +xuCs2b49Nzs7x39nZ9/PypWrVFNaWubMBgAAAFrBc2Oc58a4dECOHz/et2/f/v37 +28GJyJEwZ+u5MUopiiu5ubmFhUVOVTOxsbFZWTPtx6kCAAAAAnA2Jpiiy1//+tcN +GzasWbNm7dr3ly1b9uabbzrz0AkKME899cxPfnLnqlVvuhkmNTU1LW2s+2P3sK6r +q1u7dt1jjz3x4x/fmZ2dYy0BAAAAF2djgs/GHDt2rLy84oUXXhw8eHC/fv1uvvnG ++vr6urqjcXGxAwcOPH78eEJCgtPUy87w2RjFkj/+8XkdSZUTEuIzJkpGWlqazQ1U +XV1dVFi0c2eeWM3MmTNuu+3WcB4kCgAAgF6CszEt+OCDD772ta9dddVVI0eMfPfd +96Kjo1euXLVixRurVr1JZ7oDlGGeeuoZZRgdyQULrrrt9tvmzbu8xQwjSonTpk9b +dO3C225fkpGRoZqcnI3/43/8z7q6OmsAAAAAEGOC9e/fXx3uoqK9OTk5g2Jjd+7M +U83s2V8eMiS+T58+tbW1TjuER0dSGUaF1NRUBRhFFKtvk/KMwoxij8r79x947rn/ +sHoAAACAGBOssbFx9OjRR48ezczM3L179/z5l6s8fvz4cePS6upU9F0WFaihoaGp +qWn//v3OtH9oR+RdqtdhDzzwb3pNSIhffMPimBjf0Jd2UeyZPftSFT744MMdO76w +SgAAAPRyjI0JHhtz/PjxqqqqjRs/27Jla1bWzKlTp/Tv33/o0KGaVVFRmZg4zJqZ +0tLSX/7ylz/+8Y9fe+21xYsXv/LKK7GxsdXV1TExMXrXmDFjamtrDx48mJiYWF5e +rkqVL7zwQi1/1KhRSj6qTEhImDhxYn5+fnR0tBpogYMGDdJ7Kysr4+Pj9eksWrQo +Li7OWV/XOTNjY5566pm1a9epsGDBVeGfh2nu8ceeUFyMjh74v/7XoykpyU4tAAAA +eqt+DzzwgFOMFG7ne+7cOSkpKVZukeKE5ZNAffv2/eKLL2JjB2VmTkpOTiouLq6p +qVHeOHTo0LFjDfv27RsxYoTT1H/qZvjw4SNHjlRZr0OGDFHkyMzMVAIZPXq0yhkZ +GfX19coqw/xmzZqlnKOVWo1yzrFjx/SqSS1KC9ESJk2apIChXntqaqoWrsCjVONf +W1eqqKhQuHImWpLrs8PKixYttEK7bN+e+8ILL1l51peytI9W7oA9u3dXVx9uamoq +LCy87LK5Ti0AAAB6Ky4qC9anTx/Fht27dyu97Nixo6io6MiRI0ovyjaHDx9W+cSJ +E07TqKiYmJjzzz//vffemz59+vr16w8ePKi5Bw4cUAJR7FFi2bVrl15PnjypYKNZ +lZWVWn6/fv3URiFKb1F60YpEDdRSfX2tYvv27eedd54aKxq98847H374oVquXLny +5Zdf/vjjj//zP//z888/V8j461//qsqNGzeuXr36jTfe0KxVq1apjco94SSbDYkx +1VXVTqlDqqudtytZKR1ZGQAAAL0WMaYFCiGLFi2aOXPm8OHDJ06c2L//gIyMjIUL +F1544YV2nsRp5z8bY9auXVtSUqKI0rdv32PHjhUUFIwdO1ZxSJlEaUQ1SjXqiysI +RUdHq6Bmx48fnzdvnmqKi4uPHj2qxSrnKNuofVxc3KBBg5SRmpqaFGwqKirsEZzT +pk1TYy1TsWfTpk21tbWapfBTWlqqVZSVlWmZgwcPVvQ66zFGYUPb40xERSmG1df/ +47i1y4YN2TpyzkRU1MqVq5wSAAAAeisuKgu+qEwUA5QQNDcnZ2NNTW1BQWFdXe3A +gQOVFurq6hRyFEKspSrNgAEDsrKyFB6SkpLUYMSIEcon/fr1O//88xVIFEVGjhyZ +mJg4bNgwtZk8ebLyhsqKLsohCifKHsnJyXpV+NEStHxtmBarRWkz9HbNUqpR+zlz +fDulwujRoxW0FJ+mTJmiFKTEpWaTJk06cODAJZdcsmfPnsLCQq1lr58ShXKOZqms +mKQldPdFZStXvrlrV74z4b8Rwu7duzMnT27vBXJbNm958823nAm/gwcPduwiNwAA +AEQMhvgHD/EX9bntcfI6OHYapDXFxcVq/NZbbym01NfXq3zkyBG9qrxw4cKNGzde +fPHFOTk5hw4dOnHiRFxc3PTp09esWfPNb35z3bp1SiZKOFpIU1NTfn6+b+jMsGHK +G1ppY2Pjdddd9+677y5YsEDtFYo+++wzxRuFpfLycr1LCWfXrl133HHHU089pYD0 +ySefXHXVVfv37/+nf/qnDRs2aAO0WCUuJYcxY8ace+65SiSa9fnnnysdaeG33367 +8ky3DvH/xS8eclOQKyEhfvbs2WGO9a+url6z+m33IZiB2vxkAQAAENmIMS3EmHfe +eUcBYPjw4coVyid1dUeVaBQhFGmOHTu2aNGioGxz/PhxZQOlC4WQ+Ph4a6ncokrl +DaUUlfXGqqoqRRHNUqUOu2rU8ujRo2qg1KRKtVeNFqiCLbl///5aeG1trXJRYmKi +JtVYbfRetVcDu3qtX79+aqZXrUi9f222koxqtDFalOr1qlSj4NS3b1+9JT09fc+e +PWc+xhiFmaxZs9LS0oYPT3WqAigM5u2UfzzFvzliDAAAQC9HjGkhxhQVFaWmpioq +lJSUKEIcOlR8ySUXW0hQFElJSYmJiXGaelZ333A5RIwJlJY21in5KYMFDoNpDTEG +AACgl2OIfwvq6+vr6uoUY3bv3qNe9Z49Ber0NzQ0HPULfZkZ2qWoaG/gTzgZBgAA +ACDGtGDixImJiYnJycnz58+bO3fOkiW3zJgxQzWpqamaZcNmEFromyt00rhx6U4J +AAAAvRIxJhROvHRY9130lZ6eFhsb60wAAACgVyLGoFvMnTunm8LGlVde4ZQAAADQ +WxFj0F0WLfqWU+o6ycnJCkjOBAAAAHorYgy6y5VXXpGenuZMdJElS25xSgAAAOjF +iDGnKSgoeOutNe+99/677763atWqt95a/eabb33wwYfr13+wbt36tWvX6Uez9u7d +67wBrcvOzhk9enQXji8aNy69rKysrq7OmQYAAEBvxXNjTntuzCeffDp69Egdlv79 ++w8ZMvjIkZq4uLiGhoaYmJjo6GhVHjt2rG/fvtu3bz///POd93hT9z03RjFj5cpV +77+/TpHDqepqM2fOuPLKK3h0DAAAQK/F2ZggJxVdjhw50q9fv2PHfE/BV0FJZuDA +gfZ8/aamJgW/iIt+XUMB5qmnnvnRj25V/rEMk5qaevm8y3/ww+8HPeayXRQgFy5a +qJ9p06ba3a5zcjY++OAvf/GLh7Zvz7U2AAAA6FU4GxN8Nmbs2DEnTpxQaFGPWQdn +8ODBffv2tRpro8rPP998wQW+szH79u3bvHnz3Llz33zzzZkzZ6qmtrZ25MiRx44d +UzN164cNG1bvFxsbqxotZ9CgQSpomaJVlJSUJCcnV1RU9O/fX0vT28855xw1U/vG +xsaEhATVNDQ0JCYmHj58WO21TE2qgd6uN2rJWlpSUlJRUZES19GjR1NSUjRLBbVR ++urTp48m1SboQS5dfjZm5cpVy5a9qvWqrO2cNStr2vRp2n6bK8uXvZqXl+dMhE35 +8fZ//deYmH88q2fL5i1SVORc15eZOWnJkltTUpJtEgAAAL0BMSY4xkyZMlkRQuEh +JiZGB+fAgQOjRo1S71yhQpHGso0bYxQe1qxZc9111/3nf/6n8szo0aOPHz+empq6 +du3a4cOH640KD8ot6r4rfqhPr6Sxfft2LVnl4uJirV3L/8pXvnLo0KHs7OwpU6Yc +OXJkxIgRmzZt0gZkZGRo8uDBg1rswoULlZQUS9LS0t59992LLrpIa8/NzVXyufzy +y2fMmLFs2TIFLdW/9tprajZ06FBtrdY7bdq0wsJCbf9zzz0XOEylC2NMaWnZU089 +nZu7Q2ULMFmzZgUGD7NmzdvZG7ITE5P69O1T3tb1ZoNiY7ULBw8cUPnue+6yykA6 +8uvXrbcwoyP83e/exB3MAAAAeg9iTHCMUS9cx6SpqUmR48SJE9b1d4+SooLyzJYt +Wy+88AJNHjt2rKamRrGnrKxM4UEZRm9RA71LAcbK6mSrjd6Yn5+vNmPHju3fv3/f +vn2tmd6it+tVa9QCq6ur1Uarjo+Pb2ho0HuVQKxGBYUExZuKigotRJPq6CvnHD58 +WMmnpKREGzlkyBAtRIuV+vp6rUX1SkFauxaiSt8++HVVjFFG+rd/e0gbo3LWrKzZ +s2c3DzDmD79/Thszdeq08RMmaH+VZLSzcrzxuNMiKiohPkFHIyk52U7j/O2vf9Hr +4hu+o/Dmnx9s5868Fa+v0IFS+Yorvn7zzTdaPQAAACIbMSY4xpx33kTFDJUVUeLi +4iw86ChpcvDgwZqlLvjWrdssxhhFgieeeGLx4sVvvPGGGtvbU1NTV69erR62MoYW +8qtf/eqFF1646qqrhg8fHnip1dnSJTHGzTDa6wVXL5g4McOZ0YziypO/fUqFy77y +1fB3/7333j1cXT179qWz58x2qpqpr29QkrHL1ebOncMdmQEAAHoDhvgHU2I5ePDQ +6jVvK7dosqKi4pVlzmVab61+u6SkVCkl8LSGjBkz5v/5f/6fCy644Nprr7399ttv +vvnmuXPnXnHFFb/85S///d///b/9t//2yCOPJCYm/uAHP1DjoPd6V2lpmZthFt+w +OESGkfXr1ut1UGxsuyLcyBEj9bplyxZlFatpLiYmetG1vtH/Kq9du07py+oBAAAQ +wfo98MADTjFSuOcQ5s6dEzSuPUhVVZXCiTPhV1ZW/tlnm7Zs3XrgwKGaI0fy8nat +X/9haVnZoYOHvvhi5678/M2bfYPLbdCL856oKAUb9c4HDBgwYsSI2NjY+Pj4tLQ0 +vQ4bNkyvCjCDBw9WelF3PykpSa/O284qxTNtmDPRklwf33AXWbRooRUCPfbY48p7 +lmGGD091aluiDJOdnaPCuRPOTUpux1j8QTExBQV7lGF2796dOXmyneZq0cSJE6ur +q0tKSrTNmZmZoT93AAAAeB1nY05z/vnTLr30klEjR9x+23+59tpF11zzzf/yX374 +jQVXXX/9tddeu/DH//Vfb77pxm9/+zqeWLJ27ToLOYuuXRg6w/jG4q//wMrtvYLx +yJEj9hblk7fXrLHK1iy4ekFqqm9LXnjhRasBAABApCLGBPvb3/7et2+/jRs3qVxb +W7tp06aiosK8vF2a3LVrl3rkqqmoqPC37b2WLfNduzVt2tTWBt+7Nnyarde4uDi9 +Fu0tOn78HwP625S/O1+vdh3ali1bq6ur/dWtUpLRa2FhEc+TAQAAiGzEmGCXXHLx +4cPVGRm+kR6DBw+++OKLrrzyChv4MXbs2K98Ze7YsWnx8b4bgvVahYWF9nTLECPv +XUVFRXqdNClzwIABR+vqPvhgfZtpROrq6j795BO7L/OUqdMGxcaqUFToW1QIw4en +2ge3du06qwEAAEBEIsacpk+fPlOnTr3hhsWjRvkGl/ft2zc2NjYmJqZfv36aVKoZ +NmxYcnJS//7OozB7p0J/nEhNTQ1nvL7dDTk6Jmbq1GkqHK6ufv+9dxVRdufnWxYK +pISzt6jos40b16x+69Chg6q58MIZycnJ+hRsrr9VKGnpvrNDpaWlNgkAAICIRIwJ +l3XHIRYSWns+TJCEhHi9Kr2MTUu77CtftfMqiihbt2758IP1f/vrXwJ/lHA++2zj +3r2+mKSWX/rSRXrX8ePH9XbVWEQJzQbquDcnAAAAQEQixoSrh9xhzHMyJk7U6xdf +7FAaSUhImD//n3zhZGxafCtncpReNPfCC2eo5YiRvnNiW7ds0Xt1/NschwMAAIBe +ghiDdrNH34R4lkug2bNnK4Eoh7ijYhROLpwx4ytf+eo3//maK69a8OVLZ9vPvPn/ +pBqlF80deyqxfLbROTkTzjgcKS4u0Wu7nk4DAAAAzyHGoINKSkrCGawSE+N7sIyS +zOHq6g8/WP/FDt9pGWdeVNSAAQOST7EBMK6ysrL33nvXMsy0aVNnzcqy+tDavA0A +AAAAIkCf9j7Ko+dbvPgmK9x3389DP+DlrbfesieN9EI1NTWzZ4c6v7F8+avug0SX +Ln3BCsadpXRh9zhuU3Fxid5TXX3YJseOTVNuSWoWXZRwFI0OHTx48NDBo3V1Vjl7 +9qXhn4p57g/PqaDU9Nxzz1olAAAAIk+vjjEIIZwYI4tv+E6YQ1bq6xuyN0h20M0S +BinKxMYqwNg4/kBpaWMvnzcv9OM1A/3h98+VlPguKlNG+s1vHrdKAAAARB4uKkO7 +paen69VGyCxf9qoNR2lTTEz07Dmzb7v9tgULrsrIyLA7mMnRurrysrLADONPL5ff +dvuSxTcsDj/DrHh9hWUYSUlJtgIAAAAiEmdj0LIQZ2NKS8t+8pM7VejXr19TU5MC +ycJFi8LPG676+oaSkmJnwi/Bz5loD2WYLVu2qjBgwIDjx49fccXXb775RpsFAACA +yMPZGLRbSkpyZuYkFWIGDerfv3919eGlLy3duTPP5oYvJsZ3D+VAHcgwykLLl71q +GWbo0KF2/4DLLpvjnwkAAIDIRIxBRyxatFCvtTU1I0eNUpJpaGh4dfmra9a8HeZd +mLuKstOTv30yL8+XoIaPGHH06FEVFLHssjcAAABEKmIMOmLy5MyZM2eocGD//nMn +TrRnWWZvyFaoWL9u/RkIM0VFRUtfWqrspASlHHVuRsbxY8dUHjRo0JIltzqNAAAA +EKGIMeig2267NT5+SFNTU94XX4w75xz92GmZ9es/sDATzlNlOmDL5i0KMEtf+lNR +0V5NKkFNnjpV66qoqNDkd797E+P7AQAAIh4xBh0UGxtr5z2UZDZv2qTChTNnpvif +w3MqzDz1h98/t2FDdpfkmZ0781a8vuLxx55YseINN8BMmTr13IyM/Ly8Uv89yqZN +mzp3LqNiAAAAIh93KkPLQtypLNC99/73PXv2WFm5QqGiX79+Bw8cUK5QmLF6SUiI +T0tLSx0uqampw2Niop0ZrSsuLlH+KSkuLvLx5RZXYmLiyFGjtDqtaG9RkXKU1f/6 +149zKgYAAKA3IMagZWHGmNLSsrvv/rmNrTdjxo61cf8V5eUVFRWHq6sD84xLaaa1 +MKMA0+JblF4Sk5KGJSZq4YpJCjCBzRYt+pbdeAAAAAARL5JjzNy5c/i3+Q7bvj03 +N3eHlUPEGCksLPzFL35ZV1fnTPulpKYqzMTFxalcW1urMKPXOv1/ba01CEe0xMTE +x8cnJCTo/1XT2NioAHPwwIGgnKPPesmSW5wJAAAARLpIjjHoKqFjjJSWlj322OOF +hUXO9CmKIYlJSYmJiRZCjBJIQ329Ci2OmYmJidG7VAh6i4KQnd5xqk6JjY29+eYb +GRIDAADQq0RgjLnnnnub96fRYenpaQ8//JAzEdLy5a+uXPlm0GkZl2JJfHx8XFxc +//79AyNKiyzqKOdYgNGrM+N0mZmTliy5lXNuAAAAvU0Exhh1o3/xi4dIMl1CGeb+ ++++NjY11ptuig79y5aoQYSaQIk2//v2diVMUWpxSSDNnzrjyyisY+wQAANA7RWCM +QU+QnZ1jP+HkmfApVs2dOycrK4szMAAAAL0ZMQbdy3+rgFy9FhYWdSzSKLqkp6dP +npwppBcAAAAIMQZnjmJMQUFhWVlZaWmpJktLnUIgu04sNjZW0SUuzvdq9QAAAICL +GAMAAADAY/o6/wsAAAAAHkGMAQAAAOAxXFR2pm3fnuuUTueOGOm8lJSU5ORWh8Iz +4AQAAABeR4zprMLCwtpa3w24cnOdfFJQUOjekqu0VPGkzMo9n39gfZozcTrNGjeu +5fBjw/GdidMRmQAAANAdiDHhsttqKasotCi6KKjwhM3OaDEyNTWdSEpKHDVqpMKP +GvB0SwAAALSIGBOK4kp2dk5nnnnSmmiJiXEmWhEfH++UWtfU1FRbW+tMREU1Hj9u +2zlkyJBhw4ZapSkq2uuUPEU7cuGFF/DQGAAAAAQixrRs7dp1y5a9Gub1YG4m8RWi +o60yISHBCqK5bn33aWxs3JidrWCTkZGx6NqFTm0YiopaPa1U1PoZp1Dv6p7IZI/w +v+yyubGxsU4VAAAAeiVizGns+YxvvbX60083OFUB4uLi+vXvHx8f379/f5VVEx+Q +Vc66gwcOFOzZo7z0gx9+PzBE9SithZ+/vPZXO4+Umpqq0FdeXhF4limQMozCzLXX +LiTMAAAA9FrEmNPcc8+9QSNeEhMTlVUUWnpUYmnR5k2b1PXPmpU1b97lTpVHFBeX +PPeH56x82+1L9Prkb5/Sa3JKytChQ6urqw9XVzc0NPjnO5Rhliy5JStrpjMNAACA +3oTnxpym+W21Gpua9NrmOJaewE5fTJyYYZMesmXLFitkZGQkJCRs2JCtcnR09Dnj +x6ekpp6bkTEjK2v6BReMHDWqX79+1rKuru6xx55Yu3adTQIAAKBXIcacZsmSW5Yu +fUGvznRU1OHq6oI9ezZmZ+tnV17ewQMHVOPM65HS0lq+Y3JPVlJcbAXLYHk7d+pV +oaV///7+ap+4uLhx55yjPDNm7FinKirqqaeeae05PAAAAIhgxJgWzJ0756c/vSPo +CZINDQ2lJSWKNNu2bv3ogw82b9r0RW7u3qKiivLyHh5sej73lgCpw4fX1zdUVx9W +OTEpySoDKdiMTUubfsEF7mmZlStXWQEAAAC9R78HHnjAKSLAqFGjrrzyiqysmQMG +DKiqqm5+t+Xjx48fPXr08OHD5WVlijf79u49eOBAVVWVIk1tbe2xhoamxsbGpqaB +Awc6b+h+2ga9pqWn9djx/a1Zv/4DK1xxxdcPHDiwZctWlcedc45VNqejOmjQIB15 +lfVB6JOyegAAAPQSDPEPS2lpWWFhof8BMoW5uTuc2rDZ7QF8N2P233bZYka/U7c7 +6yrbtm5ViJo2beqCqxc4VR7xyMOPWuHue+4qKipa+tKfVL7k0kutskW78vKUHlXI +zJx0//33WiUAAAB6CWJMRyjMWLApKPA9zr8DwSZQv3794gYPtrL7yEv3ns4S5mNn +1K1X516F225f4q0TMm6MuePOO7SvNjn9ggtajHkNDQ0Fu3dXVFTY5KJF31q0qB0P +yQEAAEAEIMZ0DXvgTFlZWamP8xrm0zPbK+jWz4EP+z948GBTY6MyzPx/mtf8erYe +O/r/8ceesPspL77hO9rIP/z+uZKSErtHmTUwFeXlSi92Esakp6fdf/+9PEAGAACg +tyHGdC+LNyoUFvrO29TW1qmgye4LOR2TlvaP238FSR0+PKaVc0G+WTGtzEptdVZz +y5e9muc/j2QPvdmyecuKFW9oMnPy5L59+1ZXV+vA6bXJf/NrFxkGAACg1yLGnGV2 +6kYFO5NjlYE3Ee7kFWs9kD2n35nwO3LkSGVllQoKLaNGjdTrvn37T5w4YXObU3RZ +tOhbjOwHAADotYgxXhL0jJTc3NMm3UQUqK6urrCwyJnwvpkzZ8yalTV37hxnGgAA +AL0SMab3ajH2GDs19PnnmwsLC48fb4yNjc3KmpmS4nuQToh3dceVcoMHDx47dszk +yZnp6el65RIyAAAACDEGLXv++RdXrXrTmfD7r//1XxMSEsaNS+9AlmgzMh07dnzV +qlWKTKoZPjz15ptvTExMVHSxNgAAAEAgYgxatnjxTU4pbOnpaa0lHAWSuLhWZ9m7 +Pv9889///rpVWpI577zzOP0CAACA5ogxaFkHYkx3uO++n0+enOlMAAAAAH59nf8F +Tpec7BsJc9atXbvOKQEAAACncDYGLcvOznnssSecCf8FYw8//JAzESDEoBf/TdJ8 +D8lpzn1+TnOBt1abO3fOkiW3WBkAAABwEWPQKkWUtWvXqhAbG8tDWgAAANBzEGMA +AAAAeAxjYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAA +gMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQ +YwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAA +AAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4 +DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEG +AAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAA +gMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQ +YwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAA +AAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4DDEGAAAAgMcQYwAAAAB4 +TJ+TJ086RcBrCn2KCgp8/6PJyy6bO3fuHJsFAACACEaMgWfU1dVZYlF0sVdnRoBF +i761aNFCZwIAAAARihiDnqu0tMwfVwr96aWorKzMmdG62NjYZ5992pkAAABAhCLG +oAfxZxbnIjEV6urqnBntsXTpC04JAAAAEYoYg7MmnIvEQhs+PDV1+PCSYimxmszM +Sffff6+VAQAAEKmIMThzOnCRWJC0tDSLLr7X1FSnNirqyd8+VV1dnZ6e9tOf3pmS +kuzUAgAAIEIRY9CN/Jml4xeJxcREK7KkpfuiS0JCQmBucZWUlBQXl5w3MUPpJT09 +3akFAABARCPGoMt0/iIxZZWAky3DExLinRkBLLfYhWRxcbGLFi2cPDnTmQcAAIDe +gRiDjnMvEtu+PVflDlwkZqFF6cWuFouOjnZmBDhw4EB19eGqqqrCAvE9H0YyMycR +YAAAAHotYgzaQXFFWcVOueTm7nBq20NxJWFogv9cy/C0tLFObYCGhoby8vKysvK6 +uqPHG4+fOHGysbHx4IED+mlqalKD5OTka69dyGMuAQAAejNiDFplF4nl5vrOtPhP +urT7IjEb3BJwnVgLg1sOHz5cUVGp15qa2qYTTcotzoyoKAIMAAAAWkSMwT90/iKx +wEH5KrQ4uEWLraysOnr0qHLL8cZGp7aZ0pKSvUVFDQ0NKsfGxl555devvPIKFWwu +AAAAejNiTK/W+YvE3EH5bQ5uqa+vP3q0PkRucQUGmEGDBl111RUEGAAAAAQixvQi +nb9ITJwrxPyDW1rMLTa4Rbmltra2vqGhqemEMyMMh6ur9+7dq1ebnDt3zqJFC3kO +DAAAAIIQYyJZ5y8SE/eJk/77iYU1KN+Z0R4EGAAAAISPGBNROn+RmDu4xblarK1B ++eFcJBaaUtDeoqLSkhKb5E7KAAAAaBMxxtsUV7Kzc5RblF46dpGY4orvNEsYg/Jr +amrCHNwSJgIMAAAAOoYY41Xbt+cuX/5qB065KK4ot4QzKL+2tvbYseNdmFtcdifl +fXv32mRycvLNN9+YlTXTJgEAAIDQiDHe094AYyNbbFB+6MEtx44da++g/PbiUTAA +AADoPGKMlxQWFj7//IttBhh3UL4/u4Qa3NKZQfkdUFpSsmf3bgsw9iiYRYsW2iwA +AAAgfMQYbygtLVu+/NW1a9c50wECnzjpu1qspdxSVlZWU1PbVYPyO4BHwQAAAKAL +EWN6uhABJi0tbfac2S1eJ9ZNg/I74HB1dcGePbW1tTY5d+6cm2++kQADAACAziDG +9Fx1dXXLlr26atWbznSAhISEefMvz8jIcKYDBuV39+CW8PEoGAAAAHQTYkxPpACz +cuWqlSvfVMGpOkUBZvac2dOmTbVJpZeCgqKze76luYaGhoLduysqKmwyM3PSzTff +mJ6ebpMAAABAJxFjepbwA8zhw4e3bt3eAwMMj4IBAABAdyPG9CAKMMuXvxZOgNm5 +M6+27qhN9hA8CgYAAABnDDGmR1i7dt2yZa+WlZU506fExERnzZIse0hlTw4wPAoG +AAAAZwwx5izzdIARHgUDAACAM48Yc9Zs3577wgsvFhYWOdOnBAWYhoaGL77YWVnl +3O+r5+BRMAAAADhbiDFngQLM8uWvtvgw/tlzZvf8AHO4unpXXp4FGLniiq9fe+1C +AgwAAADOGGLMGRUiwEybPm327NkJCfEq9+QAw6NgAAAAcNYRY86Q0tKy559/ISdn +ozMdIDDAyObNW3pggFGy2pWX5waYzMxJS5bcSoABAADAWUGM6XYKMMuXv7p27Tpn +OkBQgMnL23WouPjEiZ71iSjA8CgYAAAA9CjEmG4UIsCkpaXNm395amqqTfbMANPY +2Lhv796DBw7YZHJy8pIltxBgAAAAcNYRY7pFiIfxK8DMnjM7LW2sTfbYAMOjYAAA +ANBjEWO6WPgB5sCBA/m79/S0ACNKL3uLitxHwSxa9K0rr7zCZgEAAAA9ATGmy7Qr +wBQUFB1vbLTJnoNHwQAAAMATiDFdo7WH8SckJCjATJs21SZ7bIDhUTAAAADwEGJM +Z0VAgOFRMAAAAPAWYkzHZWfnPP/8i20GmMOHD+/cmVdbd9Qme47a2tqCPXvcADNz +5oybb76JAAMAAICejxjTEa09jD8mJvryefN6foDhUTAAAADwNGJM+4QIMFmzJCs6 +OlqTPTbANDY2FuzZ4waY9PS0m266kQADAAAAbyHGhKuwsPD5519sM8A0NDRs2bK1 +ZwYYHgUDAACAyECMaVtrD+NvHmC++GJnZZUz1KRH2VtU5AaY2NjYm2++kQADAAAA +7yLGhNJagJFp06fNm3d5zw8wPAoGAAAAkYcY07K6urply15dtepNZzqAAszs2bMT +EuJV7skBpqK8vGDPHgswYg/jJ8AAAAAgAhBjgoV4GH9ggJH8/Px9+w9auUfhUTAA +AACIbMSYfwg/wOTl7TpUXHziRI87dDwKBgAAAL1BX+d/ez0FmB//+M7ly18LyjBp +aWmLb1i8YMFVlmEUYNat/+DAwUM9LcM0NDTsysvbvGmTZZjMzEn33ffzn/3sTjLM +WfHMM89kZWX18UtMTHz00UcrKyudeZ3zyiuvaGm2ZDN//nzVOLPRRfTxTZgwYffu +3TZ5/fXX61Dn5OTYJAAAOOs4GxO1du26Zctebf4wfgWY2XNmp6WNtckeewaGR8H0 +NLfeeqtijDNxyrBhw1avXj1z5kxnuv3UpdaS16xZ40w38/TTT99yyy3OBDpHn6CO +tjPhN2/ePH2CzgQAADjbenWMCTPAHDhwoKCg6Hhjo032HDwKpgdyu7+PPPLIXXfd +pYKCx913352TkzN+/Pj8/Hx/q3bT2+fPn2+ndLRkdandRKQ1vvLKKxZvFGMUZqwe +naQDqw/OjrkOrA67sqjNAgAAZ10vjTHbt+e+8MKLhYVFzvQpCQkJC65eQIBBh9mV +SG6GMapRvQrZ2dkdOCGjnnRWVpYWove+/PLLikPOjACPPvqo+twqBK0aAAAgIvW6 +GKMAs3z5q80fxq8AM3vO7GnTptpkjw0wwqNgeqycnBzlDRUqKiqC/uW+T58+elUI +ue6666wmfBZRlF6UgkKcEFAbtVSD/Px8zhsAAIDI1ouG+CvA/OIXDz344C+DMoyd +gbnt9iWWYcrKyj788OO8Xbt7ToZpbGw8XF19UMlqz56N2dm78vIsw4wcOfKb3/zG +3LlzyTA9xMyZM0/6BaUId0BLx8bG2Aj+u+66K3Q4sQaVlZU2Msc//r9VgXcF0ObZ +EHajWUE3JLB6W6xRG6t0B8GLXT5n9UaLfeWVV5zZflqI6u3cVCAtx97iHiubDFyp +qFliYqLqA5egsrW0S+/87/M1CHyvZlmlMx1Aa9Qsy59iSwg8PuJunuZajU22JvDt +OpiatM0Wu+WDM68t7u60KHA5VhPO4ZLQn7hT24o2N77Nr1OL7ENsTdB+hXlI3U+t +RU6jU9/J1gQeOqsJ8yBL4Ebqowz6XRC9N+hXJpDTKODguN/SQLfeeqvNFafq1G9o +801yVxe0F0FabBNiT4O4G9yidn2a9uspWrtTdYqtJWhpah/6v0JObSvcVffYjwZA +oF4RY0pLy371q8fbDDCHDx/Ozs7Ztn3H2Q0wgaFl29atn3788YZPPlFBk6p0H2cp +Bw8e/POfX/7JT+788Y/vfOqpZ7TxzW8VjbNOf5P0d1QFxYwWrwcLTf1v6wW2eRpH +GcaG+OstVhMObV5QB0t/TVUToutpHQVn4hT9bda7AvsfosVq34MqO0OLam3D1O1Q +T0Lb5k6qD6FNskkFSFGl28BlNaEPb9Bw//DZCTodLnezVdCkOjHNu2VdrsXD1YFP +PHzdunCjz0tH72wd0uZaPMiqCfrctdn6XQjsodo3tl2/Hfo6Nf/tDjzaoWmNnfll +DPHb12Fd+wuiLdSXLWgfO/BfIc99NECvFeExRgFG/Xt19HNyNjpVfjEx0bPnzA4K +MJ9t2lxbd9QanEkhQotm2eiX0MrKytauXffYY0/86Ee3/uIXD61cuaqwsNCZh7NH +f4n79OljPeCnn376kUcesfp2sT+Nyj/hXCdmMcneYueFjNVrG5zpkydt/Iz+dtrm +qRNfUVGh+tWrV2tFWkJgfyuI/blVS7W3JWs56nmooBzlX7yPO4ynq/48qyMYequ0 +Oq3U1m6JTm9x125BxUJLIFtmiBijvkjzd9laTGuHVx0y9Z90cOwuZzZLBU2qUv0t +/5Lapm+OvddlawytxcMVziduqzCt7VqLOvZ1ChS4IhO0p3ZI9ap695DqXVpLa4dU +R9uaGTV2ZpxOC3RanNJay0CtfSf166C91la5X0j7ggX21/VGlQPbmNbWa+dyg76K ++nLaQpzpkDqcxqW1PQ0hzE+z878gRm8J579Czgw/mxW4nfb19tZHA/RmERtj3ACj +/r1T5XcqwNw2e/almjzzAUbJxAa3KKtszM7+6IMPwgkt/fr1i09IGDlq1JixYxMT +EzXpzGgmN3fHCy+8dM8999kpGu0+p2jOFv1ZtYL+mOmvVMd683qvXoP+/LfGmrnr +bZP1S/Qu/bW2P7fqQNgf8ta2VgvXX2s1E6fq1HJUE/hnXv02S27ahfA3KQT7S9/a +odD2qwPkphFtSdCOWLAJ6opZV0NbHuIIW98ocH/DpHVpx9XFsZ6ZVaqgSa1Os4I2 +pmu1eLg68ImHr1sXbrQK6xpmZ2e7h1SfrA6pCkGH1H53bEu6SYsHWeu1zdD33/1C +2jFxZ4n9c4M23m0TmjUL+gd+6zq7hyIErVeNgzY1fKF/+zpGm9TmL0j4H58dWL29 +8/8V8tZHA/RmERhj1GtfvvzVe+65N0SAiY6Obmho2Lp1W3cHmBZDy668vH1792pW +4BVigdzQMu6cc6ZMnTrroou+dPHFKmhybFrauPHjbVIN4uLinPc0Y6dolGR+9KNb +dTR0TDhFc4Y5/4Ln/xdBTao33FWdua5if2itf+9Sv1PbXFFR4Uyfzv5UW9/UZacL +rCsZqAt7kDp06oWoTxC0tS7VB/UDbCPVfbFOiTZGb9dkYG+jza6GrVfdlHC6I0Fs +RS32hGwvbO3dobXD1YFPPHzdunBjh1SrCPpqqStsxznwkOqz1msXfgmDhD7IWm9Q +vZ2hcn932rthaq/d1Jc5sDse4jsWSIfC/uPT2vmE0Nr87euYcH5B3KNkn2YIXfhf +IQ99NEAvF1ExxgJM84fxNw8wmzdv+fiTDeUVbfxnsb06FlpEoSUlNXXM2LEKJzOy +stzQoqASHRNTV1urZe7etWv7tq1appacs2GD/iIqw0z2tz83IyP0KZrCwiIdk3vu +uU+Rxk7RlJYGPy0H3Ud/yexfBPXnqs0/xi0K8132RzT8f9Vrb3v9ndYuaHdC9Omt +jSi2uZeFBP51F03aYFbXhJCDht2/9HYYW6RuhFM6RX0L2zWLMWJdCrenq8W63WKr +CRLOekOwvdZxcHYygJ3hCTosXSXEZrf3E2+Xbl24sVU0/6zFKt3PWrp1ezp/kO2X +SAux5YTD3mJfWitoM1TZZrfbznuE/s1tTSd/C0KwAxX6F0SH0fYuMKC2KZz/CoXg +lY8GQITEmNYCjEybPu37P/hBUICprKp2ZndCbW1tRXm5AsYXubmdCS2XXHqpCooi +Y9PSFFoa6uu1zKLCwl07d1po0WKjBw5ISxtz8Ze+dPvtt/7sp3csWnhNUuIwrWjD +J5/k78o7fvy4Ao/Cz/QLLtBiQ5yi0cGxUzQ/+cmd99xz7/PPv7h9e64zD93JOsr6 +wxb+n1Jjf9v0V1nvtZoQbOEtdvJaZMts8w+tufXWW7P8d+Oxk0tB1MnQXPU/bMCu +hN8DaJOWpk296667QuxaOHuhvoKauV0NbbMWa5VWE8TWq95bx7rCbX5kbTbomBCH +y9YY5ifeXt26cBNiFc0r7dehm2JMm9/JNo+D/ptgZ2a0KOu7G7t8q0WWwwO/wHpt +s/ur46BVaHs6lkPa3NMOs08zBGtge63NsMvGxFJK87d31X+FvPLRAIiEGKN++d13 +39tigLnt9tsWLLgqISG+8wEmMLRs3rRJAUOvX+zYoSxRUVHR5aFl1MjhMy68QKHl +vnvv0c/Xvz4/cVhiZVXV6rfe/tvfXz9w4ODcubN/+dC/KdIo2xw/1qB35WzYUHzw +YExMzHmZmbMuukir0HpDn6JZterNBx/85Y9+dOuvfvU4p2i6ldunafMvdxB1Hey9 +7h/IEKxNe3sbYW7S008/bRdsNL+JkNY7f/58+4dwrV1/kk3zCzyMepYnT5efn+/M +a0aLVfdFB8E6Fq0JZy+0EPU21NIOlL221tXQPtp6WztX0yb74JT6nJ1sJsRed1g4 +h6u9X8J26daF2yFtcRVWaQ1MmF3JDuiqg6zfEX0Hwg9a9l8Drd0Wbl/gNr+f6ijr +VZvagUQX5m9fx9iH1eYviLvlShEWJyylBB3h9v5XKDS9sYd/NADE2zFGPW8byF5W +dlr/OzDAaDIvb9enG7LbFWBChxbNddo1ExcX12ZoKdizZ+cXX7QWWh568H8qtIwe +NcpCy4MPPayf3/726aK9exVRpp8/bfr0aQWFhaq5977/sXr1msTEYT/4/vf0rkUL +r0lLG6Mt1GJ3frHj6NGjqamp7ikapSlnE5tR/MvJ2WinaHQ8n3/+xezsf1yYgfA9 +6n8gQGJiojMdwP64Sgf+XFkHovmf7SBqoJ63/pSG3+22wBOUSbQW6yu42+xSj1Bh +Ru3VXQjcGPsnT61XPY/s7GxtsAm9wWGyv/TqVVinpzVBeyFau1Xabhr3H001V69a +ptU0Z//y2uZ6Q7DPuvlh7FahD1d7P/F26daFmxCH1Crd3y+tVzXWubSaLhT6INs2 +NP9C6l06Dtf7b7/u0u+OtXR786HHSNhvt6KFfYf1Kxl6B5Xl1FKbpN9Hp6o9wvzt +65gwf0HUTP9VCfzPmva6+SZ1+X+FevhHA0C8GmPUz24xwKSlpQUFmHXrPzhw8NCJ +EyetQYs6E1rUZ1VIOG/SJKUFhRa9thlaxowemTXjwqDQUt9Qr9Dyq8eeUDhRRPls +0+dNTU0KLffd9/Nf//rxpUtfuP/+e5csuWXRooX6efjhh5599unvfvemocOG/fVv +f1fOefLJZw4cODhrVpadovnqZXNjogdqdVpv8cGD/fv311bNuugibadSVnR0tLMD +zeh4rlr15mOPPbF48U2/+tXjK1eu4hRN+KxDrD9g+uNkNS6rUafK/nK3i/7I6V1a +rMJD876R0V9c+yuuxuF3OOwfqvV31yaNbaoWEtj7d2kfRZthqzPWEbHdDxS05A7Q +xuiPvbYksBPTIq0rqL9iW6hDF7gj2mXVaJmiSW1zi4cr/PWGYAdEG9b8U1NfVj3a +ENeomPb2wNrc7A584uHr1oUb95AGHRl9A21Ftg1im9H8O9l5YR5kbWGLhyLwOKiB +tVGnPMxNtbdrA4L2tzVuGrfJdmlzTzsp/F8QfX8UISxLyOrVq5v/h65r/yvk/2R6 +7kcDwHgvxtjD+NXPbh5gFt+wePEN32kzwDQ0NByurlbA2JWXZx39zoSW8zIzFVri +ExKaGhsPHjiwf+/ejoWWmppahZbbbrv14YcfVGhRUPnZz+5UYpk8OTMlJdnZggCx +sbFz585RsHn22Wf0losu/lLgKZpBgwZ951++rdV9//vfTUsbU11Vqe3ZvnVrTU2N +dmFGVpa2fNw554Q4RSM5ORtfeOElHq8ZPvWP7e/93XffrT9mVimatC51h/9i6c+2 +Fq6/0xMmTNCiAv/q62+t4o39o6nW3q5/2LOt1dLsWRwqa7NtUSGWo71QByJwM+zv +t97o1ugPeVbAwyg7zJYQznHTqt1LSkRdBDvmzXdEe62dtd1srathy+lkD0Mr0oHS +urRh1iUSO9rW0Qn9YemN7vEMU5uHq2OfeJi6deHGPaSB3y4dTB1hFdxfQDXQp6+W +Ntm12jzI7nq17/ZBi46JjkzgJmnSDo56yeEfHzXWQrQNthmhd1CrEH3Jw+yIB2lz +TztJG2+fZsd+QYJ04X+FtIQe/tEAMF6KMYWFhQowzR/G7waYtLSxmjx48GBggGke +WixgKLSUlpRoln8ZLQg/tORs2GDPrDzWUB8fP0ShReHhtNBSH25oycqamZ6e7mxB +2PSW1k7R7M7fPWtW1v33/fxnP71j/ryvDRuaoMCmg7B/3z69UUlG+6Ud9N0SLeQp +mrWR9XhNhWHt0fPPv6jdUcGp7QpPP/20/jLp75P+MPuupPGz/rTNsmaiP3U21/7m +hab+mZKMvV1/X+3Bmkb9dVuCli/+5uHSYu0t+nuvb7uWps1Wr0IdghB/vPUum+v+ +W6lNWsqyrVJHRJMvn3p+iJsuOkC9gcDj1hq10VrUa7ENcP8ltXlnwvoN+oy0bSH6 +EJoVznpD0PL1qelV69Kxsg3TIbIumo68jqS1DGLfDX0iFgasfxam0IerY594mLp1 +4SbwkLq/YpaatHZ939RGv2526MQ2I5D7pVXZ7Tq3V5vfSX3xtNfaAG2brdf90LXx +1ka/yGqgyfbmBFu13mv9ZqsMwT6Ujgnzt69jAj/Ndv2CtKgL/yvkiY8GgHgmxpSW +lv3iF20EmAMHDrz//rrs7I2FBYXtDS3qxCucKLScm5HR3tByww3fUUhQaLnmmm+e +O2G8Qsv6dR+4oWXjZ5/X1HZlaAmhzVM01/zzNx/71f9SypqSOam6qnLzpk36OXz4 +cHx8vPZ3RlaWgo3+8DuLa4kXH6+pLVRuWb78VW3wPffcu3jxTQrDKq9a9aZ2RwX9 +dOFe6A+z/jgFdj319zXo2u4O0F90LVmC/rLqD6dqTp56bn176V1aZmBvXkvT1joT +rdAeaXvU27aOoN6uvkJgd0cN8vPzVW9L7nCMCb8noRVpR9zDbpMt9p615dYs9BFr +bw+mRVqRjoMWFdinadf3Qd+l8PuR4Ryujn3iYerWhRv3kDrT/g9Uk6oM/KXrPuEc +ZLXRXquZ+7nrQww8MuqpW2ddbdrVWRd3IeF8MTqwfFc4e9pJnf8FcemwdMl/hTzx +0QAwfdT7cYo928qVq9R7diaiohISEubNvzwjI8Mmi4r2fvjhhwV7CmyyTQot0TEx +6rvHxMRYgHFmREU1NjbW1focP35cgeTI4cPHjh1T/ahRI9W/Hz1q1KjRoxKHDRs9 +etSu/PzKisrKyqr8/N379u8/etT3GE0lq5SU5HHjFE/SVejalNIx6qBnZ+eoH68/ +DHV1R8eMHj1hwvgpUyefO2FCRUXl1q1bd+Xv3rp1m1qmpKTosCQmJcXFxSnyVVRU +6DXEVXau9PQ0RbIuT2UdptBb6Ke9Vjno+kOjTzMpKUkfrp1Z0i4oXtoseMsE/53T +1N0Pv9+TlZWlPo1+I85Mxxdn0qP+p4UoM4ToSlqbdn1nAAA9jWdizPLlry5f/pqV +5827PGuW7/kVogCzft36oqIim2xRB0LLyJEjk5JaDS3q35f7H0rdA0NLaOqyK9Lo +p7CwaNCgQRnnTpgyZbJ6gYmJw7SDW7ds0+uBAwcHDhyYlJysMDMsMbGpqckXacrL +q6urVXYW1IrY2FiFmcmTM/WqslPb/RRXlFUKCnzRJeiUnUycmDF27JixaWm783ev +XbsuMSnxW9/6ljMvKmrb1m0ff/yxCvfd93NtuVXCQ9obY9asWTN//nwFmK49S4Ae +ghgDAL2EZ2KMuqf33HOfCgkJCbfdvkSF6urDb69Zs3Nnnn/+P4QILaIeeUNDg0JL +TU1Nff3R2hrfqYYwQ0tycrKyin/MfUp6elrPDy0hhD5Fk5+fv2Xrtl278hXtEoYm +DBkS756ikcqQN0Jw6RBlZvryTJdnA228Ektubq5elV4UyZwZfrGxg8aMGTN16tS0 +9LEpySn6ZJ0ZUVGvv77i9dffGDFyxIIFC5wqv98/+3u9EmM8ql0xRi3tinm6sJGK +GAMAvYRnYoysXbvuuef+QyFk2vRpmtyyeYvVB+rXr59yjvrcwxIT+/fv79RGRZUU +Fx86dNBCy7BhQxMTE9VfT1RkSRymwtGjR7du3abu++7de5RYRM2Sk5MUVyy0KMBE +cAc39Cma/F27t2zdaqdohg0bNkQBMSFBx1lhRpGmorw8nFM0mZmTZs3KUqrRsXRq +20NbaNeJKXdpI4PGsYwdq9jic955GampqdpOq1c8e+edd/bu3VdeXr5v3/6f/vSO +nTt3EmMiT5gxRt1WdV6tzKmYCEaMAYBewksxRtSLffDBXzoTbVFvW3FFkSY6Orq2 +tra8rKy0pOTYsWNTp045d8L4qVOnqptuLbds3aaAZGV1uK+88oqsrN54xXyIUzSW +9JRqtmzZZqdoBg8eMnToUB1kHVuFmcPS+h0UXHaKRmmhzSNsW9LiRWJGS7jkkkum +TGk1eOzcmffYY084E1FRxJhIFWaMsZ6rCtddd50aBw4pBgAAnuPhGJOUlJSQEF9U +tLexsdFqWhMXF6fedkpqqgrqcB+tqysvL1fne9SokdOUZqZOGT16lHXTt23bnrcr +X2WFGfWSs7KyOnb2IAKEOEWzf/8BizT5+bvtFM2g2FjFxX79+vlG0fhvDNDQ0OAs +qHUzZ87w55kWDnJpadlPfnKnM+E3WIYM9l/+l5SUmPTnP/9ZlUomEyc6t3lojhgD +AAAQqTwcY9LSxi6+YbEKJSUlH3/0ibrdbQ7YsKEydorGzs/U1ByprqoeNmyo8syE +cydMmzpFzbZs3bY7f7de1SNPTk5WnrnssjmeHgnTGaFP0fjvcrZ11678ysoqpcSh +w4YpbtjhdSONs6DW2UFWhNCP3RjA/aAvnHGhRRf3UjFjwYMYAwAA0DtFQoxx1dc3 +rFu7bvduX5faqWpF4BCapqamivLyI0eOKNXExMRMmzZFHfSpU6cMGjRo//4D+fn5 +2dkb9+3fHxs7KMvH19s+k/fg6lFCn6KxGwPk5/ueoKyoEBMzSKHRzoAdPnxYr+Gc +orHzYPogfvc7X7T44Y9+aPVBiDEAAAC9WUTFmEAbPs3eunVraWnpiRMnnKpWuOdn +bNj6kcOHKysrg4bQBF1yFuJqqF4ixCkazfWFmV2KNFvtFI2OcLz/xgCWGO0sjS2n +TcQYAAAANNfvgQcecIpeUFpatnbtOisnJCTYLctaNHr0qAsvvODS2ZeOHDWq/ujR +I0dqWsszDQ0NVVVVBw8cqK6q6tu3b+qIEenjxqnzXVVVnZu74+2331F3vP5o/YQJ +E+bOnX351746avSosrLyTz759LXX/qKu/IEDB4cOTRg6dKizuN5hwIAB6enpWVkz +v/nNb+hVx217bu6aNe+sXbd+b9HexGHDdPCv+Po/zZqVNWRwXH19fe723AP79ysc +RkdHpwwfPn7CBH18/fv3P3nixPHjx52FtmTGjBlO6XSfbfxMr5dccnFSUpLVNFde +XvHRR74Hwhg1Li8vV7YZPGTwxIkTnVo/W9rcuXNSUlKsBgAAAD1ZxMYYV2LisClT +p3z50i9PPG+ikkxNTU1r/Wbfw2SOHCk+dKi0pOTEyZNKJuPGj09MSjp6tH73nj3v +vvv+pxs2VFZUKiDNnTNbkWbq1Cla4Lat21577a8rV65SntFCRo0aZUvrPXSgJk/O +nDfv8iuvvCI1NeVITY2O1dvvvLtt+/YjR45MOHe8st/Xvz5fhagTJ0tLS3fl7Sop +Lu7Tp4+yYlp6+oiRI1XQchRymp8bJMYAAACguYi9qCyE+vqGjz/++IsdOzo5hGbq +1KnnThg/aNAge17ktm3bN2/ZqnfNnDmjM89IiQwhRtG06/Ganbyo7OWXX1HOGTt2 +zNChw5qaGnNyNqqSi8oAAAC8rjfGmECff/75xpzPOjmEZtrUKdZBVzP1zpVn8nfl +l1dUpKenZfnu2jyz197lTAJG0eSoPGbM6Anj/zGKZld+/tYtvns3Bz1es662dkdu +rhp0OMYoruzdu0/sDIxT6zdl6pSLL77YmfAjxgAAAHhLb48xrtzcHbnbc3fv3h3O +U2iG+fOMCnYPrsPV1fYUmi/NylKeGT3ad13Z/v0H1HHPz9+9b//+5ORk/y0BfJHG +FtI7hThFYzdRcB+vGTc4rrbGd0ImzBijrFJeXrFz505FF/20eAuBwYMH+x85kzh1 +6tQWb99MjAEAAPAKYkywffv2bdm8Zdeu/HCeQqMwEx/vuyDKnkJTW1tTVVllT6GZ +6r9xs5pVVFRu3bp19+49gZecKc/02rs2S+hTNEqAa9eu35CdrXLoGGPDXZRblIKs +PtCIkSOGDB5i0WXkyJFObUuIMQAAAN7i4Rgjd9x5R0xMtDPR1aqrD3/22WdhDqFR +kklISHCH0NTW1JSWlgYNobGHRW7btn3Llq0qp6enzZ07R/3m3nzJmbR4imZY4rDf +/vZpzQ0dYwINHDjQ4oqiiwohhv43R4wBAADwFo/FGFm8+CanFBV1+bzLZ83Kcia6 +04YN2Vu3hPUUmsTERN8omoAhNMXFxaoPGkLjXHK2e/e+fb5LzrL8T9XsnZeclZaW +KclYmFGSscrrr7v25VeWqdBajFmzek15ebl7pkXRRf/nzGs/YgwAAIC3eC/GPPXU +M+49l6OjoxffsHj48FSbPAPy8/M/37S5Y0NoysvKjh07FjSExi4527YtN2/XrtjY +QZmZmRF/ydn27bllZWUFBb7okpu7QzWDBg2yB2gOGzZ01KhROjK78vNDn43pWsQY +AAAAb/FejFHf95577nMm/Elm3rzLw3mATNcqKSnNyc7u2BCaqspKFYKG0NgY9/zd +e+ySs8zMSQozCjRev2tzXV2dJZbCwiJ7VaXy3Zgxo0eOGDFqtP5vlJ2hcina5Wzc +uHLlmyp3YYw5ePBgzRHf/6WnpwddckaMAQAA8BbvxRh5/vkXV63y9XFdigoTJ2ak +paVlTJzYfaNlWtSup9AoyQQOoamsrKiuqg4aQqOWu/Lzt23dvmXrtoqKCrvkzK46 +s+X0cO5FYv70UlRWVqbKMaP9eWWkk1tsN1379x8Qvep/9+3b39DQ0L9/fzvf1eEY +c+zYsfLycosuvruYBdy7TDFm3vx5zoQfMQYAAMBbPBlj5Be/eMiuR2ouI0NZJiMt +PU2Bwak6Uz7ftHnjxo2dH0KjV+vo2yVn2dkb9+3fHxs7KCsrS/3snnbJmT+zFGmv +t2/PLSworPPfNCzj3HOVWvQzLHGYnW4K5HtQjD+0+B+FuVs1cYPjhgwZ0r//gDgZ +PLihvn7bVt+N3cKPMb64omh4KrqIMyOAjurRo0d5/CUAAIDXeTXGSOAgmRalpqZO +mz4tLS3tTA6eMV01hGbq1Kl2wZVdcrZt2/a8Xfln/ZIzX1w5FV0CB7eMH39OixeJ +aYOVWPJ37dZreXmFYoYqhw4bGj0wesDAgUqbsXFx/fv3t8YNDQ21NTUVFRWlJSWa +DBFjnDMt/uhy6OAhp/Z0CrRjxowZO3ZMUlKSyq+/vuL1198gxgAAAHidh2OMqD+9 +cuWqnJyNznQrEhLiMyaK76ozp+pM6aohNLNmZdktAWTL1m2783fbJWfaI/W8L7ts +TvfdtdkGt+Tm5p52kdiY0YnDho0cOXLCueObXyRWUVHpu0zs1EViVVW+y+1SUlL6 +Dxig3VRgiw84UaZ9rKutra+vV4RTgGlqanJm+AXFGOWWjRs3Bl0k5lIeTE72xRU3 +ujgzTiHGAAAARAZvxxgT9CxFp7YlNoRGkUa9/zM/hGbdunW78/OrqqpDH3MbQmNX +nbU4hGba1CnWcv/+A/n5+YGXnNkQmk5ecqawYuNb7KxLXZ3/IrEM30Viw4YOHTV6 +VPOLxGxwi9LLrvx8lZVJVJmUnKxtVsKJ9V0oFmct5XB1te+Ui5/KTm0rgmLMmtVr +tEnOhD9NjR07VkdLIVXRRQfBmeGntLN37z7ZuTOvrKz8e9+7eefOncQYAACACBAJ +MSaQm2fspEEIZ3EIzYZPs7du3aotDDrz0JzCjO8UTUJC6CE07iVnm7f4xpPMnDlD +3fHwLznTEWvzDsjW0qW4UllRaYPybXDLwIEDh8TH642+yDJ4sBKjtWxsbKyzyOI/ +6yJWH6agGLNixYpDBw9dcsnF+tHH59Seorii3KL0YtFFNdqesWPHqGVSUtL555// +zjvvEGMAAAAiQKTFGJd65Aoz+rE7/IZwdofQaAv379t37Nhxp6oVigYpqanKMyqE +GEIjW/x5Zteu/IqKivT0tMzM4EvO3IvETt1S7NQdkEePsovEEn2DdVoY3GIXiflP +vPgGt/jTyuDmg1sst1RXV1toaWhosPrwKbMNGDDATum0GGOuvvqqq69eUFd31B9X +dp6KLvvVQJuu3OKPLhN9z8Y8/boyLioDAACIDBEbY1zqrGdnZ2/fntvDh9B8/NFH +ShRtnqywITTqrCvSqHGIITTKG3aKZt/+/cnJSZMnT1YzpZaysnLNDX0H5MBB+fv3 +77d7SScMTRg8eIgChgJM80H5WniLg1vCoWUOHhyXkpI6Nm2sdkE1RUVFS1/6kwqt +xZjy8oqPPvpYNXamxQbDBJ6fCTwto7L26LvfvUk1xBgAAIAIEPkxxhXBQ2gUJA5X +V7c2hMZ/U+N85Zlhw4YpuLR4kZg7KD9ocEtcbOxAHY7oaK3FWooSi3udWJuDW1qk +BQ4dOnTEiOGKUOeff75TG6DNGHPJJRfX1R1VdHFmtHVFmeUczsYAAABEhl4UYwK5 +eSbChtCorFzR2hCaQP5rw5wnTgYObvFdJzZgQPNB+RZaLC85te2h3DJ8eGpKSur4 +CeMnTBjv1LauzRjzta99LfwryuzyMyUZxsYAAABEhl4aY1yROoRGsUF5I2gIjRoo +tLT2xEm9xb+MfwxuUWjpwKB86du3r5aWkpKcPm5cenqa8oMzI2xhXlQW/hVlqlyy +5BbVEGMAAAAiQG+PMa72DqGZNm3amc8zNoRm3779yidOVSuUItxLzpRnqqSycsDA +ASGeOKm40plB+YpCyclJ54wfP3HiRB0iZ0ZHtRljrr76tBwSzhVlquSiMgAAgMhA +jAlmQ2g2bMjOzd0R5hCawPMAZ4YNoSkoKKgorwh/CI2bW3xZpb5er50ZlK+skpiY +5A7KD1O1X1FhUX1DQ4n/yjeXwtXsObPt4r1wxsZ89NHH4VxRpgbl5RU7d+60twTG +mIMHDw4Z7Ps/YgwAAIC3EGNCsevN7LEqTlUrbAiN/v8M3xJANnyavWXLFnXV20wj +7uAZm2wXZTYblD/unHMyMyc5teFRbtm5M0/RRUKf6rl83uVh3qnMhru0dkWZ6IAE +XlGmBtddd+3nn39uMWbGjBlvrHhD9RfOuFBlYgwAAIC3EGPCUlhY+P7763Jzc8Mc +QqNO85m/JUB+fv7HH39SUlzSgavCgvTp02fgwIHDh6eOGu17TH44g/JbtGWzEtaW +oqK9znTrEhLiZ8+erUNnk+26qMziihtdVONeUaaQo6hjV5SJe1EZMQYAAMDTiDHt +Y0NosrNz7Gn3IZz1ITThPIXG1bdvX3X9k5IS08eNy8g4V2HMmdEJS19a2maAae3C +vDZjjPKJXVRWUVGh+jFjRltc0YI0KzY2+M5sxo0xl829rKCw4Pix4w3HGhR+tEzN +JcYAAAB4BTGmgzw0hCZ/V351dfBTaPr37x8bG2uD8pW1uvxaOK1RMaa6OvhWBDoa +ynWpw30vvtdWMl6bMWbQoFjFj1PRJdwD++67769du66ystIejBMoLS3tv//3e3VM +nGkAAAD0YMSYLtDzh9CsX7d+/foPrKwA89/+/z+zcnfzDec/NRQnwc/KISjAFBeX +7NktezQZzkVlIZSXVxw4cODgwUNbt27dt29fXZ1vnIwrPT0tOTl53Lj0zMxMvZJh +AAAAvIIY05V67BCawBgTHR1950/vsPJZV1/fUFJSrNzie9FrSYkz4xTFmG1btxUU +Fii9XLXgqo0bN4aOMfv3H9i7b1/+rnwtzsbJBMrMnJSenu57oE16OtePAQAAeBcx +plv0tCE0rcUYpYicnJytW7ZWVlZqctiwYdd865pu3RLLLUWFvlMuKjS/6iyIYoyd +gVG5eYw5UlNTXVX1xRd5Yjdf9r/JERsbm56eprjiRhdnBgAAADyOGNO9esgQmtZi +zGuv/uWLL7646aYbUlJStJ1r165zb3ncVey6svBzSxDFmI8//liFgQMGJgxN2LZt +W5+oqLFj044cOcxFYgAAAL0WMebMsSE0+gmdZ6TLh9C0FmPefefdTz751MoxMTHT +p0/78qWXdnKlCi12kZiNcmnv3Z/tFIpilTKVJqdMneLeSaw5LhIDAADonYgxZ4EN +oVGeafOWAGlpY+38TCeH0IQYG2NnS6KjYzp8LVmX5Ba79MsyiSq3b8998MFfWgMX +F4kBAADAEGPOJhtCs3btunBuCZCWntbhITRdO8TfQov/GjFFl7YfbRkkOVkJJG3c +OH9qOZVbgtTV1d19971xcbFcJAYAAIDmiDE9gjuEJidno1PVioSE+LS0tPYOoelk +jOmq3EIaAQAAQJcgxvQ4YQ6hURpRnglzCE17Y4xdHuaLLr7sEnwT5DYptNhpFnIL +AAAAugMxpufqwiE0bcaYLskt9spQewAAAHQ3YowHdH4ITWCMGTRo0K1LblVk6fBN +kIVbhAEAAOAsIsZ4SceG0NTXNyx9aWkHzrEEstwyzjcu33fKxakFAAAAzgZijFeF +OYSmY+zWxuQWAAAA9EzEGM8LfwhNCIGPZJEWb4IMAAAA9BDEmMgR/hAaSU5OVlYh +twAAAMCLiDERSHkmNzc3aAjNgAEDMjLOzcycxE2QAQAA4HXEmAinSLNv397zzjuP +3AIAAICIQYwBAAAA4DF9nf8FAAAAAI8gxgAAAADwGGIMAAAAAI8hxgAAAADwGGIM +AAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAA +AI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8h +xgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAA +AADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADw +GGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIM +AAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAA +AI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8h +xgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAA +AADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADwGGIMAAAAAI8hxgAAAADw +GGIMAAAAAI8hxgAAAADwGGJMCx544IE+ffr85S9/caajor73ve+p5r333nOmAQAA +AJw9xJgWbNq0Sa9//OMfbVIs0lRVVdkkAAAAgLOoz8mTJ50iTvnKV76ixPL5559X +VlYOHTpUeeaOO+644IILVP/AAw9oliYLCgo0S5Oq11uUc5544gkVxo0bp2aBEUgN +1Exz7WTONddco7fbLFFkCpwUa6Yl2EJspdbMZll7LVArFW2JVmqTgev93ve+p3dp +7Spom7VelW0jAQAAAE/jbEzLFB70qmBgr8oA/moflRUPFC0UYyzwKDx861vfUpZQ +YNCr2NsVMFRQeNBblB80V4U777xT77VFid7+/vvvq5nojSqrUgtUVlF7+Z//839q +0prZW7R2sYIWrpbaQi3T1quV2no1qQYqq6Xm6u32LgAAAMDrOBvTAgse1ulXhBg2 +bNhrr72mHKJsoPoLL7zw8ccfVxtFC6WXd999V2FDswLPhIiSw3t+ChLnnHPOc889 +p2aq16tVWjOVv/rVr9qn4Ja1NGUkO+tieUllzfrss8+0Xs21xnrVRqqgVauN1QTO +VVlsm//5n/9ZG2z1AAAAgKdxNqYFn3/++bhx49T7/+tf/6qEkJ6errLqFQNEBTv7 +oWBz2WWXKT8UFhaqvf+tLbDE4jZQQe2t3Bo7c6JViCb1Fq1FBWUS1bgnVbRVqtGk +zW2NItB3v/td5R9nGgAAAPA4YkzLLMaooNhgBXEDgyrfO0XxICEhwT270py9xW2g +gnKRlVtz/vnnK584K3jvPeUlrcU9BWQLVL1Slo2HCRFR1EybzZAYAAAARBJiTKuU +Fv75n/+5urraLgZTrtCrAoMyhmoUHpQN7GzJHXfc8R//8R9WaVeCBdJbLrvsMtVr +rtqrZfM2QbQoa2ZvsdMvmrRIYyd2LMyoUinr17/+te9tLXn//ffVxhoDAAAAkaGf +dcQRSGlB2WCEn0KInY2x0ylXXHHFv/zLv+zYsUNtDh06pAaKN6JoYec9Jk2aZIHH +ba9XLaGqqmrVqlWqVA6xXGRUr6VZjVu++OKLtUC1t/M/WmBgDlGl1mtv0TaosZYf +ExNj67K5geWnnnpK5cDtAQAAADyNIf4AAAAAPIaLygAAAAB4DDEGAAAAgMdwUVkL +AscLueU//vGPNrwk0Dj/Iy+t3OIoI//AGd9QGQndQAvXKqwykJZvY/rf87PKQO5i +Axu4iwUAAAAiDzGmBX369Lnsssus7AaDO+64Y1Ozp+BfcMEF7r2MW4wNCiFuzgnd +QAvXKqwykJZv91NWyGkx57hb6DawRbWYmgD8f+39C3yV1Z3vjxtuCUFIgAQUhSCI +GlRAib0K4ilMdaZOqwivM6219ugB599pRXvmB1odtWoLMy+V9rRTYNqjrdo5B6S1 +tRXb0HJrxwqJIlSCICEBL5AEQgKJhJv/T/ZnZbl4Lns/O9kJ2dmf9wu3a32f7/qu +77rs/Xy/eZ5nbyGEEEL0AJTGBIA0Jq2nJXYlpvWHMk1dnFFWr149Y8aMMWPG7Nq1 +y4iSZNGiRQsWLDCV05k+ffqsWbPmzJlj6t2DysrKFStWLFu2DAUjamPhwoXz5883 +lcwDczJ37lwU9MErhBBCdBA9GyNEJ1JfX8+wtZNAjgT7SJNMvRuABGbs2LHIu/w5 +TDfMuIQQQgiRpiiNCcDeUZamTJo0iY/TiDNOYDTfPqZPn/6hj4ULF+IQkplFixZR +7cxSXl4+e/ZsFObPn79r1y7jZRvLly8fPHgwNYUQQgghOoJuKusKmpubq6qq6+rq +amtrjShGbm5uUVFRYSsFRiR6ECtWrGBMDzp+UxnSmNLSUiNy4FGkBwcPHjSiMwfG +i1Fn+J1jcdBNZUIIIUSqUBrTWSB1KSsr37atAv+QwBhpCMhniosvGT++uKSkRClN +z6CyshKrWV9fj5geaUbnpTHl5eXoCAXYRy8UnimGDBmC1+6QUHVPlMYIIYQQqUI3 +laUe5C1Lliy74465eF2/fkPCHAYg5ykvf+2ZZ5676667H3nkMbQyB0TagsSDOUxn +30Zl7SfsaPXq1VlxMXpnnTV27FhUEXObegw0nz17NjXBjBkzVqxYYY7FQEKFISPd +QhltaQSgEHbPGy9YUQ2gjF7MsTasHWZrHpAV8CgwohCsHRcmFXa8GALGxUMQembA +guHAGaoBJG+QYOzmcBuQYBsYpawsdxKQ5VrP0ZFnJqFJuam3Ya3RMbug/hsX7YhM +PQb8gWV4y1Z02xw7Hc9a+0dHuWufPgPXma5cXzgDHU6adQbAQuCNnVF8A64DHvyz +B0nCjcFDYVPHQhhuj1FWszPmxO66wOkSQogu5UPho93T8uab27797Uf/4R9u6fi/ +r3993rp1643dJLnmmmsefPBBUxFnAj6ywqdZli5divKYMWN4qB241vzwaBT7gRdz +XIzehx/yqg48N/W2XvxAbjRij75AMn/+/MDn+CdPnnzw4EGjGmPWrFnm2Om4NoF7 +iamsrMxI23CTNyMKIfBSFVy1hwJvhPNMe5xLXpC7A0TZr2kl/kPuqAPX1L2ax6Wx +C4pD1LHQvruCmDp/pwBCT3PuWA+e5aPQ2ne3lrXWxetLt2EtsF94aPRihN306PEN +xPlSClc5+sagMGzqTCkE2yNaBf7ZwrOanTEn1mFPcyGE6Hp0NSY11NbWPfLIY48+ ++p2Kiu1G5FBQUDB58pUzZ9745S9/6f777+O/e+6ZB8nUqVOKikYZPYe6urolS5Z9 +4xt3b9tWYURdzvr1G1au/AX/nUE30o7KysoFsYdVAsPB1LKo7buYk3oWxbz720jo +5+rVq9kLYnobJDG8g9xeSeBfnVFdtmwZol4bkvLJfvv0P4HnbMhEAsAygy3YdP9W +TWAQr54/AMMCOg2M58Kw4SNxxw6XEPDBWx7iANGj+0dulLG+ULMxHCJUakLuus0/ +eMM3akINo7N/AkfB0xFGjSni0UBg0JSSB7OEyUenWEHrOQqoQuh+0x2q7AjeMviG +GpfPvygWThEtY3IoOSPrC//RCp1a5+kPhs/9CeAbHXYDdJQhCfQN2EkjtOkCg+g6 +ysbwQE/s1LEtYS/ujuXbnKuJV7c7qGGiPKtJUjsnNrFHwYiEEOJMwc8j4ZLstLz0 +0qrbb5/juZyCf9/+9qPr1q2vqak1ejGamprefHObX7hpU9mPfrQ00A7kUDCqEUjV +1Rj3ytLzz680UpEIBmQ2+GCg7AlQkoLBRBzcyCMOCF+ob+pt2FDe1H3xE6NP/xAY +pWG8rFo70GTAZEFKw0OMunCUsanfc39fdIaTYPsidIBNgJGG4BmUCw/BJfcv2YBR +I+Sswu3WboL+Ds1Fhz+swk6gJjsCnoEzIrTNOVh3Euwuam3cNgo7qx63gWewgbNH +PJocsts1YHM7DwBVwFYcrI1uwRlZX04RwBCMKAbc8zjDqk0jLbTgGTt791wmsj6z +Gn1jAGqGTZ0Le7FLY7HLEfYus006aU6EEKKboKsxHaK5ufnxx5985pnnUDCiGFOn +Tvne95584IFvoVBdXf2znz37yCOP3XHH3C9+8ct4ffTR79x1190o49+9935ryZJl +ZWXlRUVFd9455/vff/LLX/5SQcFpT/mvX78BzWHH1HsKGLVn3noA/Js6Qh9GYF0D +eqwMutM9VfBv5P4RMfhG7/ZvugSajIosCOYYDtIUXtnEb5NhNIbjuTQBgzDiGSn/ +3m/D3A4CZxg4WugMXKUz8IGfm/6/Q3vGS8fgsEfTuurxmfPAVn7gAP9SbqNSYjv1 +zL+fOBPFru1lkMC1ZhBsg3UPNM65Imd2fV1PANaUbrBH2IRv6M5vFmqQe3zjQDzr +6wFHI24MD/6piwJb0VtKiOdd5pLaORFCiG6C0pj2gxAc2UV5+WumHoMJDBKS2tpa +Puj/xBOLX375dxUV2wND9urqPchSoMmH+xHZX3/9dQsXPjZz5o25ublGKab2yCPf +6Ul3dmHUmBkMuSdlMjjTI9zEWd8TbqaEwD/ZlpaWIvJAFDJjxoyEsWyy2IebadkT +4gMbtLmhJ/AHcwAxFl4ZDFEfEn+QZ4X+sIlmGcOxAMcg9BtpH/TQBZY56sAYLnYb +TislJSUMHO08hM2YlXgOsYpWbOhh2bJlsIyF9kwsWnHs/rDVAx1Djs0FdYHQKtiC +3/MwuOc9vtHIGVnfwE45HHfvwbIZ/+lw/u1sgGQnBHBXAP/GcAmcuijY6WXVhULP +3KZ8ToQQopugNKadVFdXL1jwLWQXph57AOb+++9jAoPo/NFHv4NIHTH6oEGDrrqq +5OabZ95+++333Xev++9rX/v/felLX5oyZcqwYcNgAakOn4dBMjNz5k3f/e5jxcWX +0DiAKdo09XSGmZup9BRwsuezH8hhkgq8OgICoOXLlyNMQZAR5/77lOAflJUw0LGh +XuDw4zT3ECbnn4ptmMsAMdkQMA5h/XqwyQAKxB+Rc0LCDPpjYqvJhi5YWXQBBd5K +5IFzAgW7+gyOPXb8Zj1Yhfiee0Ciy68XwyakxCXMSJg8Jesb0fP4uLOB+Q9MGPxg +FRJuDEv8qYtPnDWKLkwWOydCCNF9UBrTHpBRIAp3v0l58uQrFy58bPToIsjtg/6X +Xz4BWco//dPXZsyYcdFFFw0f3pqruOTl5RUVjZoy5eo77rgdKQ3ymezsbD7cf++9 +32pubnrggW/NnHmj0Y6BQ0hyTCU9sTkMxo4Buhed0hqELPyDJZIZRjOED0zjEKsx +3RTD+C/hn+STBfkYr/mw6o9jrIRxUvxoKU5zD5T7rfGPyphnKjDe5b0xKSHMHxeE +nkgSWJ4/fz5SC1BWVuaJtul8mEHuExer6R81omG8oq/ACwJWbi+dwUM08XRNs/4n +Hyx8SMMSZSoAdkhp7IGrsWPHxhmUB8o7aX0jeo6+zMiDsJ1GT6UibgxL/KmLT5zd +FTi3qZ0TIYToPiiNCeDBBx80pSCQw8SeVPnoOszUqVO++c27a2trFyy4j1dLkMAg +Lbnhhr8L/BayQJDSIJ/52j99jckM7N977/2wNnPmTXfeedr5AzlA/OdkbrvttmnT +pplKN6On5jA9G/412h9s2cSJkTTDUBQC/wjNqJSmqG8DVhcrDIzaGUstW7YM1qCG +GNEfDbebwECcQrqNTuEeeuQD34hTEbACHPUMhF75E0ur5tGnJlqxoQVydIqpQC9G +dDo4BGfcEBNzAsc8duyEsxqHwLWGt8yR/BbQHSJy6Lu3NZ7B9YUn/k7dRYzjmx+O +lw3jEH1juAROXRTirCaFnrlN7ZwIIUT3QWlMAA899JApBfGznz3ryWGQZiA6R9ZR +V3dg0KBBX/rSl5DAIC0xGsmQk53NizOjRo1EFRE//qGL7373URvxI496/PHFeGXV +T7dNY3p2DoOgJPZXSy+IVHAUgQKrVE4tiKLwmjDYaneMwqs9/pvW2K8ba1LT/lna +wjgPBSjzlU38NtkW0xU4HAoZ3KNAa6kCznimyOOMjfxYtcAfT0zJeYA1+mmx1UA5 +W7nwUh7CYlYDwUxij3F3gdLSUgTQnujfriCH4MKLh+wIcEo960L3YNMzcALjAJbt +up/B9cWcezqFY5TQmvXNv0uxiMzWOEs0BeWEbkTfGB78UxcFNMErfPNsV/QVOG8p +nBMhhOhWKI1JjrKycl5vITaHYXSO3OOO/3lH9CswYSAFuuWWW6ZMmYIyjRcVFd16 +6y08Curq6n70o9Q/RN6p9Owc5kyBIANhKEMlBjdxYCDCeCUp5rR9W9GMGTNoBIER +Al/GTO6lAAbQ8Kek7eFmgICJTw1Bk2ETdKCJwoIFC2wADZtQo00e9YMxoi0s07jb +dcfhADmZAI4xqrPO8I/W6NpGe/AZQ0ArVi3QpG92lli2xtGKQ+CoKfeMGv4AzFjC +lU0IVxB9wVUb0cK4f8LpNg9BH2X4aW9sa9UIgtd/MC1oiOqZXV90ahcIdnitw66I +9Q068I0OA0wL1xFqXGhI0BDKaBJTCSX6xvDjmboo2NV032WYWHZnR+qSqjkRQoju +hfkLnnBYs2aNKZ1OU1OT+7su3/72oxBu2lTG6ne+869bt76Z2n/PPfefNI6kBX29 +9NIqVvkPXcf88vL666/v3r3bVDpACn83Zt269bSzYMF9Sf0GTg/AczXGwjvjAQpG +FEL8P8YT9+/xfty/zqJspG3QQ2DqQT9YYb31AN+MRhthmv5+/cEWQURlNGJ4nLEx +PQqU2B5ZDcM/KAsPubNk8QzQ8+d2goZcI4SDRi/29cR+ZRsQ24LFdcxd8V2n/yYM +hYGjcPEPtqyszN8p8VhD1RxwwFjM4RgU+n12V7mL15duY4z+aUcXnmkM8w1t+WMs +pp4IWKbB6BuDh+JPHfEvoiVsNdGEN7aR1M4JscuBghEJIcQZQldjArj22mtN6XR+ +9rNn7a1cubm53/zm3dXV1bzCcPnlE2644e94KIVMmDDhc59rNbt+/YZVq16+/vrr +Jk++koeA64/LvHnznn76aVPpBug6TOeBAAUxkOfpiDggVGJkkyxo6OkFUeby5cv5 +R1wXarpyBExw0p/ewBNYgL6px/7oCzVGdWHYMNdtmBJgGb3bgI9VzwA97kEZo4CQ +XtW3/cIMwNJgHlxllG0Vh+xAYATzELiC0Gcs23HQC8JWGHTDX4zOv3m4CtY9gFZQ +M5UQYAqurl692l7tOSPry2m3q8Y3CAbumUb65o4R88NhuvMTnegbw49/6hJiV9PU +295lEOKQEbVxpuZECCE6myykMqYo2sjKCpiW2tq6u+6621TOOuuee+aVlEy+997W +71weNmzYHXfcbg50Ahs2/GnDhtY72b773UcLCwu/8Y27bfYyc+aNM2fexLJlWoz4 +T/hE4ZFHHuNXroHAjqKgHEZ0f/htUQjjAnOJFII4lTdZ6YM35XBuEZojQDeiDoCz +APIo5CGmHgR0UtVdJ5HaORFCiO6G0pgAAtMYxOKIyFkuLr4EEfnKlb9YufKX2dnZ +yGHa90B/dJ599tk9e/YiE/judx9bterlZ555jnJkBd///pOe3CBKGoOx1NbWmkoI +69ZtsF8qjSGPH1/McnSqqqr586DKYUR3RmlMD0BpjB+lMUKIno3SmAD8aYznUsz9 +999XWFhIyec+93cTJkygvPM42tLywx/8sKWl5ctf/tL111/3jW/cbROMO++cM3Vq +65cBWKKkMe6Vls7mvPNGPPzwg8phRLdFaUwPQGmMH6UxQoiejZ6NiYR7XzivS6xc ++QuUR40a2QU5DMjJzmausnLlL5ubm2+++aP7u1atetmUuitf/OJ/Vw4jhBBCCCFS +iNKYSNjbycD111+HRIKSKVOmUtgFXHXVVYMGDULXZWXlSGlsYlBdvSf+r2GecbKz +c0xJCCHSgQ/Dv3PPAh1d5RBCiDOIbioLwHNTmXtHGZKHH/94KZ9O6dQn+/fvrxk+ +fJiptLFp06bS0tV8QsZ9Vod3mrEMotxUFvsRzwTJDxIk+10CBQUFhYUFLMfn0KGG +999/31Ri3H//fe14rkYIIYQQQogwlMYEsHbtWqQBphK7a8s+Us/fu+QXlHXGUzFH +W1q2btny6qsbGxsbb7+9NUc6evRoTk4OUxocfeLxJ1D43veeRBLyxBOLW9u0feUA +y2Dz5s35+fmjR4829fbSjm8qQ2bF7yVzURojhBBCCCFSi24qC8DNYcC2bRWmdNZZ +JSWTa2vrkMOgfNHFF1OYEnbs2LHi+ZXIUkpLV/fP7Q/Js88++5Of/OS5557DK45C +kpOdPe6ii1AoKyuDJ63NYnge1p80aVLHc5h2YHOYoqJRlAghhBBCCNEZKI1JjP1O +MDB+fHFFRWtWM2zYMCQVFHaE/ftr8Pr44088//zKnbFc5XOf+7spV1+NQktLy5Qp +UwYNGmTVwOhYhsDMqrj4kpislTP+eIybw7iXhoQQQgghhEg5SmMCWLt2rSnF4LUX +UFBQkJuby59b6fgFhx07diB7+clPfoLXCy+8cMaM6cxYcnJyLrroouxYjpSTk41k +BoW8vNZDYNiw4XilS+6dWrW1H+VamzdvrqqqMpUuwZPD6HvJhBBCCCFEp6I0JoBr +r73WlE5PD/iMO6+EDB/emk60A2QvpaWlW7Zsef75lXnITgYNQqKC1Oiqq666+OLW +G8be2LIVrxMmXI7X0tLVeL355pn2IRymT7xA5GYL7tWYefPmPf3006bS+SiHEUII +IYQQXYzSmAS4P3VfWFhoSq2XR/JNKRoNDQ1IYPCK7GXTprKioqIpU6Yg7m9sbMTR +mpqa/ftrPvaxj6G8c8eOoy0tKA8bNgw6X/unr10Uex7GA/IrGDGVM4dyGCGEEEII +0fUojUmChN84jPRj06ZNeDX1Nqqr9/zwh//++9+X5uXl8Rn9LbFLLshnsrOzka6g +vHHjJhxFGZI91dUo33HH7VOmXO1/Aof6bn51plAOI4TobvCn67N8DBkyxGgIIYTo +ESiNSQ3u94zteOstSPbvr3n22We/853v4t+OHW8hOWlsbIQO9d94443q6tbHV5Cu +NDQ0oAAdvM6adfM3v3lP4OUXS05OCr5aoOMohxFCdCvq6+tnzJiBHAaZjBG1MXjw +4KVLl5qKEEKIHoHSmA5xtKWltLTUfs8Yn9HfuHETXktLf79nz15eOdm0qYyZCXTw +jynN6NEXQFJTU3PRRRfffPNM/pImshq8xufQoda058yiHEYI0d1AArN69erJkycj +Y/nwdA4ePDhr1iyjJ4QQokegNCYJqqq8X2qck529ZcvWlpaWcRdddPvtt3/5y7dA +iMykoaEBOQzKefnmEZqhQ4fMmDF9ypQpUEPeAkl9/SGUv/SlL91ww98hyYmSwBA+ +TjN69Bl7MEY5jBCiu1FeXr5ixYoxY8aUlpbOmTPHSIUQQvRclMYkwH2sv7m5Ga+M +2mtq9sdk5ivFwPDhw5CK8NGXjRs3Urinuvqqq0puvnlmQUHBVVddNWXK1VCbOvVq +pDQz/mY6ysgEqBkR++AN3OAv2HQxymGEEN2Q1atbv9cRCczgwYMpEUII0bNRGhPA +mjVrTOn0x/r5ay28DHLo0KGYDGnMRLzy68VQmBjLat56awfzmZaWFpSff37liy/+ +BlWCbAcpTft+PXP/vtb0iclPU1NrWkWKiz/6DZnFixffdtttppJSlMOkHcuWLTMP +OJ/O7Nmzy8vLjVKMsWPHQu5/qMBl0aJF0JkxY4apO61gDfJW01lZEIbZWbFiBbqm +GkCZ0Sfhk9lDhgxxhTSLrk29zQ1ANZbDeuTRMFyz9fX1qKJ3HkLBPRoH6rsOWA8r +KyuNKBZnL1iwgHKC4WNCzOH2Dp8EPtRO/KOIvwou0TVd6CG2gam3YYfvWSw7IoDx +unNiSegJ9/P06dMx5+5soOzZ6iDZfQsPS0pKqAa4N7BheBQ9Ug6vKAFwj0JTj6nR +CHo0omi7Dl7hkH8+bb92KjiT0We+3XueExhGqnrhwMOww+TGCFw7Li53VEem0a4d +thOPxoFNWPZ4BTucB9c4JxOaCXej1TT1Nrjh7b4KG6mH1m6cUbMV8b8H7SyBKMtn +BxKIteCfauLfsWGD8i8fq55ZCpx5ADX3re1inUztzIjUojQmgGnTpplSDHvBpLm5 +2X7Nsf1NzOHDh/EBmK1btuCVv1zZ2NhYXHzJqFEjIUEZKQ0ffek4e/a09tvmw0c3 +uQ0Y8FFGMWnSpNGjR5tK6lAO05PAZzE+u/3hXfvA5zis2bMIqjiturEawZkJAYd7 +GkAZap6PfgQ9ULMxogf0AjumkjowFRgCLNt+UUAV5zwMh5KIBHqIMfpHiuFjpF08 +fBgHCVcBoKOImlHANPobYpicdlOPDRCdejRjLifwhMtEg24EwzDFE9OQKPsWQuwB +eOi+Wbg30NazTPAqzuT4E6oU7ro4wFSgV13TO6aXE9h5vfCpJ3d7EHSE3gcPHozk +1ojai3/t2gcWws6DB8xGwt3YZfgn0y/pPMJ2bEcInHnsw2RX9szOjPCjNCYx7s+z +VFRU8Lfz+QAMhRMntv425RtvtKYxgLeZ7a6suuWWW+677178m3XzzOiPvsTnrdjX +oMEH5FQVFdspREbR2b8hU1VVrRwmfRkzZox50jlGaWkpJJCn6lQBOzC4fPly2ueT +CTgfu/ZRZnXhwoVUAyhDgnMJo0w+mY2gBOebwLgTuEaiRCexfgwctfv89/z58yFB +d4iSce6EQUwOD6HAP+0nG0nQQ9phjzCCMaKAmaFxgOnyrELHh2+dJ7TvguY86VpP +du3axSjQrgKBptsX8axXUiBcMCUH2EEMgUDTek5n0LWNOVCO4jP10QsK1mf7ZD/k +NkC0wHKUfYvlg5r1EDapCTl7x1HIy8rKqG89d4FZAE00hylIoJbCXReHwJlPSe/+ +r1LwbDn2gld3AtEKKx69F06vCyyYYzGwxDCI6fXMPFeHRylpH1w7zAy7xocG3QD0 +xOMhW/mBkThvnCi7sQuAD4GTyfdgsjPpfnoQ2DfHwgncsR0hcOYxQM4tdgjelca/ +GIFOpnZmRKpQGhPAQw89ZEoxmLeQbdsqYjlD6/WZHTt2UHh57Cf2+ROWKEyYMHHK +lClTp14dO5hKkDihFxRKSibDEwpBcfElphTj6aefXrt2ramkiPLy1/CqHKZngPMx +z5Gej+N2g09wxCiMFwHP9Ci4J2CWcZLmIYIy4wBXkwqB53uEvDiLoDvXSMdBXwiq +Jk+ezDCOQoZ3OHXhUJzgwwOU4SHaWjuAzSFxwy9MF7MCrAJaUQjaN3wuZfxTqT1t +o1/rCQaIReHatW+9ooDhwHN/cGD9sdNl54QjSspngJmEpvUZExKmCRLuW/TOhcAh +6yFaoYrdgrK7cJDAFJoE/nWWdvC+s2sECZqnZNfFIWzmu6x3TAiGjBzP9oJJQC8o +pKoXwA80jzUuhF3fdkM7/jddsjA6968FSbgbuwxuY2wbU4+tFP/cwG3fqWARA3ds +RwiceXsRBlNt35XxObMzIwJRGhPAww8/bEox3MdOyspa9/3111+H11dfNc/x52Rn +j4vdS7Z//z5Uhw8fNmXK1am6/OLCbw6YPPlKJBL0hLiJFuiMNAbk5GCgOY8//uQj +jzyW8J9pE+OZZ571HPX/c2+QE50NPoV5vreBRQdBDOE5Q/AEjE98nioQBzCa8YcU +DOx4MqAE5wM4FhjiUNLxeMJDnHCH4ZF73opPYMSDwPrD2J+6Tb2NwHNn+4aP6cVr +/JMxRkE1DsqFNu0qJLVeCYEphmIIFyix8I+grj+8bIXtxLFE95mglX9+KLGmLLAZ +f9/CWuyPswEXvuieBzrpjzvhJKYUTdxRpHDXhRFn5rugd8BeYNAzXdjk7DolvQAu +ELsj3Bjot4OfcphDmIWRDtrBQsAlGHH3gAvk8Xdjl8GRuktj15HVziPOjm03YTMf ++BaOzxmcGRGG0pjEFBYWuI/HrF+/oaRkMhKJxsbGLbHnYcDfzJj+tX/62oTYZZlO +4mhLC3/7/5prptINykFJSYkpdSZHjx7dsWNHRcX2KP9MmxjV1Xs8R/3/3K8rEBZ8 +/ponBxPhD3ld8CFu9GLMmDEDEoQR/oBv7ulPikOTJ5X4+P8QhTMET8k8AaM7vOIU +ZeyeDuRWh/BP8uiahwhOHhgmzAaeM/yex58TF3aNANo0dmBU7foWBwwWPmNi40Q8 +1AGwbG+q8dhvx/BpwRMGeaAOFst//rbC9q1XfOA2lONPCwZL4wgL4Mzy5cvpT3Sf +SWAX0GTB1QRWboFBd996iK1bK/YZBs8koHcME0LoGFEM/jEYbzd3FGwbfdehag63 +MTbRM9xxZj7Z3tsHjfjnGVAYOM/tAAPEwsGadTssvoSCGWcb8acRs4ENz7dku4EF +bok4dqLvRs9nHQj8rPOPFD5EmXDuFk4gYTnwzZVaEn5WJLt8cWYeE87pne37wpsw +zuDMiDCUxkRi6tQppnTWWatWvYwc5vrrP4uyzSXy8vLa981j0dmwfn1LS0tBQQGS +KPhgpLE7ytyvUxMiIojDGIrFAQo4iyNoY+Qahj/EbAduFzjB4KyDM9aQtq/tghsM ++m2AGx+0wsne5gnxiT86kFABoDv+QQEeUuICf3AUJ128YizAE+m6JDt8uAdlfxgU +SNjsJbuIUeYEwDE4D+PRA0GEFBy1JYrPjEjCNHnUQ8Qhw38GTK3LFiNO0MMFgo7d +e2iI4SAy8/zVICW7Lg7xZ76zeyc0EjjPESc/OsxYbIjJAqad1XaACcTaIbDGBEZ8 +c4WBhcBUYAPEsZPyCfEDN/D5E5jzuMATzBsc5hxiHrDhIezsYL0dnxUJiT/zeLfi +k8F+OFvgidE4nTM1MyIOSmMicc01U+0DIdXVe7Ztq7j++ut4QWbDhj9R3qns31+z +aVPr86O33npLc3PzqlW/oxzAN1NKNZ571UTXgw9f3tOSkPgXtfFJbfRi8LlnfBbz +j8QuS09/ZpdX9vFJHf/MB1OmFBecSIzdINwhIMTH6QdOwlWeIXBiKysrgwVEh54Y +l3g854kQmnGyBQvOQ3jFKc009rFr1y5qxgEO8LYx/1cw4ZwHtxn7YgjwjfhvMyPJ +Dp+SiKfSsMWinFNBoq9XHDAQvGInByYSFrvVMVJU0codZhSfXc/9BMYlUfYt4hu7 +heBkbN1a1yJwttEL/zaMvWQXl4PCHpjtfB0zSHbXed7FIP62jD/zKdnzCWEvgfPs +328dBO8XvDK+xHsNYODYw7GDHxF9GqkJs5jJKB8jYcATfH5ipFgLIwoiym4kns86 +EPhm9IwUw+SmxXAS9sV5g+d45ZRGfL93hCifFdGXDySceQwTzfH2NPUInJGZEXFQ +GhMJZCwlJR99Gi5ZsgySmTNvRHnDhg18sr/zONrS8uKLL6JQXHwJL8Ugk+GhgoIC +90pRapk586Y775yDYbbjnzERAx56jvr/uT8zKjobfKwzP0HUFZgSWPABzRMAP6/D +8MeIOE1SyA99npbw0R/lVI2+cD5DQ8RYbpRDCQr8hiUKw4DbDGviD5BY91htN4gS +MLHwDcmGO1LGQJhMnHQRAcM3Ejgb7Rg+PedUxyHOKlghdZJarzhg8jEcWMNgjSgR +0ORAOKjoPrutPNjd65mihPsWDWEQq4BVw9oh3ImtW6uHgTPDpcEe4N6zsBVX1oic +obGaWhLOfKf2bonTC4VUSAkwhTcgzAKueEriS7zpsNxYuHZnMlx0bB737ewn4W7s +IJgffoDAbMJPRU4d/3rFyYz4V5J2047PioREmXnsFq4sBmi/ryzOtuz6mRHxURoT +FcT09oJMXV3dypW/uP766/gVYdjK9sf1O4PS36+uqalB73feObe6unrlyl+aA2ed +dfPNN5lS5xDLQG5qxz/TPkYUI7ovLq3BZ7onquOJAScDnoDxQc8TiT8UwFnEvY4P +O7xGxETLAwzinAQdNxzsOAw6MQp/JIHAFL75L1uFAVMAdtyRYox4ZS8uPBe6tGP4 +qMIOpjfh2dSugr/fdq9XfDgW+MyqB3xywk78W9uj+8zptSGsCzWtKQtsYvZMJYbH +pg0iWbUg5OKauqAthLH19y40wCTALHUooRp86Piu8xN/5kGn9m6xvXjm2S5Twk2b +FOwOqwNstePwzYi1i7LnPWCYcAb7J2FOlXA3diV4p6BT+MMdi2qyK+UZS0IS7thk +iTjz2O1wFZPs+bNRGB2fGZFalMZEBXE2n4chyCWQUXzzm3cXFAxtbGx89plnOymT +efHF327d2vpFAnfeOQc+8MdbSFHRqM67FCN6MPgItjFK/BMkPqlxckUhfkCAs7u9 +aQrAOE/A9u9q+KxnGXIctdEAjKMhCjjT4ESCAgJ0uAflMMegiUM4RQEjCgJ2qBDl +HAOb8BD9whmOF8BJnOFoJKk/EOJMDGsYqR0mxwKXrARmS5yfurO0Y/iMftAEnVIS +hl0F9GI3ANr6hxl9veKAVgDzH7Z5cAgdQcezeVim/eg+Q59lHIIyha5xf2bo79qz +b+kDlolygK5hnJPgAlOQw9s4cRgP2VGkdte5wAiIM/Og83p3sb24ux32OYGYXihQ +mBIwXnSH4WBN8TZJuEUjAlOYDYzCboPocNRRonNMfvzd2EFgmXsPUxTlU5Gbhz4k +u0yYKwzHVCLQul8T7dhkiTLzeM/Sz4g5DOnIzIjUwytoIgpNTU1f//q8f/iHW/gP +ZUiqqqpuv30Oqnfddc+mste2bn0zhf++851/ZV/r1q2HAz/60VJW+e/NN7fRsW5I +uvjZ4wn8o74FH/FGL+5ldJzFebWdpwScbNgEsFXgSdE1TsI+8a39stgPCMKmvbgP +aNy1xqcOrFqriRBgmU0IvcWcmLoDug47jQXqu/jVPBPFezn82HMnR9eO4aMQBSib +xuGrgGjJaLSRcL3C4PDJrl27jDQGhXauwmYGgQIVSHSfA7ciwKQZjRjcCVH2LQZr +DjigIceI5aMaIxv/MgFTj+FZzYi7DmVI3EUk9qkAO7roMw86suc5gX41vzysF2ji +kFEKIWzgYXJgt4pnHUFYq7BpdDWx4TkKz0aK40mrxRhwyYhi+I2jDEmU3UhNd3oJ +Rw0LrNKrMGxzVu2IPGPhxxGxK+XZwH7stiee6QIcgrXA2SDxd6zHPYt/+VgF8Wfe +DtD/MeJxMiUzIzoJXY1JgthtXR+dTevq6h555LHCwsIHHrgPh2pqan78Hz9O1XMy +sedhzHWY66777NSpU9av3+B+yTKEegRftBt85iKCTPh3Ppy58bmMT+qwcIcghsMp +xAZ8rPqN42SAThnwETRx7fOPhWgYvzs4j/NTpe9rbV1wyqFlU08EPMHpEE3cruEJ +LNjAKDpoCAdWt/0+D4aMgfM8R6CA7iDnbPBPsCkcfhy4Cq4zsIb1wthNvY2E65UQ +KDMgCAPG0bU7w+wC/Zp6jOg+U2i3IoAmHHbbWti7VWYV888q8fQCZTgDIaelPvab +HitiYKSetn7QFq9YOP4NGNZSuOtcYDP+zIPO693F9mLqbe9NCO3MpxC70CkcAsAU +cQj2YlpEbMOERNmNHYQ2I84MPKEzWC/rVVJgtwe+7wLBLCXcsUmRcOa5lNyNlESk +4zMjUkgWUhlTFNFYufIX7tMpSDBuvfWW2traxx9/sq7uACRTWunQT/hXV+958cUX +GxsbUUbixBzGczvZd7972k9Mdje++MUvm9JZZ91//33KuHoq/FYunK5SGzSIiGRl +ZSFQQGhi6kFAB6dbRI2mLrRvey7IJ2fPno143ZMJd2e0G4VoN7oaE8C0adNMKYiZ +M29yn0hBgsFrMgsXfodP/G/YsOEHP/ih/WXMpGhoaHjxxd8+99xzyGFyc3ORAKCv +VatednMYyO+5525TCWLevHlPP/20qQghhBCZgb3+yaoQomejNCaAdevWmVIId945 +x/6uP6iu3rNgwbdqa2sfeOBbX/7yl5BmIAn5zW9+i2Rm06ZNER/937Fjx4rnV/7w +h//OG8mQvXz/+0+OHl2EBOaZZ56jDoDxBx64L/73em3evLmqqspUhBBCiAxg0aJF +q1evHjNmjNIYITIEpTHtBBmLm8nU1dXde+/9/BZmpB8zZ97IZKa0dPUTjz/x4x// +pLS0dMuWLUh4GhoaoI/cBmX827DhT8heHn/8ieefX7lzxw4cKi6+5P7770OmVFVV +jezIfR6GOUxRUZGpCyGEEJlNfX19Vgx+Q12yjzoIIdIXPRsTAD4NI07LkiXL3DQD +FBQUIAMZP764ubl53br1OIpcxRyLC1KUkpLJ11//WWQptbWtv0vjsRw9h5kW46GH +HjL1M4GejckQdFe3SEe0b3sYQ4YMQTIzOPbDvml3KUa7UYh2ozQmgOhpDPA88U+K +iy+55pqpfIQGOUlFRUVVVTVAbmOzGiQ8hYX4V1hUNApRPvMT6Kxa9TtPAgNg8Jvf +vBuZjKnHRWmMEEIIIYTo2SiNCSCpNAZs21axZMmyuro6U2+DF1jwD0F8/AwEFkBZ +WXngpZuZM2+cefrv4sdHaYwQQgghhOjZKI0JINk0BjQ3N69a9fKqVb9DwYhOh9de +PNF8VVXr9ZmKiu2m7qO4+JI775wb/4F+P90hjVm58hem1Pp1BVOTHYIQQgghhBBx +UBoTAHKAtWvXmkoy8JmWsrLysGQmOkhgZs68qX0XMebNmzdp0qTbbrvN1IUQQggh +hOhZKI1JPchhknq438V90N+IhBBCCCGEEKejNKYTqa2tKysr27atAvmM/8kZC1IX +PuUP9AyJEEIIIYQQCVEa03UgnzElh9GjiyJ+/5gQQoiUUFJSUl9fX1paOmbMGFRn +z569YsWKsrKyyZMnUyEpli1bNnfuXBR0PhVCiK5EaUwA7X42ppugZ2OEECIONvGw +TJ8+HVmNqSSJ0hghhDgj6Ff8A1i3bp0ppSebN2+uqqoyFSGEEKczZ86cpUuXDh48 +2FaXL1/OshBCiHRBaYwQQoiMA6nLwYMHP4zhpjRCCCHSBaUxwWS1YeqxO82MyAFC +c9hp4uL+eIsRnY5VWLt2rRGdjr29DZpGdDo8CqxCul9NEkIIIYQQIj5KYwJY42BE +Z521ePFiI3KA0Bw+vZXFfUDFiE7HKkyaNMmITgdyKkDTiE6HR4GroAdjBCgvL0da +O3bsWFN3WL16NQ6VlJSYeoxFixYNGTIklgtnzZgxY8WKFeZA7BDlYRi9mOUFCxYY +aQw+P20Ox1i2bBnkfscqKyvZBEaMKAaawwgPAZQ9CgDWzGEHDAeeG40YHIi/a+sz +fEM1+njr6+vdefP3GAYnIQzXQw4N+lhQrItVoKt+okwXcMfoWW6QbKewhu1ENcB5 +wOTwKC14HkcBnITAwZp6G2gLOeyYerimC8fotqInnjWyG8/VDAODcne4awp26CeA +e54pJVE2jH9aSNgbRAghMhReUhdC9Ej4zUulpaWm3sb8+fMhX7hwIasHDx4M/I6m +pUuXUgGaRhRCQjXbF4BZSMaMGWPqbezatYvKrsOzZs2i0INrEPArpwKBBaPU5qGn +a9sv4JAjjresrCywXwhhkzphcBLCcD1kF1wyD9OnTzdKbUSZrrDldnWid4qRBk4C +gJw3bqEJqnPmzGETi38n0JTdeBa0hdztOkzThevotqIn7kgBhR7NQDAc/2CtxH/I +0xE2duDda2jobhj/tJDAN4gQQmQsuhojRE+GQa3/b7f8G7YNeRcsWFBeXo4Aa/ny +5fxo4CHI+Qd1hLOUg8AYC5LKykroo+BGqzDI2M7/J+cooBX/pG1tIpKzvvn/Eu8J +ahn7wgJGR4VA/FcJoowXMzN79myMGrGvDStRQBXCKH/XB/5Qld35wVRA2S4Qh4aV +dSc24nShwOW2blMHze31ExKxU4wXatYaYn1qQu5fo+4GZiz6xQ1sFQzKTh1GiqmD +hEdR8MwV31k8yg2DV3eusNywhoYRN4wQQoiP4CepEKJHgjALb3PESaYeA5EWhPYP +z9QBnhwArSD0/DkZBIb1gH+59/89m90B+/fmMAuePzbDsTAfGHa7FlCGxDME0GrO ++es1/zzvNrTOxBQDLIR5S1OTJ082dYcwZ1zCzPrltIapsBNIOOF2caNPF9Vc9+zM +2y6idxprF3B9gBd8mFDRAZtcWcIG6586ZgXu7grTdOEaua1QhsSdItqh3L97XTz7 +00ILwDPztGlHTWcwdZg0SkhZWVms9Udj8U8LCXNACCEyE12NEaIng5gJsVR9fb17 +mz7/9swYy1ahyUjRwmCLYWsUGMMhwDL1NmDZlJIEjvHigMcxQK8qKyujXGaBA4H3 +UAHY54UFBo5JwSllgO6BDkf/G38UYNOGy4STgCFwEqJPF1fWVeNlNNj3LFbCTqHf +eiZx7suyuKZYpnvdCl5KwiL6/ffDFcde8ijbPeDZDJxh+9ZjAULPJMMgG6Z2wwgh +RI9HaYwQ3RfEWHyiNyFxbt3xREgIJW04RQnCOLx6otUOghgXzgPEx/ZuGXZkQdV4 +34bnmWbqI8jzhH3ACj1pjH3AmmBaoLZ8+XK/BQKF6FGsB7qHAZrOHJgVeMbbQfyZ +GAbFVeMktGO67AbDloCOf6ISduqBiw5KSkq45egVm0QP0z3rCMJ2uEcTmw29m2OJ +wHuByrxOkhCmYf53ipV4DrGKVmxoF6j12OlQ6JlS6JtRteF/6F8IITIZpTFC9HAQ +oyP0tH8S5t/sKaSEeKrtA8b5dVV4RSgPoseUYYQ5FtFhDDYsAkaYCA9hJ2IU64Gx +aRwSKiRFxPG2e7oQQ/vTjIidYhoZZ8fWvBVPRM5cGhOCNIPRPMDeiJ7YRAQG0Tu2 +X5TJhybUsPr+zCQQ2gybE78Rq8mGcZpHnGchhBAuSmOE6L7Mdx40j497g5AHREgI +IhFCMZPhq//iA2OsjgDLCFIZv06ePBnRIfHfZkYQ9hnv27C3/ruEORYYFHqelODl +BTgWmMkgisUrJjliFOuBXaML05mPwOG0m4gLlNR02Q2GZUIVE+LJK6J0ipzBJqsw +yEUvKytz9xhmmF3APr8omTmPza49+J94CdvhHk3eHIhNGJa7WpBNQQcTEue944Gz +FzYnNj2zWE02jNM8cHUivkGEECJjURojRM+HfwtHyIhoCa+IlighDOL9QRiiTMSa +s2fPNvVEMJZFUIh4C1EsIloSFvYlhI4hJPVbsML4GQiGySDVHy4jnoYQzeGhESWJ +dY/VziYwSqaQtyR1ZLowCWH3NZlSG55OMYdogh2FFce6I1eJrXmrNY8bECLlcx2A +srsPUwKWGx2h4F9xD3xuCj54koc4UNN/BcmO1DNkaqIVG8bZMBSGrY4QQohAlMaE +8vTTT0/zYY4JkVZMnz4dERKCKsZViB0ZVxH+1RwRmOcP2AwEGa1GgaGYPzBN+Hfx +MOAY/fRbYMqEQUV3z4ONYlltBxwpfPPH+vz1SXaRKtCRJ0r2TELE6cKywreIT1kk +7NSmNKxasNP88TpmbJfzvWfIN9wrNl0JJgEewufol2IAVxwT4smRbDVQbt8RdsN4 +phQTRc0zNRtCCJGmKI0Jpaqqat26dSZ9mTZt9OjRqJpjQqQbCNcQPPE2Kk+0hNiX +wZx7kw9/EcUeigIDWRixYT2s2Ue92wF651/WYdOmBBgFfKOfPBoHqDGm9wTZ8BBg +HmyI2Q4wM/AQ/syYMcNmDjAb3b2kgGV7zx7AhDCjsL1EnC5mO35rLCM/oYQk7JT6 +WGLKAbcZWrHaxcANrkX8leWIkk1iMVi+HTAPnFKW7fxg4NztnHbK7VzZDeO+KWCH +c2WNCyGEiIr5s5jw8eCDD7rzs2bNGk8VvP7666b+4YcoUwh2797tkQAKUcBpLNai +tUwhQCGm1XoUoEC5Bx7iKwsQouCx41qgGyyjAKzbtlNAU8R6buqna7I5JNYO9a1X +hEc9rlplYi0AIwoZuOgg9q56BFJG5HAw5GfdAx/84OMHiLpMvQ0os5UHPqCCAqJG +aoZZsE66P4sRFtshOjQaMRhPB4JD9iKAG7m6VwYAhf6nMsK8BWVlZRyaH78dD2Fm +/XIOLfBP9XZKLVGmK2ylEPobjWQ6Ddw5aMipDtxvlrDB+meP44JZU4+74nCJXypN +H9xWdkTuYIFfM5DAd4rdA/7N4BlI2IbBWHhXHgnbG4FvECGEyFiUxoQSlsYgHJ84 +cWJeXt4111wDyVe+8hUqsErQ1iMBFKLASJ32KXzqqadQLioqglkYtH354SGoETSB +P3j9/Oc/TwUU4J61gDwBBdgMdJs+QAILKPzyl7+EEIcohDKaMP2gJsEhSliAAjQh +Z6cWHEXvNMKh0RTkRsMxhTI1UYBEdAYMvzzRvwsiORtjIZ4LC5XCYiyA+NiGiQB9 +MVVgDGoDx2SjNI9ZWPP7FhbUYlCMaAmjVcqNqA3K/QF0nPECGHfnDWDUbkgaRphZ +v5xDgxyjtjE0JjNsgaJMFyRuwgOzngmJ3ilngAoAymgFuV3NOLMRZ7Cm3kbENAYL +4Q6Ejrmt7Mx4kli/Zhzc8aLMUQDYxBSxjHnAQpgGDp7pwihQNcfa8E8LCXuDCCFE +ZqKQMRTG1qbipDGQ24j8ySefhJCXFBCC4xAKCM09BbcMfZjavXs3jAAIUYbQpkOA +feEVGFEbPIS+eDEEFu666y66AZcACkiKqEYFWoYOynSV+tBB7yjQLI5CDgVIUIDQ +2kcZmjbl8BRgH2q0Q7ktQ4H5FRxDJkOzdipQAChAn/kS3YZEdAYMRqNE2KJbERbZ +dypnpNM0xaYxpi6EEKJL0LMxSbN27dpp06bl5+ejPG/ePLy+8MILeH3jjTcgb9WI +ABpOioEyDOJ18eLFsSMfAZ1rr70WHT399NNG1AaajB49mhY2b9582223QQg1evKF +L3whptVaQHNaxiHqo0y32S+A2+gIr5DTAhWoD/sos8dW7dOB/Kc//anfebJu3To0 +h2V4cujQIdujB2QvVVVV0PGPVKSK1bFHrpHJMJkRQgghhEhrlMakAKQKiMJNJQKI +5n/1q18lDNmRACDRRA7w0EMPGVEbTKIsqH7lK19hGoOCPYr0BslDwuQK9p988kl0 +B4zIB+wEpjFoix4DDxH4AB0A35jthM0VujAlkWoqY7/ziIJ7H5EQQgghRPqiNCZp +kBUgD2HEz7gcEqQQeXl5CRMGglYPPvigDf3ZihdAgD/K9ycJkyZNghp8WLduHa+9 +IFt44403kB3xygxB8gBXIYd76IXXRiCn2/aiDQ6xC/hAIRWsfRrxjw4KgMqBTJw4 +kVeB0Bav6AX61dXVKBuNGPCTl31c50VKQPbCb9flpRilMUIIIYToGSiNSRrE+gjH +r7jiCkTed99995NPPnno0KGHH364oaEB8SJA6I9q2A1UxCYtANaeeuqpn/70p/n5 ++WiOmJ5yhP68ruLPE9A1gA/IExj6Q7kohifZgNpXvvIV2ESP11xzjXX7rrvuQsHq +3HjjjRgFTKGMQ1BAAcpoAuG1114LNbzCPQwNA6STGDIKnktDLkifkG4NHjwYY8Qr +5oQ+2wwKQGgNipRjHz3nw9ksCyGEEEKkO1kftn0/j/CA+BvYrABR/ubYYx6sMktB +dA5QRojPx9MJqvX19WiOEB8KkKAty1CONTpNiDK7QxX5A/uC0JOTAPaFVYMC1KwC +qsgQkA4xq3G9pWWW2co6wEMoALcvyukMqshekK2xDHjRBh1Bh63CuiOcKzSHQahZ +OyjjFcJAO0IIIYQQQoShNCYFIExnTG/qsbi/kybWpjGmHuOFF16AA8hMmBikHAwH +SZrNLlAAun4ihBBCCCHOFEpj0gwkKvPmzeP1DQskhw4dWrx4cX74/V1CCCGEEEL0 +GJTGCCGEEEIIIdIMPeIvhBBCCCGESDOUxoSSdTpGGsOIfLiPi6BspD6MRgwj8pFC +U/aZFhDHlHujmhH56CRT0DfSGO4hIYQQQggh/OimslAQT7tfz+UJu03pdOw3gIHY +93UF/85jF5uyXzgG4pjiN4mx3MWm+AVlLM+bNw+HwloJIUT7WLZsWXl5OV5NvY3B +gwcfPHjQVIQQIYwdO7aysnLhwoXz5883olRQUlJSX19fWlo6ZswYVGfPnr1ixYqy +srLJkydTQYg4KI0JBWmM+/VcZ4SysvLm5uapU6eYegbACVcaI4RIFQiSEButXr3a +1B2QwyxdunTWrFmmLoQIoZPSmGXLls2dO9dUYkyfPl2/ciYiopvKujUrV/5iyZJl +yGRMXQghRJIgSEIOM3nyZGQsH57OwYMHlcMIcQaZM2cO3pj2l5pRXb58OctCJERp +TLemqKgIr2Vl5axGB5nPtm0VtbV1pi6EEBlJeXn5ihUrxowZU1paigjJSIUQ3Qa8 +MQ8ePMi/LLgpjRAJURoTCt5OZ/aOMjB+fDFeN20qYzU6jzzy2KOPfufee79VXV1t +RGnC2himIoQQHYP3kiFOUmwkhBA9DKUx3ZqiolF4ra7ew2pE1q/fgCaTJ1/Z3Ny8 +ZIn3eVaRgSCSmz17dux74FpZtGhRfX29OeYAIQ4NGTKEaiigao7FoBHIKysrjSjG +ggUL2ITyZcuWoTx27FiUYYGHwNy5cz0NCdyzFgif8jSHY7g2XWCQTeyTD6x6nuSG +GsdlLVAtDHfgCaclDOq7ntjZcOch4fAxbxCiXztGMGPGDAhdT6xxq2YnJxDquKBT +d5+g7PZoafeE0EP/Itrhe1bNjghgvJ4tAaJ4Ul7eejV7+vTpmA3OJEGZh1zgGw7B +DRziDAMIPY5Z0F1JSQnVAB2wby47/5hJSgCmlEJTj6nRCHo0omhDg1c4lMI3hSXi +TvDDCfQQ6HwY8buGHXMgBKrZGQiEOi5Rxmv3QyB2gPTQP6Ueoq8dibIf7ORjOxmR +g7v5jSgumBO7tzF2980C521fMGs3vAvci/PWIJxSz0DsDLhvBxBx/kmU6RI9BF7F +E92W22+f8w//cIupRGPBgvu+/vV5LKBtTU0t5SIzWbp0qXm3O0yePNlexCelpaWB +f64eM2bMrl27qIMm/DKZWbNmUQLss5gLFy6khD1CM/CpA+hTjaCVOeDDGgTWpqm3 +Ad+obM2yCn1Wib2byFpgNQzbdVlZGYfsAUI7LWFQ03piJwrYtlGGb53HAtlVQ1zu +6rjG7VTYyQmEOpawR0TcVQAdmRAO1i4BcZ20c4VhBn5PkesMhplwxwLaCVP27BMO +LfAJZky4UYqBLgLnAUDOZXKH5l8pVgGXEtguIk5yyt8UJOwBbs9OCCTQbeJ+aISR +cBNyC8WBau7M+6GOJeJ47TIF4vHQvygeoq8diLjV3cnHFjLSNlwLRhSOf57RnBb8 +S+xxA2W/DoHcPe94PsSI/+1AIs4/6MhnlEg7Eu9mcWb59rcfRSpSVVVl6oloamqC +Plqh/PzzK1F+881tPJQWvB7DVESHsSdFxAc8f9gzovu5j0P2FGVPnzjRWiElAEdb +zbWFRGjIE4Ybo/AMTexNz2hITdi0ZzLrHtQoAcuXL7eaRtSxiM36DPwWALtzmxA7 +OpxBrX0UeEINNOXS2p9jlq2sHRB9+IARnl01WgurEtrHIVOPYVfH1GOgIYXWE7S1 +MaUdQgcnhL141NiW2I6oiRmwvdAZu3nwijIksGZ10NwKKQF0mK92ftDcjs5dEaoB +FLAQFNpw351eCqFmm8NmoCaCKkis59CnDo+yCjs8ClCgGwknmUvpSkhH3hSceeAO +wQpdC4HQc4+anRZ/bO1ie4m/CS1hwwft2PkJx8v5d9UIh2zlbBvolUuY8/61w35I +aqszb/f4yYfm2QQYaQjcsQCTTwma27YAU2E3Mzu1miD6W8M/pfSTeJYv4vxHf/uI +noHSmFCw49esWWMqZ45kUxFoQh+tbDm90phrYpiK6DD8Q6Pnsxuf+BDitGTqjoQn +J4s9n7mnc9qksg0ucfY1h51wAZpGFAM6PBfaUw5NeU5XwJ7MrNnoZ31WXYd5VrOv +RurAQ24TwmlBWGDqDmFNXKBgdeinZ6TRhw+4FtZ/npU5kzZQ5iEL5W6EATiTwNSd +OMmui4Xrazvt4ISwubUG6AzbAtuc/rjW7EJzTmgKagl3rDUeNjp3/qkMs+7MA7vn +WUWnrRZPT4EIg0gbiBN2RJfQJNbUzD8Pub5Fn2QUUHXnk9i5asebgjOPHWjqbYT1 +5YEG3Y4IhMA/XZbom9ASx6WIOx9EH6/7jnPhkK2cyxfolUuY8/61o0H4GXGrU9+z +f5hFcCaBkYZAZc/nkp09jyd2P/Mtk9Rbwz+lHALlHgeSmv92f0aJtEPPxnR3CgsL +8VpRUcGqn+bmZvcbyerq9O1k4iN4g7X9SxhhdmHPN4BPHUCNJ3ULTgY887k3auM8 +gfNBfX39jLbHFXBi4BnCA4M/C3Toib3NmuceeyK0eNzoCIsWLaqsrMQp0DMJUeDo +7Lnfhdb8N9CHQVOeCUlq+FgLjAJj8T+nQYnHOOCd6AknE6Ogpn+KaBOdcslSOCGA +96+jYCMkC+Mk158FCxbgFVuIw0lqxwKo+eeHEjt8C8x69jM1ocZ5gDW4BxhauQTO +NgfivzsfE4uBoIk70tROciBhbwp0jTHCH3/v0ITc7oSkmBv7VRA0ZyAbSPRNGAWa +ClwLl04ab2ppx1bHIbgN540o7qbyY3tkldi2KLieYBdxWdkKh5J6a7hwW8K+v210 +4oyUI+r420d0K5TGdHcKCgrw2tQU+tMxd9wxd8mSj4KA2tpavObm5rIq0hp8rPMJ +xYT4Q1vCM1lgjuFCtcAgg0LPuZyXCyhEkBF4zkBD/3mLngRGBhBivAABq3240z0T +A1TNgNuI/ygtYhQYRIF/oksW9u55/p4wqva4FwaHFv/0HGX4HAV0GKURnJWx+jZF +dGHz6KvvXy8r5JKlakII3IZ+/GnBYGkf0QmcwcajP9bnmNZpUOjZY4Fd2OYeZb9Z +dBpn68bWrZWSkhIGSZ55QO8YJoTQMaIYjO/xDnJnnm2jTzKq5nAb7X5T0DIUjKHT +4a7z9B6I+zQ5wEJjgHbtAqFZzLxfxwoDJz8QWou48zs+Xj9oZay0gTn3m/KrBT70 +j1f/ngQU+qeFu50BPQsYC4Rx5t8CTQ7cM3toS4l/VilhKw+t74oYYW8NC5pDDYX2 +fVZbaD9Vn1Gi+6M0prszenTrT8fY701ujsGyxf/7MPzBGSF4akl49oqjFijE6dPG +hYEBIohyygQ4t/ELbfCK0wzgySwlwBqGhjAxMAhISOCJ2SWhAkBIh6GhwNzPQ1LD +xyhwjsdpeEjbt5ZBnzlPYIzIE3bCYI6ErZcrT8mEEPgG52E8etSCcI2jBuwo0GeP +kMMPG13g5IQpe4D/seioNTwiceJsLhB0bI6KhhgO0htebbCkcJIDgQ+w0HlvikDQ +KuxPLS5hMx9xRSxJ7fz4dHC2LZh2pCh2A0eHDgTOQNi08O9KNo1hp2Ef1B7seKOv +BSXuRGGw0d8aBDqwgE+DDq5awvVKqCDSC6Ux3R1eV+F3Lq9a9fIdd8ytqkJSU/34 +40+uX79h27bWm810I1lPBaEGL9AnxP+XeJeEH9z+85CFQs+pC6G2PR+HfeFmlLMF +TrSI6niGY4xO/PdZEZzhzIDbsLeS+4FZ/hnYEyZGh6NGAGo68xGnd8vSpUs5HAQx +nj8EJjt8TDtO9ohRDh48yKAEymVlZWgLO/4IqX3hiwd3A6RkQggGglcsTfyoxb4F +MFJU0YqDoidxNh4V3EIgnhUhUbYu0k6bcMLJ2Lq1rkXgbKMX/pUdU2cXl4PCHpjt +fB0zSHaSU/6mwHYyhoKI/1FDPI8fMIXDSBNmMlE2YRSS2vkdH68fz6LwTQo51tod +Y5S146gDZyZsWtAXhFhrKjCfiTgQay2wR+CXe9xI6q1B8AbhtmzfbLvQjZR8Rom0 +QGlM9wKZySOPPOa53lJUNAqS2to6XnWJ6XynvPy12tpaqxnnZy4HDNANZpkLz52e +WA1nHf6pjAE0YChpqy4UurEmJG4MCuOBFxAg95/w6Am9AmyIUxfOLjjPwSAJO4Mm +BZ3EGdSeX5MlzrQkBc7fCOwwdiQb7tCSGj5iEYwIU8eg0EhjkwkJCoiQ3IWGEXjO +gMaIQrDD9PdrhdRJ1YQgysRwYA2DNaJEQJPbhr3H8cRVAG4rDwzvAHUs7jQSTIK7 +ddEQBjGxWDWsHfZYbN1aPQxcOy4N9gD/TG5hK66sEaVukgOJ/6awXQeOot1g1AxP +7YT7idO1Fdo1jQ+U0QRr0ZGdn1rgDB8Ao28URiTOfqAwcFo44cgNMOfoFB9BCWeD +QI2a/j+LcJb8c+X+ZSHZtwbh3ZUd+ay2xJku0SNRGtO9WLdufUXF9lWrXjb1GLwg +gw8FPuiPNObWW2+JHfkoe/E8PMOf/ye8wQwpkMesyAT4BzDPH0EZTOCEwZgMMLqC +mudMg5MBld0/pPGUg7Y46/DcjHDcH6DAlKdfRHKUWGs82XhiO+Bp2A7gD06ucLIj +f96z0+KPaxGYIg/kVEQBpgDsuClf9OFjMtkXJ9wDztxYC+i40TCN+I37sSGOv196 +C/vcKrTW8QmxUQurHrB2MBX/AQ/rScIdS00rd+Ho7PAtfrOeeeDwUWbVgi3HNXVB +WwjhBj3xgEmAWepQQrWOT7KfhG8KOxUcrwvcQ9fA71VKiL4JE0ILgbPtIanxerZE +l2H3Q8Kt7sK5wnLH0QmDPXreL6jSgTA5WyX11iCwEOWzOuL8d97bR3RTkC6LQDA5 +Xf+Fy1VVVd/+9qO33z6nqanJiNp+Ooa/g/mjHy3lb8ig/PWvz4OQcn7DslVmmV+4 +zDK/uJnl7oy+cDm12Avo+HDntz+VRv7dGPtXfwgpAfNjfz6HHJY9EtoHbqhte4FZ +2IHEtcZTHV6tNXTqnv+sM7TptiV2gFaTVWKFgEGz3wKgY+jC1Ntwp8UeRY88UwLr +diDUcRvSmm0Vffg8wWOqWQWMS9xFZENYQJmeA7soFrs6ph6DkwPQESVoaIdph9DB +CbG9APhvpDEopE3bC3T4N11gQxx3gKjCEztLgTsWcIsCO4Hw0wZ2rs/cCQCT6e/a +DhkdUWLnH/7YXoAdHYyjCq9sL/CWOqwCWkOPrEafZBylGqsWdgra8aZwd4LbEV2y +2yMMTqB1m9h1cTewn4ib0BI4fM4eQMGI2qA+MPUYEcdrF8WuuIVDtnIa9HiFOefb +0zoW6Dzwr53tGspWGLjV6YmdKCrwlZ2iOcqACmFYHzD5tiGNE8ipad2wExX9rQHs +exDYoQHOoatpJyHh/LvTZacCI4r4GSXSDqUxoTz44IO7d+82lS7E/eEXsmDBffjH +jMWmN8xhoMm8BekN5ajiH8s0xSZuetOdeSqGqYhUYE/eLjZmsiBo46e/B5wMbDxn +z4LuuQSnDZ5I7LmNPcIaz9wu0HTPIvac58GeHW1H0c/6rAJPyMVTo98CoP/2nOcS +Ni0gUN/Fr0Yf7Ok54vDhA8pwkiEFYQTgLgRXB2rsJQqub5guIz0dT+jZkQlxHfME +ExRaC2EzY/cYiLJjLW7A5OIGT4A7IVDZnWrg39sADTlGOEY1Bk/+ZQKmHsOzmhEn +GWVI4LOpt9HBN0XYTsCQ3R0YCCcwEBxKGEFG3ITEP3wOJwruNMYfr10v4tkwgEO2 +axffB2xsqkVfOxBxq9MTOzQbuNt3TeDeC4TueaAPfk88GyPiWwPYN5r7vgbUxFGU +k51/EPHtI3oGSmO6I0g53IyFWU1NTS2rFmYmP/3pMyggz6GQEpbdn7+Egk1vRKaB +j357SgPuJ74LTkXuORinB1cTR3nC8JxygD3TUN89Q9u/w+G8Etgvzuv2ZAagz1iH +sYXtK/pZn1V05wm5ODS/BcBxhZ3hOC3ueRFO+gNlP1T2mPX0FWX4DAs8dtjKM6Vh +AVkYHpseZ2DNHzSAdk8IlwB43AaUu/6ga3c4mAR/q/g71gMOuQEWjPt9tquD3q0y +VsE/D56uoUzn7YaEcSZjni0HU1Qw9RhshSnl6oMok4weIffYBx1/U8Bz9xMjcPID +4QT6QXNP12FE3ITAP3x3ReLj7jQQZ7x2vYCnFeGQrX6YD56BRF87EmWr0xPrJLef +K7FjYTU+ULYLgQL2nh0pDNqdiW3pWVmPq4FvDWpa+3bbEzbHUZSTnX9CH9rxGSXS +DqUx3ZF169YzdUG5qqoK5U2bAt5+TGOghrwFBaQ9UEOBd50BZD6o4igOoWCv2AjR +qeBkg9OG/wwtugYGAZ4wyAN1AsOCTMYTCIr0Qju/UwlMGIQ4s+gR/+7I1KlTCgoK +Vq36XXNz87p1G3Jzc0tKAq7S8jn+2to6FsrKyleterm4+BL7ozGFhQWorl+/AQkM +qjBLuRBCCCGEEGmN0phQpk2btnnzZlPpcm6++SbkMM8//wskIddf/1kjPZ2pU6fi +tbq6GkkOUh0oV1RsnznzJh4l3/zm3cxe7rlnnvv1Zd2WeTFMRQghhBBCiCCUxoSy +bt26Q4cOmUqXg9yjqGjUyy//rrj4Ek9mYiksLJg580ZmKchk6urqUPXkKkhvbr31 +FiQzgddzuiFIHc9g9iiEEEIIIdKCrA/bHv4THrKystasWTNt2jRT73Jiv3dZmxaX +UFIIJ3zt2rWsinRk2bJlc+fOHRP7YiIjEiIdGDt2bGXsdyrdbxcQQgC+OxbGftHS +iIQ40yiNCeWMpzGZidIYIYQQQgiREN1UFo9rr7229Vd8YxhRDCPy8dBDDxmNs85C +2Uh9GI0YRuQjhabcTCyOKTdzMCIfnWQK+kaalbVu3TojFUIIIYQQIgRdjQnFc0HA +E3ab0umMjsFyVQyWPXSxqfz8/EmTJrEcxxR0oMlyF5s6dOiQ+zyMe0gIIYQQQgg/ +SmOEEEIIIYQQaYZuKhNCCCGEEEKkGUpjhBBCCCGEEGmG0hghMpGxY8dmZWUtWrTI +1IUQQggh0gqlMUIIIYQQQog0Q2mMEEIIIYQQIs1QGiOEEEIIIYRIM5TGCCGEEEII +IdIMpTFC9HxWrFhRUlKSFWPGjBnl5eXmwFlnLVu2jI/7g7lz59bX15sDDmg+e/Zs +6gCUV69ebY61QSOwBuPogpoQQmI02rDdwSUjcoAPPAqMqI1FixbZUYAhQ4ZAYh1G +2RwIgWoAzi9YsMBIY2BEGKM5HA67wOhQdi2gXFlZSR3iarqOQRLYEVyyM8xxQWin +lDpCCCGEOI0PhRA9moULF5p3exuDY6AwZswYSiyQ7Nq1y7SMMWvWLHPsdGDWaMSg +qfnz5/Ooy/Tp041SDLfTsrIyI22DjhEj+vBDuOR3lUB+8OBB6PiH6YGm4qh5RuSH +bTEc/5zAbXcs1Jw8eXKg256Oli5dag44oAu2xVGjJ4QQQggHpTFC9GQQW9uwmJLl +y5e7qQKCcqYBpaWljJutJrBB/5w5cyhBRmGDeDfCtvE6CuiCQrSi0A3cqYkQ3yMH +aAihdc9I2+ygIZykBD4HGidMDKBv6m3AeTaxwwHolC6hXyMKwc4GsBbsvOGVMwlc +Teue1XQ7si5hIZhAwoibJimNEUIIIQJRGiNET4axvud6iP3zP+JpG3kDxNmU23ia +GYU/T2Cc7eYJNkBnWwuvz7iBOzUZ6COZMdIY9NYG8RTCDVZtDmNhLuTmJCQsjaEz +ntkATJ+Ax3kPNjnxTAhacaJsymE1PUmIvyMO2TMPIDBXFEIIIYRFz8YI0ZPhkxiM +lS02REaB8TdBfM/EgK1Wr17NJ088zQHzgcrKSvcxGwBNZikWasKORxP9oi8I3adK +2K91j9gUCO4ZURuu81Fg+mGzNUtSdqDsmRAMmT57Hhnya3J6gR114AKBwNvzhBBC +CGFRGiNEjwXJA/MQT2qB8JoSjxxQwlYMtRF5+6N8K/QkJzZMt9i+PJqAaYl95B0F +9AuhvzuXRW2UlJQwbfA8Xh8R+EM7CxYs4LP4IIqpwAkJHGP8gQB0x6n2z1tgL0II +IYSwKI0RosfCEBmEBcR+OSW2IYjeFoQpB8IrGDaNYU7iv+RC7DeDoUD8eVEU0Au/ +7gyvtINMxhyLhj/3A0kN3E/HJ1MIIYTINJTGhLJ27dqHfJhj6UZVVRWcnzZtGqI3 +IxIZgI2D3bTExS+nxA2g47f1hNphyoHwggOyEbYKu70KIOWwycb8+fMXxigrKwvL +ecJAFzPavm8avdMO8N9mFofAKzaBsxGdwHlLajKFEEKITENpTChIYx5++GG8khde +eAFVcyyt2Lx586RJkxYvXozXNWvWGKnIABBVM7D2PLMBGCL7A2VqspW9UcqvZoWe +SxP+EB9qFPrvmwJMWpYtWxbnjjIcQneQ8xuNkXUgkwEw6HcsPsyF0CnswBrtgKTs +MAvyQGHghZo4QJ/j9du0MyyEEEKIQJTGJMAkMWvXIg0wohiHDh2C0FRSRFVVFcya +Sur4whe+gAQGxjGEadOmGWm7aMeQ0a+/VeDspXw+BfDcuEWYM7BACbFytrJJhf8X +GJkPIAr3JCfQ9ATfYZqEQuRO9CTw6orNgjwW0Cowo4gD9T1fIQCS+olJDNCjDw/p +v99yQtjE70BSLgkhhBCZSOsXAIkgHnzwQXd+eB2D5bvuuis2eWfl5eU99dRTFF5z +zTUUArT1SACFKMAUCmhoha+//npRUVFM66yvfOUrbl8e3MspsO+5ukLLLrAM+ZNP +Pjlx4kQU4DmjTPYLIP/85z+PV1iz+vCNwycou0OGDjT9XZtSG5BgLCxjdGyFsp0W +a8pvXKSKXW0/S4Jwmd+tbH+9hEBOzeVtvyfDixVkYdsXB1uh+6sm7ncBW5tINuwP +Qdo7xPyaVsJO+Wo9bG3T9hawX1IMZyiB2nzni7yQ/FBugXHI0ZGpt8FECK/2+45h +3M2O/N/p7GJnA1hnYIEjgh1KADX9DtjlsB1ZCUZBrzA6O29AX7gshBBCBKI0JhTG +8abipDFICVBgwsD4e/fu3SgjE2BugDDdU3DLbItcAiE7yhCyjFwCBZgCti8/nkNu +lZZZtlABvqFAz5GiILtAXoGj6IsSZi/MdpjPwDEWCBSgjALTHhRs1yywa7cMazYt +gSm2wlEA47AGH2ANQr9xkUIY03twkwcXxOLMJSxuSO2CRMJoxGAoH3g5xUb8xJPG +2KTIJlSeNAa4mYYFfTFbwCiMXhthaYzNiDzYFM7jqgd2B2c4BBdIbGoEoqcxIHCB +7LTHz6yEEEKIjEU3lSXNCy+8gFCbd2fxoX9I8PrGG29MmjSpVSMCaDh69GgE9yiv +Xbu2oaFh8eLF+fn5EALqxL6WKQs2N2/eTEm74e1k8+bNQ+ZQVVV12223VVdXwyw8 +R6aBKnpBanH33XfjKIfjAb7RyKEYRhoX2EErvHKW7D1j6IjDxysmDZJ2GBfRQUCM +UNgmGCiUlZUxakcqghjaJjOoQtOT20ABUb6bn9AgI3UPSEVwyGYdrLpXTvzYNCYw +BSKe7mAfXkHItsj/I95dBn3PWOAbUgvIaSqKHcwPJtCmGajCNxjx5zYR4XzSAQCD +GB1gVQghhBCBKI1pDwi73QIib0T/tpoQKH/ve99D4G6reLXZiwVZJq+WfOELX6Ck +3VjH2AsSBuQzcODpp5+2xnkocAgYIJ+uQSLE/C0idlBoxWQG2GTPzl77jIvoIHBH +oMw/XaDgXtxADG0vvyAc9+QwBBG2bQ4QYcdJOXDI3lTmyRkIr1rYNADGqWwlaEIJ +qwBeuRd/bBZhL3d4LtfgKIT20oeLZywYMtMPDArVsMs1Hphp0ILnDjdCb/0OWIc9 +04IquuYh3lTGmz9B4IoIIYQQQmlM0iA0f+GFF3jRAGkAXpEJrF27Ni8vL2IUjoDe +Xs8BLNisxgV94Wic7IiXU0ylDffqDTIEKPACC3xet24drSFngPCNN95AAVVmEXfd +dRd0bL5hgcGGhgamGdY4miMXYjkQOE+zMAjYEUCZRjB7sOAaZ0YnROYwduzYrNiP +4Zh6G3zEHzmMJ0MTQgghBFEakzSIwvGK9OC222776le/yqfYGaMjEGegjwDdhvt+ +kCq4SQtMwcjdd9+NArDhPkyhClPs0Q8Ofe9734Mbph4DwiuuuMLmA0haYPDhhx/m +nWO8hQxyvCJ5mDhxIoSsIuuAV+gLNj1fGoZDaIhsDQWbv/m79gBTUIZ9DsQOGUJK +fvWrX0HoGlcaIzINXpZZFIMSgDITG3uFSgghhBAesj507twQLgipAQJuVhF8IzNh +FWXE8YzReSnm2muv5dPtBNX6+no0RxaB6BwStGUZyigwebBClF944QVUUcYhvKJq +w/1Wi224brimWEUZEvjmSTBwiMqQ4xUSGEG289RTT0FCm+gUUBk6gAOMGWidDWsW +cgAFHkUZzdm1W+YhThQcpv2srCxOFHrB1NGCx7jtVHQeY8eOraysXBj7DRYj6hg0 +uHTp0h4ceTO7QOJRmszPZcYHkzZjxgx+qbSH1HYkhBBC9DCUxqQARuSIv0099nR+ +d55YOMx8BimHEXUVTGNscijOFEpj2kFnpDEElpctW2aTGXQxa9YsXYoRQggh4qA0 +JgUggamqqnKvISBP6M6ROn1bHPtdf0q6DHR9RvoVQgghhBA9CaUxmQjyLt70JYQQ +QgghRDqiNEYIIYQQQgiRZiiNCcVzV9ha58u7wm4Yuy0Gy0/HYNlDF5ua5HxLWBxT +7r1eXWxq8+bN9vvZgHtICCGEEEIIP/rC5VDWrVvnPrUvugakNF3/xQNCCCGEECK9 +0NWYUPSdWmcETrh7lUkIIYQQQggPuhrTQ2hubi4rK6+trTN1IYQQQgghei5KY3oI +69atf+KJxbW1taYuhBBCCCFEz0VpTChr1qyxz6l3f3rMdZjFMUxFCCGEEEKIIJTG +hDJt2rQ0+nGV6upqU0pzkDqmUfYohBBCCCHOCEpjegjNzc14raioYFUIIYQQQoge +jNKYHkJ19R5TEkIIIYQQoqejNCaUadOmpd0PmGzblvZXY+bFMBUhhBBCCCGCUBoT +Sjr+/GUPeNBfP38phBBCCCESojSmR1FXV8eHZIQQQgghhOjBKI1JD6qrq7dtq4h/ +saWoaBRee8B9ZUIIIYQQQsRHaUx3p7m5+ZFHHnv88cXPPPPsvfd+K84XKxcVFeFV +aYwQQgghhOjxKI3p7vzoR0uRySxc+Nh3v/tYUdGoVat+Zw4EUVBQUFZWbipCCCGE +EEL0UJTGdGuqq6vLy1+78845ubm5qBYWFtbW1vKQB2Q4OFRSMrmurq7H/KK/EEII +IYQQgSiN6dasW7cB+QnvFisrK1+/fkN19R688qhLQUEBDo0fX4yyfgRTCCGEEEL0 +bJTGhHLNNdfk5+ebyhmiurq6pGQyyyggV0FhyZJl/jvHkMA0Nzfzok1VVTUU0vSa +zKQYpiKEEEIIIUQQWR9++KEpiu7HI488ds01U6dOncIqsprc3AErV/5i27aK73// +SQoJkpa77robmkhg+J3LRUWjvvvdx3hUCCGEEEKInkTvhx56yBRF94P3j02cOIHV +/Pz8AQNyCwsLXnzxN8XFxYWFhZQDyJHblJe/lpeXxzSmoaEBkurqPT/5yVOQ8H4z +IYQQQgghegC6qaxbU1RUhEyGaYmFj8rU1bXeM3bvvd/64he/HBO33leGV8qLiy/B +P+Q5ECLD0deXCSGEEEKInoTSmFAeeuihqqoqUzlDXH/9dXj92c+eZdUlNzcX8urq +PayuWvXyqlW/47MxBQUFaATzwUoAAFMYSURBVPjAA9+68845JSWTp06dAjU+KtP9 +f1Xm6RimIoQQQgghRBB6NiaUrKysNWvWTJs2zdTPEGVl5UuWLEM2cuuttzBLQUJy +773f+pd/uf+ll1YVFY165pnniosvaW5uRtLC28yoZsGhb3zjbliobmXPPffMs18b +0A3hhK9du5ZVIYQQQggh/CiNCaWbpDEAyQcvvCD9KCxs/YHLmTNvsqkIspra2tr4 +j74wF2J6g3RIaYwQQgghhEhrlMaE0n3SGMJ0BYWe/bC+0hghhBBCCJEQpTGhII2Z +OHGi/ekYN7AOy21ui8FynGc8utjUpEmTFi9ezHIcU9CxP9jSxaY2b948b948W8Yh +pTFCCCGEECIOSmNC8XwVtVsN+5ZqhOw2akcgHhaLd7Gp0aNH24wojinoQJPlLjZV +VVXlZkTuISGEEEIIIfwojRFCCCGEEEKkGfrCZSGEEEIIIUSaoTRGCCGEEEIIkWYo +jRFCCCGEEEKkGUpjhBBCCCGEEGmG0hghhBBCCCFEmqE0RgghhBBCCJFmKI0RQggh +hBBCpBlKY4QQQgghhBBphtIYIYQQQgghRJqhNEYIIYQQQgiRZiiNEUIIIYQQQqQZ +SmOEEEIIIYQQaYbSGCGEEEIIIUSaoTRGCCGEEEIIkWYojRFCCCGEEEKkGUpjhBBC +CCGEEGmG0hghhBBCCCFEmqE0RgghhBBCCJFmKI0RQgghhBBCpBlKY4QQQgghhBBp +htIYIYQQQgghRJqhNEYIIYQQQgiRZiiNEUIIIYQQQqQZSmOEEEIIIYQQaYbSGCGE +EEIIIUSaoTRGCCGEEEIIkWYojRFCCCGEEEKkGUpjhBBCCCGEEGmG0hghhBBCCCFE +mqE0RgghhBBCCJFmKI0RQgghhBBCpBlKY4QQQgghhBBphtIYIYQQQgghRJqhNEYI +IYQQQgiRZiiNEUIIIYQQQqQZSmOEEEIIIYQQaYbSGCGEEEIIIUSaoTRGCCGEEEII +kWYojRFCCCGEEEKkGUpjhBBCCCGEEGmG0hghhBBCCCFEmqE0RgghhBBCCJFmKI0R +QgghhBBCpBlKY4QQQgghhBBphtIYIYQQQgghRJqhNEYIIYQQQgiRZiiNEUIIIYQQ +QqQZSmOEEEIIIYQQaYbSGCGEEEIIIUSaoTRGCCGEEEIIkWYojRFCCCGEEEKkGUpj +hBBCCCGEEGmG0hghhBBCCCFEmqE0RgghhBBCCJFmKI0RQgghhBBCpBlKY4QQQggh +hBBphtIYIYQQQgghRJqhNEYIIYQQQgiRZiiNEUIIIYQQQqQZSmOEEEIIIYQQaYbS +GCGEEEIIIUSaoTRGCCGEEEIIkWYojRFCCCGEEEKkGUpjhBBCCCGEEGmG0hghhBBC +CCFEmqE0RgghhBBCCJFmKI0RQgghhBBCpBlKY4QQQgghhBBphtIYIYQQQgghRJqR +9eGHH5piD6WsrLy6utpURA/l+uuvy83NNRUhhBBCCNHT6eFpzLZtFY8++h1TET2X +oqJR3/3uY6YihBBCCCF6Oj38prKKigpTEj2a6uo9piSEEEIIITIAPRsjhBBCCCGE +SDN6+E1lK1f+YuXKX7JcXHzJ+PHFLIuegV1c8POfP2NKQgghhBCip5NBaczMmTfO +nHnTkSNHTpw4QQnJiXHy5MnGxsasrCwjDad3794DBw40FXFG+eIXv2xKSmOEEEII +ITKJzLqp7PDhw++99x4yN5fKykocOnDggKmfDtIbU2pj3759LS0tNCiEEEIIIYTo +eno/9NBDptgTqWhlO8vjxxePHj06Ozs7Jyfn5z//+Y9+9KOhQ4dedNFFyEny8/Px +evbZZ/ft23fLli1bt24dPHjwkCFD+vTp07t3b6QuR48eRQoEfUr69euHAs36OXXq +1P/7f//vT3/606BBg/Da2Nj49ttv19TUIP+B2R07dhw7dmzbtm1VVVVQ/uMf/4h+ +33nnnUMxNm7cuGvXrgsvvPD111/fvn07WmVlZUF59+7ddXV1OATnX331VSRdcPjd +d9+FhTfffHPv3r2Q//rXv77ssstiLvRkPvjgA8zqBRdcgLJ7U9nMmTeZkhBCCCGE +6Olk1tUYpATHjx8/ceLEokWL5s6du2TJElZxCLkKEgMkGMglkBWgTJDAQAFHm5qa +KEGT+PeeIY0pLCwcOHAgou3+/fvj9aqrrnr++ef/8z//c/bs2evWrVu6dCkykJ/+ +9Ke/+tWvkGatWbMG2QvSJ1T/8Ic/PP300zDS0NBQWVk5ceLEJ598EuVzzz332Wef +PXny5GuvvQaD0LnvvvveeOON733ve6WlpYsXL0bznTt30oGeDXLIq6++2lSEEEII +IURGknHfVIZMAHnIypUrL7744kcffRRpCbIOyJGoQI7qJz/5yS9+8YsFBQVIaZjk +4FDfvn1HjBhhJTQVRp8+fZBsVFdXjxs37n//7//NB2nQcPDgwUhdkOFccMEFyEzO +Oeec7Oxs5B67du1atmwZXi+77LJPfOITN954I+0gjfnBD35w0003bd269T/+4z+G +Dh36ne98B3nOvn37BgwY8NWvfhU6V1555ejRo/EKevXKiNXs3bs3lsNUhBBCCCFE +RpJZj/hff/1127Zty8vLs6POyspqbGycPHny+++/f+TIEQpx1F5vQdqDuNkVIgOZ +OHFilEh648aNOTk5EyZMMPVwXnnllSFDhiCzMvWzznrrrbfcKmhqajp69OjevXsn +TZpkRA7vvPNOTU0NkhlTzwz0iL8QQgghRGaScd9UhvG6Q0aZWQpAxhL/bjECnShq +ogtQGiOEEEIIkZlk3E1lyEB6OdgcBqBspHFRDiOEEEIIIcSZJePSmE2bNu3atctU +ovHKK6/88Y9/TPhITFJ8+OGH27dvP3LkyN69e40oFcDsmjVrfv/73x8+fNiIOsb6 +9eth8Pjx46YuhBBCCCFENyDjbip77rnnLr744s2bN0+dOvUvf/lLbm7u+eefP2jQ +oN27d19wwQWvvfbaRRdd9LGPfYxNyFNPPXXFFVccOnSoubn5nHPOgSb0e/XqVVVV +hbb9+/fHoZMnTw4bNuyNN9648cYb6+vr9+zZU1RUBIV9+/ZBDiN9+vT57Gc/S4Pk +5ZdfRsPBgwdDYePGjePGjUPuAWt9+/Y9cOBAv3794MZLL71UWFiYnZ397rvvnn32 +2ShXVlaOGjWKq4YsCBL3a7sg/93vfnfuuefW1tZmZWUhU5owYcIHH3yAzA1DeP/9 +92F2wIABOAr/oQ+d4cOHw/n33nsP9iH53Oc+F7Nk+D//5//ADTgGHc7A7NmzzbFu +gG4qE0IIIYTITDLrd2PwD4F4QUHByJEjUUAQP3DgQIT1R48eRQE5ABgyZAgiezYh +Bw8eRPR/6tQpHEXWcfz4cVhAvgGQBfE7zdAKiQHyByQ2CPrxun//ftgfPXr02LFj +kW8gjUHZWIyBdCUvL2/SpEl79+6F/iWXXAIJukBfaIj8JD8/H3L6VlJSArMjRoxA +DtPS0oJO0R00AXSMxRgYF5yBzokTJ2CkpqYGw4Gf8A35DBRs5obeYRA9ch6GDh0K +a5gZ2iF1dXWw1tTUBDs4igwQo8Z4UTYaZxT9bowQQgghRGaScVdjWBY9A12NEUII +IYTITDLu2RghhBBCCCFEuqM0RgghhBBCCJFmZNZNZZ/73N+VlZW5X7LcGcD+VVdd +deDAAZT5JH10jh49Onz4cCzKwYMH+/TpY6RnnTV48GAYzIp91zOOwiyOZmdn19XV +9e/fnzrJAmv5+fn79u2DHUpOnTqVm5vbboNRaGpq+uCDD6IvAVwaOnTo4cOHjx07 +ZicTzQcNGoSCbioTQgghhMhMMiuNmT79M7/5zW9ycnIowdgbGxsLCgqOHz+OyBhV +gAJCZ0TMKJ88eRJqKFPCVgAJACQsQx9qqDLHACjPmjWrqqpq5MiRVGtpadm+ffvE +iRNhxKYigDahg3Jry9jXCSBqh0E02bhxI7KaSy+9FBJE7dXV1QMHDqysrCwtLb3m +mmsuu+wymIIaUhHkBgMGDEDziooK6MOadQbYKp2xfaEV2r7zzjtwg18JcMEFF0CY +l5dHhc6gtrYWo2Aa895778GlUaNGoQyvULaTwxQOLjU3NzPXGjJkyIsvvojFuvrq +q+Gk0hghhBBCiEwms76pbMyYMVu3bkUZ8THZu3cvEgzE8Tt37qyrq0M0v2PHjoaG +hl27diGjQLR97NgxKJx99tl79uyBAqLwmpqad99994MPPkCygTLyCoTdSI2QC9Em +wvHLL7/80KFDiNdZhRHYR2Kze/duWENojlekKEhU4A/SBjSHERiEkAkJClDGK4wg +ZIcCvIIC2o4fPx7RfHZ2NtyG5MiRIzjE/GfNmjXwHJ7gddu2bZAjVUC/b7/9dnl5 +OTqCMkzBJYC2NAtn0ByeXHjhhegawtb56hzgP3MYOP/rX/8aE4uu9+/fjyk955xz +4BIcw9ElS5bAf0wjpq5///7IW5DY9O3b9/e///0nP/lJDJBO6pvKhBBCCCEyk4x7 +NgZhNGJigpg+KyurX79+SE4QIkOC3IPfL5yfn4904q233qqvr0duA02E10gqUGhs +bERycvjwYRxFGoPcAJlMdXW1tQx99gU1BNwA0Tl//gXKw4cPR+CO5ASJEGJx5CRo +C+PUZBDPlIYF5ioxe2ch3N+yZQsctt93DH1096c//QlDQGHixIkI+lFAqoARIUVB +F6gOGzbssssue/311+EkO0J6AOO0gJHCVTiGvmi2U+G0wIFx48bBPXiORAuOQWJ9 +mzVr1g033ADPOSFsBYdvu+02zBs9F0IIIYQQGUtm3VR23XWf/fd//3f3hquUg/lE +rjJnzhwkJ0gkku0L2dGFF14II3v37uVlGV6gGDFixJ49e3gFBgE9zPbp04fXiHiP +lk11ogNTSF22b98Oh43orLPQKe/X6iQOHDiAjMV97AfAEwwZmLoDxn7eeechXURu +w8s4ABNbUFCAgm4qE0IIIYTITDLud2MQDbcj4k8KBNkM0xsbG5NNY/r168cH7hHr +Wz+t0BrEqiHfQFh/9OjR48ePx7SSJicnB66i+QcffGDNIilK1udkQapmShGAh7x/ +zG3Vv39/zrDSGCGEEEKIzCTj0hhEwxgyInXkALm5uTwk0hSlMUIIIYQQmUlmPRvD +J/IbGxubm5vffPNNSLZv397S0nL8+HE+NIIk5+TJk3z6AoUTJ04cO3YMr7w2glco +MxGiQSGEEEIIIUTXk1lXYz796U8hCdm1a9e11167bdu2K6644r/+678OHDiAvCU/ +Px9TcfTo0fr6+n79+k2dOvX111/fv3//xz72MaQ6SGAGDRpUWFgICY6OGjVq0qRJ +NCvOCE1NTb179/4f/+N/mrquxgghhBBCZBIZ901lp06d+uxnP9sr9vstx48fZ3Iy +cuTIc845B8nJxRdfPG7cuPHjx+fm5g4fPrykpARHL7300mHDhk2cOLGhoaGoqKi4 +uPjIkSPGnDhDDBgwgM/MCCGEEEKIDCSzrsb8t/92bWVlZd++fTHqw4cPX3311Twk +0hQ9GyOEEEIIkZlk1tWYwYMHT548ecKECRMnTlQOI4QQQgghRJqScTeVCSGEEEII +IdKdzEpjWlpa3nzzzcrKyubmZn7/GF4PHjxoy++9997x48ePHDly9OhRVE+ePIkC +Gh47duzw4cNovn//fhytr6+H/NSpUxDiEGhsbITkgw8+wNFDhw6h4fvvvw9JQ0MD +DIJ3330XR6GJMozAAgqwAB22hXEoUKepqQmvaAtTBw4cgALkHIIQQgghhBAis56N +ueGGz7300kuDBg2qrq7u378/EpUBAwYghcjOzkaVucTYsWOR5/DH8nF05MiRV1xx +xcqVK/v27TtkyBBkO/xuAOQVo0aNOvvss5H5IN/o3bs3Ephhw4bhaF1d3aWXXsqM +CP3iEIygipwHXffr1w8pzfDhw3fu3PmlL32ppqbmnXfeQVukLiNGjHj77bdzcnKg +g3UZPHgw8hw4tmfPnr//+7+HMxyIsOjZGCGEEEKIzCSz0pgvfOHzyCWQgSBdQbaA +lIPXQwYOHIikBanLwYMHUYaQPxKP9Aaa55577t69e3EU2QV/OB9l6CD3QI6B9AMK +KEMfcswnspehQ4fiFekQ0hUYAbB/7NgxpD2NjY1IewoLCyFBorJt2zb0iBQFbZEj +IVlCAaZYQHcHDhyAMwUFBUpj/HTPNGbRokULFiwwldNZunTpnDlzTCVJsJ1WrFjh +Wl64cOGsWbPGjBlj6kKIMwHfm8uWLUPBiNrAm3T+/PmmIoQQIqVk3K/4syx6Bt0z +jUGmgUzGVE6n3WnM6tWrZ8yYYSqnU1paOn36dFMRQnQtSGBmz55tKqcza9YsvOUH +Dx5s6kIIIVJKZqUxn/vc3+3YsWPQoEGUCNLS0pKdnY0CNkP//v2HDx9Oefene6Yx +JSUl5eXly5cvRxBjRB2jsrISNuvr68eMGcMrMBAisUG+hI4QJJWVlemajBBdD96A +eG+iMH/+/Dlz5uhtKIQQXUnG/W4Mxrt///5hw4b169fv1KlTJ06cgIR3i+G1qakp +JycHEtDY2IiEp1fbD2UC3jOGVwBlSKCPAowgDYAFWkMmACE7TQsOHz48cOBAlhsa +GvLy8o4cObJ3797Ro0djLJR3T7phGoNkY8iQISgcPHgwVX+FnTt37rJly/zpCvpC +CIUkByEU0hsjFUJ0FbNnz16xYoXuHBNCiDNCZqUxn/nMfzt27Ni7775bVVWFEPDk +yZPnnHMOqkePHr3wwgv79u371ltvIWmBfMCAAYgXy8vLp02b9vLLL0+cOHHHjh25 +ublIXaCALAWh/9ChQxHob9u2DVVYQBcoILG5+uqrP/GJT7DTtABjQQ727//+7/fc +cw/KSGMgfOWVVzAKDJY63ZNumMbwr7PYPLt27TKiDoO8CNs1MFTiDWzTp08vLS01 +IiFEV2H/ZsGqEEKIriTjfjcGuQpSlMsvv3zGjBmf+9znBg4ciKzjhhtuyM7OHjZs +2N///d9/8YtfvOWWW1DA+em2224bN27cN77xDaQxUP5CjM9//vM4+o//+I+QoMnf +/u3ffvrTn0Z59uzZN910E14vvfRS01n6gAztf/2v/9Ur9u0CAGflUaNGMTcTSbF6 +9Wq8Tp48mdWOg7wIOQwKcR6A8V/2QW6DbApZKMFmhoR2LGPHjjWHHebOnWsPLVu2 +DL3jncJDEELCtgCHKDR1B0wCDvFmG8Jne2JmWvE4gyqEflNI0qjPfqkWB7YCMA5l +jJpyDt8ciws6YpNA/B7yuQhzOCsLZW4AF85GHKhGO+4MWzh16Mua8j9KbpfM1GNE +mQcO2T80dMFWdkSBXQDsGcjdZ7fCNF24mm4rEmVKA6G+p1OMgsP3DBA242xIktAT +vjf5xkS/HDVAwT/Pdk7ivKdcYCHOW9iuDryiBNjtYept96NC4s5zancF2gZqet68 +BM2t3I9RCoET6CHQeT9Udj2h2wAuGVFsAj3uYXqxDczhGO7MWCMA7wLXlJGG4Poc +f5vZNXWNE06IHZR/IdCEqw/fkvq4DiPKe9N6lXCfU9MDT0Ag2bVwwcDZxLrHqscH +qLX7wyG17gFKongYXTNTaL19qufy/PMr/+EfbuE/lLEX9+zZ0/rjLG00Nzeb0unl +jKK2ttaUPvigpqbGzF06YBcX/4zoTMMn+BfGsNkFAp3ly5cbjeRZunQp8iLklqbe +BiS8xwx9GdGHH+7atSvsBn3IXSOBavDfHgq8TwZjYXPAbK20tNTU22BD6xX8jzU9 +DdcZaFLCKnEvZ8ECJFSLAxuGPSkEIWxSJ4xAVy0eD8OefXKXAyS8UEY17BCU3ekl +mCXIsZdQsKb8A+GQOVEk4jxwyJ6hATv/dn39XRDuedfzME0XrqZnvGG3ZnmmNBBq +ejq136jhDpBD9gAF990RZXG5ZPDZ9uLiec9yThK+pwBmnsp+rJN2dYB1yW4PVgEs +U2K7SPmu4Dp6NF337IpAGP8+W6qFEeg2wWIZpRCoZj1x35J21BxIIO6i25kJ3CF2 +Wkw9BGsw4TazrrqrQzghdlD+hbCrz0/1iB/XYUT8uKNXUfZ54ILSVY4lELe76LuU +VTtXpN0fDil3D1ASxUNKomhmCJl1NSYvLw8foycdTp06ZUqnlzOKnJwcUzp5kneU +iXZTXl6O1wUx7J9wVq9ePXv2bPt3pmTBJxSCD08EwL8YVVZW4uTknjMWLVoEIT7L +7EckPn/5GQe55084wPNp6H6IwxTs2ASMRtCv/VMiT2zun5QIe+FRTAKmglXagWMY +S6AzLv7pwjBpAQSeISBBd5hqGMcp084ACqhC6P5NOg7+M4E7LQSTwL+9YVqog5MT +h4zxBg6NahaPTbTFtGAyPX/5s5MZPwT0kJJ56GIwpdxabijAiCFsSuODyfS3irIh +Iy4uVwqakOBtiDcplfGWgUF8FGAJqGmB5fjvKYAynIn/FuYWRY/U9+wZArMAmmgO +U5B02a4I/KyD53AAM2OHT/xvrjhA2TSLwWnBEvCDNyKcbc4A5gdlDJ+7wq44gJ88 +6q4OgT46hTKjW5iiJqaXa0ELhIdcz/mJDbPJfoZEh6uPlYVZzjAtQxg7/hHsiEfD +SNZV6GPU8fc58SwoqsmuRfuAM363sXbsGkNjv1hZz4dD17gHAj0MJLpmz8QsQg/F +czXGSEVPwS4u/hnRGQWnNL6tcPLAp7yRxj6aGYO68Vn7wKcquyD4tOV5lFgHeIZ2 +4Z/i3E9e/8nVwkPw2R0F4NkXclbZna0SfKBDyNMnYBgKg6wSntWsM34dnnfpBvA7 +aRVMvQ2awmBN3YHWAsdrCTPrkWPgYQvKU7trwS6ZqbdBm66c0+ux6f4NlWEr8KwL +8Iwu+jyEDRldQA7sXvI0tHA17YqDME0Xeui24pTa0McS5qEH6AC3U7phXylkvx5r +7oaMvrh0jBL3bQjsSnlmD5ajvKdAlLcwoEsctWen8ZA7is7YFf75tG1jih/ZxFqj +6v4xglAfmHoIHg8tbOufLhfqsC2H4G48wFXwCAE/zYBdNeutZyBQCNs2gZ5H3GbJ +vuXZCnBLu9PCrWV3GvF8XAcS/R0B6BX0PQ579jnw+G9Jdi3c3gkUqGmHz6rbF3u3 +rxT6NzNwPxxAZ7gHKEnoIYgpRtLMEDLu2ZgDBw40NTWZSjgtLS179uw5fPhwQ0OD +ESUCTUypS6irqzMl0W2wn9H4eOJnCsEnID8fU/inGrIidrNyZdtt09YBfMhSYuF5 +KCngtjsKwE/w+vp6/u0TNtERqvxDHeFf+6wDPNnbD24ABep7jFtgkBPF00BS0DJP +rh54NqJ7HQRG+DdX2nThFGFFkvrzMOGkuZNJO5xnVO0isvc4dM08pBA4jEFhgH6f +4TDkyU4pthCaYN48a5RwQ7ZjcemhqcRAqsCBeOYZmgnfU7F3cNS3MJ30f7DASQwK +TdxRdMGuwEDC3ryB/ncQXvaBZeZ4UeAkcNotDNDxuW3qbcTx2WMBy8o5jLhLI24z +6wCVIwJlDBNbyN1FMIUqDxlR24q7an7a946Iv8/j0I61SJZ2fziALnAPhHnoJ7pm +TyXj0pi333779ddfr66uxivK69ev37hx48GDB1F9//3333rrra1bt/Jthp26atWq +qqqqiooKSN555x3slQ0bNvAd++67765duxat0ATKEP7lL3/54x//COWdO3f+9a9/ +hR1Y3r59OySQQ7Jv374dO3bADlpt2bIFrdatW/fmm29C4Q9/+AMOQbht27b/+q// +gmOnTp2CBM2RR6E7GEdDKLz22msoIxlrHYxIHxg64EO8g4ECPq2wMwE+anligEH/ +vSsEH3CkpKSE/WKj8lAU/JEBPqn5aW5PRZ5YzZ4jAz9S+WzijBkzoIaTAf33syz2 +a+iwHP/kGggHuCDoMWLeCZDUDIRBI5gf/6nLCu0URQfjxfSioXXSM5k4SuMJd1Gy +84CqOdxG2KOiCByNRhth9zN4NLHu2IrmmA/6g41htE8HcqsTBeizL/75IAwa92xI +9pLU4gZuVL59PJoUusCg5z3lEnv7thL2FkbXeKdACB0jisH4HiNyR8G2nbErLHHe +vJRwOJS0A8+mQncY4PLYXXxGIy6YZPQe/7OFOgBzYm+088xM4PaIs45+aDDhNov+ +lneB59zSpt5GUh/XloiuUkIgN6U2oJbU/JAoa4Gq2Q1txN+lHflw8BDFvXYQ0UMQ +XbMHk3FpzNGjR3Nzc997773jx4+j2qdPn5MnTyIxwOvu3buROTQ1NaFcV1eHQ3gz +oFpbW9vS0oJ04siRIzk5OSg0NjYiqThx4gQsIAVC3nL48GFUkXvU1NRA7YPYFwag +FdpCYciQIbAD44cOHUIqkp2djQISofz8fMixEXv37o0C9GG5X79+kCALgpPwdv/+ +/XgvwTLsoFWvXr0GDhy4adMm+i/SBXsC6PhnHMEpAZ9c/PDCh6n7BzZ8pPIjGAWS +1JnD4j9p+cF5EWq2d5wgsXsppCQMhjum4gAhHEbz9n0uo3dTCiGhQnTCxhhl3sJg +PGHnkwUGH4RlTJFNHngq9YyrK+chItgbcBvheLu7jt4QHUEZkYc/nArDsyGjLC7D +MhCoHF3oB/5HfwsziIeODaTQELONreKJvTp7V8R/82Jv0x/ocHSEGVe7gc/2vRAf +dMTv47L3/7hgxnAU/uC1dcZj32VvjvmIuI4JCbPjyiO+5QmWAEOAJpbAv/n5ydyO +j2sQxVVLFINxSGotkgXWMOqOfDh0qnsguofRNXswGZfGXHPNNVdeeeUnP/nJj33s +YxdeeOGnPvUplP/2b/8W2xHlG2644ROf+AQOnRcDOwPCqVOn4vXSSy+dMGHCVVdd +dcUVV1x77bUf//jHp0+fjjKajxs3buLEiZ/5zGcggX0IoQaFKTE+/elPT5o0CVXY +gWX0NX78eJRhH60ggfFp06axFXqHJyjgEIRoeNFFF8Fh6KB3tIIEnlx33XXnnnuu +GZJIK9rx+Y6PSBugeLBhiv2Qxf6xH6k42proLFxYVlYW56+PYQSeJj1gODgLQpOn +Rr6G9WWvI+GdBYcDwxd8LuMVntsYMSk4vQhT2Jcf94aBDhI2P5S370TOkIXTiGAF +YB7cU5SdGftnaZ5KPc4kOw+waQ60ETZR7j3ZJOxPuR5N3mWEEcUJOjFSox1E/L8Z +W9gFZsC+O8Kg2cANGWVx4y9xoIUwsy5JvYXhNv/2jLW2N7pgUGiCXeS5Ttt5u4Ik +fPPCK1gIOxoFz6bCWDAojDTOprKgLacIM+ZGpQAW8BmLnYMyNkNsylvx3ztEoqxj +FKJss4hvecIlw8cIFPyxNQxG/7j2EMVVS5hyFJJdi6R2acc/HJJ1L1miexhds2eT +cWmMEJ0HPlNwjhkS+0U8D/ZjPdl0AqcinJBWxzAiB8/ZAp+w+GjD5xqCHnwE47MV +H3AAn7btOK94zvQARiiEQUqAjbxxFK/onZIwcNbhx65/RJDAglVoBzzf8xzTedhe +/LNqhdRJFrTCDoERgKmAxBO7QwGL6wqhj4XGtJt6jK6Zh6Swf4znuDzEmdJkYTDt +n5Mw0LW7IeN4YoXUwbuAXQTOM4fpvlNAwvcUWsFa9LcwH41DgO5507EVrHE2SKfu +iohvXnygcbw2m2J+2z4war4XAjeVH7xZ0B0cQCTqzicjfpiCP5h5zh4InHMAC/5D +7jomJPo2w2uUt7wL5hZuBGYyyX5cg+iuWjgVLlCLOD/JrkVSdPDDAXSqeyC6h8mO +paeiNEaIlMEUBR9n/gCdfyyEQrKfOPi4ZJO5c+f6PyhpFvDcYM8TnlMF/GlH7ALj +nh75CY5Pdtc+BgUJuuCocVJ0x1gSu/hu/YwP/+KFz2VW2wFPyejOfx5FwAdP3L+4 +txu7jv5x+aco2dMbh+DOZ0z8Eeja/Zt0aWkpTqKefdU185BC7JT6Ay9sXTgM/GPx +g8gM84bJd8M+l4QbMqnF5Tz7fYYbfMfBGiUENuO/p5J6C6MthPCBbnjA+whmqUMJ +1TppV0R586JrgALUAn3uAmKz5X2aiFPkd4ne+sEieg7BICWeFQ8jqW0W5S3vgckh +THnWGv3CcuzTJeDjOpCkXCXQjHLuCCTZtYhOxz8cQOe5BxJ6aImu2fMxb4seSg/7 +wuVTp05tj8Fnb06cOIFPimPHjrW0tECCqtHrALW1tbRPmym3n1rs4uKfEZ1p+JmC +D2ucaYyo7WscAf/CmizL2+7kxmeWNbtr1y77+YWPVAqtJnqk5ODBgzjhUQhwQqIc +wElI3LOjhYcAerQ+2+78TThAtrJ/ZCV27NYlDIGaME6J1QGuh4BCf488ScOOqbeB +8fKMi0O2FebKnnVQpjCQMLN+ufUZ00IJura9uA5TE16Zehu0CUy9DQ7BM0UJob7t +N/o8+IdGoEBNu+U8XVi4MRJuLcwDXeJO4LS4rdwpdd1jKzvPYbAt8b/77ABtL3QD +xNmQCRcXftI9973JKQWuz+wCxH9PRX8Lc4HQu50rOEAdVgGt2XF1xq6wcwXiv3nR +lr2jO0qInS5TD4ETaK0RDJA2MUVGFETMfIAndryYIlTxaiWwTCHxLy7wbyH/jIFA +z0H0bRaIxyytuQ5w2/jfOFYTr56P6zCiu0qzIP4+B2HTkuxauEMmaOjRZJVYIfBM +mh0mCpTYlYUDlHSGe4ASEsdDQB0SXzNDUBqTTiCR2Lhx4+bNm7F316xZs2nTplWr +Vj0fY8uWLb/+9a+RbBjV9lJdXQ1Tv//979evX//nP//5pZdeWrlyJfJ+2kdWY/S6 +B3Zx8c+IzjT4cMe5nB8xHjwnDCwi5e4nURj249UPukOnRq/tQ9YDdGgBJ2+jF34W +ATwUOBD7+e5iP5dd+5ZAl4A9ybmjs+cGQqHfybAzBIBZxih+AgfrEmY2UG7PzR5s +ROVOIMoUWmgTmLqDtRw424H4VzPiPIQN2X+u9XdB6K07QGoGgs3A7cpF90xL2JTa +VnEwqr64jR25A0y4IUHCxbXYN7IHz9A4J+6WsHhWOeJbmEGk29Z6Yuox2KNVS/mu +oFck/puXDqN3jxr7AqYeQpxNhUMemx6o5g6Qbts1woczdTxAzumyE0hvIfQvU5gb +9Nzt3RJ9m/nxmOWIIGQV4C1D5z2nGLuIOGpEEYjoKr2Kss/DpiXZtXCHTOwA7cBZ +BR3/cEjWvfhYZVOP4CHVQELNDEE3laUTWVlZw4YNGxKjoaHhvffeGz9+/KhRoy6+ ++GIc6t27N/Ico9peBg4ciLfi0KFDkRHB/qWXXgr7l1xyCe0fPXrU6IkQMHv46MQH +ivtpiA96fAjav121A1rAq6nHwKcYPjrRHT89CXs3lVj8hw9TCNk7ElF7h0lC0AQN +7UBY9fhA8NFJtcBTHTyHS9Ax9bbh+E8YHrX2AbM4jcGUOy3sMdC9doOJxfy7J2zY +98w/gU6UU5rF2uyIw102DxGBG3AGvbv+eOCUuu8UjCJhKxf2YiohwBp04m/IpBYX +bd33BSxDDcqm7hDlPeXpBcr+t/CKGOjI09YPN569uajzdoVnSj3QYRTiq7UDGITz +ydrEkNFkddvPn2NuPcsNBUwU5Jx2z8cmZs9ddO466CfrRvRt1g7se8FzryCc5A5M +asWTchWThkPx93kYUE5qLaKTkg+HznMPRPGQRNfs8WQhlTHFnsjKlb9YufKXLM+c +eePMmTdt27Zt0KBBCNObmpr69OkDeU5ODqL/kydP5uXlUbPdwMj27dtRwHsAcT/m +FslAr1698vPzkQCgI6p1hAMHDvTr1y83NxeWW1paBgwYgAIkKEOIgZw6dQpqGBok +kIO+ffuybRSam5uPHTsGn48fP46G2dnZGAgkAEcxRchtCgsL0Qvk6AIFjAutzj77 +bJQhQVtI0BYF2uw8vvjFL5vSWWf9/OfPmJLoMPwmH5y3op/nSkpK8PHtftyLdoOA +b/bs2TxfGpFIc9rxnhLdEKQ9yApwikfkakRpSOd9XGufRwQp9IwZM5CKRMzuRBgZ +dzXm3Xffra6ufuGFF/bs2fPqq69u3Ljxpz/96a9+9auUfCQhi+DPvzz//PMvvfTS +X/7yl2efffZPf/rTunXrEPQbpY6Bz51Vq1a98sorpaWlb7755n/+53/++te//q// ++i98JG3duvW3v/3ta6+99swzz7z88svo9I9//GOy/e7bt+/PMf7whz+sXLkS9p97 +7rk1a9Zg3virne+888769ev/+te/4tDu3buhg9nDTEL/xRdf3Lx5Mwb+9ttvG3Mi +M8AnMnYgzojKYVKC/Qsxq0IIkSr0cS16EpmVxhw7duziiy8eOXLkJz/5yTFjxowY +MWLSpEnTp0+/+uqrzzvvPKPUAfr06XPBBRfAPpLsadOmjRo1ij9TU1hY2NzcbJQ6 +xoEDB6ZMmYJXDGHQoEHoCPYLCgqOHz9eW1v76U9/euLEiX/zN38D4Sc+8YmrrroK +OZVpGY3hw4dfdtlll19++SWXXAILMHXDDTcUFxdjXPn5+RdddBEmLS8vb8iQIZ/9 +7GehjC4wh/g0/NSnPoXekQWhiqO8KCQygcrYb96hoD+/pYRFixYhzsAHlNIYIURq +0ce16GFk3E1lLKcvfDrl5MmTAwYMoKTrQRI1dOhQUzmdDz74oH///qbS+eimsk4i +4o0BOB3yazQBUtmysjKWRTuor69H/m8qsQdGlcb0JHSzTc8gfW8q65qPa+3ziOim +slSRcVdjamtrD6UUxPTHjx+nfV4SMQdSx+HDh2kf2QvKyGTQkTmWCqx9gLKRhtO7 +d29T8tHS0mJKDpgTeG46ED2IwW1PCSPgLg35viYREUwm5xOvymGEEKmFHy9AH9ei +J5FZV2M+85n/hkJ+fj4lKQFJBWJ3fj0AQna8ptY+gFnaRF8ffPCB/TBKFda+p5wq +Ghoa+vXr1xlXaXQ1RgghhBAiM8m4R/xTnra5BrOysjrjmRC3i85IO7vSvhBCCCGE +EB0n49IYIYQQQgghRLqjNEYIIYQQQgiRZiiNEUIIIYQQQqQZSmNE+nHq1KmdO3dW +VlaauhBCCCGEyDCUxoj0A2lMfX39gQMHTF2ItGXRokVZWVn82f4wsNuhVlJSAk0y +duxYSCA3GkIIIUTmoTQmXTkWw1Q6hw8++KA7f8kYgjlTEiI9KS8v5y9qxwEZzpAh +Q6AGZSNq+yluJDOrV682IiGEECLDUBqTrvTq1evgwYPV1dXvvvvuvn378Hro0CEU +9u7d+84777z33nsnTpxAEgIFlBsbG1Goqal5//33Ud0fAwrGVghQqK+vR0O0gk0Y +qa2tRXOAXlBGnrNnzx5aoyYcwFE4hqOd8d3TQvQY+CvOphICcpW5c+eiwF+swzua +LF26dPLkyXjTwYIyGSGEEJlJRqcxBw4cQCCOAgJuRAYo2FcW3DILgOXYwQQcPXqU +2QIbAgjdVxI7YoSE8vjAOF7peZ8+fQYOHIixnDx5EuX+/fv37t37yJEjUMjNzUXC +g3AHaihAgkNZsd+3aWpqajUUzvHjx9ELNPv27QubDQ0NsIYucnJyBgwYgKzm2LFj +6BeWUYA1lNEkds9L1uEYxpAQ4nQWLVqEDCT+XWErVqyAGgpIWpYvXz59+nTKwZw5 +c8rKypDJoMw8RwghhMg0Mu5X/DFe+yv4iMiRZiBMR4ze3NyMKBzhOIQAsT4i9UGD +Br377rtIDCBBDsDonxcxRo4cSSNIHtCKv+KPQB+aQ4YM4SFQV1eHyB7C7OxstIUR +VPHKLgoKCpAnoBW86tevH4RogjLyBDiJ7mgEsQ59hjL8pH2oWQXI4QNawQglwFWA +k+iOUAKsgrXvKVsF2IflQ4cOuUNz7WNQmBb3d/rdo2iI4afwV/zR12uvvYZpfOKJ +7xmRfsVfpAmVlZVIYPgFFQsXLuRNZUhUkJnEjn/E2LFjoTZ//nyoGdHp4Ch0UAhs +LoQQQvRsMvpqTEtLy9lnn41cBQkMQBaBKrIXxPH5+fmoIvFAITc3FzoAuQqqOOpG +83FAcI/UAs2h37dvX2QCsAD7lOAQcg8IYZCWIad9tEUaQCNh2CQBmkwzjsRAUoRU +5PDhwygje0EKgTIUACSNjY1sBayFQKAJmpqaDh48iLYoIJ2LXWJpBYnE+++/zzLM +0j77hQOQ8BBm2JgTHQChKhbLA7YQ/1Qfn8C2FvtkOQqoMiaGWR4Fc+fOZcDtAWsN +NfhAtUBnaNMPDCbb3erVqxHuG6UYs2fPXrFihTkcw+3OcwjArDmWlWVdbUcTEmX4 +YcAsmDx5cllZGVIUI/WBIUMNhTg6Y8aMQYYDlMMIIYTIQDI6jbH5CXIA5A9Dhw6l +BJlG//79kU706tULZWQ4SG9wCIkH5Ex1jIm4IHWBMlIUm58wk0EXsMO8BRK8ogse +ghwgKkLXxkoEkK7U1NQgnGpubkbmwAQG6ceBAweQXSDPQRKCAhIzXkqKAjTREFkQ +2gJkXLCMAuQowD3keCjAJjtFzgMHeBS9QxNtkcgZcyLVIJJGZI9o3tRTBAzy+gBB +oI9kw/P0BaoQQg0+UEJnIGTkHZ0o3SFDmDFjhidPQNaBtmHJgz8n8Us8RG9SXl5e +UlLS7uEj91i+fLm9JSwMTgJ0+HeNMJDkxMlzhBBCiB5MRqcxPQakPYWFhQh3hsUY +OXIkX8+Jgazp/PPPhwRqwLRJBDSRaJ133nmwg1fkeOgC1tBLQUEB0hjYRJIGHViG +pKioiKkaqujx3HPPRUMoGHOiwyxduhSJpYV/gEeo7X6BVRietgDBtDnmgCgcBmEZ +OTB0SktLqYaEwQ3ZWcUh+9A57GPp0dz/zDrUqGOxXUfpDjrMc6DG5gBpADX9aQzk +8AQ5gLVAmJPgEKsuSTXh8OHV9OnT7fBRQDVw+H7Q3axZs0wlHFjDq/s8jBBCCCFc +lMakPVlZWYFPniDT6NOnj6l0Djk5OaZ0OvDHlESngcyBBU/w3UHmz5/PnARlRuoo +o4tlzu1nqEJYVlZmg2zkGNBEAcG31YxClO54yI4XIA3g4yLQZLjvgqOQu5d0oINk +D5bDLoBEbwJ/cAhCpi4U0nPkJ8kOPw7wB6+cGSGEEEL4URojRFrC76eKE5q3D88d +SgjNednHXvPhNQoIPRE23OBFBjcZSEjC7pCu8HIHq5Y48T2zC9cN6zOrfqI3oTzw +cgqVkxq+EEIIIdqN0hgh0gPkLa2Pk7exbNkyhPLLly9P4R/skYr4rSG1wKvNK3j1 +IzB3otBqJiRKdy4QLoqxYMECe/sW/XFhTsJ8g7BsL574id6E3cEBswwOvPnN70/7 +4DykypoQQgjR81AaI0S64t58lRKiZERxbnZKNqGKqL969eqSkhLkCXywHvgfiXGB +Wd4kxlQEmQDyHwjjpDHRm3D4cUioEJE46ZwLXTUVIYQQIpNQGiNEerD09Mf0eR0G +YXcKM5koITg6xWugJoVUiEKU7jDAGTNmMFKfPHly7OuFW/HfZubiXhdiZhLnjjIS +sQlHh8k3y+Bj165d1OwgzKDgT/wLMnAV2V30r+4QQgghegxKY4RIS2bNmsU4mzF3 +SkDE7E8tGEYzygfxb/rCKxWiEKU7XnjBSJEh8IdWSPwUiDPDBI/zE+dSDInYJOJF +ko6DGeAkxElTMQl2figRQgghMoeMS2MOHz6Mc38KaWhoMKZjpNw+aHF+RLKxsdFI +U4dr/9ixY0aaOuCzsS66N1gsT9CMpIISG9Pz6XYIoUwJQWQfMWGwROmOCYP/kXpP +Qw+DY998APuI8mEB1YReRWxih890y2X27NlZsV/wNPUOg2wNr/AnbLD8Zmq4qjRG +CCFEBpJZaUxejNjjuCkjJydn0KBBtI9Cfn6+OZA6YJP2s7OzEbIYaerAnNA+SPn8 +AExL2Fczi3aDnIHRLf9mnyrcJ09Wr149Y8YMBMpj2r5ADKCATQhhSUmJ/VYuOMNn +7l3NKCTsjqODmk0b0JfbdRjMN2g8oktRmtjhw1WbXcA3ZBTM4ph7pAT4Q2tIjax9 +gq7tJCxcuDD6FTAhhBCi58D7uXsqzz+/8h/+4Rb+Q9lIRZpz/PjxV199ddOmTXZx +8c8c64nECVJxaNeuXUYvCLb1PFcDPHL+KgsCdH9S5O+irKwMmuawAzRxyCi12YTQ +1B2id7d8+XJz4HTsV7QhiKempzt4ElNsxXrFCywdaQJwKHD4AAaNUmQSNoyfF8V5 +SkcIIYTo2WTcTWVVVVU1NTWm0glUV1dv3boVM2vqqWbPnj2dar+hoQH2T506Zeqi +G4PYGiE1onBT7zCIzmHQxs2oogskFZ4ukHtAiEOmHssEqJnUpaEo3c2aNQuRunt/ +F/ShAzlANewxFXhCZ2AtolcRm+AQh+8mM/AKY0nqSlREOCee7jjhBw8e5CQIIYQQ +GUhW5wXE3YGVK3+xcuUvWZ4588aZM286efLkxo0bDx8+PGDAALwWFhYiZEfsjuoH +H3xwzjnnFBcXv/LKK71790aTEydO9OrVq7GxEQEEXj/5yU9CjdbCgP21a9f2798f +Ewv7kBQVFb377rv5+flHjhxBd+PHj9+2bVttbW2fPn2GDRsG/d27d8M++rU3j8UB ++uvWrSsoKDhw4MCxY8fQy6WXXorcLDc3t7m5uW/fvh//+McrKiref/99WKurqxs7 +dix6RysoDBo0aMiQIRijsRUEZgP2hw4d+t5772VnZ7e0tLj20eNll11WX1//zjvv +DBw4EPMDa2+99VZeXh5mDPaPHz8+YcKErKwsY65zQL+vvfYaluaJJ75nRGed9fOf +P2NKInmWLVs2d+5cBMeImI2oM+ni7oQQQgjR88i4qzEImxBqIycZNWoUouGmpiak +BEhgEHmPGDHizTff3LNnD0J2HIIQOoiVkYfU1NQg00BDYyUc2D/77LMPHjw4cuRI +JA/Dhw9HMgNTyDoQ8SOBqa6uRl/Ic2AQZiHPyclBDoDkIUpKCftIpdAQOQachP2t +W7f269cPGQsGgqwDKQfsn3vuuciakJPs27cPmugOGQjkCaNGpChQhn00R6KCRMu1 +f9555+3cuZNzxdlDtoNgFMbRNeQ4CgvGlhBCCCGEEJ1Dxl2NQZCN4B4BN6+W9OnT +B1E7qtThIZapwzKSGRzKy8uDPiVheOzDOJIZPuAOCbD2ie0Fr0OHDvUc9XPo0CEY +RAGaDQ0NvEgyaNAga8fS2tmHH8KZvn37GtFZZyFfch/o93P06FEkJ3QDZYwXVWsf +r3aK8ApPPPYhQXqWcJY6iK7GpBxdjRFCCCFEeuGNfXsY/jSGZZHWKI1JOUpjhBBC +CJFe6OcvhRBCCCGEEGlGxl2N2bhx48CBA/v37897pY4ePXrq1Knc3NyWlpYTJ06c +ffbZR44cycrKQqFfv344ioZQgPL5559/8OBB3kMFOY7W19cPGTIEZeiPGzeuqqqq +sbERxhsaGs477zyUT548WVhYiFY5OTmHDh1Cp2gLC8eOHcNrr169srOz0d3QoUP5 +7QLvv/8+HesTA0boufCAlSovL8cEPvnk941IV2OEEEIIITKJzEpjrrvus6WlpUgq +MGqkJfzmZSQhvXv3RtaBRALJCYRIIfbt25efn4/05r333hsxYsTx48cvuOACRM/I +NNAWakg86urqYAp5C5pffPHFr7zyysiRI5GuQPnyyy/fuXMnNJHqwAj6QuoCyyjj +KOJvZC94RUPooFVtbe2kSZOQCKE7pDrwBGbHjh1Lz9vHqlUv//GPax5++EF0akQ9 +CH6jwG233W7qSmOEEEIIITKJzEpjrr/+OqQTyB8Gtf3uPoaPaJhlwuskJ0+eRI5h +q3hFAoPsAmXos5XVAQcOHMDr0KFDWSVQQ1py9tlnIydBQ9sXCgASq4ZXa5ZVSlho +B7W1dXfddTcKPfuJoC9+8cumpDRGCCGEECKTyKxnY3Jzc/Pz820OA/ypArMLm5+w +itfzzjsPQurz1eoAJDCeHAZADa3y8vJoxPaFgs1hAKo8ZF9J7GA7+eEP/z0nJ+fc +ESOQxSGlMVIhhBBCCCF6BBl3Naa+vv7ss8+mpKfyxhtblixZdvEllwzKy9uyeTNS +qX/+53vMsTYOHTpkf22zpaUlOzubZeyHKL/C2U3Q1RghhBBCiMwks9KYz3zmv504 +cWLjxo2f/exnkc8MGDDgeAwE7nzyntH80aNHe/XqxdvPUEXag1lqbm4eOHBgzFJU +amvrKioqdu2q3L179+23f7WoqMgc6Ezg5z/90139srMvvewyVA8eOPDW9u133jln +6tQpVCDvvPPO+eefz/Lhw4cxtK1btw4bNiwnJyf+D8uEgcH+7//9g+HDh19++WXF +xcWFhQXmQGeiNEYIIYQQIjPJuDQG6QridWQX5557bmNjY25uLtIVTAJSGiQAN954 +45o1a7KysiD84IMPENDX1NT07dsXmgUFBTNnzqSpOFS3smfr1r+++ea2Q4cOQYLU +qKWl5f777xs/vpg6ncpTT/10zZq1EyZNshdY3qqowNB+8IPvuc/6I40ZOnToc889 +d8cddyCN2bRpE7827ROf+ES705i77rqbg0UVmWFx8SUXXjgWo+68/E1pjBBCCCFE +ZpJxaQzGW1lZiWq/fv2OHz+OLAXpCgqFhYVIV66++uqf//znxcXFiOwHDx68b9++ +EydO9OnTB0F57969r7zySprygMRl27aKLVu2bt/+FoP4QXl5yIsGgby82pqaqt27 +uybIhif33nv/+SNHjhw1yohi94xt2bz52munffWrXzGitqsxvJ0Mg33llVdOnjz5 +qU99Cofal8aAf/zHfxo4aNC5I0Y0NzU1NDQg92tsaIAcXVxyycUTJlyOfCa1uZzS +GCGEEEKIzCSz0pjrrjP3klESyMGDB4cMGWIq4ezcuXPHjrcrKip2766iBBlLLG3J +w3+UkLcqKiD7X//L+3RKZ/DII9/BAK8sKTH1Nvbu2fPO3r3z5n193LhxlHiejUFS +hwK/VwD5W0ycNIsW/dvuqmrezGZBJsOUBrkNckJILrxw7MSJE5ArdjylURojhBBC +CJGZZFYa0/GvHl616uU///kVXs/p06cPr7fgX5zUaNOrr37+8zd0wbcew7dnnnkO +WYQnjyJbNm/Oz8/7t39bZOqdAB345Kc/beo+mpqakNW0/mtsZEozYsS5EyZMuPnm +m9r34zZKY4QQQgghMpOPvvZXJKS5uXn58ueRw4y+4IIJkyZd9fGPX1xcfO6IEXFy +mJaWFsTrxcWd/lQMfSscNiwwhwHw+d1330OmYeqdAK+u8EayQDBRmC5MGqbuypKS +C8eN27+/5uWXf9fU1Gw0hBBCCCGEiEDGpTEI95uamkwlGZCN9O/f/6GHHsjOzq6t +qcGrORAXxvSM70+ePHnq1CkWAi+CoYsjR44cP37c1KMBa+CHP/wRXpGrGKkPpDdI +cpDqdN7PyBQVFWFaIk4vNBsaGuDznXfO6ZqvNRNCCCGEED2GjLupbP369QMHDuzX +r9+hQ4fOOecc5Az79u07//zzDx482KtXr969e+fk5PALl/mgCDSR+aBJTU3NlVde +WVlZuX///p/97Nm+ffuNv+yyPn360HgYb+/c+eGpk7ff/lV+gzOsjRw58pVXXhkx +YgTaIqs5cOBAXl7e2WefPWDAAKwFesnNzUU+Ax9QGDZsGHpHuI/c4PLLL9+5cyc8 +5KGWlpa+cCJGff2hf/u3x5HDnDtihOk4CJh9vbz88ssv++d//qYRpZrvfnfRu+++ +d3GEq0+YGWSD/m+Cjgi/DvvWW79q6rqpTAghhBAik8i4qzHZ2dnIHHbv3o3yW2+9 +9eabbyJP2Lt3b1VVFVIFlBsbGz/44IP6+nrkCe+//37sAfWGXbt2QR9ZxOHDh/v3 +73/FFVdA+f333ouZjEdjQwNyJOQnR44cgWVkIO+++y66Q7ry3nvvbdmyBf5ADvvo +CwW8Iq1CQ9hHEyhDEw7AMXhYV1eHAnyABB6i/Je//AXe/sd//HhQXl78HAYgcUKq +8/rrm7dtqzCiVHPRReMwClMJB1OHHObLX/5S+3IYgOQtYQ4phBBCCCF6Kpn4iP/J +kyftxRYLhL179zaVuFRVVT/88CMnTpy49PLL43/pGRKh18rK7rlnXknJZCOKcfz4 +cYTg6BE+ROw0EFg4duzYSy+twhgnTJoU3xnLm3/9a+9evf7t3xa276n6+CBBevTR +7yR0Bknatr/+dfjwYQ8//GBH3NAj/kIIIYQQmUkmPuKPzMGTw4CI6UR19Z6IOQxo +OnIEr/7n+/v27QsHkMl0JIcBaH7kSBNymPhfM+Bh9AUX1NfXd9Kz/gmf8ifwdvxl +l+3fX/MvDz6s5/uFEEIIIUSy6JvKkqC6uvqhh74dMYcBjY2N55xzzoABqb/oYfnB +D/49Oyfn/JEjTT0C8Bz6SH466Vn/Cy8cmzCNAcxkavbXPPjQt5ublckIIYQQQogk +UBoTlVgOE/U6DEE0P3bsGFPpBODSzp07W44e3fTqq6/8+c/4t2XzZnPMx/vvvUcd +/Htn715I1q9fz0OpZeLECU3RvqysLZPZ/y8PKpMRQgghhBBJoDQmEu3IYaCMaP7y +y0/7SfvUUlRUdP/999l/U6dOiZM/wJ9zzz33dP2p5lhKKS4ubolh6nFRJiOEEEII +IdqB0pjEtCOHAbyxqrN/+HL8+GL7L+Gvr/TP7Z+UfvsYPboIr1HuKyPKZIQQQggh +RLJk0DeVFRQUtCNwP3q0BWlMVlZWwhymqanpza1bc3JyEJT36dNn7549+/ftu/DC +seZw51NbWwc++elPm/rpwJ9D9QdHJvMUTbupqqo+e+DAC8eNQ/ntnTsPHjgQcfb6 +9u07atSo3r2jZtcVFdtNSd9UJoQQQgiRSWRQGtM+kMD06tUrYhSOyQS5ubnIZN7a +vr3pyJGTJ08aja4iThrz/vvvnzxxwtQ7mezs7CtLSvgbl8nO4alTp4woGZTGCCGE +EEJkDrqpLAGIqhN+nbEbf+O1ubl521//2tjQ0PU5TPehpaWFOQzKmBOAKcJE8Wgg +mGRMdftyGCGEEEIIkVH08DRm6tSpHfyRx6ysrHf27mU4Hoj/GgLKesYDuJPGBC9+ +JgN9TDUm3NSTYerUKaYkhBBCCCEygB5+UxlARlFVVW0q7eJXv/r11q1/vXDcuMJh +w4yoDQTl2/7618GD82+77dbs7BwjPeus/fv3/+Uvr37+839v6l3C+vUb8C/OTWWn +Tp78H//jNlPvZP7wxzXnn3fexRdfZOqt12eOPv30z+rrD42/7DL/1S3kMG/v3Hn5 +5Ze1Y9IGDMgtKmr9XgEhhBBCCJEh9Pw0JiX88Ic/+vOf/8uTyTCHGTZ8+Lcf/pcO +XvNJCXwQKE4a069f30cfedjUzwRIKf/lwW/X7N/vyWSYw3z605/62tf+0YiEEEII +IYQIR8/GRALhNYJs+7AH6G45TFqAicJ0YdIwdfbuMuUwQgghhBAiWZTGRMVmMnv3 +7FEO0248mYxyGCGEEEII0Q6UxiQBM5l39u7dsnmzcph242YyymGEEEIIIUQ70LMx +SfPUUz+tqan5+te/1t1yGD4bMygvz9RPp+Xo0fPOP+/MPhvj0tzc/L3v/eCcc4Z/ +9atfMSIhhBBCCCGioTSm54DEYNWql00liJKSyfpGLyGEEEII0QNQGiOEEEIIIYRI +MzI0jdm8efPTTz89adKk22677aGHHqJw9OjR/irUqqqqolfXrl07b948WG41IYQQ +QgghhOgEMjSNQbKB12nTprHqp7q6uqysvKqq2v09/tzc3PHji0tKSgoLC4zIB7Ig +mI1jWQghhBBCCNFBMjSNOXToEF7z8/NZdVm/fsPzz/+irq7O1IMoLr7k+uuvKymZ +bOoOVVVVMBtoWQghhBBCCJESMjSNsXeCsUqqq6uXLFlWXb2H1cmTrxw9uqi4uJhV +UFFRUVZWbhWQzNx551zPlZm1a9fCrMeyEEIIIYQQIoXopjLD+vUbkMOgkJube/31 +n73++uvCvk+5trZu5cpfQB9l6Nxzz7zx4z9KdXRTmRBCCCGEEJ2N0phWbA5jL7Ag +V/ntb196881t7777LnXAuHHjPv7xqwAU3Es3d945Z+rUKdRRGiOEEEIIIURnozTm +rLKy8ieeWIwCUhEkJM3NzU8//bM//enP4y666OKLxhUVFeXFflCyoaEBqcuWLVv2 +7Nn7hS98fvbsm6H5yCOPIZPJzc194IH7+JMsKU9j4Gp+fv6kSZPoM8qjR4/evHlz +nDIKqNoyXt2b6PxlGD906JAto4BqCocghBBCCCFEasn0R/yRinzjG3fjlTkMEpV/ ++7cnzj57wA033MDsxQ/yltWrV/ft2/ehhx5AlZlMQUHBwoWPIZ9BDgCzgModB6Zu +u+22xYsXM6/gl0TPmzcvThkFVG0Zr08//XScMozzG6hZRuGFF15gVtMOYIpZkM27 +4ExqczAYVN4lhBBCCJHJZPoj/kuWLFu/fgOTkKam5vnz7x037qIbbvg7qoVxtKXl +xRd/09zU9PDD/4JW9977LSRCM2feOHPmTYjXYZYxd0qw+UAceF3ogQe+FfY8T7I8 +FMNUkgQJEoZvLaAMiS1jOMyXwsqXX375pZde+n//7/9FmZkJh++WYRAraMsooG3C +WRJCCCGEED2GjL6p7NJLL7vrrrtRuP/++8aPL/7//r97Bw8ekjCHsfz4xz8577wR +//zP31y16uVnnnkOKcT3v//kv/7rvyLgZsydEhCg88pJfO64Y+6dd84J/A5oUF1d +vW7dhltvvcXUE4H5afcQbALTPpCPIRt0vzUhCh3sVAghhBBCpBe9zP8zEqQfeC0u +vgRB89q1644cOTLjb6bzUBRmzbq5omL7tm0V119/XUFBQXNzc1lZuTmWOqLkMACj +QK5iKqdTW1v3+OOL4Ru/XS0KHUnDIjocRnX1noqKClOJTAc7FUIIIYQQ6UVGpzHM +Oq65Zipen3/+F1df/emc7OzYkQQ0NDTgNS8v76qrrlq+fAXKvAyyaVNZ6+GUwlut +EjJ6dFFVVXAaU1ZWhjztmmum1NbWGlEiOnKD1uiO3VCHbNCUkqGDnQohhBBCiPQi +Q9OYSZMmnX/+SP5UPzKQ6upqRM8XXXwxj4ZxtKVl06ZNP3vmmR//+CcbNvypunrP +hAmX79ixE22RJEChvPy122KP11M/JURMY4qLiz0JAAZVW9s6QLwWFha4v+OZkI6k +MREdhrdLliy74465P/vZs0bURlg+FoeInQohhBBCiJ5B5l6NOXDgAF4LCgpyc3O3 +basYNqwwzqWY/ftrkLdsWA82nHvOOdnZ2W+99daGDevz8vKGDx+OsJvftgzc35np +SgYMyK2o2I6CvbUM6QHcdSVdA78+ISE/+tFSzPyPf7y0oqLC4yHyQ1OKTMROhRBC +CCFEzyBD05jNmzf/5S9/QaGwsACvjY2NRUUBdyU1NDTs2LHjBz/44ZtvvlldXbVp +U9m0a6e99daOj3/8Y8OHn3PzrFnQyc7ux2c5iopG4fXnP/85vyy4aygrK2cOwDxq +1aqX7733/iVLlq1c+Yvm5uamJnN9prCwsIuTmfjU1tYh6br11ltQgJOevAWe8zqS +EEIIIYQQgWTu1ZhDh1qfbyGnTrV+XdvRlpYtW7Y8++yzP/7xT1B98cXfbt361xdf +/A3KBw4c2LNnLwrZ2dlTp0656qqrbrjh73j1Zvjw4XgFqfqy46RAGuPelLVq1e+Y +TW3bVoHcwKYu/AYCyqM/6N95lJWVYRpRGDAgl3eXuV5hCFAwFSGEEEIIIXxkbhqT +n//Rr1v26pWFV0T9v/nNbz/2sY/V1NRs3Lhp69Ytr7766s033zxx4sSGhobbb7/9 +nm/ec9mll06YMIGtyP79+1nopAsI8R9TufPOOegXyQnKyKMKCwvuuefumTNvghDJ +AK9yoFxYWMgsq6KiIsqD/p395cVIXZDAoACvHnjgvnvumWeTMScN60aXj4QQQggh +RLcicx/x/8QnPoECc49BgwZVV1dddNFF2bELLOMuuuj999/HK8o5OTlTplx9xx23 +Dx8+LPDhmcbGw3x6nl8YgGwntY/4J+Tmm29aufIXiPuLiy954IFvIZPBv2uumYIM +AZSVlSNhgKSoqAhlqCGlMS07hygpEHyAM7xABMdKSibDVeYtKGNRystfu/fe+6HD +L8VOiH40RgghhBAio8jcqzEjR56PV+QeCKbHjy/es2fv0ZaWCRMuf+utnRMnXJ6b +23/WzTO/+c17kL1QP5CGhoZDhw6NHl1kr4cMGTKEh1JFwp9wiX3T2p5nnnmW3xxN +kBtAiENPPLF45sybIMEYUWXOQJ04dCQriPK0PXxoamp+/vlfmHrsIaVnnnkO+Rgy +HCaE/CWc9es3IJmhThz0iL8QQgghREbROzP/jP2Xv/zlwIED1dV7kcOMGDFi4sQJ +a9as692710UXXXzy5IkJEyaMHTvWqMaltPQPI0acM23aNatW/e7tt3chC9q48dWc +nJwU/oxJwl/x79u374UXXjhu3IVufoJBffKTn4SQ2QuFKGOk0Gc1Dh35Ff/Fixcn +bAsf4MzKlb9EroUE5r333v/zn//cv39/VJEWfv7zN1x33Wdvvrn1t/z79eu3evUf +Xn75dxhRnOtIUToVQgghhBA9hgxNY/jH+2HDhlVUbK+trZ0+/TNnn332r3716ylT +pxSNan02Iwr799e8/PLLd9xx+4ABA5YsWXb8+HHE37t370YOk9o0ZvPmzddddx3C +dJbPOeec//7f/7tb/u1vf1tTU2PlbHj77f9jxYrliP6hNm/ePMoDy5MmTcJAbHnh +woVI89r9u/gvvPACEznkQphnpCVwzJZxCMY5/8hVdu7cCTcOHz785S9/acCA3Asv +HPupT32yqKho165d1MnLy9uzZ++IEeeeffaAkydPQhny/Pz8ffv22fL27dvh/xe+ +8IVY/0IIIYQQoueT9eGHrV/SlWnwuflLL73srrvuRuGee+aVlEx+6KFHjh794JZb +bompJOBoS8tzzz43ceKE2267deXKX6xc+cvc3Nzvf//Jf/3Xf0W+kclXBpALIbtA +eswMGfkMMiJbZjIWp4wCqraMVy6WW4ZBdGHLzJHYhRBCCCGEyAQyNI05dOgQXvPz +8/lVv8xAIHnwwW8PGTJ0xt9Mj/NTmAA5zLPPPNuvX7+HHnqgqan53nu/1dzcPHPm +jTNn3sTrA8CoCiGEEEIIIVJN5j7iT2699RbkMEhCHnnkMRQefvhf6usPPvfsc/yq +4kB27Njxwx/8cPDgwchhUH3iiSfRvKhoFJ+kF0IIIYQQQnQ2mfuI/759+0aPHs3n +49ev39DQ0FBVVX3VVSV/+7fXHz58+Ne/fnHbtoqTJ0+cOHEyp39OU1PT/v01O3fu +eOGFX1VUVMyaNfN//s/bjx8/juQHCQ/yn29+cx6vwCxevDi1j/gLIYQQQgghPGT0 +szF83AIgjVmyZBkKRUWj7rxzTlFRUXNz89q16zZu3NT6RcxHj+LQkCGDR40a9YlP +fLwk9iMnSHLQpK6uDuUHHrgPTWKWWr+qGGatZSGEEEIIIUTKURpjKCsrR1qC7AXl +qVOnzJx5U2FhAQ95QAKzatXL5eWvoezJYYDSGCGEEEIIITqbTH/En1VSW1u3ZMnS +iortrBYVjSouLh49uqigoDWfqa6uhgKyHf44I5g8+cp//Me5yGRYJXrEXwghhBBC +iM5GaYyXbdsqVq78hU1mAkECc/31140fX2zqDkpjhBBCCCGE6Gx0U1kwtbV1FRUV +VVXVwIhar88UjR5dxGdjjMiHbioTQgghhBCis8nQNIY/YD9p0qTFixfblCOwCjUo +J1VFAdVWE0IIIYQQQohOIEPTGCGEEEIIIUT6kuk/fymEEEIIIYRIO5TGCCGEEEII +IdIMpTFCCCGEEEKINENpjBBCCCGEECLNUBojhBBCCCGESDOUxgghhBBCCCHSDKUx +QgghhBBCiDRDaYwQQgghhBAizVAaI4QQQgghhEgzlMYIIYQQQggh0gylMUIIIYQQ +Qog0Q2mMEEIIIYQQIs1QGiOEEEIIIYRIM5TGCCGEEEIIIdIMpTFCCCGEEEKINENp +jBBCCCGEECLNUBojhBBCCCGESDOUxgghhBBCCCHSDKUxQgghhBBCiDRDaYwQQggh +hBAizVAaI4QQQgghhEgzlMYIIYQQQggh0gylMUIIIYQQQog0Q2mMEEIIIYQQIs1Q +GiOEEEIIIYRIM5TGCCGEEEIIIdIMpTFCCCGEEEKINENpjBBCCCGEECLNUBojhBBC +CCGESDOUxgghhBBCCCHSDKUxQgghhBBCiDRDaYwQQgghhBAizVAaI4QQQgghhEgz +lMYIIYQQQggh0gylMUIIIYQQQog0Q2mMEEIIIYQQIs1QGiOEEEIIIYRIM5TGCCGE +EEIIIdIMpTFCCCGEEEKINENpjBBCCCGEECKtOOus/z+4HfuTbOK7ugAAAABJRU5E +rkJggg== + + \ No newline at end of file diff --git a/SSL/src/CommonTemplates/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати.mdo b/SSL/src/CommonTemplates/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати.mdo new file mode 100644 index 000000000..c2559ef99 --- /dev/null +++ b/SSL/src/CommonTemplates/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати/ИнструкцияПоСозданиюФаксимильнойПодписиИПечати.mdo @@ -0,0 +1,8 @@ + + + ИнструкцияПоСозданиюФаксимильнойПодписиИПечати + + ru + Инструкция по созданию факсимильной подписи и печати + + diff --git a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs index 8e42d3445..037f99c92 100644 --- a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs +++ b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs @@ -295,6 +295,19 @@ xs:boolean + + Многопоточный + Многопоточный + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Многопоточный</v8:content> + </v8:item> + + + xs:boolean + + ИсточникДанных1 Обработчики @@ -591,6 +604,9 @@ ЗапускатьИВПодчиненномУзлеРИБСФильтрами + + Многопоточный + diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index 0ec56d7bd..806913d16 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,17 +1,17 @@ - + БиблиотекаСтандартныхПодсистем ru Библиотека стандартных подсистем, редакция 3.0 - - - - - - - + + + + + + + ManagedApplication PersonalComputer Russian @@ -19,7 +19,7 @@ Role.АдминистраторСистемы Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Фирма "1С" - 3.0.1.336 + 3.0.2.150 http://downloads.v8.1c.ru/tmplts/ true @@ -109,6 +109,7 @@ StyleItem.ФонУправляющегоПоля StyleItem.ЦветПустойГиперссылки StyleItem.ЦветРазделаПанелиФункций + StyleItem.ЦветТекстаНевыбраннойКартинки StyleItem.ЦветФонаПредупреждения CommonPicture.GoogleMaps CommonPicture.Skype @@ -120,6 +121,9 @@ CommonPicture.БыстрыйДоступУдалить CommonPicture.ВариантыОтчетовДоступныеВсемПользователям CommonPicture.ВедущаяКонечнаяТочка + CommonPicture.ВертикальноеПоложениеВерх + CommonPicture.ВертикальноеПоложениеНиз + CommonPicture.ВертикальноеПоложениеЦентр CommonPicture.Взаимодействия CommonPicture.ВидСравнения CommonPicture.ВидыКонтактнойИнформации @@ -202,6 +206,7 @@ CommonPicture.ИспользоватьПоставляемыйМакет CommonPicture.ИсторияВерсий CommonPicture.ИсторияИзменений + CommonPicture.Количество CommonPicture.КоличествоРассмотрено CommonPicture.КоллекцияВариантыВажности CommonPicture.КоллекцияВидыАктивныхПользователей @@ -233,7 +238,9 @@ CommonPicture.КонтактнаяИнформацияНеактуально CommonPicture.КонтактнаяИнформацияПерейтиПоСсылке CommonPicture.КурсивноеНачертание + CommonPicture.Максимум CommonPicture.МенюДополнительныеФункции + CommonPicture.Минимум CommonPicture.НаписатьSMS CommonPicture.Напоминание CommonPicture.НезавершившаясяПроверка @@ -310,6 +317,7 @@ CommonPicture.Рассчитать CommonPicture.РассылкаОтчетов CommonPicture.РасширениеКонфигурацииИзГлавногоУзла + CommonPicture.РедактироватьАдресСайта CommonPicture.РедактироватьМакет CommonPicture.РедактироватьФайл CommonPicture.РежимИспользованияПриложенияВСервисеЛокально @@ -349,7 +357,10 @@ CommonPicture.СостояниеРассылкиОтчетов CommonPicture.СостоянияПользователей CommonPicture.СостоянияПроцессов + CommonPicture.СостоянияРасширенийБудетПодключено CommonPicture.СостоянияРасширенийКонфигурации + CommonPicture.СостоянияРасширенийОшибка + CommonPicture.СостоянияРасширенийПодключено CommonPicture.СохранитьВариантОтчета CommonPicture.СохранитьФайлКак CommonPicture.СправкаВНачало @@ -366,11 +377,13 @@ CommonPicture.СправочникПВХПомеченНаУдалениеКоннекторЛевоВерх CommonPicture.СправочникПВХПомеченНаУдалениеКоннекторЛевоНиз CommonPicture.СправочникПВХПомеченНаУдалениеКоннекторНиз + CommonPicture.Среднее CommonPicture.СтатусыДокумента CommonPicture.СтатусыСопоставленияОбъектов CommonPicture.СтрелкаВверх CommonPicture.СтрелкаВлево CommonPicture.СтрелкаВниз + CommonPicture.СтрелкаВнизЗеленая CommonPicture.СтрелкаВнизСправка CommonPicture.СтрелкаВправо CommonPicture.СтрелкаВправоКрасная @@ -399,8 +412,10 @@ CommonPicture.ФорматWord CommonPicture.ФорматWord2007 CommonPicture.ФорматПустой + CommonPicture.Фотокамера CommonPicture.ЦветТекста CommonPicture.ЦветФона + CommonPicture.Шрифт CommonPicture.ЭлектронноеПисьмо CommonPicture.ЭлектронноеПисьмоВходящее CommonPicture.ЭлектронноеПисьмоИсходящее @@ -423,7 +438,7 @@ SessionParameter.ОбластьДанныхЗначение SessionParameter.ОбластьДанныхИспользование SessionParameter.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных - SessionParameter.ОграничениеДоступаНаУровнеЗаписейВключено + SessionParameter.ОграничениеДоступаНаУровнеЗаписейИспользуется SessionParameter.ОграничениеДоступаНаУровнеЗаписейУниверсально SessionParameter.ОтключениеОбновленияКлючейДоступа SessionParameter.ОтмененныеДлительныеОперации @@ -449,6 +464,7 @@ SessionParameter.СпискиСОграничениемЧерезКлючиДоступаПользователей SessionParameter.СпискиСОграничениемЧерезКлючиДоступаПользователейИГруппДоступа SessionParameter.СпискиСОтключеннымОграничениемЧтения + SessionParameter.ТаблицыРасширенийСОграничениемДоступа SessionParameter.ТаблицыСОтдельнымиНастройкамиПрав SessionParameter.ТекущийВнешнийПользователь SessionParameter.ТекущийПользователь @@ -482,6 +498,7 @@ Role.ДобавлениеИзменениеОпросов Role.ДобавлениеИзменениеОтветовНаВопросыАнкет Role.ДобавлениеИзменениеПапокИФайлов + Role.ДобавлениеИзменениеПапокИФайловВнешнимиПользователями Role.ДобавлениеИзменениеПользователей Role.ДобавлениеИзменениеРассылокОтчетов Role.ДобавлениеИзменениеРолейИсполнителей @@ -492,6 +509,7 @@ Role.ЗапускAutomation Role.ЗапускВебКлиента Role.ЗапускВнешнегоСоединения + Role.ЗапускМобильногоКлиента Role.ЗапускТолстогоКлиента Role.ЗапускТонкогоКлиента Role.ИзменениеВыполнениеЗадач @@ -508,6 +526,7 @@ Role.ПолныеПрава Role.ПросмотрЖурналаРегистрации Role.ПросмотрОписанияИзмененийПрограммы + Role.ПросмотрОтчетаДвиженияДокумента Role.ПросмотрСвязанныеДокументы Role.РедактированиеПечатныхФорм Role.РедактированиеРеквизитовОбъектов @@ -530,6 +549,7 @@ Role.ЧтениеРезультатовПроверкиУчета Role.ЧтениеШаблоновСообщений CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную + CommonTemplate.ИнструкцияПоСозданиюФаксимильнойПодписиИПечати CommonTemplate.КомпонентаTWAIN CommonTemplate.КомпонентаПечатиQRКода CommonTemplate.КомпонентаПоискаСтрок @@ -538,14 +558,15 @@ CommonTemplate.СтруктураПодчиненности FilterCriterion.СвязанныеДокументы FilterCriterion.ФайлыВТоме + CommonModule.АдминистрированиеКластера + CommonModule.АдминистрированиеКластераCOM CommonModule.АдминистрированиеКластераCOMКлиентСервер + CommonModule.АдминистрированиеКластераRAS CommonModule.АдминистрированиеКластераRASКлиентСервер CommonModule.АдминистрированиеКластераКлиентСервер CommonModule.АдресныйКлассификатор CommonModule.АдресныйКлассификаторВМоделиСервисаСлужебный - CommonModule.АдресныйКлассификаторВызовСервера CommonModule.АдресныйКлассификаторКлиент - CommonModule.АдресныйКлассификаторКлиентСервер CommonModule.АдресныйКлассификаторПовтИсп CommonModule.АдресныйКлассификаторСлужебный CommonModule.АнализЖурналаРегистрацииКлиент @@ -570,6 +591,7 @@ CommonModule.ВерсионированиеОбъектов CommonModule.ВерсионированиеОбъектовКлиент CommonModule.ВерсионированиеОбъектовПереопределяемый + CommonModule.ВерсионированиеОбъектовСлужебныйВызовСервера CommonModule.ВерсионированиеОбъектовСобытия CommonModule.Взаимодействия CommonModule.ВзаимодействияВызовСервера @@ -589,17 +611,19 @@ CommonModule.ВнешниеКомпонентыСлужебныйВызовСервера CommonModule.ВнешниеКомпонентыСлужебныйКлиент CommonModule.ВнешниеПользователи + CommonModule.ВнешниеПользователиКлиент CommonModule.ВызовОнлайнПоддержки CommonModule.ВызовОнлайнПоддержкиВызовСервера CommonModule.ВызовОнлайнПоддержкиКлиент CommonModule.ВызовОнлайнПоддержкиПереопределяемый CommonModule.ГрафикиРаботы - CommonModule.ГрафикиРаботыКлиентСервер + CommonModule.ГрафикиРаботыКлиент CommonModule.ГрупповоеИзменениеОбъектовКлиент CommonModule.ГрупповоеИзменениеОбъектовПереопределяемый CommonModule.ДатыЗапретаИзменения CommonModule.ДатыЗапретаИзмененияПереопределяемый CommonModule.ДатыЗапретаИзмененияСлужебный + CommonModule.ДатыЗапретаИзмененияСлужебныйКлиент CommonModule.ДатыЗапретаИзмененияСлужебныйКлиентСервер CommonModule.ДатыЗапретаИзмененияСлужебныйПовтИсп CommonModule.ДлительныеОперации @@ -638,6 +662,7 @@ CommonModule.ЗащитаПерсональныхДанныхКлиент CommonModule.ЗащитаПерсональныхДанныхПереопределяемый CommonModule.ЗащитаПерсональныхДанныхПовтИсп + CommonModule.ЗаявлениеНаСертификатПереопределяемый CommonModule.ИнтеграцияПодсистемБСП CommonModule.ИнтеграцияПодсистемБСПКлиент CommonModule.ИнтеграцияСТехнологиейСервиса @@ -658,6 +683,9 @@ CommonModule.КонтрольВеденияУчетаСлужебныйКлиент CommonModule.КонтрольВеденияУчетаСлужебныйПовтИсп CommonModule.КурсыВалютСлужебныйВМоделиСервиса + CommonModule.ЛокализацияКлиент + CommonModule.ЛокализацияКлиентСервер + CommonModule.ЛокализацияСервер CommonModule.НапоминанияПользователя CommonModule.НапоминанияПользователяВызовСервера CommonModule.НапоминанияПользователяГлобальный @@ -703,6 +731,7 @@ CommonModule.ОбновлениеКонфигурации CommonModule.ОбновлениеКонфигурацииВызовСервера CommonModule.ОбновлениеКонфигурацииКлиент + CommonModule.ОбсужденияСлужебный CommonModule.ОбсужденияСлужебныйВызовСервера CommonModule.ОбсужденияСлужебныйКлиент CommonModule.ОбщегоНазначения @@ -715,6 +744,7 @@ CommonModule.ОбщегоНазначенияПереопределяемый CommonModule.ОбщегоНазначенияПовтИсп CommonModule.ОбщегоНазначенияСлужебныйКлиент + CommonModule.ОбщегоНазначенияСлужебныйКлиентСервер CommonModule.ОрганизацииПереопределяемый CommonModule.ОрганизацииСервер CommonModule.ОтправкаSMS @@ -763,17 +793,20 @@ CommonModule.ПолнотекстовыйПоискКлиент CommonModule.ПолнотекстовыйПоискСервер CommonModule.ПолнотекстовыйПоискСерверПереопределяемый + CommonModule.ПолнотекстовыйПоискСлужебныйВызовСервера + CommonModule.ПолнотекстовыйПоискСлужебныйКлиент CommonModule.ПолучениеФайловИзИнтернета CommonModule.ПолучениеФайловИзИнтернетаКлиент CommonModule.ПолучениеФайловИзИнтернетаКлиентСервер CommonModule.ПолучениеФайловИзИнтернетаСлужебный + CommonModule.ПолучениеФайловИзИнтернетаСлужебныйВызовСервера CommonModule.Пользователи + CommonModule.ПользователиКлиент CommonModule.ПользователиКлиентСервер CommonModule.ПользователиПереопределяемый CommonModule.ПользователиСлужебный CommonModule.ПользователиСлужебныйВМоделиСервиса CommonModule.ПользователиСлужебныйВМоделиСервисаКлиент - CommonModule.ПользователиСлужебныйВызовСервера CommonModule.ПользователиСлужебныйКлиент CommonModule.ПользователиСлужебныйКлиентСервер CommonModule.ПользователиСлужебныйПовтИсп @@ -799,6 +832,7 @@ CommonModule.РаботаВМоделиСервисаПереопределяемый CommonModule.РаботаВМоделиСервисаПовтИсп CommonModule.РаботаСАдресами + CommonModule.РаботаСАдресамиКлиент CommonModule.РаботаСАдресамиКлиентСервер CommonModule.РаботаСБанками CommonModule.РаботаСБанкамиГлобальный @@ -876,10 +910,11 @@ CommonModule.СтандартныеПодсистемыГлобальный CommonModule.СтандартныеПодсистемыКлиент CommonModule.СтандартныеПодсистемыКлиентПовтИсп - CommonModule.СтандартныеПодсистемыКлиентСервер + CommonModule.СтандартныеПодсистемыКлиентСерверЛокализация CommonModule.СтандартныеПодсистемыПовтИсп CommonModule.СтандартныеПодсистемыСервер CommonModule.СтроковыеФункцииКлиентСервер + CommonModule.СтроковыеФункцииКлиентСерверРФ CommonModule.СтруктураПодчиненностиПереопределяемый CommonModule.СтруктураПодчиненностиСлужебный CommonModule.ТекущиеДелаПереопределяемый @@ -889,8 +924,11 @@ CommonModule.ТрансляцияXDTO CommonModule.ТрансляцияXDTOПереопределяемый CommonModule.ТрансляцияXDTOСлужебный + CommonModule.УдалениеПомеченныхОбъектов + CommonModule.УдалениеПомеченныхОбъектовКлиент CommonModule.УдалениеПомеченныхОбъектовПереопределяемый CommonModule.УдалениеПомеченныхОбъектовСлужебный + CommonModule.УдалениеПомеченныхОбъектовСлужебныйВызовСервера CommonModule.УправлениеДоступом CommonModule.УправлениеДоступомПереопределяемый CommonModule.УправлениеДоступомСлужебный @@ -900,9 +938,11 @@ CommonModule.УправлениеДоступомСлужебныйКлиентСервер CommonModule.УправлениеДоступомСлужебныйПовтИсп CommonModule.УправлениеИтогамиИАгрегатамиСлужебный + CommonModule.УправлениеКолонтитулами CommonModule.УправлениеКонтактнойИнформацией CommonModule.УправлениеКонтактнойИнформациейКлиент CommonModule.УправлениеКонтактнойИнформациейКлиентСервер + CommonModule.УправлениеКонтактнойИнформациейПереопределяемый CommonModule.УправлениеКонтактнойИнформациейСлужебный CommonModule.УправлениеКонтактнойИнформациейСлужебныйВызовСервера CommonModule.УправлениеКонтактнойИнформациейСлужебныйПовтИсп @@ -911,16 +951,22 @@ CommonModule.УправлениеПечатьюOOWriterКлиент CommonModule.УправлениеПечатьюВызовСервера CommonModule.УправлениеПечатьюКлиент + CommonModule.УправлениеПечатьюКлиентПереопределяемый CommonModule.УправлениеПечатьюКлиентСервер CommonModule.УправлениеПечатьюПереопределяемый + CommonModule.УправлениеПечатьюРФ CommonModule.УправлениеПечатьюСлужебный CommonModule.УправлениеПечатьюСлужебныйКлиент CommonModule.УправлениеСвойствами CommonModule.УправлениеСвойствамиКлиент CommonModule.УправлениеСвойствамиПереопределяемый + CommonModule.УправлениеСвойствамиПовтИсп CommonModule.УправлениеСвойствамиСлужебный CommonModule.УправлениеЭлектроннойПочтой CommonModule.УправлениеЭлектроннойПочтойКлиент + CommonModule.ФайловаяСистема + CommonModule.ФайловаяСистемаКлиент + CommonModule.ФайловаяСистемаСлужебныйКлиент CommonModule.ФайловыеФункции CommonModule.ФайловыеФункцииКлиент CommonModule.ФайловыеФункцииСлужебныйВМоделиСервиса @@ -943,6 +989,7 @@ CommonModule.ЭлектроннаяПодписьКлиент CommonModule.ЭлектроннаяПодписьКлиентПереопределяемый CommonModule.ЭлектроннаяПодписьКлиентСервер + CommonModule.ЭлектроннаяПодписьЛокализацияКлиентСервер CommonModule.ЭлектроннаяПодписьПереопределяемый CommonModule.ЭлектроннаяПодписьСлужебный CommonModule.ЭлектроннаяПодписьСлужебныйВызовСервера @@ -957,6 +1004,7 @@ XDTOPackage.ApdexExport XDTOPackage.ApdexExport_1_0_0_2 XDTOPackage.ApdexExport_1_0_0_3 + XDTOPackage.ApdexExport_1_0_0_4 XDTOPackage.ApplicationExtensionsManifest_1_0_0_1 XDTOPackage.ApplicationExtensionsPermissions_1_0_0_1 XDTOPackage.ApplicationPermissions_1_0_0_1 @@ -1018,12 +1066,14 @@ EventSubscription.ОбновитьПредставлениеВнешнегоПользователя EventSubscription.ОбновитьСостояниеБизнесПроцесса EventSubscription.ОбновлениеВерсииДатЗапретаИзмененияПослеЗагрузкиДанных + EventSubscription.ОбработкаПроверкиЗаполненияПрисоединенногоФайла EventSubscription.ОтключитьАвтоматическуюСинхронизациюДанных EventSubscription.ОтключитьИспользованиеПланаОбмена EventSubscription.ОтменитьОтправкуДанныхУзлаВРаспределеннойИнформационнойБазе EventSubscription.ОчиститьИнформациюОбАвтореВерсии EventSubscription.ОчиститьСсылкиНаУзелИнформационнойБазы EventSubscription.ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия + EventSubscription.ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений EventSubscription.ПолучениеПолейПредставленияВзаимодействия EventSubscription.ПолучениеПредставленияВзаимодействия EventSubscription.ПолучитьПоляПредставленияБизнесПроцесса @@ -1067,6 +1117,7 @@ ScheduledJob.ОбновлениеДоступаНаУровнеЗаписей ScheduledJob.ОбновлениеИндексаППД ScheduledJob.ОбновлениеОбластейДанных + ScheduledJob.ОбновлениеПредопределенныхВариантовОтчетов ScheduledJob.ОбновлениеСтатусовДоставкиSMS ScheduledJob.ОбслуживаниеОбластейДанных ScheduledJob.ОтложенноеОбновлениеИБ @@ -1177,8 +1228,10 @@ DefinedType.ВладелецШаблонаСообщения DefinedType.ВнешнийПользователь DefinedType.ВнешнийПользовательОбъект + DefinedType.ДенежнаяСуммаЛюбогоЗнака + DefinedType.ДенежнаяСуммаНеотрицательная DefinedType.ЗначениеДоступа - DefinedType.ЗначениеДоступаСГруппамиЗначенийДоступаОбъект + DefinedType.ЗначениеДоступаОбъект DefinedType.Интервьюер DefinedType.КонтактВзаимодействия DefinedType.КонтекстПроверокВеденияУчета @@ -1207,7 +1260,6 @@ DefinedType.СубъектПерсональныхДанных DefinedType.УточнениеКонтекстаПроверокВеденияУчета DefinedType.ФизическоеЛицо - CommonCommand.ВерсииФайла CommonCommand.ВремяТекущегоСеанса CommonCommand.ВсеФайлы CommonCommand.ДобавитьПользователейСервиса @@ -1225,6 +1277,7 @@ CommonCommand.МоиЗаметкиПоПредмету CommonCommand.Напомнить CommonCommand.НастроитьПрава + CommonCommand.НастройкаКолонтитулов CommonCommand.НастройкаОбменаСообщениями CommonCommand.НастройкаОнлайнПоддержки CommonCommand.НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты @@ -1233,6 +1286,7 @@ CommonCommand.НастройкиСинхронизацииДанных CommonCommand.НачатьИнтервью CommonCommand.ОбменСообщениями + CommonCommand.Обсуждения CommonCommand.ОтправитьSMS CommonCommand.ОтправитьПисьмо CommonCommand.ПанельОтчетовАдминистрирование @@ -1347,6 +1401,7 @@ Constant.НастройкаПодчиненногоУзлаРИБЗавершена Constant.НастройкаПроксиСервера Constant.НастройкиВходаПользователей + Constant.НастройкиКолонтитулов Constant.НастройкиПодчиненногоУзлаРИБ Constant.НеИспользоватьРазделениеПоОбластямДанных Constant.ОграничиватьДоступНаУровнеЗаписей @@ -1404,6 +1459,7 @@ CommonForm.АутентификацияВСервисе CommonForm.БлокировкаРаботыСВнешнимиРесурсами CommonForm.ВводЗначенийСпискомСФлажками + CommonForm.ВводНаРазныхЯзыках CommonForm.Вопрос CommonForm.ВопросОбУстановкеВнешнейКомпоненты CommonForm.ВопросОбУстановкеРасширенияРаботыСКриптографией @@ -1432,6 +1488,7 @@ CommonForm.МастерАнкетыПоРазделам CommonForm.НапоминаниеПриРедактировании CommonForm.НастройкаДоступаКСервисуMorpher + CommonForm.НастройкаКолонтитулов CommonForm.НастройкаКомандПечати CommonForm.НастройкаМоихОтчетовИОбработок CommonForm.НастройкаОбменаСообщениями @@ -1446,7 +1503,6 @@ CommonForm.ОписаниеИзмененийПрограммы CommonForm.ОтправкаSMS CommonForm.ОтправкаСообщения - CommonForm.ОтправкаТабличныхДокументовПоПочте CommonForm.ОтчетОСохраненииФайловЭлектронныхПодписей CommonForm.ПанельОтчетов CommonForm.ПараметрыАдминистрированияПрограммы @@ -1456,7 +1512,6 @@ CommonForm.ПоддерживаемыеКлиентскиеПриложения CommonForm.ПодключениеКонечнойТочки CommonForm.ПоискИсполняемогоФайлаОнлайнПоддержки - CommonForm.ПоказателиВыделенныхЯчеек CommonForm.ПользователиСервиса CommonForm.ПраваДоступа CommonForm.ПраваДоступаУпрощенно @@ -1607,10 +1662,10 @@ Enum.СостоянияПроцессовДляЗапуска Enum.СостоянияСообщенияSMS Enum.СостоянияСубъектовДляСкрытия - Enum.СпособВыполненияПроверки Enum.СпособыPOP3Аутентификации Enum.СпособыSMTPАутентификации Enum.СпособыВызоваДополнительныхОбработок + Enum.СпособыВыполненияПроверки Enum.СпособыЗаполненияГрафикаРаботы Enum.СпособыОткрытияФайлаНаПросмотр Enum.СпособыОтображенияПодсказок @@ -1817,6 +1872,7 @@ InformationRegister.ПользовательскиеМакетыПечати InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам InformationRegister.ПоставляемыеДанныеТребующиеОбработки + InformationRegister.ПоставляемыеМакетыПечати InformationRegister.ПраваРолей InformationRegister.ПравилаДляОбменаДанными InformationRegister.ПредметыПапкиВзаимодействий diff --git a/SSL/src/Configuration/ExternalConnectionModule.bsl b/SSL/src/Configuration/ExternalConnectionModule.bsl index 8b1378917..167034332 100644 --- a/SSL/src/Configuration/ExternalConnectionModule.bsl +++ b/SSL/src/Configuration/ExternalConnectionModule.bsl @@ -1 +1,9 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + diff --git a/SSL/src/Configuration/ManagedApplicationModule.bsl b/SSL/src/Configuration/ManagedApplicationModule.bsl index 7de630de2..81afc74fe 100644 --- a/SSL/src/Configuration/ManagedApplicationModule.bsl +++ b/SSL/src/Configuration/ManagedApplicationModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных // СтандартныеПодсистемы diff --git a/SSL/src/Configuration/OrdinaryApplicationModule.bsl b/SSL/src/Configuration/OrdinaryApplicationModule.bsl index 7de630de2..81afc74fe 100644 --- a/SSL/src/Configuration/OrdinaryApplicationModule.bsl +++ b/SSL/src/Configuration/OrdinaryApplicationModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных // СтандартныеПодсистемы diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index d06ce9f3a..d1a05ed8d 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,1ab65492-1a3c-48ed-835e-88ca0e19a3c4,1,e9cbb342-a556-4ffe-a71d-9704bf0a4f8e,"3.0.1.336","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5875,1,0,0308b866-dbba-4a87-b7ad-0313cedede78,0308b866-dbba-4a87-b7ad-0313cedede78,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,c27472ee-879a-4746-9d21-122738ec80b7,c27472ee-879a-4746-9d21-122738ec80b7,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,1,0,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,1,0,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,1,0,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,1,0,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,1,0,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,1,0,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,1,0,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,1,0,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,1,0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,1,0,e15c3525-3453-4b62-834e-7c69f9efea51,e15c3525-3453-4b62-834e-7c69f9efea51,1,0,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,1,0,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,1,0,ad73f3a3-1dad-4920-af41-bda2b947a2f7,ad73f3a3-1dad-4920-af41-bda2b947a2f7,1,0,98b67b5a-3550-4a64-9e07-07fcc9154c73,98b67b5a-3550-4a64-9e07-07fcc9154c73,1,0,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,1,0,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,1,0,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,1,0,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,1,0,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,1,0,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,1,0,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,1,0,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,1,0,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,1,0,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,1,0,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,1,0,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,1,0,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,1,0,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,1,0,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,1,0,9eea8645-1ba7-4faf-9c29-868bf99964dd,9eea8645-1ba7-4faf-9c29-868bf99964dd,1,0,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,1,0,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,1,0,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,1,0,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,1,0,d5a5f53b-9cd5-4036-a379-31680cec3c24,d5a5f53b-9cd5-4036-a379-31680cec3c24,1,0,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,1,0,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,1,0,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,1,0,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,1,0,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,1,0,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,1,0,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,1,0,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,1,0,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,1,0,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,1,0,0da019ca-1fc7-4aff-8998-3ddcccf10872,0da019ca-1fc7-4aff-8998-3ddcccf10872,1,0,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,1,0,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,1,0,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,1,0,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,1,0,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,1,0,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,1,0,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,1,0,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,1,0,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,1,0,43d8dd53-df3e-407e-a3c1-5b893cc1976c,43d8dd53-df3e-407e-a3c1-5b893cc1976c,1,0,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,1,0,5a88f624-7b7e-43fe-8bc4-ae85d832a855,5a88f624-7b7e-43fe-8bc4-ae85d832a855,1,0,42e39ef7-268f-4053-b4e5-4bceab17d3e4,42e39ef7-268f-4053-b4e5-4bceab17d3e4,1,0,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,1,0,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,1,0,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,1,0,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,1,0,fce03f58-7f68-4d7c-a999-687667c1f03d,fce03f58-7f68-4d7c-a999-687667c1f03d,1,0,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,1,0,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,1,0,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,1,0,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,1,0,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,1,0,9200527c-b6b9-4962-9440-10449583e1e3,9200527c-b6b9-4962-9440-10449583e1e3,1,0,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,1,0,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,1,0,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,1,0,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,1,0,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,1,0,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,1,0,0da8a402-ea0f-488a-a087-77990e85a643,0da8a402-ea0f-488a-a087-77990e85a643,1,0,5e7ea635-f307-43cb-9aa7-2c99997b3c2d,5e7ea635-f307-43cb-9aa7-2c99997b3c2d,1,0,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,1,0,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,1,0,8b4614aa-c769-49f4-a281-a0ffb101abf1,8b4614aa-c769-49f4-a281-a0ffb101abf1,1,0,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,1,0,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,1,0,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,1,0,4c3a39e3-40ee-423b-91f0-14b60e045b40,4c3a39e3-40ee-423b-91f0-14b60e045b40,1,0,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,1,0,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,1,0,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,1,0,a54f2d41-a05e-4878-80c6-81ca2899fa4c,a54f2d41-a05e-4878-80c6-81ca2899fa4c,1,0,23a898d9-5bcb-4744-ab6c-97b17dc98f20,23a898d9-5bcb-4744-ab6c-97b17dc98f20,1,0,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,1,0,f8f56806-ed7e-4059-a0c8-940538c14c98,f8f56806-ed7e-4059-a0c8-940538c14c98,1,0,9ff9f92b-c509-48da-82ce-15b524a895d6,9ff9f92b-c509-48da-82ce-15b524a895d6,1,0,c8bf96c8-f359-4940-8e87-3d190371d6d3,c8bf96c8-f359-4940-8e87-3d190371d6d3,1,0,477f0b81-0eb1-4de1-8cb5-38f1e0823947,477f0b81-0eb1-4de1-8cb5-38f1e0823947,1,0,d914eaa9-ce85-4df7-a545-2d411ef915b0,d914eaa9-ce85-4df7-a545-2d411ef915b0,1,0,41881344-82b7-4904-9ab8-0207d9bcd0a9,41881344-82b7-4904-9ab8-0207d9bcd0a9,1,0,ef4d648f-4cac-4df9-9880-2aa13c422d10,ef4d648f-4cac-4df9-9880-2aa13c422d10,1,0,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,1,0,7185a8f8-48c4-43a9-b31f-102302b8f152,7185a8f8-48c4-43a9-b31f-102302b8f152,1,0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,1,0,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,1,0,c573a29f-4c39-402d-8af4-e0fff80877f8,c573a29f-4c39-402d-8af4-e0fff80877f8,1,0,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,1,0,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,1,0,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,1,0,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,1,0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,1,0,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,1,0,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,1,0,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,1,0,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,1,0,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,1,0,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,1,0,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,1,0,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,1,0,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,1,0,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,1,0,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,1,0,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,1,0,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,1,0,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,1,0,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,1,0,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,1,0,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,1,0,7f7598e5-ca54-487e-b95c-b18d330b034c,7f7598e5-ca54-487e-b95c-b18d330b034c,1,0,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,1,0,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,1,0,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,1,0,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,1,0,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,1,0,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,1,0,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,1,0,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,1,0,64e03321-33a4-424d-a101-90f1e0da4c2e,64e03321-33a4-424d-a101-90f1e0da4c2e,1,0,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,1,0,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,1,0,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,1,0,a1d80053-ef03-4c00-9fc9-266e61aeaffb,a1d80053-ef03-4c00-9fc9-266e61aeaffb,1,0,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,1,0,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,1,0,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,1,0,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,1,0,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,1,0,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,1,0,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,1,0,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,1,0,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,1,0,691f9902-6b95-4579-a3d9-3b2b5b548776,691f9902-6b95-4579-a3d9-3b2b5b548776,1,0,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,1,0,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,1,0,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,1,0,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,1,0,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,1,0,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,1,0,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,1,0,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,1,0,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,1,0,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,1,0,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,1,0,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,1,0,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,1,0,82b05859-4c4d-4d5a-a620-cc6aab10f527,82b05859-4c4d-4d5a-a620-cc6aab10f527,1,0,a3131bf3-88b1-431c-a01c-be6e26396f91,a3131bf3-88b1-431c-a01c-be6e26396f91,1,0,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,1,0,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,1,0,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1,0,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,1,0,2a12ce95-3214-4bd2-a0e6-c2af41875821,2a12ce95-3214-4bd2-a0e6-c2af41875821,1,0,bf05548c-babf-402b-b698-9a62e7c69add,bf05548c-babf-402b-b698-9a62e7c69add,1,0,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,1,0,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,1,0,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,1,0,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,1,0,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,1,0,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,1,0,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,1,0,3ee058a9-aff5-46f0-8928-8a417e7800d4,3ee058a9-aff5-46f0-8928-8a417e7800d4,1,0,c9a03f19-42bb-4e07-8ce8-1b954e431ada,c9a03f19-42bb-4e07-8ce8-1b954e431ada,1,0,ed4edc6f-048a-40d5-8f61-989895c95cf3,ed4edc6f-048a-40d5-8f61-989895c95cf3,1,0,c2049ace-3095-4dd7-9cc0-7721118451ad,c2049ace-3095-4dd7-9cc0-7721118451ad,1,0,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,1,0,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,1,0,2465986e-7519-4638-9f62-5f692bebeeac,2465986e-7519-4638-9f62-5f692bebeeac,1,0,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,1,0,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,1,0,022f99dd-e1b7-42a7-8141-a8c2e8628901,022f99dd-e1b7-42a7-8141-a8c2e8628901,1,0,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,1,0,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,1,0,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,1,0,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,1,0,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,1,0,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,1,0,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,1,0,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,1,0,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,1,0,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,1,0,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,1,0,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,1,0,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,1,0,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,1,0,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,1,0,db6679c4-a647-471a-9f90-40248eb18db9,db6679c4-a647-471a-9f90-40248eb18db9,1,0,2997e4da-d831-48e4-96e2-c29f9d077302,2997e4da-d831-48e4-96e2-c29f9d077302,1,0,30f59002-a23d-4eff-b84f-f280f11b220e,30f59002-a23d-4eff-b84f-f280f11b220e,1,0,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,1,0,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,1,0,14583452-805e-423d-be9a-e04683c7c46f,14583452-805e-423d-be9a-e04683c7c46f,1,0,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,1,0,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,1,0,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,1,0,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,1,0,b1e837ff-0edd-4525-b2e2-92cc7990e00e,b1e837ff-0edd-4525-b2e2-92cc7990e00e,1,0,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,1,0,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,1,0,cafbea88-86f0-4a44-98f4-70d1837da452,cafbea88-86f0-4a44-98f4-70d1837da452,1,0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,1,0,ceb286e9-4e7c-49fa-a695-424073e0dffc,ceb286e9-4e7c-49fa-a695-424073e0dffc,1,0,727689c3-c0d8-496f-a47b-4f3243ad8974,727689c3-c0d8-496f-a47b-4f3243ad8974,1,0,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,1,0,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,1,0,2522fce4-d121-482b-a39d-0c1a842d315e,2522fce4-d121-482b-a39d-0c1a842d315e,1,0,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,1,0,4bad7c64-131a-42cb-9be7-d61f14f456d0,4bad7c64-131a-42cb-9be7-d61f14f456d0,1,0,d46e141b-7a10-4d65-971f-3a35f2114017,d46e141b-7a10-4d65-971f-3a35f2114017,1,0,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,1,0,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,1,0,ba59393c-c499-4999-91d4-b9e34d94db0e,ba59393c-c499-4999-91d4-b9e34d94db0e,1,0,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,1,0,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1,0,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,1,0,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,1,0,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,1,0,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,1,0,772e7011-0019-4edc-b673-b7151cf4fa6c,772e7011-0019-4edc-b673-b7151cf4fa6c,1,0,21ac47fa-12c2-43e2-9b57-afdf521d3485,21ac47fa-12c2-43e2-9b57-afdf521d3485,1,0,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,1,0,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,1,0,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,1,0,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,1,0,8d1c44d7-52f2-4089-9d77-2f03bf051455,8d1c44d7-52f2-4089-9d77-2f03bf051455,1,0,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,1,0,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,1,0,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,1,0,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,1,0,8e87da88-9fa8-4dd8-b904-622b763239f4,8e87da88-9fa8-4dd8-b904-622b763239f4,1,0,529cc5b5-835f-4e70-9232-a9649fdc7ae5,529cc5b5-835f-4e70-9232-a9649fdc7ae5,1,0,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,1,0,4875a235-bcc8-47eb-83e3-a66f0f690b97,4875a235-bcc8-47eb-83e3-a66f0f690b97,1,0,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,1,0,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,1,0,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,1,0,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,1,0,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,1,0,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,1,0,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,1,0,330a176f-5b61-41f5-84bb-b99a9439c2a0,330a176f-5b61-41f5-84bb-b99a9439c2a0,1,0,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,1,0,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,1,0,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,1,0,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,1,0,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,1,0,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,1,0,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,1,0,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,1,0,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,1,0,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,1,0,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,1,0,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,1,0,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,1,0,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,1,0,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,1,0,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,1,0,4b07cdb0-c32e-4751-b317-bee62b43f128,4b07cdb0-c32e-4751-b317-bee62b43f128,1,0,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,1,0,62ef3558-5ad3-44ab-8578-1acbbfa54135,62ef3558-5ad3-44ab-8578-1acbbfa54135,1,0,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,1,0,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,1,0,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,1,0,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,1,0,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,1,0,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,1,0,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,1,0,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,1,0,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,1,0,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,1,0,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,1,0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1,0,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,1,0,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,1,0,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,1,0,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,1,0,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,1,0,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,1,0,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,1,0,2cea7641-6f1d-4bc7-9d38-8d99f196e0f5,2cea7641-6f1d-4bc7-9d38-8d99f196e0f5,1,0,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,1,0,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,1,0,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,1,0,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,1,0,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,1,0,6f21c34c-26aa-493d-aa08-2d4366b4064a,6f21c34c-26aa-493d-aa08-2d4366b4064a,1,0,0f55650a-2422-42a9-8258-61df4c17f1ef,0f55650a-2422-42a9-8258-61df4c17f1ef,1,0,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,1,0,3eaece9d-c9be-4b0b-a6f6-a3932274b806,3eaece9d-c9be-4b0b-a6f6-a3932274b806,1,0,5d9427ec-981d-4fb5-878b-8dba0d3a5536,5d9427ec-981d-4fb5-878b-8dba0d3a5536,1,0,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,1,0,a0047712-5769-495d-97af-20d06751a5b4,a0047712-5769-495d-97af-20d06751a5b4,1,0,e729c3c6-16e5-405b-99b1-a88022300c6d,e729c3c6-16e5-405b-99b1-a88022300c6d,1,0,9c089520-8233-42f6-8eee-9839ac708c6f,9c089520-8233-42f6-8eee-9839ac708c6f,1,0,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,1,0,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,1,0,89055896-49dd-4cfd-ab78-8ac3698e12d5,89055896-49dd-4cfd-ab78-8ac3698e12d5,1,0,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,1,0,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,1,0,672c4741-6d7b-4d3e-baa7-389bef0625d7,672c4741-6d7b-4d3e-baa7-389bef0625d7,1,0,04398ec0-1c13-43f8-8f5d-7b7619592a4d,04398ec0-1c13-43f8-8f5d-7b7619592a4d,1,0,ce463861-92df-47f2-bd0f-4a2dbf72aacc,ce463861-92df-47f2-bd0f-4a2dbf72aacc,1,0,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,1,0,1487d68c-7a2f-48cf-8c80-4074072ed52c,1487d68c-7a2f-48cf-8c80-4074072ed52c,1,0,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,1,0,d97c6536-fd62-4c9a-b83e-490a29a0721b,d97c6536-fd62-4c9a-b83e-490a29a0721b,1,0,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,1,0,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,1,0,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,1,0,6c07ddfb-8823-4953-9905-9550b847dc3f,6c07ddfb-8823-4953-9905-9550b847dc3f,1,0,2362a8d5-dca2-4527-acc0-63782377f28a,2362a8d5-dca2-4527-acc0-63782377f28a,1,0,dfd6d85c-a734-4458-83b0-87b5949f9c68,dfd6d85c-a734-4458-83b0-87b5949f9c68,1,0,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,1,0,79b6ecf5-8a6b-44a4-9587-5f8764463228,79b6ecf5-8a6b-44a4-9587-5f8764463228,1,0,cd49148c-e385-4b75-a758-a93196e73dba,cd49148c-e385-4b75-a758-a93196e73dba,1,0,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,1,0,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,1,0,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,1,0,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,1,0,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,1,0,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,1,0,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,1,0,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,1,0,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,1,0,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,1,0,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,1,0,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,1,0,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,1,0,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,1,0,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,1,0,8ccd9be8-ef26-49b9-8cee-03ae4e500386,8ccd9be8-ef26-49b9-8cee-03ae4e500386,1,0,ddca925c-fdcd-40ce-a504-4fca1758de3f,ddca925c-fdcd-40ce-a504-4fca1758de3f,1,0,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,1,0,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,1,0,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,1,0,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,1,0,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,1,0,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1,0,1328947f-91c3-43f4-a11e-f34893d987b3,1328947f-91c3-43f4-a11e-f34893d987b3,1,0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,1,0,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,1,0,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,1,0,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,1,0,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,1,0,aa8c4a71-3276-4b83-8be2-3528129e58b3,aa8c4a71-3276-4b83-8be2-3528129e58b3,1,0,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,1,0,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,1,0,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,1,0,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,1,0,53ee3eb6-d2d1-4fb3-8a78-1fa4543850a1,53ee3eb6-d2d1-4fb3-8a78-1fa4543850a1,1,0,0072986b-0463-4a39-9851-f9adeda99716,0072986b-0463-4a39-9851-f9adeda99716,1,0,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,1,0,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,1,0,0d4a26fb-7176-43f2-8767-d3e227c7306a,0d4a26fb-7176-43f2-8767-d3e227c7306a,1,0,933cbafc-5667-4a91-8b1d-dca3d7662522,933cbafc-5667-4a91-8b1d-dca3d7662522,1,0,59acaca9-ed29-4927-bee6-287c91934690,59acaca9-ed29-4927-bee6-287c91934690,1,0,d7e4795a-3431-4f7d-9699-4241611adcf0,d7e4795a-3431-4f7d-9699-4241611adcf0,1,0,ea0a498a-a1cb-4f28-88cb-0bc62971172b,ea0a498a-a1cb-4f28-88cb-0bc62971172b,1,0,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,1,0,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,1,0,b6e98aee-4936-491d-8c67-8490e1af2e34,b6e98aee-4936-491d-8c67-8490e1af2e34,1,0,0732ab1c-b49a-49ed-8667-65f4427cc301,0732ab1c-b49a-49ed-8667-65f4427cc301,1,0,b292eb46-df87-43c0-9a37-93c5a22af252,b292eb46-df87-43c0-9a37-93c5a22af252,1,0,0943dd00-1653-4760-a9fe-ebc083ffa660,0943dd00-1653-4760-a9fe-ebc083ffa660,1,0,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,1,0,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,1,0,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,1,0,f93c9a7f-0249-421e-b3d0-55f02d130017,f93c9a7f-0249-421e-b3d0-55f02d130017,1,0,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,1,0,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,1,0,bd727741-ba99-484d-9d7d-2c2ad7ddd1a5,bd727741-ba99-484d-9d7d-2c2ad7ddd1a5,1,0,90327957-5bdc-4949-883c-9eb50f527b3e,90327957-5bdc-4949-883c-9eb50f527b3e,1,0,031980f5-60e8-426a-9907-3afff75a6b05,031980f5-60e8-426a-9907-3afff75a6b05,1,0,1a26f2d5-2465-484c-9311-12d9b3b92ae3,1a26f2d5-2465-484c-9311-12d9b3b92ae3,1,0,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,1,0,64837ad8-3055-4da3-a39c-0e7db38b6084,64837ad8-3055-4da3-a39c-0e7db38b6084,1,0,695cda1d-b816-4200-9a71-490078a9faa7,695cda1d-b816-4200-9a71-490078a9faa7,1,0,75fc5bea-e239-4de1-ad68-6454876e4b9f,75fc5bea-e239-4de1-ad68-6454876e4b9f,1,0,77de81f0-97c5-4751-9f38-f5785c7c45e0,77de81f0-97c5-4751-9f38-f5785c7c45e0,1,0,31ba33d4-5941-4b11-ae99-b15188bfef76,31ba33d4-5941-4b11-ae99-b15188bfef76,1,0,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,1,0,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,1,0,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,1,0,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,1,0,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,1,0,e3b84128-95e1-45df-84db-5e1791779543,e3b84128-95e1-45df-84db-5e1791779543,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,e9d95895-8708-4035-89ad-72573b870491,e9d95895-8708-4035-89ad-72573b870491,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f0152598-ffa3-4eb7-811f-906e569373e6,f0152598-ffa3-4eb7-811f-906e569373e6,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,312118ff-a2a4-479c-964a-5250cca0cd20,312118ff-a2a4-479c-964a-5250cca0cd20,1,0,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,89318397-b3a6-4468-985b-ed5cb8ab5cdb,89318397-b3a6-4468-985b-ed5cb8ab5cdb,1,0,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,4436b2cf-2d71-401f-99fd-012ff0c91fbd,4436b2cf-2d71-401f-99fd-012ff0c91fbd,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,5396be45-d7c0-43df-aed4-cad062a02b11,5396be45-d7c0-43df-aed4-cad062a02b11,1,0,017e3da8-e48e-488b-9bbf-4fef1a4f3417,017e3da8-e48e-488b-9bbf-4fef1a4f3417,1,0,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,aebf163d-d8e8-492a-a973-8cb51982d475,aebf163d-d8e8-492a-a973-8cb51982d475,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,1e015740-5b45-4729-9732-57359a7c602f,1e015740-5b45-4729-9732-57359a7c602f,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,1,0,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,cd74d617-8ebe-4a7d-b011-38c98d856d8c,cd74d617-8ebe-4a7d-b011-38c98d856d8c,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,8de2c020-0ebe-4374-93d7-d2e19ed82470,8de2c020-0ebe-4374-93d7-d2e19ed82470,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,789a2027-8601-434c-bf47-37696a3966ad,789a2027-8601-434c-bf47-37696a3966ad,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,1,0,4c3085e1-2f86-4af4-a392-ab45e30a7152,4c3085e1-2f86-4af4-a392-ab45e30a7152,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,89cc9ae4-e933-4f4a-849f-48ef67b75819,89cc9ae4-e933-4f4a-849f-48ef67b75819,1,0,36e096be-ee28-437a-b8f2-c1e274c150e3,36e096be-ee28-437a-b8f2-c1e274c150e3,1,0,f6b69c2b-e32a-477f-9128-b61d8237290e,f6b69c2b-e32a-477f-9128-b61d8237290e,1,0,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,1,0,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,1,0,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1,0,c6af8b0f-3767-4198-88e2-f5763cb0294a,c6af8b0f-3767-4198-88e2-f5763cb0294a,1,0,b107a4a8-0db8-44f4-93f7-9f231e850398,b107a4a8-0db8-44f4-93f7-9f231e850398,1,0,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,1,0,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,1,0,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,1,0,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,1,0,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,1,0,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,1,0,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1,0,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,1,0,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,1,0,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,1,0,e51ae56c-d311-46b7-8d4c-19a432f4cd16,e51ae56c-d311-46b7-8d4c-19a432f4cd16,1,0,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,1,0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,1,0,23314bcd-2dd4-43f1-9fdb-ae182a48c886,23314bcd-2dd4-43f1-9fdb-ae182a48c886,1,0,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,1,0,9440a132-366f-4fc9-bd72-2544ba2b072a,9440a132-366f-4fc9-bd72-2544ba2b072a,1,0,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,1,0,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,1,0,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,1,0,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,1,0,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,1,0,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,1,0,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,1,0,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,1,0,cadb54f0-dcff-4f96-983e-a309fd72f330,cadb54f0-dcff-4f96-983e-a309fd72f330,1,0,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,1,0,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,1,0,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,1,0,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,1,0,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,1,0,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,1,0,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,1,0,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,1,0,dab1491b-0685-442d-b945-2bfde3f37933,dab1491b-0685-442d-b945-2bfde3f37933,1,0,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,1,0,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,1,0,9ff1c73e-71be-4ea6-97fb-e710d995ee62,9ff1c73e-71be-4ea6-97fb-e710d995ee62,1,0,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,1,0,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,1,0,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,1,0,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,1,0,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,1,0,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,1,0,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,1,0,9d669d30-a0af-4095-852a-96b4224ee933,9d669d30-a0af-4095-852a-96b4224ee933,1,0,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,1,0,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,1,0,18363a37-28b0-488b-a7d6-54d3596d2a6d,18363a37-28b0-488b-a7d6-54d3596d2a6d,1,0,e5f401b5-4672-4529-a8dd-6d819f3f269c,e5f401b5-4672-4529-a8dd-6d819f3f269c,1,0,126d5d78-a2b0-4c16-b429-bf8d251280e7,126d5d78-a2b0-4c16-b429-bf8d251280e7,1,0,f8f96dce-913c-4858-bcb7-dcfe3dc2f72e,f8f96dce-913c-4858-bcb7-dcfe3dc2f72e,1,0,70d93c88-c9e9-4b8e-b8f3-ef07c665ab5d,70d93c88-c9e9-4b8e-b8f3-ef07c665ab5d,1,0,12443114-1931-4eb7-968a-7dbe166b7298,12443114-1931-4eb7-968a-7dbe166b7298,1,0,0080c29d-ec54-43a8-aab8-c67e0279b6b7,0080c29d-ec54-43a8-aab8-c67e0279b6b7,1,0,a0271f6e-dc70-4dfe-a395-203e8a89f933,a0271f6e-dc70-4dfe-a395-203e8a89f933,1,0,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,1,0,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,1,0,d065c02e-9991-468a-ae32-b8c29d078d03,d065c02e-9991-468a-ae32-b8c29d078d03,1,0,c509683e-eb13-4e1a-91ed-cd6982ec5001,c509683e-eb13-4e1a-91ed-cd6982ec5001,1,0,88bf6f58-7943-42c4-bc0f-56b991590026,88bf6f58-7943-42c4-bc0f-56b991590026,1,0,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,1,0,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,1,0,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,1,0,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,1,0,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,1,0,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,1,0,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,1,0,70f156d8-9cb4-442d-a36b-7a43d03bcd12,70f156d8-9cb4-442d-a36b-7a43d03bcd12,1,0,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,1,0,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,1,0,f0a6de82-45ab-4153-bccf-df82fc960aa1,f0a6de82-45ab-4153-bccf-df82fc960aa1,1,0,77adf47b-6015-46fc-9e29-f1c025ea0d81,77adf47b-6015-46fc-9e29-f1c025ea0d81,1,0,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,1,0,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,1,0,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,1,0,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,1,0,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,1,0,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,1,0,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,1,0,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,1,0,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,1,0,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,1,0,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,1,0,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,1,0,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,1,0,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,1,0,e83ad33d-27df-4181-afd2-b7f416e6e705,e83ad33d-27df-4181-afd2-b7f416e6e705,1,0,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,1,0,f0438b0a-7916-4de4-a3a8-d43407c3295f,f0438b0a-7916-4de4-a3a8-d43407c3295f,1,0,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,1,0,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,1,0,f41e5a5b-394b-423a-bee5-ed4d1da0be71,f41e5a5b-394b-423a-bee5-ed4d1da0be71,1,0,23db175f-ddfb-4af7-9c0c-232b6adb7daf,23db175f-ddfb-4af7-9c0c-232b6adb7daf,1,0,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,1,0,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,1,0,4e309f26-35e8-49d9-bbd1-c7884e666dca,4e309f26-35e8-49d9-bbd1-c7884e666dca,1,0,84f05fe4-51d3-49a8-83e7-1cae2028147e,84f05fe4-51d3-49a8-83e7-1cae2028147e,1,0,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,1,0,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,1,0,c382ee3a-d0a8-4ed8-ac88-5558b631f448,c382ee3a-d0a8-4ed8-ac88-5558b631f448,1,0,3916ddbd-9023-42a4-849e-9cda6e591408,3916ddbd-9023-42a4-849e-9cda6e591408,1,0,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,1,0,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,1,0,f135b60e-6d28-4ba1-acd7-76090f14855d,f135b60e-6d28-4ba1-acd7-76090f14855d,1,0,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,1,0,c6267c5a-3878-4d0c-8674-4d4dd672b99c,c6267c5a-3878-4d0c-8674-4d4dd672b99c,1,0,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,1,0,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,1,0,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,1,0,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,1,0,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,1,0,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,1,0,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,1,0,45552b2f-0878-499e-8a27-4fcce93e5459,45552b2f-0878-499e-8a27-4fcce93e5459,1,0,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,1,0,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,1,0,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,1,0,8ca63a1d-4593-4f52-8b5e-4feb9f8487ca,8ca63a1d-4593-4f52-8b5e-4feb9f8487ca,1,0,1e4cc0d6-6e5e-4d16-ba44-060912ec292f,1e4cc0d6-6e5e-4d16-ba44-060912ec292f,1,0,e9311a22-56b5-4607-8eaa-52382ed040c3,e9311a22-56b5-4607-8eaa-52382ed040c3,1,0,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,1,0,87e6e315-01e0-41eb-8373-0a60635f2f7a,87e6e315-01e0-41eb-8373-0a60635f2f7a,1,0,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,1,0,8fdfef8d-502e-4d27-a539-e833048fa1eb,8fdfef8d-502e-4d27-a539-e833048fa1eb,1,0,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,1,0,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,1,0,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,1,0,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,1,0,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,1,0,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,1,0,0b303d25-e141-431f-828c-1778d3c247f6,0b303d25-e141-431f-828c-1778d3c247f6,1,0,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,1,0,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,1,0,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,1,0,976533bf-f162-42a1-a47e-6d681ee67b82,976533bf-f162-42a1-a47e-6d681ee67b82,1,0,19bc0dd8-9e6b-4855-bc42-b4e98443163f,19bc0dd8-9e6b-4855-bc42-b4e98443163f,1,0,a61e10af-eaba-4e7a-a641-65d77453a559,a61e10af-eaba-4e7a-a641-65d77453a559,1,0,edf81bbb-905a-474d-959a-db5629a8e104,edf81bbb-905a-474d-959a-db5629a8e104,1,0,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,1,0,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,1,0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,1,0,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1,0,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,1,0,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,1,0,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,1,0,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,1,0,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,1,0,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,1,0,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,1,0,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,1,0,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,1,0,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,1,0,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,1,0,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,1,0,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,1,0,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,1,0,f20a04a7-84fa-48e3-8ac5-28176c1fcada,f20a04a7-84fa-48e3-8ac5-28176c1fcada,1,0,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,1,0,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,1,0,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,1,0,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,1,0,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,1,0,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,1,0,3b033d29-0de7-49dd-90bc-f414b28426d7,3b033d29-0de7-49dd-90bc-f414b28426d7,1,0,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,1,0,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,1,0,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,1,0,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,1,0,2ca8bca9-813a-4833-8ef0-a5e83f91c10f,2ca8bca9-813a-4833-8ef0-a5e83f91c10f,1,0,59b34b58-6ac9-467e-963b-0cccbf098797,59b34b58-6ac9-467e-963b-0cccbf098797,1,0,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,1,0,a2c36563-126d-4c3a-9714-5b7a4903073b,a2c36563-126d-4c3a-9714-5b7a4903073b,1,0,2e4da82c-dddb-4462-b34f-6511cd2a8356,2e4da82c-dddb-4462-b34f-6511cd2a8356,1,0,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,1,0,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,1,0,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,1,0,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,1,0,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,1,0,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,1,0,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,1,0,d853dd5f-d987-4cdb-82b5-5e40a5a5e449,d853dd5f-d987-4cdb-82b5-5e40a5a5e449,1,0,dc16c546-eecc-49fe-a401-e2e3987faa1f,dc16c546-eecc-49fe-a401-e2e3987faa1f,1,0,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,1,0,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,1,0,646def82-bc88-4187-8be0-93938656a20f,646def82-bc88-4187-8be0-93938656a20f,1,0,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,1,0,a07971f5-ed6d-4829-a6bb-4b17cd5c6f6c,a07971f5-ed6d-4829-a6bb-4b17cd5c6f6c,1,0,06323ebd-5f74-494a-99a5-eb77e23d8637,06323ebd-5f74-494a-99a5-eb77e23d8637,1,0,9c4e28e8-7257-42ed-9fd8-793a0b8eb945,9c4e28e8-7257-42ed-9fd8-793a0b8eb945,1,0,9b7b6d0e-68d6-4a73-837c-2a6fd456b236,9b7b6d0e-68d6-4a73-837c-2a6fd456b236,1,0,7f6222c1-1a50-4565-b66b-bcb430674efc,7f6222c1-1a50-4565-b66b-bcb430674efc,1,0,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,1,0,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,1,0,2fb5650f-a5e5-4db8-a6a7-ca1101b41d3e,2fb5650f-a5e5-4db8-a6a7-ca1101b41d3e,1,0,b0fca543-6951-4233-bdf6-58082b22252a,b0fca543-6951-4233-bdf6-58082b22252a,1,0,4929cf90-54c6-412c-b2fa-dc8230fb8f85,4929cf90-54c6-412c-b2fa-dc8230fb8f85,1,0,52ae6431-afb3-4dea-b106-00e11b174ec7,52ae6431-afb3-4dea-b106-00e11b174ec7,1,0,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,1,0,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,1,0,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,1,0,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,1,0,8b83324c-e10e-49d1-99d7-5bc468c25975,8b83324c-e10e-49d1-99d7-5bc468c25975,1,0,ddb75923-27bf-4996-b024-4bc6eb0f59a7,ddb75923-27bf-4996-b024-4bc6eb0f59a7,1,0,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,1,0,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,1,0,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,1,0,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,1,0,3be0acc7-223a-46ec-9ea2-ec99b869fa78,3be0acc7-223a-46ec-9ea2-ec99b869fa78,1,0,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,1,0,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,1,0,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,1,0,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,1,0,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,1,0,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,1,0,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,1,0,486083d8-33b1-453f-9f05-5ff867e2f4ba,486083d8-33b1-453f-9f05-5ff867e2f4ba,1,0,e4f9d9f6-38d7-4056-a95a-987ad2da2211,e4f9d9f6-38d7-4056-a95a-987ad2da2211,1,0,22c21c2b-4297-43b2-88f0-9555d22f7a14,22c21c2b-4297-43b2-88f0-9555d22f7a14,1,0,734f61c4-5429-4a09-8697-8949ac5e6bd1,734f61c4-5429-4a09-8697-8949ac5e6bd1,1,0,d04e0e2d-0a5f-4866-b0b3-b582915db899,d04e0e2d-0a5f-4866-b0b3-b582915db899,1,0,19649d3f-52aa-4054-bb84-a6a11d212495,19649d3f-52aa-4054-bb84-a6a11d212495,1,0,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,1,0,58321939-f25a-456d-8dee-97e64743dc2e,58321939-f25a-456d-8dee-97e64743dc2e,1,0,416fba62-70c4-4f8c-b10b-56d47b27ca35,416fba62-70c4-4f8c-b10b-56d47b27ca35,1,0,ec48a164-bc30-4e36-a40a-a3cca07aea0d,ec48a164-bc30-4e36-a40a-a3cca07aea0d,1,0,3174d57f-c6a8-44dc-adc1-47e9a54c844d,3174d57f-c6a8-44dc-adc1-47e9a54c844d,1,0,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,1,0,b7736108-89bd-44eb-89c1-8a5a774058f1,b7736108-89bd-44eb-89c1-8a5a774058f1,1,0,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,1,0,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,1,0,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,1,0,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,1,0,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,1,0,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,1,0,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,1,0,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,1,0,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,1,0,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,1,0,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,1,0,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,1,0,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,1,0,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,1,0,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,1,0,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,1,0,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,1,0,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,1,0,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,1,0,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,1,0,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,1,0,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,1,0,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,1,0,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,1,0,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,1,0,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,1,0,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,1,0,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,1,0,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,1,0,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,1,0,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,1,0,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,1,0,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,1,0,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,1,0,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,1,0,e1823be2-b646-4a1a-a9a9-c925a12c0586,e1823be2-b646-4a1a-a9a9-c925a12c0586,1,0,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,1,0,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,1,0,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,1,0,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,1,0,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,1,0,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,1,0,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,1,0,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,1,0,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,1,0,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,1,0,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,1,0,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1,0,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,1,0,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,1,0,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,1,0,3f7ee937-d853-47b7-a1f5-d821208e3531,3f7ee937-d853-47b7-a1f5-d821208e3531,1,0,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,1,0,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,1,0,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,1,0,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,1,0,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,1,0,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,1,0,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,1,0,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,1,0,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,1,0,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,1,0,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,1,0,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,1,0,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,1,0,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,1,0,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,1,0,90032ffa-f117-4a34-82f8-cc7e5a22a542,90032ffa-f117-4a34-82f8-cc7e5a22a542,1,0,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,1,0,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,1,0,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,1,0,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,1,0,49e787c9-753a-468a-b8dd-2e970d9a1fed,49e787c9-753a-468a-b8dd-2e970d9a1fed,1,0,e871dea7-1953-4511-90b0-e0957afac4c0,e871dea7-1953-4511-90b0-e0957afac4c0,1,0,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,1,0,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,1,0,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,1,0,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,1,0,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,1,0,40ae107d-67a8-404c-adf9-1a760bba94ff,40ae107d-67a8-404c-adf9-1a760bba94ff,1,0,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,1,0,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,1,0,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,1,0,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,1,0,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,1,0,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,1,0,7172bed5-b12b-4e83-b15d-1d95b63a6272,7172bed5-b12b-4e83-b15d-1d95b63a6272,1,0,25d75a3c-b801-4b1e-aed8-90e667f36c67,25d75a3c-b801-4b1e-aed8-90e667f36c67,1,0,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,1,0,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,1,0,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,1,0,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,1,0,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,1,0,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,1,0,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,1,0,49e21b87-beae-4640-a497-ef468da0cbbc,49e21b87-beae-4640-a497-ef468da0cbbc,1,0,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,1,0,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,1,0,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,1,0,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,1,0,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,1,0,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,1,0,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,1,0,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,1,0,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,1,0,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,1,0,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,1,0,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,1,0,662c5b48-62e1-451e-b37f-20f3f2bb0347,662c5b48-62e1-451e-b37f-20f3f2bb0347,1,0,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,1,0,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,1,0,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,1,0,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,1,0,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,1,0,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,1,0,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,1,0,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,1,0,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,1,0,393074c4-0afc-4232-8101-11a4ea6ed28a,393074c4-0afc-4232-8101-11a4ea6ed28a,1,0,5ff23123-450c-40ae-9b79-c540da53e2a0,5ff23123-450c-40ae-9b79-c540da53e2a0,1,0,639339a1-7de5-4b05-adf3-f60e7edd922c,639339a1-7de5-4b05-adf3-f60e7edd922c,1,0,dea9af9d-13c0-40d4-a9b0-1908e0a58795,dea9af9d-13c0-40d4-a9b0-1908e0a58795,1,0,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,1,0,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,1,0,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,1,0,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,1,0,0e1a45b0-d95d-415f-b954-5689610aa393,0e1a45b0-d95d-415f-b954-5689610aa393,1,0,4736b3d3-f696-4bdd-b0e3-0884ea88f623,4736b3d3-f696-4bdd-b0e3-0884ea88f623,1,0,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,1,0,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,1,0,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,1,0,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,1,0,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,1,0,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,1,0,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,1,0,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,1,0,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,1,0,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,1,0,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,1,0,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,1,0,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,1,0,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,1,0,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,1,0,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,1,0,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,1,0,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,1,0,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,1,0,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,1,0,1d49b1bb-5f90-46e4-adcf-55ad46442648,1d49b1bb-5f90-46e4-adcf-55ad46442648,1,0,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,1,0,27aebf22-27fe-48d4-a6f4-ea4f6a6714bb,27aebf22-27fe-48d4-a6f4-ea4f6a6714bb,1,0,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,1,0,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,1,0,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,1,0,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,1,0,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,1,0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,1,0,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,1,0,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,1,0,97edd94a-4bf2-4ed7-b98f-677f869b0715,97edd94a-4bf2-4ed7-b98f-677f869b0715,1,0,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,1,0,2fad50a6-6a3e-4f87-ab84-907364427a63,2fad50a6-6a3e-4f87-ab84-907364427a63,1,0,e37aa075-143b-44e9-a2e2-77b3e0f76a77,e37aa075-143b-44e9-a2e2-77b3e0f76a77,1,0,1df47f0c-7935-481b-9dfb-1f660ea81a2b,1df47f0c-7935-481b-9dfb-1f660ea81a2b,1,0,258736e4-93c0-4a46-8caa-75be42c9f006,258736e4-93c0-4a46-8caa-75be42c9f006,1,0,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,1,0,56d0acf3-c888-4824-a6e4-27d61fa35415,56d0acf3-c888-4824-a6e4-27d61fa35415,1,0,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,1,0,439129dd-ad00-484c-b84a-fb325af979ed,439129dd-ad00-484c-b84a-fb325af979ed,1,0,dcae6376-f44c-421e-87f2-df83413c021e,dcae6376-f44c-421e-87f2-df83413c021e,1,0,dbdcdcab-4cd5-44af-b52c-6ce14a26ca9c,dbdcdcab-4cd5-44af-b52c-6ce14a26ca9c,1,0,151f2d0a-cc43-490d-ad7d-71390703aa72,151f2d0a-cc43-490d-ad7d-71390703aa72,1,0,2a515a4f-683b-4674-b097-62dd2d940c39,2a515a4f-683b-4674-b097-62dd2d940c39,1,0,d14058f5-dfd4-47eb-ae6d-01b7062f5940,d14058f5-dfd4-47eb-ae6d-01b7062f5940,1,0,90f358ae-9c80-40cf-8e8f-aa02d78a2cdb,90f358ae-9c80-40cf-8e8f-aa02d78a2cdb,1,0,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,1,0,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,1,0,fdb5b235-1978-4c2a-a03f-02341df00c3c,fdb5b235-1978-4c2a-a03f-02341df00c3c,1,0,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,1,0,38637f61-399a-4966-9e64-4751aecffa31,38637f61-399a-4966-9e64-4751aecffa31,1,0,0f38a18b-a36c-45fe-86c1-396634aaa5df,0f38a18b-a36c-45fe-86c1-396634aaa5df,1,0,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,1,0,a81c783d-2dea-4dde-9ca1-7b23d609eb22,a81c783d-2dea-4dde-9ca1-7b23d609eb22,1,0,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,1,0,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,1,0,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,1,0,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,1,0,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,1,0,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,1,0,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,1,0,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,1,0,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,1,0,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,1,0,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,1,0,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,1,0,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,1,0,1f927f76-5523-4880-9d26-d69a059f2b67,1f927f76-5523-4880-9d26-d69a059f2b67,1,0,27a9c1de-90a9-49f8-8b16-f7ef041ae1de,27a9c1de-90a9-49f8-8b16-f7ef041ae1de,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,1,0,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,1,0,ca85912b-87b4-481e-9184-017364b4603d,ca85912b-87b4-481e-9184-017364b4603d,1,0,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,1,0,2650db63-ca98-4a8a-8c36-165548aa5279,2650db63-ca98-4a8a-8c36-165548aa5279,1,0,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,1,0,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,1,0,e8c5c961-0633-438d-ba50-d2a774f6b167,e8c5c961-0633-438d-ba50-d2a774f6b167,1,0,48b57d1b-5246-4ce8-9e0f-e369e6add55c,48b57d1b-5246-4ce8-9e0f-e369e6add55c,1,0,a69525c7-27ff-48df-b26b-325ba580a53e,a69525c7-27ff-48df-b26b-325ba580a53e,1,0,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,1,0,8482b31d-0ffa-4a94-9be1-09db8399b70d,8482b31d-0ffa-4a94-9be1-09db8399b70d,1,0,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,1,0,e57f4619-b5ed-44de-a186-a13a3897731b,e57f4619-b5ed-44de-a186-a13a3897731b,1,0,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,1,0,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,1,0,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,1,0,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,1,0,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,1,0,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,1,0,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,1,0,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,1,0,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,1,0,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,1,0,bb3a9973-67ce-479e-8668-c2f3bb20301e,bb3a9973-67ce-479e-8668-c2f3bb20301e,1,0,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,1,0,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,1,0,37169451-1464-4f24-8ca6-802963ffb636,37169451-1464-4f24-8ca6-802963ffb636,1,0,c3a958b1-590f-4418-a74f-5982b478cf52,c3a958b1-590f-4418-a74f-5982b478cf52,1,0,ef0e618d-0942-460a-ac65-9aca2fed976e,ef0e618d-0942-460a-ac65-9aca2fed976e,1,0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,1,0,2ac8bd69-9fbf-4f15-b58d-397d9e903532,2ac8bd69-9fbf-4f15-b58d-397d9e903532,1,0,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,1,0,5b460b92-2c74-4f59-88b2-18d9aac42c04,5b460b92-2c74-4f59-88b2-18d9aac42c04,1,0,db05d35b-5f53-4c27-ba80-b477b9a98299,db05d35b-5f53-4c27-ba80-b477b9a98299,1,0,fa872ae1-b699-46fe-9d6a-e42e1388752b,fa872ae1-b699-46fe-9d6a-e42e1388752b,1,0,1acf34e6-c428-4130-82f0-5160dfcc0858,1acf34e6-c428-4130-82f0-5160dfcc0858,1,0,57046262-b9ce-4670-9cf5-6db9e58dd0d5,57046262-b9ce-4670-9cf5-6db9e58dd0d5,1,0,a9824176-36d5-4be5-9984-f4312ff48515,a9824176-36d5-4be5-9984-f4312ff48515,1,0,8e980ca0-1627-45e8-bd27-5dd1ac199459,8e980ca0-1627-45e8-bd27-5dd1ac199459,1,0,8b653beb-af9f-4f39-b691-ae14f80b7cd6,8b653beb-af9f-4f39-b691-ae14f80b7cd6,1,0,77559c11-713f-454d-aff4-56649e1350e9,77559c11-713f-454d-aff4-56649e1350e9,1,0,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0c965703-c1d0-48b7-80f9-b8d869ff98f5,1,0,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,1,0,7ba42162-557b-4e34-8aca-0cdee8cb2452,7ba42162-557b-4e34-8aca-0cdee8cb2452,1,0,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,1,0,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,1,0,dd577924-c6cb-4aa9-9db5-366d8958d00f,dd577924-c6cb-4aa9-9db5-366d8958d00f,1,0,8ed8f72e-404a-4be4-a44d-ddebbad5f411,8ed8f72e-404a-4be4-a44d-ddebbad5f411,1,0,e919bc4c-86e6-44f6-be27-5a729b63d042,e919bc4c-86e6-44f6-be27-5a729b63d042,1,0,ec580e4f-1518-4923-a10e-bc1da8688b37,ec580e4f-1518-4923-a10e-bc1da8688b37,1,0,91c3902a-314f-4d40-8bcc-8dd131fed2f4,91c3902a-314f-4d40-8bcc-8dd131fed2f4,1,0,ae2b21c5-9349-49e8-9627-26f05c21f43a,ae2b21c5-9349-49e8-9627-26f05c21f43a,1,0,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,1,0,917a19d7-73db-4247-b892-397598d67879,917a19d7-73db-4247-b892-397598d67879,1,0,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1,0,d8066600-c669-449d-a187-fdd3af8f7afa,d8066600-c669-449d-a187-fdd3af8f7afa,1,0,dadf86a6-c118-4827-b1b9-6cfee731242f,dadf86a6-c118-4827-b1b9-6cfee731242f,1,0,45bf7b20-f048-491a-a989-e50bea13d028,45bf7b20-f048-491a-a989-e50bea13d028,1,0,9ad3b432-5b49-44ee-9d8d-83c36458d927,9ad3b432-5b49-44ee-9d8d-83c36458d927,1,0,a9967bff-53b9-4295-a253-3647d956d3cb,a9967bff-53b9-4295-a253-3647d956d3cb,1,0,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,1,0,b8a31397-8974-44ec-92b0-7cbdc481cf7e,b8a31397-8974-44ec-92b0-7cbdc481cf7e,1,0,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,1,0,fb16c4d5-854c-4525-92be-b21fa2df5b0d,fb16c4d5-854c-4525-92be-b21fa2df5b0d,1,0,5771de21-2086-432b-ad91-de14a39bd5bc,5771de21-2086-432b-ad91-de14a39bd5bc,1,0,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,1,0,ed96fbfa-bda7-405c-9073-d0b6feffedad,ed96fbfa-bda7-405c-9073-d0b6feffedad,1,0,50c724cb-dde1-4313-9492-b1750bd0afc1,50c724cb-dde1-4313-9492-b1750bd0afc1,1,0,12901981-6106-4471-ab3a-e127c2bb4ebd,12901981-6106-4471-ab3a-e127c2bb4ebd,1,0,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,1,0,d5ea5dea-233d-4106-b9ba-f030d4f762ef,d5ea5dea-233d-4106-b9ba-f030d4f762ef,1,0,903af05e-5ac5-46aa-843b-d74f9e417c1d,903af05e-5ac5-46aa-843b-d74f9e417c1d,1,0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,1,0,a344290a-c9be-47a7-95ad-ced1b52a0995,a344290a-c9be-47a7-95ad-ced1b52a0995,1,0,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,1,0,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,1,0,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,1,0,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,1,0,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,1,0,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,1,0,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,1,0,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,1,0,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,1,0,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,1,0,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,1,0,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,1,0,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,1,0,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,1,0,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,1,0,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,1,0,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,1,0,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,1,0,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,1,0,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,1,0,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,1,0,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,1,0,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,1,0,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,1,0,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,1,0,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,1,0,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,1,0,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,1,0,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,1,0,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,1,0,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,1,0,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,1,0,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,1,0,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,1,0,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,1,0,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,1,0,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,1,0,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,1,0,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,1,0,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,1,0,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,1,0,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,1,0,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,1,0,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,1,0,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,1,0,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,1,0,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,1,0,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,1,0,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,1,0,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,1,0,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,1,0,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,1,0,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,1,0,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,1,0,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,1,0,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,1,0,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,1,0,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,1,0,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,1,0,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,1,0,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,1,0,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,1,0,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,1,0,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,1,0,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,1,0,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,1,0,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,1,0,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,1,0,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,1,0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,1,0,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,1,0,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,1,0,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,1,0,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,1,0,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,1,0,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,1,0,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,1,0,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,1,0,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,1,0,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,1,0,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,1,0,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,1,0,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,1,0,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,1,0,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,1,0,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,1,0,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,1,0,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,1,0,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,1,0,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,1,0,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,1,0,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,1,0,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,1,0,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,1,0,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,1,0,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,1,0,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,1,0,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,1,0,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1,0,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,1,0,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,1,0,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,1,0,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,1,0,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,1,0,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,1,0,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,1,0,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,1,0,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,1,0,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,1,0,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,1,0,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,1,0,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,1,0,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,1,0,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,1,0,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,1,0,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,1,0,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,1,0,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,1,0,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,1,0,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,1,0,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,1,0,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,1,0,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,1,0,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,1,0,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,1,0,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,1,0,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,1,0,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,1,0,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,1,0,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,1,0,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,1,0,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,1,0,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,1,0,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,1,0,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,1,0,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,1,0,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,1,0,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,1,0,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,1,0,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,1,0,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,1,0,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,1,0,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,1,0,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,1,0,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,1,0,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,1,0,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,1,0,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,1,0,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,1,0,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,1,0,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,1,0,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,1,0,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,1,0,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,1,0,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,1,0,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,1,0,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,1,0,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,1,0,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,1,0,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,1,0,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,1,0,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,1,0,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,1,0,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,1,0,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,1,0,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,1,0,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,1,0,58589e42-9ff2-4ad4-bd98-a75ab6873625,58589e42-9ff2-4ad4-bd98-a75ab6873625,1,0,92255ded-6c44-43be-b0b1-fd03c2b78c8b,92255ded-6c44-43be-b0b1-fd03c2b78c8b,1,0,dfe6da42-f024-45c5-beea-ceccaf3a5faa,dfe6da42-f024-45c5-beea-ceccaf3a5faa,1,0,08f3e8f1-284c-4059-864a-42499d48596c,08f3e8f1-284c-4059-864a-42499d48596c,1,0,3d715c1b-9a5e-408d-98d6-5345d274144b,3d715c1b-9a5e-408d-98d6-5345d274144b,1,0,3f88bc69-e140-48b6-a2f9-24f6a391bff2,3f88bc69-e140-48b6-a2f9-24f6a391bff2,1,0,65eb5361-074c-451d-a5d8-d16b6ecccf82,65eb5361-074c-451d-a5d8-d16b6ecccf82,1,0,f7c8cab8-c634-4cf3-9183-c15c915231f8,f7c8cab8-c634-4cf3-9183-c15c915231f8,1,0,563a33a6-9eff-4ff1-9eba-dafc235d2ede,563a33a6-9eff-4ff1-9eba-dafc235d2ede,1,0,fbc21f7d-c272-41ea-b048-c5af294ab5ed,fbc21f7d-c272-41ea-b048-c5af294ab5ed,1,0,088c38fa-1c8f-42e7-aa72-5f5dd8cfc1c6,088c38fa-1c8f-42e7-aa72-5f5dd8cfc1c6,1,0,370f97ee-9aed-4a0a-aefc-647d973e6741,370f97ee-9aed-4a0a-aefc-647d973e6741,1,0,c586d28e-a3ec-4201-8ba0-d453bb7c5293,c586d28e-a3ec-4201-8ba0-d453bb7c5293,1,0,d84f12b0-6e01-4646-9abd-51578716433d,d84f12b0-6e01-4646-9abd-51578716433d,1,0,a4458c18-72eb-4fc0-8dc6-fccab93b0898,a4458c18-72eb-4fc0-8dc6-fccab93b0898,1,0,3a0ceb25-60f5-4fec-ab2e-e667939bfe21,3a0ceb25-60f5-4fec-ab2e-e667939bfe21,1,0,27db4549-df2f-4856-b07f-3c9399cdee9c,27db4549-df2f-4856-b07f-3c9399cdee9c,1,0,f667d49a-8077-450f-9442-2ea4fee7b62d,f667d49a-8077-450f-9442-2ea4fee7b62d,1,0,782b1285-9618-4ec9-b817-ce93e2d24d4d,782b1285-9618-4ec9-b817-ce93e2d24d4d,1,0,dd3e202f-6225-4061-a6ab-f29cd314ab08,dd3e202f-6225-4061-a6ab-f29cd314ab08,1,0,483b7600-e46f-4739-94c8-8637c62750a0,483b7600-e46f-4739-94c8-8637c62750a0,1,0,bdcf5f7a-2888-4143-b46d-1bf0dcc16872,bdcf5f7a-2888-4143-b46d-1bf0dcc16872,1,0,bce8a955-0a0e-4771-9763-4f5d319d9848,bce8a955-0a0e-4771-9763-4f5d319d9848,1,0,090c475c-fb33-46a9-a0ed-fb9d7def2ca5,090c475c-fb33-46a9-a0ed-fb9d7def2ca5,1,0,d10c3389-5bf0-4c73-ab92-786eb19d1676,d10c3389-5bf0-4c73-ab92-786eb19d1676,1,0,c824c20d-7503-4a77-81b8-2a68b20eab68,c824c20d-7503-4a77-81b8-2a68b20eab68,1,0,a0db92c6-b39e-41ab-82e3-161e32f67bda,a0db92c6-b39e-41ab-82e3-161e32f67bda,1,0,88f91187-65d3-4684-992d-20ca29d3755a,88f91187-65d3-4684-992d-20ca29d3755a,1,0,da725701-d4fb-40a4-a63b-feaa8559d8cf,da725701-d4fb-40a4-a63b-feaa8559d8cf,1,0,0a44cfc8-0b55-4aed-990f-e97831494a3c,0a44cfc8-0b55-4aed-990f-e97831494a3c,1,0,c9adbe7c-ca6e-4048-a498-9b48f75d9b45,c9adbe7c-ca6e-4048-a498-9b48f75d9b45,1,0,c7cb80d6-13d9-49af-acdd-6d10dffd1e17,c7cb80d6-13d9-49af-acdd-6d10dffd1e17,1,0,9a3f04d7-b956-4e87-ac28-63f7afba1771,9a3f04d7-b956-4e87-ac28-63f7afba1771,1,0,41b23a18-0c4e-455f-b249-2f2eba8119db,41b23a18-0c4e-455f-b249-2f2eba8119db,1,0,ff697cb8-ab88-4634-94e3-c06a401f71ff,ff697cb8-ab88-4634-94e3-c06a401f71ff,1,0,cf98131d-2b1a-4a07-a8dd-72af01934a8b,cf98131d-2b1a-4a07-a8dd-72af01934a8b,1,0,bef1eead-3f8b-48b7-99f3-46ba332fb60d,bef1eead-3f8b-48b7-99f3-46ba332fb60d,1,0,c1b3d4c8-8c53-4452-bec5-9742bb827d8f,c1b3d4c8-8c53-4452-bec5-9742bb827d8f,1,0,b6e1d584-6817-4f06-b5b2-57037a23ce6f,b6e1d584-6817-4f06-b5b2-57037a23ce6f,1,0,1b5d2ded-3f58-4b3e-8678-48191897e408,1b5d2ded-3f58-4b3e-8678-48191897e408,1,0,62fd5457-0cfd-4273-8965-4b5bf9170209,62fd5457-0cfd-4273-8965-4b5bf9170209,1,0,88701798-0c0e-4d33-a68b-3eddfc25d835,88701798-0c0e-4d33-a68b-3eddfc25d835,1,0,c0d704b5-32de-4bb8-9525-f7d1da828ae5,c0d704b5-32de-4bb8-9525-f7d1da828ae5,1,0,b5b5ee06-4de8-4776-98f0-3e8e1b31985a,b5b5ee06-4de8-4776-98f0-3e8e1b31985a,1,0,2f999502-68e5-4823-8f94-aec98b1a1b1d,2f999502-68e5-4823-8f94-aec98b1a1b1d,1,0,2d064409-7f2a-4d2e-9155-6b34e4373e89,2d064409-7f2a-4d2e-9155-6b34e4373e89,1,0,fc51a562-01bb-47c3-bac5-89f78f64a5f3,fc51a562-01bb-47c3-bac5-89f78f64a5f3,1,0,8a33a6cd-f56d-405b-9515-9fc04d30e27a,8a33a6cd-f56d-405b-9515-9fc04d30e27a,1,0,9b199470-723d-4b72-9fdc-2bed2b7bc483,9b199470-723d-4b72-9fdc-2bed2b7bc483,1,0,5bb9aff1-f4ee-4c02-8e3f-f070bfbb8339,5bb9aff1-f4ee-4c02-8e3f-f070bfbb8339,1,0,6a06f9ee-8832-4e9e-aeba-b4cb9573c048,6a06f9ee-8832-4e9e-aeba-b4cb9573c048,1,0,38fa770e-f38d-4fdf-bb7a-56cfe76a8ab2,38fa770e-f38d-4fdf-bb7a-56cfe76a8ab2,1,0,afc4ce2a-60b6-48d0-ada0-2f651d050888,afc4ce2a-60b6-48d0-ada0-2f651d050888,1,0,5f289266-fc3c-4345-b7ab-cf863e2a6ccd,5f289266-fc3c-4345-b7ab-cf863e2a6ccd,1,0,5932f0d8-9012-4382-8c72-b1a5f4fbc937,5932f0d8-9012-4382-8c72-b1a5f4fbc937,1,0,66f1ff23-8fec-4be4-914c-43b7dee1c2a2,66f1ff23-8fec-4be4-914c-43b7dee1c2a2,1,0,56c3471e-459a-46ba-96ea-9f872b3ad54a,56c3471e-459a-46ba-96ea-9f872b3ad54a,1,0,2113195b-1553-4137-9e45-2cc62c72ee47,2113195b-1553-4137-9e45-2cc62c72ee47,1,0,1250f5b1-c766-434c-8d28-69b74a536294,1250f5b1-c766-434c-8d28-69b74a536294,1,0,80bc9b8b-7b17-4dbb-bca6-8465d6b01e0b,80bc9b8b-7b17-4dbb-bca6-8465d6b01e0b,1,0,6327e23d-6070-4b64-81c6-0d1a33eaae93,6327e23d-6070-4b64-81c6-0d1a33eaae93,1,0,4d086a1f-34e0-43f9-9401-d82e55746a9d,4d086a1f-34e0-43f9-9401-d82e55746a9d,1,0,5a4c543a-27d5-423b-a4d0-3952ea2817af,5a4c543a-27d5-423b-a4d0-3952ea2817af,1,0,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,1,0,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,1,0,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,1,0,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,1,0,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,1,0,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,1,0,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,1,0,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,1,0,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,1,0,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,1,0,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,1,0,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,1,0,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,1,0,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,1,0,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,1,0,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,1,0,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,1,0,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,1,0,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,1,0,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,1,0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,1,0,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,1,0,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,1,0,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,1,0,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,1,0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,1,0,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,1,0,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,1,0,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,1,0,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,1,0,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,1,0,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,1,0,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,1,0,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,1,0,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,1,0,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,1,0,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,1,0,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,1,0,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,1,0,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,1,0,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,1,0,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,1,0,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,1,0,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,1,0,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,1,0,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,1,0,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,1,0,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,1,0,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,1,0,9f36d26e-aa71-44d5-ac27-9aaa643555c3,9f36d26e-aa71-44d5-ac27-9aaa643555c3,1,0,87b8b5d7-d3d6-450a-adb1-5c875257ec80,87b8b5d7-d3d6-450a-adb1-5c875257ec80,1,0,e3640efe-e46c-4588-b251-dda23bf0641d,e3640efe-e46c-4588-b251-dda23bf0641d,1,0,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,1,0,522a4bff-34d3-46b2-8c66-0b30d881a86e,522a4bff-34d3-46b2-8c66-0b30d881a86e,1,0,3d7908b1-bd82-475e-8488-fafcbe3458ee,3d7908b1-bd82-475e-8488-fafcbe3458ee,1,0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1,0,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,1,0,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,1,0,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,1,0,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0f9c08c2-e7fa-4ea0-a935-f927feb01131,1,0,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,1,0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,1,0,57069b56-f732-41c0-9a75-cbdb1e88556c,57069b56-f732-41c0-9a75-cbdb1e88556c,1,0,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,1,0,23e79add-7f1c-422a-9df1-8f76ebf805df,23e79add-7f1c-422a-9df1-8f76ebf805df,1,0,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,1,0,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,1,0,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,1,0,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,1,0,5dcd8e28-b058-405a-bac4-defab7d4b789,5dcd8e28-b058-405a-bac4-defab7d4b789,1,0,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,1,0,077af11c-fd3c-4e87-b169-5f3137464f77,077af11c-fd3c-4e87-b169-5f3137464f77,1,0,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,1,0,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,1,0,da8f7f30-eb80-44db-a451-348306c90cd8,da8f7f30-eb80-44db-a451-348306c90cd8,1,0,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,1,0,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,1,0,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,1,0,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,1,0,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,1,0,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,1,0,9847676d-f44d-46a0-83e2-4a43a835caf8,9847676d-f44d-46a0-83e2-4a43a835caf8,1,0,43c18cae-21a9-413b-a350-d5cf826980f0,43c18cae-21a9-413b-a350-d5cf826980f0,1,0,16773cdb-b979-42d5-a2a5-d4b79e8737bd,16773cdb-b979-42d5-a2a5-d4b79e8737bd,1,0,c28a190a-f487-4e99-b8f8-6928268086f8,c28a190a-f487-4e99-b8f8-6928268086f8,1,0,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,1,0,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,1,0,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,1,0,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,1,0,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,1,0,f321e378-6d50-4567-8434-813f367d3a65,f321e378-6d50-4567-8434-813f367d3a65,1,0,27246fd8-a8a3-4244-b49a-c0372a812167,27246fd8-a8a3-4244-b49a-c0372a812167,1,0,7d91ff3c-1ec2-41d0-9d38-fa8f8534c55c,7d91ff3c-1ec2-41d0-9d38-fa8f8534c55c,1,0,6da15c1d-e144-472e-9a3a-2797c7df16e4,6da15c1d-e144-472e-9a3a-2797c7df16e4,1,0,350a7b29-4ba3-43c4-b77d-47085f53d760,350a7b29-4ba3-43c4-b77d-47085f53d760,1,0,a151715d-c89e-4e4c-b8fd-d7d6ad71e603,a151715d-c89e-4e4c-b8fd-d7d6ad71e603,1,0,c48c091c-0d46-4d1f-bc84-72b0537c7ec2,c48c091c-0d46-4d1f-bc84-72b0537c7ec2,1,0,122a94c7-bb89-4f11-b583-b56808c1df47,122a94c7-bb89-4f11-b583-b56808c1df47,1,0,f4371f32-95a5-40f4-bc5e-a5b9a12a86eb,f4371f32-95a5-40f4-bc5e-a5b9a12a86eb,1,0,5f434c45-a5ff-4a07-8662-6a592298c7e9,5f434c45-a5ff-4a07-8662-6a592298c7e9,1,0,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,1,0,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,1,0,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,1,0,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,1,0,5d338e31-a56b-45f0-8a62-0270ca543f6a,5d338e31-a56b-45f0-8a62-0270ca543f6a,1,0,afd8251f-548b-4bb6-8ad0-4f412bec7cb6,afd8251f-548b-4bb6-8ad0-4f412bec7cb6,1,0,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,1,0,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,1,0,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,1,0,c11d967b-1250-4345-90b0-011a96c5ae5e,c11d967b-1250-4345-90b0-011a96c5ae5e,1,0,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,1,0,24eed105-f612-4340-ad79-388a7b39b58c,24eed105-f612-4340-ad79-388a7b39b58c,1,0,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,1,0,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,1,0,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,1,0,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,1,0,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,1,0,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,1,0,6a2add61-edb7-4561-bae9-06b3741e7726,6a2add61-edb7-4561-bae9-06b3741e7726,1,0,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,1,0,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,1,0,b572b1d0-4404-421c-9950-1cc1342ca5f3,b572b1d0-4404-421c-9950-1cc1342ca5f3,1,0,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,1,0,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,1,0,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,1,0,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,1,0,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,1,0,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,1,0,ae3876e2-bd06-415b-9d9a-b77d787be09e,ae3876e2-bd06-415b-9d9a-b77d787be09e,1,0,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,1,0,4718392b-477c-496b-9d28-ddbdaa7a04f2,4718392b-477c-496b-9d28-ddbdaa7a04f2,1,0,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,1,0,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,1,0,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,1,0,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,1,0,1260b5dd-0a74-43df-bdbb-215b253da28e,1260b5dd-0a74-43df-bdbb-215b253da28e,1,0,e37a7cf1-a7b5-4b6e-b818-0915598c8505,e37a7cf1-a7b5-4b6e-b818-0915598c8505,1,0,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,1,0,f3abaf8e-0230-43db-aaf0-716fc02047eb,f3abaf8e-0230-43db-aaf0-716fc02047eb,1,0,b76c3bd6-924a-4378-acbe-6f17232b201b,b76c3bd6-924a-4378-acbe-6f17232b201b,1,0,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,1,0,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,1,0,3b1d0974-6031-4841-b632-aadd4ff13b2c,3b1d0974-6031-4841-b632-aadd4ff13b2c,1,0,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,1,0,9d358304-3fd0-4ec6-9400-cc498ff2f751,9d358304-3fd0-4ec6-9400-cc498ff2f751,1,0,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,1,0,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,1,0,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,1,0,74067eee-6cd4-4ae3-becc-457ecb51dc9a,74067eee-6cd4-4ae3-becc-457ecb51dc9a,1,0,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,1,0,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,1,0,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,1,0,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,1,0,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,1,0,343b979a-97e3-4eac-a314-3bd3eea9c15c,343b979a-97e3-4eac-a314-3bd3eea9c15c,1,0,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,1,0,f5bb88eb-c239-4ae3-a297-dfbbd679e008,f5bb88eb-c239-4ae3-a297-dfbbd679e008,1,0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,1,0,f259b6b4-d582-429f-a16f-027a6bcb7438,f259b6b4-d582-429f-a16f-027a6bcb7438,1,0,9f32e85c-2ed6-41db-b0ec-6d8596940e80,9f32e85c-2ed6-41db-b0ec-6d8596940e80,1,0,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,1,0,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,1,0,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,1,0,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,1,0,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,1,0,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,1,0,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,1,0,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,1,0,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,1,0,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,1,0,aa0c32ae-da52-4df9-8b77-99ea31f8df81,aa0c32ae-da52-4df9-8b77-99ea31f8df81,1,0,d7dcd391-3a0e-4aa9-9b53-467a1de67593,d7dcd391-3a0e-4aa9-9b53-467a1de67593,1,0,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,1,0,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,1,0,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,1,0,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,1,0,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,1,0,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,1,0,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,1,0,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,1,0,00e48a23-eb5b-4a29-b36c-218ab9760f23,00e48a23-eb5b-4a29-b36c-218ab9760f23,1,0,331db120-ba88-4eb3-a8ec-10691be82e2d,331db120-ba88-4eb3-a8ec-10691be82e2d,1,0,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,1,0,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,1,0,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,1,0,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,1,0,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,1,0,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,1,0,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,1,0,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,1,0,35823167-b658-4563-8d01-b0aab05aa619,35823167-b658-4563-8d01-b0aab05aa619,1,0,9ee03c48-c338-4655-9095-d490231df2a3,9ee03c48-c338-4655-9095-d490231df2a3,1,0,3924c17c-6ee3-4406-8023-0a79a242e389,3924c17c-6ee3-4406-8023-0a79a242e389,1,0,84a159ed-bc5f-4497-94d1-94b187b0bffe,84a159ed-bc5f-4497-94d1-94b187b0bffe,1,0,0a126b0d-28c8-4ed4-836f-e39e17693ad0,0a126b0d-28c8-4ed4-836f-e39e17693ad0,1,0,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,1,0,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,1,0,f95adb50-fa0b-434c-93dd-b7fd211220b7,f95adb50-fa0b-434c-93dd-b7fd211220b7,1,0,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,1,0,b938ff17-e31c-4762-a96f-e1288f746a1d,b938ff17-e31c-4762-a96f-e1288f746a1d,1,0,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,1,0,bd69bf55-dee0-4553-8f90-5fd025c0f773,bd69bf55-dee0-4553-8f90-5fd025c0f773,1,0,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,1,0,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,1,0,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,1,0,f415296e-fceb-4835-abe9-17bb17a5d5e5,f415296e-fceb-4835-abe9-17bb17a5d5e5,1,0,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,1,0,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,1,0,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,1,0,c8679d82-075c-4556-8231-c004d144fe61,c8679d82-075c-4556-8231-c004d144fe61,1,0,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,1,0,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,1,0,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,1,0,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,1,0,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,1,0,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,1,0,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,1,0,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,1,0,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,1,0,91d7687b-7627-473f-a08d-433f9d385107,91d7687b-7627-473f-a08d-433f9d385107,1,0,83db1b00-e9e3-41da-8a59-47589dcfd618,83db1b00-e9e3-41da-8a59-47589dcfd618,1,0,91d2d798-1498-4c52-aa7b-99db4b992876,91d2d798-1498-4c52-aa7b-99db4b992876,1,0,e85a03d3-e7c7-4058-992a-515a557d9e52,e85a03d3-e7c7-4058-992a-515a557d9e52,1,0,d3a1d247-8f4a-45af-9861-7e313a100209,d3a1d247-8f4a-45af-9861-7e313a100209,1,0,837f27c1-26d7-4f24-a691-55dd9ed04ec5,837f27c1-26d7-4f24-a691-55dd9ed04ec5,1,0,9e2ddfbb-8d6b-4b82-8a2b-62c2ea990b10,9e2ddfbb-8d6b-4b82-8a2b-62c2ea990b10,1,0,5005655f-22b2-49e6-be4f-b15d768d10b2,5005655f-22b2-49e6-be4f-b15d768d10b2,1,0,208040c8-e98b-4c15-a2ec-38d44bfcfa6c,208040c8-e98b-4c15-a2ec-38d44bfcfa6c,1,0,f6811ee2-769e-488d-9ca0-70f1fe521ca9,f6811ee2-769e-488d-9ca0-70f1fe521ca9,1,0,83385f31-2cdf-44a1-85c3-461e4ad5fd45,83385f31-2cdf-44a1-85c3-461e4ad5fd45,1,0,b55b06db-604e-4fb9-9253-638c747bd8f9,b55b06db-604e-4fb9-9253-638c747bd8f9,1,0,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,1,0,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,1,0,deb69010-80b0-4e28-acc7-8c50e8e6f873,deb69010-80b0-4e28-acc7-8c50e8e6f873,1,0,1a9177fe-6699-42b3-9588-eed9c6008c2d,1a9177fe-6699-42b3-9588-eed9c6008c2d,1,0,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,1,0,ae698468-f42a-4400-aee6-fd849740e634,ae698468-f42a-4400-aee6-fd849740e634,1,0,0b88b50d-6aa1-4364-82bd-1c0c0da93a58,0b88b50d-6aa1-4364-82bd-1c0c0da93a58,1,0,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,1,0,6438435e-97cc-4bd2-98dc-e21cee55bb0f,6438435e-97cc-4bd2-98dc-e21cee55bb0f,1,0,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,1,0,5001bea4-c8f9-4950-9eda-d33125e3bb46,5001bea4-c8f9-4950-9eda-d33125e3bb46,1,0,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,1,0,e815010d-e03d-46e4-b482-c1556902cc26,e815010d-e03d-46e4-b482-c1556902cc26,1,0,d4ab930a-ddaa-4552-afed-2618af822365,d4ab930a-ddaa-4552-afed-2618af822365,1,0,dd03e170-4186-495b-ae1c-fc66385d7ccf,dd03e170-4186-495b-ae1c-fc66385d7ccf,1,0,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,1,0,cdef5df6-f3a1-4950-b197-4f375914f885,cdef5df6-f3a1-4950-b197-4f375914f885,1,0,c1caff49-dc4b-4b3e-be47-122ea8b70416,c1caff49-dc4b-4b3e-be47-122ea8b70416,1,0,a1185a4c-7351-48b0-b662-61f61a1ad715,a1185a4c-7351-48b0-b662-61f61a1ad715,1,0,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,1,0,71d03545-df45-4c70-aa0d-3b916f2a9041,71d03545-df45-4c70-aa0d-3b916f2a9041,1,0,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,1,0,28a25822-2306-409a-a7c8-6f7e42bf25e8,28a25822-2306-409a-a7c8-6f7e42bf25e8,1,0,89cb31da-a980-4207-a537-85cd47f08d32,89cb31da-a980-4207-a537-85cd47f08d32,1,0,a45fa0c3-c363-4465-861f-13cedfeb79dd,a45fa0c3-c363-4465-861f-13cedfeb79dd,1,0,a72517c3-8c91-4e40-81ac-83c762789e87,a72517c3-8c91-4e40-81ac-83c762789e87,1,0,0233b335-7e26-4661-9850-8ab09d3178e3,0233b335-7e26-4661-9850-8ab09d3178e3,1,0,d942d536-5d01-4571-b910-abd973996a38,d942d536-5d01-4571-b910-abd973996a38,1,0,b82a7103-b872-49c3-b632-81d5a0051136,b82a7103-b872-49c3-b632-81d5a0051136,1,0,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,1,0,20c2053c-8ebd-4c07-8d95-956b424d047c,20c2053c-8ebd-4c07-8d95-956b424d047c,1,0,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,1,0,08fe5e70-ac6b-427a-b6f2-0e2f7848fa6b,08fe5e70-ac6b-427a-b6f2-0e2f7848fa6b,1,0,bef6081e-f377-41d6-83a1-b0e218a3fb46,bef6081e-f377-41d6-83a1-b0e218a3fb46,1,0,9b67bfd5-ef23-4205-b7ba-9466517e9999,9b67bfd5-ef23-4205-b7ba-9466517e9999,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,1,0,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,1,0,63fd620c-59a5-493c-a39e-457fad6fe35f,63fd620c-59a5-493c-a39e-457fad6fe35f,1,0,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,1,0,52e0ede7-de57-4640-b432-96e56131f277,52e0ede7-de57-4640-b432-96e56131f277,1,0,89888993-3b05-475e-ac76-3cd7ced93250,89888993-3b05-475e-ac76-3cd7ced93250,1,0,129f704b-cc63-4a4e-b6a7-9e53de4537a2,129f704b-cc63-4a4e-b6a7-9e53de4537a2,1,0,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,1,0,592f55e1-b004-44ef-878a-6c2016ccbeb0,592f55e1-b004-44ef-878a-6c2016ccbeb0,1,0,19add2bd-eede-4a05-901b-cf8ce49a638f,19add2bd-eede-4a05-901b-cf8ce49a638f,1,0,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,1,0,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,1,0,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,1,0,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,1,0,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,1,0,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,1,0,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,1,0,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,1,0,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,1,0,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,1,0,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,1,0,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1,0,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1,0,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,1,0,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,1,0,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,1,0,d33f4859-b68d-4d72-8f4c-a38cf47edb01,d33f4859-b68d-4d72-8f4c-a38cf47edb01,1,0,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,1,0,8c4c7982-36cc-4dc9-b055-9954f61e6365,8c4c7982-36cc-4dc9-b055-9954f61e6365,1,0,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,1,0,5f3d5a05-a581-462d-96a2-2750ba0e0481,5f3d5a05-a581-462d-96a2-2750ba0e0481,1,0,477ab478-b336-4bac-898f-e20e3a4039b5,477ab478-b336-4bac-898f-e20e3a4039b5,1,0,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,1,0,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,1,0,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,1,0,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,1,0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,1,0,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,1,0,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,1,0,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,1,0,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,1,0,e4216976-2747-4078-81d4-8ffab668c1f7,e4216976-2747-4078-81d4-8ffab668c1f7,1,0,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,1,0,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,1,0,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,1,0,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,1,0,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,1,0,6c66ff27-19af-4728-95a8-463fd1c4dcd3,6c66ff27-19af-4728-95a8-463fd1c4dcd3,1,0,9ed2c756-80a1-4559-8494-b7a9b82a4519,9ed2c756-80a1-4559-8494-b7a9b82a4519,1,0,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,1,0,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,1,0,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,1,0,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,1,0,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,1,0,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,1,0,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,1,0,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,1,0,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,1,0,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,1,0,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,1,0,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,1,0,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,1,0,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,1,0,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,1,0,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,1,0,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,1,0,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,1,0,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,1,0,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,1,0,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,1,0,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,1,0,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,1,0,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,1,0,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,1,0,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,1,0,9b4b7424-1af7-4d80-8404-8819fcfeae75,9b4b7424-1af7-4d80-8404-8819fcfeae75,1,0,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,1,0,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,1,0,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,1,0,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,1,0,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,1,0,251ca8fe-09eb-45ca-be8b-0d8faf927009,251ca8fe-09eb-45ca-be8b-0d8faf927009,1,0,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,1,0,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,1,0,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,1,0,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,1,0,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,1,0,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,1,0,973609a2-5b5d-45c4-9606-a13d0de1a09b,973609a2-5b5d-45c4-9606-a13d0de1a09b,1,0,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,1,0,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,1,0,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,1,0,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,1,0,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,1,0,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,1,0,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,1,0,48cefa96-46c7-4870-a096-951dcbae479a,48cefa96-46c7-4870-a096-951dcbae479a,1,0,d74e01cc-941b-4974-8771-0bd2e0d86724,d74e01cc-941b-4974-8771-0bd2e0d86724,1,0,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,1,0,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,1,0,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,1,0,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,1,0,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,1,0,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,1,0,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,1,0,aae09896-3b22-4d7d-9059-e47660f8b88b,aae09896-3b22-4d7d-9059-e47660f8b88b,1,0,845530cd-36fb-44c3-b30a-730985c9ca2d,845530cd-36fb-44c3-b30a-730985c9ca2d,1,0,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,1,0,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,1,0,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,1,0,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,1,0,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,1,0,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,1,0,ce5549bd-ba99-4259-86a3-36521bad59f5,ce5549bd-ba99-4259-86a3-36521bad59f5,1,0,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,1,0,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,1,0,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,1,0,3f3f1b41-57a9-4a82-bdfa-89a6653479ab,3f3f1b41-57a9-4a82-bdfa-89a6653479ab,1,0,fd12fbe2-56a2-4c9e-a072-989d826a5ea3,fd12fbe2-56a2-4c9e-a072-989d826a5ea3,1,0,08552af7-3c44-42c6-94c5-63a2316127fc,08552af7-3c44-42c6-94c5-63a2316127fc,1,0,41f6f6d1-b7cf-4477-907b-ce69fc08c799,41f6f6d1-b7cf-4477-907b-ce69fc08c799,1,0,9f1a61dd-b04f-48ae-b0c0-17cf23bdb04b,9f1a61dd-b04f-48ae-b0c0-17cf23bdb04b,1,0,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,1,0,a300ecc3-8031-4a50-a17d-b08cf3a72139,a300ecc3-8031-4a50-a17d-b08cf3a72139,1,0,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,1,0,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,1,0,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,1,0,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,1,0,657b8663-713c-4a80-81e1-8c0166742a35,657b8663-713c-4a80-81e1-8c0166742a35,1,0,866438d1-1223-4768-9c96-e6cb12f1a4d5,866438d1-1223-4768-9c96-e6cb12f1a4d5,1,0,d416cc2a-425f-4c01-a550-5a755ed78cc8,d416cc2a-425f-4c01-a550-5a755ed78cc8,1,0,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,1,0,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,1,0,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,1,0,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,1,0,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,1,0,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,1,0,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,1,0,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,1,0,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,1,0,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,1,0,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,1,0,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,1,0,a6587758-f7af-4f85-81b4-4312c725824e,a6587758-f7af-4f85-81b4-4312c725824e,1,0,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,1,0,63470706-f14b-4733-87c2-d1173f5d7e7a,63470706-f14b-4733-87c2-d1173f5d7e7a,1,0,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,1,0,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,1,0,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,1,0,76cdcc51-0e6a-4f9c-a115-1864998c2add,76cdcc51-0e6a-4f9c-a115-1864998c2add,1,0,71c3e5d3-7504-433f-9d48-7c287b2b863b,71c3e5d3-7504-433f-9d48-7c287b2b863b,1,0,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,1,0,0d8c215d-1210-47a2-897d-a3257b9f849a,0d8c215d-1210-47a2-897d-a3257b9f849a,1,0,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,1,0,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,1,0,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,1,0,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,1,0,e7a63151-fc1a-4563-8768-26d854ab012b,e7a63151-fc1a-4563-8768-26d854ab012b,1,0,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,1,0,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,1,0,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,1,0,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,1,0,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,1,0,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,1,0,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,1,0,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,1,0,eb276904-cad7-4401-bb78-2d13946291f1,eb276904-cad7-4401-bb78-2d13946291f1,1,0,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,1,0,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,1,0,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,1,0,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,1,0,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,1,0,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,1,0,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,1,0,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,1,0,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,1,0,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,1,0,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,1,0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,1,0,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,1,0,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,1,0,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,1,0,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,1,0,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,1,0,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,1,0,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1,0,7a944c45-9b3d-411f-b2ef-de3c896092bb,7a944c45-9b3d-411f-b2ef-de3c896092bb,1,0,d2762764-b5c0-4aeb-8e89-3371972f22d8,d2762764-b5c0-4aeb-8e89-3371972f22d8,1,0,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,1,0,323997ca-488d-4d84-aa44-da60b6b4d414,323997ca-488d-4d84-aa44-da60b6b4d414,1,0,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,1,0,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1,0,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,1,0,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,1,0,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,1,0,44afff59-0590-4929-93b8-7b49735f21b5,44afff59-0590-4929-93b8-7b49735f21b5,1,0,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,1,0,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,1,0,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,1,0,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,1,0,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,1,0,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,1,0,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,1,0,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,1,0,9892f922-8745-4164-a200-94b5edc1ea0a,9892f922-8745-4164-a200-94b5edc1ea0a,1,0,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,1,0,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,1,0,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,1,0,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,1,0,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,1,0,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,1,0,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,1,0,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,1,0,26986f8d-d56d-4641-9184-2632d0881cca,26986f8d-d56d-4641-9184-2632d0881cca,1,0,144676de-f369-49f1-bb21-d60e073936df,144676de-f369-49f1-bb21-d60e073936df,1,0,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,1,0,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,1,0,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,1,0,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,1,0,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,1,0,a2a51b70-9570-4f53-9d30-e9a9b099a475,a2a51b70-9570-4f53-9d30-e9a9b099a475,1,0,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,1,0,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,1,0,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,1,0,fdcbe67c-55fb-444d-bed8-cee956ca3530,fdcbe67c-55fb-444d-bed8-cee956ca3530,1,0,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,1,0,6ff5b3cb-efff-430d-bf0a-957405f116ca,6ff5b3cb-efff-430d-bf0a-957405f116ca,1,0,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,1,0,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,1,0,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,1,0,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,1,0,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,1,0,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,1,0,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,1,0,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,1,0,b8b267e3-75af-4140-b515-d99e8e748e84,b8b267e3-75af-4140-b515-d99e8e748e84,1,0,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,1,0,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,1,0,ad6384d5-278b-44d3-993a-d5a39e7c98ca,ad6384d5-278b-44d3-993a-d5a39e7c98ca,1,0,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,1,0,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,1,0,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,1,0,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,1,0,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,1,0,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,1,0,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,1,0,540be4e1-6eae-48e2-a645-8bd0a1259c65,540be4e1-6eae-48e2-a645-8bd0a1259c65,1,0,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,1,0,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,1,0,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,1,0,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,1,0,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,1,0,83ead93b-4ff6-487d-934e-25088944fccc,83ead93b-4ff6-487d-934e-25088944fccc,1,0,764c76cc-0473-4633-868d-02f96aa43c10,764c76cc-0473-4633-868d-02f96aa43c10,1,0,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,1,0,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,1,0,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,1,0,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,1,0,9416a741-5106-454e-b953-81f3d99d5e71,9416a741-5106-454e-b953-81f3d99d5e71,1,0,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,1,0,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,1,0,30f6aedf-946f-400c-822d-5fa375b8fb1d,30f6aedf-946f-400c-822d-5fa375b8fb1d,1,0,46e313f7-54da-4884-89e8-cdba6ae30d30,46e313f7-54da-4884-89e8-cdba6ae30d30,1,0,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,1,0,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,1,0,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,1,0,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,1,0,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,1,0,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,1,0,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,1,0,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1,0,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,1,0,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,1,0,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,1,0,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,1,0,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,1,0,5a088468-4065-4e0c-9b84-1162de8d3fdd,5a088468-4065-4e0c-9b84-1162de8d3fdd,1,0,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,1,0,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,1,0,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,1,0,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,1,0,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,1,0,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,1,0,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,1,0,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,1,0,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,1,0,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,1,0,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,1,0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,1,0,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,1,0,259cb8f5-9e78-4b2f-941b-ccb4b1112c8b,259cb8f5-9e78-4b2f-941b-ccb4b1112c8b,1,0,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,1,0,73c1a829-0191-486b-97a0-7f333c6f8011,73c1a829-0191-486b-97a0-7f333c6f8011,1,0,5504f5d1-35d8-4a47-a0e1-003fe00395c1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,1,0,56242b05-d722-4d4a-82d9-517e0e169d0b,56242b05-d722-4d4a-82d9-517e0e169d0b,1,0,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,1,0,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,1,0,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,1,0,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,1,0,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,1,0,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,1,0,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,1,0,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,1,0,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,1,0,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,1,0,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,1,0,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,1,0,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,1,0,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,1,0,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,1,0,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,1,0,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,1,0,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,1,0,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,1,0,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,1,0,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,1,0,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,1,0,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,1,0,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,1,0,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,1,0,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,1,0,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,1,0,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,1,0,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,1,0,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,1,0,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,1,0,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,1,0,73d8b319-9bea-4638-a602-23c12f37c227,73d8b319-9bea-4638-a602-23c12f37c227,1,0,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,1,0,a43e9de0-2921-4c58-a5f8-7446258be967,a43e9de0-2921-4c58-a5f8-7446258be967,1,0,307656e3-df7f-46e7-946c-bbd439265c95,307656e3-df7f-46e7-946c-bbd439265c95,1,0,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,1,0,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,1,0,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,1,0,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,1,0,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,1,0,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,1,0,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,1,0,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,1,0,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,1,0,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,1,0,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,1,0,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,1,0,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,1,0,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,1,0,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,1,0,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,1,0,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,1,0,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,1,0,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,1,0,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,1,0,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,1,0,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,1,0,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,1,0,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,1,0,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,1,0,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,1,0,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,1,0,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,1,0,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,1,0,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,1,0,dd383422-dddb-4a81-9326-015fd345b5c1,dd383422-dddb-4a81-9326-015fd345b5c1,1,0,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,1,0,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,1,0,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,1,0,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,1,0,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,1,0,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,1,0,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,1,0,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,1,0,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,1,0,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,1,0,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,1,0,7fe61c5d-30bc-440d-9e40-12ff3b296616,7fe61c5d-30bc-440d-9e40-12ff3b296616,1,0,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,1,0,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,1,0,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,1,0,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,1,0,13dee5d8-f165-48de-9ccb-3ef0239f4b27,13dee5d8-f165-48de-9ccb-3ef0239f4b27,1,0,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,1,0,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,1,0,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,1,0,eb3f959c-94a4-4e77-b9f9-e81954254079,eb3f959c-94a4-4e77-b9f9-e81954254079,1,0,71dfde27-3762-4dd0-9252-6e703ce1b101,71dfde27-3762-4dd0-9252-6e703ce1b101,1,0,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,1,0,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,1,0,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,1,0,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,1,0,36d6b0e1-5e10-408a-8eb1-09839e57690f,36d6b0e1-5e10-408a-8eb1-09839e57690f,1,0,6423b849-7ca4-4501-8856-445157d7e5df,6423b849-7ca4-4501-8856-445157d7e5df,1,0,0819e2b0-1eb0-41b3-ab89-0974bd926fb6,0819e2b0-1eb0-41b3-ab89-0974bd926fb6,1,0,e814287f-1c13-4f74-9507-d22a62394fd2,e814287f-1c13-4f74-9507-d22a62394fd2,1,0,417ac987-7369-45af-b670-fdffb048f33d,417ac987-7369-45af-b670-fdffb048f33d,1,0,640a5d72-dbc7-421b-afdb-cc3a4622ae04,640a5d72-dbc7-421b-afdb-cc3a4622ae04,1,0,79da84c1-5ac2-4472-8eb9-f0484b9582c2,79da84c1-5ac2-4472-8eb9-f0484b9582c2,1,0,2d0b161b-7d69-4ec4-a483-79bd458cb62c,2d0b161b-7d69-4ec4-a483-79bd458cb62c,1,0,f178bc1b-ebea-4fa9-8861-fe0d91f103e4,f178bc1b-ebea-4fa9-8861-fe0d91f103e4,1,0,e33a9c94-7e98-4b38-ba20-4546a90b2937,e33a9c94-7e98-4b38-ba20-4546a90b2937,1,0,1610e73c-58df-41cc-8349-51b920806821,1610e73c-58df-41cc-8349-51b920806821,1,0,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,1,0,c6ccf82f-f130-4037-9e89-1e0365b996a4,c6ccf82f-f130-4037-9e89-1e0365b996a4,1,0,c532963e-0d92-44b9-9cfc-43ed2744ccf9,c532963e-0d92-44b9-9cfc-43ed2744ccf9,1,0,6aff2855-24d4-4f90-b617-53326efdd1bd,6aff2855-24d4-4f90-b617-53326efdd1bd,1,0,0107a9c7-4c85-49c4-918a-925d85d57a0b,0107a9c7-4c85-49c4-918a-925d85d57a0b,1,0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,1,0,e5b578a1-e33b-4d49-8064-427aa928a844,e5b578a1-e33b-4d49-8064-427aa928a844,1,0,f74e97ad-fef6-4122-a056-86f2d59dfdaf,f74e97ad-fef6-4122-a056-86f2d59dfdaf,1,0,df1ef691-1e86-4a80-8671-53b3d4504bfb,df1ef691-1e86-4a80-8671-53b3d4504bfb,1,0,474b9918-23da-4289-91a9-9115526c9b5d,474b9918-23da-4289-91a9-9115526c9b5d,1,0,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1,0,60aa9d44-5986-490e-8093-f65e194b3607,60aa9d44-5986-490e-8093-f65e194b3607,1,0,a36dee5e-7184-4caf-bf46-3977b165093b,a36dee5e-7184-4caf-bf46-3977b165093b,1,0,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,1,0,182916b2-972b-4e39-93ba-d45aa7a195f5,182916b2-972b-4e39-93ba-d45aa7a195f5,1,0,2b654a53-7ce8-421f-aaf5-aa1451d91415,2b654a53-7ce8-421f-aaf5-aa1451d91415,1,0,30e55306-ea5c-4ef4-9903-ea030afa3d85,30e55306-ea5c-4ef4-9903-ea030afa3d85,1,0,234c1a72-8349-472a-8373-2a25ce6252f2,234c1a72-8349-472a-8373-2a25ce6252f2,1,0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,1,0,539e0db9-be24-4086-9632-af20553ee50f,539e0db9-be24-4086-9632-af20553ee50f,1,0,b9adeb51-a009-4e83-85f8-bfa1547429d6,b9adeb51-a009-4e83-85f8-bfa1547429d6,1,0,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,1,0,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,1,0,b848d70a-9d08-4b1a-8df1-17697432516d,b848d70a-9d08-4b1a-8df1-17697432516d,1,0,9a30b92d-0c5b-4e11-a741-2b6efa8ac229,9a30b92d-0c5b-4e11-a741-2b6efa8ac229,1,0,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,1,0,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,1,0,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,1,0,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,1,0,e8bec681-d269-41ba-9184-556cbcc27d74,e8bec681-d269-41ba-9184-556cbcc27d74,1,0,b8aaef91-f72c-4127-a494-771c13694ca4,b8aaef91-f72c-4127-a494-771c13694ca4,1,0,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,1,0,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,1,0,3e090261-4aa2-4ece-9f77-62df83c890b3,3e090261-4aa2-4ece-9f77-62df83c890b3,1,0,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,1,0,9292034c-24e8-49a7-9b77-7974e117847d,9292034c-24e8-49a7-9b77-7974e117847d,1,0,3327b7d4-62fc-44cc-83b4-c449bfa4e706,3327b7d4-62fc-44cc-83b4-c449bfa4e706,1,0,43ecee25-68eb-48cf-bbaa-aee71052438f,43ecee25-68eb-48cf-bbaa-aee71052438f,1,0,93799f8b-0188-4546-8815-35e733bcc2b1,93799f8b-0188-4546-8815-35e733bcc2b1,1,0,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,1,0,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,1,0,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,1,0,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,1,0,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,1,0,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,1,0,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,1,0,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,1,0,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,1,0,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,1,0,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,1,0,1b4feda1-e555-4b85-b236-b21153a7246f,1b4feda1-e555-4b85-b236-b21153a7246f,1,0,61d3cef4-2c42-417d-a762-a2d2f5a28924,61d3cef4-2c42-417d-a762-a2d2f5a28924,1,0,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,1,0,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,1,0,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,1,0,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,1,0,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,1,0,7ab6acda-6732-4582-8092-d43f9a98a28d,7ab6acda-6732-4582-8092-d43f9a98a28d,1,0,5ab1d405-bfc3-4440-8cdd-3a63013b064d,5ab1d405-bfc3-4440-8cdd-3a63013b064d,1,0,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,1,0,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,1,0,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,1,0,6bcba052-4d81-409d-b1a2-eed6be6fb024,6bcba052-4d81-409d-b1a2-eed6be6fb024,1,0,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,1,0,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,1,0,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,1,0,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,1,0,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,1,0,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,1,0,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,1,0,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,1,0,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,1,0,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,1,0,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,1,0,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,1,0,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,1,0,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,1,0,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,1,0,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,1,0,093332f5-3eb4-478c-ac95-59dcdc96765a,093332f5-3eb4-478c-ac95-59dcdc96765a,1,0,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,1,0,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,1,0,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,1,0,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,1,0,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,1,0,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,1,0,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,1,0,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,1,0,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,1,0,e72e59c0-391d-497e-9407-063e0edf573e,e72e59c0-391d-497e-9407-063e0edf573e,1,0,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,1,0,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,1,0,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,1,0,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,1,0,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,1,0,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,1,0,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,1,0,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,1,0,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,1,0,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,1,0,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,1,0,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,1,0,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,1,0,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,1,0,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,1,0,13b27ec3-2be9-4959-92e5-94ba7bb64f03,13b27ec3-2be9-4959-92e5-94ba7bb64f03,1,0,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,1,0,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,1,0,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,1,0,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,1,0,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,1,0,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,1,0,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,1,0,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,1,0,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,1,0,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,1,0,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,1,0,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,1,0,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,1,0,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,1,0,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,1,0,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,1,0,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,1,0,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,1,0,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,1,0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,1,0,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,1,0,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,1,0,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,1,0,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,1,0,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,1,0,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,1,0,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,1,0,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,1,0,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,1,0,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,1,0,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,1,0,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,1,0,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,1,0,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,1,0,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,1,0,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,1,0,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,1,0,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,1,0,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,1,0,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,1,0,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,1,0,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,1,0,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,1,0,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,1,0,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,1,0,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,1,0,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,1,0,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,1,0,f9950ab5-1077-4033-bbbf-53899a1bcf33,f9950ab5-1077-4033-bbbf-53899a1bcf33,1,0,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,1,0,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,1,0,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,1,0,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,1,0,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,1,0,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,1,0,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,1,0,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1,0,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,1,0,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,1,0,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,1,0,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,1,0,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,1,0,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,1,0,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,1,0,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,1,0,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,1,0,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,1,0,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,1,0,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,1,0,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,1,0,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,1,0,35828c88-f1ec-42e7-b189-78748931ee4a,35828c88-f1ec-42e7-b189-78748931ee4a,1,0,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,1,0,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1,0,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,1,0,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,1,0,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,1,0,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,1,0,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,1,0,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,1,0,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,1,0,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,1,0,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,1,0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,1,0,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,1,0,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,1,0,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,1,0,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,1,0,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,1,0,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,1,0,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,1,0,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,1,0,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,1,0,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,1,0,67a04d72-afea-487a-b629-e4b7dfc1df32,67a04d72-afea-487a-b629-e4b7dfc1df32,1,0,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,1,0,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,1,0,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,1,0,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,1,0,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,1,0,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,1,0,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,1,0,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,1,0,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,1,0,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,1,0,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,1,0,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,1,0,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,1,0,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,1,0,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,1,0,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,1,0,8f09cbed-6f24-461f-9b35-31c64310e74a,8f09cbed-6f24-461f-9b35-31c64310e74a,1,0,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,1,0,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,1,0,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,1,0,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,1,0,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,1,0,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,1,0,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,1,0,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,1,0,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,1,0,211d226f-dac6-43d5-8720-952da4339e35,211d226f-dac6-43d5-8720-952da4339e35,1,0,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,1,0,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,1,0,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,1,0,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,1,0,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,1,0,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,1,0,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,1,0,463b8966-a5f9-4a80-82b9-1608a1622e13,463b8966-a5f9-4a80-82b9-1608a1622e13,1,0,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,1,0,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,1,0,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,1,0,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,1,0,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,1,0,01cb357c-af28-4855-afae-45b6df19b344,01cb357c-af28-4855-afae-45b6df19b344,1,0,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,1,0,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,1,0,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,1,0,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,1,0,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,1,0,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,1,0,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,1,0,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,1,0,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,1,0,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,1,0,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,1,0,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,1,0,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,1,0,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,1,0,aa509aa3-dd45-41f3-82c7-59662c2e2c47,aa509aa3-dd45-41f3-82c7-59662c2e2c47,1,0,c4552529-e69e-4c5c-bd66-04b2f7dac281,c4552529-e69e-4c5c-bd66-04b2f7dac281,1,0,381b49ba-793a-4418-9fd4-598844fb72a6,381b49ba-793a-4418-9fd4-598844fb72a6,1,0,1aee302d-df31-49ea-b542-436dc1d79ae1,1aee302d-df31-49ea-b542-436dc1d79ae1,1,0,593509da-d33c-49ff-a62c-a28cbc4651c1,593509da-d33c-49ff-a62c-a28cbc4651c1,1,0,5e346a0b-a322-4565-adb9-70131fb05fa3,5e346a0b-a322-4565-adb9-70131fb05fa3,1,0,9a69c559-194b-4f74-9879-82740260f5f6,9a69c559-194b-4f74-9879-82740260f5f6,1,0,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,1,0,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,1,0,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,1,0,2e19fb7b-270f-4181-b4a1-640280bbbc5c,2e19fb7b-270f-4181-b4a1-640280bbbc5c,1,0,cf69b045-665d-4f6c-827f-5044beacd125,cf69b045-665d-4f6c-827f-5044beacd125,1,0,aa773eef-0c4a-49be-9f5e-9131bc041415,aa773eef-0c4a-49be-9f5e-9131bc041415,1,0,9b31e474-01d4-4c3b-a633-3a2ff3917d62,9b31e474-01d4-4c3b-a633-3a2ff3917d62,1,0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1,0,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,1,0,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,1,0,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,1,0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,1,0,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,1,0,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,1,0,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,1,0,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,1,0,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,1,0,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,1,0,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,1,0,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,1,0,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,1,0,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,1,0,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,1,0,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,1,0,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,1,0,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,1,0,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,1,0,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,1,0,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,1,0,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,1,0,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,1,0,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,1,0,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,1,0,37e3d914-643e-4963-b4a0-7bc6727c0c9b,37e3d914-643e-4963-b4a0-7bc6727c0c9b,1,0,b6902500-3e03-4e83-a077-00500abc00b6,b6902500-3e03-4e83-a077-00500abc00b6,1,0,d253aa54-a447-44aa-bb13-82fd1ce22af4,d253aa54-a447-44aa-bb13-82fd1ce22af4,1,0,8936f114-7a0e-4a4c-8752-ccacab410778,8936f114-7a0e-4a4c-8752-ccacab410778,1,0,55649242-42fd-468f-a1e4-f6cd8871f7a4,55649242-42fd-468f-a1e4-f6cd8871f7a4,1,0,980e0883-cd8f-48c8-896f-ef185650f5c2,980e0883-cd8f-48c8-896f-ef185650f5c2,1,0,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,1,0,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,1,0,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,1,0,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,1,0,cd869887-0b0e-43db-8b51-04fe4a1341d5,cd869887-0b0e-43db-8b51-04fe4a1341d5,1,0,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,1,0,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,1,0,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,1,0,cd8fd85f-f02e-4f11-b4b4-40670febfaca,cd8fd85f-f02e-4f11-b4b4-40670febfaca,1,0,3f023afb-c02a-42ee-9afe-0f47ef3fe721,3f023afb-c02a-42ee-9afe-0f47ef3fe721,1,0,d7fe80d3-7fcf-427e-a991-5384f0c3947e,d7fe80d3-7fcf-427e-a991-5384f0c3947e,1,0,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,1,0,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,1,0,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,1,0,16939af9-e459-43da-8e0d-5d5891af6e0c,16939af9-e459-43da-8e0d-5d5891af6e0c,1,0,1d736a09-6c8f-433a-bf5b-201996bf4c62,1d736a09-6c8f-433a-bf5b-201996bf4c62,1,0,157988ad-d482-41df-b3e3-f2a0383d7130,157988ad-d482-41df-b3e3-f2a0383d7130,1,0,33af87a9-db69-41da-a33a-0435da2155e3,33af87a9-db69-41da-a33a-0435da2155e3,1,0,c95831b4-7d1d-4a9a-b5d0-caa03c4f4eca,c95831b4-7d1d-4a9a-b5d0-caa03c4f4eca,1,0,81b63f1d-2c65-4efb-8599-8a4d97b612ab,81b63f1d-2c65-4efb-8599-8a4d97b612ab,1,0,4b13a2c6-a6ce-47a0-8d9e-1a5dbe8d4b00,4b13a2c6-a6ce-47a0-8d9e-1a5dbe8d4b00,1,0,d1dde981-615a-461f-b0c5-a85f51003a2c,d1dde981-615a-461f-b0c5-a85f51003a2c,1,0,f5970c48-63d7-4064-bdfc-482b72939347,f5970c48-63d7-4064-bdfc-482b72939347,1,0,5c8039c0-34d8-4443-bd8f-dfe3dc2977a8,5c8039c0-34d8-4443-bd8f-dfe3dc2977a8,1,0,335f379a-2974-44ce-a668-e7ffe2ce6263,335f379a-2974-44ce-a668-e7ffe2ce6263,1,0,7edd75a2-9d03-4330-9185-28d0f0d4a2e4,7edd75a2-9d03-4330-9185-28d0f0d4a2e4,1,0,f7cc4f9e-cf9a-41f5-865f-d64108b981a5,f7cc4f9e-cf9a-41f5-865f-d64108b981a5,1,0,b58f8947-344c-4902-832c-d8004da55c34,b58f8947-344c-4902-832c-d8004da55c34,1,0,35cccc1d-3d67-4d39-aa79-2c30a5347587,35cccc1d-3d67-4d39-aa79-2c30a5347587,1,0,b6ee01eb-31ab-4f39-b4ff-37a04e3c7f35,b6ee01eb-31ab-4f39-b4ff-37a04e3c7f35,1,0,0776dfb2-67e0-4e11-9f94-abde790ff7e2,0776dfb2-67e0-4e11-9f94-abde790ff7e2,1,0,9c92b833-7406-48e2-9f59-69d575a3898f,9c92b833-7406-48e2-9f59-69d575a3898f,1,0,0cc5334f-8147-455c-8262-540324415812,0cc5334f-8147-455c-8262-540324415812,1,0,f3c4e6db-7c4e-4027-8bfd-f7854d566fc1,f3c4e6db-7c4e-4027-8bfd-f7854d566fc1,1,0,0eeb2f75-7092-4487-891f-cdbc9aa978cb,0eeb2f75-7092-4487-891f-cdbc9aa978cb,1,0,4ac60443-c7cb-492f-98b4-7e48bf9bfaa6,4ac60443-c7cb-492f-98b4-7e48bf9bfaa6,1,0,22979d50-ea57-4fab-9673-1b537838aead,22979d50-ea57-4fab-9673-1b537838aead,1,0,14676ee5-c247-46c6-a37e-c4362de79bb9,14676ee5-c247-46c6-a37e-c4362de79bb9,1,0,9fa36fe3-814e-4472-94ee-5d9d2b230b24,9fa36fe3-814e-4472-94ee-5d9d2b230b24,1,0,4b59dc62-0352-45a8-b33b-c42f4eea75ee,4b59dc62-0352-45a8-b33b-c42f4eea75ee,1,0,ea8a50ce-f09c-49f7-be58-ff2864e4eaa3,ea8a50ce-f09c-49f7-be58-ff2864e4eaa3,1,0,2020d672-bef4-4b30-885e-7f41364e412b,2020d672-bef4-4b30-885e-7f41364e412b,1,0,c292ddbc-9402-4c43-93d8-f8efafa6456e,c292ddbc-9402-4c43-93d8-f8efafa6456e,1,0,0281cbd6-972d-4632-9a6a-f8791e2534ee,0281cbd6-972d-4632-9a6a-f8791e2534ee,1,0,bae01f18-b6f3-44e4-93c3-ffcb3ef01b98,bae01f18-b6f3-44e4-93c3-ffcb3ef01b98,1,0,98d66bf0-617a-40aa-97bd-896d37a966ab,98d66bf0-617a-40aa-97bd-896d37a966ab,1,0,1847bb2f-8309-4c49-b752-ef7ec16d4230,1847bb2f-8309-4c49-b752-ef7ec16d4230,1,0,ca23f432-e2a3-4385-8cc1-7e9c96f9d7a1,ca23f432-e2a3-4385-8cc1-7e9c96f9d7a1,1,0,e1856045-f394-45b8-9f0c-298812f1f514,e1856045-f394-45b8-9f0c-298812f1f514,1,0,eb175c1d-7fcb-4807-82e3-688639468116,eb175c1d-7fcb-4807-82e3-688639468116,1,0,4ed9c099-700f-409b-bd91-e24719046953,4ed9c099-700f-409b-bd91-e24719046953,1,0,85b935b4-5eec-40cf-9d99-02cb3f599492,85b935b4-5eec-40cf-9d99-02cb3f599492,1,0,5764a412-4a20-4b2e-9905-ce74a9cac3ae,5764a412-4a20-4b2e-9905-ce74a9cac3ae,1,0,c4330791-d8f7-400f-b270-dee567e7a695,c4330791-d8f7-400f-b270-dee567e7a695,1,0,aab8ec4d-51de-4c1a-9794-266c119332d1,aab8ec4d-51de-4c1a-9794-266c119332d1,1,0,77cb6e52-37a9-423c-8260-6998161adcb5,77cb6e52-37a9-423c-8260-6998161adcb5,1,0,d903569d-911d-4277-a26f-afe2bf67eb09,d903569d-911d-4277-a26f-afe2bf67eb09,1,0,b5ac7de5-565f-4637-b267-dde3637e336b,b5ac7de5-565f-4637-b267-dde3637e336b,1,0,d4a6ab09-259f-4476-834c-a2b57cdeac05,d4a6ab09-259f-4476-834c-a2b57cdeac05,1,0,8c9636c3-0a84-4575-b4c7-6d8bb588e1b0,8c9636c3-0a84-4575-b4c7-6d8bb588e1b0,1,0,76e03401-7c07-4037-a464-d7377852de1d,76e03401-7c07-4037-a464-d7377852de1d,1,0,dc8239e8-fddf-411e-b51a-4230b63236cd,dc8239e8-fddf-411e-b51a-4230b63236cd,1,0,3b861376-2864-4de8-ba59-2a2835d7eaf6,3b861376-2864-4de8-ba59-2a2835d7eaf6,1,0,02910dcd-9e66-4239-a421-8067faf59577,02910dcd-9e66-4239-a421-8067faf59577,1,0,76d5a67f-bb11-4937-a66d-cdce28165562,76d5a67f-bb11-4937-a66d-cdce28165562,1,0,b99a23a5-bfbf-46ec-8268-ff89afdfc63a,b99a23a5-bfbf-46ec-8268-ff89afdfc63a,1,0,cdb93924-62ce-4268-9915-e6c67c1b9cb8,cdb93924-62ce-4268-9915-e6c67c1b9cb8,1,0,1139b6c7-7b55-45b4-98cf-ccac3bfaaa6c,1139b6c7-7b55-45b4-98cf-ccac3bfaaa6c,1,0,33c39990-f4fc-4629-83ba-b43b05a40ca6,33c39990-f4fc-4629-83ba-b43b05a40ca6,1,0,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,1,0,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,1,0,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,1,0,091ccac1-9a63-4a89-bb0c-333b274b0c70,091ccac1-9a63-4a89-bb0c-333b274b0c70,1,0,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,1,0,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,1,0,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,1,0,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,1,0,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,1,0,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,1,0,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,1,0,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,1,0,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,1,0,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,1,0,2a6e1f2b-7378-456b-9657-9e971eaff716,2a6e1f2b-7378-456b-9657-9e971eaff716,1,0,c3cdea20-3055-4b4e-a531-a02d4f3ed294,c3cdea20-3055-4b4e-a531-a02d4f3ed294,1,0,46417026-c44a-4a06-af41-9cf6495a33b4,46417026-c44a-4a06-af41-9cf6495a33b4,1,0,363c15f3-660e-4e19-b3cc-37c5d05e8d22,363c15f3-660e-4e19-b3cc-37c5d05e8d22,1,0,eeb4b6f1-2476-467d-9862-6fe9d3013b2c,eeb4b6f1-2476-467d-9862-6fe9d3013b2c,1,0,59d5cd7d-7f53-4015-89d9-bb8ad89f8c04,59d5cd7d-7f53-4015-89d9-bb8ad89f8c04,1,0,9d7f7dde-fea8-4064-abe2-bb7d04500cb2,9d7f7dde-fea8-4064-abe2-bb7d04500cb2,1,0,3af45dae-f563-4d23-a87a-11b4d9d5d7a7,3af45dae-f563-4d23-a87a-11b4d9d5d7a7,1,0,fe102b7b-b61f-4572-b2d0-c0af11bfb7d7,fe102b7b-b61f-4572-b2d0-c0af11bfb7d7,1,0,2cfa0db8-f0e6-4513-ab19-52dccff302bc,2cfa0db8-f0e6-4513-ab19-52dccff302bc,1,0,b9fece39-6e5d-44c0-af5c-ad13cfb71560,b9fece39-6e5d-44c0-af5c-ad13cfb71560,1,0,a9c30e99-c265-471d-9115-50ac2bb05191,a9c30e99-c265-471d-9115-50ac2bb05191,1,0,d388c9ca-1dbd-45b9-ac33-5ffa8cb11499,d388c9ca-1dbd-45b9-ac33-5ffa8cb11499,1,0,efebb079-b913-4249-b128-e0ffc7ab43dd,efebb079-b913-4249-b128-e0ffc7ab43dd,1,0,52077ee4-fef1-451f-8338-86563ff5cf60,52077ee4-fef1-451f-8338-86563ff5cf60,1,0,8e6780f8-8d0e-47d1-ac26-47bf5d906f61,8e6780f8-8d0e-47d1-ac26-47bf5d906f61,1,0,fd4a26c1-31e0-4216-92e0-1e090ec4f094,fd4a26c1-31e0-4216-92e0-1e090ec4f094,1,0,637148a3-0f54-4d41-91dd-a0aa6e191015,637148a3-0f54-4d41-91dd-a0aa6e191015,1,0,9a86e2fe-a9bc-4f0a-a16e-a97944fe8539,9a86e2fe-a9bc-4f0a-a16e-a97944fe8539,1,0,86755cbc-efd8-43e7-bba8-975c0a51f38f,86755cbc-efd8-43e7-bba8-975c0a51f38f,1,0,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,1,0,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,1,0,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,1,0,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,1,0,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,1,0,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,1,0,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,1,0,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,1,0,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,1,0,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,1,0,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,1,0,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,1,0,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,1,0,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,1,0,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,1,0,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,1,0,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,1,0,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,1,0,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,1,0,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,1,0,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,1,0,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,1,0,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,1,0,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,1,0,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,1,0,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,1,0,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,1,0,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,1,0,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,1,0,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,1,0,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,1,0,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,1,0,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,1,0,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,1,0,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,1,0,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,1,0,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,1,0,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,1,0,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,1,0,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,1,0,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,1,0,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,1,0,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,1,0,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,1,0,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,1,0,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,1,0,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,1,0,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,1,0,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,1,0,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,1,0,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,1,0,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,1,0,cc8e3172-491d-45d8-a7eb-fc6c400845cb,cc8e3172-491d-45d8-a7eb-fc6c400845cb,1,0,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,1,0,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,1,0,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,1,0,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,1,0,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,1,0,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,1,0,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,1,0,245f870e-a53a-4d86-aa0a-c0c7709b8acb,245f870e-a53a-4d86-aa0a-c0c7709b8acb,1,0,476f6bfa-b10c-4e0f-8499-23c652715b3f,476f6bfa-b10c-4e0f-8499-23c652715b3f,1,0,65c9754b-53f6-4616-a9d4-74826f7b0ced,65c9754b-53f6-4616-a9d4-74826f7b0ced,1,0,eca2b076-d218-4d1c-948b-7894edf9fa49,eca2b076-d218-4d1c-948b-7894edf9fa49,1,0,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,1,0,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,1,0,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,1,0,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,1,0,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,1,0,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1,0,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,1,0,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,1,0,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,1,0,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,1,0,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,1,0,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,1,0,40a59681-f31d-4fb9-9301-67c1430590e0,40a59681-f31d-4fb9-9301-67c1430590e0,1,0,ae3358ad-ea3a-4b73-a305-02a152863978,ae3358ad-ea3a-4b73-a305-02a152863978,1,0,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,1,0,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,1,0,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,1,0,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,1,0,9c3bc502-bcb1-4c90-ae43-53c798958339,9c3bc502-bcb1-4c90-ae43-53c798958339,1,0,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,1,0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,1,0,5eb4ca7f-027a-4860-a167-e6b424527e7a,5eb4ca7f-027a-4860-a167-e6b424527e7a,1,0,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,1,0,6871015f-d959-4a77-a091-a23cb4ebd8f9,6871015f-d959-4a77-a091-a23cb4ebd8f9,1,0,e5e1631b-a494-4e73-b356-b4330b84cc88,e5e1631b-a494-4e73-b356-b4330b84cc88,1,0,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,1,0,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,1,0,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,1,0,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,1,0,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,1,0,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,1,0,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,1,0,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,1,0,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,1,0,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,1,0,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,1,0,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,1,0,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,1,0,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,1,0,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,1,0,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,1,0,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,1,0,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,1,0,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,1,0,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,1,0,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,1,0,55bce105-51c0-452e-9eec-b960fe740db2,55bce105-51c0-452e-9eec-b960fe740db2,1,0,776c171d-5dd5-4965-94dc-c2fe6792d5f2,776c171d-5dd5-4965-94dc-c2fe6792d5f2,1,0,86bb1105-702a-47be-906a-1821a69b1b6c,86bb1105-702a-47be-906a-1821a69b1b6c,1,0,40653767-9542-44e9-a84b-ffee75584638,40653767-9542-44e9-a84b-ffee75584638,1,0,49bd152e-479a-46fe-b3af-26ed9181dc34,49bd152e-479a-46fe-b3af-26ed9181dc34,1,0,0a742dd2-1ff4-42de-b303-f2bb01b36fe2,0a742dd2-1ff4-42de-b303-f2bb01b36fe2,1,0,69e13959-51ad-4ac2-9cfc-17ac28b78c78,69e13959-51ad-4ac2-9cfc-17ac28b78c78,1,0,f890ca1b-f2c2-4630-9002-301b759ca6d9,f890ca1b-f2c2-4630-9002-301b759ca6d9,1,0,08c8a9bf-7b89-4d0e-a496-4c7efeca0577,08c8a9bf-7b89-4d0e-a496-4c7efeca0577,1,0,f6c2b015-9cfc-40d2-a93f-b0e88db4a23f,f6c2b015-9cfc-40d2-a93f-b0e88db4a23f,1,0,103f3d8f-e47a-4772-bdd7-dd5f8508d22b,103f3d8f-e47a-4772-bdd7-dd5f8508d22b,1,0,ba8ea271-8716-49ef-8b10-f4b5798c1f62,ba8ea271-8716-49ef-8b10-f4b5798c1f62,1,0,3633c30c-9479-4801-89cc-a5734a41e465,3633c30c-9479-4801-89cc-a5734a41e465,1,0,f295c68d-7e29-48b8-a95a-56e96d9843c1,f295c68d-7e29-48b8-a95a-56e96d9843c1,1,0,7ebe16ee-8e5d-4b05-89b5-9539f73be90c,7ebe16ee-8e5d-4b05-89b5-9539f73be90c,1,0,ea5d0221-fb1e-4626-862a-9c1209365d8f,ea5d0221-fb1e-4626-862a-9c1209365d8f,1,0,12bce69b-933c-4ce4-9d29-a47f3db0226e,12bce69b-933c-4ce4-9d29-a47f3db0226e,1,0,82dcd6a3-c35b-421c-a8f9-77855ad2abca,82dcd6a3-c35b-421c-a8f9-77855ad2abca,1,0,ad0b1720-282e-49d4-af80-324a887963c3,ad0b1720-282e-49d4-af80-324a887963c3,1,0,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,1,0,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,1,0,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,1,0,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,1,0,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,1,0,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,1,0,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,1,0,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,1,0,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,1,0,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,1,0,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,1,0,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,1,0,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,1,0,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,1,0,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,1,0,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,1,0,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,1,0,85223d37-2503-4783-94dc-fe6265e718d5,85223d37-2503-4783-94dc-fe6265e718d5,1,0,0918cd76-56e5-4314-8a1c-c21d023ba6f8,0918cd76-56e5-4314-8a1c-c21d023ba6f8,1,0,9db21c2e-79fa-44e4-902e-416abfccb54a,9db21c2e-79fa-44e4-902e-416abfccb54a,1,0,fb082db3-197b-4d1e-b9ea-362624d547ee,fb082db3-197b-4d1e-b9ea-362624d547ee,1,0,c09dcf00-a45a-4487-99c5-d3a37956ec88,c09dcf00-a45a-4487-99c5-d3a37956ec88,1,0,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,1,0,2714e1b6-6b02-43a1-bc94-2934b429ed35,2714e1b6-6b02-43a1-bc94-2934b429ed35,1,0,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,1,0,4c7016da-9991-4917-8eaa-e760cc9e29d1,4c7016da-9991-4917-8eaa-e760cc9e29d1,1,0,febb3770-5c11-4ada-9e49-a27950bdaddf,febb3770-5c11-4ada-9e49-a27950bdaddf,1,0,d7b57669-e538-4e54-ab1b-8428f0586466,d7b57669-e538-4e54-ab1b-8428f0586466,1,0,9c484a15-039e-416d-af97-4c2bd90fd873,9c484a15-039e-416d-af97-4c2bd90fd873,1,0,534855e3-4cf2-471c-b982-7138917050c9,534855e3-4cf2-471c-b982-7138917050c9,1,0,4c72b944-d000-4920-aec8-54029f88ddf4,4c72b944-d000-4920-aec8-54029f88ddf4,1,0,b4033d05-05c2-4617-80d9-abfa389c47f4,b4033d05-05c2-4617-80d9-abfa389c47f4,1,0,aa29e1be-4e99-4136-8dc1-0124908979ad,aa29e1be-4e99-4136-8dc1-0124908979ad,1,0,0d76799d-7fc7-446b-88fb-dca839de00a5,0d76799d-7fc7-446b-88fb-dca839de00a5,1,0,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,1,0,ea4a869c-861c-412c-a3be-de1c57d1a251,ea4a869c-861c-412c-a3be-de1c57d1a251,1,0,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,1,0,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,1,0,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,1,0,50ac390d-324f-40bd-b3df-0468a63b94b6,50ac390d-324f-40bd-b3df-0468a63b94b6,1,0,80337710-2c60-45c4-ae1f-bb42731fb611,80337710-2c60-45c4-ae1f-bb42731fb611,1,0,9dcf467e-7701-4c7b-b747-95f4d9b9295c,9dcf467e-7701-4c7b-b747-95f4d9b9295c,1,0,dd07b255-25af-466e-a224-c561a8ca567b,dd07b255-25af-466e-a224-c561a8ca567b,1,0,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,1,0,1e9e115a-e65b-4346-b0d3-47cf1dbe75f2,1e9e115a-e65b-4346-b0d3-47cf1dbe75f2,1,0,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,1,0,67993b79-6aca-4641-b2e2-0a15f44e47d5,67993b79-6aca-4641-b2e2-0a15f44e47d5,1,0,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,1,0,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,1,0,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,1,0,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,1,0,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,1,0,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,1,0,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,1,0,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,1,0,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,1,0,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,1,0,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,1,0,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,1,0,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,1,0,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,1,0,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,1,0,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,1,0,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,1,0,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,1,0,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,1,0,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,1,0,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,1,0,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,1,0,0d89036c-af6e-4709-847c-0dab74a33d72,0d89036c-af6e-4709-847c-0dab74a33d72,1,0,7d223aab-d4f6-41d5-a701-6fe03517cf50,7d223aab-d4f6-41d5-a701-6fe03517cf50,1,0,631cdd15-eb1f-4903-9073-4de3911ba2e6,631cdd15-eb1f-4903-9073-4de3911ba2e6,1,0,6b10ab0a-8d4e-4847-9ce7-663fb4770c35,6b10ab0a-8d4e-4847-9ce7-663fb4770c35,1,0,42630eee-ce93-40a8-b96e-3eb759f48976,42630eee-ce93-40a8-b96e-3eb759f48976,1,0,174e0187-cf34-4949-8dc2-a1f9aece78dc,174e0187-cf34-4949-8dc2-a1f9aece78dc,1,0,5d9f2db6-704d-45cb-96c3-e59e47ad4fea,5d9f2db6-704d-45cb-96c3-e59e47ad4fea,1,0,e4dbeb50-292f-452f-a0da-a55e5ea936e4,e4dbeb50-292f-452f-a0da-a55e5ea936e4,1,0,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,1,0,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,1,0,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,1,0,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,1,0,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,1,0,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,1,0,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,1,0,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,1,0,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,1,0,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,1,0,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,1,0,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,1,0,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,1,0,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,1,0,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,1,0,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,1,0,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,1,0,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,1,0,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,1,0,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,1,0,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,1,0,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,1,0,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,1,0,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,1,0,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,1,0,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,1,0,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,1,0,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,1,0,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,1,0,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,1,0,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,1,0,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,1,0,5b379a72-8605-4e88-84cb-14272a3b8f5f,5b379a72-8605-4e88-84cb-14272a3b8f5f,1,0,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,1,0,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,1,0,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,1,0,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,1,0,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,1,0,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,1,0,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,1,0,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,1,0,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,1,0,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,1,0,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,1,0,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,1,0,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,1,0,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,1,0,612f3b95-d7db-4b33-92b5-4873205b424b,612f3b95-d7db-4b33-92b5-4873205b424b,1,0,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,1,0,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,1,0,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,1,0,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,1,0,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,1,0,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,1,0,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,1,0,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,1,0,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,1,0,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,1,0,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,1,0,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,1,0,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,1,0,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,1,0,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,1,0,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,1,0,616cd2cc-eaf4-4586-bca1-c044429b491a,616cd2cc-eaf4-4586-bca1-c044429b491a,1,0,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,1,0,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,1,0,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,1,0,81d900be-ddc1-417f-ae2c-1aacf040de9a,81d900be-ddc1-417f-ae2c-1aacf040de9a,1,0,c65f69ce-be78-4e8d-b91d-293c4108ce77,c65f69ce-be78-4e8d-b91d-293c4108ce77,1,0,521a5717-0b38-401d-bd72-30cee219bd14,521a5717-0b38-401d-bd72-30cee219bd14,1,0,977c30dc-6f27-4931-9fd5-d12ed147e3ec,977c30dc-6f27-4931-9fd5-d12ed147e3ec,1,0,eea4f72e-dd1b-46c7-b270-876a482236b3,eea4f72e-dd1b-46c7-b270-876a482236b3,1,0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,1,0,2d249dad-8b4f-462b-ab13-892639a6e071,2d249dad-8b4f-462b-ab13-892639a6e071,1,0,f6249bf4-d2e7-48f3-808f-d776915d14cb,f6249bf4-d2e7-48f3-808f-d776915d14cb,1,0,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,1,0,883cdeb0-e747-4157-bbe7-0ebc423a82af,883cdeb0-e747-4157-bbe7-0ebc423a82af,1,0,ba62ac73-91da-4dad-abc7-3cf8acf7e315,ba62ac73-91da-4dad-abc7-3cf8acf7e315,1,0,6a71416d-dba1-4883-9264-597ecf9d6270,6a71416d-dba1-4883-9264-597ecf9d6270,1,0,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,1,0,6593baab-fce0-49ed-867e-be242bfc08d7,6593baab-fce0-49ed-867e-be242bfc08d7,1,0,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,1,0,57aed64d-da61-4c18-af21-dab3afdc5c03,57aed64d-da61-4c18-af21-dab3afdc5c03,1,0,452822b4-a590-44db-ab77-d8c01f7300e7,452822b4-a590-44db-ab77-d8c01f7300e7,1,0,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,1,0,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,1,0,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,1,0,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,1,0,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,1,0,b0deb957-624b-4bcb-824c-76aedf1affe9,b0deb957-624b-4bcb-824c-76aedf1affe9,1,0,9934e608-593d-45d0-9df3-539f0c8fc385,9934e608-593d-45d0-9df3-539f0c8fc385,1,0,80da4126-4319-425f-8427-7d60652cf754,80da4126-4319-425f-8427-7d60652cf754,1,0,05236ace-bcdd-4eb8-a1fb-5843ee311d10,05236ace-bcdd-4eb8-a1fb-5843ee311d10,1,0,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,1,0,449060fd-4711-4b9e-93e0-11b35c314fb3,449060fd-4711-4b9e-93e0-11b35c314fb3,1,0,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,1,0,0614d340-6524-4715-978d-87ab21377e72,0614d340-6524-4715-978d-87ab21377e72,1,0,d47daac5-ec3b-4d4e-8b01-045a37f7074d,d47daac5-ec3b-4d4e-8b01-045a37f7074d,1,0,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,1,0,912cbd30-1ed5-4888-a4b6-98e9215b28e9,912cbd30-1ed5-4888-a4b6-98e9215b28e9,1,0,abf093ce-be63-487d-8be4-be282aa475be,abf093ce-be63-487d-8be4-be282aa475be,1,0,7a910ad6-b922-4716-8140-1540d76296b2,7a910ad6-b922-4716-8140-1540d76296b2,1,0,5189beb9-b939-4f97-aca0-c2f3492ac8b9,5189beb9-b939-4f97-aca0-c2f3492ac8b9,1,0,0b139d7a-b583-4082-b9f2-8f3fb444bd51,0b139d7a-b583-4082-b9f2-8f3fb444bd51,1,0,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,1,0,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,1,0,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,1,0,0761c32c-1de6-4c40-9178-64aeb46b6622,0761c32c-1de6-4c40-9178-64aeb46b6622,1,0,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,1,0,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,1,0,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,1,0,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,1,0,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,1,0,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,1,0,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,1,0,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,1,0,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,1,0,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,1,0,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,1,0,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,1,0,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,1,0,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,1,0,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,1,0,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,1,0,b9b24093-810c-4158-846d-e2c7aea54d36,b9b24093-810c-4158-846d-e2c7aea54d36,1,0,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,1,0,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,1,0,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,1,0,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,1,0,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,1,0,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,1,0,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,1,0,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,1,0,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,1,0,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,1,0,8ce759ff-f579-461c-bb1e-9ac2b01e88df,8ce759ff-f579-461c-bb1e-9ac2b01e88df,1,0,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,1,0,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,1,0,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,1,0,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,1,0,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1,0,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,1,0,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,1,0,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,1,0,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,1,0,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,1,0,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,1,0,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,1,0,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,1,0,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,1,0,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,1,0,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,1,0,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,1,0,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1,0,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,1,0,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1,0,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,1,0,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,1,0,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,1,0,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,1,0,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,1,0,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,1,0,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1,0,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,1,0,28080e64-cd09-410d-9e3e-3ffdb43d3ace,28080e64-cd09-410d-9e3e-3ffdb43d3ace,1,0,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,1,0,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,1,0,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,1,0,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,1,0,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,1,0,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,1,0,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,1,0,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,1,0,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,1,0,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,1,0,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,1,0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,1,0,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,1,0,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,1,0,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,1,0,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,1,0,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,1,0,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,1,0,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,1,0,d3443b92-32f5-4ac0-8356-062647efe3d8,d3443b92-32f5-4ac0-8356-062647efe3d8,1,0,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,1,0,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,1,0,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,1,0,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,1,0,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,1,0,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,1,0,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,1,0,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,1,0,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,1,0,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,1,0,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,1,0,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,1,0,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,1,0,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,1,0,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,1,0,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,1,0,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,1,0,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,1,0,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,1,0,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,1,0,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,1,0,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,1,0,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,1,0,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,1,0,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,1,0,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,1,0,aa63c001-c3da-4179-8fd8-fe2ff510511e,aa63c001-c3da-4179-8fd8-fe2ff510511e,1,0,b2e894b0-6443-4a52-95b6-6b564f809680,b2e894b0-6443-4a52-95b6-6b564f809680,1,0,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,1,0,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,1,0,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,1,0,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,1,0,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,1,0,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,1,0,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,1,0,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,1,0,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,1,0,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,1,0,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,1,0,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,1,0,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,1,0,8a8848b8-345a-452d-bf95-28f9c91c7e95,8a8848b8-345a-452d-bf95-28f9c91c7e95,1,0,a9441693-87ca-4157-98e1-63375852755c,a9441693-87ca-4157-98e1-63375852755c,1,0,6303ea55-e8ed-4acc-9717-941eefafc2a9,6303ea55-e8ed-4acc-9717-941eefafc2a9,1,0,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,1,0,d0b17206-3949-4513-a47f-02e1a8ba369a,d0b17206-3949-4513-a47f-02e1a8ba369a,1,0,cb4f20d4-13e6-4c27-b491-da7931f4bf05,cb4f20d4-13e6-4c27-b491-da7931f4bf05,1,0,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,1,0,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,1,0,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,1,0,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,1,0,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,1,0,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,1,0,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,1,0,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,1,0,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,1,0,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,1,0,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,1,0,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,1,0,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,1,0,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,1,0,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,1,0,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,1,0,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,1,0,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,1,0,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,1,0,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,1,0,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,1,0,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,1,0,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,1,0,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,1,0,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,1,0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,1,0,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,1,0,94bc76ae-72a0-418f-98c4-ae0a0326a2da,94bc76ae-72a0-418f-98c4-ae0a0326a2da,1,0,784475ff-eec5-462a-a511-ba31f8374c2e,784475ff-eec5-462a-a511-ba31f8374c2e,1,0,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,1,0,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,1,0,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,1,0,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,1,0,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,1,0,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,1,0,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,1,0,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,1,0,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,1,0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,1,0,356a8091-4c0b-41d0-b8d2-963b3a807469,356a8091-4c0b-41d0-b8d2-963b3a807469,1,0,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,1,0,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,1,0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,1,0,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,1,0,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,1,0,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,1,0,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,1,0,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,1,0,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,1,0,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,1,0,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1,0,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,1,0,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,1,0,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,1,0,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,1,0,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,1,0,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,1,0,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,1,0,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,1,0,ee008096-1ae8-4a64-9d3d-14cb15c8be70,ee008096-1ae8-4a64-9d3d-14cb15c8be70,1,0,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,1,0,a4754a7b-971f-4517-963e-b7cb9d57f86d,a4754a7b-971f-4517-963e-b7cb9d57f86d,1,0,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,1,0,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,1,0,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,1,0,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,1,0,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,1,0,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,1,0,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,1,0,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,1,0,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,1,0,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,1,0,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,1,0,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,1,0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,1,0,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,1,0,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,1,0,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,1,0,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,1,0,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,1,0,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,1,0,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,1,0,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,1,0,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,1,0,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,1,0,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,1,0,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,1,0,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,1,0,733d4494-01e2-46f5-a49b-f289267a90c9,733d4494-01e2-46f5-a49b-f289267a90c9,1,0,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,1,0,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,1,0,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,1,0,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,1,0,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,1,0,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,1,0,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,1,0,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,1,0,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,1,0,1e14d062-1d5a-4939-8ce6-4d9514990376,1e14d062-1d5a-4939-8ce6-4d9514990376,1,0,f86f24d2-9a83-47ae-9d95-b49a0a295770,f86f24d2-9a83-47ae-9d95-b49a0a295770,1,0,8368e1fa-da0c-4a9b-9d50-a122933c7899,8368e1fa-da0c-4a9b-9d50-a122933c7899,1,0,37986729-a275-4e86-8613-faee9a4f2525,37986729-a275-4e86-8613-faee9a4f2525,1,0,5814cb3a-8f7c-45b4-a590-b69d4912120f,5814cb3a-8f7c-45b4-a590-b69d4912120f,1,0,f06c8396-65ec-4ece-aed0-d45b2d8969b5,f06c8396-65ec-4ece-aed0-d45b2d8969b5,1,0,1faeab7f-7bd7-496d-8882-4aab6c425854,1faeab7f-7bd7-496d-8882-4aab6c425854,1,0,af922fb8-a99c-4154-89fe-d30a4d13024a,af922fb8-a99c-4154-89fe-d30a4d13024a,1,0,24c2f463-2bbb-471f-a409-507afad52caf,24c2f463-2bbb-471f-a409-507afad52caf,1,0,cbb07013-9ae1-43ec-8142-a724d788cb67,cbb07013-9ae1-43ec-8142-a724d788cb67,1,0,2403ac84-b513-4aa0-9a68-8d1ad705ce24,2403ac84-b513-4aa0-9a68-8d1ad705ce24,1,0,952b49e0-e1a1-4130-8fb2-083e3988255c,952b49e0-e1a1-4130-8fb2-083e3988255c,1,0,367b227f-f66e-4cec-9fc3-850bca8bc6c8,367b227f-f66e-4cec-9fc3-850bca8bc6c8,1,0,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1,0,7fcb9d79-1144-4099-8d7f-309d3bf045a5,7fcb9d79-1144-4099-8d7f-309d3bf045a5,1,0,db418313-8583-48a9-9fec-e2c5de4fdf76,db418313-8583-48a9-9fec-e2c5de4fdf76,1,0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,1,0,2f26970e-b964-43e2-8d6d-999bbc577689,2f26970e-b964-43e2-8d6d-999bbc577689,1,0,65a50026-88e7-45dd-bb0c-f212218ca093,65a50026-88e7-45dd-bb0c-f212218ca093,1,0,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,1,0,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1,0,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,1,0,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,1,0,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,1,0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,1,0,01a1fd57-6c09-4a5b-9f75-da4366159423,01a1fd57-6c09-4a5b-9f75-da4366159423,1,0,71d79b25-3682-4f2c-b6b2-a307e3e72844,71d79b25-3682-4f2c-b6b2-a307e3e72844,1,0,45c1ed0d-202e-4289-820f-e1de0f544386,45c1ed0d-202e-4289-820f-e1de0f544386,1,0,e889e80f-97c9-43c6-8268-d652764fcafb,e889e80f-97c9-43c6-8268-d652764fcafb,1,0,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,1,0,95ccaaf2-f6ca-4540-8a39-3c90121c4236,95ccaaf2-f6ca-4540-8a39-3c90121c4236,1,0,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,1,0,f47a9bec-2a9f-4955-a432-acb63a5b0e46,f47a9bec-2a9f-4955-a432-acb63a5b0e46,1,0,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1,0,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,1,0,b787818e-5572-4ef2-ba54-1e9b69569824,b787818e-5572-4ef2-ba54-1e9b69569824,1,0,1e13bd37-61b5-4901-a607-e00e5d1900a8,1e13bd37-61b5-4901-a607-e00e5d1900a8,1,0,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,1,0,231d7b21-c00c-4782-b610-d56593be436f,231d7b21-c00c-4782-b610-d56593be436f,1,0,79250d1a-77ff-4015-a5b5-83460b1611e2,79250d1a-77ff-4015-a5b5-83460b1611e2,1,0,ece3bd8d-6616-44d5-9c14-6b3557738872,ece3bd8d-6616-44d5-9c14-6b3557738872,1,0,60018ee0-71ec-4975-a95d-f6f188748ff2,60018ee0-71ec-4975-a95d-f6f188748ff2,1,0,68d35468-279a-43ef-9d71-fed44a792177,68d35468-279a-43ef-9d71-fed44a792177,1,0,77bec3d8-582a-4156-861b-4902008f014c,77bec3d8-582a-4156-861b-4902008f014c,1,0,bf3304c0-5078-478f-bbf8-6178264c5f26,bf3304c0-5078-478f-bbf8-6178264c5f26,1,0,2ad1caba-7a89-4389-934f-419970260961,2ad1caba-7a89-4389-934f-419970260961,1,0,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,1,0,f88c4a72-368c-4f45-bb2c-d18f214a5079,f88c4a72-368c-4f45-bb2c-d18f214a5079,1,0,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,1,0,9dc2e313-c086-4fd9-83e8-911859ef480d,9dc2e313-c086-4fd9-83e8-911859ef480d,1,0,8a14ced0-9e45-4b3a-a135-11413c3a33c2,8a14ced0-9e45-4b3a-a135-11413c3a33c2,1,0,af7377db-0b27-42f7-a639-e2feb4015412,af7377db-0b27-42f7-a639-e2feb4015412,1,0,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,1,0,ab7db146-f26a-418a-8c45-e2513bf84e08,ab7db146-f26a-418a-8c45-e2513bf84e08,1,0,663a80ba-b97e-4265-a627-4a7d273f9472,663a80ba-b97e-4265-a627-4a7d273f9472,1,0,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,1,0,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,1,0,4893ad50-df19-4d86-9469-40491ba733c9,4893ad50-df19-4d86-9469-40491ba733c9,1,0,25a65c1e-8e67-4135-843d-1e0da72dfd64,25a65c1e-8e67-4135-843d-1e0da72dfd64,1,0,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,1,0,29a6416e-b0f5-4111-8f86-1ba80244e73a,29a6416e-b0f5-4111-8f86-1ba80244e73a,1,0,0f49085a-9b83-4256-be60-f341b2ef132e,0f49085a-9b83-4256-be60-f341b2ef132e,1,0,f44c66d6-cfe2-482f-a921-de3db3cd09ea,f44c66d6-cfe2-482f-a921-de3db3cd09ea,1,0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,1,0,c521bd61-386e-41c8-bcc3-29d54b63cc32,c521bd61-386e-41c8-bcc3-29d54b63cc32,1,0,d46e3424-6d30-4229-9a56-ab256517534a,d46e3424-6d30-4229-9a56-ab256517534a,1,0,09d3633d-8e8c-47f3-8f34-d70eb94577e1,09d3633d-8e8c-47f3-8f34-d70eb94577e1,1,0,fe868143-363b-4da1-889b-98d4dd10a1fd,fe868143-363b-4da1-889b-98d4dd10a1fd,1,0,b791a549-ae94-46f2-8f04-771fdeb4cc54,b791a549-ae94-46f2-8f04-771fdeb4cc54,1,0,4681cb63-c581-4c08-b18c-016d9b478ef2,4681cb63-c581-4c08-b18c-016d9b478ef2,1,0,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,1,0,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,1,0,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,1,0,1d429511-9446-4102-95f4-df676125e14c,1d429511-9446-4102-95f4-df676125e14c,1,0,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,1,0,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,1,0,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,1,0,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,1,0,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,1,0,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,1,0,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,1,0,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,1,0,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,1,0,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,1,0,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,1,0,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,1,0,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,1,0,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,1,0,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,1,0,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,1,0,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,1,0,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,1,0,eefa9859-4168-4a10-923f-e4a713c99a3b,eefa9859-4168-4a10-923f-e4a713c99a3b,1,0,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,1,0,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,1,0,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,1,0,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,1,0,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,1,0,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,1,0,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,1,0,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,1,0,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,1,0,39bddcde-697c-4e77-adfd-e4a77529ea97,39bddcde-697c-4e77-adfd-e4a77529ea97,1,0,a3b15381-bf9b-4b26-96eb-392fa2cc8223,a3b15381-bf9b-4b26-96eb-392fa2cc8223,1,0,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,1,0,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,1,0,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,1,0,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,1,0,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,1,0,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,1,0,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,1,0,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,1,0,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,1,0,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,1,0,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,1,0,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,1,0,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,1,0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,1,0,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,1,0,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,1,0,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,1,0,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,1,0,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,1,0,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,1,0,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,1,0,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,1,0,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,1,0,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,1,0,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,1,0,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,1,0,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,1,0,c49cef0d-3b71-4e66-9e35-72b94920dae5,c49cef0d-3b71-4e66-9e35-72b94920dae5,1,0,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,1,0,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,1,0,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,1,0,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,1,0,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,1,0,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,1,0,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,1,0,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,1,0,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,1,0,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,1,0,b363f72f-3629-453c-9f7d-9828ef6de733,b363f72f-3629-453c-9f7d-9828ef6de733,1,0,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,1,0,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,1,0,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,1,0,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,1,0,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,1,0,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,1,0,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,1,0,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,1,0,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,1,0,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,1,0,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,1,0,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,1,0,dd0610c8-cd87-4fe2-8a1f-70157132785b,dd0610c8-cd87-4fe2-8a1f-70157132785b,1,0,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,1,0,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,1,0,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,1,0,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,1,0,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,1,0,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,1,0,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,1,0,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,1,0,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,1,0,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,1,0,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,1,0,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,1,0,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,1,0,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,1,0,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,1,0,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,1,0,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,1,0,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,1,0,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,1,0,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,1,0,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,1,0,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,1,0,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,1,0,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,1,0,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,1,0,02abb5e3-9d4e-4c45-af19-71796966ed19,02abb5e3-9d4e-4c45-af19-71796966ed19,1,0,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,1,0,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,1,0,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,1,0,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,1,0,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,1,0,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,1,0,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,1,0,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,1,0,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,1,0,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,1,0,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,1,0,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,1,0,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,1,0,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,1,0,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,1,0,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,1,0,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,1,0,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,1,0,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,1,0,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,1,0,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,1,0,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,1,0,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,1,0,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,1,0,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,1,0,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,1,0,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,1,0,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,1,0,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,1,0,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,1,0,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,1,0,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,1,0,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,1,0,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,1,0,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,1,0,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,1,0,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,1,0,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,1,0,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,1,0,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,1,0,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,1,0,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,1,0,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,1,0,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,1,0,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,1,0,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,1,0,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,1,0,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,1,0,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,1,0,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,1,0,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,1,0,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,1,0,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,1,0,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,1,0,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,1,0,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,1,0,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,1,0,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,1,0,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,1,0,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,1,0,d754ed75-2a32-4b86-a153-7b50c39f9836,d754ed75-2a32-4b86-a153-7b50c39f9836,1,0,b81f3ee1-66f7-4626-a35b-ef85388c678e,b81f3ee1-66f7-4626-a35b-ef85388c678e,1,0,2ad04793-c162-4915-a260-ca4da535cdac,2ad04793-c162-4915-a260-ca4da535cdac,1,0,78942e92-a31c-4824-a614-a6e07ae26171,78942e92-a31c-4824-a614-a6e07ae26171,1,0,6568d853-dfe5-4064-aa73-c1f546e951b4,6568d853-dfe5-4064-aa73-c1f546e951b4,1,0,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,1,0,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,1,0,bbe718b2-6b4c-4d78-a408-5369d356a1e6,bbe718b2-6b4c-4d78-a408-5369d356a1e6,1,0,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,1,0,eb7623df-b4e3-4272-9f92-42a9214f9f17,eb7623df-b4e3-4272-9f92-42a9214f9f17,1,0,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,1,0,b08fd921-c3d6-44eb-9401-fec5acab5d22,b08fd921-c3d6-44eb-9401-fec5acab5d22,1,0,f4f185af-5507-427c-b82b-515ea71f3fc1,f4f185af-5507-427c-b82b-515ea71f3fc1,1,0,1611855a-abf4-4269-aed3-3f78dce7bea5,1611855a-abf4-4269-aed3-3f78dce7bea5,1,0,c5bd277c-b258-43af-9c80-3e328b1581f5,c5bd277c-b258-43af-9c80-3e328b1581f5,1,0,96dac7e8-5113-4217-ac0a-fffea4acc410,96dac7e8-5113-4217-ac0a-fffea4acc410,1,0,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,1,0,f9cefef4-2182-42ca-93ef-b6a51d6555cc,f9cefef4-2182-42ca-93ef-b6a51d6555cc,1,0,71e1c7de-7367-424c-ae07-6ec04b408b83,71e1c7de-7367-424c-ae07-6ec04b408b83,1,0,b3956392-199c-4934-80d1-8cdab453d879,b3956392-199c-4934-80d1-8cdab453d879,1,0,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,1,0,d1bd7448-aa5f-43fc-9735-224f36960c3e,d1bd7448-aa5f-43fc-9735-224f36960c3e,1,0,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,1,0,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,1,0,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1,0,8227471b-8ffb-4ba7-b4da-b21570582876,8227471b-8ffb-4ba7-b4da-b21570582876,1,0,25864028-1a53-4a8d-b6e4-189fa62c62f5,25864028-1a53-4a8d-b6e4-189fa62c62f5,1,0,e923beae-0bd8-4119-a802-fd6bfb729f10,e923beae-0bd8-4119-a802-fd6bfb729f10,1,0,67c1269a-79e6-44d9-9254-671c50fb3974,67c1269a-79e6-44d9-9254-671c50fb3974,1,0,5d455d2a-910d-48c7-bc74-ba5ad7855110,5d455d2a-910d-48c7-bc74-ba5ad7855110,1,0,7cf3feea-75e2-42cc-9c89-4a9182034910,7cf3feea-75e2-42cc-9c89-4a9182034910,1,0,930a0156-feb3-4e14-96a5-cd183a4891f4,930a0156-feb3-4e14-96a5-cd183a4891f4,1,0,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,1,0,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,1,0,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,1,0,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,1,0,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,1,0,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,1,0,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,1,0,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,1,0,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,1,0,5d45a926-513f-4bbc-a002-54a2db94b297,5d45a926-513f-4bbc-a002-54a2db94b297,1,0,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,1,0,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,1,0,61dc318a-c17d-402e-bf64-a0c0a63a1c93,61dc318a-c17d-402e-bf64-a0c0a63a1c93,1,0,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,1,0,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,1,0,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,1,0,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,1,0,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,1,0,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,1,0,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,1,0,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,1,0,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,1,0,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,1,0,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,1,0,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,1,0,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,1,0,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,1,0,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1,0,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,1,0,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,1,0,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,1,0,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,1,0,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,1,0,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,1,0,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,1,0,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,1,0,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,1,0,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,1,0,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,1,0,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,1,0,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,1,0,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,1,0,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,1,0,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,1,0,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,1,0,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,1,0,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,1,0,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,1,0,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,1,0,6852c584-d989-418d-8d18-255492891ef0,6852c584-d989-418d-8d18-255492891ef0,1,0,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,1,0,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,1,0,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,1,0,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,1,0,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,1,0,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,1,0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,1,0,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,1,0,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,1,0,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,1,0,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,1,0,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,1,0,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,1,0,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,1,0,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,1,0,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,1,0,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,1,0,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,1,0,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,1,0,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,1,0,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,1,0,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,1,0,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,1,0,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,1,0,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,1,0,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,1,0,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,1,0,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,1,0,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1,0,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,1,0,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,1,0,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,1,0,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,1,0,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1,0,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,1,0,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,1,0,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,1,0,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,1,0,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,1,0,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,1,0,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,1,0,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,1,0,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,1,0,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,1,0,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,1,0,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,1,0,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,1,0,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,1,0,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,1,0,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,1,0,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,1,0,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,1,0,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,1,0,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,1,0,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,1,0,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,1,0,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,1,0,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,1,0,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,1,0,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,1,0,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,1,0,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,1,0,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,1,0,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,1,0,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,1,0,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,1,0,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,1,0,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,1,0,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,1,0,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,1,0,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,1,0,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,1,0,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,1,0,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,1,0,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,1,0,8525d945-08aa-4928-8dca-4e172ea94328,8525d945-08aa-4928-8dca-4e172ea94328,1,0,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,1,0,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,1,0,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,1,0,82be906c-bb06-40ea-b908-54574b0b4848,82be906c-bb06-40ea-b908-54574b0b4848,1,0,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,1,0,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,1,0,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1,0,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,1,0,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,1,0,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,1,0,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,1,0,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,1,0,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,1,0,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,1,0,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,1,0,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,1,0,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,1,0,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,1,0,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,1,0,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,1,0,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,1,0,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,1,0,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,1,0,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,1,0,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,1,0,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,1,0,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,1,0,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,1,0,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,1,0,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,1,0,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,1,0,b885dbb2-6e18-46a6-929c-3d6d392343ad,b885dbb2-6e18-46a6-929c-3d6d392343ad,1,0,d31e24cf-7493-45dc-ba81-3a00618e53bc,d31e24cf-7493-45dc-ba81-3a00618e53bc,1,0,03f32b08-1b71-47cb-ba1d-965037df4d64,03f32b08-1b71-47cb-ba1d-965037df4d64,1,0,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,1,0,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,1,0,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,1,0,19a0b881-302e-4d0e-ace0-29a9d8379a48,19a0b881-302e-4d0e-ace0-29a9d8379a48,1,0,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,1,0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,1,0,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,1,0,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,1,0,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,1,0,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,1,0,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,1,0,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,1,0,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,1,0,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,1,0,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,1,0,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,1,0,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,1,0,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,1,0,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,1,0,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,1,0,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,1,0,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,1,0,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,1,0,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,1,0,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,1,0,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,1,0,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,1,0,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,1,0,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,1,0,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,1,0,f9229c3e-4a47-49a4-8b14-908218012ff7,f9229c3e-4a47-49a4-8b14-908218012ff7,1,0,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,1,0,b9743978-ba6d-4892-bb32-f24d4a47dd50,b9743978-ba6d-4892-bb32-f24d4a47dd50,1,0,c43accb9-f33d-437f-b305-0595f8fe3032,c43accb9-f33d-437f-b305-0595f8fe3032,1,0,084a398b-836e-424c-af93-22aa39d5a15a,084a398b-836e-424c-af93-22aa39d5a15a,1,0,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,1,0,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,1,0,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,1,0,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,1,0,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,1,0,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,1,0,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,1,0,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,1,0,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,1,0,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,1,0,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,1,0,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,1,0,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,1,0,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,1,0,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,1,0,2b2bf0f7-0946-4492-bba0-27f007a70e64,2b2bf0f7-0946-4492-bba0-27f007a70e64,1,0,22c9a703-5ed3-4156-8fa6-476b1c1452f1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,1,0,8be10d88-8c37-4444-9c89-6cbbe9913bda,8be10d88-8c37-4444-9c89-6cbbe9913bda,1,0,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,1,0,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,1,0,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,1,0,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,1,0,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,1,0,cb1d4a41-20a9-4d76-8798-d47d8858bff1,cb1d4a41-20a9-4d76-8798-d47d8858bff1,1,0,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,1,0,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,1,0,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,1,0,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,1,0,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,1,0,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,1,0,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,1,0,5198c6db-2100-4902-82c8-85c8ea555e78,5198c6db-2100-4902-82c8-85c8ea555e78,1,0,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,1,0,f0b1e9f4-2e07-44e6-88d2-c11457135781,f0b1e9f4-2e07-44e6-88d2-c11457135781,1,0,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,1,0,f935399f-3554-4c08-b0a6-eba13074e1b7,f935399f-3554-4c08-b0a6-eba13074e1b7,1,0,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,1,0,765f9584-fefa-4695-b130-dd54c3b0d79d,765f9584-fefa-4695-b130-dd54c3b0d79d,1,0,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,1,0,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,1,0,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,1,0,2c1c9284-ba8b-4282-a89c-429f02ea41f6,2c1c9284-ba8b-4282-a89c-429f02ea41f6,1,0,8c241467-76f7-4161-a8a1-5da4a6576b75,8c241467-76f7-4161-a8a1-5da4a6576b75,1,0,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1,0,fd7e5257-024c-46de-9ff3-edd302fadba5,fd7e5257-024c-46de-9ff3-edd302fadba5,1,0,a4168057-d99f-4b55-b762-214f95ae3a30,a4168057-d99f-4b55-b762-214f95ae3a30,1,0,ab4fe549-1c07-42d9-b412-8b89ed115591,ab4fe549-1c07-42d9-b412-8b89ed115591,1,0,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,1,0,b49c589d-b45d-4aff-8899-72cfe433e9a6,b49c589d-b45d-4aff-8899-72cfe433e9a6,1,0,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,1,0,273ad3f7-c645-434d-93b0-e832134f3043,273ad3f7-c645-434d-93b0-e832134f3043,1,0,d320803b-1de4-4e66-b455-0afe39be5c41,d320803b-1de4-4e66-b455-0afe39be5c41,1,0,67e85b9a-a138-49ea-b474-04475f0f8c90,67e85b9a-a138-49ea-b474-04475f0f8c90,1,0,364218e0-87ba-4008-a3e3-e2351a5e04b8,364218e0-87ba-4008-a3e3-e2351a5e04b8,1,0,788a98e0-194f-466c-b4fa-bafd527aae26,788a98e0-194f-466c-b4fa-bafd527aae26,1,0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,1,0,143f6db9-a4dc-4039-90d0-6161394a3e2f,143f6db9-a4dc-4039-90d0-6161394a3e2f,1,0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,1,0,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,1,0,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,1,0,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,1,0,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,1,0,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,1,0,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,1,0,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,1,0,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,1,0,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,1,0,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,1,0,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,1,0,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,1,0,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,1,0,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,1,0,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,1,0,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,1,0,86249619-8981-4fc4-85fc-ce30e4b9d542,86249619-8981-4fc4-85fc-ce30e4b9d542,1,0,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,1,0,98aa8a80-29fa-4a54-8d0e-90d413d63da1,98aa8a80-29fa-4a54-8d0e-90d413d63da1,1,0,60af0c11-852e-4b45-afb7-251d75a87150,60af0c11-852e-4b45-afb7-251d75a87150,1,0,37e81463-a558-4b03-b0e4-82ac0e99c80c,37e81463-a558-4b03-b0e4-82ac0e99c80c,1,0,8be35c43-32e6-418d-b3d6-e53ef56babb7,8be35c43-32e6-418d-b3d6-e53ef56babb7,1,0,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,1,0,935d01e1-232b-480e-a6bf-c21c617c6348,935d01e1-232b-480e-a6bf-c21c617c6348,1,0,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,1,0,05c702a1-2c74-45d5-b2ee-fdd795b0945a,05c702a1-2c74-45d5-b2ee-fdd795b0945a,1,0,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,1,0,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,1,0,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,1,0,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,1,0,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,1,0,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,1,0,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,1,0,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,1,0,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,1,0,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,1,0,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,1,0,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,1,0,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,1,0,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,1,0,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,1,0,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,1,0,2f9c347d-ee82-49f2-a5eb-97f55374856f,2f9c347d-ee82-49f2-a5eb-97f55374856f,1,0,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,1,0,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,1,0,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,1,0,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,1,0,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,1,0,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,1,0,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,1,0,a89ee622-6942-411a-8566-f03d139c9e5b,a89ee622-6942-411a-8566-f03d139c9e5b,1,0,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,1,0,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,1,0,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,1,0,198ea989-5001-47ac-86b8-aa2585a5f7d7,198ea989-5001-47ac-86b8-aa2585a5f7d7,1,0,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,1,0,fb84c5f7-11da-4b17-979e-41e27a74e789,fb84c5f7-11da-4b17-979e-41e27a74e789,1,0,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,1,0,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,1,0,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,1,0,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,1,0,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,1,0,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,1,0,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,1,0,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,1,0,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,1,0,6de34ed8-5d6c-4bb6-af94-328e692b862e,6de34ed8-5d6c-4bb6-af94-328e692b862e,1,0,504280a1-a451-4547-ae71-e217f8fdf8f6,504280a1-a451-4547-ae71-e217f8fdf8f6,1,0,b071a9fe-0e9f-4ded-8dab-b1388fd12897,b071a9fe-0e9f-4ded-8dab-b1388fd12897,1,0,a2accd5e-e6f5-4d5f-8243-51aadfa88b00,a2accd5e-e6f5-4d5f-8243-51aadfa88b00,1,0,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,1,0,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,1,0,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,1,0,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,1,0,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,1,0,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,1,0,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,1,0,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,1,0,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,1,0,64ed8c1a-6446-4f0d-a2ef-c599e84c4909,64ed8c1a-6446-4f0d-a2ef-c599e84c4909,1,0,52fc85fb-309b-4739-bbd3-c3966657e973,52fc85fb-309b-4739-bbd3-c3966657e973,1,0,87081ab5-bdd5-4daa-88ef-8a2cba8c7d53,87081ab5-bdd5-4daa-88ef-8a2cba8c7d53,1,0,be3cfba8-e6f6-4202-ab0f-96c00fbf7462,be3cfba8-e6f6-4202-ab0f-96c00fbf7462,1,0,64ef1b5c-ec04-45eb-9998-bc573f4038d7,64ef1b5c-ec04-45eb-9998-bc573f4038d7,1,0,4fde5159-8f21-4151-8dbd-b2cd376d9392,4fde5159-8f21-4151-8dbd-b2cd376d9392,1,0,3ea799a6-6642-4388-b0a3-c2962e71ff51,3ea799a6-6642-4388-b0a3-c2962e71ff51,1,0,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,1,0,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,1,0,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,1,0,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,1,0,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,1,0,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,1,0,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,1,0,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,1,0,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,1,0,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,1,0,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,1,0,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,1,0,3ab0649b-239f-4466-b897-73c0ab628927,3ab0649b-239f-4466-b897-73c0ab628927,1,0,4c697110-8941-4d6d-ba03-f2b9e96ff82e,4c697110-8941-4d6d-ba03-f2b9e96ff82e,1,0,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,1,0,b172631b-da0d-42f4-ae6b-ae122a46cced,b172631b-da0d-42f4-ae6b-ae122a46cced,1,0,1a25e744-37ae-46ca-a328-ff8eced21a82,1a25e744-37ae-46ca-a328-ff8eced21a82,1,0,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,1,0,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,1,0,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,1,0,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,1,0,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,1,0,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,1,0,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,1,0,5a94a307-3f54-4753-8ef5-ce9f88417827,5a94a307-3f54-4753-8ef5-ce9f88417827,1,0,0f09b6b8-72ac-4461-96c4-683be403e2ff,0f09b6b8-72ac-4461-96c4-683be403e2ff,1,0,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,1,0,19d1d74a-de5f-475a-896c-a32b7d28f918,19d1d74a-de5f-475a-896c-a32b7d28f918,1,0,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,1,0,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,1,0,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,1,0,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,1,0,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,1,0,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,1,0,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,1,0,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,1,0,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,1,0,e6a53f32-0b7d-499d-844e-fb8df13a3519,e6a53f32-0b7d-499d-844e-fb8df13a3519,1,0,4a55351b-77e2-4c7c-a7d7-aac213d3c2a7,4a55351b-77e2-4c7c-a7d7-aac213d3c2a7,1,0,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,1,0,2c5a56d3-386e-45df-adc2-4471f52f9bdc,2c5a56d3-386e-45df-adc2-4471f52f9bdc,1,0,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,1,0,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,1,0,22474ca3-565b-4b67-a5b4-b0b959306d10,22474ca3-565b-4b67-a5b4-b0b959306d10,1,0,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1,0,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,1,0,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,1,0,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,1,0,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,1,0,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,1,0,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,1,0,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,1,0,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,1,0,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,1,0,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,1,0,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,1,0,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,1,0,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,1,0,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,1,0,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,1,0,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,1,0,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,1,0,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,1,0,3e44d463-f253-4a64-8d68-631fcb66935c,3e44d463-f253-4a64-8d68-631fcb66935c,1,0,653d6483-029b-4453-a7d0-3a3c6d9d0b05,653d6483-029b-4453-a7d0-3a3c6d9d0b05,1,0,ac507771-50bd-4f8b-b72f-5954562c9131,ac507771-50bd-4f8b-b72f-5954562c9131,1,0,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,1,0,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,1,0,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,1,0,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,1,0,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,1,0,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,1,0,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,1,0,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,1,0,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,1,0,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,1,0,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,1,0,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,1,0,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,1,0,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,1,0,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,1,0,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,1,0,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,1,0,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1,0,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,1,0,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,1,0,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,1,0,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,1,0,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,1,0,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,1,0,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,1,0,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,1,0,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,1,0,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,1,0,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,1,0,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,1,0,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,1,0,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,1,0,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,1,0,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1,0,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,1,0,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,1,0,3df3f61a-2c17-4278-8d82-91089f793e6a,3df3f61a-2c17-4278-8d82-91089f793e6a,1,0,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,1,0,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,1,0,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,1,0,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,1,0,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,1,0,a51f7c6f-2631-4d23-becc-c0e8b711fddd,a51f7c6f-2631-4d23-becc-c0e8b711fddd,1,0,37806357-d92c-4bea-a5ef-77f138578fda,37806357-d92c-4bea-a5ef-77f138578fda,1,0,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,1,0,0a880538-f97f-448e-a4a9-82b0194dbe28,0a880538-f97f-448e-a4a9-82b0194dbe28,1,0,179868b7-d342-4df0-9386-c114d75faf3a,179868b7-d342-4df0-9386-c114d75faf3a,1,0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,1,0,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,1,0,7e4afed8-5c56-4765-bcd0-a40e6121ba22,7e4afed8-5c56-4765-bcd0-a40e6121ba22,1,0,155660a1-8a63-4562-a715-d75a8af7176b,155660a1-8a63-4562-a715-d75a8af7176b,1,0,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,1,0,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,1,0,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,1,0,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,1,0,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,1,0,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,1,0,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,1,0,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,1,0,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,1,0,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,1,0,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,1,0,f5c4d4ad-dda6-4dc3-b112-61f776006f3c,f5c4d4ad-dda6-4dc3-b112-61f776006f3c,1,0,466d9fd7-188e-4f3b-a673-35db9075d537,466d9fd7-188e-4f3b-a673-35db9075d537,1,0,1c2e2c7d-c9d2-46a6-81f9-30078ca511c7,1c2e2c7d-c9d2-46a6-81f9-30078ca511c7,1,0,09d3717a-d6f9-42fd-ae9e-df5658fa3981,09d3717a-d6f9-42fd-ae9e-df5658fa3981,1,0,fc65918a-2ad1-47b1-980d-5afe63579964,fc65918a-2ad1-47b1-980d-5afe63579964,1,0,7ece6efe-16a1-4294-8c28-3fa6427ba9f0,7ece6efe-16a1-4294-8c28-3fa6427ba9f0,1,0,61094d92-b1e6-45b9-9258-38a7bb1d6469,61094d92-b1e6-45b9-9258-38a7bb1d6469,1,0,4791b5d4-3568-4420-8c25-89ecce7c6353,4791b5d4-3568-4420-8c25-89ecce7c6353,1,0,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,1,0,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,1,0,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,1,0,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,1,0,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,1,0,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,1,0,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,1,0,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,1,0,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,1,0,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,1,0,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,1,0,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,1,0,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,1,0,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,1,0,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,1,0,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,1,0,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,1,0,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,1,0,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,1,0,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,1,0,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,1,0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,1,0,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1,0,00605607-03ab-43fc-ba08-9fc32f582d0a,00605607-03ab-43fc-ba08-9fc32f582d0a,1,0,5ab0a910-74ab-4af0-b5a3-40845a789fde,5ab0a910-74ab-4af0-b5a3-40845a789fde,1,0,bb659006-c11e-4427-8d86-229ba43ef679,bb659006-c11e-4427-8d86-229ba43ef679,1,0,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,1,0,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,1,0,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,1,0,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,1,0,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,1,0,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,1,0,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,1,0,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,1,0,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,1,0,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,1,0,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,1,0,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1,0,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,1,0,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,1,0,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,1,0,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,1,0,ec11342f-594f-416f-a10f-bd1bfa695c08,ec11342f-594f-416f-a10f-bd1bfa695c08,1,0,31c3ac44-204e-43fd-bca3-fd18fa091c58,31c3ac44-204e-43fd-bca3-fd18fa091c58,1,0,74f03c35-5da0-406e-a938-e8e5d49975ef,74f03c35-5da0-406e-a938-e8e5d49975ef,1,0,c9ab3890-6d16-431f-ab2b-b5058e6202a4,c9ab3890-6d16-431f-ab2b-b5058e6202a4,1,0,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,1,0,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,1,0,4090c6f7-1d25-4b17-9baa-18daa0640b0f,4090c6f7-1d25-4b17-9baa-18daa0640b0f,1,0,26125e58-dfc8-4bbb-a3a4-80616471746e,26125e58-dfc8-4bbb-a3a4-80616471746e,1,0,b1c699cd-efdc-461c-ad37-10bfd4bc9674,b1c699cd-efdc-461c-ad37-10bfd4bc9674,1,0,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,1,0,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,1,0,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,1,0,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,1,0,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,1,0,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,1,0,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,1,0,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,1,0,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,1,0,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,1,0,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,1,0,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,1,0,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,1,0,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,1,0,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,1,0,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,1,0,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,1,0,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,1,0,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,1,0,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,1,0,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,1,0,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,1,0,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,1,0,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,1,0,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,1,0,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,1,0,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,1,0,00696255-ea14-4fee-8633-0962f3c441d1,00696255-ea14-4fee-8633-0962f3c441d1,1,0,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,1,0,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,1,0,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,1,0,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,1,0,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,1,0,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,1,0,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,1,0,fef27478-ddfd-4ad9-8161-148761f29698,fef27478-ddfd-4ad9-8161-148761f29698,1,0,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,1,0,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,1,0,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,1,0,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,1,0,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,1,0,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,1,0,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,1,0,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,1,0,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1,0,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,1,0,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,1,0,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,1,0,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,1,0,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,1,0,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,1,0,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,1,0,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,1,0,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,1,0,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,1,0,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,1,0,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,1,0,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,1,0,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,1,0,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,1,0,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,1,0,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,1,0,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,1,0,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,1,0,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,1,0,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,1,0,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,1,0,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,1,0,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,1,0,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,1,0,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,1,0,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,1,0,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,1,0,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,1,0,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,1,0,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,1,0,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,1,0,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,1,0,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,1,0,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,1,0,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,1,0,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,1,0,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,1,0,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,1,0,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,1,0,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,1,0,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,1,0,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,1,0,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,1,0,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,1,0,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,1,0,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,1,0,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,1,0,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,1,0,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,1,0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,1,0,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,1,0,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,1,0,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,1,0,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,1,0,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,1,0,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,1,0,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,1,0,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,1,0,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,1,0,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,1,0,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,1,0,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,1,0,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,1,0,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,1,0,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,1,0,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,1,0,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,1,0,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,1,0,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,1,0,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,1,0,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,1,0,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,1,0,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,1,0,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,1,0,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,1,0,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,1,0,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,1,0,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,1,0,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,1,0,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,1,0,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,1,0,b3f7f763-bea9-4f59-9450-df95e5c3d89d,b3f7f763-bea9-4f59-9450-df95e5c3d89d,1,0,9111e28e-c1c7-414b-9288-61bd06a04d04,9111e28e-c1c7-414b-9288-61bd06a04d04,1,0,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,1,0,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,1,0,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,1,0,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,1,0,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,1,0,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1,0,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,1,0,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,1,0,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,1,0,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,1,0,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,1,0,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1,0,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,1,0,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,1,0,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,1,0,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,1,0,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,1,0,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,1,0,3afe11f6-7424-4b41-a42f-91db33756fa3,3afe11f6-7424-4b41-a42f-91db33756fa3,1,0,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,1,0,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,1,0,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,1,0,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,1,0,f908b81e-f5ba-46ca-b7c0-8cb43ab23901,f908b81e-f5ba-46ca-b7c0-8cb43ab23901,1,0,3c305f89-e453-46c7-987b-f01dc964efdb,3c305f89-e453-46c7-987b-f01dc964efdb,1,0,1809ff43-2af2-44d1-ac7b-91d5bbe4f0ce,1809ff43-2af2-44d1-ac7b-91d5bbe4f0ce,1,0,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,1,0,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,1,0,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,1,0,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,1,0,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,1,0,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,1,0,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,1,0,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,1,0,c7bafd34-5b15-42ec-b329-0be3002775ad,c7bafd34-5b15-42ec-b329-0be3002775ad,1,0,6feb2278-9149-47f8-a0ec-eb4bd9f44716,6feb2278-9149-47f8-a0ec-eb4bd9f44716,1,0,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,1,0,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,1,0,97ec899d-a2a0-4691-83ff-25b78dd49ef6,97ec899d-a2a0-4691-83ff-25b78dd49ef6,1,0,411db885-f761-44e5-bdd1-9fdf9e741ac1,411db885-f761-44e5-bdd1-9fdf9e741ac1,1,0,269ada84-71a9-4b4b-9604-caa40c5b7067,269ada84-71a9-4b4b-9604-caa40c5b7067,1,0,ea13607a-3e05-4468-9932-41b6d51cfedf,ea13607a-3e05-4468-9932-41b6d51cfedf,1,0,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,1,0,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,1,0,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,1,0,43e37533-ed38-4000-a387-5749f8d9aaf3,43e37533-ed38-4000-a387-5749f8d9aaf3,1,0,e93bdb44-64b3-43d8-b15a-c561dbb91974,e93bdb44-64b3-43d8-b15a-c561dbb91974,1,0,a7c7c835-5402-4bdd-a0e3-d21746174d5a,a7c7c835-5402-4bdd-a0e3-d21746174d5a,1,0,07e81872-afac-4720-86b4-91e7bf4a2881,07e81872-afac-4720-86b4-91e7bf4a2881,1,0,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,1,0,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,1,0,532dfa48-39b0-4d0f-9f8c-b51ca27e47a9,532dfa48-39b0-4d0f-9f8c-b51ca27e47a9,1,0,17bc0f34-c35b-4beb-be5f-8e8d8f06c053,17bc0f34-c35b-4beb-be5f-8e8d8f06c053,1,0,f91813e6-b75c-43fb-8da3-a0d958dc6fa0,f91813e6-b75c-43fb-8da3-a0d958dc6fa0,1,0,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,1,0,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,1,0,39598414-9c1d-46ec-a534-8bd43e622e45,39598414-9c1d-46ec-a534-8bd43e622e45,1,0,b552c510-4fd4-4c16-9022-dc5babcafc52,b552c510-4fd4-4c16-9022-dc5babcafc52,1,0,3892c06d-28f1-4238-a929-201316cac1ed,3892c06d-28f1-4238-a929-201316cac1ed,1,0,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,1,0,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,1,0,1f587ff1-95a4-4f45-85b4-22bb97011177,1f587ff1-95a4-4f45-85b4-22bb97011177,1,0,567c68fd-74c7-4b6e-9119-56ac8d78073c,567c68fd-74c7-4b6e-9119-56ac8d78073c,1,0,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,1,0,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,1,0,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,1,0,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,1,0,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,1,0,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,1,0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,1,0,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,1,0,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,1,0,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,1,0,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,1,0,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,1,0,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,1,0,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,1,0,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,1,0,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,1,0,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,1,0,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,1,0,d5a73869-381e-4878-8db7-596643937202,d5a73869-381e-4878-8db7-596643937202,1,0,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,1,0,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,1,0,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,1,0,11a93e3a-3c5b-4242-913c-02474a383344,11a93e3a-3c5b-4242-913c-02474a383344,1,0,ddd2861c-592b-4879-b9de-4b05a22c0b43,ddd2861c-592b-4879-b9de-4b05a22c0b43,1,0,5b383021-a800-4f0b-b8a3-d344389bff6c,5b383021-a800-4f0b-b8a3-d344389bff6c,1,0,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,1,0,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,1,0,8a57d427-a34e-4121-84e6-1a86a9f9092d,8a57d427-a34e-4121-84e6-1a86a9f9092d,1,0,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,1,0,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,1,0,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,1,0,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,1,0,68447105-a784-4803-8eb8-3701b0fc819d,68447105-a784-4803-8eb8-3701b0fc819d,1,0,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,1,0,59dee70d-aeca-470a-b3c4-e43bb16c5753,59dee70d-aeca-470a-b3c4-e43bb16c5753,1,0,82777e92-0681-44bf-b51e-4d98fcd5d5bd,82777e92-0681-44bf-b51e-4d98fcd5d5bd,1,0,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,1,0,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,1,0,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,1,0,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,1,0,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,1,0,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,1,0,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,1,0,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,1,0,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,1,0,325bacdd-793f-47d8-b987-57e9d5f2782b,325bacdd-793f-47d8-b987-57e9d5f2782b,1,0,80395d47-70d7-4d8d-9b18-93283fba80c2,80395d47-70d7-4d8d-9b18-93283fba80c2,1,0,8b621ec9-24c9-4166-90ce-29c5ad30f78b,8b621ec9-24c9-4166-90ce-29c5ad30f78b,1,0,cc98670a-7b18-4973-b211-90261c5c8c10,cc98670a-7b18-4973-b211-90261c5c8c10,1,0,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,1,0,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,1,0,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,1,0,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,1,0,62957889-503f-4923-a372-29776dc3b5e5,62957889-503f-4923-a372-29776dc3b5e5,1,0,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,1,0,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,1,0,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,1,0,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,1,0,6b28a716-2fb1-47f7-a7d6-f2fe7edb32c3,6b28a716-2fb1-47f7-a7d6-f2fe7edb32c3,1,0,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,1,0,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,1,0,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,1,0,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,1,0,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,1,0,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,1,0,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,1,0,73afaad8-dfa9-43e3-bdaf-543c3545d788,73afaad8-dfa9-43e3-bdaf-543c3545d788,1,0,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,1,0,4f0bda80-2246-43be-95f8-ae8480682cd5,4f0bda80-2246-43be-95f8-ae8480682cd5,1,0,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,1,0,6f683f46-9eef-4e78-bc2f-7174238bf53c,6f683f46-9eef-4e78-bc2f-7174238bf53c,1,0,7d1ed38b-98cf-4a0e-a605-680bb580d904,7d1ed38b-98cf-4a0e-a605-680bb580d904,1,0,b769eda0-11de-401c-a68b-4fce4555d4fc,b769eda0-11de-401c-a68b-4fce4555d4fc,1,0,fd7a668f-3099-4e15-956a-92c6295dd4d5,fd7a668f-3099-4e15-956a-92c6295dd4d5,1,0,afcbd830-ec5f-4865-a176-ea3014dff908,afcbd830-ec5f-4865-a176-ea3014dff908,1,0,dc5fc801-14e4-42e8-b396-76eb30b69eea,dc5fc801-14e4-42e8-b396-76eb30b69eea,1,0,485b9f00-475a-49e5-ade2-b2e05d94ecf0,485b9f00-475a-49e5-ade2-b2e05d94ecf0,1,0,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,1,0,398bf9d1-c353-461e-a1be-683047dcbe41,398bf9d1-c353-461e-a1be-683047dcbe41,1,0,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,1,0,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,1,0,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,1,0,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,1,0,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,1,0,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,1,0,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,1,0,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,1,0,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,1,0,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,1,0,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,1,0,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,1,0,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,1,0,569047c2-0879-4fba-a814-44812d21043b,569047c2-0879-4fba-a814-44812d21043b,1,0,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,1,0,80512d95-5458-4934-98ae-a7b58099196b,80512d95-5458-4934-98ae-a7b58099196b,1,0,6f2354cd-4a34-4921-96bb-b786486f85cf,6f2354cd-4a34-4921-96bb-b786486f85cf,1,0,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,1,0,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,1,0,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,1,0,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,1,0,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,1,0,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,1,0,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,1,0,1db1cb24-f364-4b91-bc96-c216764207a0,1db1cb24-f364-4b91-bc96-c216764207a0,1,0,64d7c8a7-1c15-4afb-ad97-abf8729c604e,64d7c8a7-1c15-4afb-ad97-abf8729c604e,1,0,a3cbbc8a-4afd-48c5-91d4-4849d18905c1,a3cbbc8a-4afd-48c5-91d4-4849d18905c1,1,0,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,1,0,c04b685a-0d2d-404c-a74a-775ffab298ce,c04b685a-0d2d-404c-a74a-775ffab298ce,1,0,5fe6967d-e333-464b-a89e-8c868c0ce37d,5fe6967d-e333-464b-a89e-8c868c0ce37d,1,0,5aef2892-7a87-4d3b-bb46-8340a7fb97a8,5aef2892-7a87-4d3b-bb46-8340a7fb97a8,1,0,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,1,0,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,1,0,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,1,0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,1,0,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,1,0,e057e428-99c1-419d-a169-697c1e825e94,e057e428-99c1-419d-a169-697c1e825e94,1,0,784a60bd-4070-476d-9b8b-f607c76dc52b,784a60bd-4070-476d-9b8b-f607c76dc52b,1,0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,1,0,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,1,0,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,1,0,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,1,0,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,1,0,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,1,0,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,1,0,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,1,0,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,1,0,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,1,0,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,1,0,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,1,0,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,1,0,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,1,0,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,1,0,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,1,0,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,1,0,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,1,0,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,1,0,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,1,0,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,1,0,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,1,0,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,1,0,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,1,0,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,1,0,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,1,0,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,1,0,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,1,0,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,1,0,e870a1bd-0c08-4d1e-832a-357922983c19,e870a1bd-0c08-4d1e-832a-357922983c19,1,0,9f71aeac-f889-40dc-91bd-d670da4efd2b,9f71aeac-f889-40dc-91bd-d670da4efd2b,1,0,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,1,0,614ef0bd-3298-408b-bf71-37df8ee60702,614ef0bd-3298-408b-bf71-37df8ee60702,1,0,26ff1be6-f72a-456a-9dce-302029752603,26ff1be6-f72a-456a-9dce-302029752603,1,0,db850a08-0c99-4a57-9b04-38be64bd38fb,db850a08-0c99-4a57-9b04-38be64bd38fb,1,0,abeca127-5ae9-46af-a5e8-d6438fd68367,abeca127-5ae9-46af-a5e8-d6438fd68367,1,0,bce81631-9f6d-42b3-b4b6-2199afb08f2f,bce81631-9f6d-42b3-b4b6-2199afb08f2f,1,0,67d6878f-3e47-4142-8f98-c5a207f0b8a8,67d6878f-3e47-4142-8f98-c5a207f0b8a8,1,0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,1,0,68636657-4d46-4c2a-9b2f-11521a55dfb4,68636657-4d46-4c2a-9b2f-11521a55dfb4,1,0,18a83f43-dc84-4f8a-9580-681b19f571c4,18a83f43-dc84-4f8a-9580-681b19f571c4,1,0,01c588b0-d0ce-4978-b04d-084e6a00fcc7,01c588b0-d0ce-4978-b04d-084e6a00fcc7,1,0,a23642d9-8c4f-44a5-8865-bfb286e47c55,a23642d9-8c4f-44a5-8865-bfb286e47c55,1,0,7b37e038-dcef-41e1-b6e7-ed73c6958415,7b37e038-dcef-41e1-b6e7-ed73c6958415,1,0,24df2d14-5ebf-4ded-ba14-5daee7a0c536,24df2d14-5ebf-4ded-ba14-5daee7a0c536,1,0,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,1,0,03bb028a-ee8c-411e-8382-653046f803c6,03bb028a-ee8c-411e-8382-653046f803c6,1,0,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,1,0,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,1,0,38d5ed93-133b-44fe-827a-69a6cfc0461d,38d5ed93-133b-44fe-827a-69a6cfc0461d,1,0,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,1,0,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,1,0,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,1,0,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,1,0,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1,0,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,1,0,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,1,0,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1,0,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,1,0,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,1,0,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,1,0,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,1,0,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,1,0,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,1,0,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,1,0,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1,0,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,1,0,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,1,0,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,1,0,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,1,0,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,1,0,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,1,0,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,1,0,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,1,0,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,1,0,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,1,0,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,1,0,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1,0,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,1,0,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,1,0,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,1,0,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,1,0,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,1,0,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,1,0,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,1,0,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,1,0,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,1,0,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,1,0,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,1,0,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,1,0,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,1,0,45ca19df-90f3-4143-a659-bc0cb97efee9,45ca19df-90f3-4143-a659-bc0cb97efee9,1,0,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,1,0,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,1,0,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,1,0,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,1,0,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,1,0,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,1,0,d57a3300-0f9f-4fe5-b627-01c96b723053,d57a3300-0f9f-4fe5-b627-01c96b723053,1,0,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,1,0,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,1,0,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,1,0,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,1,0,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,1,0,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,1,0,cf783265-a4cb-436f-963a-1ff8220ae246,cf783265-a4cb-436f-963a-1ff8220ae246,1,0,3560f949-48f9-4fca-9fe2-81efc1ec0eee,3560f949-48f9-4fca-9fe2-81efc1ec0eee,1,0,662078f0-b75d-4c44-896f-7b7f74fd1ed4,662078f0-b75d-4c44-896f-7b7f74fd1ed4,1,0,4fa11304-fbd4-4c90-909d-5024283a6868,4fa11304-fbd4-4c90-909d-5024283a6868,1,0,207290c2-5221-48ad-99aa-bb0f7955df3f,207290c2-5221-48ad-99aa-bb0f7955df3f,1,0,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,1,0,d91a016e-cca9-4976-9c53-2c96fa95cf1a,d91a016e-cca9-4976-9c53-2c96fa95cf1a,1,0,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,1,0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,1,0,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,1,0,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,1,0,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,1,0,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,1,0,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,1,0,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,1,0,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,1,0,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,1,0,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,1,0,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,1,0,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,1,0,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,1,0,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,1,0,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,1,0,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,1,0,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,1,0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,1,0,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,1,0,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,1,0,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,1,0,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,1,0,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,1,0,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,1,0,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,1,0,7904d64a-2c30-4434-8924-b4817b727db9,7904d64a-2c30-4434-8924-b4817b727db9,1,0,c550a43a-1240-4f29-9045-a262f37f703a,c550a43a-1240-4f29-9045-a262f37f703a,1,0,86b1feed-ed65-4672-a49a-c52282b40be3,86b1feed-ed65-4672-a49a-c52282b40be3,1,0,85ac42d7-400a-4469-8fcd-e6a14f258792,85ac42d7-400a-4469-8fcd-e6a14f258792,1,0,ec681c28-661c-43e3-9285-9fc606f2d24c,ec681c28-661c-43e3-9285-9fc606f2d24c,1,0,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,1,0,413c2d03-f717-4503-9723-c605114b2799,413c2d03-f717-4503-9723-c605114b2799,1,0,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1,0,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,1,0,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,1,0,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,1,0,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,1,0,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,1,0,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,1,0,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,1,0,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,1,0,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,1,0,e9a2320b-71a1-4974-8b5a-1990062ec7df,e9a2320b-71a1-4974-8b5a-1990062ec7df,1,0,2e459a7c-c448-4db4-ae21-e59646527030,2e459a7c-c448-4db4-ae21-e59646527030,1,0,891194d9-9f02-4b22-89cd-941181c83ecb,891194d9-9f02-4b22-89cd-941181c83ecb,1,0,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,1,0,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,1,0,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,1,0,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,1,0,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,1,0,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1,0,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,1,0,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,1,0,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,1,0,af6bccbb-a6cb-41ee-bc4e-f2d6a5e0f419,af6bccbb-a6cb-41ee-bc4e-f2d6a5e0f419,1,0,d08679db-f83f-476e-b8c4-f3f52c3cf6fd,d08679db-f83f-476e-b8c4-f3f52c3cf6fd,1,0,e0227e4b-be22-4614-8980-5d573fae705d,e0227e4b-be22-4614-8980-5d573fae705d,1,0,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,1,0,6f36007b-04dc-4007-abf7-e20fbd126b97,6f36007b-04dc-4007-abf7-e20fbd126b97,1,0,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,1,0,aa6444a8-6c17-4207-a623-9b734e08e30e,aa6444a8-6c17-4207-a623-9b734e08e30e,1,0,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,1,0,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,1,0,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,1,0,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,1,0,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,1,0,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,1,0,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,1,0,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,1,0,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,1,0,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,1,0,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,1,0,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,1,0,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,1,0,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,1,0,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,1,0,acd30e63-68dc-4ab2-a6fe-16eb69d09271,acd30e63-68dc-4ab2-a6fe-16eb69d09271,1,0,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,1,0,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,1,0,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,1,0,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,1,0,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,1,0,13b3c973-6be3-4898-89d5-20852cd14e46,13b3c973-6be3-4898-89d5-20852cd14e46,1,0,d978d078-4fd8-40b9-90c2-047cdaf94cba,d978d078-4fd8-40b9-90c2-047cdaf94cba,1,0,f38bb317-8a59-4786-be76-e1d4e534628d,f38bb317-8a59-4786-be76-e1d4e534628d,1,0,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,1,0,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,1,0,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,1,0,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,1,0,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,1,0,8fa21575-177f-4b7c-94b5-dfeefe737cb4,8fa21575-177f-4b7c-94b5-dfeefe737cb4,1,0,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,1,0,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,1,0,491a2337-1bf9-45c1-8ae6-95605ef41992,491a2337-1bf9-45c1-8ae6-95605ef41992,1,0,c3f2a760-610a-40e0-945b-1f9f6369444d,c3f2a760-610a-40e0-945b-1f9f6369444d,1,0,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,1,0,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,1,0,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,1,0,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,1,0,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,1,0,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,1,0,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,1,0,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,1,0,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,1,0,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,1,0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,1,0,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,1,0,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,1,0,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,1,0,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,1,0,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,1,0,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,1,0,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,1,0,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,1,0,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1,0,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,1,0,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,1,0,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,1,0,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,1,0,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,1,0,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,1,0,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,1,0,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,1,0,aef03c0b-2846-43b7-b382-9a51ec783e85,aef03c0b-2846-43b7-b382-9a51ec783e85,1,0,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,1,0,c0804a4a-64d5-457f-a542-8e5badccbdf1,c0804a4a-64d5-457f-a542-8e5badccbdf1,1,0,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1,0,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,1,0,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,1,0,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,1,0,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,1,0,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,1,0,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,1,0,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,1,0,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,1,0,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,1,0,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,1,0,1c2da2ac-e797-11e6-0489-a8667f21fde4,1c2da2ac-e797-11e6-0489-a8667f21fde4,1,0,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,1,0,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,1,0,df7892fe-e796-11e6-0489-a8667f21fde4,df7892fe-e796-11e6-0489-a8667f21fde4,1,0,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,1,0,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,1,0,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,1,0,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,1,0,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,1,0,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,1,0,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,1,0,fae8b26c-e796-11e6-0489-a8667f21fde4,fae8b26c-e796-11e6-0489-a8667f21fde4,1,0,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,1,0,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,1,0,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,1,0,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,1,0,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,1,0,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,1,0,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,1,0,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,1,0,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,1,0,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,1,0,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1,0,0a7d282e-45bb-4a87-b325-1659519867fb,0a7d282e-45bb-4a87-b325-1659519867fb,1,0,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,1,0,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,1,0,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,1,0,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,1,0,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,1,0,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,1,0,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,1,0,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,1,0,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,1,0,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,1,0,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,1,0,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,1,0,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,1,0,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,1,0,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,1,0,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,1,0,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,1,0,db03a88b-2804-45c2-9089-7ddb87ef2f18,db03a88b-2804-45c2-9089-7ddb87ef2f18,1,0,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,1,0,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,1,0,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,1,0,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,1,0,dc024d33-1715-40da-9c00-443d25a31ebc,dc024d33-1715-40da-9c00-443d25a31ebc,1,0,d029aa93-fea4-40e4-8cfb-2dc96544829b,d029aa93-fea4-40e4-8cfb-2dc96544829b,1,0,f8f585d1-01a0-4892-8852-c692ffaa1344,f8f585d1-01a0-4892-8852-c692ffaa1344,1,0,35c237a7-71e1-415c-809d-e99babee4e0e,35c237a7-71e1-415c-809d-e99babee4e0e,1,0,2116119f-7637-45a1-8e59-c9149619413b,2116119f-7637-45a1-8e59-c9149619413b,1,0,43882a2c-b625-4cfb-8220-3d12bfee09e4,43882a2c-b625-4cfb-8220-3d12bfee09e4,1,0,90639fdb-144d-495a-a097-76c45107fc97,90639fdb-144d-495a-a097-76c45107fc97,1,0,c076b7fd-7e17-4811-82e7-047e2bf43bb0,c076b7fd-7e17-4811-82e7-047e2bf43bb0,1,0,84b28732-9001-4798-b613-35ea65c26cce,84b28732-9001-4798-b613-35ea65c26cce,1,0,77d8285f-a87b-4a4e-b6ee-85bcd54dee12,77d8285f-a87b-4a4e-b6ee-85bcd54dee12,1,0,f2ec9416-3830-4607-90f3-f77fc53c9c70,f2ec9416-3830-4607-90f3-f77fc53c9c70,1,0,3057de81-eb41-4161-9dc2-5445699906af,3057de81-eb41-4161-9dc2-5445699906af,1,0,f660bf92-7de1-4a22-9cea-777069e4679d,f660bf92-7de1-4a22-9cea-777069e4679d,1,0,54f3fbe7-ac93-44f6-ba6e-37cb99f3569c,54f3fbe7-ac93-44f6-ba6e-37cb99f3569c,1,0,20feb794-eb05-46a6-90e7-ca4e2376d7b2,20feb794-eb05-46a6-90e7-ca4e2376d7b2,1,0,c73da415-6fc3-449a-a784-b25aed54eccd,c73da415-6fc3-449a-a784-b25aed54eccd,1,0,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,1,0,2f484aa4-452a-46af-a707-a5a6917bc0db,2f484aa4-452a-46af-a707-a5a6917bc0db,1,0,fd6ff934-6f11-4182-b0cb-6926902d33c0,fd6ff934-6f11-4182-b0cb-6926902d33c0,1,0,315af891-2075-4833-a404-6c0f2004ee53,315af891-2075-4833-a404-6c0f2004ee53,1,0,5725db77-bfbf-4d85-9565-163b309a53ee,5725db77-bfbf-4d85-9565-163b309a53ee,1,0,99a7142c-b3c7-4221-abf8-6831a3cbc16e,99a7142c-b3c7-4221-abf8-6831a3cbc16e,1,0,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,1,0,2e09abe1-0934-42ae-970f-5e001c35c31a,2e09abe1-0934-42ae-970f-5e001c35c31a,1,0,587d48a3-5627-4481-b13e-c22740b57d8a,587d48a3-5627-4481-b13e-c22740b57d8a,1,0,1f3e3089-1e04-4147-8ece-aa96a76467dd,1f3e3089-1e04-4147-8ece-aa96a76467dd,1,0,22a213b5-ed72-4181-8ff8-89f860c87aa1,22a213b5-ed72-4181-8ff8-89f860c87aa1,1,0,4c56cbff-653e-4f16-b702-c77190d7eb7f,4c56cbff-653e-4f16-b702-c77190d7eb7f,1,0,172ff335-c7ae-4905-b705-2a1475b95713,172ff335-c7ae-4905-b705-2a1475b95713,1,0,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,1,0,cf896f41-7cea-4083-a9f8-96ad881ce641,cf896f41-7cea-4083-a9f8-96ad881ce641,1,0,1d852dc0-90c9-4568-84f9-b1d822573b6b,1d852dc0-90c9-4568-84f9-b1d822573b6b,1,0,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,1,0,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,1,0,37c8f5e1-3513-47f8-896d-a54d11b83dcd,37c8f5e1-3513-47f8-896d-a54d11b83dcd,1,0,9e07733c-39f0-491b-91e1-bf2782d957dd,9e07733c-39f0-491b-91e1-bf2782d957dd,1,0,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,1,0,5902d979-1235-4d5a-ace7-93261bdeb725,5902d979-1235-4d5a-ace7-93261bdeb725,1,0,5a090286-7969-44c9-815b-fc58aeb5d8d3,5a090286-7969-44c9-815b-fc58aeb5d8d3,1,0,8e87cf35-af54-4fa2-9428-460b765b282b,8e87cf35-af54-4fa2-9428-460b765b282b,1,0,73380bb1-bee3-4b73-a3df-1dbea99011d2,73380bb1-bee3-4b73-a3df-1dbea99011d2,1,0,8be29533-38de-413d-b420-7dac2e80af6c,8be29533-38de-413d-b420-7dac2e80af6c,1,0,82a77018-8e38-41dd-9d1f-3130bc29a707,82a77018-8e38-41dd-9d1f-3130bc29a707,1,0,4d75aaef-532e-4ed3-8153-083f04f05cc1,4d75aaef-532e-4ed3-8153-083f04f05cc1,1,0,3854a0ba-e156-4ba3-a301-b1a41ac386c4,3854a0ba-e156-4ba3-a301-b1a41ac386c4,1,0,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,1,0,c2321963-cd86-45ec-b323-3fdb5932da3a,c2321963-cd86-45ec-b323-3fdb5932da3a,1,0,d5af38bf-6261-4177-8f74-998a85f0ef39,d5af38bf-6261-4177-8f74-998a85f0ef39,1,0,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,1,0,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,1,0,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,1,0,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,1,0,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,1,0,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,1,0,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,1,0,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,1,0,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,1,0,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,1,0,d61ca454-505b-4fd6-be15-d7ed948a5ff6,d61ca454-505b-4fd6-be15-d7ed948a5ff6,1,0,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,1,0,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,1,0,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,1,0,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,1,0,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,1,0,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,1,0,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,1,0,4a87fafc-7ca7-478e-bb31-358c2b85fa92,4a87fafc-7ca7-478e-bb31-358c2b85fa92,1,0,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,1,0,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,1,0,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,1,0,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,1,0,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,1,0,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,1,0,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,1,0,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,1,0,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,1,0,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,1,0,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,1,0,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,1,0,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,1,0,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,1,0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,1,0,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,1,0,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,1,0,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,1,0,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,1,0,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,1,0,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,1,0,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,1,0,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,1,0,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,1,0,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,1,0,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,1,0,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,1,0,a469f018-da26-485f-87c3-f580321a34f0,a469f018-da26-485f-87c3-f580321a34f0,1,0,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,1,0,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,1,0,628de771-c19c-4474-989f-8fb6cd7756a2,628de771-c19c-4474-989f-8fb6cd7756a2,1,0,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,1,0,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,1,0,6789e57b-1293-442c-97d0-b8007367602e,6789e57b-1293-442c-97d0-b8007367602e,1,0,0f193c89-b664-448e-bed3-2147430367f7,0f193c89-b664-448e-bed3-2147430367f7,1,0,4c9b2506-75a8-47d3-a5d5-d946088ba14a,4c9b2506-75a8-47d3-a5d5-d946088ba14a,1,0,36eacaa1-2efd-49c0-82de-2f8972535bf2,36eacaa1-2efd-49c0-82de-2f8972535bf2,1,0,c35a643d-fe3a-4293-93c0-074fa68a31e3,c35a643d-fe3a-4293-93c0-074fa68a31e3,1,0,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,1,0,72ee9a03-a320-4e60-be04-0ee813ea567f,72ee9a03-a320-4e60-be04-0ee813ea567f,1,0,f6f52cc8-23a3-4402-b1eb-0e41584c802a,f6f52cc8-23a3-4402-b1eb-0e41584c802a,1,0,8398e065-8b4b-4901-b057-2a048776bafe,8398e065-8b4b-4901-b057-2a048776bafe,1,0,073c56ca-bf45-422d-957a-f9c57aeee4d0,073c56ca-bf45-422d-957a-f9c57aeee4d0,1,0,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,1,0,68598d98-0c59-4cda-b0b2-6901d3aff88b,68598d98-0c59-4cda-b0b2-6901d3aff88b,1,0,219c1375-f26e-4698-aa82-4b9d735df783,219c1375-f26e-4698-aa82-4b9d735df783,1,0,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,1,0,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,1,0,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,1,0,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1,0,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,1,0,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,1,0,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,1,0,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,1,0,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,1,0,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,1,0,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,1,0,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,1,0,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,1,0,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,1,0,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,1,0,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,1,0,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,1,0,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,1,0,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,1,0,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,1,0,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,1,0,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,1,0,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,1,0,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,1,0,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,1,0,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,1,0,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,1,0,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1,0,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,1,0,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,1,0,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,1,0,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,1,0,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,1,0,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,1,0,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,1,0,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,1,0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,1,0,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,1,0,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,1,0,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,1,0,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,1,0,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,1,0,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,1,0,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,1,0,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,1,0,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1,0,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,1,0,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,1,0,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,1,0,04b5ae71-7fa4-4a64-b406-59dc603b80c5,04b5ae71-7fa4-4a64-b406-59dc603b80c5,1,0,f23a2023-f776-40db-8689-1fc3f7ebc482,f23a2023-f776-40db-8689-1fc3f7ebc482,1,0,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1,0,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,1,0,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,1,0,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,1,0,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,1,0,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,1,0,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,1,0,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,1,0,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,1,0,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,1,0,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,1,0,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,1,0,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,1,0,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,1,0,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,1,0,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,1,0,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,1,0,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,1,0,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,1,0,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,1,0,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,1,0,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,1,0,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,1,0,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,1,0,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,1,0,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,1,0,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,1,0,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,1,0,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,1,0,e62e60ea-9f0c-4a7e-869f-4639f31f826c,e62e60ea-9f0c-4a7e-869f-4639f31f826c,1,0,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,1,0,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,1,0,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,1,0,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,1,0,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,1,0,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,1,0,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,1,0,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,1,0,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,1,0,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,1,0,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,1,0,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,1,0,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,1,0,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,1,0,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,1,0,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,1,0,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,1,0,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,1,0,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,1,0,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,1,0,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,1,0,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,1,0,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,1,0,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,1,0,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,1,0,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,1,0,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,1,0,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,1,0,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,1,0,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,1,0,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,1,0,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,1,0,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,1,0,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,1,0,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,1,0,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,1,0,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,1,0,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,1,0,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,1,0,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,1,0,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,1,0,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,1,0,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,1,0,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,1,0,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,1,0,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,1,0,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,1,0,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,1,0,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,1,0,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,1,0,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,1,0,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,1,0,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,1,0,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,1,0,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,1,0,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,1,0,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,1,0,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,1,0,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,1,0,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,1,0,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,1,0,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,1,0,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,1,0,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,1,0,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,1,0,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,1,0,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,1,0,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,1,0,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,1,0,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,1,0,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,1,0,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,1,0,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,1,0,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,1,0,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,1,0,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,1,0,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,1,0,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,1,0,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,1,0,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,1,0,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,1,0,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,1,0,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,1,0,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,1,0,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,1,0,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,1,0,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,1,0,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,1,0,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,1,0,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,1,0,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,1,0,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,1,0,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,1,0,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,1,0,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,1,0,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,1,0,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,1,0,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,1,0,bd0f9ec3-156a-4a6f-a52b-1213ec825bc0,bd0f9ec3-156a-4a6f-a52b-1213ec825bc0,1,0,71e52f63-04db-4336-ace6-b143d0a7d250,71e52f63-04db-4336-ace6-b143d0a7d250,1,0,afe79ef0-7830-43ce-85f3-c4c97831aa67,afe79ef0-7830-43ce-85f3-c4c97831aa67,1,0,0d7c3192-b15b-4d40-83f9-b76c6f8e654f,0d7c3192-b15b-4d40-83f9-b76c6f8e654f,1,0,fe07f268-bcfd-40c6-adf3-79df859ff731,fe07f268-bcfd-40c6-adf3-79df859ff731,1,0,1a1c88ff-b0c4-42c3-bf10-ebdf4de935b7,1a1c88ff-b0c4-42c3-bf10-ebdf4de935b7,1,0,15e90374-99d9-48f7-b7d6-ec160cdb378f,15e90374-99d9-48f7-b7d6-ec160cdb378f,1,0,ad5b6b8e-c2b5-45aa-8e07-50ae8877ac8f,ad5b6b8e-c2b5-45aa-8e07-50ae8877ac8f,1,0,6c470f57-c920-435a-a013-ff83a737cf3a,6c470f57-c920-435a-a013-ff83a737cf3a,1,0,a5e13e12-72b7-477d-8d80-06015fa5dece,a5e13e12-72b7-477d-8d80-06015fa5dece,1,0,d9c47acd-b5ee-4ea1-b247-7cc09a13eb82,d9c47acd-b5ee-4ea1-b247-7cc09a13eb82,1,0,4a81906a-7db7-4e7d-a95e-79b07a43e573,4a81906a-7db7-4e7d-a95e-79b07a43e573,1,0,0bcabdf4-3348-405d-ba75-7bcc106f9e7f,0bcabdf4-3348-405d-ba75-7bcc106f9e7f,1,0,5f2980ca-3f1c-4680-a6e9-477825442782,5f2980ca-3f1c-4680-a6e9-477825442782,1,0,40fd6b4a-2180-4403-b7e6-48b42d8285b7,40fd6b4a-2180-4403-b7e6-48b42d8285b7,1,0,a671cb1e-b27a-44bb-a8ca-1388f099de2e,a671cb1e-b27a-44bb-a8ca-1388f099de2e,1,0,6cff6b09-91b5-4f2b-89aa-23d2f83f9d89,6cff6b09-91b5-4f2b-89aa-23d2f83f9d89,1,0,a4b6920e-3e25-4798-809a-27d7bfae4ee7,a4b6920e-3e25-4798-809a-27d7bfae4ee7,1,0,981f6e35-64b8-4d63-b383-32ea71fcd025,981f6e35-64b8-4d63-b383-32ea71fcd025,1,0,9a7b964d-1c06-44af-8d25-f84493c70a42,9a7b964d-1c06-44af-8d25-f84493c70a42,1,0,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,1,0,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,1,0,ab057ce4-ac51-4465-8aad-eadc9088c62d,ab057ce4-ac51-4465-8aad-eadc9088c62d,1,0,8842c0e3-2e20-4f37-ae7c-f5449004994b,8842c0e3-2e20-4f37-ae7c-f5449004994b,1,0,5b2cc44b-69cb-495c-a26b-003a495df40b,5b2cc44b-69cb-495c-a26b-003a495df40b,1,0,30250d93-10ff-45c9-920b-5fed3f9d8093,30250d93-10ff-45c9-920b-5fed3f9d8093,1,0,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,1,0,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,1,0,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,1,0,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,1,0,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,1,0,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,1,0,23f93492-59f5-491b-8708-45096934c7e6,23f93492-59f5-491b-8708-45096934c7e6,1,0,30f5471a-17fb-4184-9798-4f8e3ef0cccb,30f5471a-17fb-4184-9798-4f8e3ef0cccb,1,0,27abda4c-a43c-49b4-90cd-db780afe0c45,27abda4c-a43c-49b4-90cd-db780afe0c45,1,0,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,1,0,1a28db16-d410-4101-bf31-21cefa880dae,1a28db16-d410-4101-bf31-21cefa880dae,1,0,2b85bcf6-85b0-4efb-bada-b65414a8d264,2b85bcf6-85b0-4efb-bada-b65414a8d264,1,0,cf027de4-59c9-4b8f-9695-b1d4d16548fe,cf027de4-59c9-4b8f-9695-b1d4d16548fe,1,0,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,1,0,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,1,0,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,1,0,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,1,0,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,1,0,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,1,0,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,1,0,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,1,0,88cefe4a-a6c5-4753-935e-f956d9de9f77,88cefe4a-a6c5-4753-935e-f956d9de9f77,1,0,882e78b7-90bd-4b95-8852-146bdb51ec15,882e78b7-90bd-4b95-8852-146bdb51ec15,1,0,ae4435c3-62c0-4f08-b526-7f9571eed8ae,ae4435c3-62c0-4f08-b526-7f9571eed8ae,1,0,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,1,0,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,1,0,c7b46558-d688-4c42-ae52-f98de7923176,c7b46558-d688-4c42-ae52-f98de7923176,1,0,31fdbb46-1df1-4b74-a54e-b922260dcca6,31fdbb46-1df1-4b74-a54e-b922260dcca6,1,0,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,1,0,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,1,0,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,1,0,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,1,0,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,1,0,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,1,0,8317ac49-890d-4921-8c0d-1bfc676f0b40,8317ac49-890d-4921-8c0d-1bfc676f0b40,1,0,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,1,0,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,1,0,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,1,0,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,1,0,0c732569-a50f-4be3-a214-0843c6a3da47,0c732569-a50f-4be3-a214-0843c6a3da47,1,0,f55d74bf-5824-4228-9683-31f7c7fdf74d,f55d74bf-5824-4228-9683-31f7c7fdf74d,1,0,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,1,0,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,1,0,c30c6860-befb-497e-b432-3dba0f86c540,c30c6860-befb-497e-b432-3dba0f86c540,1,0,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,1,0,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,1,0,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,1,0,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,1,0,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,1,0,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,1,0,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,1,0,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,1,0,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,1,0,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,1,0,e67dff00-92e2-4f58-a950-d5bbca9291c5,e67dff00-92e2-4f58-a950-d5bbca9291c5,1,0,e1964724-804a-4ecc-be9e-5b84e58f2b84,e1964724-804a-4ecc-be9e-5b84e58f2b84,1,0,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,1,0,bf3cb513-2856-472b-8713-7bf8ba70cdce,bf3cb513-2856-472b-8713-7bf8ba70cdce,1,0,de4815c8-0853-47e0-862b-b60119c674f6,de4815c8-0853-47e0-862b-b60119c674f6,1,0,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,1,0,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,1,0,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,1,0,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,1,0,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,1,0,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,1,0,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,1,0,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,1,0,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,1,0,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,1,0,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,1,0,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,1,0,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,1,0,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,1,0,436b558e-6547-4ba6-8cee-954fe36743ea,436b558e-6547-4ba6-8cee-954fe36743ea,1,0,6120bb6e-b177-48bf-b467-02bab0d4cc0d,6120bb6e-b177-48bf-b467-02bab0d4cc0d,1,0,a5af4715-6c4f-484b-9599-5b1b9147713f,a5af4715-6c4f-484b-9599-5b1b9147713f,1,0,307b6e66-6fef-4777-b20a-37898928932f,307b6e66-6fef-4777-b20a-37898928932f,1,0,a69494c0-dcce-4359-aa82-c1cfae8a43eb,a69494c0-dcce-4359-aa82-c1cfae8a43eb,1,0,2b243d49-5500-403a-b177-ac1c70bb889d,2b243d49-5500-403a-b177-ac1c70bb889d,1,0,51c040c6-e7a4-4e0e-b479-039636fdb6ec,51c040c6-e7a4-4e0e-b479-039636fdb6ec,1,0,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,1,0,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,1,0,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,1,0,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,1,0,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,1,0,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,1,0,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,1,0,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,1,0,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,1,0,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,1,0,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,1,0,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,1,0,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,1,0,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,1,0,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,1,0,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,1,0,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,1,0,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,1,0,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,1,0,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,1,0,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,1,0,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,1,0,b4dde44e-57d5-4c3a-bb9b-643787ce07b0,b4dde44e-57d5-4c3a-bb9b-643787ce07b0,1,0,d2160866-78ca-424a-92b9-d389fb341ee0,d2160866-78ca-424a-92b9-d389fb341ee0,1,0,73b36823-72a4-4286-8ee2-02b2f086d5ea,73b36823-72a4-4286-8ee2-02b2f086d5ea,1,0,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,1,0,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,1,0,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,1,0,c013a650-bd4b-4e14-97cc-05df17dbb0d5,c013a650-bd4b-4e14-97cc-05df17dbb0d5,1,0,00bc2e99-c7c9-4a4b-b0bc-c9babe17deda,00bc2e99-c7c9-4a4b-b0bc-c9babe17deda,1,0,18ba2c0c-d606-47ee-9409-66acb24bd794,18ba2c0c-d606-47ee-9409-66acb24bd794,1,0,9f24891c-3846-455a-bf95-be3b186f4342,9f24891c-3846-455a-bf95-be3b186f4342,1,0,ddc332d9-1d60-40fe-87fd-7f2164db1edf,ddc332d9-1d60-40fe-87fd-7f2164db1edf,1,0,d0e3c3a5-e74c-4c0a-8679-77e6a097eb36,d0e3c3a5-e74c-4c0a-8679-77e6a097eb36,1,0,20c43755-49cc-4f11-bd2f-52a9e53547ef,20c43755-49cc-4f11-bd2f-52a9e53547ef,1,0,7dbed991-4883-444c-8ce2-96c203a905f2,7dbed991-4883-444c-8ce2-96c203a905f2,1,0,bbadd00d-6410-41ec-a7d8-4dbd52986cc2,bbadd00d-6410-41ec-a7d8-4dbd52986cc2,1,0,d5f66278-4ab2-407a-abef-eb7636e9ba95,d5f66278-4ab2-407a-abef-eb7636e9ba95,1,0,61e51391-c412-46a5-8290-d5183ad0db83,61e51391-c412-46a5-8290-d5183ad0db83,1,0,e9dfdaa2-4094-4501-a38a-3811e7e4c708,e9dfdaa2-4094-4501-a38a-3811e7e4c708,1,0,0a62947e-848a-47fa-a239-95aee6b955d4,0a62947e-848a-47fa-a239-95aee6b955d4,1,0,beaef14b-175f-4ebe-b387-9c922a42c99e,beaef14b-175f-4ebe-b387-9c922a42c99e,1,0,13daaad0-2726-4065-8158-47059865452a,13daaad0-2726-4065-8158-47059865452a,1,0,a7829dfb-adb9-4401-a609-ca9a0f2376b3,a7829dfb-adb9-4401-a609-ca9a0f2376b3,1,0,26f1076a-8100-4cf4-9539-29637a5e9137,26f1076a-8100-4cf4-9539-29637a5e9137,1,0,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,1,0,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,1,0,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,1,0,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,1,0,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,1,0,951927d4-7bfc-4edb-b97f-dcc29a937400,951927d4-7bfc-4edb-b97f-dcc29a937400,1,0,71309e88-d514-40f3-a329-b2a420e75504,71309e88-d514-40f3-a329-b2a420e75504,1,0,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,1,0,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,1,0,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,1,0,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,1,0,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,1,0,5225b4da-431e-469d-a30c-31fa434b7e86,5225b4da-431e-469d-a30c-31fa434b7e86,1,0,68dcbdd5-c1fd-472f-873c-359d3a237b8c,68dcbdd5-c1fd-472f-873c-359d3a237b8c,1,0,3c6e831c-c934-46bb-8040-edd6de81ba1b,3c6e831c-c934-46bb-8040-edd6de81ba1b,1,0,3c737aff-9581-409a-9a6e-d5e3c133d8df,3c737aff-9581-409a-9a6e-d5e3c133d8df,1,0,916a9ea9-309d-4a7a-9ded-63bda01a39d4,916a9ea9-309d-4a7a-9ded-63bda01a39d4,1,0,0fdbd1ab-716d-46b5-aa75-fb09812ced5b,0fdbd1ab-716d-46b5-aa75-fb09812ced5b,1,0,b26ab92b-9739-4eb4-b855-be6850274432,b26ab92b-9739-4eb4-b855-be6850274432,1,0,17944416-85a5-49e4-9fa8-652c671c3df0,17944416-85a5-49e4-9fa8-652c671c3df0,1,0,b7936cda-654e-4707-af76-385a63243cdf,b7936cda-654e-4707-af76-385a63243cdf,1,0,192844c3-7cb9-4477-a4af-0edb8ce5129d,192844c3-7cb9-4477-a4af-0edb8ce5129d,1,0,33324481-55d1-475f-9f12-7542a05429a2,33324481-55d1-475f-9f12-7542a05429a2,1,0,07b7591f-dcfc-483f-85f6-b5a08d952fe2,07b7591f-dcfc-483f-85f6-b5a08d952fe2,1,0,866c418f-332e-415a-bb8e-794d38f15080,866c418f-332e-415a-bb8e-794d38f15080,1,0,a34b8fdc-e756-4065-b68a-12a07fa7c40e,a34b8fdc-e756-4065-b68a-12a07fa7c40e,1,0,b853debb-d715-4296-9070-45cc5dae571d,b853debb-d715-4296-9070-45cc5dae571d,1,0,fc406b50-f267-44b8-a833-ba7e8880903e,fc406b50-f267-44b8-a833-ba7e8880903e,1,0,6517bf8b-d2fd-4b6b-a4a5-b3086ebad8de,6517bf8b-d2fd-4b6b-a4a5-b3086ebad8de,1,0,391a1891-85a2-45b8-a747-3ecd705fc75b,391a1891-85a2-45b8-a747-3ecd705fc75b,1,0,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,1,0,b9ef62f6-9b1d-4d13-8016-73ed531d195a,b9ef62f6-9b1d-4d13-8016-73ed531d195a,1,0,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,1,0,229fe764-87f5-4d19-b042-c31fef5cddd6,229fe764-87f5-4d19-b042-c31fef5cddd6,1,0,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,1,0,e932800c-fd81-417d-a601-c774b888d66a,e932800c-fd81-417d-a601-c774b888d66a,1,0,a2335b6f-1dbb-4722-979b-8bed83aa8c94,a2335b6f-1dbb-4722-979b-8bed83aa8c94,1,0,211cf921-d880-4f74-b8ee-5312dea28613,211cf921-d880-4f74-b8ee-5312dea28613,1,0,2fd3a396-b8ae-409e-9373-02a039393a80,2fd3a396-b8ae-409e-9373-02a039393a80,1,0,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,1,0,346ef414-b20b-4095-86fe-18ca21c9887f,346ef414-b20b-4095-86fe-18ca21c9887f,1,0,c01ab97b-4964-4f7d-b749-56c0b94feb93,c01ab97b-4964-4f7d-b749-56c0b94feb93,1,0,0cc63813-cf16-4a99-b3bd-18a773091230,0cc63813-cf16-4a99-b3bd-18a773091230,1,0,4fc00971-c980-468a-9690-5cd520d12eb0,4fc00971-c980-468a-9690-5cd520d12eb0,1,0,85972c27-4f39-4982-9307-7877e87ef87b,85972c27-4f39-4982-9307-7877e87ef87b,1,0,96afdffb-7595-4c49-9e86-8296f50bd2f5,96afdffb-7595-4c49-9e86-8296f50bd2f5,1,0,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,1,0,e125d3e0-950f-42ee-8904-bd26091afa55,e125d3e0-950f-42ee-8904-bd26091afa55,1,0,2b4797a5-074a-4a01-b99f-1c5590cfde40,2b4797a5-074a-4a01-b99f-1c5590cfde40,1,0,718e53d2-24ec-40fb-9def-825441ada46c,718e53d2-24ec-40fb-9def-825441ada46c,1,0,4c0a7fd6-8f09-41d6-949f-65ce708c1256,4c0a7fd6-8f09-41d6-949f-65ce708c1256,1,0,792abc06-b52a-4691-ba92-96ed73ca702a,792abc06-b52a-4691-ba92-96ed73ca702a,1,0,148dbe44-86d1-4362-b9db-8ff68cd2b34d,148dbe44-86d1-4362-b9db-8ff68cd2b34d,1,0,1fbc893e-3000-4fac-88f5-c82251835d65,1fbc893e-3000-4fac-88f5-c82251835d65,1,0,05852816-63ec-4179-abca-66372bbfb04c,05852816-63ec-4179-abca-66372bbfb04c,1,0,0165f721-b011-4524-bfd5-81e35092f2be,0165f721-b011-4524-bfd5-81e35092f2be,1,0,e74925d4-1979-4600-8560-0932d26450ad,e74925d4-1979-4600-8560-0932d26450ad,1,0,aa108131-151d-4356-8a24-345e4ec74281,aa108131-151d-4356-8a24-345e4ec74281,1,0,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,1,0,e3251f1a-3c80-4c86-9960-270920bd512f,e3251f1a-3c80-4c86-9960-270920bd512f,1,0,3c3d5474-977b-4df9-88de-042e997bd10d,3c3d5474-977b-4df9-88de-042e997bd10d,1,0,4b88d172-5a44-4011-bb38-e94bf7a9c879,4b88d172-5a44-4011-bb38-e94bf7a9c879,1,0,3bced2d4-e3d7-4489-a26d-f84620b096f4,3bced2d4-e3d7-4489-a26d-f84620b096f4,1,0,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,1,0,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,1,0,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,1,0,18436045-1008-4114-8032-274fea0f4627,18436045-1008-4114-8032-274fea0f4627,1,0,cad93727-cffb-44a6-aaee-be73a078e802,cad93727-cffb-44a6-aaee-be73a078e802,1,0,c034f410-ff8e-45d7-925f-94448f88a7af,c034f410-ff8e-45d7-925f-94448f88a7af,1,0,0027727b-3917-4010-9953-1649266e8ed7,0027727b-3917-4010-9953-1649266e8ed7,1,0,b088786a-046f-458c-8e7a-5bebf8df8b34,b088786a-046f-458c-8e7a-5bebf8df8b34,1,0,6d015113-1e32-4f5e-aacd-8134d7307125,6d015113-1e32-4f5e-aacd-8134d7307125,1,0,58230238-d2f2-422e-90cb-de355996eb19,58230238-d2f2-422e-90cb-de355996eb19,1,0,3d907678-628d-4fb2-85c2-149839024c08,3d907678-628d-4fb2-85c2-149839024c08,1,0,71384d10-6acf-4139-b766-cb8b5796f1a7,71384d10-6acf-4139-b766-cb8b5796f1a7,1,0,a8f149d7-e9bc-4695-b4f4-88434e31aafb,a8f149d7-e9bc-4695-b4f4-88434e31aafb,1,0,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,1,0,11ba510f-cb57-43d0-9897-c49e10b67ccd,11ba510f-cb57-43d0-9897-c49e10b67ccd,1,0,9d92af67-c88d-4429-9e85-0b5bf04c4b79,9d92af67-c88d-4429-9e85-0b5bf04c4b79,1,0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,1,0,43523bbb-c923-4a20-bcb5-50d30cc826ee,43523bbb-c923-4a20-bcb5-50d30cc826ee,1,0,c89d9aad-3364-45df-88b5-b23ae76edbba,c89d9aad-3364-45df-88b5-b23ae76edbba,1,0,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,1,0,7e4b9dce-e332-4d35-8b5f-d3f88918989d,7e4b9dce-e332-4d35-8b5f-d3f88918989d,1,0,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,1,0,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,1,0,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,1,0,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,1,0,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,1,0,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,1,0,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,1,0,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,1,0,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,1,0,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,1,0,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,1,0,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,1,0,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,1,0,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,1,0,de2bdd4f-93f2-4341-86d6-7082fc286a5c,de2bdd4f-93f2-4341-86d6-7082fc286a5c,1,0,ba96ec0e-931e-45be-a782-e68ba4fedddb,ba96ec0e-931e-45be-a782-e68ba4fedddb,1,0,9af5882f-3a42-4fae-83df-6aa8de577112,9af5882f-3a42-4fae-83df-6aa8de577112,1,0,79bc5e39-3017-48bf-8e42-fa34e8b581ef,79bc5e39-3017-48bf-8e42-fa34e8b581ef,1,0,fe6e207f-d306-4470-8441-ffd3f3710d31,fe6e207f-d306-4470-8441-ffd3f3710d31,1,0,7451af80-7387-4e8d-a3da-2ae0540c3fd4,7451af80-7387-4e8d-a3da-2ae0540c3fd4,1,0,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1,0,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,1,0,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,1,0,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,1,0,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,1,0,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,1,0,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,1,0,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,1,0,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,1,0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,1,0,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,1,0,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,1,0,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,1,0,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1,0,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,1,0,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,1,0,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,1,0,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,1,0,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,1,0,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,1,0,b5bb5376-27a6-43f2-9e91-bf7c913b89fd,b5bb5376-27a6-43f2-9e91-bf7c913b89fd,1,0,24861cd2-2be0-4454-8154-2201e63be266,24861cd2-2be0-4454-8154-2201e63be266,1,0,2e364599-aad9-4d1d-a4df-6cbd3ed768e7,2e364599-aad9-4d1d-a4df-6cbd3ed768e7,1,0,b1dd4569-6ed9-49f4-b05b-359229afb7a5,b1dd4569-6ed9-49f4-b05b-359229afb7a5,1,0,c14cac09-820e-47ae-81bb-eb497950d40c,c14cac09-820e-47ae-81bb-eb497950d40c,1,0,201cd431-6027-466c-abec-09ff65f42244,201cd431-6027-466c-abec-09ff65f42244,1,0,1018c5d8-8aed-49ba-a27c-a44bddd96144,1018c5d8-8aed-49ba-a27c-a44bddd96144,1,0,a81e5d20-9c42-462d-83a3-f86522c473f5,a81e5d20-9c42-462d-83a3-f86522c473f5,1,0,1ce4440e-3709-4cb1-8505-2379d5146be3,1ce4440e-3709-4cb1-8505-2379d5146be3,1,0,81c1f13c-e4ac-46b8-a205-c4f695ddf667,81c1f13c-e4ac-46b8-a205-c4f695ddf667,1,0,a26d8489-88a8-438e-bb58-c7b5a742a243,a26d8489-88a8-438e-bb58-c7b5a742a243,1,0,4b700bfd-5179-4504-b710-fd65036dded7,4b700bfd-5179-4504-b710-fd65036dded7,1,0,b046cb0b-f88b-4fb1-b08d-bb02b20dee74,b046cb0b-f88b-4fb1-b08d-bb02b20dee74,1,0,67dc31fa-cc64-4d29-96aa-65a7fd480790,67dc31fa-cc64-4d29-96aa-65a7fd480790,1,0,17f0e86d-8661-492c-85fa-2ce3cd1a57d5,17f0e86d-8661-492c-85fa-2ce3cd1a57d5,1,0,1cd36cf8-ae51-4fca-91d8-60c82f9e21e1,1cd36cf8-ae51-4fca-91d8-60c82f9e21e1,1,0,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,1,0,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,1,0,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,1,0,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,1,0,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,1,0,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,1,0,65ad33ce-edab-4f8b-8f44-1a5634d87191,65ad33ce-edab-4f8b-8f44-1a5634d87191,1,0,bcd727b5-4678-41e9-85d5-98d4157cdd77,bcd727b5-4678-41e9-85d5-98d4157cdd77,1,0,38c6dd83-2a70-4c4a-9f29-3b2b54a15501,38c6dd83-2a70-4c4a-9f29-3b2b54a15501,1,0,f403fcb3-a4f8-479d-9fa1-85d458b9a4b5,f403fcb3-a4f8-479d-9fa1-85d458b9a4b5,1,0,c56d3cfe-6ae1-4fe3-abdc-2d845049ddde,c56d3cfe-6ae1-4fe3-abdc-2d845049ddde,1,0,66f1dc54-f28c-4fb7-a6c9-f839d656e87c,66f1dc54-f28c-4fb7-a6c9-f839d656e87c,1,0,b8e3d08d-d442-4ffa-83d8-f372a7d2d340,b8e3d08d-d442-4ffa-83d8-f372a7d2d340,1,0,ebba727b-8155-4dd8-8ea0-207ca396566b,ebba727b-8155-4dd8-8ea0-207ca396566b,1,0,e4166141-f18f-4d27-beb5-9e30fe30f842,e4166141-f18f-4d27-beb5-9e30fe30f842,1,0,b62434ac-ef9f-4fe7-8279-357e0dd760ac,b62434ac-ef9f-4fe7-8279-357e0dd760ac,1,0,eb1c7d02-f5fc-4b37-9b32-7dd828958d76,eb1c7d02-f5fc-4b37-9b32-7dd828958d76,1,0,63478206-a155-48f5-822f-9b592b561bac,63478206-a155-48f5-822f-9b592b561bac,1,0,7ab8d806-17b2-41d8-9abb-c302302b3465,7ab8d806-17b2-41d8-9abb-c302302b3465,1,0,e3822657-3052-4e11-9bcf-fdb8c1b26a9c,e3822657-3052-4e11-9bcf-fdb8c1b26a9c,1,0,db2f20a7-e01f-4c03-9343-a815e1b46b50,db2f20a7-e01f-4c03-9343-a815e1b46b50,1,0,cf122ec9-d781-434c-9742-300e701317d6,cf122ec9-d781-434c-9742-300e701317d6,1,0,2aa2a968-2cac-4883-9bc8-5a3ccbd2e7a9,2aa2a968-2cac-4883-9bc8-5a3ccbd2e7a9,1,0,7d1361af-c5d3-4312-ab5e-ba00bf3418f2,7d1361af-c5d3-4312-ab5e-ba00bf3418f2,1,0,d7fdb3d5-3c18-4d9c-938a-2fbe8a96e877,d7fdb3d5-3c18-4d9c-938a-2fbe8a96e877,1,0,b8658e11-42b6-41bb-b384-5380e2228338,b8658e11-42b6-41bb-b384-5380e2228338,1,0,40c0919f-2c53-4502-af06-745dfa47fd8e,40c0919f-2c53-4502-af06-745dfa47fd8e,1,0,b01e4e7f-1b01-4c19-ab4b-7a8c1f6b0d22,b01e4e7f-1b01-4c19-ab4b-7a8c1f6b0d22,1,0,662a2803-da19-40c7-a906-e20d0843f67f,662a2803-da19-40c7-a906-e20d0843f67f,1,0,327c0731-1496-4463-837f-8f9c3e4c1a49,327c0731-1496-4463-837f-8f9c3e4c1a49,1,0,d74a37c2-7f50-40da-b7f8-29f79ae7230c,d74a37c2-7f50-40da-b7f8-29f79ae7230c,1,0,37a677e7-6661-41b5-ba68-740361168ccf,37a677e7-6661-41b5-ba68-740361168ccf,1,0,2a41d20d-d57a-4ce8-832f-c1b83099e563,2a41d20d-d57a-4ce8-832f-c1b83099e563,1,0,a0701ad3-572a-4806-91c0-6c5fff8dd350,a0701ad3-572a-4806-91c0-6c5fff8dd350,1,0,c9f268d1-6d2a-47d5-9371-f951b95d24a6,c9f268d1-6d2a-47d5-9371-f951b95d24a6,1,0,86b155be-d611-46b4-8275-bb19a2fa20ba,86b155be-d611-46b4-8275-bb19a2fa20ba,1,0,fedb2d36-bb2e-49dd-9d52-afcc41f3636b,fedb2d36-bb2e-49dd-9d52-afcc41f3636b,1,0,5d74d2d1-a2af-4a52-a884-a60e6b07ffac,5d74d2d1-a2af-4a52-a884-a60e6b07ffac,1,0,69e67507-e063-4221-9b84-2ee9d8903c1a,69e67507-e063-4221-9b84-2ee9d8903c1a,1,0,a649cb56-2a53-4508-8bf4-9aa01373ede2,a649cb56-2a53-4508-8bf4-9aa01373ede2,1,0,7e572d75-3a89-43c0-ad68-18498d67f8ca,7e572d75-3a89-43c0-ad68-18498d67f8ca,1,0,3c159a42-d9f9-4de4-a86f-893b1fc65b46,3c159a42-d9f9-4de4-a86f-893b1fc65b46,1,0,545cd0e7-4125-48f1-9123-0bc39e436e5e,545cd0e7-4125-48f1-9123-0bc39e436e5e,1,0,9a17eec6-b517-4133-8d25-bb953d84461f,9a17eec6-b517-4133-8d25-bb953d84461f,1,0,a0a61d7f-879d-4e92-98a3-5291c834c341,a0a61d7f-879d-4e92-98a3-5291c834c341,1,0,7bf60016-2edc-443b-98b4-0864b548c482,7bf60016-2edc-443b-98b4-0864b548c482,1,0,74139209-f345-4fd9-9ade-15cc4d399836,74139209-f345-4fd9-9ade-15cc4d399836,1,0,e39de1c5-b43b-4f71-aa32-c03b8afd6f65,e39de1c5-b43b-4f71-aa32-c03b8afd6f65,1,0,d5b6aad4-b1bd-464b-aca0-f8455d6388b4,d5b6aad4-b1bd-464b-aca0-f8455d6388b4,1,0,033ab408-fa51-4af2-a82c-f3167de00681,033ab408-fa51-4af2-a82c-f3167de00681,1,0,f7267120-f367-4d47-be5e-e2aa7a2ada46,f7267120-f367-4d47-be5e-e2aa7a2ada46,1,0,911b4ba4-1902-4c69-a4c9-963ab93d35b0,911b4ba4-1902-4c69-a4c9-963ab93d35b0,1,0,70cf60eb-a5f8-4573-a28b-6844721459de,70cf60eb-a5f8-4573-a28b-6844721459de,1,0,e2666bd9-bf44-408b-98fa-b9be26bde33f,e2666bd9-bf44-408b-98fa-b9be26bde33f,1,0,9151fa13-6612-4c4c-a264-3fd669205de7,9151fa13-6612-4c4c-a264-3fd669205de7,1,0,fee8fd9d-be7d-4560-9b96-819ffd497c88,fee8fd9d-be7d-4560-9b96-819ffd497c88,1,0,c86135b4-063c-4ca8-99e2-35c61026b43f,c86135b4-063c-4ca8-99e2-35c61026b43f,1,0,186792a9-0a07-4b6d-a9a0-337221f6b009,186792a9-0a07-4b6d-a9a0-337221f6b009,1,0,49163bf6-4a6a-4da9-a0ed-257c22224b47,49163bf6-4a6a-4da9-a0ed-257c22224b47,1,0,74c71abe-90eb-4c05-a4a6-375a93e7b99c,74c71abe-90eb-4c05-a4a6-375a93e7b99c,1,0,d36efd98-34a7-41b4-99b6-34c09e71525a,d36efd98-34a7-41b4-99b6-34c09e71525a,1,0,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,1,0,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,1,0,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,1,0,ee0412d3-58e7-4715-8774-d49778e1ef73,ee0412d3-58e7-4715-8774-d49778e1ef73,1,0,ea31df21-1402-417a-9788-b17a7116e842,ea31df21-1402-417a-9788-b17a7116e842,1,0,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,1,0,e964753f-7f4c-4f9f-bd17-cdac317c1d35,e964753f-7f4c-4f9f-bd17-cdac317c1d35,1,0,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,1,0,43c22498-3fd6-4038-a291-05f0db9ab66a,43c22498-3fd6-4038-a291-05f0db9ab66a,1,0,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,1,0,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,1,0,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,1,0,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,1,0,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,1,0,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,1,0,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,1,0,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,1,0,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,1,0,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,1,0,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,1,0,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,1,0,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1,0,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,1,0,483720db-6c9e-4179-b5c7-56159c9b6073,483720db-6c9e-4179-b5c7-56159c9b6073,1,0,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,1,0,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,1,0,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,1,0,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,1,0,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,1,0,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,1,0,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,1,0,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,1,0,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,1,0,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,1,0,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,1,0,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,1,0,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,1,0,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,1,0,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,1,0,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,1,0,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,1,0,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,1,0,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,1,0,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,1,0,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,1,0,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,1,0,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,1,0,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,1,0,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,1,0,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,1,0,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,1,0,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,1,0,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,1,0,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,1,0,aa114d56-2faf-4925-8319-f0aa3993e9ee,aa114d56-2faf-4925-8319-f0aa3993e9ee,1,0,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,1,0,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,1,0,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,1,0,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,1,0,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,1,0,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,1,0,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,1,0,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,1,0,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,1,0,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,1,0,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,1,0,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,1,0,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,1,0,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,1,0,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,1,0,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,1,0,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,1,0,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,1,0,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,1,0,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,1,0,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,1,0,45af8f5d-d505-466b-a798-19f2219a180c,45af8f5d-d505-466b-a798-19f2219a180c,1,0,8a8229bc-f70a-4434-bacc-8a81fc58154b,8a8229bc-f70a-4434-bacc-8a81fc58154b,1,0,6324ad14-82ca-467b-b6b7-8d5f6049ca65,6324ad14-82ca-467b-b6b7-8d5f6049ca65,1,0,273446f0-f28b-4ce2-874c-3c6a57299b71,273446f0-f28b-4ce2-874c-3c6a57299b71,1,0,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,1,0,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,1,0,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,1,0,7a4e17bf-3649-4982-a9c6-5982390f1f1d,7a4e17bf-3649-4982-a9c6-5982390f1f1d,1,0,722be6e0-2698-431b-9206-777a36e6742f,722be6e0-2698-431b-9206-777a36e6742f,1,0,75bb0122-26bd-40be-8de8-7a57680c85ae,75bb0122-26bd-40be-8de8-7a57680c85ae,1,0,28dd22df-07cc-4e6d-89b2-b15a13f76615,28dd22df-07cc-4e6d-89b2-b15a13f76615,1,0,0c98b025-5adb-44dc-ab14-4c6517cc230b,0c98b025-5adb-44dc-ab14-4c6517cc230b,1,0,da2f09bd-109f-43aa-a90b-f033d17ed689,da2f09bd-109f-43aa-a90b-f033d17ed689,1,0,44526cb1-561d-4b87-a628-d79cc64ccdec,44526cb1-561d-4b87-a628-d79cc64ccdec,1,0,5e4dbba3-07df-4e30-be14-d9244f5ec21c,5e4dbba3-07df-4e30-be14-d9244f5ec21c,1,0,c8116351-4487-40f3-ae04-1e0741cc5df6,c8116351-4487-40f3-ae04-1e0741cc5df6,1,0,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,1,0,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,1,0,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1,0,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,1,0,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,1,0,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,1,0,a6be80f7-d6aa-4371-a180-3d355080d849,a6be80f7-d6aa-4371-a180-3d355080d849,1,0,b37722c3-e29f-4a40-b4eb-0317919fc7a5,b37722c3-e29f-4a40-b4eb-0317919fc7a5,1,0,b1b1cd90-094d-428b-a6bc-156521c1c54d,b1b1cd90-094d-428b-a6bc-156521c1c54d,1,0,4f79ef7c-79be-4a69-acc0-bd591c712d03,4f79ef7c-79be-4a69-acc0-bd591c712d03,1,0,a0dd2129-d3a1-4bca-b555-72b065be1c13,a0dd2129-d3a1-4bca-b555-72b065be1c13,1,0,dc5e8229-e301-477c-846e-2e7078e3ee5f,dc5e8229-e301-477c-846e-2e7078e3ee5f,1,0,24836e44-8fdd-44bd-91d8-4ddab2caf485,24836e44-8fdd-44bd-91d8-4ddab2caf485,1,0,3727bcfe-4d75-4270-86e7-4a66ab14866c,3727bcfe-4d75-4270-86e7-4a66ab14866c,1,0,870a4708-0b5a-4fa3-9978-d94b161d289a,870a4708-0b5a-4fa3-9978-d94b161d289a,1,0,30e9f89d-7b94-488e-9963-886c271b1af7,30e9f89d-7b94-488e-9963-886c271b1af7,1,0,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,1,0,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1,0,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,1,0,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,1,0,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,1,0,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,1,0,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,1,0,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,1,0,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,1,0,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,1,0,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,1,0,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,1,0,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,1,0,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,1,0,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,1,0,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,1,0,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,1,0,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,1,0,2d279d24-1953-4a2f-8206-77481d2fd718,2d279d24-1953-4a2f-8206-77481d2fd718,1,0,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,1,0,0a920200-77d0-42ea-abf6-0d40d63289b0,0a920200-77d0-42ea-abf6-0d40d63289b0,1,0,c850bafc-4073-44ef-b148-194f87c46f0e,c850bafc-4073-44ef-b148-194f87c46f0e,1,0,6d1dd726-815d-476e-b668-95cff4182e54,6d1dd726-815d-476e-b668-95cff4182e54,1,0,12f4a0ed-4798-4467-8834-de3eb385e22d,12f4a0ed-4798-4467-8834-de3eb385e22d,1,0,5710809e-4c41-42ab-952f-f7778fe9be0f,5710809e-4c41-42ab-952f-f7778fe9be0f,1,0,0811f6c2-6bb3-43b8-9944-910adc4c6f23,0811f6c2-6bb3-43b8-9944-910adc4c6f23,1,0,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,1,0,c86b02ab-3532-4f4c-b993-e237ed0d4d12,c86b02ab-3532-4f4c-b993-e237ed0d4d12,1,0,83c860a2-d0d7-4b7c-a127-78d86b155cfa,83c860a2-d0d7-4b7c-a127-78d86b155cfa,1,0,06e45039-8bc4-44dd-8a93-2cec34ad51ee,06e45039-8bc4-44dd-8a93-2cec34ad51ee,1,0,46e01647-cbdd-4387-affc-29b92ede8644,46e01647-cbdd-4387-affc-29b92ede8644,1,0,faa44953-118b-4027-a913-c485bca7a93f,faa44953-118b-4027-a913-c485bca7a93f,1,0,c9bd0dcd-98ec-4dc9-869a-e735fd269046,c9bd0dcd-98ec-4dc9-869a-e735fd269046,1,0,d039bfa4-39a0-43d4-ab6a-0697f9d2b375,d039bfa4-39a0-43d4-ab6a-0697f9d2b375,1,0,09072c75-75c7-4050-b674-9454558a1f87,09072c75-75c7-4050-b674-9454558a1f87,1,0,f0c8d2d2-d597-4f09-8257-0fa7524f1e44,f0c8d2d2-d597-4f09-8257-0fa7524f1e44,1,0,3e2f75ab-4143-48ca-83db-3006cb2a8584,3e2f75ab-4143-48ca-83db-3006cb2a8584,1,0,91a82492-5e27-46b6-b1a8-48e89a437715,91a82492-5e27-46b6-b1a8-48e89a437715,1,0,53bc7bfd-8786-464f-a615-ceae2971cbc9,53bc7bfd-8786-464f-a615-ceae2971cbc9,1,0,aa77817b-bd2f-4757-99b0-5e67a1b032d3,aa77817b-bd2f-4757-99b0-5e67a1b032d3,1,0,8cc27936-976d-4f31-91c6-644d15b69c55,8cc27936-976d-4f31-91c6-644d15b69c55,1,0,cf9de063-89f4-4632-b7a1-0cfbea6df643,cf9de063-89f4-4632-b7a1-0cfbea6df643,1,0,ee3bab2c-bd6a-4a33-89a2-78b4dd89bb88,ee3bab2c-bd6a-4a33-89a2-78b4dd89bb88,1,0,2478fb43-57a3-4348-b3d4-61f015e4e231,2478fb43-57a3-4348-b3d4-61f015e4e231,1,0,daa99b45-b2d2-47bc-9d7e-2d21b1a3dfd8,daa99b45-b2d2-47bc-9d7e-2d21b1a3dfd8,1,0,0449c160-01e5-4fe4-8759-5b93c484b467,0449c160-01e5-4fe4-8759-5b93c484b467,1,0,0684e4ba-28c7-4032-a43f-a3a4a37ec50b,0684e4ba-28c7-4032-a43f-a3a4a37ec50b,1,0,bcac012d-b4a9-49bb-9c54-722c741d183c,bcac012d-b4a9-49bb-9c54-722c741d183c,1,0,5370d079-975f-4f7c-95c3-7868147ecc76,5370d079-975f-4f7c-95c3-7868147ecc76,1,0,4dd66f76-e4e0-4f84-9fad-bb922cd51503,4dd66f76-e4e0-4f84-9fad-bb922cd51503,1,0,e76a411a-121b-4791-a785-dd54795eaa7f,e76a411a-121b-4791-a785-dd54795eaa7f,1,0,66844ae3-f098-462c-aef8-1fd38c403760,66844ae3-f098-462c-aef8-1fd38c403760,1,0,be96718a-223d-4597-bccf-2fb7d16dbbcc,be96718a-223d-4597-bccf-2fb7d16dbbcc,1,0,eb551461-ae0d-41dd-89fa-2f6e7f3c4840,eb551461-ae0d-41dd-89fa-2f6e7f3c4840,1,0,acec1961-a953-4f7b-b42b-baa1b8b3be14,acec1961-a953-4f7b-b42b-baa1b8b3be14,1,0,eb6394d4-1679-4494-8d23-419f5a714cdc,eb6394d4-1679-4494-8d23-419f5a714cdc,1,0,7e9fadd6-d0ad-4856-a195-1058f00bf488,7e9fadd6-d0ad-4856-a195-1058f00bf488,1,0,76d0c5ee-5b85-4670-ba1c-8fdaa7ba872a,76d0c5ee-5b85-4670-ba1c-8fdaa7ba872a,1,0,84f67d35-ca48-4fff-94e4-5f4beb7e3c08,84f67d35-ca48-4fff-94e4-5f4beb7e3c08,1,0,2972c142-0aac-4e36-b34e-4e73f18ba9cb,2972c142-0aac-4e36-b34e-4e73f18ba9cb,1,0,d6915227-4ede-4cd2-9e7c-d23dc409936e,d6915227-4ede-4cd2-9e7c-d23dc409936e,1,0,477ca2ac-ae7e-4091-bea3-9ed2d3eae788,477ca2ac-ae7e-4091-bea3-9ed2d3eae788,1,0,c9d0f1dd-bb93-4dbe-85f3-30c791a3c59e,c9d0f1dd-bb93-4dbe-85f3-30c791a3c59e,1,0,d023d15a-0f3f-46c3-8dea-43770f0a53b3,d023d15a-0f3f-46c3-8dea-43770f0a53b3,1,0,daf12fe4-79fb-43b9-9f7a-8da311449193,daf12fe4-79fb-43b9-9f7a-8da311449193,1,0,d0ad91a1-62aa-4e97-9868-82c5b8a46f22,d0ad91a1-62aa-4e97-9868-82c5b8a46f22,1,0,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,1,0,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,1,0,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,1,0,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,1,0,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,1,0,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,1,0,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,1,0,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,1,0,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,1,0,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,1,0,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,1,0,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,1,0,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,1,0,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,1,0,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,1,0,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,1,0,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,1,0,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,1,0,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,1,0,bd0e4aeb-19f9-48fc-b838-38d785004360,bd0e4aeb-19f9-48fc-b838-38d785004360,1,0,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,1,0,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,1,0,6d351276-2c04-4198-a3e4-865881c12f5c,6d351276-2c04-4198-a3e4-865881c12f5c,1,0,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,1,0,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,1,0,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,1,0,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,1,0,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,1,0,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,1,0,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,1,0,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,1,0,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,1,0,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,1,0,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,1,0,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,1,0,47714327-dd28-4e32-a1c9-20ee47d9afd0,47714327-dd28-4e32-a1c9-20ee47d9afd0,1,0,4d76ef7a-f1a6-4147-84f4-6e1717dfd77e,4d76ef7a-f1a6-4147-84f4-6e1717dfd77e,1,0,d1eb0aa7-b485-4f3a-846d-be069ca807c0,d1eb0aa7-b485-4f3a-846d-be069ca807c0,1,0,afde7867-15d3-43fa-b439-6d9e40df580b,afde7867-15d3-43fa-b439-6d9e40df580b,1,0,a676ff94-a0d1-4de9-8690-ec67f2c891d8,a676ff94-a0d1-4de9-8690-ec67f2c891d8,1,0,012bf716-3672-462e-b390-7bb4384ab4b1,012bf716-3672-462e-b390-7bb4384ab4b1,1,0,65342599-ff37-4f99-8e40-f05d87403bcf,65342599-ff37-4f99-8e40-f05d87403bcf,1,0,3a3f505a-7a50-4111-8029-5b9057fed232,3a3f505a-7a50-4111-8029-5b9057fed232,1,0,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,1,0,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,1,0,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,1,0,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,1,0,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1,0,03ab92e2-81a3-4e38-84a8-85c1d78d51e9,03ab92e2-81a3-4e38-84a8-85c1d78d51e9,1,0,ef09e296-af08-44ff-8303-4833b23a12c3,ef09e296-af08-44ff-8303-4833b23a12c3,1,0,73bf8c40-76ee-4c61-b56a-898bcd6da1ca,73bf8c40-76ee-4c61-b56a-898bcd6da1ca,1,0,434a0471-1389-4764-a901-69249e1fdc38,434a0471-1389-4764-a901-69249e1fdc38,1,0,7b6c1d9f-968e-4126-990e-fa2787ad83b2,7b6c1d9f-968e-4126-990e-fa2787ad83b2,1,0,b89108a9-8b4e-4b34-8f72-4eb502963743,b89108a9-8b4e-4b34-8f72-4eb502963743,1,0,398b93b1-620d-4942-ba44-7ea0f9cc14f0,398b93b1-620d-4942-ba44-7ea0f9cc14f0,1,0,7b06537e-d818-41b3-acc5-b6b63b543be8,7b06537e-d818-41b3-acc5-b6b63b543be8,1,0,74226c30-5f9b-4e47-b7cc-35e92139cbfa,74226c30-5f9b-4e47-b7cc-35e92139cbfa,1,0,09f812cb-770c-4f85-87f0-db35952c764e,09f812cb-770c-4f85-87f0-db35952c764e,1,0,8bbbcfd9-b6da-41f6-b543-863b12b9fb59,8bbbcfd9-b6da-41f6-b543-863b12b9fb59,1,0,36951804-70a4-45fa-9fad-1c37fd3ce7b7,36951804-70a4-45fa-9fad-1c37fd3ce7b7,1,0,6da02618-2454-48fe-b1dc-399d0d40d043,6da02618-2454-48fe-b1dc-399d0d40d043,1,0,5a080203-ecd2-4f40-ac64-c8024eda595e,5a080203-ecd2-4f40-ac64-c8024eda595e,1,0,3eabcb69-398b-43f5-bf53-c20f90bee5c4,3eabcb69-398b-43f5-bf53-c20f90bee5c4,1,0,9c33639e-529a-490f-9365-80778b54c3f7,9c33639e-529a-490f-9365-80778b54c3f7,1,0,561b97a0-9d42-4735-a606-8d5b5862689f,561b97a0-9d42-4735-a606-8d5b5862689f,1,0,10d5c0c2-301f-4477-a88f-254f99a30fa0,10d5c0c2-301f-4477-a88f-254f99a30fa0,1,0,1363523a-929e-49ac-ae39-d43acf9f0478,1363523a-929e-49ac-ae39-d43acf9f0478,1,0,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,1,0,2876c476-8280-426d-8bf9-c93beda0ddd5,2876c476-8280-426d-8bf9-c93beda0ddd5,1,0,963e0813-4f6b-4d31-b66d-77125c47ce19,963e0813-4f6b-4d31-b66d-77125c47ce19,1,0,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,1,0,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,1,0,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,1,0,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,1,0,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,1,0,d9f76f2f-2b32-4986-8987-a585f831d951,d9f76f2f-2b32-4986-8987-a585f831d951,1,0,b1a96083-1c12-43f4-ba61-3a0588fc7310,b1a96083-1c12-43f4-ba61-3a0588fc7310,1,0,2e37c7d0-b97f-4c72-821e-b2bb77fb3140,2e37c7d0-b97f-4c72-821e-b2bb77fb3140,1,0,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,1,0,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,1,0,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,1,0,ee49981d-91f6-4002-9205-b8a53e6f54e0,ee49981d-91f6-4002-9205-b8a53e6f54e0,1,0,64a74365-ca32-4b7d-af8e-695624e3dcb6,64a74365-ca32-4b7d-af8e-695624e3dcb6,1,0,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,1,0,ebedc283-5eb0-459b-b686-f8643666b8b8,ebedc283-5eb0-459b-b686-f8643666b8b8,1,0,6a6afffd-cfed-4801-8b59-34d27e46565c,6a6afffd-cfed-4801-8b59-34d27e46565c,1,0,a469b12d-4537-419c-91e0-37abc9d31505,a469b12d-4537-419c-91e0-37abc9d31505,1,0,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,1,0,82c42232-531e-403f-8599-cc21a248fa2c,82c42232-531e-403f-8599-cc21a248fa2c,1,0,9104b791-9ac4-41ba-a7f0-9e609db3b578,9104b791-9ac4-41ba-a7f0-9e609db3b578,1,0,2d3721d1-816f-4e84-9df1-863cb269d83d,2d3721d1-816f-4e84-9df1-863cb269d83d,1,0,eaa11272-8cc2-4f82-808f-e4f641748574,eaa11272-8cc2-4f82-808f-e4f641748574,1,0,9dfd78a7-74ba-4c7a-8842-4baf4ffd5e4f,9dfd78a7-74ba-4c7a-8842-4baf4ffd5e4f,1,0,7d422da3-8ec4-4bc8-94ba-88d92625d4c7,7d422da3-8ec4-4bc8-94ba-88d92625d4c7,1,0,8035e1ce-a36a-4628-8196-1f04f50e230a,8035e1ce-a36a-4628-8196-1f04f50e230a,1,0,51f08b3c-2f03-408e-89d5-53ccbaec4e74,51f08b3c-2f03-408e-89d5-53ccbaec4e74,1,0,920ebc04-3018-4948-bae2-16de8f0f0c9a,920ebc04-3018-4948-bae2-16de8f0f0c9a,1,0,4c4fc449-05a5-4223-bd28-c73d27780a9b,4c4fc449-05a5-4223-bd28-c73d27780a9b,1,0,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,1,0,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,1,0,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,1,0,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,1,0,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,1,0,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,1,0,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,1,0,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,1,0,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,1,0,f0b0608c-178f-4dea-b461-0d8f00d79d30,f0b0608c-178f-4dea-b461-0d8f00d79d30,1,0,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,1,0,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,1,0,5546b9a9-a4fe-4a2b-9492-883bcb37a210,5546b9a9-a4fe-4a2b-9492-883bcb37a210,1,0,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,1,0,275a5772-8428-497a-81ef-c919f15fcccd,275a5772-8428-497a-81ef-c919f15fcccd,1,0,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,1,0,b5278cbd-1771-4739-9013-a28682689778,b5278cbd-1771-4739-9013-a28682689778,1,0,a52f2de4-f414-4837-9b1a-6d8f282e1327,a52f2de4-f414-4837-9b1a-6d8f282e1327,1,0,d126a11e-c770-4309-941f-cbcdd5cbad5d,d126a11e-c770-4309-941f-cbcdd5cbad5d,1,0,f4d88096-bff9-416a-8f75-9143ede1213f,f4d88096-bff9-416a-8f75-9143ede1213f,1,0,804be484-09cf-45a4-bd1f-c8850067e2b2,804be484-09cf-45a4-bd1f-c8850067e2b2,1,0,f1a145ce-a199-475c-ab8a-065c11a27277,f1a145ce-a199-475c-ab8a-065c11a27277,1,0,25c97480-330c-42f2-a2a5-031062a3a683,25c97480-330c-42f2-a2a5-031062a3a683,1,0,a2fb1bf9-d29a-4bfe-95f1-10883fa019b3,a2fb1bf9-d29a-4bfe-95f1-10883fa019b3,1,0,6adc3aa8-8784-467d-8e12-b60418a5c729,6adc3aa8-8784-467d-8e12-b60418a5c729,1,0,265206ed-4d41-497e-a483-c14052134500,265206ed-4d41-497e-a483-c14052134500,1,0,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,1,0,10336352-f3a1-4bc3-bdec-1a2eef15f176,10336352-f3a1-4bc3-bdec-1a2eef15f176,1,0,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,1,0,3b7c713e-81ae-4adc-9519-99c936599ef7,3b7c713e-81ae-4adc-9519-99c936599ef7,1,0,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1,0,ecda2c4b-6411-4b47-ab59-1918bad5acdd,ecda2c4b-6411-4b47-ab59-1918bad5acdd,1,0,a9a05a66-0a1c-4e53-9d09-1abe8f45e354,a9a05a66-0a1c-4e53-9d09-1abe8f45e354,1,0,2c811ee8-f50d-4c39-82ee-0492feb1c431,2c811ee8-f50d-4c39-82ee-0492feb1c431,1,0,399f679b-f48a-4d4e-b890-5eab9e4598c3,399f679b-f48a-4d4e-b890-5eab9e4598c3,1,0,da9ca4c4-c291-4f8b-accd-bc1b123ed4f8,da9ca4c4-c291-4f8b-accd-bc1b123ed4f8,1,0,9ad1ea04-1aee-4a80-b4df-60526cdf3ad0,9ad1ea04-1aee-4a80-b4df-60526cdf3ad0,1,0,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,1,0,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,1,0,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,1,0,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,1,0,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,1,0,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,1,0,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,1,0,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,1,0,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,1,0,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,1,0,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,1,0,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,1,0,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,1,0,b5ea4aff-11be-4232-94a2-cb92801b6c49,b5ea4aff-11be-4232-94a2-cb92801b6c49,1,0,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,1,0,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,1,0,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,1,0,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,1,0,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,1,0,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,1,0,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,1,0,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,1,0,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,1,0,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,1,0,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,1,0,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,1,0,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,1,0,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,1,0,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,1,0,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,1,0,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,1,0,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,1,0,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,1,0,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,1,0,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,1,0,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,1,0,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,1,0,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,1,0,e5094d4f-ee61-4142-a97b-d96172350f65,e5094d4f-ee61-4142-a97b-d96172350f65,1,0,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,1,0,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,1,0,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,1,0,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,1,0,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,1,0,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,1,0,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,1,0,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,1,0,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,1,0,20c57e30-5856-4801-9e77-8006471d89f8,20c57e30-5856-4801-9e77-8006471d89f8,1,0,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,1,0,4a3fe393-8aea-4394-8c10-a234f1f191ad,4a3fe393-8aea-4394-8c10-a234f1f191ad,1,0,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,1,0,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,1,0,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,1,0,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,1,0,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,1,0,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,1,0,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,1,0,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,1,0,fd271670-bde6-4351-abec-eb82548c6c98,fd271670-bde6-4351-abec-eb82548c6c98,1,0,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,1,0,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,1,0,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,1,0,799b3dda-fbfc-4dea-a577-30321e64f4d5,799b3dda-fbfc-4dea-a577-30321e64f4d5,1,0,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,1,0,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,1,0,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,1,0,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,1,0,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,1,0,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,1,0,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,1,0,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,1,0,19a18193-c5d3-4e56-86c5-5a81c525e9ad,19a18193-c5d3-4e56-86c5-5a81c525e9ad,1,0,c208fcc0-d7b2-435b-963a-e18c97727f8f,c208fcc0-d7b2-435b-963a-e18c97727f8f,1,0,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,1,0,bf11f7b1-6332-4499-ba48-b94bc10ef869,bf11f7b1-6332-4499-ba48-b94bc10ef869,1,0,4de445f0-7c27-4540-a5a8-9c3ca2a13fd2,4de445f0-7c27-4540-a5a8-9c3ca2a13fd2,1,0,2977fedd-2c56-4d21-8eb1-a424e1b17cb3,2977fedd-2c56-4d21-8eb1-a424e1b17cb3,1,0,0b8a2936-07c5-4b90-80e6-5a058e546de6,0b8a2936-07c5-4b90-80e6-5a058e546de6,1,0,34524248-668e-48e5-a801-f489cd664de8,34524248-668e-48e5-a801-f489cd664de8,1,0,ae0891ae-ecd2-4072-8d2b-0556030c9dfd,ae0891ae-ecd2-4072-8d2b-0556030c9dfd,1,0,e8f36bca-738b-471c-b8d3-8a484978934a,e8f36bca-738b-471c-b8d3-8a484978934a,1,0,05c27c89-2c26-4252-842d-9aa43ba0ea2f,05c27c89-2c26-4252-842d-9aa43ba0ea2f,1,0,7c1e16c2-201d-4a3f-b0f4-9d66f5f8a68b,7c1e16c2-201d-4a3f-b0f4-9d66f5f8a68b,1,0,f092729c-6b5d-4709-8b28-15e06129731d,f092729c-6b5d-4709-8b28-15e06129731d,1,0,c03be2f7-d681-417d-975a-5c8c7b716659,c03be2f7-d681-417d-975a-5c8c7b716659,1,0,fca7af5f-bdc0-4264-be68-5e5e38545368,fca7af5f-bdc0-4264-be68-5e5e38545368,1,0,a3fc0bce-a87e-4c15-b57b-f285a694bcdf,a3fc0bce-a87e-4c15-b57b-f285a694bcdf,1,0,ae124745-edfb-11e6-4681-a8667f21fde4,ae124745-edfb-11e6-4681-a8667f21fde4,1,0,f6fcf9c2-edfb-11e6-4681-a8667f21fde4,f6fcf9c2-edfb-11e6-4681-a8667f21fde4,1,0,ec70cf10-edfb-11e6-4681-a8667f21fde4,ec70cf10-edfb-11e6-4681-a8667f21fde4,1,0,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,1,0,0b7cee9b-3870-49f5-a58e-063cf5353467,0b7cee9b-3870-49f5-a58e-063cf5353467,1,0,d392a791-af74-40c9-ab20-6ed6aeabe864,d392a791-af74-40c9-ab20-6ed6aeabe864,1,0,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,1,0,1612570d-b069-405a-9dd3-80b8175fb468,1612570d-b069-405a-9dd3-80b8175fb468,1,0,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,1,0,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,1,0,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,1,0,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,1,0,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,1,0,561ed574-617d-4a46-b32b-f022e07846c8,561ed574-617d-4a46-b32b-f022e07846c8,1,0,cba706bf-a9a7-4dda-9c5a-a26e85119396,cba706bf-a9a7-4dda-9c5a-a26e85119396,1,0,159a4eb5-00cd-426c-86e3-09cd3f569f22,159a4eb5-00cd-426c-86e3-09cd3f569f22,1,0,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,1,0,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,1,0,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,1,0,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,1,0,2ded5135-b6c3-46dd-b563-7b6fab986d23,2ded5135-b6c3-46dd-b563-7b6fab986d23,1,0,14215720-ccb3-4e5a-8345-cd42c96a3e77,14215720-ccb3-4e5a-8345-cd42c96a3e77,1,0,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,1,0,0690a5c7-bc25-4101-afa5-69c095d415c2,0690a5c7-bc25-4101-afa5-69c095d415c2,1,0,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,1,0,79013bba-a0f2-481c-a63e-095a54ee52aa,79013bba-a0f2-481c-a63e-095a54ee52aa,1,0,8523c346-f144-41b8-a702-2d588e7097c2,8523c346-f144-41b8-a702-2d588e7097c2,1,0,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,1,0,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,1,0,fa2bd6a6-bb46-4e21-8684-248578310164,fa2bd6a6-bb46-4e21-8684-248578310164,1,0,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,1,0,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,1,0,88ccac36-169d-48f8-bc68-15e3bb775b79,88ccac36-169d-48f8-bc68-15e3bb775b79,1,0,a1640988-bd60-43b3-86f1-184b9db275c6,a1640988-bd60-43b3-86f1-184b9db275c6,1,0,300a02f7-8062-4843-b11e-0321f8b40f4d,300a02f7-8062-4843-b11e-0321f8b40f4d,1,0,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,1,0,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,1,0,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,1,0,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,1,0,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,1,0,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,1,0,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,1,0,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,1,0,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,1,0,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,1,0,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,1,0,fb9c08ee-92e9-4bd9-8794-ef0f221eee99,fb9c08ee-92e9-4bd9-8794-ef0f221eee99,1,0,e4cd44e6-1255-490f-96d9-f805ac92cf67,e4cd44e6-1255-490f-96d9-f805ac92cf67,1,0,8ae9be37-cda5-4b66-8a97-5e77d2a2c75f,8ae9be37-cda5-4b66-8a97-5e77d2a2c75f,1,0,5a9011fc-c023-47fb-a999-2c6ca33a04b9,5a9011fc-c023-47fb-a999-2c6ca33a04b9,1,0,ab574fa5-0730-4456-b741-111e5ea8a896,ab574fa5-0730-4456-b741-111e5ea8a896,1,0,b8d5adf0-dc2f-4041-bc97-cb2442f00054,b8d5adf0-dc2f-4041-bc97-cb2442f00054,1,0,398199c4-4830-48e9-89c5-45c2c5a30ee6,398199c4-4830-48e9-89c5-45c2c5a30ee6,1,0,546ba3bb-4614-423f-954c-466530f42784,546ba3bb-4614-423f-954c-466530f42784,1,0,e5bc54f0-d7d0-471c-adda-a0e73e0dd3cf,e5bc54f0-d7d0-471c-adda-a0e73e0dd3cf,1,0,af447f33-ef41-4eda-96ec-5bac26fff33e,af447f33-ef41-4eda-96ec-5bac26fff33e,1,0,f0c83fc5-6e9a-4185-ab43-2b419ace7909,f0c83fc5-6e9a-4185-ab43-2b419ace7909,1,0,4bd15718-6a0e-4a86-921a-09d38ba4be4c,4bd15718-6a0e-4a86-921a-09d38ba4be4c,1,0,32586ba6-8922-4321-b134-70d1b77a16a4,32586ba6-8922-4321-b134-70d1b77a16a4,1,0,2d942a50-b239-4b8c-812a-5a634f5dcaef,2d942a50-b239-4b8c-812a-5a634f5dcaef,1,0,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,1,0,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,1,0,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,1,0,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,1,0,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,1,0,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,1,0,fc67b510-3fb4-4305-92d2-c252bc718f03,fc67b510-3fb4-4305-92d2-c252bc718f03,1,0,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,1,0,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,1,0,cf1f7915-94ad-47e7-8676-73271d0cf71e,cf1f7915-94ad-47e7-8676-73271d0cf71e,1,0,fceb6e4a-bd51-4193-a542-70d2317af669,fceb6e4a-bd51-4193-a542-70d2317af669,1,0,f9f991a6-ddf3-4953-8a1f-e6c0e1a7f4e9,f9f991a6-ddf3-4953-8a1f-e6c0e1a7f4e9,1,0,80847d57-1795-46c7-a106-926e1f43ac1e,80847d57-1795-46c7-a106-926e1f43ac1e,1,0,38685415-dc87-48b4-8cc4-f85b438f2ec2,38685415-dc87-48b4-8cc4-f85b438f2ec2,1,0,110eff8b-aeec-4ba5-b710-fefc1bd60284,110eff8b-aeec-4ba5-b710-fefc1bd60284,1,0,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,1,0,75eca481-002b-4046-898d-dfac9357611f,75eca481-002b-4046-898d-dfac9357611f,1,0,0110decc-d06e-43cf-9d01-30d412edcdd7,0110decc-d06e-43cf-9d01-30d412edcdd7,1,0,3ea32a24-d37b-4fad-937a-9d1357d649a9,3ea32a24-d37b-4fad-937a-9d1357d649a9,1,0,2856ee9a-0fea-4684-b7b8-4844773eae07,2856ee9a-0fea-4684-b7b8-4844773eae07,1,0,84e09840-8d67-416f-87a2-7f03c04180c9,84e09840-8d67-416f-87a2-7f03c04180c9,1,0,0388f22d-f91d-45c9-a8ae-900a24cbfe67,0388f22d-f91d-45c9-a8ae-900a24cbfe67,1,0,60fa2562-4914-46d6-a00a-1bb6e2803263,60fa2562-4914-46d6-a00a-1bb6e2803263,1,0,0d61a8d4-2dc8-435e-a238-416d7640576f,0d61a8d4-2dc8-435e-a238-416d7640576f,1,0,5ea899d4-e076-4a1c-838c-e369abc4705f,5ea899d4-e076-4a1c-838c-e369abc4705f,1,0,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,1,0,ab2e75f0-8da7-4b38-8f30-537424b719db,ab2e75f0-8da7-4b38-8f30-537424b719db,1,0,db344a42-61b8-4544-9aa1-8840ab8a70f0,db344a42-61b8-4544-9aa1-8840ab8a70f0,1,0,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,1,0,043bd776-5a7b-45ff-8b4a-5eed2bba0054,043bd776-5a7b-45ff-8b4a-5eed2bba0054,1,0,6a708860-e3b6-46ea-bea5-0d3e426c72f6,6a708860-e3b6-46ea-bea5-0d3e426c72f6,1,0,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,1,0,78058cd3-eb56-483c-96f5-1bf8883abc76,78058cd3-eb56-483c-96f5-1bf8883abc76,1,0,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,1,0,fae4675c-dcdc-42fc-911d-07c3c577b8b8,fae4675c-dcdc-42fc-911d-07c3c577b8b8,1,0,f1050611-4f82-411b-97f2-bcd8a5c914bf,f1050611-4f82-411b-97f2-bcd8a5c914bf,1,0,efacf22d-b474-4d49-af8b-6d3784aa5cf2,efacf22d-b474-4d49-af8b-6d3784aa5cf2,1,0,f818b937-9ac3-4a0c-ba50-26c060984f09,f818b937-9ac3-4a0c-ba50-26c060984f09,1,0,f385778d-96cb-4e09-884d-533739b393b1,f385778d-96cb-4e09-884d-533739b393b1,1,0,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,1,0,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,1,0,f64089ee-72dd-4fcf-8926-31e95c6fcf77,f64089ee-72dd-4fcf-8926-31e95c6fcf77,1,0,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,1,0,e1e151cc-7b8a-4125-804f-c902a522ed81,e1e151cc-7b8a-4125-804f-c902a522ed81,1,0,f475494e-fe94-4902-b2da-3ade01eba5bb,f475494e-fe94-4902-b2da-3ade01eba5bb,1,0,fbb814b2-cb2f-474d-9c96-5571cef3030e,fbb814b2-cb2f-474d-9c96-5571cef3030e,1,0,7bf36370-3761-4fd5-bea5-90fa142a9d57,7bf36370-3761-4fd5-bea5-90fa142a9d57,1,0,3b81427f-cf64-4a5e-adb3-5415d515fecd,3b81427f-cf64-4a5e-adb3-5415d515fecd,1,0,e9f2b604-7181-476d-8b34-3a544cbb353d,e9f2b604-7181-476d-8b34-3a544cbb353d,1,0,73773919-d01c-41dd-bb31-9c66648ac0ff,73773919-d01c-41dd-bb31-9c66648ac0ff,1,0,5d1afad0-3d7e-4214-b52a-72c184490084,5d1afad0-3d7e-4214-b52a-72c184490084,1,0,5f7901a1-f992-42fa-9ddb-d63574da3b56,5f7901a1-f992-42fa-9ddb-d63574da3b56,1,0,26abd45a-12b3-4312-88fb-53c90a6e6679,26abd45a-12b3-4312-88fb-53c90a6e6679,1,0,1541ad74-3e73-4699-bccf-c13313fbedfe,1541ad74-3e73-4699-bccf-c13313fbedfe,1,0,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1,0,1f03420b-0480-451a-9263-8431ff0b0c73,1f03420b-0480-451a-9263-8431ff0b0c73,1,0,2bf547e4-d295-4f69-9dbf-9a9d91b2db98,2bf547e4-d295-4f69-9dbf-9a9d91b2db98,1,0,46506a80-495e-4f06-a191-54ccf5d6cc3f,46506a80-495e-4f06-a191-54ccf5d6cc3f,1,0,b9788ea3-b910-4b5b-96c3-921d62745b6e,b9788ea3-b910-4b5b-96c3-921d62745b6e,1,0,0646de72-49fd-466d-af0f-843bfa527049,0646de72-49fd-466d-af0f-843bfa527049,1,0,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,1,0,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,1,0,be2b4dba-e77e-4947-bd2f-0710b357ca2a,be2b4dba-e77e-4947-bd2f-0710b357ca2a,1,0,df750e63-50fc-4085-b8b8-f05e4751ff51,df750e63-50fc-4085-b8b8-f05e4751ff51,1,0,86182e9a-89e0-40d7-b2d7-fcd92ee42942,86182e9a-89e0-40d7-b2d7-fcd92ee42942,1,0,091cb921-c7e3-4a5f-97b7-34e625159b9c,091cb921-c7e3-4a5f-97b7-34e625159b9c,1,0,f6118cdd-1dcd-464e-a49d-e95c69466750,f6118cdd-1dcd-464e-a49d-e95c69466750,1,0,39932897-959b-41a6-94ad-61426abfdbd9,39932897-959b-41a6-94ad-61426abfdbd9,1,0,c56ea6f3-1032-4b7a-a20e-e912196da1cd,c56ea6f3-1032-4b7a-a20e-e912196da1cd,1,0,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,1,0,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,1,0,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,1,0,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,1,0,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,1,0,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,1,0,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,1,0,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,1,0,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,1,0,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,1,0,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,1,0,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,1,0,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,1,0,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,1,0,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,1,0,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,1,0,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,1,0,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,1,0,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,1,0,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,1,0,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,1,0,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,1,0,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,1,0,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,1,0,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,1,0,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,1,0,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,1,0,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,1,0,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,1,0,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,1,0,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,1,0,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,1,0,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,1,0,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,1,0,25451a36-c842-44a5-94f4-7e540050b825,25451a36-c842-44a5-94f4-7e540050b825,1,0,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,1,0,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,1,0,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,1,0,e1e9862e-c87b-400f-bca1-b1380cb98ddc,e1e9862e-c87b-400f-bca1-b1380cb98ddc,1,0,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,1,0,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,1,0,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,1,0,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,1,0,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,1,0,0db78226-37d0-4016-b4c9-5134af1aabc7,0db78226-37d0-4016-b4c9-5134af1aabc7,1,0,8d6b4d23-a260-4352-9975-c13ce3e05220,8d6b4d23-a260-4352-9975-c13ce3e05220,1,0,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,1,0,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,1,0,6f5ac40b-ea22-47cf-acf2-614406669a72,6f5ac40b-ea22-47cf-acf2-614406669a72,1,0,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,1,0,488d2644-6fef-488a-af38-40f59c0e0d8c,488d2644-6fef-488a-af38-40f59c0e0d8c,1,0,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,1,0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,1,0,f1efef30-8651-4728-becd-abe3f9026a43,f1efef30-8651-4728-becd-abe3f9026a43,1,0,c2612e22-4f0d-4713-b4eb-decd9780d088,c2612e22-4f0d-4713-b4eb-decd9780d088,1,0,11b1410f-8e14-4b2f-8890-177f4875020e,11b1410f-8e14-4b2f-8890-177f4875020e,1,0,2276b2b0-1705-4014-956f-5087e9dd5c1e,2276b2b0-1705-4014-956f-5087e9dd5c1e,1,0,f72b9d4b-7196-45a3-9349-e32fc91e875a,f72b9d4b-7196-45a3-9349-e32fc91e875a,1,0,6c509dcc-4529-4ac3-86fe-26f807991b1c,6c509dcc-4529-4ac3-86fe-26f807991b1c,1,0,529c8887-f691-4ba8-aeaf-937858d61c30,529c8887-f691-4ba8-aeaf-937858d61c30,1,0,43435d30-8c25-4757-9a29-9173415959ff,43435d30-8c25-4757-9a29-9173415959ff,1,0,4aef5419-7cf5-4443-b773-9273c983844f,4aef5419-7cf5-4443-b773-9273c983844f,1,0,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,1,0,2bb5c23c-ad87-4b66-b766-d2e3f82715bd,2bb5c23c-ad87-4b66-b766-d2e3f82715bd,1,0,d01871bb-492e-4ab8-ada9-e9d8ec1adbce,d01871bb-492e-4ab8-ada9-e9d8ec1adbce,1,0,dd931c85-8c19-42a8-a39e-7af0c5bd346c,dd931c85-8c19-42a8-a39e-7af0c5bd346c,1,0,4fa153eb-1efb-43e5-ac09-e5431d4800df,4fa153eb-1efb-43e5-ac09-e5431d4800df,1,0,ada760f3-6a9f-4b81-afc1-98eb164af747,ada760f3-6a9f-4b81-afc1-98eb164af747,1,0,262dea64-4ccd-4b97-ac7e-ec1dbdd9ac98,262dea64-4ccd-4b97-ac7e-ec1dbdd9ac98,1,0,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,1,0,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,1,0,a8e14d2e-911d-4096-9027-deb7a08838e0,a8e14d2e-911d-4096-9027-deb7a08838e0,1,0,c51d8ae2-66fe-4052-8ee4-980855b1f90c,c51d8ae2-66fe-4052-8ee4-980855b1f90c,1,0,27610803-846f-40bd-b817-f73708f1fdb7,27610803-846f-40bd-b817-f73708f1fdb7,1,0,4e2a3873-0317-44be-8dbb-e4cefc0361a8,4e2a3873-0317-44be-8dbb-e4cefc0361a8,1,0,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,1,0,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,1,0,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,1,0,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,1,0,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,1,0,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,1,0,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,1,0,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,1,0,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,1,0,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,1,0,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,1,0,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,1,0,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,1,0,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,1,0,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,1,0,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,1,0,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,1,0,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,1,0,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,1,0,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,1,0,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,1,0,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,1,0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,1,0,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,1,0,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,1,0,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,1,0,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,1,0,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,1,0,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,1,0,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,1,0,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,1,0,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,1,0,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,1,0,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,1,0,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,1,0,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,1,0,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1,0,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,1,0,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,1,0,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,1,0,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,1,0,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,1,0,5c68c57a-31d6-4ae9-855f-3fbc57922e39,5c68c57a-31d6-4ae9-855f-3fbc57922e39,1,0,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,1,0,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,1,0,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,1,0,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,1,0,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,1,0,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,1,0,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,1,0,911f8810-e96e-4f02-9377-47e49919f87e,911f8810-e96e-4f02-9377-47e49919f87e,1,0,cde46d6d-9f8a-45b6-98a7-9411030ccd72,cde46d6d-9f8a-45b6-98a7-9411030ccd72,1,0,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,1,0,224b9439-4b30-4b64-8edf-e7718ee90a7d,224b9439-4b30-4b64-8edf-e7718ee90a7d,1,0,74dc2374-daf1-4a8a-ba10-d3aced96af3b,74dc2374-daf1-4a8a-ba10-d3aced96af3b,1,0,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,1,0,e28e953f-93b3-4d4d-9ee4-c56df26037eb,e28e953f-93b3-4d4d-9ee4-c56df26037eb,1,0,578e0fd2-997c-437a-befc-33d128097a7e,578e0fd2-997c-437a-befc-33d128097a7e,1,0,14089231-31a8-4471-b85b-064836794ff3,14089231-31a8-4471-b85b-064836794ff3,1,0,014de276-fb2f-4deb-873f-475729be0f66,014de276-fb2f-4deb-873f-475729be0f66,1,0,40a60ff7-96ca-485b-a2d9-640a208a7de6,40a60ff7-96ca-485b-a2d9-640a208a7de6,1,0,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,1,0,2c2526c1-bdf8-4115-bdff-3e79d28321cb,2c2526c1-bdf8-4115-bdff-3e79d28321cb,1,0,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,1,0,95ab774f-27fa-4bd4-a422-0f997f632679,95ab774f-27fa-4bd4-a422-0f997f632679,1,0,ee3ad891-b7d6-439d-892b-de2f3399d147,ee3ad891-b7d6-439d-892b-de2f3399d147,1,0,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,1,0,a2ae0338-ed11-422a-8442-f6c4002ddf0d,a2ae0338-ed11-422a-8442-f6c4002ddf0d,1,0,eb59c9c3-6043-401c-87cc-ba7620139d6a,eb59c9c3-6043-401c-87cc-ba7620139d6a,1,0,2b5ce871-8630-4f2f-9ccb-d9f863886420,2b5ce871-8630-4f2f-9ccb-d9f863886420,1,0,86ae353e-7eed-434c-b4ab-cede36e462bc,86ae353e-7eed-434c-b4ab-cede36e462bc,1,0,18e65717-738b-4d39-9c85-676bca15e6b7,18e65717-738b-4d39-9c85-676bca15e6b7,1,0,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,1,0,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,1,0,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,1,0,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,1,0,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,1,0,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,1,0,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,1,0,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,1,0,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,1,0,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,1,0,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,1,0,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,1,0,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,1,0,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,1,0,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,1,0,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,1,0,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,1,0,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,1,0,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,1,0,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,1,0,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,1,0,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,1,0,feb5f490-e791-11e6-508c-a8667f21fde4,feb5f490-e791-11e6-508c-a8667f21fde4,1,0,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,1,0,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,1,0,6962f838-e792-11e6-508c-a8667f21fde4,6962f838-e792-11e6-508c-a8667f21fde4,1,0,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,1,0,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,1,0,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,1,0,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,1,0,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,1,0,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,1,0,4f2b6bf8-e792-11e6-508c-a8667f21fde4,4f2b6bf8-e792-11e6-508c-a8667f21fde4,1,0,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,1,0,a5623e87-3102-4521-b4ab-c41bf2403a1a,a5623e87-3102-4521-b4ab-c41bf2403a1a,1,0,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,1,0,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,1,0,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,1,0,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,1,0,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,1,0,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,1,0,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,1,0,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,1,0,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,1,0,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,1,0,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,1,0,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,1,0,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,1,0,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,1,0,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,1,0,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,1,0,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,1,0,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,1,0,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,1,0,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,1,0,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,1,0,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,1,0,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,1,0,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,1,0,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,1,0,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,1,0,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,1,0,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,1,0,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,1,0,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,1,0,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,1,0,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,1,0,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,1,0,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,1,0,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,1,0,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,1,0,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,1,0,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,1,0,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,1,0,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,1,0,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,1,0,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,1,0,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,1,0,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,1,0,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,1,0,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,1,0,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,1,0,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,1,0,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,1,0,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,1,0,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,1,0,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,1,0,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,1,0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,1,0,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,1,0,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,1,0,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,1,0,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,1,0,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,1,0,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,1,0,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,1,0,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,1,0,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,1,0,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,1,0,1fc05949-c1ba-4363-8353-6902bc041021,1fc05949-c1ba-4363-8353-6902bc041021,1,0,d6e61d59-fe83-4a9e-aa15-e072a39fd8fd,d6e61d59-fe83-4a9e-aa15-e072a39fd8fd,1,0,614fc08c-78b6-4d49-9488-05fcf9b76d58,614fc08c-78b6-4d49-9488-05fcf9b76d58,1,0,d983cae8-edbb-4f26-9c0a-2f701cb11046,d983cae8-edbb-4f26-9c0a-2f701cb11046,1,0,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,1,0,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,1,0,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,1,0,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,1,0,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,1,0,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,1,0,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,1,0,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,1,0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1,0,b50f3157-3c3a-4553-a16a-7fcd660e2824,b50f3157-3c3a-4553-a16a-7fcd660e2824,1,0,19858faf-2bc5-4cfb-b258-cb101ab66e87,19858faf-2bc5-4cfb-b258-cb101ab66e87,1,0,f779f4a1-1fab-46d4-8043-ac25c247d361,f779f4a1-1fab-46d4-8043-ac25c247d361,1,0,308358bc-773a-43fa-adff-dcc5884a2bd4,308358bc-773a-43fa-adff-dcc5884a2bd4,1,0,ed541a1c-a842-40a9-b357-612db71ec32c,ed541a1c-a842-40a9-b357-612db71ec32c,1,0,b0e37495-7d9e-41d0-8225-652f9ac328cf,b0e37495-7d9e-41d0-8225-652f9ac328cf,1,0,3bd2e1c8-9ef3-449b-acf6-397b90669c49,3bd2e1c8-9ef3-449b-acf6-397b90669c49,1,0,cb334191-2ff3-439e-bdaf-4b8fe6561c3b,cb334191-2ff3-439e-bdaf-4b8fe6561c3b,1,0,f9865a2a-50e3-4f9c-a509-319be62dc468,f9865a2a-50e3-4f9c-a509-319be62dc468,1,0,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,1,0,766d8852-3bb4-4a6c-81c0-911722af4e8e,766d8852-3bb4-4a6c-81c0-911722af4e8e,1,0,f6dae699-06eb-41ef-878b-3fdfe1b1f213,f6dae699-06eb-41ef-878b-3fdfe1b1f213,1,0,fe6de86a-54c9-4ae2-9f17-cfce38b7b560,fe6de86a-54c9-4ae2-9f17-cfce38b7b560,1,0,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,1,0,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,1,0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,1,0,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,1,0,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,1,0,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,1,0,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,1,0,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,1,0,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,1,0,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,1,0,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,1,0,56d97df6-9c8b-4fc5-a7a6-52107d38dcd5,56d97df6-9c8b-4fc5-a7a6-52107d38dcd5,1,0,a0be938b-139e-41bd-b067-f5241ff68c90,a0be938b-139e-41bd-b067-f5241ff68c90,1,0,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,1,0,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,1,0,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,1,0,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1,0,8064eb3a-d56c-4517-9db0-b7300149c7c4,8064eb3a-d56c-4517-9db0-b7300149c7c4,1,0,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,1,0,b1c3a6c1-5245-4a65-8a45-13948be6f6a1,b1c3a6c1-5245-4a65-8a45-13948be6f6a1,1,0,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,1,0,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,1,0,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,1,0,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,1,0,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,1,0,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,1,0,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,1,0,8adebe50-a946-40c2-9258-b17efe787e0e,8adebe50-a946-40c2-9258-b17efe787e0e,1,0,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,1,0,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,1,0,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,1,0,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,1,0,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,1,0,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,1,0,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1,0,d6b72e00-018a-4fdc-b6a4-06dcecf89809,d6b72e00-018a-4fdc-b6a4-06dcecf89809,1,0,9f816562-57f0-473f-8c85-14f7521ffd7f,9f816562-57f0-473f-8c85-14f7521ffd7f,1,0,917b0acc-88fe-4afc-b19b-6da69e060393,917b0acc-88fe-4afc-b19b-6da69e060393,1,0,a091b76e-8ba4-4534-bbb0-9990e69b8603,a091b76e-8ba4-4534-bbb0-9990e69b8603,1,0,867ee5d2-7566-4052-a311-b56e7e46b90d,867ee5d2-7566-4052-a311-b56e7e46b90d,1,0,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,1,0,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,1,0,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,1,0,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,1,0,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,1,0,64e702e9-8934-4356-a1b2-be0e8b390630,64e702e9-8934-4356-a1b2-be0e8b390630,1,0,74880ac4-bdd3-48e6-82a0-a2103da42723,74880ac4-bdd3-48e6-82a0-a2103da42723,1,0,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,1,0,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,1,0,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,1,0,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,1,0,ddc6761c-a32a-41e1-b110-fdc39ad440d3,ddc6761c-a32a-41e1-b110-fdc39ad440d3,1,0,0b322ee2-b018-4d00-8f05-62ee16e519ff,0b322ee2-b018-4d00-8f05-62ee16e519ff,1,0,0866e282-055a-49bb-9aa5-b1af7c74c344,0866e282-055a-49bb-9aa5-b1af7c74c344,1,0,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,1,0,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,1,0,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,1,0,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,1,0,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,1,0,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,1,0,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,1,0,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,1,0,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,1,0,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,1,0,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,1,0,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,1,0,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,1,0,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,1,0,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,1,0,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,1,0,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,1,0,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,1,0,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,1,0,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,1,0,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,1,0,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,1,0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,1,0,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,1,0,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,1,0,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,1,0,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,1,0,8c576405-29c1-46b1-ab2e-40e52c21cab0,8c576405-29c1-46b1-ab2e-40e52c21cab0,1,0,b33a89da-8589-4902-83fa-6545e5fce23e,b33a89da-8589-4902-83fa-6545e5fce23e,1,0,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,1,0,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,1,0,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,1,0,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,1,0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,1,0,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,1,0,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,1,0,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,1,0,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,1,0,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,1,0,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,1,0,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,1,0,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,1,0,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,1,0,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,1,0,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,1,0,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,1,0,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,1,0,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,1,0,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,1,0,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,1,0,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,1,0,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,1,0,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,1,0,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,1,0,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,1,0,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,1,0,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,1,0,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,1,0,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,1,0,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,1,0,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,1,0,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,1,0,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,1,0,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file +{6,1,1,351f27c0-eac4-4592-a52e-0e7f80c344f7,1,88712820-52be-44e4-93cf-f8ef39d63834,"3.0.2.150","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5986,1,0,9ab95268-bfad-4e03-8858-01e4a184e982,9ab95268-bfad-4e03-8858-01e4a184e982,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,c27472ee-879a-4746-9d21-122738ec80b7,c27472ee-879a-4746-9d21-122738ec80b7,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,1,0,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,1,0,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,1,0,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,1,0,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,1,0,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,1,0,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,1,0,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,1,0,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,1,0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,1,0,e15c3525-3453-4b62-834e-7c69f9efea51,e15c3525-3453-4b62-834e-7c69f9efea51,1,0,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,1,0,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,1,0,ad73f3a3-1dad-4920-af41-bda2b947a2f7,ad73f3a3-1dad-4920-af41-bda2b947a2f7,1,0,98b67b5a-3550-4a64-9e07-07fcc9154c73,98b67b5a-3550-4a64-9e07-07fcc9154c73,1,0,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,1,0,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,1,0,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,1,0,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,1,0,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,1,0,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,1,0,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,1,0,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,1,0,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,1,0,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,1,0,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,1,0,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,1,0,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,1,0,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,1,0,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,1,0,9eea8645-1ba7-4faf-9c29-868bf99964dd,9eea8645-1ba7-4faf-9c29-868bf99964dd,1,0,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,1,0,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,1,0,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,1,0,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,1,0,d5a5f53b-9cd5-4036-a379-31680cec3c24,d5a5f53b-9cd5-4036-a379-31680cec3c24,1,0,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,1,0,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,1,0,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,1,0,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,1,0,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,1,0,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,1,0,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,1,0,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,1,0,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,1,0,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,1,0,0da019ca-1fc7-4aff-8998-3ddcccf10872,0da019ca-1fc7-4aff-8998-3ddcccf10872,1,0,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,1,0,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,1,0,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,1,0,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,1,0,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,1,0,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,1,0,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,1,0,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,1,0,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,6b29b4b3-df0a-42f7-b89f-809ffbdacf02,1,0,43d8dd53-df3e-407e-a3c1-5b893cc1976c,43d8dd53-df3e-407e-a3c1-5b893cc1976c,1,0,61e246f4-fe19-4377-8f69-fd1cb90e3f88,61e246f4-fe19-4377-8f69-fd1cb90e3f88,1,0,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,1,0,5a88f624-7b7e-43fe-8bc4-ae85d832a855,5a88f624-7b7e-43fe-8bc4-ae85d832a855,1,0,42e39ef7-268f-4053-b4e5-4bceab17d3e4,42e39ef7-268f-4053-b4e5-4bceab17d3e4,1,0,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,1,0,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,1,0,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,1,0,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,1,0,fce03f58-7f68-4d7c-a999-687667c1f03d,fce03f58-7f68-4d7c-a999-687667c1f03d,1,0,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,1,0,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,1,0,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,1,0,7cab0151-f86e-4ada-9ec6-e602749e34fc,7cab0151-f86e-4ada-9ec6-e602749e34fc,1,0,d9be359f-c5cb-4f3e-9ccd-61f38c6bbb26,d9be359f-c5cb-4f3e-9ccd-61f38c6bbb26,1,0,15b5979c-755b-480e-b00a-dcc95f62dfeb,15b5979c-755b-480e-b00a-dcc95f62dfeb,1,0,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,1,0,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,1,0,9200527c-b6b9-4962-9440-10449583e1e3,9200527c-b6b9-4962-9440-10449583e1e3,1,0,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,1,0,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,1,0,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,1,0,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,1,0,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,1,0,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,1,0,0da8a402-ea0f-488a-a087-77990e85a643,0da8a402-ea0f-488a-a087-77990e85a643,1,0,5e7ea635-f307-43cb-9aa7-2c99997b3c2d,5e7ea635-f307-43cb-9aa7-2c99997b3c2d,1,0,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,1,0,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,1,0,8b4614aa-c769-49f4-a281-a0ffb101abf1,8b4614aa-c769-49f4-a281-a0ffb101abf1,1,0,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,1,0,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,1,0,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,1,0,4c3a39e3-40ee-423b-91f0-14b60e045b40,4c3a39e3-40ee-423b-91f0-14b60e045b40,1,0,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,1,0,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,1,0,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,1,0,a54f2d41-a05e-4878-80c6-81ca2899fa4c,a54f2d41-a05e-4878-80c6-81ca2899fa4c,1,0,23a898d9-5bcb-4744-ab6c-97b17dc98f20,23a898d9-5bcb-4744-ab6c-97b17dc98f20,1,0,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,1,0,f8f56806-ed7e-4059-a0c8-940538c14c98,f8f56806-ed7e-4059-a0c8-940538c14c98,1,0,9ff9f92b-c509-48da-82ce-15b524a895d6,9ff9f92b-c509-48da-82ce-15b524a895d6,1,0,c8bf96c8-f359-4940-8e87-3d190371d6d3,c8bf96c8-f359-4940-8e87-3d190371d6d3,1,0,477f0b81-0eb1-4de1-8cb5-38f1e0823947,477f0b81-0eb1-4de1-8cb5-38f1e0823947,1,0,d914eaa9-ce85-4df7-a545-2d411ef915b0,d914eaa9-ce85-4df7-a545-2d411ef915b0,1,0,41881344-82b7-4904-9ab8-0207d9bcd0a9,41881344-82b7-4904-9ab8-0207d9bcd0a9,1,0,ef4d648f-4cac-4df9-9880-2aa13c422d10,ef4d648f-4cac-4df9-9880-2aa13c422d10,1,0,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,1,0,7185a8f8-48c4-43a9-b31f-102302b8f152,7185a8f8-48c4-43a9-b31f-102302b8f152,1,0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,1,0,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,1,0,c573a29f-4c39-402d-8af4-e0fff80877f8,c573a29f-4c39-402d-8af4-e0fff80877f8,1,0,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,1,0,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,1,0,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,1,0,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,1,0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,1,0,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,1,0,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,1,0,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,1,0,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,1,0,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,1,0,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,1,0,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,1,0,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,1,0,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,1,0,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,1,0,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,1,0,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,1,0,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,1,0,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,1,0,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,1,0,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,1,0,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,1,0,7f7598e5-ca54-487e-b95c-b18d330b034c,7f7598e5-ca54-487e-b95c-b18d330b034c,1,0,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,1,0,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,1,0,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,1,0,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,1,0,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,1,0,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,1,0,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,1,0,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,1,0,64e03321-33a4-424d-a101-90f1e0da4c2e,64e03321-33a4-424d-a101-90f1e0da4c2e,1,0,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,1,0,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,1,0,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,1,0,a1d80053-ef03-4c00-9fc9-266e61aeaffb,a1d80053-ef03-4c00-9fc9-266e61aeaffb,1,0,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,1,0,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,1,0,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,1,0,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,1,0,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,1,0,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,1,0,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,1,0,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,1,0,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,1,0,691f9902-6b95-4579-a3d9-3b2b5b548776,691f9902-6b95-4579-a3d9-3b2b5b548776,1,0,c7a8a88f-040a-47a6-8c93-7f3f01544760,c7a8a88f-040a-47a6-8c93-7f3f01544760,1,0,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,1,0,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,1,0,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,1,0,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,1,0,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,1,0,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,1,0,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,1,0,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,1,0,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,1,0,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,1,0,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,1,0,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,1,0,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,1,0,82b05859-4c4d-4d5a-a620-cc6aab10f527,82b05859-4c4d-4d5a-a620-cc6aab10f527,1,0,a3131bf3-88b1-431c-a01c-be6e26396f91,a3131bf3-88b1-431c-a01c-be6e26396f91,1,0,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,1,0,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,1,0,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1,0,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,1,0,2a12ce95-3214-4bd2-a0e6-c2af41875821,2a12ce95-3214-4bd2-a0e6-c2af41875821,1,0,bf05548c-babf-402b-b698-9a62e7c69add,bf05548c-babf-402b-b698-9a62e7c69add,1,0,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,1,0,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,1,0,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,1,0,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,1,0,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,1,0,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,1,0,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,1,0,3ee058a9-aff5-46f0-8928-8a417e7800d4,3ee058a9-aff5-46f0-8928-8a417e7800d4,1,0,c9a03f19-42bb-4e07-8ce8-1b954e431ada,c9a03f19-42bb-4e07-8ce8-1b954e431ada,1,0,ed4edc6f-048a-40d5-8f61-989895c95cf3,ed4edc6f-048a-40d5-8f61-989895c95cf3,1,0,73cc5fea-597f-4490-9c62-b175fdc38fd3,73cc5fea-597f-4490-9c62-b175fdc38fd3,1,0,c2049ace-3095-4dd7-9cc0-7721118451ad,c2049ace-3095-4dd7-9cc0-7721118451ad,1,0,9ea7a191-38bb-40cc-8025-d34a5ed17c7c,9ea7a191-38bb-40cc-8025-d34a5ed17c7c,1,0,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,1,0,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,1,0,2465986e-7519-4638-9f62-5f692bebeeac,2465986e-7519-4638-9f62-5f692bebeeac,1,0,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,1,0,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,1,0,022f99dd-e1b7-42a7-8141-a8c2e8628901,022f99dd-e1b7-42a7-8141-a8c2e8628901,1,0,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,1,0,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,1,0,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,1,0,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,1,0,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,1,0,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,1,0,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,1,0,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,1,0,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,1,0,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,1,0,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,1,0,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,1,0,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,1,0,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,1,0,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,1,0,db6679c4-a647-471a-9f90-40248eb18db9,db6679c4-a647-471a-9f90-40248eb18db9,1,0,2997e4da-d831-48e4-96e2-c29f9d077302,2997e4da-d831-48e4-96e2-c29f9d077302,1,0,30f59002-a23d-4eff-b84f-f280f11b220e,30f59002-a23d-4eff-b84f-f280f11b220e,1,0,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,1,0,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,1,0,14583452-805e-423d-be9a-e04683c7c46f,14583452-805e-423d-be9a-e04683c7c46f,1,0,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,1,0,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,1,0,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,1,0,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,1,0,b1e837ff-0edd-4525-b2e2-92cc7990e00e,b1e837ff-0edd-4525-b2e2-92cc7990e00e,1,0,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,1,0,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,1,0,cafbea88-86f0-4a44-98f4-70d1837da452,cafbea88-86f0-4a44-98f4-70d1837da452,1,0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,1,0,ceb286e9-4e7c-49fa-a695-424073e0dffc,ceb286e9-4e7c-49fa-a695-424073e0dffc,1,0,727689c3-c0d8-496f-a47b-4f3243ad8974,727689c3-c0d8-496f-a47b-4f3243ad8974,1,0,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,1,0,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,1,0,2522fce4-d121-482b-a39d-0c1a842d315e,2522fce4-d121-482b-a39d-0c1a842d315e,1,0,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,1,0,4bad7c64-131a-42cb-9be7-d61f14f456d0,4bad7c64-131a-42cb-9be7-d61f14f456d0,1,0,d46e141b-7a10-4d65-971f-3a35f2114017,d46e141b-7a10-4d65-971f-3a35f2114017,1,0,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,1,0,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,1,0,ba59393c-c499-4999-91d4-b9e34d94db0e,ba59393c-c499-4999-91d4-b9e34d94db0e,1,0,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,1,0,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1,0,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,1,0,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,1,0,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,1,0,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,1,0,772e7011-0019-4edc-b673-b7151cf4fa6c,772e7011-0019-4edc-b673-b7151cf4fa6c,1,0,21ac47fa-12c2-43e2-9b57-afdf521d3485,21ac47fa-12c2-43e2-9b57-afdf521d3485,1,0,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,1,0,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,1,0,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,1,0,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,1,0,8d1c44d7-52f2-4089-9d77-2f03bf051455,8d1c44d7-52f2-4089-9d77-2f03bf051455,1,0,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,1,0,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,1,0,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,1,0,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,1,0,8e87da88-9fa8-4dd8-b904-622b763239f4,8e87da88-9fa8-4dd8-b904-622b763239f4,1,0,529cc5b5-835f-4e70-9232-a9649fdc7ae5,529cc5b5-835f-4e70-9232-a9649fdc7ae5,1,0,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,1,0,4875a235-bcc8-47eb-83e3-a66f0f690b97,4875a235-bcc8-47eb-83e3-a66f0f690b97,1,0,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,1,0,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,1,0,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,1,0,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,1,0,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,1,0,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,1,0,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,1,0,330a176f-5b61-41f5-84bb-b99a9439c2a0,330a176f-5b61-41f5-84bb-b99a9439c2a0,1,0,d1ba8620-c0c9-4281-afa6-9c9962c338d3,d1ba8620-c0c9-4281-afa6-9c9962c338d3,1,0,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,1,0,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,1,0,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,4bdc1a18-f184-4f95-bda4-8f5c4b7c3aa1,1,0,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,1,0,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,1,0,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,1,0,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,1,0,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,1,0,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,1,0,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,1,0,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,1,0,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,1,0,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,1,0,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,1,0,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,1,0,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,1,0,4b07cdb0-c32e-4751-b317-bee62b43f128,4b07cdb0-c32e-4751-b317-bee62b43f128,1,0,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,1,0,62ef3558-5ad3-44ab-8578-1acbbfa54135,62ef3558-5ad3-44ab-8578-1acbbfa54135,1,0,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,1,0,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,1,0,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,1,0,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,1,0,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,1,0,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,1,0,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,1,0,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,1,0,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,1,0,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,1,0,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,1,0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1,0,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,1,0,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,1,0,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,1,0,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,1,0,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,1,0,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,1,0,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,1,0,2cea7641-6f1d-4bc7-9d38-8d99f196e0f5,2cea7641-6f1d-4bc7-9d38-8d99f196e0f5,1,0,0093680b-c8bc-472d-8b0d-2e6565fc6c22,0093680b-c8bc-472d-8b0d-2e6565fc6c22,1,0,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,7fa6a20a-26e2-41ad-be66-a43b50d0bbcd,1,0,5f4456d6-ff0c-425e-9603-c099492d7a6f,5f4456d6-ff0c-425e-9603-c099492d7a6f,1,0,af7c417e-5c10-4146-bde1-40db86c5806f,af7c417e-5c10-4146-bde1-40db86c5806f,1,0,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,1,0,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,1,0,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,1,0,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,1,0,6f21c34c-26aa-493d-aa08-2d4366b4064a,6f21c34c-26aa-493d-aa08-2d4366b4064a,1,0,0f55650a-2422-42a9-8258-61df4c17f1ef,0f55650a-2422-42a9-8258-61df4c17f1ef,1,0,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,2ef4ea1d-fd86-4ef3-a7e0-73abba89474d,1,0,3eaece9d-c9be-4b0b-a6f6-a3932274b806,3eaece9d-c9be-4b0b-a6f6-a3932274b806,1,0,5d9427ec-981d-4fb5-878b-8dba0d3a5536,5d9427ec-981d-4fb5-878b-8dba0d3a5536,1,0,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,c5dd6184-96e5-4abc-8c1e-5270e6547ee5,1,0,a0047712-5769-495d-97af-20d06751a5b4,a0047712-5769-495d-97af-20d06751a5b4,1,0,e729c3c6-16e5-405b-99b1-a88022300c6d,e729c3c6-16e5-405b-99b1-a88022300c6d,1,0,9c089520-8233-42f6-8eee-9839ac708c6f,9c089520-8233-42f6-8eee-9839ac708c6f,1,0,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,24f2cfc7-6dc0-400c-8eb2-106ca2ea7034,1,0,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,5f3ffa44-49be-4da5-ab2a-a35c9bd76dee,1,0,89055896-49dd-4cfd-ab78-8ac3698e12d5,89055896-49dd-4cfd-ab78-8ac3698e12d5,1,0,277ca641-e869-4fcd-8a79-54c451efbbdd,277ca641-e869-4fcd-8a79-54c451efbbdd,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,1220ce92-b964-4fb8-9db0-b4c8c6bdbdf7,1220ce92-b964-4fb8-9db0-b4c8c6bdbdf7,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,9883862f-c0eb-41fe-9374-05c6d72878bc,9883862f-c0eb-41fe-9374-05c6d72878bc,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,cafc6b5b-a76a-4b1b-9592-ba440f7bf34f,cafc6b5b-a76a-4b1b-9592-ba440f7bf34f,1,0,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,1,0,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,1,0,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,1,0,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,1,0,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,1,0,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1,0,1328947f-91c3-43f4-a11e-f34893d987b3,1328947f-91c3-43f4-a11e-f34893d987b3,1,0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,1,0,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,1,0,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,1,0,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,1,0,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,1,0,aa8c4a71-3276-4b83-8be2-3528129e58b3,aa8c4a71-3276-4b83-8be2-3528129e58b3,1,0,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,1,0,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,1,0,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,1,0,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,1,0,53ee3eb6-d2d1-4fb3-8a78-1fa4543850a1,53ee3eb6-d2d1-4fb3-8a78-1fa4543850a1,1,0,0072986b-0463-4a39-9851-f9adeda99716,0072986b-0463-4a39-9851-f9adeda99716,1,0,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,1,0,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,1,0,0d4a26fb-7176-43f2-8767-d3e227c7306a,0d4a26fb-7176-43f2-8767-d3e227c7306a,1,0,933cbafc-5667-4a91-8b1d-dca3d7662522,933cbafc-5667-4a91-8b1d-dca3d7662522,1,0,59acaca9-ed29-4927-bee6-287c91934690,59acaca9-ed29-4927-bee6-287c91934690,1,0,d7e4795a-3431-4f7d-9699-4241611adcf0,d7e4795a-3431-4f7d-9699-4241611adcf0,1,0,ea0a498a-a1cb-4f28-88cb-0bc62971172b,ea0a498a-a1cb-4f28-88cb-0bc62971172b,1,0,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,1,0,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,1,0,b6e98aee-4936-491d-8c67-8490e1af2e34,b6e98aee-4936-491d-8c67-8490e1af2e34,1,0,0732ab1c-b49a-49ed-8667-65f4427cc301,0732ab1c-b49a-49ed-8667-65f4427cc301,1,0,b292eb46-df87-43c0-9a37-93c5a22af252,b292eb46-df87-43c0-9a37-93c5a22af252,1,0,0943dd00-1653-4760-a9fe-ebc083ffa660,0943dd00-1653-4760-a9fe-ebc083ffa660,1,0,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,1,0,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,1,0,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,1,0,f93c9a7f-0249-421e-b3d0-55f02d130017,f93c9a7f-0249-421e-b3d0-55f02d130017,1,0,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,1,0,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,1,0,bd727741-ba99-484d-9d7d-2c2ad7ddd1a5,bd727741-ba99-484d-9d7d-2c2ad7ddd1a5,1,0,90327957-5bdc-4949-883c-9eb50f527b3e,90327957-5bdc-4949-883c-9eb50f527b3e,1,0,031980f5-60e8-426a-9907-3afff75a6b05,031980f5-60e8-426a-9907-3afff75a6b05,1,0,1a26f2d5-2465-484c-9311-12d9b3b92ae3,1a26f2d5-2465-484c-9311-12d9b3b92ae3,1,0,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,1,0,64837ad8-3055-4da3-a39c-0e7db38b6084,64837ad8-3055-4da3-a39c-0e7db38b6084,1,0,695cda1d-b816-4200-9a71-490078a9faa7,695cda1d-b816-4200-9a71-490078a9faa7,1,0,75fc5bea-e239-4de1-ad68-6454876e4b9f,75fc5bea-e239-4de1-ad68-6454876e4b9f,1,0,77de81f0-97c5-4751-9f38-f5785c7c45e0,77de81f0-97c5-4751-9f38-f5785c7c45e0,1,0,31ba33d4-5941-4b11-ae99-b15188bfef76,31ba33d4-5941-4b11-ae99-b15188bfef76,1,0,7142ae5b-ec7b-4a69-9c26-f51e05a4c270,7142ae5b-ec7b-4a69-9c26-f51e05a4c270,1,0,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,1,0,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,1,0,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,1,0,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,1,0,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,1,0,e3b84128-95e1-45df-84db-5e1791779543,e3b84128-95e1-45df-84db-5e1791779543,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,e9d95895-8708-4035-89ad-72573b870491,e9d95895-8708-4035-89ad-72573b870491,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f0152598-ffa3-4eb7-811f-906e569373e6,f0152598-ffa3-4eb7-811f-906e569373e6,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,312118ff-a2a4-479c-964a-5250cca0cd20,312118ff-a2a4-479c-964a-5250cca0cd20,1,0,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,89318397-b3a6-4468-985b-ed5cb8ab5cdb,89318397-b3a6-4468-985b-ed5cb8ab5cdb,1,0,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,4436b2cf-2d71-401f-99fd-012ff0c91fbd,4436b2cf-2d71-401f-99fd-012ff0c91fbd,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,5396be45-d7c0-43df-aed4-cad062a02b11,5396be45-d7c0-43df-aed4-cad062a02b11,1,0,017e3da8-e48e-488b-9bbf-4fef1a4f3417,017e3da8-e48e-488b-9bbf-4fef1a4f3417,1,0,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,aebf163d-d8e8-492a-a973-8cb51982d475,aebf163d-d8e8-492a-a973-8cb51982d475,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,1,0,d9e98c14-9b07-406b-92c8-bec76165e028,d9e98c14-9b07-406b-92c8-bec76165e028,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,1e015740-5b45-4729-9732-57359a7c602f,1e015740-5b45-4729-9732-57359a7c602f,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,6c138ffd-057f-4f7d-af4d-1b1a589a9057,6c138ffd-057f-4f7d-af4d-1b1a589a9057,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,1,0,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,cd74d617-8ebe-4a7d-b011-38c98d856d8c,cd74d617-8ebe-4a7d-b011-38c98d856d8c,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,1,0,5ea4412e-0ce0-4176-917b-37817ed788e1,5ea4412e-0ce0-4176-917b-37817ed788e1,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,8de2c020-0ebe-4374-93d7-d2e19ed82470,8de2c020-0ebe-4374-93d7-d2e19ed82470,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1e020429-ac68-46f4-b34c-c2c4a2b494f6,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,789a2027-8601-434c-bf47-37696a3966ad,789a2027-8601-434c-bf47-37696a3966ad,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,1,0,4c3085e1-2f86-4af4-a392-ab45e30a7152,4c3085e1-2f86-4af4-a392-ab45e30a7152,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,89cc9ae4-e933-4f4a-849f-48ef67b75819,89cc9ae4-e933-4f4a-849f-48ef67b75819,1,0,36e096be-ee28-437a-b8f2-c1e274c150e3,36e096be-ee28-437a-b8f2-c1e274c150e3,1,0,f6b69c2b-e32a-477f-9128-b61d8237290e,f6b69c2b-e32a-477f-9128-b61d8237290e,1,0,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,1,0,d05bbd02-9db3-4830-be9d-7080f3506e01,d05bbd02-9db3-4830-be9d-7080f3506e01,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,fa548f02-82e0-4897-89e8-0618ebf16919,fa548f02-82e0-4897-89e8-0618ebf16919,1,0,8c28a5b0-517f-48fe-9bde-5e611c319413,8c28a5b0-517f-48fe-9bde-5e611c319413,1,0,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,1,0,4a0d7cd7-8e43-4a1f-88b8-ffc376b38f7c,4a0d7cd7-8e43-4a1f-88b8-ffc376b38f7c,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,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,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,50f7effb-e051-49dd-8b56-0771dda350cc,50f7effb-e051-49dd-8b56-0771dda350cc,1,0,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,1,0,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,1,0,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,1,0,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,1,0,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,1,0,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,1,0,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,1,0,9d669d30-a0af-4095-852a-96b4224ee933,9d669d30-a0af-4095-852a-96b4224ee933,1,0,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,1,0,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,1,0,18363a37-28b0-488b-a7d6-54d3596d2a6d,18363a37-28b0-488b-a7d6-54d3596d2a6d,1,0,e5f401b5-4672-4529-a8dd-6d819f3f269c,e5f401b5-4672-4529-a8dd-6d819f3f269c,1,0,126d5d78-a2b0-4c16-b429-bf8d251280e7,126d5d78-a2b0-4c16-b429-bf8d251280e7,1,0,f8f96dce-913c-4858-bcb7-dcfe3dc2f72e,f8f96dce-913c-4858-bcb7-dcfe3dc2f72e,1,0,70d93c88-c9e9-4b8e-b8f3-ef07c665ab5d,70d93c88-c9e9-4b8e-b8f3-ef07c665ab5d,1,0,12443114-1931-4eb7-968a-7dbe166b7298,12443114-1931-4eb7-968a-7dbe166b7298,1,0,0080c29d-ec54-43a8-aab8-c67e0279b6b7,0080c29d-ec54-43a8-aab8-c67e0279b6b7,1,0,a0271f6e-dc70-4dfe-a395-203e8a89f933,a0271f6e-dc70-4dfe-a395-203e8a89f933,1,0,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,1,0,5e52dfe6-5a98-4a32-9429-5f44bf442367,5e52dfe6-5a98-4a32-9429-5f44bf442367,1,0,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,1,0,d065c02e-9991-468a-ae32-b8c29d078d03,d065c02e-9991-468a-ae32-b8c29d078d03,1,0,c509683e-eb13-4e1a-91ed-cd6982ec5001,c509683e-eb13-4e1a-91ed-cd6982ec5001,1,0,88bf6f58-7943-42c4-bc0f-56b991590026,88bf6f58-7943-42c4-bc0f-56b991590026,1,0,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,1,0,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,1,0,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,1,0,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,1,0,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,1,0,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,1,0,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,1,0,f987ca28-545b-4540-9e36-b0daa67dc3cb,f987ca28-545b-4540-9e36-b0daa67dc3cb,1,0,70f156d8-9cb4-442d-a36b-7a43d03bcd12,70f156d8-9cb4-442d-a36b-7a43d03bcd12,1,0,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,1,0,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,1,0,f0a6de82-45ab-4153-bccf-df82fc960aa1,f0a6de82-45ab-4153-bccf-df82fc960aa1,1,0,77adf47b-6015-46fc-9e29-f1c025ea0d81,77adf47b-6015-46fc-9e29-f1c025ea0d81,1,0,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,1,0,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,1,0,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,1,0,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,1,0,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,1,0,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,1,0,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,1,0,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,1,0,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,1,0,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,1,0,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,1,0,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,1,0,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,1,0,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,1,0,e83ad33d-27df-4181-afd2-b7f416e6e705,e83ad33d-27df-4181-afd2-b7f416e6e705,1,0,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,1,0,f0438b0a-7916-4de4-a3a8-d43407c3295f,f0438b0a-7916-4de4-a3a8-d43407c3295f,1,0,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,1,0,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,1,0,f41e5a5b-394b-423a-bee5-ed4d1da0be71,f41e5a5b-394b-423a-bee5-ed4d1da0be71,1,0,23db175f-ddfb-4af7-9c0c-232b6adb7daf,23db175f-ddfb-4af7-9c0c-232b6adb7daf,1,0,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,1,0,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,1,0,4e309f26-35e8-49d9-bbd1-c7884e666dca,4e309f26-35e8-49d9-bbd1-c7884e666dca,1,0,84f05fe4-51d3-49a8-83e7-1cae2028147e,84f05fe4-51d3-49a8-83e7-1cae2028147e,1,0,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,1,0,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,1,0,c382ee3a-d0a8-4ed8-ac88-5558b631f448,c382ee3a-d0a8-4ed8-ac88-5558b631f448,1,0,3916ddbd-9023-42a4-849e-9cda6e591408,3916ddbd-9023-42a4-849e-9cda6e591408,1,0,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,1,0,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,1,0,8e36227c-c0aa-43c4-93ad-e78701248fb1,8e36227c-c0aa-43c4-93ad-e78701248fb1,1,0,f135b60e-6d28-4ba1-acd7-76090f14855d,f135b60e-6d28-4ba1-acd7-76090f14855d,1,0,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,5b105084-c4ba-4ff6-9196-8b3e3a9991e2,1,0,c6267c5a-3878-4d0c-8674-4d4dd672b99c,c6267c5a-3878-4d0c-8674-4d4dd672b99c,1,0,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,44c9e8a9-8efd-4391-a1b2-4ef278376b4d,1,0,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,1,0,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,1,0,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,1,0,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,1,0,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,1,0,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,1,0,45552b2f-0878-499e-8a27-4fcce93e5459,45552b2f-0878-499e-8a27-4fcce93e5459,1,0,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,1,0,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,1,0,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,d0b49fd9-4054-409f-97a0-a0811ba6c1ab,1,0,8ca63a1d-4593-4f52-8b5e-4feb9f8487ca,8ca63a1d-4593-4f52-8b5e-4feb9f8487ca,1,0,1e4cc0d6-6e5e-4d16-ba44-060912ec292f,1e4cc0d6-6e5e-4d16-ba44-060912ec292f,1,0,e9311a22-56b5-4607-8eaa-52382ed040c3,e9311a22-56b5-4607-8eaa-52382ed040c3,1,0,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,dc7b8596-b2c0-415f-95d9-c0aaa96c5675,1,0,87e6e315-01e0-41eb-8373-0a60635f2f7a,87e6e315-01e0-41eb-8373-0a60635f2f7a,1,0,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,1,0,9b77e99b-b1d3-4368-a671-59e0ebba3f0e,9b77e99b-b1d3-4368-a671-59e0ebba3f0e,1,0,ad847998-6e50-4160-81fc-3b58ad68f202,ad847998-6e50-4160-81fc-3b58ad68f202,1,0,0e2d814a-cc9d-4f91-910d-bda54779e298,0e2d814a-cc9d-4f91-910d-bda54779e298,1,0,8fdfef8d-502e-4d27-a539-e833048fa1eb,8fdfef8d-502e-4d27-a539-e833048fa1eb,1,0,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,1,0,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,1,0,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,1,0,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,1,0,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,1,0,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,1,0,0b303d25-e141-431f-828c-1778d3c247f6,0b303d25-e141-431f-828c-1778d3c247f6,1,0,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,1,0,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,1,0,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,1,0,976533bf-f162-42a1-a47e-6d681ee67b82,976533bf-f162-42a1-a47e-6d681ee67b82,1,0,19bc0dd8-9e6b-4855-bc42-b4e98443163f,19bc0dd8-9e6b-4855-bc42-b4e98443163f,1,0,a61e10af-eaba-4e7a-a641-65d77453a559,a61e10af-eaba-4e7a-a641-65d77453a559,1,0,edf81bbb-905a-474d-959a-db5629a8e104,edf81bbb-905a-474d-959a-db5629a8e104,1,0,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,1,0,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,1,0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,1,0,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1,0,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,1,0,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,1,0,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,1,0,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,1,0,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,1,0,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,1,0,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,1,0,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,1,0,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,1,0,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,1,0,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,1,0,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,1,0,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,1,0,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,1,0,f20a04a7-84fa-48e3-8ac5-28176c1fcada,f20a04a7-84fa-48e3-8ac5-28176c1fcada,1,0,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,1,0,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,1,0,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,1,0,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,1,0,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,1,0,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,1,0,3b033d29-0de7-49dd-90bc-f414b28426d7,3b033d29-0de7-49dd-90bc-f414b28426d7,1,0,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,1,0,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,1,0,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,1,0,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,1,0,7e9c0fa3-128e-4c3f-a1f7-63cb88a1c0b1,7e9c0fa3-128e-4c3f-a1f7-63cb88a1c0b1,1,0,2ca8bca9-813a-4833-8ef0-a5e83f91c10f,2ca8bca9-813a-4833-8ef0-a5e83f91c10f,1,0,59b34b58-6ac9-467e-963b-0cccbf098797,59b34b58-6ac9-467e-963b-0cccbf098797,1,0,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,1,0,a2c36563-126d-4c3a-9714-5b7a4903073b,a2c36563-126d-4c3a-9714-5b7a4903073b,1,0,2e4da82c-dddb-4462-b34f-6511cd2a8356,2e4da82c-dddb-4462-b34f-6511cd2a8356,1,0,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,1,0,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,1,0,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,1,0,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,1,0,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,1,0,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,1,0,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,514e95b8-2fdd-46f7-89bf-7d1a3d9d6e1b,1,0,6ca91336-5ccd-4d0b-9602-53f4925c492d,6ca91336-5ccd-4d0b-9602-53f4925c492d,1,0,d853dd5f-d987-4cdb-82b5-5e40a5a5e449,d853dd5f-d987-4cdb-82b5-5e40a5a5e449,1,0,dc16c546-eecc-49fe-a401-e2e3987faa1f,dc16c546-eecc-49fe-a401-e2e3987faa1f,1,0,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,1,0,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,1,0,646def82-bc88-4187-8be0-93938656a20f,646def82-bc88-4187-8be0-93938656a20f,1,0,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,1,0,a07971f5-ed6d-4829-a6bb-4b17cd5c6f6c,a07971f5-ed6d-4829-a6bb-4b17cd5c6f6c,1,0,06323ebd-5f74-494a-99a5-eb77e23d8637,06323ebd-5f74-494a-99a5-eb77e23d8637,1,0,9c4e28e8-7257-42ed-9fd8-793a0b8eb945,9c4e28e8-7257-42ed-9fd8-793a0b8eb945,1,0,9b7b6d0e-68d6-4a73-837c-2a6fd456b236,9b7b6d0e-68d6-4a73-837c-2a6fd456b236,1,0,7f6222c1-1a50-4565-b66b-bcb430674efc,7f6222c1-1a50-4565-b66b-bcb430674efc,1,0,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,1,0,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,1,0,2fb5650f-a5e5-4db8-a6a7-ca1101b41d3e,2fb5650f-a5e5-4db8-a6a7-ca1101b41d3e,1,0,b0fca543-6951-4233-bdf6-58082b22252a,b0fca543-6951-4233-bdf6-58082b22252a,1,0,4929cf90-54c6-412c-b2fa-dc8230fb8f85,4929cf90-54c6-412c-b2fa-dc8230fb8f85,1,0,52ae6431-afb3-4dea-b106-00e11b174ec7,52ae6431-afb3-4dea-b106-00e11b174ec7,1,0,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,1,0,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,1,0,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,1,0,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,1,0,8b83324c-e10e-49d1-99d7-5bc468c25975,8b83324c-e10e-49d1-99d7-5bc468c25975,1,0,ddb75923-27bf-4996-b024-4bc6eb0f59a7,ddb75923-27bf-4996-b024-4bc6eb0f59a7,1,0,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,1,0,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,1,0,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,1,0,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,1,0,3be0acc7-223a-46ec-9ea2-ec99b869fa78,3be0acc7-223a-46ec-9ea2-ec99b869fa78,1,0,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,1,0,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,1,0,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,1,0,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,1,0,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,1,0,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,1,0,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,cf7bc2ca-fb57-4b1a-98cf-f2caa7e611f5,1,0,486083d8-33b1-453f-9f05-5ff867e2f4ba,486083d8-33b1-453f-9f05-5ff867e2f4ba,1,0,e4f9d9f6-38d7-4056-a95a-987ad2da2211,e4f9d9f6-38d7-4056-a95a-987ad2da2211,1,0,22c21c2b-4297-43b2-88f0-9555d22f7a14,22c21c2b-4297-43b2-88f0-9555d22f7a14,1,0,734f61c4-5429-4a09-8697-8949ac5e6bd1,734f61c4-5429-4a09-8697-8949ac5e6bd1,1,0,d04e0e2d-0a5f-4866-b0b3-b582915db899,d04e0e2d-0a5f-4866-b0b3-b582915db899,1,0,19649d3f-52aa-4054-bb84-a6a11d212495,19649d3f-52aa-4054-bb84-a6a11d212495,1,0,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,1,0,58321939-f25a-456d-8dee-97e64743dc2e,58321939-f25a-456d-8dee-97e64743dc2e,1,0,416fba62-70c4-4f8c-b10b-56d47b27ca35,416fba62-70c4-4f8c-b10b-56d47b27ca35,1,0,ec48a164-bc30-4e36-a40a-a3cca07aea0d,ec48a164-bc30-4e36-a40a-a3cca07aea0d,1,0,3174d57f-c6a8-44dc-adc1-47e9a54c844d,3174d57f-c6a8-44dc-adc1-47e9a54c844d,1,0,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,1,0,b7736108-89bd-44eb-89c1-8a5a774058f1,b7736108-89bd-44eb-89c1-8a5a774058f1,1,0,e07841ef-8392-4ceb-936d-fd160b3b03cd,e07841ef-8392-4ceb-936d-fd160b3b03cd,1,0,eee66f49-8954-4674-9e02-6bff6c332d30,eee66f49-8954-4674-9e02-6bff6c332d30,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,e7415ada-dd47-41f5-b4d5-7e77d1adad33,e7415ada-dd47-41f5-b4d5-7e77d1adad33,1,0,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,1,0,79c15db6-6066-4fe5-b30e-3196b6ca3d66,79c15db6-6066-4fe5-b30e-3196b6ca3d66,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,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,1,0,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,1,0,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,1,0,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,1,0,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,1,0,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,1,0,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,1,0,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,1,0,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,1,0,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,1,0,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,1,0,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,1,0,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,1,0,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,1,0,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,1,0,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,1,0,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,1,0,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,1,0,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,1,0,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,1,0,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,1,0,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,1,0,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,1,0,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,1,0,e1823be2-b646-4a1a-a9a9-c925a12c0586,e1823be2-b646-4a1a-a9a9-c925a12c0586,1,0,909e56e3-981f-430b-b775-18c70b3549e7,909e56e3-981f-430b-b775-18c70b3549e7,1,0,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,e613a6aa-82cb-40fd-8f28-0a74fe21e6a6,1,0,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,1,0,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,1,0,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,1,0,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,1,0,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,1,0,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,1,0,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,1,0,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,1,0,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,1,0,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,1,0,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1,0,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,1,0,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,1,0,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,1,0,3f7ee937-d853-47b7-a1f5-d821208e3531,3f7ee937-d853-47b7-a1f5-d821208e3531,1,0,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,1,0,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,1,0,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,1,0,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,1,0,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,1,0,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,1,0,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,1,0,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,1,0,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,1,0,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,1,0,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,8c2a0f6b-492c-4c5a-97c5-da0d07f9d781,1,0,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,1,0,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,1,0,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,1,0,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,1,0,90032ffa-f117-4a34-82f8-cc7e5a22a542,90032ffa-f117-4a34-82f8-cc7e5a22a542,1,0,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,1,0,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,1,0,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,1,0,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,1,0,49e787c9-753a-468a-b8dd-2e970d9a1fed,49e787c9-753a-468a-b8dd-2e970d9a1fed,1,0,e871dea7-1953-4511-90b0-e0957afac4c0,e871dea7-1953-4511-90b0-e0957afac4c0,1,0,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,1,0,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,1,0,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,1,0,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,1,0,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,1,0,40ae107d-67a8-404c-adf9-1a760bba94ff,40ae107d-67a8-404c-adf9-1a760bba94ff,1,0,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,1,0,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,1,0,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,1,0,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,1,0,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,1,0,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,1,0,7172bed5-b12b-4e83-b15d-1d95b63a6272,7172bed5-b12b-4e83-b15d-1d95b63a6272,1,0,25d75a3c-b801-4b1e-aed8-90e667f36c67,25d75a3c-b801-4b1e-aed8-90e667f36c67,1,0,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,1,0,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,1,0,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,1,0,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,1,0,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,1,0,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,1,0,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,1,0,49e21b87-beae-4640-a497-ef468da0cbbc,49e21b87-beae-4640-a497-ef468da0cbbc,1,0,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,1,0,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,1,0,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,1,0,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,1,0,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,1,0,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,1,0,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,1,0,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,1,0,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,1,0,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,1,0,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,1,0,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,1,0,662c5b48-62e1-451e-b37f-20f3f2bb0347,662c5b48-62e1-451e-b37f-20f3f2bb0347,1,0,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,1,0,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,1,0,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,1,0,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,1,0,61cc4ec9-81e7-415b-8adf-3a5e61be505f,61cc4ec9-81e7-415b-8adf-3a5e61be505f,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,692d289b-8bd2-4b88-a8ea-0389c967df63,692d289b-8bd2-4b88-a8ea-0389c967df63,1,0,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,1,0,393074c4-0afc-4232-8101-11a4ea6ed28a,393074c4-0afc-4232-8101-11a4ea6ed28a,1,0,5ff23123-450c-40ae-9b79-c540da53e2a0,5ff23123-450c-40ae-9b79-c540da53e2a0,1,0,639339a1-7de5-4b05-adf3-f60e7edd922c,639339a1-7de5-4b05-adf3-f60e7edd922c,1,0,dea9af9d-13c0-40d4-a9b0-1908e0a58795,dea9af9d-13c0-40d4-a9b0-1908e0a58795,1,0,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,1,0,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,1,0,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,1,0,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,1,0,50ef6fc7-edfc-497b-ae9d-fb676934a631,50ef6fc7-edfc-497b-ae9d-fb676934a631,1,0,6f706d33-6fc6-4311-994f-6887c46f3c3b,6f706d33-6fc6-4311-994f-6887c46f3c3b,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,e3ac6312-4397-4012-a3d1-e35071d3fb6b,e3ac6312-4397-4012-a3d1-e35071d3fb6b,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,23d137ad-5b37-40a9-9c9f-3a2cecfb5abb,23d137ad-5b37-40a9-9c9f-3a2cecfb5abb,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,aea031ed-44c1-441b-8ed2-3a790c0263ab,aea031ed-44c1-441b-8ed2-3a790c0263ab,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,d2816f95-4809-4727-8ab6-8afd375f5a75,d2816f95-4809-4727-8ab6-8afd375f5a75,1,0,1d49b1bb-5f90-46e4-adcf-55ad46442648,1d49b1bb-5f90-46e4-adcf-55ad46442648,1,0,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,1,0,1bcbf91d-cbbc-4c47-86ed-b2cab62ccbe2,1bcbf91d-cbbc-4c47-86ed-b2cab62ccbe2,1,0,27aebf22-27fe-48d4-a6f4-ea4f6a6714bb,27aebf22-27fe-48d4-a6f4-ea4f6a6714bb,1,0,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,1,0,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,1,0,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,1,0,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,1,0,932656e8-4011-4250-844b-1fd47abda912,932656e8-4011-4250-844b-1fd47abda912,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,b96df5bb-d78a-40ed-a62d-2bf796c59c62,b96df5bb-d78a-40ed-a62d-2bf796c59c62,1,0,073890e5-13eb-4c50-9a6e-3e5507b111b7,073890e5-13eb-4c50-9a6e-3e5507b111b7,1,0,34a4d235-dc56-47e5-91b6-0af887ccdf42,34a4d235-dc56-47e5-91b6-0af887ccdf42,1,0,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,1,0,97edd94a-4bf2-4ed7-b98f-677f869b0715,97edd94a-4bf2-4ed7-b98f-677f869b0715,1,0,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,1,0,2fad50a6-6a3e-4f87-ab84-907364427a63,2fad50a6-6a3e-4f87-ab84-907364427a63,1,0,e37aa075-143b-44e9-a2e2-77b3e0f76a77,e37aa075-143b-44e9-a2e2-77b3e0f76a77,1,0,1df47f0c-7935-481b-9dfb-1f660ea81a2b,1df47f0c-7935-481b-9dfb-1f660ea81a2b,1,0,258736e4-93c0-4a46-8caa-75be42c9f006,258736e4-93c0-4a46-8caa-75be42c9f006,1,0,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,1,0,56d0acf3-c888-4824-a6e4-27d61fa35415,56d0acf3-c888-4824-a6e4-27d61fa35415,1,0,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,1,0,439129dd-ad00-484c-b84a-fb325af979ed,439129dd-ad00-484c-b84a-fb325af979ed,1,0,dcae6376-f44c-421e-87f2-df83413c021e,dcae6376-f44c-421e-87f2-df83413c021e,1,0,dbdcdcab-4cd5-44af-b52c-6ce14a26ca9c,dbdcdcab-4cd5-44af-b52c-6ce14a26ca9c,1,0,151f2d0a-cc43-490d-ad7d-71390703aa72,151f2d0a-cc43-490d-ad7d-71390703aa72,1,0,2a515a4f-683b-4674-b097-62dd2d940c39,2a515a4f-683b-4674-b097-62dd2d940c39,1,0,d14058f5-dfd4-47eb-ae6d-01b7062f5940,d14058f5-dfd4-47eb-ae6d-01b7062f5940,1,0,90f358ae-9c80-40cf-8e8f-aa02d78a2cdb,90f358ae-9c80-40cf-8e8f-aa02d78a2cdb,1,0,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,1,0,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,1,0,fdb5b235-1978-4c2a-a03f-02341df00c3c,fdb5b235-1978-4c2a-a03f-02341df00c3c,1,0,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,1,0,917f8d67-2c28-4e02-9453-e1ef9297c9a6,917f8d67-2c28-4e02-9453-e1ef9297c9a6,1,0,38637f61-399a-4966-9e64-4751aecffa31,38637f61-399a-4966-9e64-4751aecffa31,1,0,0f38a18b-a36c-45fe-86c1-396634aaa5df,0f38a18b-a36c-45fe-86c1-396634aaa5df,1,0,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,1,0,a81c783d-2dea-4dde-9ca1-7b23d609eb22,a81c783d-2dea-4dde-9ca1-7b23d609eb22,1,0,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,1,0,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,1,0,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,1,0,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,1,0,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,1,0,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,1,0,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,1,0,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,1,0,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,1,0,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,1,0,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,1,0,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,1,0,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,1,0,1f927f76-5523-4880-9d26-d69a059f2b67,1f927f76-5523-4880-9d26-d69a059f2b67,1,0,27a9c1de-90a9-49f8-8b16-f7ef041ae1de,27a9c1de-90a9-49f8-8b16-f7ef041ae1de,1,0,5c45e96f-e245-4d16-9c47-836505582aef,5c45e96f-e245-4d16-9c47-836505582aef,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,1,0,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,1,0,ca85912b-87b4-481e-9184-017364b4603d,ca85912b-87b4-481e-9184-017364b4603d,1,0,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,1,0,2650db63-ca98-4a8a-8c36-165548aa5279,2650db63-ca98-4a8a-8c36-165548aa5279,1,0,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,6a8fdf0a-5dff-49e4-a423-fc80aceeee27,1,0,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,4b9320f1-c7b1-4c08-a832-64ef108d0d6d,1,0,e8c5c961-0633-438d-ba50-d2a774f6b167,e8c5c961-0633-438d-ba50-d2a774f6b167,1,0,48b57d1b-5246-4ce8-9e0f-e369e6add55c,48b57d1b-5246-4ce8-9e0f-e369e6add55c,1,0,a69525c7-27ff-48df-b26b-325ba580a53e,a69525c7-27ff-48df-b26b-325ba580a53e,1,0,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,1,0,8482b31d-0ffa-4a94-9be1-09db8399b70d,8482b31d-0ffa-4a94-9be1-09db8399b70d,1,0,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,1,0,e57f4619-b5ed-44de-a186-a13a3897731b,e57f4619-b5ed-44de-a186-a13a3897731b,1,0,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,1,0,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,1,0,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,1,0,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,1,0,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,1,0,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,1,0,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,1,0,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,1,0,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,1,0,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,1,0,bb3a9973-67ce-479e-8668-c2f3bb20301e,bb3a9973-67ce-479e-8668-c2f3bb20301e,1,0,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,1,0,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,1,0,37169451-1464-4f24-8ca6-802963ffb636,37169451-1464-4f24-8ca6-802963ffb636,1,0,c3a958b1-590f-4418-a74f-5982b478cf52,c3a958b1-590f-4418-a74f-5982b478cf52,1,0,ef0e618d-0942-460a-ac65-9aca2fed976e,ef0e618d-0942-460a-ac65-9aca2fed976e,1,0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,1,0,2ac8bd69-9fbf-4f15-b58d-397d9e903532,2ac8bd69-9fbf-4f15-b58d-397d9e903532,1,0,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,1,0,5b460b92-2c74-4f59-88b2-18d9aac42c04,5b460b92-2c74-4f59-88b2-18d9aac42c04,1,0,db05d35b-5f53-4c27-ba80-b477b9a98299,db05d35b-5f53-4c27-ba80-b477b9a98299,1,0,fa872ae1-b699-46fe-9d6a-e42e1388752b,fa872ae1-b699-46fe-9d6a-e42e1388752b,1,0,1acf34e6-c428-4130-82f0-5160dfcc0858,1acf34e6-c428-4130-82f0-5160dfcc0858,1,0,57046262-b9ce-4670-9cf5-6db9e58dd0d5,57046262-b9ce-4670-9cf5-6db9e58dd0d5,1,0,a9824176-36d5-4be5-9984-f4312ff48515,a9824176-36d5-4be5-9984-f4312ff48515,1,0,8e980ca0-1627-45e8-bd27-5dd1ac199459,8e980ca0-1627-45e8-bd27-5dd1ac199459,1,0,8b653beb-af9f-4f39-b691-ae14f80b7cd6,8b653beb-af9f-4f39-b691-ae14f80b7cd6,1,0,77559c11-713f-454d-aff4-56649e1350e9,77559c11-713f-454d-aff4-56649e1350e9,1,0,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0c965703-c1d0-48b7-80f9-b8d869ff98f5,1,0,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,1,0,7ba42162-557b-4e34-8aca-0cdee8cb2452,7ba42162-557b-4e34-8aca-0cdee8cb2452,1,0,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,1,0,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,1,0,dd577924-c6cb-4aa9-9db5-366d8958d00f,dd577924-c6cb-4aa9-9db5-366d8958d00f,1,0,8ed8f72e-404a-4be4-a44d-ddebbad5f411,8ed8f72e-404a-4be4-a44d-ddebbad5f411,1,0,e919bc4c-86e6-44f6-be27-5a729b63d042,e919bc4c-86e6-44f6-be27-5a729b63d042,1,0,ec580e4f-1518-4923-a10e-bc1da8688b37,ec580e4f-1518-4923-a10e-bc1da8688b37,1,0,91c3902a-314f-4d40-8bcc-8dd131fed2f4,91c3902a-314f-4d40-8bcc-8dd131fed2f4,1,0,ae2b21c5-9349-49e8-9627-26f05c21f43a,ae2b21c5-9349-49e8-9627-26f05c21f43a,1,0,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,1,0,917a19d7-73db-4247-b892-397598d67879,917a19d7-73db-4247-b892-397598d67879,1,0,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1,0,d8066600-c669-449d-a187-fdd3af8f7afa,d8066600-c669-449d-a187-fdd3af8f7afa,1,0,dadf86a6-c118-4827-b1b9-6cfee731242f,dadf86a6-c118-4827-b1b9-6cfee731242f,1,0,45bf7b20-f048-491a-a989-e50bea13d028,45bf7b20-f048-491a-a989-e50bea13d028,1,0,9ad3b432-5b49-44ee-9d8d-83c36458d927,9ad3b432-5b49-44ee-9d8d-83c36458d927,1,0,a9967bff-53b9-4295-a253-3647d956d3cb,a9967bff-53b9-4295-a253-3647d956d3cb,1,0,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,1,0,b8a31397-8974-44ec-92b0-7cbdc481cf7e,b8a31397-8974-44ec-92b0-7cbdc481cf7e,1,0,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,1,0,fb16c4d5-854c-4525-92be-b21fa2df5b0d,fb16c4d5-854c-4525-92be-b21fa2df5b0d,1,0,5771de21-2086-432b-ad91-de14a39bd5bc,5771de21-2086-432b-ad91-de14a39bd5bc,1,0,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,1,0,ed96fbfa-bda7-405c-9073-d0b6feffedad,ed96fbfa-bda7-405c-9073-d0b6feffedad,1,0,50c724cb-dde1-4313-9492-b1750bd0afc1,50c724cb-dde1-4313-9492-b1750bd0afc1,1,0,12901981-6106-4471-ab3a-e127c2bb4ebd,12901981-6106-4471-ab3a-e127c2bb4ebd,1,0,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,1,0,d5ea5dea-233d-4106-b9ba-f030d4f762ef,d5ea5dea-233d-4106-b9ba-f030d4f762ef,1,0,903af05e-5ac5-46aa-843b-d74f9e417c1d,903af05e-5ac5-46aa-843b-d74f9e417c1d,1,0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,1,0,a344290a-c9be-47a7-95ad-ced1b52a0995,a344290a-c9be-47a7-95ad-ced1b52a0995,1,0,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,1,0,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,1,0,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,1,0,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,1,0,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,1,0,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,1,0,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,1,0,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,1,0,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,1,0,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,1,0,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,1,0,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,1,0,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,1,0,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,1,0,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,1,0,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,1,0,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,1,0,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,1,0,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,1,0,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,1,0,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,1,0,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,1,0,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,1,0,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,1,0,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,1,0,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,1,0,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,1,0,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,1,0,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,1,0,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,1,0,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,1,0,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,1,0,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,1,0,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,1,0,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,1,0,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,1,0,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,1,0,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,1,0,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,1,0,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,1,0,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,1,0,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,1,0,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,1,0,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,1,0,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,1,0,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,1,0,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,1,0,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,1,0,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,1,0,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,1,0,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,1,0,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,1,0,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,1,0,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,1,0,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,1,0,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,1,0,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,1,0,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,1,0,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,1,0,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,1,0,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,1,0,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,1,0,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,1,0,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,1,0,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,1,0,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,1,0,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,1,0,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,1,0,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,1,0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,1,0,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,1,0,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,1,0,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,1,0,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,1,0,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,1,0,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,1,0,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,1,0,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,1,0,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,1,0,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,1,0,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,1,0,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,1,0,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,1,0,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,1,0,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,1,0,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,1,0,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,1,0,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,1,0,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,1,0,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,1,0,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,1,0,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,1,0,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,1,0,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,1,0,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,1,0,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,1,0,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,1,0,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,1,0,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1,0,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,1,0,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,1,0,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,1,0,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,1,0,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,1,0,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,1,0,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,1,0,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,1,0,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,1,0,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,1,0,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,1,0,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,1,0,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,1,0,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,1,0,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,1,0,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,1,0,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,1,0,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,1,0,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,1,0,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,1,0,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,1,0,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,1,0,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,1,0,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,1,0,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,1,0,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,1,0,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,1,0,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,1,0,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,1,0,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,1,0,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,1,0,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,1,0,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,1,0,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,1,0,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,1,0,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,1,0,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,1,0,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,1,0,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,1,0,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,1,0,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,1,0,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,1,0,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,1,0,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,1,0,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,1,0,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,1,0,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,1,0,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,1,0,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,1,0,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,1,0,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,1,0,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,1,0,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,1,0,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,1,0,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,1,0,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,1,0,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,1,0,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,1,0,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,1,0,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,1,0,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,1,0,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,1,0,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,1,0,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,1,0,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,1,0,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,1,0,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,1,0,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,1,0,58589e42-9ff2-4ad4-bd98-a75ab6873625,58589e42-9ff2-4ad4-bd98-a75ab6873625,1,0,92255ded-6c44-43be-b0b1-fd03c2b78c8b,92255ded-6c44-43be-b0b1-fd03c2b78c8b,1,0,dfe6da42-f024-45c5-beea-ceccaf3a5faa,dfe6da42-f024-45c5-beea-ceccaf3a5faa,1,0,08f3e8f1-284c-4059-864a-42499d48596c,08f3e8f1-284c-4059-864a-42499d48596c,1,0,3d715c1b-9a5e-408d-98d6-5345d274144b,3d715c1b-9a5e-408d-98d6-5345d274144b,1,0,3f88bc69-e140-48b6-a2f9-24f6a391bff2,3f88bc69-e140-48b6-a2f9-24f6a391bff2,1,0,65eb5361-074c-451d-a5d8-d16b6ecccf82,65eb5361-074c-451d-a5d8-d16b6ecccf82,1,0,f7c8cab8-c634-4cf3-9183-c15c915231f8,f7c8cab8-c634-4cf3-9183-c15c915231f8,1,0,563a33a6-9eff-4ff1-9eba-dafc235d2ede,563a33a6-9eff-4ff1-9eba-dafc235d2ede,1,0,fbc21f7d-c272-41ea-b048-c5af294ab5ed,fbc21f7d-c272-41ea-b048-c5af294ab5ed,1,0,088c38fa-1c8f-42e7-aa72-5f5dd8cfc1c6,088c38fa-1c8f-42e7-aa72-5f5dd8cfc1c6,1,0,370f97ee-9aed-4a0a-aefc-647d973e6741,370f97ee-9aed-4a0a-aefc-647d973e6741,1,0,c586d28e-a3ec-4201-8ba0-d453bb7c5293,c586d28e-a3ec-4201-8ba0-d453bb7c5293,1,0,d84f12b0-6e01-4646-9abd-51578716433d,d84f12b0-6e01-4646-9abd-51578716433d,1,0,a4458c18-72eb-4fc0-8dc6-fccab93b0898,a4458c18-72eb-4fc0-8dc6-fccab93b0898,1,0,3a0ceb25-60f5-4fec-ab2e-e667939bfe21,3a0ceb25-60f5-4fec-ab2e-e667939bfe21,1,0,27db4549-df2f-4856-b07f-3c9399cdee9c,27db4549-df2f-4856-b07f-3c9399cdee9c,1,0,f667d49a-8077-450f-9442-2ea4fee7b62d,f667d49a-8077-450f-9442-2ea4fee7b62d,1,0,782b1285-9618-4ec9-b817-ce93e2d24d4d,782b1285-9618-4ec9-b817-ce93e2d24d4d,1,0,dd3e202f-6225-4061-a6ab-f29cd314ab08,dd3e202f-6225-4061-a6ab-f29cd314ab08,1,0,483b7600-e46f-4739-94c8-8637c62750a0,483b7600-e46f-4739-94c8-8637c62750a0,1,0,bdcf5f7a-2888-4143-b46d-1bf0dcc16872,bdcf5f7a-2888-4143-b46d-1bf0dcc16872,1,0,bce8a955-0a0e-4771-9763-4f5d319d9848,bce8a955-0a0e-4771-9763-4f5d319d9848,1,0,090c475c-fb33-46a9-a0ed-fb9d7def2ca5,090c475c-fb33-46a9-a0ed-fb9d7def2ca5,1,0,d10c3389-5bf0-4c73-ab92-786eb19d1676,d10c3389-5bf0-4c73-ab92-786eb19d1676,1,0,c824c20d-7503-4a77-81b8-2a68b20eab68,c824c20d-7503-4a77-81b8-2a68b20eab68,1,0,a0db92c6-b39e-41ab-82e3-161e32f67bda,a0db92c6-b39e-41ab-82e3-161e32f67bda,1,0,88f91187-65d3-4684-992d-20ca29d3755a,88f91187-65d3-4684-992d-20ca29d3755a,1,0,da725701-d4fb-40a4-a63b-feaa8559d8cf,da725701-d4fb-40a4-a63b-feaa8559d8cf,1,0,0a44cfc8-0b55-4aed-990f-e97831494a3c,0a44cfc8-0b55-4aed-990f-e97831494a3c,1,0,c9adbe7c-ca6e-4048-a498-9b48f75d9b45,c9adbe7c-ca6e-4048-a498-9b48f75d9b45,1,0,c7cb80d6-13d9-49af-acdd-6d10dffd1e17,c7cb80d6-13d9-49af-acdd-6d10dffd1e17,1,0,9a3f04d7-b956-4e87-ac28-63f7afba1771,9a3f04d7-b956-4e87-ac28-63f7afba1771,1,0,41b23a18-0c4e-455f-b249-2f2eba8119db,41b23a18-0c4e-455f-b249-2f2eba8119db,1,0,ff697cb8-ab88-4634-94e3-c06a401f71ff,ff697cb8-ab88-4634-94e3-c06a401f71ff,1,0,cf98131d-2b1a-4a07-a8dd-72af01934a8b,cf98131d-2b1a-4a07-a8dd-72af01934a8b,1,0,bef1eead-3f8b-48b7-99f3-46ba332fb60d,bef1eead-3f8b-48b7-99f3-46ba332fb60d,1,0,c1b3d4c8-8c53-4452-bec5-9742bb827d8f,c1b3d4c8-8c53-4452-bec5-9742bb827d8f,1,0,b6e1d584-6817-4f06-b5b2-57037a23ce6f,b6e1d584-6817-4f06-b5b2-57037a23ce6f,1,0,1b5d2ded-3f58-4b3e-8678-48191897e408,1b5d2ded-3f58-4b3e-8678-48191897e408,1,0,62fd5457-0cfd-4273-8965-4b5bf9170209,62fd5457-0cfd-4273-8965-4b5bf9170209,1,0,88701798-0c0e-4d33-a68b-3eddfc25d835,88701798-0c0e-4d33-a68b-3eddfc25d835,1,0,c0d704b5-32de-4bb8-9525-f7d1da828ae5,c0d704b5-32de-4bb8-9525-f7d1da828ae5,1,0,b5b5ee06-4de8-4776-98f0-3e8e1b31985a,b5b5ee06-4de8-4776-98f0-3e8e1b31985a,1,0,2f999502-68e5-4823-8f94-aec98b1a1b1d,2f999502-68e5-4823-8f94-aec98b1a1b1d,1,0,2d064409-7f2a-4d2e-9155-6b34e4373e89,2d064409-7f2a-4d2e-9155-6b34e4373e89,1,0,fc51a562-01bb-47c3-bac5-89f78f64a5f3,fc51a562-01bb-47c3-bac5-89f78f64a5f3,1,0,8a33a6cd-f56d-405b-9515-9fc04d30e27a,8a33a6cd-f56d-405b-9515-9fc04d30e27a,1,0,9b199470-723d-4b72-9fdc-2bed2b7bc483,9b199470-723d-4b72-9fdc-2bed2b7bc483,1,0,5bb9aff1-f4ee-4c02-8e3f-f070bfbb8339,5bb9aff1-f4ee-4c02-8e3f-f070bfbb8339,1,0,6a06f9ee-8832-4e9e-aeba-b4cb9573c048,6a06f9ee-8832-4e9e-aeba-b4cb9573c048,1,0,38fa770e-f38d-4fdf-bb7a-56cfe76a8ab2,38fa770e-f38d-4fdf-bb7a-56cfe76a8ab2,1,0,afc4ce2a-60b6-48d0-ada0-2f651d050888,afc4ce2a-60b6-48d0-ada0-2f651d050888,1,0,5f289266-fc3c-4345-b7ab-cf863e2a6ccd,5f289266-fc3c-4345-b7ab-cf863e2a6ccd,1,0,5932f0d8-9012-4382-8c72-b1a5f4fbc937,5932f0d8-9012-4382-8c72-b1a5f4fbc937,1,0,66f1ff23-8fec-4be4-914c-43b7dee1c2a2,66f1ff23-8fec-4be4-914c-43b7dee1c2a2,1,0,56c3471e-459a-46ba-96ea-9f872b3ad54a,56c3471e-459a-46ba-96ea-9f872b3ad54a,1,0,2113195b-1553-4137-9e45-2cc62c72ee47,2113195b-1553-4137-9e45-2cc62c72ee47,1,0,1250f5b1-c766-434c-8d28-69b74a536294,1250f5b1-c766-434c-8d28-69b74a536294,1,0,80bc9b8b-7b17-4dbb-bca6-8465d6b01e0b,80bc9b8b-7b17-4dbb-bca6-8465d6b01e0b,1,0,6327e23d-6070-4b64-81c6-0d1a33eaae93,6327e23d-6070-4b64-81c6-0d1a33eaae93,1,0,4d086a1f-34e0-43f9-9401-d82e55746a9d,4d086a1f-34e0-43f9-9401-d82e55746a9d,1,0,5a4c543a-27d5-423b-a4d0-3952ea2817af,5a4c543a-27d5-423b-a4d0-3952ea2817af,1,0,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,1,0,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,1,0,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,1,0,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,1,0,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,1,0,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,1,0,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,1,0,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,1,0,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,1,0,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,1,0,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,1,0,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,1,0,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,1,0,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,1,0,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,1,0,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,1,0,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,1,0,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,1,0,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,1,0,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,1,0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,1,0,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,1,0,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,1,0,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,1,0,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,1,0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,1,0,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,1,0,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,1,0,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,1,0,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,1,0,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,1,0,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,1,0,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,1,0,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,1,0,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,1,0,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,1,0,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,1,0,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,1,0,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,1,0,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,1,0,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,1,0,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,1,0,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,1,0,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,1,0,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,1,0,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,1,0,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,1,0,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,1,0,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,1,0,9f36d26e-aa71-44d5-ac27-9aaa643555c3,9f36d26e-aa71-44d5-ac27-9aaa643555c3,1,0,87b8b5d7-d3d6-450a-adb1-5c875257ec80,87b8b5d7-d3d6-450a-adb1-5c875257ec80,1,0,e3640efe-e46c-4588-b251-dda23bf0641d,e3640efe-e46c-4588-b251-dda23bf0641d,1,0,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,1,0,522a4bff-34d3-46b2-8c66-0b30d881a86e,522a4bff-34d3-46b2-8c66-0b30d881a86e,1,0,3d7908b1-bd82-475e-8488-fafcbe3458ee,3d7908b1-bd82-475e-8488-fafcbe3458ee,1,0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1,0,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,1,0,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,1,0,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,1,0,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0f9c08c2-e7fa-4ea0-a935-f927feb01131,1,0,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,1,0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,1,0,57069b56-f732-41c0-9a75-cbdb1e88556c,57069b56-f732-41c0-9a75-cbdb1e88556c,1,0,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,1,0,23e79add-7f1c-422a-9df1-8f76ebf805df,23e79add-7f1c-422a-9df1-8f76ebf805df,1,0,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,1,0,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,1,0,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,1,0,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,1,0,5dcd8e28-b058-405a-bac4-defab7d4b789,5dcd8e28-b058-405a-bac4-defab7d4b789,1,0,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,1,0,077af11c-fd3c-4e87-b169-5f3137464f77,077af11c-fd3c-4e87-b169-5f3137464f77,1,0,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,1,0,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,1,0,da8f7f30-eb80-44db-a451-348306c90cd8,da8f7f30-eb80-44db-a451-348306c90cd8,1,0,fd07f403-1116-4102-a1bf-35abb03ad493,fd07f403-1116-4102-a1bf-35abb03ad493,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,0722315c-9217-4ecf-80ff-d1ee89f84a53,0722315c-9217-4ecf-80ff-d1ee89f84a53,1,0,9847676d-f44d-46a0-83e2-4a43a835caf8,9847676d-f44d-46a0-83e2-4a43a835caf8,1,0,43c18cae-21a9-413b-a350-d5cf826980f0,43c18cae-21a9-413b-a350-d5cf826980f0,1,0,16773cdb-b979-42d5-a2a5-d4b79e8737bd,16773cdb-b979-42d5-a2a5-d4b79e8737bd,1,0,c28a190a-f487-4e99-b8f8-6928268086f8,c28a190a-f487-4e99-b8f8-6928268086f8,1,0,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,1,0,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,1,0,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,1,0,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,1,0,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,1,0,f321e378-6d50-4567-8434-813f367d3a65,f321e378-6d50-4567-8434-813f367d3a65,1,0,27246fd8-a8a3-4244-b49a-c0372a812167,27246fd8-a8a3-4244-b49a-c0372a812167,1,0,7d91ff3c-1ec2-41d0-9d38-fa8f8534c55c,7d91ff3c-1ec2-41d0-9d38-fa8f8534c55c,1,0,6da15c1d-e144-472e-9a3a-2797c7df16e4,6da15c1d-e144-472e-9a3a-2797c7df16e4,1,0,350a7b29-4ba3-43c4-b77d-47085f53d760,350a7b29-4ba3-43c4-b77d-47085f53d760,1,0,a151715d-c89e-4e4c-b8fd-d7d6ad71e603,a151715d-c89e-4e4c-b8fd-d7d6ad71e603,1,0,c48c091c-0d46-4d1f-bc84-72b0537c7ec2,c48c091c-0d46-4d1f-bc84-72b0537c7ec2,1,0,122a94c7-bb89-4f11-b583-b56808c1df47,122a94c7-bb89-4f11-b583-b56808c1df47,1,0,f4371f32-95a5-40f4-bc5e-a5b9a12a86eb,f4371f32-95a5-40f4-bc5e-a5b9a12a86eb,1,0,5f434c45-a5ff-4a07-8662-6a592298c7e9,5f434c45-a5ff-4a07-8662-6a592298c7e9,1,0,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,1,0,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,1,0,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,1,0,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,1,0,5d338e31-a56b-45f0-8a62-0270ca543f6a,5d338e31-a56b-45f0-8a62-0270ca543f6a,1,0,afd8251f-548b-4bb6-8ad0-4f412bec7cb6,afd8251f-548b-4bb6-8ad0-4f412bec7cb6,1,0,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,1,0,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,1,0,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,1,0,c11d967b-1250-4345-90b0-011a96c5ae5e,c11d967b-1250-4345-90b0-011a96c5ae5e,1,0,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,1,0,24eed105-f612-4340-ad79-388a7b39b58c,24eed105-f612-4340-ad79-388a7b39b58c,1,0,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,1,0,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,1,0,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,1,0,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,1,0,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,1,0,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,1,0,6a2add61-edb7-4561-bae9-06b3741e7726,6a2add61-edb7-4561-bae9-06b3741e7726,1,0,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,1,0,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,1,0,b572b1d0-4404-421c-9950-1cc1342ca5f3,b572b1d0-4404-421c-9950-1cc1342ca5f3,1,0,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,1,0,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,1,0,02082174-7276-4256-b9bb-9872065a01c4,02082174-7276-4256-b9bb-9872065a01c4,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,1,0,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,1,0,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,1,0,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,1,0,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,1,0,ae3876e2-bd06-415b-9d9a-b77d787be09e,ae3876e2-bd06-415b-9d9a-b77d787be09e,1,0,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,1,0,4718392b-477c-496b-9d28-ddbdaa7a04f2,4718392b-477c-496b-9d28-ddbdaa7a04f2,1,0,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,1,0,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,1,0,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,1,0,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,1,0,1260b5dd-0a74-43df-bdbb-215b253da28e,1260b5dd-0a74-43df-bdbb-215b253da28e,1,0,e37a7cf1-a7b5-4b6e-b818-0915598c8505,e37a7cf1-a7b5-4b6e-b818-0915598c8505,1,0,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,1,0,f3abaf8e-0230-43db-aaf0-716fc02047eb,f3abaf8e-0230-43db-aaf0-716fc02047eb,1,0,b76c3bd6-924a-4378-acbe-6f17232b201b,b76c3bd6-924a-4378-acbe-6f17232b201b,1,0,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,1,0,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,1,0,3b1d0974-6031-4841-b632-aadd4ff13b2c,3b1d0974-6031-4841-b632-aadd4ff13b2c,1,0,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,1,0,9d358304-3fd0-4ec6-9400-cc498ff2f751,9d358304-3fd0-4ec6-9400-cc498ff2f751,1,0,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,1,0,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,1,0,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,1,0,74067eee-6cd4-4ae3-becc-457ecb51dc9a,74067eee-6cd4-4ae3-becc-457ecb51dc9a,1,0,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,1,0,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,1,0,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,1,0,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,1,0,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,1,0,343b979a-97e3-4eac-a314-3bd3eea9c15c,343b979a-97e3-4eac-a314-3bd3eea9c15c,1,0,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,1,0,f5bb88eb-c239-4ae3-a297-dfbbd679e008,f5bb88eb-c239-4ae3-a297-dfbbd679e008,1,0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,1,0,f259b6b4-d582-429f-a16f-027a6bcb7438,f259b6b4-d582-429f-a16f-027a6bcb7438,1,0,9f32e85c-2ed6-41db-b0ec-6d8596940e80,9f32e85c-2ed6-41db-b0ec-6d8596940e80,1,0,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,1,0,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,1,0,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,1,0,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,1,0,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,1,0,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,1,0,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,1,0,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,1,0,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,1,0,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,1,0,aa0c32ae-da52-4df9-8b77-99ea31f8df81,aa0c32ae-da52-4df9-8b77-99ea31f8df81,1,0,d7dcd391-3a0e-4aa9-9b53-467a1de67593,d7dcd391-3a0e-4aa9-9b53-467a1de67593,1,0,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,1,0,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,1,0,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,1,0,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,1,0,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,1,0,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,1,0,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,1,0,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,1,0,00e48a23-eb5b-4a29-b36c-218ab9760f23,00e48a23-eb5b-4a29-b36c-218ab9760f23,1,0,331db120-ba88-4eb3-a8ec-10691be82e2d,331db120-ba88-4eb3-a8ec-10691be82e2d,1,0,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,1,0,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,1,0,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,1,0,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,1,0,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,1,0,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,1,0,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,1,0,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,1,0,35823167-b658-4563-8d01-b0aab05aa619,35823167-b658-4563-8d01-b0aab05aa619,1,0,9ee03c48-c338-4655-9095-d490231df2a3,9ee03c48-c338-4655-9095-d490231df2a3,1,0,3924c17c-6ee3-4406-8023-0a79a242e389,3924c17c-6ee3-4406-8023-0a79a242e389,1,0,84a159ed-bc5f-4497-94d1-94b187b0bffe,84a159ed-bc5f-4497-94d1-94b187b0bffe,1,0,0a126b0d-28c8-4ed4-836f-e39e17693ad0,0a126b0d-28c8-4ed4-836f-e39e17693ad0,1,0,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,1,0,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,1,0,f95adb50-fa0b-434c-93dd-b7fd211220b7,f95adb50-fa0b-434c-93dd-b7fd211220b7,1,0,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,1,0,b938ff17-e31c-4762-a96f-e1288f746a1d,b938ff17-e31c-4762-a96f-e1288f746a1d,1,0,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,1,0,bd69bf55-dee0-4553-8f90-5fd025c0f773,bd69bf55-dee0-4553-8f90-5fd025c0f773,1,0,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,1,0,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,1,0,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,1,0,f415296e-fceb-4835-abe9-17bb17a5d5e5,f415296e-fceb-4835-abe9-17bb17a5d5e5,1,0,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,1,0,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,1,0,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,1,0,c8679d82-075c-4556-8231-c004d144fe61,c8679d82-075c-4556-8231-c004d144fe61,1,0,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,1,0,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,1,0,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,1,0,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,1,0,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,1,0,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,1,0,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,1,0,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,1,0,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,1,0,91d7687b-7627-473f-a08d-433f9d385107,91d7687b-7627-473f-a08d-433f9d385107,1,0,83db1b00-e9e3-41da-8a59-47589dcfd618,83db1b00-e9e3-41da-8a59-47589dcfd618,1,0,91d2d798-1498-4c52-aa7b-99db4b992876,91d2d798-1498-4c52-aa7b-99db4b992876,1,0,e85a03d3-e7c7-4058-992a-515a557d9e52,e85a03d3-e7c7-4058-992a-515a557d9e52,1,0,d3a1d247-8f4a-45af-9861-7e313a100209,d3a1d247-8f4a-45af-9861-7e313a100209,1,0,837f27c1-26d7-4f24-a691-55dd9ed04ec5,837f27c1-26d7-4f24-a691-55dd9ed04ec5,1,0,9e2ddfbb-8d6b-4b82-8a2b-62c2ea990b10,9e2ddfbb-8d6b-4b82-8a2b-62c2ea990b10,1,0,5005655f-22b2-49e6-be4f-b15d768d10b2,5005655f-22b2-49e6-be4f-b15d768d10b2,1,0,208040c8-e98b-4c15-a2ec-38d44bfcfa6c,208040c8-e98b-4c15-a2ec-38d44bfcfa6c,1,0,f6811ee2-769e-488d-9ca0-70f1fe521ca9,f6811ee2-769e-488d-9ca0-70f1fe521ca9,1,0,83385f31-2cdf-44a1-85c3-461e4ad5fd45,83385f31-2cdf-44a1-85c3-461e4ad5fd45,1,0,b55b06db-604e-4fb9-9253-638c747bd8f9,b55b06db-604e-4fb9-9253-638c747bd8f9,1,0,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,1,0,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,1,0,deb69010-80b0-4e28-acc7-8c50e8e6f873,deb69010-80b0-4e28-acc7-8c50e8e6f873,1,0,1a9177fe-6699-42b3-9588-eed9c6008c2d,1a9177fe-6699-42b3-9588-eed9c6008c2d,1,0,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,1,0,ae698468-f42a-4400-aee6-fd849740e634,ae698468-f42a-4400-aee6-fd849740e634,1,0,0b88b50d-6aa1-4364-82bd-1c0c0da93a58,0b88b50d-6aa1-4364-82bd-1c0c0da93a58,1,0,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,1,0,6438435e-97cc-4bd2-98dc-e21cee55bb0f,6438435e-97cc-4bd2-98dc-e21cee55bb0f,1,0,31b93291-a58f-4176-8318-58200e8bc56e,31b93291-a58f-4176-8318-58200e8bc56e,1,0,293be1bc-49cb-4a99-add8-2a3a46829718,293be1bc-49cb-4a99-add8-2a3a46829718,1,0,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,1,0,5001bea4-c8f9-4950-9eda-d33125e3bb46,5001bea4-c8f9-4950-9eda-d33125e3bb46,1,0,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,4ac6d0dd-0007-46b8-bfcc-93c0f85b6b85,1,0,e815010d-e03d-46e4-b482-c1556902cc26,e815010d-e03d-46e4-b482-c1556902cc26,1,0,d4ab930a-ddaa-4552-afed-2618af822365,d4ab930a-ddaa-4552-afed-2618af822365,1,0,dd03e170-4186-495b-ae1c-fc66385d7ccf,dd03e170-4186-495b-ae1c-fc66385d7ccf,1,0,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,1,0,cdef5df6-f3a1-4950-b197-4f375914f885,cdef5df6-f3a1-4950-b197-4f375914f885,1,0,c1caff49-dc4b-4b3e-be47-122ea8b70416,c1caff49-dc4b-4b3e-be47-122ea8b70416,1,0,a1185a4c-7351-48b0-b662-61f61a1ad715,a1185a4c-7351-48b0-b662-61f61a1ad715,1,0,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,4ee0c7a4-cc26-438d-8908-f6a900c99d8b,1,0,71d03545-df45-4c70-aa0d-3b916f2a9041,71d03545-df45-4c70-aa0d-3b916f2a9041,1,0,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,da9b0d3d-27dd-4a85-b0df-ec2f54d884f6,1,0,28a25822-2306-409a-a7c8-6f7e42bf25e8,28a25822-2306-409a-a7c8-6f7e42bf25e8,1,0,89cb31da-a980-4207-a537-85cd47f08d32,89cb31da-a980-4207-a537-85cd47f08d32,1,0,a45fa0c3-c363-4465-861f-13cedfeb79dd,a45fa0c3-c363-4465-861f-13cedfeb79dd,1,0,a72517c3-8c91-4e40-81ac-83c762789e87,a72517c3-8c91-4e40-81ac-83c762789e87,1,0,0233b335-7e26-4661-9850-8ab09d3178e3,0233b335-7e26-4661-9850-8ab09d3178e3,1,0,d942d536-5d01-4571-b910-abd973996a38,d942d536-5d01-4571-b910-abd973996a38,1,0,b82a7103-b872-49c3-b632-81d5a0051136,b82a7103-b872-49c3-b632-81d5a0051136,1,0,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,1,0,20c2053c-8ebd-4c07-8d95-956b424d047c,20c2053c-8ebd-4c07-8d95-956b424d047c,1,0,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,1,0,08fe5e70-ac6b-427a-b6f2-0e2f7848fa6b,08fe5e70-ac6b-427a-b6f2-0e2f7848fa6b,1,0,bef6081e-f377-41d6-83a1-b0e218a3fb46,bef6081e-f377-41d6-83a1-b0e218a3fb46,1,0,9b67bfd5-ef23-4205-b7ba-9466517e9999,9b67bfd5-ef23-4205-b7ba-9466517e9999,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,1,0,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,1,0,63fd620c-59a5-493c-a39e-457fad6fe35f,63fd620c-59a5-493c-a39e-457fad6fe35f,1,0,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,1,0,89888993-3b05-475e-ac76-3cd7ced93250,89888993-3b05-475e-ac76-3cd7ced93250,1,0,129f704b-cc63-4a4e-b6a7-9e53de4537a2,129f704b-cc63-4a4e-b6a7-9e53de4537a2,1,0,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,1,0,592f55e1-b004-44ef-878a-6c2016ccbeb0,592f55e1-b004-44ef-878a-6c2016ccbeb0,1,0,19add2bd-eede-4a05-901b-cf8ce49a638f,19add2bd-eede-4a05-901b-cf8ce49a638f,1,0,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,1,0,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,1,0,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,1,0,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,1,0,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,1,0,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,1,0,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,1,0,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,1,0,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,1,0,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,1,0,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,1,0,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1,0,9043894d-f89a-459f-a4ea-77fe3633aa91,9043894d-f89a-459f-a4ea-77fe3633aa91,1,0,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1,0,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,1,0,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,1,0,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,1,0,d33f4859-b68d-4d72-8f4c-a38cf47edb01,d33f4859-b68d-4d72-8f4c-a38cf47edb01,1,0,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,1,0,8c4c7982-36cc-4dc9-b055-9954f61e6365,8c4c7982-36cc-4dc9-b055-9954f61e6365,1,0,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,1,0,ba51c7f5-0074-4c99-a27d-ddfd4bfcc068,ba51c7f5-0074-4c99-a27d-ddfd4bfcc068,1,0,5f3d5a05-a581-462d-96a2-2750ba0e0481,5f3d5a05-a581-462d-96a2-2750ba0e0481,1,0,477ab478-b336-4bac-898f-e20e3a4039b5,477ab478-b336-4bac-898f-e20e3a4039b5,1,0,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,1,0,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,1,0,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,1,0,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,1,0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,1,0,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,4f86b052-b81e-49b8-9fa8-82b2ecbc8e01,1,0,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,1,0,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,1,0,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,1,0,e4216976-2747-4078-81d4-8ffab668c1f7,e4216976-2747-4078-81d4-8ffab668c1f7,1,0,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,1,0,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,1,0,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,1,0,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,1,0,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,1,0,6c66ff27-19af-4728-95a8-463fd1c4dcd3,6c66ff27-19af-4728-95a8-463fd1c4dcd3,1,0,9ed2c756-80a1-4559-8494-b7a9b82a4519,9ed2c756-80a1-4559-8494-b7a9b82a4519,1,0,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,1,0,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,1,0,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,1,0,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,1,0,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,1,0,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,1,0,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,1,0,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,1,0,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,1,0,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,1,0,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,1,0,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,1,0,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,1,0,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,1,0,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,1,0,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,1,0,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,1,0,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,1,0,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,1,0,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,1,0,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,e693cdd0-8ead-4ba5-adec-86bab74ee7cd,1,0,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,1,0,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,1,0,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,1,0,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,1,0,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,1,0,9b4b7424-1af7-4d80-8404-8819fcfeae75,9b4b7424-1af7-4d80-8404-8819fcfeae75,1,0,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,1,0,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,1,0,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,1,0,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,1,0,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,1,0,251ca8fe-09eb-45ca-be8b-0d8faf927009,251ca8fe-09eb-45ca-be8b-0d8faf927009,1,0,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,1,0,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,1,0,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,1,0,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,1,0,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,1,0,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,23abf9ba-63f9-4173-a9ce-3cbdf1ec3a52,1,0,973609a2-5b5d-45c4-9606-a13d0de1a09b,973609a2-5b5d-45c4-9606-a13d0de1a09b,1,0,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,1,0,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,1,0,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,1,0,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,1,0,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,1,0,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,1,0,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,1,0,48cefa96-46c7-4870-a096-951dcbae479a,48cefa96-46c7-4870-a096-951dcbae479a,1,0,d74e01cc-941b-4974-8771-0bd2e0d86724,d74e01cc-941b-4974-8771-0bd2e0d86724,1,0,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,1,0,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,1,0,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,1,0,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,1,0,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,1,0,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,1,0,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,1,0,aae09896-3b22-4d7d-9059-e47660f8b88b,aae09896-3b22-4d7d-9059-e47660f8b88b,1,0,845530cd-36fb-44c3-b30a-730985c9ca2d,845530cd-36fb-44c3-b30a-730985c9ca2d,1,0,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,1,0,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,1,0,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,1,0,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,1,0,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,1,0,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,1,0,ce5549bd-ba99-4259-86a3-36521bad59f5,ce5549bd-ba99-4259-86a3-36521bad59f5,1,0,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,1,0,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,1,0,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,1,0,3f3f1b41-57a9-4a82-bdfa-89a6653479ab,3f3f1b41-57a9-4a82-bdfa-89a6653479ab,1,0,fd12fbe2-56a2-4c9e-a072-989d826a5ea3,fd12fbe2-56a2-4c9e-a072-989d826a5ea3,1,0,08552af7-3c44-42c6-94c5-63a2316127fc,08552af7-3c44-42c6-94c5-63a2316127fc,1,0,41f6f6d1-b7cf-4477-907b-ce69fc08c799,41f6f6d1-b7cf-4477-907b-ce69fc08c799,1,0,9f1a61dd-b04f-48ae-b0c0-17cf23bdb04b,9f1a61dd-b04f-48ae-b0c0-17cf23bdb04b,1,0,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,1,0,a300ecc3-8031-4a50-a17d-b08cf3a72139,a300ecc3-8031-4a50-a17d-b08cf3a72139,1,0,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,1,0,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,1,0,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,1,0,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,1,0,657b8663-713c-4a80-81e1-8c0166742a35,657b8663-713c-4a80-81e1-8c0166742a35,1,0,866438d1-1223-4768-9c96-e6cb12f1a4d5,866438d1-1223-4768-9c96-e6cb12f1a4d5,1,0,d416cc2a-425f-4c01-a550-5a755ed78cc8,d416cc2a-425f-4c01-a550-5a755ed78cc8,1,0,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,1,0,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,1,0,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,1,0,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,1,0,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,1,0,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,1,0,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,1,0,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,1,0,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,1,0,aaaa7d41-3399-41b5-b882-58af38121494,aaaa7d41-3399-41b5-b882-58af38121494,1,0,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,1,0,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,1,0,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,1,0,a6587758-f7af-4f85-81b4-4312c725824e,a6587758-f7af-4f85-81b4-4312c725824e,1,0,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,1,0,63470706-f14b-4733-87c2-d1173f5d7e7a,63470706-f14b-4733-87c2-d1173f5d7e7a,1,0,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,1,0,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,1,0,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,1,0,76cdcc51-0e6a-4f9c-a115-1864998c2add,76cdcc51-0e6a-4f9c-a115-1864998c2add,1,0,71c3e5d3-7504-433f-9d48-7c287b2b863b,71c3e5d3-7504-433f-9d48-7c287b2b863b,1,0,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,1,0,0d8c215d-1210-47a2-897d-a3257b9f849a,0d8c215d-1210-47a2-897d-a3257b9f849a,1,0,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,1,0,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,0f0456a8-ca04-4de4-9d9b-e8b0fdb8b860,1,0,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,1,0,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,1,0,e7a63151-fc1a-4563-8768-26d854ab012b,e7a63151-fc1a-4563-8768-26d854ab012b,1,0,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,1,0,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,1,0,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,1,0,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,1,0,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,1,0,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,1,0,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,1,0,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,1,0,eb276904-cad7-4401-bb78-2d13946291f1,eb276904-cad7-4401-bb78-2d13946291f1,1,0,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,1,0,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,1,0,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,1,0,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,1,0,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,1,0,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,1,0,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,1,0,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,1,0,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,1,0,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,1,0,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,1,0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,1,0,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,1,0,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,1,0,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,1,0,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,1,0,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,1,0,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,1,0,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1,0,7a944c45-9b3d-411f-b2ef-de3c896092bb,7a944c45-9b3d-411f-b2ef-de3c896092bb,1,0,d2762764-b5c0-4aeb-8e89-3371972f22d8,d2762764-b5c0-4aeb-8e89-3371972f22d8,1,0,54f3902b-f29a-4f04-8c9d-68c318fcd076,54f3902b-f29a-4f04-8c9d-68c318fcd076,1,0,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,1,0,323997ca-488d-4d84-aa44-da60b6b4d414,323997ca-488d-4d84-aa44-da60b6b4d414,1,0,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,1,0,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1,0,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,1,0,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,1,0,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,1,0,44afff59-0590-4929-93b8-7b49735f21b5,44afff59-0590-4929-93b8-7b49735f21b5,1,0,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,1,0,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,1,0,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,1,0,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,1,0,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,1,0,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,1,0,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,1,0,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,1,0,9892f922-8745-4164-a200-94b5edc1ea0a,9892f922-8745-4164-a200-94b5edc1ea0a,1,0,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,1,0,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,1,0,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,1,0,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,1,0,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,1,0,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,1,0,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,1,0,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,1,0,26986f8d-d56d-4641-9184-2632d0881cca,26986f8d-d56d-4641-9184-2632d0881cca,1,0,92bec607-7217-42f6-8eb9-ace759672336,92bec607-7217-42f6-8eb9-ace759672336,1,0,144676de-f369-49f1-bb21-d60e073936df,144676de-f369-49f1-bb21-d60e073936df,1,0,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,1,0,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,1,0,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,1,0,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,1,0,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,1,0,a2a51b70-9570-4f53-9d30-e9a9b099a475,a2a51b70-9570-4f53-9d30-e9a9b099a475,1,0,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,1,0,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,1,0,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,1,0,fdcbe67c-55fb-444d-bed8-cee956ca3530,fdcbe67c-55fb-444d-bed8-cee956ca3530,1,0,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,1,0,6ff5b3cb-efff-430d-bf0a-957405f116ca,6ff5b3cb-efff-430d-bf0a-957405f116ca,1,0,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,1,0,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,1,0,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,1,0,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,1,0,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,1,0,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,1,0,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,1,0,b8b267e3-75af-4140-b515-d99e8e748e84,b8b267e3-75af-4140-b515-d99e8e748e84,1,0,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,1,0,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,1,0,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,1,0,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,1,0,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,1,0,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,40c8b547-35d0-4dbd-8fa1-ba108c3022b1,1,0,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,1,0,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,1,0,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,1,0,540be4e1-6eae-48e2-a645-8bd0a1259c65,540be4e1-6eae-48e2-a645-8bd0a1259c65,1,0,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,1,0,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,1,0,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,5c6b9fb5-7d29-4161-a81b-7c618ca07a47,1,0,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,1,0,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,1,0,83ead93b-4ff6-487d-934e-25088944fccc,83ead93b-4ff6-487d-934e-25088944fccc,1,0,764c76cc-0473-4633-868d-02f96aa43c10,764c76cc-0473-4633-868d-02f96aa43c10,1,0,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,1,0,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,1,0,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,1,0,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,1,0,9416a741-5106-454e-b953-81f3d99d5e71,9416a741-5106-454e-b953-81f3d99d5e71,1,0,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,1,0,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,1,0,30f6aedf-946f-400c-822d-5fa375b8fb1d,30f6aedf-946f-400c-822d-5fa375b8fb1d,1,0,46e313f7-54da-4884-89e8-cdba6ae30d30,46e313f7-54da-4884-89e8-cdba6ae30d30,1,0,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,1,0,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,1,0,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,1,0,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,1,0,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,1,0,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,1,0,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,1,0,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1,0,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,1,0,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,1,0,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,1,0,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,1,0,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,1,0,5a088468-4065-4e0c-9b84-1162de8d3fdd,5a088468-4065-4e0c-9b84-1162de8d3fdd,1,0,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,1,0,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,1,0,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,1,0,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,1,0,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,1,0,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,1,0,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,1,0,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,1,0,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,1,0,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,1,0,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,1,0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,1,0,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,1,0,259cb8f5-9e78-4b2f-941b-ccb4b1112c8b,259cb8f5-9e78-4b2f-941b-ccb4b1112c8b,1,0,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,1,0,73c1a829-0191-486b-97a0-7f333c6f8011,73c1a829-0191-486b-97a0-7f333c6f8011,1,0,5504f5d1-35d8-4a47-a0e1-003fe00395c1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,1,0,56242b05-d722-4d4a-82d9-517e0e169d0b,56242b05-d722-4d4a-82d9-517e0e169d0b,1,0,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,1,0,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,1,0,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,1,0,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,1,0,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,1,0,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,1,0,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,1,0,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,1,0,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,1,0,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,1,0,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,1,0,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,1,0,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,1,0,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,1,0,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,1,0,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,1,0,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,1,0,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,1,0,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,1,0,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,1,0,c1c62215-41b8-40bc-a806-1347db5b03e9,c1c62215-41b8-40bc-a806-1347db5b03e9,1,0,a24322f3-c7a5-4b25-bad6-9c75712a3e58,a24322f3-c7a5-4b25-bad6-9c75712a3e58,1,0,679d2b3b-a354-4dec-b49d-ab1163756e3a,679d2b3b-a354-4dec-b49d-ab1163756e3a,1,0,665e96bc-8ec1-4008-b9bd-db95a234b9b8,665e96bc-8ec1-4008-b9bd-db95a234b9b8,1,0,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,1,0,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,1,0,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,1,0,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,1,0,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,1,0,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,1,0,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,1,0,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,1,0,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,1,0,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,1,0,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,1,0,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,1,0,73d8b319-9bea-4638-a602-23c12f37c227,73d8b319-9bea-4638-a602-23c12f37c227,1,0,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,1,0,a43e9de0-2921-4c58-a5f8-7446258be967,a43e9de0-2921-4c58-a5f8-7446258be967,1,0,307656e3-df7f-46e7-946c-bbd439265c95,307656e3-df7f-46e7-946c-bbd439265c95,1,0,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,1,0,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,1,0,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,1,0,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,1,0,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,1,0,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,1,0,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,1,0,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,1,0,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,1,0,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,1,0,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,1,0,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,1,0,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,1,0,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,1,0,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,1,0,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,1,0,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,1,0,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,1,0,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,1,0,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,1,0,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,1,0,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,1,0,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,1,0,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,1,0,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,1,0,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,1,0,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,1,0,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,1,0,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,1,0,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,1,0,dd383422-dddb-4a81-9326-015fd345b5c1,dd383422-dddb-4a81-9326-015fd345b5c1,1,0,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,1,0,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,1,0,aa299fc6-051f-487c-ada4-451e08c4763c,aa299fc6-051f-487c-ada4-451e08c4763c,1,0,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,1,0,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,1,0,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,1,0,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,1,0,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,1,0,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,1,0,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,1,0,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,1,0,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,1,0,7fe61c5d-30bc-440d-9e40-12ff3b296616,7fe61c5d-30bc-440d-9e40-12ff3b296616,1,0,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,1,0,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,1,0,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,1,0,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,1,0,13dee5d8-f165-48de-9ccb-3ef0239f4b27,13dee5d8-f165-48de-9ccb-3ef0239f4b27,1,0,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,1,0,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,1,0,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,1,0,eb3f959c-94a4-4e77-b9f9-e81954254079,eb3f959c-94a4-4e77-b9f9-e81954254079,1,0,71dfde27-3762-4dd0-9252-6e703ce1b101,71dfde27-3762-4dd0-9252-6e703ce1b101,1,0,d8fc4644-5351-443c-8b5d-5de2c4b855d1,d8fc4644-5351-443c-8b5d-5de2c4b855d1,1,0,0f039952-09d3-49c8-b909-e8333a3fc8f9,0f039952-09d3-49c8-b909-e8333a3fc8f9,1,0,99387869-f8b1-4269-bd26-e39380d17b69,99387869-f8b1-4269-bd26-e39380d17b69,1,0,4b2acdb9-fefd-4735-9dfd-d7d141967f3c,4b2acdb9-fefd-4735-9dfd-d7d141967f3c,1,0,bc07d643-a044-4882-b95b-2173a197fd0e,bc07d643-a044-4882-b95b-2173a197fd0e,1,0,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,1,0,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,1,0,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,1,0,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,1,0,36d6b0e1-5e10-408a-8eb1-09839e57690f,36d6b0e1-5e10-408a-8eb1-09839e57690f,1,0,6423b849-7ca4-4501-8856-445157d7e5df,6423b849-7ca4-4501-8856-445157d7e5df,1,0,0819e2b0-1eb0-41b3-ab89-0974bd926fb6,0819e2b0-1eb0-41b3-ab89-0974bd926fb6,1,0,e814287f-1c13-4f74-9507-d22a62394fd2,e814287f-1c13-4f74-9507-d22a62394fd2,1,0,417ac987-7369-45af-b670-fdffb048f33d,417ac987-7369-45af-b670-fdffb048f33d,1,0,640a5d72-dbc7-421b-afdb-cc3a4622ae04,640a5d72-dbc7-421b-afdb-cc3a4622ae04,1,0,79da84c1-5ac2-4472-8eb9-f0484b9582c2,79da84c1-5ac2-4472-8eb9-f0484b9582c2,1,0,2d0b161b-7d69-4ec4-a483-79bd458cb62c,2d0b161b-7d69-4ec4-a483-79bd458cb62c,1,0,f178bc1b-ebea-4fa9-8861-fe0d91f103e4,f178bc1b-ebea-4fa9-8861-fe0d91f103e4,1,0,e33a9c94-7e98-4b38-ba20-4546a90b2937,e33a9c94-7e98-4b38-ba20-4546a90b2937,1,0,1610e73c-58df-41cc-8349-51b920806821,1610e73c-58df-41cc-8349-51b920806821,1,0,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,ae37f465-1ee5-4f06-a834-deea9e9e0eb3,1,0,c6ccf82f-f130-4037-9e89-1e0365b996a4,c6ccf82f-f130-4037-9e89-1e0365b996a4,1,0,c532963e-0d92-44b9-9cfc-43ed2744ccf9,c532963e-0d92-44b9-9cfc-43ed2744ccf9,1,0,6aff2855-24d4-4f90-b617-53326efdd1bd,6aff2855-24d4-4f90-b617-53326efdd1bd,1,0,0107a9c7-4c85-49c4-918a-925d85d57a0b,0107a9c7-4c85-49c4-918a-925d85d57a0b,1,0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,6e1efa55-969b-4c2b-8af2-b11d672db5f0,1,0,e5b578a1-e33b-4d49-8064-427aa928a844,e5b578a1-e33b-4d49-8064-427aa928a844,1,0,f74e97ad-fef6-4122-a056-86f2d59dfdaf,f74e97ad-fef6-4122-a056-86f2d59dfdaf,1,0,df1ef691-1e86-4a80-8671-53b3d4504bfb,df1ef691-1e86-4a80-8671-53b3d4504bfb,1,0,474b9918-23da-4289-91a9-9115526c9b5d,474b9918-23da-4289-91a9-9115526c9b5d,1,0,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1cf7be60-fd84-430d-b1b5-5619c51b8b3f,1,0,60aa9d44-5986-490e-8093-f65e194b3607,60aa9d44-5986-490e-8093-f65e194b3607,1,0,a36dee5e-7184-4caf-bf46-3977b165093b,a36dee5e-7184-4caf-bf46-3977b165093b,1,0,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,aa3c61a7-c905-4b5a-a44d-e2ac5d79158a,1,0,182916b2-972b-4e39-93ba-d45aa7a195f5,182916b2-972b-4e39-93ba-d45aa7a195f5,1,0,2b654a53-7ce8-421f-aaf5-aa1451d91415,2b654a53-7ce8-421f-aaf5-aa1451d91415,1,0,30e55306-ea5c-4ef4-9903-ea030afa3d85,30e55306-ea5c-4ef4-9903-ea030afa3d85,1,0,234c1a72-8349-472a-8373-2a25ce6252f2,234c1a72-8349-472a-8373-2a25ce6252f2,1,0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,b1ccb9f7-11ff-4ad2-8806-d64de84662f0,1,0,539e0db9-be24-4086-9632-af20553ee50f,539e0db9-be24-4086-9632-af20553ee50f,1,0,b9adeb51-a009-4e83-85f8-bfa1547429d6,b9adeb51-a009-4e83-85f8-bfa1547429d6,1,0,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,ac9f4c2e-316b-4f96-8fe6-fb5a5a7e48ed,1,0,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,da808c0e-b1b0-4d46-8c63-2bbe7d0dca9d,1,0,b848d70a-9d08-4b1a-8df1-17697432516d,b848d70a-9d08-4b1a-8df1-17697432516d,1,0,9a30b92d-0c5b-4e11-a741-2b6efa8ac229,9a30b92d-0c5b-4e11-a741-2b6efa8ac229,1,0,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,1,0,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,1,0,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,1,0,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,1,0,e8bec681-d269-41ba-9184-556cbcc27d74,e8bec681-d269-41ba-9184-556cbcc27d74,1,0,b8aaef91-f72c-4127-a494-771c13694ca4,b8aaef91-f72c-4127-a494-771c13694ca4,1,0,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,1,0,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,1,0,3e090261-4aa2-4ece-9f77-62df83c890b3,3e090261-4aa2-4ece-9f77-62df83c890b3,1,0,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,1,0,9292034c-24e8-49a7-9b77-7974e117847d,9292034c-24e8-49a7-9b77-7974e117847d,1,0,3327b7d4-62fc-44cc-83b4-c449bfa4e706,3327b7d4-62fc-44cc-83b4-c449bfa4e706,1,0,43ecee25-68eb-48cf-bbaa-aee71052438f,43ecee25-68eb-48cf-bbaa-aee71052438f,1,0,93799f8b-0188-4546-8815-35e733bcc2b1,93799f8b-0188-4546-8815-35e733bcc2b1,1,0,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,1,0,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,1,0,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,1,0,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,1,0,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,1,0,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,1,0,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,1,0,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,1,0,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,1,0,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,1,0,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,1,0,1b4feda1-e555-4b85-b236-b21153a7246f,1b4feda1-e555-4b85-b236-b21153a7246f,1,0,61d3cef4-2c42-417d-a762-a2d2f5a28924,61d3cef4-2c42-417d-a762-a2d2f5a28924,1,0,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,1,0,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,1,0,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,1,0,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,1,0,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,1,0,7ab6acda-6732-4582-8092-d43f9a98a28d,7ab6acda-6732-4582-8092-d43f9a98a28d,1,0,5ab1d405-bfc3-4440-8cdd-3a63013b064d,5ab1d405-bfc3-4440-8cdd-3a63013b064d,1,0,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,1,0,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,1,0,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,1,0,6bcba052-4d81-409d-b1a2-eed6be6fb024,6bcba052-4d81-409d-b1a2-eed6be6fb024,1,0,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,1,0,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,1,0,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,1,0,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,1,0,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,1,0,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,1,0,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,1,0,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,1,0,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,1,0,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,1,0,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,1,0,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,1,0,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,1,0,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,1,0,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,1,0,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,1,0,093332f5-3eb4-478c-ac95-59dcdc96765a,093332f5-3eb4-478c-ac95-59dcdc96765a,1,0,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,1,0,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,1,0,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,1,0,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,1,0,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,1,0,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,1,0,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,1,0,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,1,0,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,1,0,e72e59c0-391d-497e-9407-063e0edf573e,e72e59c0-391d-497e-9407-063e0edf573e,1,0,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,1,0,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,1,0,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,1,0,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,1,0,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,1,0,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,1,0,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,1,0,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,1,0,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,1,0,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,1,0,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,1,0,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,1,0,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,1,0,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,1,0,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,1,0,13b27ec3-2be9-4959-92e5-94ba7bb64f03,13b27ec3-2be9-4959-92e5-94ba7bb64f03,1,0,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,1,0,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,1,0,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,1,0,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,1,0,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,1,0,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,1,0,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,1,0,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,1,0,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,1,0,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,1,0,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,1,0,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,1,0,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,1,0,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,1,0,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,1,0,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,1,0,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,1,0,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,1,0,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,1,0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,1,0,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,1,0,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,1,0,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,1,0,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,1,0,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,1,0,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,1,0,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,1,0,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,1,0,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,1,0,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,1,0,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,1,0,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,1,0,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,1,0,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,1,0,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,1,0,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,1,0,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,1,0,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,1,0,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,1,0,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,1,0,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,1,0,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,1,0,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,1,0,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,1,0,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,1,0,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,1,0,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,1,0,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,1,0,f9950ab5-1077-4033-bbbf-53899a1bcf33,f9950ab5-1077-4033-bbbf-53899a1bcf33,1,0,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,1,0,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,1,0,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,1,0,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,1,0,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,1,0,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,1,0,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,1,0,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1,0,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,1,0,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,1,0,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,1,0,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,1,0,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,1,0,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,1,0,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,1,0,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,1,0,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,1,0,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,1,0,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,1,0,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,1,0,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,1,0,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,1,0,35828c88-f1ec-42e7-b189-78748931ee4a,35828c88-f1ec-42e7-b189-78748931ee4a,1,0,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,1,0,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1,0,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,1,0,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,1,0,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,1,0,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,1,0,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,1,0,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,1,0,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,1,0,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,1,0,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,1,0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,1,0,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,1,0,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,1,0,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,1,0,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,1,0,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,1,0,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,1,0,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,1,0,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,1,0,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,1,0,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,1,0,67a04d72-afea-487a-b629-e4b7dfc1df32,67a04d72-afea-487a-b629-e4b7dfc1df32,1,0,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,1,0,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,1,0,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,1,0,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,1,0,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,1,0,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,1,0,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,1,0,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,1,0,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,1,0,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,1,0,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,1,0,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,1,0,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,1,0,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,1,0,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,1,0,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,1,0,8f09cbed-6f24-461f-9b35-31c64310e74a,8f09cbed-6f24-461f-9b35-31c64310e74a,1,0,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,1,0,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,1,0,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,1,0,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,1,0,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,1,0,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,1,0,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,1,0,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,1,0,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,1,0,211d226f-dac6-43d5-8720-952da4339e35,211d226f-dac6-43d5-8720-952da4339e35,1,0,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,1,0,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,1,0,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,1,0,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,1,0,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,1,0,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,1,0,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,1,0,463b8966-a5f9-4a80-82b9-1608a1622e13,463b8966-a5f9-4a80-82b9-1608a1622e13,1,0,f02e807c-6cd3-4a4f-8dad-73bd56ee98ff,f02e807c-6cd3-4a4f-8dad-73bd56ee98ff,1,0,eefd00fe-3241-498f-aeb4-d429a86ab563,eefd00fe-3241-498f-aeb4-d429a86ab563,1,0,802d3489-318f-467d-a9f4-d7c644edac60,802d3489-318f-467d-a9f4-d7c644edac60,1,0,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,1,0,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,1,0,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,1,0,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,1,0,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,1,0,01cb357c-af28-4855-afae-45b6df19b344,01cb357c-af28-4855-afae-45b6df19b344,1,0,26e58429-1e08-454a-b4d7-2470390149fb,26e58429-1e08-454a-b4d7-2470390149fb,1,0,daa42bf5-9c32-4913-bc27-38f77ccc1a9f,daa42bf5-9c32-4913-bc27-38f77ccc1a9f,1,0,7620b61a-b0d1-4c71-bc80-72c48e17b96d,7620b61a-b0d1-4c71-bc80-72c48e17b96d,1,0,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,1,0,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,1,0,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,1,0,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,1,0,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,1,0,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,1,0,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,1,0,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,1,0,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,1,0,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,1,0,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,1,0,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,1,0,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,1,0,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,1,0,aa509aa3-dd45-41f3-82c7-59662c2e2c47,aa509aa3-dd45-41f3-82c7-59662c2e2c47,1,0,c4552529-e69e-4c5c-bd66-04b2f7dac281,c4552529-e69e-4c5c-bd66-04b2f7dac281,1,0,381b49ba-793a-4418-9fd4-598844fb72a6,381b49ba-793a-4418-9fd4-598844fb72a6,1,0,1aee302d-df31-49ea-b542-436dc1d79ae1,1aee302d-df31-49ea-b542-436dc1d79ae1,1,0,593509da-d33c-49ff-a62c-a28cbc4651c1,593509da-d33c-49ff-a62c-a28cbc4651c1,1,0,5e346a0b-a322-4565-adb9-70131fb05fa3,5e346a0b-a322-4565-adb9-70131fb05fa3,1,0,9a69c559-194b-4f74-9879-82740260f5f6,9a69c559-194b-4f74-9879-82740260f5f6,1,0,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,1,0,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,1,0,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,1,0,2e19fb7b-270f-4181-b4a1-640280bbbc5c,2e19fb7b-270f-4181-b4a1-640280bbbc5c,1,0,cf69b045-665d-4f6c-827f-5044beacd125,cf69b045-665d-4f6c-827f-5044beacd125,1,0,aa773eef-0c4a-49be-9f5e-9131bc041415,aa773eef-0c4a-49be-9f5e-9131bc041415,1,0,9b31e474-01d4-4c3b-a633-3a2ff3917d62,9b31e474-01d4-4c3b-a633-3a2ff3917d62,1,0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1,0,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,1,0,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,1,0,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,1,0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,1,0,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,1,0,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,1,0,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,1,0,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,1,0,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,1,0,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,1,0,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,1,0,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,1,0,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,1,0,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,1,0,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,1,0,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,1,0,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,1,0,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,1,0,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,1,0,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,1,0,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,1,0,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,1,0,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,1,0,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,1,0,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,1,0,37e3d914-643e-4963-b4a0-7bc6727c0c9b,37e3d914-643e-4963-b4a0-7bc6727c0c9b,1,0,b6902500-3e03-4e83-a077-00500abc00b6,b6902500-3e03-4e83-a077-00500abc00b6,1,0,d253aa54-a447-44aa-bb13-82fd1ce22af4,d253aa54-a447-44aa-bb13-82fd1ce22af4,1,0,8936f114-7a0e-4a4c-8752-ccacab410778,8936f114-7a0e-4a4c-8752-ccacab410778,1,0,55649242-42fd-468f-a1e4-f6cd8871f7a4,55649242-42fd-468f-a1e4-f6cd8871f7a4,1,0,980e0883-cd8f-48c8-896f-ef185650f5c2,980e0883-cd8f-48c8-896f-ef185650f5c2,1,0,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,1,0,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,1,0,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,1,0,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,1,0,cd869887-0b0e-43db-8b51-04fe4a1341d5,cd869887-0b0e-43db-8b51-04fe4a1341d5,1,0,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,1,0,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,1,0,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,1,0,cd8fd85f-f02e-4f11-b4b4-40670febfaca,cd8fd85f-f02e-4f11-b4b4-40670febfaca,1,0,3f023afb-c02a-42ee-9afe-0f47ef3fe721,3f023afb-c02a-42ee-9afe-0f47ef3fe721,1,0,d7fe80d3-7fcf-427e-a991-5384f0c3947e,d7fe80d3-7fcf-427e-a991-5384f0c3947e,1,0,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,1,0,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,1,0,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,1,0,16939af9-e459-43da-8e0d-5d5891af6e0c,16939af9-e459-43da-8e0d-5d5891af6e0c,1,0,1d736a09-6c8f-433a-bf5b-201996bf4c62,1d736a09-6c8f-433a-bf5b-201996bf4c62,1,0,157988ad-d482-41df-b3e3-f2a0383d7130,157988ad-d482-41df-b3e3-f2a0383d7130,1,0,33af87a9-db69-41da-a33a-0435da2155e3,33af87a9-db69-41da-a33a-0435da2155e3,1,0,c95831b4-7d1d-4a9a-b5d0-caa03c4f4eca,c95831b4-7d1d-4a9a-b5d0-caa03c4f4eca,1,0,81b63f1d-2c65-4efb-8599-8a4d97b612ab,81b63f1d-2c65-4efb-8599-8a4d97b612ab,1,0,4b13a2c6-a6ce-47a0-8d9e-1a5dbe8d4b00,4b13a2c6-a6ce-47a0-8d9e-1a5dbe8d4b00,1,0,d1dde981-615a-461f-b0c5-a85f51003a2c,d1dde981-615a-461f-b0c5-a85f51003a2c,1,0,f5970c48-63d7-4064-bdfc-482b72939347,f5970c48-63d7-4064-bdfc-482b72939347,1,0,5c8039c0-34d8-4443-bd8f-dfe3dc2977a8,5c8039c0-34d8-4443-bd8f-dfe3dc2977a8,1,0,335f379a-2974-44ce-a668-e7ffe2ce6263,335f379a-2974-44ce-a668-e7ffe2ce6263,1,0,7edd75a2-9d03-4330-9185-28d0f0d4a2e4,7edd75a2-9d03-4330-9185-28d0f0d4a2e4,1,0,f7cc4f9e-cf9a-41f5-865f-d64108b981a5,f7cc4f9e-cf9a-41f5-865f-d64108b981a5,1,0,b58f8947-344c-4902-832c-d8004da55c34,b58f8947-344c-4902-832c-d8004da55c34,1,0,35cccc1d-3d67-4d39-aa79-2c30a5347587,35cccc1d-3d67-4d39-aa79-2c30a5347587,1,0,b6ee01eb-31ab-4f39-b4ff-37a04e3c7f35,b6ee01eb-31ab-4f39-b4ff-37a04e3c7f35,1,0,0776dfb2-67e0-4e11-9f94-abde790ff7e2,0776dfb2-67e0-4e11-9f94-abde790ff7e2,1,0,9c92b833-7406-48e2-9f59-69d575a3898f,9c92b833-7406-48e2-9f59-69d575a3898f,1,0,0cc5334f-8147-455c-8262-540324415812,0cc5334f-8147-455c-8262-540324415812,1,0,f3c4e6db-7c4e-4027-8bfd-f7854d566fc1,f3c4e6db-7c4e-4027-8bfd-f7854d566fc1,1,0,0eeb2f75-7092-4487-891f-cdbc9aa978cb,0eeb2f75-7092-4487-891f-cdbc9aa978cb,1,0,4ac60443-c7cb-492f-98b4-7e48bf9bfaa6,4ac60443-c7cb-492f-98b4-7e48bf9bfaa6,1,0,22979d50-ea57-4fab-9673-1b537838aead,22979d50-ea57-4fab-9673-1b537838aead,1,0,14676ee5-c247-46c6-a37e-c4362de79bb9,14676ee5-c247-46c6-a37e-c4362de79bb9,1,0,9fa36fe3-814e-4472-94ee-5d9d2b230b24,9fa36fe3-814e-4472-94ee-5d9d2b230b24,1,0,4b59dc62-0352-45a8-b33b-c42f4eea75ee,4b59dc62-0352-45a8-b33b-c42f4eea75ee,1,0,ea8a50ce-f09c-49f7-be58-ff2864e4eaa3,ea8a50ce-f09c-49f7-be58-ff2864e4eaa3,1,0,2020d672-bef4-4b30-885e-7f41364e412b,2020d672-bef4-4b30-885e-7f41364e412b,1,0,c292ddbc-9402-4c43-93d8-f8efafa6456e,c292ddbc-9402-4c43-93d8-f8efafa6456e,1,0,0281cbd6-972d-4632-9a6a-f8791e2534ee,0281cbd6-972d-4632-9a6a-f8791e2534ee,1,0,bae01f18-b6f3-44e4-93c3-ffcb3ef01b98,bae01f18-b6f3-44e4-93c3-ffcb3ef01b98,1,0,98d66bf0-617a-40aa-97bd-896d37a966ab,98d66bf0-617a-40aa-97bd-896d37a966ab,1,0,1847bb2f-8309-4c49-b752-ef7ec16d4230,1847bb2f-8309-4c49-b752-ef7ec16d4230,1,0,ca23f432-e2a3-4385-8cc1-7e9c96f9d7a1,ca23f432-e2a3-4385-8cc1-7e9c96f9d7a1,1,0,e1856045-f394-45b8-9f0c-298812f1f514,e1856045-f394-45b8-9f0c-298812f1f514,1,0,eb175c1d-7fcb-4807-82e3-688639468116,eb175c1d-7fcb-4807-82e3-688639468116,1,0,4ed9c099-700f-409b-bd91-e24719046953,4ed9c099-700f-409b-bd91-e24719046953,1,0,85b935b4-5eec-40cf-9d99-02cb3f599492,85b935b4-5eec-40cf-9d99-02cb3f599492,1,0,5764a412-4a20-4b2e-9905-ce74a9cac3ae,5764a412-4a20-4b2e-9905-ce74a9cac3ae,1,0,c4330791-d8f7-400f-b270-dee567e7a695,c4330791-d8f7-400f-b270-dee567e7a695,1,0,aab8ec4d-51de-4c1a-9794-266c119332d1,aab8ec4d-51de-4c1a-9794-266c119332d1,1,0,77cb6e52-37a9-423c-8260-6998161adcb5,77cb6e52-37a9-423c-8260-6998161adcb5,1,0,d903569d-911d-4277-a26f-afe2bf67eb09,d903569d-911d-4277-a26f-afe2bf67eb09,1,0,b5ac7de5-565f-4637-b267-dde3637e336b,b5ac7de5-565f-4637-b267-dde3637e336b,1,0,d4a6ab09-259f-4476-834c-a2b57cdeac05,d4a6ab09-259f-4476-834c-a2b57cdeac05,1,0,8c9636c3-0a84-4575-b4c7-6d8bb588e1b0,8c9636c3-0a84-4575-b4c7-6d8bb588e1b0,1,0,76e03401-7c07-4037-a464-d7377852de1d,76e03401-7c07-4037-a464-d7377852de1d,1,0,dc8239e8-fddf-411e-b51a-4230b63236cd,dc8239e8-fddf-411e-b51a-4230b63236cd,1,0,3b861376-2864-4de8-ba59-2a2835d7eaf6,3b861376-2864-4de8-ba59-2a2835d7eaf6,1,0,02910dcd-9e66-4239-a421-8067faf59577,02910dcd-9e66-4239-a421-8067faf59577,1,0,76d5a67f-bb11-4937-a66d-cdce28165562,76d5a67f-bb11-4937-a66d-cdce28165562,1,0,b99a23a5-bfbf-46ec-8268-ff89afdfc63a,b99a23a5-bfbf-46ec-8268-ff89afdfc63a,1,0,cdb93924-62ce-4268-9915-e6c67c1b9cb8,cdb93924-62ce-4268-9915-e6c67c1b9cb8,1,0,1139b6c7-7b55-45b4-98cf-ccac3bfaaa6c,1139b6c7-7b55-45b4-98cf-ccac3bfaaa6c,1,0,33c39990-f4fc-4629-83ba-b43b05a40ca6,33c39990-f4fc-4629-83ba-b43b05a40ca6,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,849f00c3-2f18-414c-97f6-32a99173fab9,849f00c3-2f18-414c-97f6-32a99173fab9,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,a587cade-4c91-4769-9c6a-a4fb4fe94196,a587cade-4c91-4769-9c6a-a4fb4fe94196,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,1300c46e-24d4-45cf-a899-3d26b5cf0b50,1300c46e-24d4-45cf-a899-3d26b5cf0b50,1,0,4cde6fdc-85fa-4c00-896c-51a68f5f10a5,4cde6fdc-85fa-4c00-896c-51a68f5f10a5,1,0,f41de07b-cba3-4bb8-9ec0-64ec59753f84,f41de07b-cba3-4bb8-9ec0-64ec59753f84,1,0,f78a5650-4d6c-4c17-95e0-e95cf8d9ad4b,f78a5650-4d6c-4c17-95e0-e95cf8d9ad4b,1,0,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,1,0,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,1,0,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,1,0,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,1,0,2a6e1f2b-7378-456b-9657-9e971eaff716,2a6e1f2b-7378-456b-9657-9e971eaff716,1,0,c3cdea20-3055-4b4e-a531-a02d4f3ed294,c3cdea20-3055-4b4e-a531-a02d4f3ed294,1,0,46417026-c44a-4a06-af41-9cf6495a33b4,46417026-c44a-4a06-af41-9cf6495a33b4,1,0,363c15f3-660e-4e19-b3cc-37c5d05e8d22,363c15f3-660e-4e19-b3cc-37c5d05e8d22,1,0,eeb4b6f1-2476-467d-9862-6fe9d3013b2c,eeb4b6f1-2476-467d-9862-6fe9d3013b2c,1,0,59d5cd7d-7f53-4015-89d9-bb8ad89f8c04,59d5cd7d-7f53-4015-89d9-bb8ad89f8c04,1,0,9d7f7dde-fea8-4064-abe2-bb7d04500cb2,9d7f7dde-fea8-4064-abe2-bb7d04500cb2,1,0,3af45dae-f563-4d23-a87a-11b4d9d5d7a7,3af45dae-f563-4d23-a87a-11b4d9d5d7a7,1,0,fe102b7b-b61f-4572-b2d0-c0af11bfb7d7,fe102b7b-b61f-4572-b2d0-c0af11bfb7d7,1,0,2cfa0db8-f0e6-4513-ab19-52dccff302bc,2cfa0db8-f0e6-4513-ab19-52dccff302bc,1,0,b9fece39-6e5d-44c0-af5c-ad13cfb71560,b9fece39-6e5d-44c0-af5c-ad13cfb71560,1,0,a9c30e99-c265-471d-9115-50ac2bb05191,a9c30e99-c265-471d-9115-50ac2bb05191,1,0,d388c9ca-1dbd-45b9-ac33-5ffa8cb11499,d388c9ca-1dbd-45b9-ac33-5ffa8cb11499,1,0,efebb079-b913-4249-b128-e0ffc7ab43dd,efebb079-b913-4249-b128-e0ffc7ab43dd,1,0,52077ee4-fef1-451f-8338-86563ff5cf60,52077ee4-fef1-451f-8338-86563ff5cf60,1,0,8e6780f8-8d0e-47d1-ac26-47bf5d906f61,8e6780f8-8d0e-47d1-ac26-47bf5d906f61,1,0,fd4a26c1-31e0-4216-92e0-1e090ec4f094,fd4a26c1-31e0-4216-92e0-1e090ec4f094,1,0,637148a3-0f54-4d41-91dd-a0aa6e191015,637148a3-0f54-4d41-91dd-a0aa6e191015,1,0,9a86e2fe-a9bc-4f0a-a16e-a97944fe8539,9a86e2fe-a9bc-4f0a-a16e-a97944fe8539,1,0,86755cbc-efd8-43e7-bba8-975c0a51f38f,86755cbc-efd8-43e7-bba8-975c0a51f38f,1,0,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,1,0,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,1,0,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,1,0,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,1,0,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,1,0,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,1,0,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,1,0,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,1,0,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,1,0,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,1,0,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,1,0,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,1,0,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,1,0,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,1,0,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,1,0,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,1,0,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,1,0,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,1,0,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,1,0,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,1,0,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,1,0,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,1,0,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,1,0,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,1,0,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,1,0,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,1,0,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,1,0,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,1,0,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,1,0,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,1,0,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,1,0,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,1,0,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,1,0,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,1,0,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,1,0,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,1,0,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,1,0,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,1,0,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,1,0,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,1,0,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,1,0,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,1,0,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,1,0,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,1,0,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,1,0,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,1,0,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,1,0,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,1,0,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,1,0,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,1,0,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,1,0,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,1,0,cc8e3172-491d-45d8-a7eb-fc6c400845cb,cc8e3172-491d-45d8-a7eb-fc6c400845cb,1,0,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,1,0,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,1,0,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,1,0,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,1,0,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,1,0,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,1,0,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,1,0,245f870e-a53a-4d86-aa0a-c0c7709b8acb,245f870e-a53a-4d86-aa0a-c0c7709b8acb,1,0,476f6bfa-b10c-4e0f-8499-23c652715b3f,476f6bfa-b10c-4e0f-8499-23c652715b3f,1,0,65c9754b-53f6-4616-a9d4-74826f7b0ced,65c9754b-53f6-4616-a9d4-74826f7b0ced,1,0,eca2b076-d218-4d1c-948b-7894edf9fa49,eca2b076-d218-4d1c-948b-7894edf9fa49,1,0,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,1,0,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,1,0,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,1,0,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,1,0,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,1,0,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1,0,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,1,0,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,1,0,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,1,0,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,1,0,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,1,0,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,1,0,40a59681-f31d-4fb9-9301-67c1430590e0,40a59681-f31d-4fb9-9301-67c1430590e0,1,0,ae3358ad-ea3a-4b73-a305-02a152863978,ae3358ad-ea3a-4b73-a305-02a152863978,1,0,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,1,0,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,1,0,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,1,0,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,1,0,9c3bc502-bcb1-4c90-ae43-53c798958339,9c3bc502-bcb1-4c90-ae43-53c798958339,1,0,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,1,0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,1,0,5eb4ca7f-027a-4860-a167-e6b424527e7a,5eb4ca7f-027a-4860-a167-e6b424527e7a,1,0,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,1,0,6871015f-d959-4a77-a091-a23cb4ebd8f9,6871015f-d959-4a77-a091-a23cb4ebd8f9,1,0,e5e1631b-a494-4e73-b356-b4330b84cc88,e5e1631b-a494-4e73-b356-b4330b84cc88,1,0,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,1,0,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,1,0,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,1,0,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,1,0,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,1,0,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,1,0,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,1,0,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,1,0,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,1,0,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,1,0,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,1,0,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,1,0,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,1,0,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,1,0,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,1,0,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,1,0,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,1,0,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,1,0,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,1,0,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,1,0,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,1,0,55bce105-51c0-452e-9eec-b960fe740db2,55bce105-51c0-452e-9eec-b960fe740db2,1,0,776c171d-5dd5-4965-94dc-c2fe6792d5f2,776c171d-5dd5-4965-94dc-c2fe6792d5f2,1,0,86bb1105-702a-47be-906a-1821a69b1b6c,86bb1105-702a-47be-906a-1821a69b1b6c,1,0,40653767-9542-44e9-a84b-ffee75584638,40653767-9542-44e9-a84b-ffee75584638,1,0,49bd152e-479a-46fe-b3af-26ed9181dc34,49bd152e-479a-46fe-b3af-26ed9181dc34,1,0,0a742dd2-1ff4-42de-b303-f2bb01b36fe2,0a742dd2-1ff4-42de-b303-f2bb01b36fe2,1,0,69e13959-51ad-4ac2-9cfc-17ac28b78c78,69e13959-51ad-4ac2-9cfc-17ac28b78c78,1,0,f890ca1b-f2c2-4630-9002-301b759ca6d9,f890ca1b-f2c2-4630-9002-301b759ca6d9,1,0,08c8a9bf-7b89-4d0e-a496-4c7efeca0577,08c8a9bf-7b89-4d0e-a496-4c7efeca0577,1,0,f6c2b015-9cfc-40d2-a93f-b0e88db4a23f,f6c2b015-9cfc-40d2-a93f-b0e88db4a23f,1,0,103f3d8f-e47a-4772-bdd7-dd5f8508d22b,103f3d8f-e47a-4772-bdd7-dd5f8508d22b,1,0,ba8ea271-8716-49ef-8b10-f4b5798c1f62,ba8ea271-8716-49ef-8b10-f4b5798c1f62,1,0,3633c30c-9479-4801-89cc-a5734a41e465,3633c30c-9479-4801-89cc-a5734a41e465,1,0,f295c68d-7e29-48b8-a95a-56e96d9843c1,f295c68d-7e29-48b8-a95a-56e96d9843c1,1,0,7ebe16ee-8e5d-4b05-89b5-9539f73be90c,7ebe16ee-8e5d-4b05-89b5-9539f73be90c,1,0,ea5d0221-fb1e-4626-862a-9c1209365d8f,ea5d0221-fb1e-4626-862a-9c1209365d8f,1,0,12bce69b-933c-4ce4-9d29-a47f3db0226e,12bce69b-933c-4ce4-9d29-a47f3db0226e,1,0,82dcd6a3-c35b-421c-a8f9-77855ad2abca,82dcd6a3-c35b-421c-a8f9-77855ad2abca,1,0,ad0b1720-282e-49d4-af80-324a887963c3,ad0b1720-282e-49d4-af80-324a887963c3,1,0,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,1,0,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,1,0,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,1,0,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,1,0,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,1,0,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,1,0,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,1,0,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,1,0,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,1,0,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,1,0,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,1,0,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,1,0,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,1,0,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,1,0,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,1,0,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,1,0,b67a509d-bb0f-427e-b447-4d4617078d6a,b67a509d-bb0f-427e-b447-4d4617078d6a,1,0,968ecfca-cf06-4952-83c1-a151e46c78a9,968ecfca-cf06-4952-83c1-a151e46c78a9,1,0,4945c734-a47d-44e9-8a7f-94b31911c1ce,4945c734-a47d-44e9-8a7f-94b31911c1ce,1,0,20a194e9-06cf-4013-bfa4-bc15554a54d0,20a194e9-06cf-4013-bfa4-bc15554a54d0,1,0,ab4f3d3d-bb5a-4dbc-b699-808458036b00,ab4f3d3d-bb5a-4dbc-b699-808458036b00,1,0,09761456-2273-437f-9316-0391cfaa81b3,09761456-2273-437f-9316-0391cfaa81b3,1,0,93922abc-98b9-4b3d-a5c8-7294378a69e1,93922abc-98b9-4b3d-a5c8-7294378a69e1,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,0f46b124-1575-4984-9bc1-b5e4696efc74,0f46b124-1575-4984-9bc1-b5e4696efc74,1,0,a0183a0b-1459-4b32-924c-6ea156f02125,a0183a0b-1459-4b32-924c-6ea156f02125,1,0,fc2dc619-41e0-4cce-a080-d5c8de5029a8,fc2dc619-41e0-4cce-a080-d5c8de5029a8,1,0,9609e5fb-fd11-463c-8679-9b10fc0993ed,9609e5fb-fd11-463c-8679-9b10fc0993ed,1,0,f438b941-2aae-4c67-81dc-340f6acc25b1,f438b941-2aae-4c67-81dc-340f6acc25b1,1,0,48075630-2041-48c3-9eb0-d2107cfcb249,48075630-2041-48c3-9eb0-d2107cfcb249,1,0,7d7e7e13-eb42-420d-9bfc-14fab901c3c1,7d7e7e13-eb42-420d-9bfc-14fab901c3c1,1,0,aa29e1be-4e99-4136-8dc1-0124908979ad,aa29e1be-4e99-4136-8dc1-0124908979ad,1,0,0d76799d-7fc7-446b-88fb-dca839de00a5,0d76799d-7fc7-446b-88fb-dca839de00a5,1,0,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,1,0,ea4a869c-861c-412c-a3be-de1c57d1a251,ea4a869c-861c-412c-a3be-de1c57d1a251,1,0,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,1,0,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,1,0,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,6c1d8f6c-db33-46dc-8824-aceacb4bf9c1,1,0,50ac390d-324f-40bd-b3df-0468a63b94b6,50ac390d-324f-40bd-b3df-0468a63b94b6,1,0,80337710-2c60-45c4-ae1f-bb42731fb611,80337710-2c60-45c4-ae1f-bb42731fb611,1,0,9dcf467e-7701-4c7b-b747-95f4d9b9295c,9dcf467e-7701-4c7b-b747-95f4d9b9295c,1,0,dd07b255-25af-466e-a224-c561a8ca567b,dd07b255-25af-466e-a224-c561a8ca567b,1,0,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,1,0,1e9e115a-e65b-4346-b0d3-47cf1dbe75f2,1e9e115a-e65b-4346-b0d3-47cf1dbe75f2,1,0,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,1,0,67993b79-6aca-4641-b2e2-0a15f44e47d5,67993b79-6aca-4641-b2e2-0a15f44e47d5,1,0,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,1,0,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,1,0,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,1,0,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,1,0,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,1,0,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,1,0,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,1,0,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,1,0,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,1,0,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,1,0,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,1,0,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,1,0,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,1,0,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,1,0,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,1,0,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,1,0,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,1,0,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,1,0,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,1,0,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,1,0,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,1,0,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,1,0,0d89036c-af6e-4709-847c-0dab74a33d72,0d89036c-af6e-4709-847c-0dab74a33d72,1,0,7d223aab-d4f6-41d5-a701-6fe03517cf50,7d223aab-d4f6-41d5-a701-6fe03517cf50,1,0,631cdd15-eb1f-4903-9073-4de3911ba2e6,631cdd15-eb1f-4903-9073-4de3911ba2e6,1,0,6b10ab0a-8d4e-4847-9ce7-663fb4770c35,6b10ab0a-8d4e-4847-9ce7-663fb4770c35,1,0,42630eee-ce93-40a8-b96e-3eb759f48976,42630eee-ce93-40a8-b96e-3eb759f48976,1,0,174e0187-cf34-4949-8dc2-a1f9aece78dc,174e0187-cf34-4949-8dc2-a1f9aece78dc,1,0,5d9f2db6-704d-45cb-96c3-e59e47ad4fea,5d9f2db6-704d-45cb-96c3-e59e47ad4fea,1,0,e4dbeb50-292f-452f-a0da-a55e5ea936e4,e4dbeb50-292f-452f-a0da-a55e5ea936e4,1,0,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,1,0,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,1,0,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,1,0,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,1,0,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,1,0,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,1,0,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,1,0,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,1,0,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,1,0,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,1,0,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,1,0,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,1,0,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,1,0,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,1,0,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,1,0,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,1,0,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,1,0,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,1,0,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,1,0,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,1,0,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,1,0,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,1,0,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,1,0,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,1,0,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,1,0,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,1,0,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,1,0,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,1,0,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,1,0,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,1,0,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,1,0,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,1,0,5b379a72-8605-4e88-84cb-14272a3b8f5f,5b379a72-8605-4e88-84cb-14272a3b8f5f,1,0,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,1,0,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,1,0,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,1,0,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,1,0,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,1,0,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,1,0,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,1,0,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,1,0,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,1,0,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,1,0,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,1,0,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,1,0,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,1,0,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,1,0,612f3b95-d7db-4b33-92b5-4873205b424b,612f3b95-d7db-4b33-92b5-4873205b424b,1,0,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,1,0,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,1,0,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,1,0,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,1,0,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,1,0,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,1,0,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,1,0,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,1,0,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,1,0,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,1,0,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,1,0,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,1,0,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,1,0,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,1,0,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,1,0,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,1,0,616cd2cc-eaf4-4586-bca1-c044429b491a,616cd2cc-eaf4-4586-bca1-c044429b491a,1,0,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,1,0,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,1,0,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,1,0,81d900be-ddc1-417f-ae2c-1aacf040de9a,81d900be-ddc1-417f-ae2c-1aacf040de9a,1,0,c65f69ce-be78-4e8d-b91d-293c4108ce77,c65f69ce-be78-4e8d-b91d-293c4108ce77,1,0,521a5717-0b38-401d-bd72-30cee219bd14,521a5717-0b38-401d-bd72-30cee219bd14,1,0,977c30dc-6f27-4931-9fd5-d12ed147e3ec,977c30dc-6f27-4931-9fd5-d12ed147e3ec,1,0,eea4f72e-dd1b-46c7-b270-876a482236b3,eea4f72e-dd1b-46c7-b270-876a482236b3,1,0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,1,0,2d249dad-8b4f-462b-ab13-892639a6e071,2d249dad-8b4f-462b-ab13-892639a6e071,1,0,f6249bf4-d2e7-48f3-808f-d776915d14cb,f6249bf4-d2e7-48f3-808f-d776915d14cb,1,0,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,1,0,883cdeb0-e747-4157-bbe7-0ebc423a82af,883cdeb0-e747-4157-bbe7-0ebc423a82af,1,0,ba62ac73-91da-4dad-abc7-3cf8acf7e315,ba62ac73-91da-4dad-abc7-3cf8acf7e315,1,0,6a71416d-dba1-4883-9264-597ecf9d6270,6a71416d-dba1-4883-9264-597ecf9d6270,1,0,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,1,0,6593baab-fce0-49ed-867e-be242bfc08d7,6593baab-fce0-49ed-867e-be242bfc08d7,1,0,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,1,0,57aed64d-da61-4c18-af21-dab3afdc5c03,57aed64d-da61-4c18-af21-dab3afdc5c03,1,0,452822b4-a590-44db-ab77-d8c01f7300e7,452822b4-a590-44db-ab77-d8c01f7300e7,1,0,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,1,0,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,1,0,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,1,0,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,1,0,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,1,0,b0deb957-624b-4bcb-824c-76aedf1affe9,b0deb957-624b-4bcb-824c-76aedf1affe9,1,0,9934e608-593d-45d0-9df3-539f0c8fc385,9934e608-593d-45d0-9df3-539f0c8fc385,1,0,80da4126-4319-425f-8427-7d60652cf754,80da4126-4319-425f-8427-7d60652cf754,1,0,05236ace-bcdd-4eb8-a1fb-5843ee311d10,05236ace-bcdd-4eb8-a1fb-5843ee311d10,1,0,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,1,0,449060fd-4711-4b9e-93e0-11b35c314fb3,449060fd-4711-4b9e-93e0-11b35c314fb3,1,0,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,1,0,0614d340-6524-4715-978d-87ab21377e72,0614d340-6524-4715-978d-87ab21377e72,1,0,d47daac5-ec3b-4d4e-8b01-045a37f7074d,d47daac5-ec3b-4d4e-8b01-045a37f7074d,1,0,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,1,0,912cbd30-1ed5-4888-a4b6-98e9215b28e9,912cbd30-1ed5-4888-a4b6-98e9215b28e9,1,0,abf093ce-be63-487d-8be4-be282aa475be,abf093ce-be63-487d-8be4-be282aa475be,1,0,7a910ad6-b922-4716-8140-1540d76296b2,7a910ad6-b922-4716-8140-1540d76296b2,1,0,5189beb9-b939-4f97-aca0-c2f3492ac8b9,5189beb9-b939-4f97-aca0-c2f3492ac8b9,1,0,0b139d7a-b583-4082-b9f2-8f3fb444bd51,0b139d7a-b583-4082-b9f2-8f3fb444bd51,1,0,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,1,0,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,1,0,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,1,0,0761c32c-1de6-4c40-9178-64aeb46b6622,0761c32c-1de6-4c40-9178-64aeb46b6622,1,0,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,1,0,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,1,0,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,1,0,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,1,0,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,1,0,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,1,0,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,1,0,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,1,0,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,1,0,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,1,0,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,1,0,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,1,0,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,1,0,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,1,0,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,1,0,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,1,0,b9b24093-810c-4158-846d-e2c7aea54d36,b9b24093-810c-4158-846d-e2c7aea54d36,1,0,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,1,0,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,1,0,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,1,0,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,1,0,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,1,0,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,1,0,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,1,0,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,1,0,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,1,0,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,1,0,8ce759ff-f579-461c-bb1e-9ac2b01e88df,8ce759ff-f579-461c-bb1e-9ac2b01e88df,1,0,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,1,0,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,1,0,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,1,0,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,1,0,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1,0,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,1,0,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,1,0,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,1,0,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,1,0,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,1,0,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,1,0,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,1,0,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,1,0,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,1,0,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,1,0,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,1,0,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,1,0,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1,0,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,1,0,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1,0,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,1,0,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,1,0,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,1,0,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,1,0,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,1,0,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,1,0,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1,0,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,1,0,28080e64-cd09-410d-9e3e-3ffdb43d3ace,28080e64-cd09-410d-9e3e-3ffdb43d3ace,1,0,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,1,0,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,1,0,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,1,0,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,1,0,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,1,0,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,1,0,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,1,0,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,1,0,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,1,0,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,1,0,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,1,0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,1,0,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,1,0,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,1,0,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,1,0,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,1,0,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,1,0,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,1,0,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,1,0,d3443b92-32f5-4ac0-8356-062647efe3d8,d3443b92-32f5-4ac0-8356-062647efe3d8,1,0,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,1,0,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,1,0,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,1,0,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,1,0,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,1,0,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,1,0,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,1,0,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,1,0,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,1,0,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,1,0,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,1,0,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,1,0,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,1,0,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,1,0,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,1,0,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,1,0,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,b7295e8e-0aa4-4a49-81ea-0594a358e9ca,1,0,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,1,0,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,1,0,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,1,0,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,1,0,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,1,0,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,1,0,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,1,0,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,1,0,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,1,0,aa63c001-c3da-4179-8fd8-fe2ff510511e,aa63c001-c3da-4179-8fd8-fe2ff510511e,1,0,b2e894b0-6443-4a52-95b6-6b564f809680,b2e894b0-6443-4a52-95b6-6b564f809680,1,0,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,1,0,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,1,0,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,1,0,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,1,0,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,1,0,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,1,0,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,1,0,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,1,0,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,1,0,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,1,0,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,1,0,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,1,0,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,1,0,8a8848b8-345a-452d-bf95-28f9c91c7e95,8a8848b8-345a-452d-bf95-28f9c91c7e95,1,0,a9441693-87ca-4157-98e1-63375852755c,a9441693-87ca-4157-98e1-63375852755c,1,0,6303ea55-e8ed-4acc-9717-941eefafc2a9,6303ea55-e8ed-4acc-9717-941eefafc2a9,1,0,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,1,0,d0b17206-3949-4513-a47f-02e1a8ba369a,d0b17206-3949-4513-a47f-02e1a8ba369a,1,0,cb4f20d4-13e6-4c27-b491-da7931f4bf05,cb4f20d4-13e6-4c27-b491-da7931f4bf05,1,0,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,1,0,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,1,0,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,1,0,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,1,0,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,1,0,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,1,0,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,1,0,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,1,0,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,1,0,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,1,0,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,1,0,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,1,0,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,1,0,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,1,0,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,1,0,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,1,0,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,1,0,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,1,0,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,1,0,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,1,0,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,1,0,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,1,0,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,1,0,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,1,0,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,1,0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,1,0,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,1,0,94bc76ae-72a0-418f-98c4-ae0a0326a2da,94bc76ae-72a0-418f-98c4-ae0a0326a2da,1,0,784475ff-eec5-462a-a511-ba31f8374c2e,784475ff-eec5-462a-a511-ba31f8374c2e,1,0,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,1,0,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,1,0,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,1,0,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,1,0,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,27e0b5d9-1a4c-45b8-8969-d1d1c39129c1,1,0,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,1,0,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,1,0,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,1,0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,1,0,356a8091-4c0b-41d0-b8d2-963b3a807469,356a8091-4c0b-41d0-b8d2-963b3a807469,1,0,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,1,0,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,1,0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,1,0,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,1,0,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,1,0,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,1,0,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,1,0,f00e93bf-6e3b-4819-a4e1-33471a6d0fff,f00e93bf-6e3b-4819-a4e1-33471a6d0fff,1,0,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,1,0,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,1,0,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,1,0,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1,0,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,1,0,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,1,0,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,1,0,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,1,0,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,1,0,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,1,0,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,1,0,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,1,0,ee008096-1ae8-4a64-9d3d-14cb15c8be70,ee008096-1ae8-4a64-9d3d-14cb15c8be70,1,0,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,a0a85b22-63ee-4a05-8b0d-1feb9ee07b0a,1,0,a4754a7b-971f-4517-963e-b7cb9d57f86d,a4754a7b-971f-4517-963e-b7cb9d57f86d,1,0,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,1,0,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,1,0,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,1,0,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,1,0,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,1,0,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,1,0,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,1,0,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,1,0,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,1,0,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,1,0,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,1,0,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,1,0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,1,0,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,1,0,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,1,0,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,1,0,2bc2ca58-6cc0-4d4b-8672-f9328c86c2c1,2bc2ca58-6cc0-4d4b-8672-f9328c86c2c1,1,0,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,1,0,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,1,0,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,1,0,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,1,0,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,1,0,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,1,0,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,1,0,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,1,0,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,1,0,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,1,0,733d4494-01e2-46f5-a49b-f289267a90c9,733d4494-01e2-46f5-a49b-f289267a90c9,1,0,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,1,0,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,1,0,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,1,0,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,1,0,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,1,0,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,1,0,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,1,0,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,1,0,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,1,0,1e14d062-1d5a-4939-8ce6-4d9514990376,1e14d062-1d5a-4939-8ce6-4d9514990376,1,0,f86f24d2-9a83-47ae-9d95-b49a0a295770,f86f24d2-9a83-47ae-9d95-b49a0a295770,1,0,8368e1fa-da0c-4a9b-9d50-a122933c7899,8368e1fa-da0c-4a9b-9d50-a122933c7899,1,0,37986729-a275-4e86-8613-faee9a4f2525,37986729-a275-4e86-8613-faee9a4f2525,1,0,5814cb3a-8f7c-45b4-a590-b69d4912120f,5814cb3a-8f7c-45b4-a590-b69d4912120f,1,0,f06c8396-65ec-4ece-aed0-d45b2d8969b5,f06c8396-65ec-4ece-aed0-d45b2d8969b5,1,0,1faeab7f-7bd7-496d-8882-4aab6c425854,1faeab7f-7bd7-496d-8882-4aab6c425854,1,0,af922fb8-a99c-4154-89fe-d30a4d13024a,af922fb8-a99c-4154-89fe-d30a4d13024a,1,0,24c2f463-2bbb-471f-a409-507afad52caf,24c2f463-2bbb-471f-a409-507afad52caf,1,0,cbb07013-9ae1-43ec-8142-a724d788cb67,cbb07013-9ae1-43ec-8142-a724d788cb67,1,0,2403ac84-b513-4aa0-9a68-8d1ad705ce24,2403ac84-b513-4aa0-9a68-8d1ad705ce24,1,0,952b49e0-e1a1-4130-8fb2-083e3988255c,952b49e0-e1a1-4130-8fb2-083e3988255c,1,0,367b227f-f66e-4cec-9fc3-850bca8bc6c8,367b227f-f66e-4cec-9fc3-850bca8bc6c8,1,0,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1,0,7fcb9d79-1144-4099-8d7f-309d3bf045a5,7fcb9d79-1144-4099-8d7f-309d3bf045a5,1,0,db418313-8583-48a9-9fec-e2c5de4fdf76,db418313-8583-48a9-9fec-e2c5de4fdf76,1,0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,1,0,2f26970e-b964-43e2-8d6d-999bbc577689,2f26970e-b964-43e2-8d6d-999bbc577689,1,0,65a50026-88e7-45dd-bb0c-f212218ca093,65a50026-88e7-45dd-bb0c-f212218ca093,1,0,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,1,0,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1,0,5c17a594-eb0b-4cdf-af35-0eaba968e065,5c17a594-eb0b-4cdf-af35-0eaba968e065,1,0,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,1,0,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,1,0,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,1,0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,1,0,01a1fd57-6c09-4a5b-9f75-da4366159423,01a1fd57-6c09-4a5b-9f75-da4366159423,1,0,71d79b25-3682-4f2c-b6b2-a307e3e72844,71d79b25-3682-4f2c-b6b2-a307e3e72844,1,0,45c1ed0d-202e-4289-820f-e1de0f544386,45c1ed0d-202e-4289-820f-e1de0f544386,1,0,e889e80f-97c9-43c6-8268-d652764fcafb,e889e80f-97c9-43c6-8268-d652764fcafb,1,0,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,1,0,95ccaaf2-f6ca-4540-8a39-3c90121c4236,95ccaaf2-f6ca-4540-8a39-3c90121c4236,1,0,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,1,0,f47a9bec-2a9f-4955-a432-acb63a5b0e46,f47a9bec-2a9f-4955-a432-acb63a5b0e46,1,0,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1,0,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,1,0,b787818e-5572-4ef2-ba54-1e9b69569824,b787818e-5572-4ef2-ba54-1e9b69569824,1,0,1e13bd37-61b5-4901-a607-e00e5d1900a8,1e13bd37-61b5-4901-a607-e00e5d1900a8,1,0,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,1,0,231d7b21-c00c-4782-b610-d56593be436f,231d7b21-c00c-4782-b610-d56593be436f,1,0,79250d1a-77ff-4015-a5b5-83460b1611e2,79250d1a-77ff-4015-a5b5-83460b1611e2,1,0,60018ee0-71ec-4975-a95d-f6f188748ff2,60018ee0-71ec-4975-a95d-f6f188748ff2,1,0,68d35468-279a-43ef-9d71-fed44a792177,68d35468-279a-43ef-9d71-fed44a792177,1,0,77bec3d8-582a-4156-861b-4902008f014c,77bec3d8-582a-4156-861b-4902008f014c,1,0,2ad1caba-7a89-4389-934f-419970260961,2ad1caba-7a89-4389-934f-419970260961,1,0,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,bfc1a708-662d-4dc1-82b4-7b09bb1b0751,1,0,f88c4a72-368c-4f45-bb2c-d18f214a5079,f88c4a72-368c-4f45-bb2c-d18f214a5079,1,0,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,611876ba-7e6e-40c3-89a9-bb9b19cd1bfb,1,0,9dc2e313-c086-4fd9-83e8-911859ef480d,9dc2e313-c086-4fd9-83e8-911859ef480d,1,0,8a14ced0-9e45-4b3a-a135-11413c3a33c2,8a14ced0-9e45-4b3a-a135-11413c3a33c2,1,0,af7377db-0b27-42f7-a639-e2feb4015412,af7377db-0b27-42f7-a639-e2feb4015412,1,0,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,e1a200e2-64f3-434c-ae0d-5f24b9d65c9b,1,0,ab7db146-f26a-418a-8c45-e2513bf84e08,ab7db146-f26a-418a-8c45-e2513bf84e08,1,0,ece3bd8d-6616-44d5-9c14-6b3557738872,ece3bd8d-6616-44d5-9c14-6b3557738872,1,0,663a80ba-b97e-4265-a627-4a7d273f9472,663a80ba-b97e-4265-a627-4a7d273f9472,1,0,bf3304c0-5078-478f-bbf8-6178264c5f26,bf3304c0-5078-478f-bbf8-6178264c5f26,1,0,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,fbf754c3-ab89-4704-b01a-67f8bcea0c7c,1,0,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,3b0afd55-f08d-4d59-b6df-d7c4d1c52446,1,0,4893ad50-df19-4d86-9469-40491ba733c9,4893ad50-df19-4d86-9469-40491ba733c9,1,0,25a65c1e-8e67-4135-843d-1e0da72dfd64,25a65c1e-8e67-4135-843d-1e0da72dfd64,1,0,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,5724fbd5-4d91-4e6d-ae24-8925a4d83c83,1,0,29a6416e-b0f5-4111-8f86-1ba80244e73a,29a6416e-b0f5-4111-8f86-1ba80244e73a,1,0,0f49085a-9b83-4256-be60-f341b2ef132e,0f49085a-9b83-4256-be60-f341b2ef132e,1,0,f44c66d6-cfe2-482f-a921-de3db3cd09ea,f44c66d6-cfe2-482f-a921-de3db3cd09ea,1,0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,5ec1b7af-f4bc-4ec1-8f43-85c4f9d146a0,1,0,c521bd61-386e-41c8-bcc3-29d54b63cc32,c521bd61-386e-41c8-bcc3-29d54b63cc32,1,0,d46e3424-6d30-4229-9a56-ab256517534a,d46e3424-6d30-4229-9a56-ab256517534a,1,0,09d3633d-8e8c-47f3-8f34-d70eb94577e1,09d3633d-8e8c-47f3-8f34-d70eb94577e1,1,0,fe868143-363b-4da1-889b-98d4dd10a1fd,fe868143-363b-4da1-889b-98d4dd10a1fd,1,0,b791a549-ae94-46f2-8f04-771fdeb4cc54,b791a549-ae94-46f2-8f04-771fdeb4cc54,1,0,4681cb63-c581-4c08-b18c-016d9b478ef2,4681cb63-c581-4c08-b18c-016d9b478ef2,1,0,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,1,0,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,1,0,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,1,0,1d429511-9446-4102-95f4-df676125e14c,1d429511-9446-4102-95f4-df676125e14c,1,0,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,1,0,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,1,0,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,1,0,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,1,0,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,1,0,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,1,0,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,1,0,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,1,0,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,1,0,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,1,0,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,1,0,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,1,0,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,1,0,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,1,0,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,1,0,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,1,0,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,1,0,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,aa0e290d-21ab-4197-b8f3-cf1f97ab1b98,1,0,eefa9859-4168-4a10-923f-e4a713c99a3b,eefa9859-4168-4a10-923f-e4a713c99a3b,1,0,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,1,0,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,1,0,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,1,0,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,1,0,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,1,0,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,1,0,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,1,0,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,1,0,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,1,0,39bddcde-697c-4e77-adfd-e4a77529ea97,39bddcde-697c-4e77-adfd-e4a77529ea97,1,0,a3b15381-bf9b-4b26-96eb-392fa2cc8223,a3b15381-bf9b-4b26-96eb-392fa2cc8223,1,0,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,1,0,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,1,0,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,1,0,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,1,0,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,1,0,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,1,0,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,1,0,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,8e9eb604-5f15-4ef5-8906-5bcd57b3d099,1,0,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,1,0,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,1,0,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,1,0,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,1,0,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,1,0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,1,0,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,1,0,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,1,0,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,1,0,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,1,0,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,1,0,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,1,0,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,1,0,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,1,0,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,1,0,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,1,0,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,1,0,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,42f4ad3c-3724-4032-82f0-10c8dbe6cc9f,1,0,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,bbd8b83d-413a-4ffc-8351-e0ec4f4ae619,1,0,c49cef0d-3b71-4e66-9e35-72b94920dae5,c49cef0d-3b71-4e66-9e35-72b94920dae5,1,0,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,1,0,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,1,0,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,1,0,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,1,0,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,1,0,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,1,0,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,1,0,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,1,0,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,1,0,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,1,0,b363f72f-3629-453c-9f7d-9828ef6de733,b363f72f-3629-453c-9f7d-9828ef6de733,1,0,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,1,0,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,1,0,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,1,0,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,1,0,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,1,0,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,1,0,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,1,0,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,1,0,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,1,0,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,1,0,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,77c8a065-a8aa-4f39-93b6-c88f4c38ec66,1,0,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,366fa6da-d3bf-4bb0-9a55-a307f9edee6a,1,0,dd0610c8-cd87-4fe2-8a1f-70157132785b,dd0610c8-cd87-4fe2-8a1f-70157132785b,1,0,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,1,0,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,1,0,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,1,0,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,1,0,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,1,0,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,1,0,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,1,0,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,1,0,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,1,0,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,1,0,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,1,0,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,1,0,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,1,0,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,1,0,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,1,0,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,1,0,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,1,0,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,1,0,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,1,0,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,1,0,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,1,0,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,1,0,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,1,0,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,1,0,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,1,0,02abb5e3-9d4e-4c45-af19-71796966ed19,02abb5e3-9d4e-4c45-af19-71796966ed19,1,0,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,1,0,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,1,0,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,1,0,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,1,0,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,1,0,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,1,0,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,1,0,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,1,0,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,1,0,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,1,0,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,1,0,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,1,0,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,1,0,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,1,0,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,1,0,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,1,0,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,1,0,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,1,0,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,1,0,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,1,0,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,1,0,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,1,0,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,1,0,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,1,0,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,1,0,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,1,0,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,1,0,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,1,0,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,d71ca3bc-e41a-44d9-afe4-c68f1211b3a1,1,0,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,1,0,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,1,0,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,1,0,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,1,0,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,1,0,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,1,0,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,1,0,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,1,0,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,1,0,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,1,0,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,1,0,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,1,0,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,1,0,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,1,0,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,1,0,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,1,0,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,1,0,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,1,0,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,1,0,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,1,0,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,1,0,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,1,0,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,1,0,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,1,0,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,1,0,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,1,0,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,1,0,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,1,0,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,1,0,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,1,0,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,1,0,d754ed75-2a32-4b86-a153-7b50c39f9836,d754ed75-2a32-4b86-a153-7b50c39f9836,1,0,b81f3ee1-66f7-4626-a35b-ef85388c678e,b81f3ee1-66f7-4626-a35b-ef85388c678e,1,0,2ad04793-c162-4915-a260-ca4da535cdac,2ad04793-c162-4915-a260-ca4da535cdac,1,0,78942e92-a31c-4824-a614-a6e07ae26171,78942e92-a31c-4824-a614-a6e07ae26171,1,0,6568d853-dfe5-4064-aa73-c1f546e951b4,6568d853-dfe5-4064-aa73-c1f546e951b4,1,0,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,1,0,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,1,0,bbe718b2-6b4c-4d78-a408-5369d356a1e6,bbe718b2-6b4c-4d78-a408-5369d356a1e6,1,0,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,1,0,eb7623df-b4e3-4272-9f92-42a9214f9f17,eb7623df-b4e3-4272-9f92-42a9214f9f17,1,0,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,1,0,b08fd921-c3d6-44eb-9401-fec5acab5d22,b08fd921-c3d6-44eb-9401-fec5acab5d22,1,0,f4f185af-5507-427c-b82b-515ea71f3fc1,f4f185af-5507-427c-b82b-515ea71f3fc1,1,0,1611855a-abf4-4269-aed3-3f78dce7bea5,1611855a-abf4-4269-aed3-3f78dce7bea5,1,0,c5bd277c-b258-43af-9c80-3e328b1581f5,c5bd277c-b258-43af-9c80-3e328b1581f5,1,0,96dac7e8-5113-4217-ac0a-fffea4acc410,96dac7e8-5113-4217-ac0a-fffea4acc410,1,0,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,1,0,f9cefef4-2182-42ca-93ef-b6a51d6555cc,f9cefef4-2182-42ca-93ef-b6a51d6555cc,1,0,71e1c7de-7367-424c-ae07-6ec04b408b83,71e1c7de-7367-424c-ae07-6ec04b408b83,1,0,b3956392-199c-4934-80d1-8cdab453d879,b3956392-199c-4934-80d1-8cdab453d879,1,0,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,1,0,d1bd7448-aa5f-43fc-9735-224f36960c3e,d1bd7448-aa5f-43fc-9735-224f36960c3e,1,0,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,1,0,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,1,0,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1,0,8227471b-8ffb-4ba7-b4da-b21570582876,8227471b-8ffb-4ba7-b4da-b21570582876,1,0,25864028-1a53-4a8d-b6e4-189fa62c62f5,25864028-1a53-4a8d-b6e4-189fa62c62f5,1,0,e923beae-0bd8-4119-a802-fd6bfb729f10,e923beae-0bd8-4119-a802-fd6bfb729f10,1,0,67c1269a-79e6-44d9-9254-671c50fb3974,67c1269a-79e6-44d9-9254-671c50fb3974,1,0,5d455d2a-910d-48c7-bc74-ba5ad7855110,5d455d2a-910d-48c7-bc74-ba5ad7855110,1,0,7cf3feea-75e2-42cc-9c89-4a9182034910,7cf3feea-75e2-42cc-9c89-4a9182034910,1,0,930a0156-feb3-4e14-96a5-cd183a4891f4,930a0156-feb3-4e14-96a5-cd183a4891f4,1,0,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,1,0,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,1,0,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,1,0,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,1,0,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,1,0,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,1,0,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,1,0,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,1,0,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,1,0,5d45a926-513f-4bbc-a002-54a2db94b297,5d45a926-513f-4bbc-a002-54a2db94b297,1,0,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,1,0,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,1,0,61dc318a-c17d-402e-bf64-a0c0a63a1c93,61dc318a-c17d-402e-bf64-a0c0a63a1c93,1,0,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,1,0,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,1,0,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,1,0,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,1,0,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,1,0,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,1,0,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,1,0,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,1,0,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,1,0,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,1,0,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,1,0,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,1,0,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,1,0,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,1,0,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1,0,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,1,0,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,1,0,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,1,0,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,1,0,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,1,0,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,1,0,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,1,0,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,1,0,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,1,0,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,1,0,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,1,0,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,1,0,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,1,0,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,1,0,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,1,0,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,1,0,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,1,0,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,1,0,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,1,0,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,1,0,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,1,0,6852c584-d989-418d-8d18-255492891ef0,6852c584-d989-418d-8d18-255492891ef0,1,0,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,1,0,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,1,0,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,1,0,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,1,0,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,1,0,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,1,0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,1,0,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,1,0,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,1,0,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,1,0,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,1,0,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,1,0,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,1,0,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,1,0,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,1,0,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,1,0,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,1,0,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,1,0,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,1,0,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,1,0,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,1,0,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,1,0,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,1,0,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,1,0,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,1,0,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,1,0,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,1,0,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,1,0,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1,0,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,1,0,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,1,0,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,1,0,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,1,0,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1,0,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,1,0,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,1,0,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,1,0,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,1,0,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,1,0,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,1,0,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,1,0,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,1,0,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,1,0,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,1,0,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,1,0,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,1,0,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,1,0,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,1,0,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,1,0,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,1,0,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,1,0,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,1,0,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,1,0,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,1,0,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,1,0,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,1,0,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,1,0,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,1,0,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,1,0,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,1,0,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,1,0,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,1,0,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,1,0,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,1,0,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,1,0,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,1,0,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,1,0,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,1,0,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,1,0,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,1,0,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,1,0,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,1,0,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,1,0,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,1,0,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,1,0,8525d945-08aa-4928-8dca-4e172ea94328,8525d945-08aa-4928-8dca-4e172ea94328,1,0,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,1,0,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,1,0,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,1,0,82be906c-bb06-40ea-b908-54574b0b4848,82be906c-bb06-40ea-b908-54574b0b4848,1,0,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,1,0,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,1,0,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1f8cb390-2cbb-4a88-96ee-b31695b73d78,1,0,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,1,0,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,1,0,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,1,0,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,1,0,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,1,0,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,1,0,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,1,0,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,1,0,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,1,0,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,1,0,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,1,0,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,1,0,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,1,0,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,1,0,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,1,0,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,1,0,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,1,0,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,1,0,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,1,0,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,1,0,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,1,0,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,1,0,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,1,0,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,1,0,b885dbb2-6e18-46a6-929c-3d6d392343ad,b885dbb2-6e18-46a6-929c-3d6d392343ad,1,0,d31e24cf-7493-45dc-ba81-3a00618e53bc,d31e24cf-7493-45dc-ba81-3a00618e53bc,1,0,03f32b08-1b71-47cb-ba1d-965037df4d64,03f32b08-1b71-47cb-ba1d-965037df4d64,1,0,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,1,0,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,1,0,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,1,0,19a0b881-302e-4d0e-ace0-29a9d8379a48,19a0b881-302e-4d0e-ace0-29a9d8379a48,1,0,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,1,0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,1,0,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,1,0,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,1,0,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,1,0,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,1,0,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,1,0,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,1,0,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,1,0,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,1,0,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,1,0,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,1,0,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,1,0,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,1,0,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,1,0,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,1,0,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,1,0,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,1,0,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,1,0,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,1,0,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,1,0,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,1,0,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,1,0,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,1,0,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,1,0,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,1,0,f9229c3e-4a47-49a4-8b14-908218012ff7,f9229c3e-4a47-49a4-8b14-908218012ff7,1,0,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,7c8b9203-2808-4a78-a2b1-b7a71b4f13f6,1,0,b9743978-ba6d-4892-bb32-f24d4a47dd50,b9743978-ba6d-4892-bb32-f24d4a47dd50,1,0,c43accb9-f33d-437f-b305-0595f8fe3032,c43accb9-f33d-437f-b305-0595f8fe3032,1,0,084a398b-836e-424c-af93-22aa39d5a15a,084a398b-836e-424c-af93-22aa39d5a15a,1,0,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,1,0,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,1,0,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,1,0,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,1,0,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,1,0,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,1,0,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,1,0,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,1,0,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,1,0,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,1,0,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,1,0,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,1,0,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,1,0,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,1,0,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,1,0,2b2bf0f7-0946-4492-bba0-27f007a70e64,2b2bf0f7-0946-4492-bba0-27f007a70e64,1,0,22c9a703-5ed3-4156-8fa6-476b1c1452f1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,1,0,8be10d88-8c37-4444-9c89-6cbbe9913bda,8be10d88-8c37-4444-9c89-6cbbe9913bda,1,0,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,1,0,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,1,0,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,1,0,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,1,0,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,1,0,cb1d4a41-20a9-4d76-8798-d47d8858bff1,cb1d4a41-20a9-4d76-8798-d47d8858bff1,1,0,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,1,0,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,1,0,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,1,0,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,1,0,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,1,0,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,1,0,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,1,0,5198c6db-2100-4902-82c8-85c8ea555e78,5198c6db-2100-4902-82c8-85c8ea555e78,1,0,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,1,0,f0b1e9f4-2e07-44e6-88d2-c11457135781,f0b1e9f4-2e07-44e6-88d2-c11457135781,1,0,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,1,0,f935399f-3554-4c08-b0a6-eba13074e1b7,f935399f-3554-4c08-b0a6-eba13074e1b7,1,0,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,1,0,765f9584-fefa-4695-b130-dd54c3b0d79d,765f9584-fefa-4695-b130-dd54c3b0d79d,1,0,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,1,0,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,1,0,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,1,0,2c1c9284-ba8b-4282-a89c-429f02ea41f6,2c1c9284-ba8b-4282-a89c-429f02ea41f6,1,0,8c241467-76f7-4161-a8a1-5da4a6576b75,8c241467-76f7-4161-a8a1-5da4a6576b75,1,0,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1,0,fd7e5257-024c-46de-9ff3-edd302fadba5,fd7e5257-024c-46de-9ff3-edd302fadba5,1,0,a4168057-d99f-4b55-b762-214f95ae3a30,a4168057-d99f-4b55-b762-214f95ae3a30,1,0,ab4fe549-1c07-42d9-b412-8b89ed115591,ab4fe549-1c07-42d9-b412-8b89ed115591,1,0,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,1,0,b49c589d-b45d-4aff-8899-72cfe433e9a6,b49c589d-b45d-4aff-8899-72cfe433e9a6,1,0,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,1,0,273ad3f7-c645-434d-93b0-e832134f3043,273ad3f7-c645-434d-93b0-e832134f3043,1,0,d320803b-1de4-4e66-b455-0afe39be5c41,d320803b-1de4-4e66-b455-0afe39be5c41,1,0,67e85b9a-a138-49ea-b474-04475f0f8c90,67e85b9a-a138-49ea-b474-04475f0f8c90,1,0,364218e0-87ba-4008-a3e3-e2351a5e04b8,364218e0-87ba-4008-a3e3-e2351a5e04b8,1,0,788a98e0-194f-466c-b4fa-bafd527aae26,788a98e0-194f-466c-b4fa-bafd527aae26,1,0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,5d990585-02dd-4a13-8dfa-920df7d1dbb0,1,0,143f6db9-a4dc-4039-90d0-6161394a3e2f,143f6db9-a4dc-4039-90d0-6161394a3e2f,1,0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,07820e9e-9d6b-4c37-909e-90dbd33e30c0,1,0,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,1,0,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,1,0,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,1,0,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,1,0,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,1,0,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,1,0,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,1,0,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,1,0,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,1,0,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,1,0,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,1,0,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,1,0,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,1,0,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,1,0,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,1,0,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,1,0,86249619-8981-4fc4-85fc-ce30e4b9d542,86249619-8981-4fc4-85fc-ce30e4b9d542,1,0,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,1,0,98aa8a80-29fa-4a54-8d0e-90d413d63da1,98aa8a80-29fa-4a54-8d0e-90d413d63da1,1,0,60af0c11-852e-4b45-afb7-251d75a87150,60af0c11-852e-4b45-afb7-251d75a87150,1,0,37e81463-a558-4b03-b0e4-82ac0e99c80c,37e81463-a558-4b03-b0e4-82ac0e99c80c,1,0,8be35c43-32e6-418d-b3d6-e53ef56babb7,8be35c43-32e6-418d-b3d6-e53ef56babb7,1,0,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,1,0,935d01e1-232b-480e-a6bf-c21c617c6348,935d01e1-232b-480e-a6bf-c21c617c6348,1,0,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,1,0,05c702a1-2c74-45d5-b2ee-fdd795b0945a,05c702a1-2c74-45d5-b2ee-fdd795b0945a,1,0,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,1,0,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,1,0,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,1,0,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,1,0,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,1,0,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,1,0,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,1,0,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,1,0,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,1,0,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,1,0,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,1,0,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,1,0,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,1,0,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,1,0,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,1,0,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,1,0,2f9c347d-ee82-49f2-a5eb-97f55374856f,2f9c347d-ee82-49f2-a5eb-97f55374856f,1,0,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,1,0,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,1,0,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,1,0,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,1,0,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,1,0,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,1,0,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,1,0,a89ee622-6942-411a-8566-f03d139c9e5b,a89ee622-6942-411a-8566-f03d139c9e5b,1,0,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,1,0,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,1,0,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,1,0,198ea989-5001-47ac-86b8-aa2585a5f7d7,198ea989-5001-47ac-86b8-aa2585a5f7d7,1,0,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,4abe448b-a225-4ac2-8cc9-c3c6c0e9b1ac,1,0,fb84c5f7-11da-4b17-979e-41e27a74e789,fb84c5f7-11da-4b17-979e-41e27a74e789,1,0,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,1,0,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,1,0,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,1,0,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,1,0,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,1,0,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,1,0,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,1,0,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,1,0,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,1,0,6de34ed8-5d6c-4bb6-af94-328e692b862e,6de34ed8-5d6c-4bb6-af94-328e692b862e,1,0,e705bde3-45c3-4ffd-a767-0320c6cc8b91,e705bde3-45c3-4ffd-a767-0320c6cc8b91,1,0,504280a1-a451-4547-ae71-e217f8fdf8f6,504280a1-a451-4547-ae71-e217f8fdf8f6,1,0,b071a9fe-0e9f-4ded-8dab-b1388fd12897,b071a9fe-0e9f-4ded-8dab-b1388fd12897,1,0,a2accd5e-e6f5-4d5f-8243-51aadfa88b00,a2accd5e-e6f5-4d5f-8243-51aadfa88b00,1,0,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,1,0,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,1,0,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,1,0,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,1,0,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,1,0,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,1,0,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,1,0,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,1,0,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,1,0,64ed8c1a-6446-4f0d-a2ef-c599e84c4909,64ed8c1a-6446-4f0d-a2ef-c599e84c4909,1,0,52fc85fb-309b-4739-bbd3-c3966657e973,52fc85fb-309b-4739-bbd3-c3966657e973,1,0,87081ab5-bdd5-4daa-88ef-8a2cba8c7d53,87081ab5-bdd5-4daa-88ef-8a2cba8c7d53,1,0,be3cfba8-e6f6-4202-ab0f-96c00fbf7462,be3cfba8-e6f6-4202-ab0f-96c00fbf7462,1,0,64ef1b5c-ec04-45eb-9998-bc573f4038d7,64ef1b5c-ec04-45eb-9998-bc573f4038d7,1,0,4fde5159-8f21-4151-8dbd-b2cd376d9392,4fde5159-8f21-4151-8dbd-b2cd376d9392,1,0,3ea799a6-6642-4388-b0a3-c2962e71ff51,3ea799a6-6642-4388-b0a3-c2962e71ff51,1,0,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,1,0,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,1,0,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,1,0,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,1,0,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,1,0,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,1,0,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,1,0,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,1,0,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,1,0,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,1,0,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,1,0,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,1,0,3ab0649b-239f-4466-b897-73c0ab628927,3ab0649b-239f-4466-b897-73c0ab628927,1,0,4c697110-8941-4d6d-ba03-f2b9e96ff82e,4c697110-8941-4d6d-ba03-f2b9e96ff82e,1,0,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,1,0,b172631b-da0d-42f4-ae6b-ae122a46cced,b172631b-da0d-42f4-ae6b-ae122a46cced,1,0,1a25e744-37ae-46ca-a328-ff8eced21a82,1a25e744-37ae-46ca-a328-ff8eced21a82,1,0,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,1,0,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,1,0,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,1,0,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,1,0,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,1,0,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,1,0,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,1,0,5a94a307-3f54-4753-8ef5-ce9f88417827,5a94a307-3f54-4753-8ef5-ce9f88417827,1,0,0f09b6b8-72ac-4461-96c4-683be403e2ff,0f09b6b8-72ac-4461-96c4-683be403e2ff,1,0,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,1,0,19d1d74a-de5f-475a-896c-a32b7d28f918,19d1d74a-de5f-475a-896c-a32b7d28f918,1,0,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,1,0,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,1,0,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,1,0,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,1,0,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,1,0,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,1,0,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,1,0,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,1,0,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,1,0,e6a53f32-0b7d-499d-844e-fb8df13a3519,e6a53f32-0b7d-499d-844e-fb8df13a3519,1,0,4a55351b-77e2-4c7c-a7d7-aac213d3c2a7,4a55351b-77e2-4c7c-a7d7-aac213d3c2a7,1,0,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,f79ac41b-6ab2-4afc-aa98-b70b72d78bb4,1,0,2c5a56d3-386e-45df-adc2-4471f52f9bdc,2c5a56d3-386e-45df-adc2-4471f52f9bdc,1,0,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,1,0,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,1,0,22474ca3-565b-4b67-a5b4-b0b959306d10,22474ca3-565b-4b67-a5b4-b0b959306d10,1,0,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1,0,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,1,0,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,1,0,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,1,0,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,1,0,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,1,0,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,1,0,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,1,0,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,1,0,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,1,0,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,1,0,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,1,0,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,1,0,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,1,0,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,1,0,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,1,0,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,1,0,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,1,0,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,1,0,3e44d463-f253-4a64-8d68-631fcb66935c,3e44d463-f253-4a64-8d68-631fcb66935c,1,0,653d6483-029b-4453-a7d0-3a3c6d9d0b05,653d6483-029b-4453-a7d0-3a3c6d9d0b05,1,0,ac507771-50bd-4f8b-b72f-5954562c9131,ac507771-50bd-4f8b-b72f-5954562c9131,1,0,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,1,0,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,1,0,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,1,0,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,1,0,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,1,0,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,1,0,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,1,0,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,1,0,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,1,0,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,1,0,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,1,0,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,1,0,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,1,0,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,1,0,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,1,0,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,1,0,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,1,0,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1,0,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,1,0,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,1,0,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,1,0,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,1,0,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,1,0,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,1,0,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,1,0,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,1,0,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,1,0,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,1,0,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,1,0,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,1,0,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,1,0,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,1,0,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,1,0,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1,0,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,1,0,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,1,0,3df3f61a-2c17-4278-8d82-91089f793e6a,3df3f61a-2c17-4278-8d82-91089f793e6a,1,0,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,1,0,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,1,0,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,1,0,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,1,0,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,1,0,a51f7c6f-2631-4d23-becc-c0e8b711fddd,a51f7c6f-2631-4d23-becc-c0e8b711fddd,1,0,37806357-d92c-4bea-a5ef-77f138578fda,37806357-d92c-4bea-a5ef-77f138578fda,1,0,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,1,0,0a880538-f97f-448e-a4a9-82b0194dbe28,0a880538-f97f-448e-a4a9-82b0194dbe28,1,0,179868b7-d342-4df0-9386-c114d75faf3a,179868b7-d342-4df0-9386-c114d75faf3a,1,0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,1,0,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,4d72bd30-8d60-4f84-9ad8-83489d9cb3fb,1,0,7e4afed8-5c56-4765-bcd0-a40e6121ba22,7e4afed8-5c56-4765-bcd0-a40e6121ba22,1,0,155660a1-8a63-4562-a715-d75a8af7176b,155660a1-8a63-4562-a715-d75a8af7176b,1,0,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,1,0,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,1,0,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,1,0,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,1,0,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,1,0,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,1,0,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,1,0,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,1,0,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,1,0,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,1,0,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,1,0,f5c4d4ad-dda6-4dc3-b112-61f776006f3c,f5c4d4ad-dda6-4dc3-b112-61f776006f3c,1,0,466d9fd7-188e-4f3b-a673-35db9075d537,466d9fd7-188e-4f3b-a673-35db9075d537,1,0,1c2e2c7d-c9d2-46a6-81f9-30078ca511c7,1c2e2c7d-c9d2-46a6-81f9-30078ca511c7,1,0,09d3717a-d6f9-42fd-ae9e-df5658fa3981,09d3717a-d6f9-42fd-ae9e-df5658fa3981,1,0,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,fc65918a-2ad1-47b1-980d-5afe63579964,fc65918a-2ad1-47b1-980d-5afe63579964,1,0,7ece6efe-16a1-4294-8c28-3fa6427ba9f0,7ece6efe-16a1-4294-8c28-3fa6427ba9f0,1,0,61094d92-b1e6-45b9-9258-38a7bb1d6469,61094d92-b1e6-45b9-9258-38a7bb1d6469,1,0,4791b5d4-3568-4420-8c25-89ecce7c6353,4791b5d4-3568-4420-8c25-89ecce7c6353,1,0,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,1,0,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,1,0,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,1,0,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,1,0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,1,0,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1,0,00605607-03ab-43fc-ba08-9fc32f582d0a,00605607-03ab-43fc-ba08-9fc32f582d0a,1,0,5ab0a910-74ab-4af0-b5a3-40845a789fde,5ab0a910-74ab-4af0-b5a3-40845a789fde,1,0,bb659006-c11e-4427-8d86-229ba43ef679,bb659006-c11e-4427-8d86-229ba43ef679,1,0,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,1,0,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,1,0,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,1,0,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,1,0,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,1,0,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,1,0,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,1,0,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,1,0,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,1,0,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,1,0,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,1,0,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1,0,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,1,0,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,1,0,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,1,0,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,1,0,ec11342f-594f-416f-a10f-bd1bfa695c08,ec11342f-594f-416f-a10f-bd1bfa695c08,1,0,31c3ac44-204e-43fd-bca3-fd18fa091c58,31c3ac44-204e-43fd-bca3-fd18fa091c58,1,0,74f03c35-5da0-406e-a938-e8e5d49975ef,74f03c35-5da0-406e-a938-e8e5d49975ef,1,0,c9ab3890-6d16-431f-ab2b-b5058e6202a4,c9ab3890-6d16-431f-ab2b-b5058e6202a4,1,0,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,1,0,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,1,0,4090c6f7-1d25-4b17-9baa-18daa0640b0f,4090c6f7-1d25-4b17-9baa-18daa0640b0f,1,0,26125e58-dfc8-4bbb-a3a4-80616471746e,26125e58-dfc8-4bbb-a3a4-80616471746e,1,0,b1c699cd-efdc-461c-ad37-10bfd4bc9674,b1c699cd-efdc-461c-ad37-10bfd4bc9674,1,0,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,1,0,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,1,0,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,1,0,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,1,0,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,1,0,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,1,0,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,1,0,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,1,0,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,1,0,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,1,0,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,1,0,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,1,0,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,1,0,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,1,0,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,1,0,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,1,0,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,1,0,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,1,0,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,1,0,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,1,0,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,1,0,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,1,0,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,1,0,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,1,0,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,1,0,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,1,0,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,1,0,00696255-ea14-4fee-8633-0962f3c441d1,00696255-ea14-4fee-8633-0962f3c441d1,1,0,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,1,0,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,1,0,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,1,0,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,1,0,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,1,0,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,1,0,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,1,0,fef27478-ddfd-4ad9-8161-148761f29698,fef27478-ddfd-4ad9-8161-148761f29698,1,0,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,1,0,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,1,0,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,1,0,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,1,0,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,1,0,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,1,0,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,1,0,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,1,0,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1,0,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,1,0,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,1,0,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,1,0,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,1,0,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,1,0,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,1,0,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,1,0,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,1,0,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,1,0,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,1,0,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,1,0,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,1,0,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,1,0,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,1,0,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,1,0,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,1,0,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,1,0,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,1,0,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,1,0,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,1,0,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,1,0,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,1,0,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,1,0,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,1,0,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,1,0,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,1,0,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,1,0,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,1,0,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,1,0,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,1,0,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,1,0,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,1,0,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,1,0,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,1,0,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,1,0,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,1,0,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,1,0,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,1,0,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,1,0,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,1,0,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,1,0,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,1,0,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,1,0,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,1,0,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,1,0,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,1,0,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,1,0,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,1,0,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,1,0,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,1,0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,1,0,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,1,0,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,1,0,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,1,0,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,1,0,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,1,0,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,1,0,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,1,0,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,1,0,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,1,0,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,1,0,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,1,0,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,1,0,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,1,0,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,1,0,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,1,0,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,1,0,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,1,0,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,1,0,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,1,0,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,1,0,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,1,0,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,1,0,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,1,0,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,1,0,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,1,0,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,1,0,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,1,0,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,1,0,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,1,0,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,1,0,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,1,0,b3f7f763-bea9-4f59-9450-df95e5c3d89d,b3f7f763-bea9-4f59-9450-df95e5c3d89d,1,0,9111e28e-c1c7-414b-9288-61bd06a04d04,9111e28e-c1c7-414b-9288-61bd06a04d04,1,0,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,1,0,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,1,0,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,1,0,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,1,0,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,1,0,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1,0,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,1,0,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,1,0,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,1,0,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,1,0,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,1,0,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1,0,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,1,0,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,1,0,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,1,0,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,1,0,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,1,0,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,1,0,3afe11f6-7424-4b41-a42f-91db33756fa3,3afe11f6-7424-4b41-a42f-91db33756fa3,1,0,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,1,0,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,1,0,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,1,0,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,1,0,f908b81e-f5ba-46ca-b7c0-8cb43ab23901,f908b81e-f5ba-46ca-b7c0-8cb43ab23901,1,0,3c305f89-e453-46c7-987b-f01dc964efdb,3c305f89-e453-46c7-987b-f01dc964efdb,1,0,1809ff43-2af2-44d1-ac7b-91d5bbe4f0ce,1809ff43-2af2-44d1-ac7b-91d5bbe4f0ce,1,0,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,1,0,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,1,0,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,1,0,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,1,0,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,1,0,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,1,0,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,1,0,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,1,0,c7bafd34-5b15-42ec-b329-0be3002775ad,c7bafd34-5b15-42ec-b329-0be3002775ad,1,0,6feb2278-9149-47f8-a0ec-eb4bd9f44716,6feb2278-9149-47f8-a0ec-eb4bd9f44716,1,0,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,1,0,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,1,0,97ec899d-a2a0-4691-83ff-25b78dd49ef6,97ec899d-a2a0-4691-83ff-25b78dd49ef6,1,0,411db885-f761-44e5-bdd1-9fdf9e741ac1,411db885-f761-44e5-bdd1-9fdf9e741ac1,1,0,269ada84-71a9-4b4b-9604-caa40c5b7067,269ada84-71a9-4b4b-9604-caa40c5b7067,1,0,ea13607a-3e05-4468-9932-41b6d51cfedf,ea13607a-3e05-4468-9932-41b6d51cfedf,1,0,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,1,0,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,1,0,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,1,0,43e37533-ed38-4000-a387-5749f8d9aaf3,43e37533-ed38-4000-a387-5749f8d9aaf3,1,0,e93bdb44-64b3-43d8-b15a-c561dbb91974,e93bdb44-64b3-43d8-b15a-c561dbb91974,1,0,a7c7c835-5402-4bdd-a0e3-d21746174d5a,a7c7c835-5402-4bdd-a0e3-d21746174d5a,1,0,07e81872-afac-4720-86b4-91e7bf4a2881,07e81872-afac-4720-86b4-91e7bf4a2881,1,0,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,1,0,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,1,0,532dfa48-39b0-4d0f-9f8c-b51ca27e47a9,532dfa48-39b0-4d0f-9f8c-b51ca27e47a9,1,0,17bc0f34-c35b-4beb-be5f-8e8d8f06c053,17bc0f34-c35b-4beb-be5f-8e8d8f06c053,1,0,f91813e6-b75c-43fb-8da3-a0d958dc6fa0,f91813e6-b75c-43fb-8da3-a0d958dc6fa0,1,0,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,1,0,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,1,0,39598414-9c1d-46ec-a534-8bd43e622e45,39598414-9c1d-46ec-a534-8bd43e622e45,1,0,b552c510-4fd4-4c16-9022-dc5babcafc52,b552c510-4fd4-4c16-9022-dc5babcafc52,1,0,3892c06d-28f1-4238-a929-201316cac1ed,3892c06d-28f1-4238-a929-201316cac1ed,1,0,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,1,0,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,1,0,567c68fd-74c7-4b6e-9119-56ac8d78073c,567c68fd-74c7-4b6e-9119-56ac8d78073c,1,0,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,1,0,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,1,0,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,1,0,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,1,0,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,1,0,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,1,0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,1,0,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,1,0,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,1,0,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,1,0,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,1,0,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,1,0,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,1,0,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,1,0,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,1,0,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,1,0,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,1,0,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,1,0,d5a73869-381e-4878-8db7-596643937202,d5a73869-381e-4878-8db7-596643937202,1,0,c91de10a-d370-4495-9d9e-98581e566385,c91de10a-d370-4495-9d9e-98581e566385,1,0,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,3a93f1d2-3e9c-41a9-9d53-314538a96bb2,1,0,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,8bc4bece-027f-460c-ade0-d7c7d3d9a6b7,1,0,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,dd73a8d8-a6db-4d3c-a808-d82bad8876b9,1,0,11a93e3a-3c5b-4242-913c-02474a383344,11a93e3a-3c5b-4242-913c-02474a383344,1,0,ddd2861c-592b-4879-b9de-4b05a22c0b43,ddd2861c-592b-4879-b9de-4b05a22c0b43,1,0,5b383021-a800-4f0b-b8a3-d344389bff6c,5b383021-a800-4f0b-b8a3-d344389bff6c,1,0,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,8fe71bce-a61a-4a2e-bd18-81c7a7bb4456,1,0,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,11e708d8-82f4-4d45-a77d-7b9d23c0ef54,1,0,8a57d427-a34e-4121-84e6-1a86a9f9092d,8a57d427-a34e-4121-84e6-1a86a9f9092d,1,0,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,dbc1bf11-e92a-4f4e-90d4-6a3ccdaec7e5,1,0,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,29ec9423-25ef-4cf2-ad6a-58f854c3e22b,1,0,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,2607e4d1-4fc0-4270-ad45-2c95d4aa04da,1,0,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,b4b4bd5d-a860-4994-90b7-0c60ab680c4e,1,0,68447105-a784-4803-8eb8-3701b0fc819d,68447105-a784-4803-8eb8-3701b0fc819d,1,0,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,5fb5320c-cd7c-4f28-ad6a-8670a60a9e11,1,0,59dee70d-aeca-470a-b3c4-e43bb16c5753,59dee70d-aeca-470a-b3c4-e43bb16c5753,1,0,82777e92-0681-44bf-b51e-4d98fcd5d5bd,82777e92-0681-44bf-b51e-4d98fcd5d5bd,1,0,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,2e0b331d-92d4-4250-94c6-9ced8cdcb1e4,1,0,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,1,0,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,1,0,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,1,0,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,1,0,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,1,0,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,1,0,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,1,0,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,1,0,325bacdd-793f-47d8-b987-57e9d5f2782b,325bacdd-793f-47d8-b987-57e9d5f2782b,1,0,80395d47-70d7-4d8d-9b18-93283fba80c2,80395d47-70d7-4d8d-9b18-93283fba80c2,1,0,8b621ec9-24c9-4166-90ce-29c5ad30f78b,8b621ec9-24c9-4166-90ce-29c5ad30f78b,1,0,cc98670a-7b18-4973-b211-90261c5c8c10,cc98670a-7b18-4973-b211-90261c5c8c10,1,0,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,1,0,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,1,0,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,1,0,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,1,0,62957889-503f-4923-a372-29776dc3b5e5,62957889-503f-4923-a372-29776dc3b5e5,1,0,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,1,0,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,1,0,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,1,0,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,1,0,6b28a716-2fb1-47f7-a7d6-f2fe7edb32c3,6b28a716-2fb1-47f7-a7d6-f2fe7edb32c3,1,0,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,1,0,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,1,0,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,1,0,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,1,0,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,1,0,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,1,0,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,1,0,73afaad8-dfa9-43e3-bdaf-543c3545d788,73afaad8-dfa9-43e3-bdaf-543c3545d788,1,0,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,1,0,4f0bda80-2246-43be-95f8-ae8480682cd5,4f0bda80-2246-43be-95f8-ae8480682cd5,1,0,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,1,0,6f683f46-9eef-4e78-bc2f-7174238bf53c,6f683f46-9eef-4e78-bc2f-7174238bf53c,1,0,7d1ed38b-98cf-4a0e-a605-680bb580d904,7d1ed38b-98cf-4a0e-a605-680bb580d904,1,0,b769eda0-11de-401c-a68b-4fce4555d4fc,b769eda0-11de-401c-a68b-4fce4555d4fc,1,0,fd7a668f-3099-4e15-956a-92c6295dd4d5,fd7a668f-3099-4e15-956a-92c6295dd4d5,1,0,afcbd830-ec5f-4865-a176-ea3014dff908,afcbd830-ec5f-4865-a176-ea3014dff908,1,0,dc5fc801-14e4-42e8-b396-76eb30b69eea,dc5fc801-14e4-42e8-b396-76eb30b69eea,1,0,485b9f00-475a-49e5-ade2-b2e05d94ecf0,485b9f00-475a-49e5-ade2-b2e05d94ecf0,1,0,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,b7fae67e-bdbb-4cdf-a6fd-26265e48fddb,1,0,398bf9d1-c353-461e-a1be-683047dcbe41,398bf9d1-c353-461e-a1be-683047dcbe41,1,0,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,1,0,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,1,0,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,1,0,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,1,0,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,1,0,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,1,0,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,1,0,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,1,0,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,1,0,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,1,0,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,1,0,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,1,0,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,1,0,569047c2-0879-4fba-a814-44812d21043b,569047c2-0879-4fba-a814-44812d21043b,1,0,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,0c3c4494-c037-431e-9eeb-9b6cfd7372c3,1,0,80512d95-5458-4934-98ae-a7b58099196b,80512d95-5458-4934-98ae-a7b58099196b,1,0,6f2354cd-4a34-4921-96bb-b786486f85cf,6f2354cd-4a34-4921-96bb-b786486f85cf,1,0,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,1,0,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,1,0,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,1,0,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,1,0,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,1,0,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,1,0,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,1,0,1db1cb24-f364-4b91-bc96-c216764207a0,1db1cb24-f364-4b91-bc96-c216764207a0,1,0,64d7c8a7-1c15-4afb-ad97-abf8729c604e,64d7c8a7-1c15-4afb-ad97-abf8729c604e,1,0,a3cbbc8a-4afd-48c5-91d4-4849d18905c1,a3cbbc8a-4afd-48c5-91d4-4849d18905c1,1,0,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,5d6b29dc-38af-4dce-b79c-ce8f23afb3b1,1,0,c04b685a-0d2d-404c-a74a-775ffab298ce,c04b685a-0d2d-404c-a74a-775ffab298ce,1,0,5fe6967d-e333-464b-a89e-8c868c0ce37d,5fe6967d-e333-464b-a89e-8c868c0ce37d,1,0,5aef2892-7a87-4d3b-bb46-8340a7fb97a8,5aef2892-7a87-4d3b-bb46-8340a7fb97a8,1,0,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,1,0,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,1,0,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,1,0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,54b5b44c-5f24-4b2a-982c-4489b18db7f0,1,0,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,5bc04a9a-6a0a-4607-b8eb-743b87143ae7,1,0,e057e428-99c1-419d-a169-697c1e825e94,e057e428-99c1-419d-a169-697c1e825e94,1,0,784a60bd-4070-476d-9b8b-f607c76dc52b,784a60bd-4070-476d-9b8b-f607c76dc52b,1,0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,904d5bd0-3843-4aaa-86a3-f8e12282e5c0,1,0,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,ce1ffc4e-56c2-45ce-80e8-8b96d00316bc,1,0,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,1,0,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,1,0,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,1,0,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,1,0,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,1,0,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,1,0,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,1,0,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,1,0,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,1,0,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,1,0,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,1,0,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,1,0,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,1,0,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,1,0,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,1,0,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,1,0,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,1,0,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,1,0,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,1,0,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,1,0,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,1,0,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,1,0,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,1,0,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,1,0,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,1,0,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,1,0,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,1,0,e870a1bd-0c08-4d1e-832a-357922983c19,e870a1bd-0c08-4d1e-832a-357922983c19,1,0,9f71aeac-f889-40dc-91bd-d670da4efd2b,9f71aeac-f889-40dc-91bd-d670da4efd2b,1,0,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,1,0,614ef0bd-3298-408b-bf71-37df8ee60702,614ef0bd-3298-408b-bf71-37df8ee60702,1,0,26ff1be6-f72a-456a-9dce-302029752603,26ff1be6-f72a-456a-9dce-302029752603,1,0,db850a08-0c99-4a57-9b04-38be64bd38fb,db850a08-0c99-4a57-9b04-38be64bd38fb,1,0,abeca127-5ae9-46af-a5e8-d6438fd68367,abeca127-5ae9-46af-a5e8-d6438fd68367,1,0,bce81631-9f6d-42b3-b4b6-2199afb08f2f,bce81631-9f6d-42b3-b4b6-2199afb08f2f,1,0,67d6878f-3e47-4142-8f98-c5a207f0b8a8,67d6878f-3e47-4142-8f98-c5a207f0b8a8,1,0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,1,0,68636657-4d46-4c2a-9b2f-11521a55dfb4,68636657-4d46-4c2a-9b2f-11521a55dfb4,1,0,18a83f43-dc84-4f8a-9580-681b19f571c4,18a83f43-dc84-4f8a-9580-681b19f571c4,1,0,01c588b0-d0ce-4978-b04d-084e6a00fcc7,01c588b0-d0ce-4978-b04d-084e6a00fcc7,1,0,a23642d9-8c4f-44a5-8865-bfb286e47c55,a23642d9-8c4f-44a5-8865-bfb286e47c55,1,0,7b37e038-dcef-41e1-b6e7-ed73c6958415,7b37e038-dcef-41e1-b6e7-ed73c6958415,1,0,24df2d14-5ebf-4ded-ba14-5daee7a0c536,24df2d14-5ebf-4ded-ba14-5daee7a0c536,1,0,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,1,0,03bb028a-ee8c-411e-8382-653046f803c6,03bb028a-ee8c-411e-8382-653046f803c6,1,0,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,1,0,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,1,0,38d5ed93-133b-44fe-827a-69a6cfc0461d,38d5ed93-133b-44fe-827a-69a6cfc0461d,1,0,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,1,0,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,1,0,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,1,0,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,1,0,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1,0,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,1,0,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,1,0,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1,0,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,1,0,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,1,0,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,1,0,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,1,0,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,1,0,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,1,0,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,1,0,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1,0,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,1,0,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,1,0,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,1,0,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,1,0,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,1,0,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,1,0,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,1,0,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,1,0,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,1,0,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,1,0,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,1,0,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1,0,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,1,0,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,1,0,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,1,0,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,1,0,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,1,0,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,1,0,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,1,0,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,1,0,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,1,0,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,1,0,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,1,0,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,1,0,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,1,0,45ca19df-90f3-4143-a659-bc0cb97efee9,45ca19df-90f3-4143-a659-bc0cb97efee9,1,0,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,1,0,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,1,0,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,1,0,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,1,0,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,1,0,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,1,0,d57a3300-0f9f-4fe5-b627-01c96b723053,d57a3300-0f9f-4fe5-b627-01c96b723053,1,0,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,1,0,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,1,0,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,1,0,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,1,0,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,1,0,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,1,0,cf783265-a4cb-436f-963a-1ff8220ae246,cf783265-a4cb-436f-963a-1ff8220ae246,1,0,3560f949-48f9-4fca-9fe2-81efc1ec0eee,3560f949-48f9-4fca-9fe2-81efc1ec0eee,1,0,662078f0-b75d-4c44-896f-7b7f74fd1ed4,662078f0-b75d-4c44-896f-7b7f74fd1ed4,1,0,4fa11304-fbd4-4c90-909d-5024283a6868,4fa11304-fbd4-4c90-909d-5024283a6868,1,0,207290c2-5221-48ad-99aa-bb0f7955df3f,207290c2-5221-48ad-99aa-bb0f7955df3f,1,0,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,1,0,d91a016e-cca9-4976-9c53-2c96fa95cf1a,d91a016e-cca9-4976-9c53-2c96fa95cf1a,1,0,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,1,0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,1,0,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,1,0,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,1,0,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,1,0,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,1,0,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,1,0,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,1,0,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,1,0,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,1,0,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,1,0,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,1,0,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,1,0,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,1,0,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,1,0,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,1,0,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,1,0,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,1,0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,1,0,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,1,0,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,1,0,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,1,0,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,1,0,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,1,0,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,1,0,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,1,0,7904d64a-2c30-4434-8924-b4817b727db9,7904d64a-2c30-4434-8924-b4817b727db9,1,0,c550a43a-1240-4f29-9045-a262f37f703a,c550a43a-1240-4f29-9045-a262f37f703a,1,0,86b1feed-ed65-4672-a49a-c52282b40be3,86b1feed-ed65-4672-a49a-c52282b40be3,1,0,85ac42d7-400a-4469-8fcd-e6a14f258792,85ac42d7-400a-4469-8fcd-e6a14f258792,1,0,ec681c28-661c-43e3-9285-9fc606f2d24c,ec681c28-661c-43e3-9285-9fc606f2d24c,1,0,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,be0fbbfc-5873-41a6-80ef-35ed1b8adb4c,1,0,413c2d03-f717-4503-9723-c605114b2799,413c2d03-f717-4503-9723-c605114b2799,1,0,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1,0,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,1,0,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,1,0,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,1,0,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,1,0,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,1,0,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,1,0,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,1,0,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,1,0,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,1,0,e9a2320b-71a1-4974-8b5a-1990062ec7df,e9a2320b-71a1-4974-8b5a-1990062ec7df,1,0,2e459a7c-c448-4db4-ae21-e59646527030,2e459a7c-c448-4db4-ae21-e59646527030,1,0,891194d9-9f02-4b22-89cd-941181c83ecb,891194d9-9f02-4b22-89cd-941181c83ecb,1,0,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,1,0,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,1,0,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,1,0,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,1,0,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,1,0,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1,0,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,1,0,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,1,0,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,1,0,af6bccbb-a6cb-41ee-bc4e-f2d6a5e0f419,af6bccbb-a6cb-41ee-bc4e-f2d6a5e0f419,1,0,d08679db-f83f-476e-b8c4-f3f52c3cf6fd,d08679db-f83f-476e-b8c4-f3f52c3cf6fd,1,0,fad0898f-5769-46ab-bc5e-301924b851a0,fad0898f-5769-46ab-bc5e-301924b851a0,1,0,e0227e4b-be22-4614-8980-5d573fae705d,e0227e4b-be22-4614-8980-5d573fae705d,1,0,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,7a7b7882-a4c1-40c8-a807-cb2d71d054cc,1,0,6f36007b-04dc-4007-abf7-e20fbd126b97,6f36007b-04dc-4007-abf7-e20fbd126b97,1,0,791dbdee-56f6-4fe3-ada4-965c9111d69e,791dbdee-56f6-4fe3-ada4-965c9111d69e,1,0,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,1,0,aa6444a8-6c17-4207-a623-9b734e08e30e,aa6444a8-6c17-4207-a623-9b734e08e30e,1,0,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,1,0,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,1,0,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,1,0,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,1,0,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,1,0,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,1,0,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,1,0,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,1,0,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,1,0,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,1,0,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,1,0,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,1,0,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,1,0,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,1,0,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,1,0,acd30e63-68dc-4ab2-a6fe-16eb69d09271,acd30e63-68dc-4ab2-a6fe-16eb69d09271,1,0,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,1,0,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,1,0,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,1,0,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,1,0,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,1,0,13b3c973-6be3-4898-89d5-20852cd14e46,13b3c973-6be3-4898-89d5-20852cd14e46,1,0,d978d078-4fd8-40b9-90c2-047cdaf94cba,d978d078-4fd8-40b9-90c2-047cdaf94cba,1,0,f38bb317-8a59-4786-be76-e1d4e534628d,f38bb317-8a59-4786-be76-e1d4e534628d,1,0,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,1,0,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,1,0,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,1,0,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,1,0,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,1,0,8fa21575-177f-4b7c-94b5-dfeefe737cb4,8fa21575-177f-4b7c-94b5-dfeefe737cb4,1,0,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,1,0,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,1,0,491a2337-1bf9-45c1-8ae6-95605ef41992,491a2337-1bf9-45c1-8ae6-95605ef41992,1,0,c3f2a760-610a-40e0-945b-1f9f6369444d,c3f2a760-610a-40e0-945b-1f9f6369444d,1,0,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,1,0,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,1,0,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,1,0,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,1,0,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,1,0,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,1,0,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,1,0,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,1,0,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,1,0,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,1,0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,1,0,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,1,0,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,1,0,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,1,0,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,1,0,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,1,0,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,1,0,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,1,0,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,1,0,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1,0,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,1,0,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,1,0,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,1,0,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,1,0,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,1,0,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,1,0,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,1,0,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,1,0,aef03c0b-2846-43b7-b382-9a51ec783e85,aef03c0b-2846-43b7-b382-9a51ec783e85,1,0,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,1,0,c0804a4a-64d5-457f-a542-8e5badccbdf1,c0804a4a-64d5-457f-a542-8e5badccbdf1,1,0,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1,0,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,1,0,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,1,0,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,1,0,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,1,0,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,1,0,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,1,0,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,1,0,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,1,0,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,1,0,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,1,0,1c2da2ac-e797-11e6-0489-a8667f21fde4,1c2da2ac-e797-11e6-0489-a8667f21fde4,1,0,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,1,0,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,1,0,df7892fe-e796-11e6-0489-a8667f21fde4,df7892fe-e796-11e6-0489-a8667f21fde4,1,0,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,1,0,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,1,0,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,1,0,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,1,0,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,1,0,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,1,0,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,1,0,fae8b26c-e796-11e6-0489-a8667f21fde4,fae8b26c-e796-11e6-0489-a8667f21fde4,1,0,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,1,0,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,1,0,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,1,0,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,1,0,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,1,0,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,1,0,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,1,0,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,1,0,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,1,0,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,1,0,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1,0,0a7d282e-45bb-4a87-b325-1659519867fb,0a7d282e-45bb-4a87-b325-1659519867fb,1,0,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,1,0,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,1,0,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,1,0,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,1,0,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,1,0,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,1,0,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,1,0,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,1,0,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,1,0,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,1,0,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,1,0,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,1,0,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,1,0,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,1,0,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,1,0,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,1,0,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,1,0,db03a88b-2804-45c2-9089-7ddb87ef2f18,db03a88b-2804-45c2-9089-7ddb87ef2f18,1,0,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,1,0,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,1,0,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,1,0,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,1,0,dc024d33-1715-40da-9c00-443d25a31ebc,dc024d33-1715-40da-9c00-443d25a31ebc,1,0,d029aa93-fea4-40e4-8cfb-2dc96544829b,d029aa93-fea4-40e4-8cfb-2dc96544829b,1,0,f8f585d1-01a0-4892-8852-c692ffaa1344,f8f585d1-01a0-4892-8852-c692ffaa1344,1,0,35c237a7-71e1-415c-809d-e99babee4e0e,35c237a7-71e1-415c-809d-e99babee4e0e,1,0,2116119f-7637-45a1-8e59-c9149619413b,2116119f-7637-45a1-8e59-c9149619413b,1,0,43882a2c-b625-4cfb-8220-3d12bfee09e4,43882a2c-b625-4cfb-8220-3d12bfee09e4,1,0,90639fdb-144d-495a-a097-76c45107fc97,90639fdb-144d-495a-a097-76c45107fc97,1,0,c076b7fd-7e17-4811-82e7-047e2bf43bb0,c076b7fd-7e17-4811-82e7-047e2bf43bb0,1,0,84b28732-9001-4798-b613-35ea65c26cce,84b28732-9001-4798-b613-35ea65c26cce,1,0,77d8285f-a87b-4a4e-b6ee-85bcd54dee12,77d8285f-a87b-4a4e-b6ee-85bcd54dee12,1,0,f2ec9416-3830-4607-90f3-f77fc53c9c70,f2ec9416-3830-4607-90f3-f77fc53c9c70,1,0,3057de81-eb41-4161-9dc2-5445699906af,3057de81-eb41-4161-9dc2-5445699906af,1,0,f660bf92-7de1-4a22-9cea-777069e4679d,f660bf92-7de1-4a22-9cea-777069e4679d,1,0,54f3fbe7-ac93-44f6-ba6e-37cb99f3569c,54f3fbe7-ac93-44f6-ba6e-37cb99f3569c,1,0,20feb794-eb05-46a6-90e7-ca4e2376d7b2,20feb794-eb05-46a6-90e7-ca4e2376d7b2,1,0,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,8deb4f57-18fc-4db0-ad0f-82d60af3d80b,1,0,2f484aa4-452a-46af-a707-a5a6917bc0db,2f484aa4-452a-46af-a707-a5a6917bc0db,1,0,fd6ff934-6f11-4182-b0cb-6926902d33c0,fd6ff934-6f11-4182-b0cb-6926902d33c0,1,0,315af891-2075-4833-a404-6c0f2004ee53,315af891-2075-4833-a404-6c0f2004ee53,1,0,5725db77-bfbf-4d85-9565-163b309a53ee,5725db77-bfbf-4d85-9565-163b309a53ee,1,0,99a7142c-b3c7-4221-abf8-6831a3cbc16e,99a7142c-b3c7-4221-abf8-6831a3cbc16e,1,0,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,d367a1a1-5a54-4bf9-96c7-d55667e2fb16,1,0,2e09abe1-0934-42ae-970f-5e001c35c31a,2e09abe1-0934-42ae-970f-5e001c35c31a,1,0,587d48a3-5627-4481-b13e-c22740b57d8a,587d48a3-5627-4481-b13e-c22740b57d8a,1,0,1f3e3089-1e04-4147-8ece-aa96a76467dd,1f3e3089-1e04-4147-8ece-aa96a76467dd,1,0,22a213b5-ed72-4181-8ff8-89f860c87aa1,22a213b5-ed72-4181-8ff8-89f860c87aa1,1,0,4c56cbff-653e-4f16-b702-c77190d7eb7f,4c56cbff-653e-4f16-b702-c77190d7eb7f,1,0,172ff335-c7ae-4905-b705-2a1475b95713,172ff335-c7ae-4905-b705-2a1475b95713,1,0,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,db4c311d-ee62-4d47-ac31-5a20cadb7ed1,1,0,cf896f41-7cea-4083-a9f8-96ad881ce641,cf896f41-7cea-4083-a9f8-96ad881ce641,1,0,1d852dc0-90c9-4568-84f9-b1d822573b6b,1d852dc0-90c9-4568-84f9-b1d822573b6b,1,0,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,24f85dbd-59be-4b8d-bea8-7ff8ddb7486a,1,0,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,c997f56c-ef9c-434e-bc4e-7fc5f885aaba,1,0,37c8f5e1-3513-47f8-896d-a54d11b83dcd,37c8f5e1-3513-47f8-896d-a54d11b83dcd,1,0,9e07733c-39f0-491b-91e1-bf2782d957dd,9e07733c-39f0-491b-91e1-bf2782d957dd,1,0,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,cc584a1d-dc91-4693-a5c9-6e8c6607e9d8,1,0,5902d979-1235-4d5a-ace7-93261bdeb725,5902d979-1235-4d5a-ace7-93261bdeb725,1,0,5a090286-7969-44c9-815b-fc58aeb5d8d3,5a090286-7969-44c9-815b-fc58aeb5d8d3,1,0,8e87cf35-af54-4fa2-9428-460b765b282b,8e87cf35-af54-4fa2-9428-460b765b282b,1,0,73380bb1-bee3-4b73-a3df-1dbea99011d2,73380bb1-bee3-4b73-a3df-1dbea99011d2,1,0,8be29533-38de-413d-b420-7dac2e80af6c,8be29533-38de-413d-b420-7dac2e80af6c,1,0,82a77018-8e38-41dd-9d1f-3130bc29a707,82a77018-8e38-41dd-9d1f-3130bc29a707,1,0,4d75aaef-532e-4ed3-8153-083f04f05cc1,4d75aaef-532e-4ed3-8153-083f04f05cc1,1,0,3854a0ba-e156-4ba3-a301-b1a41ac386c4,3854a0ba-e156-4ba3-a301-b1a41ac386c4,1,0,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,f8136f59-ef0c-4c0f-8207-f7a4000e4f0c,1,0,c2321963-cd86-45ec-b323-3fdb5932da3a,c2321963-cd86-45ec-b323-3fdb5932da3a,1,0,d5af38bf-6261-4177-8f74-998a85f0ef39,d5af38bf-6261-4177-8f74-998a85f0ef39,1,0,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,42bbd9f7-ef72-440f-9eb1-fcb3bdc1d91e,1,0,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,1,0,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,1,0,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,1,0,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,1,0,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,1,0,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,1,0,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,1,0,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,1,0,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,1,0,d61ca454-505b-4fd6-be15-d7ed948a5ff6,d61ca454-505b-4fd6-be15-d7ed948a5ff6,1,0,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,1,0,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,1,0,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,1,0,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,1,0,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,1,0,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,1,0,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,1,0,4a87fafc-7ca7-478e-bb31-358c2b85fa92,4a87fafc-7ca7-478e-bb31-358c2b85fa92,1,0,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,1,0,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,1,0,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,1,0,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,1,0,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,1,0,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,1,0,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,1,0,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,1,0,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,1,0,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,1,0,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,1,0,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,1,0,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,1,0,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,1,0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,1,0,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,1,0,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,1,0,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,1,0,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,1,0,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,1,0,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,1,0,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,1,0,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,1,0,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,1,0,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,1,0,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,1,0,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,1,0,a469f018-da26-485f-87c3-f580321a34f0,a469f018-da26-485f-87c3-f580321a34f0,1,0,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,1,0,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,1,0,628de771-c19c-4474-989f-8fb6cd7756a2,628de771-c19c-4474-989f-8fb6cd7756a2,1,0,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,1,0,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,1,0,6789e57b-1293-442c-97d0-b8007367602e,6789e57b-1293-442c-97d0-b8007367602e,1,0,0f193c89-b664-448e-bed3-2147430367f7,0f193c89-b664-448e-bed3-2147430367f7,1,0,4c9b2506-75a8-47d3-a5d5-d946088ba14a,4c9b2506-75a8-47d3-a5d5-d946088ba14a,1,0,36eacaa1-2efd-49c0-82de-2f8972535bf2,36eacaa1-2efd-49c0-82de-2f8972535bf2,1,0,c35a643d-fe3a-4293-93c0-074fa68a31e3,c35a643d-fe3a-4293-93c0-074fa68a31e3,1,0,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,1,0,72ee9a03-a320-4e60-be04-0ee813ea567f,72ee9a03-a320-4e60-be04-0ee813ea567f,1,0,f6f52cc8-23a3-4402-b1eb-0e41584c802a,f6f52cc8-23a3-4402-b1eb-0e41584c802a,1,0,8398e065-8b4b-4901-b057-2a048776bafe,8398e065-8b4b-4901-b057-2a048776bafe,1,0,073c56ca-bf45-422d-957a-f9c57aeee4d0,073c56ca-bf45-422d-957a-f9c57aeee4d0,1,0,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,1,0,68598d98-0c59-4cda-b0b2-6901d3aff88b,68598d98-0c59-4cda-b0b2-6901d3aff88b,1,0,219c1375-f26e-4698-aa82-4b9d735df783,219c1375-f26e-4698-aa82-4b9d735df783,1,0,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,1,0,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,1,0,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,1,0,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1,0,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,1,0,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,1,0,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,1,0,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,1,0,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,1,0,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,1,0,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,1,0,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,1,0,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,1,0,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,1,0,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,1,0,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,1,0,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,1,0,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,1,0,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,1,0,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,1,0,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,1,0,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,1,0,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,1,0,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,1,0,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,1,0,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,1,0,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,1,0,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1,0,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,1,0,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,1,0,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,1,0,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,1,0,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,1,0,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,1,0,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,1,0,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,1,0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,1,0,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,1,0,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,1,0,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,1,0,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,1,0,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,1,0,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,1,0,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,1,0,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,1,0,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1,0,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,1,0,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,1,0,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,1,0,04b5ae71-7fa4-4a64-b406-59dc603b80c5,04b5ae71-7fa4-4a64-b406-59dc603b80c5,1,0,f23a2023-f776-40db-8689-1fc3f7ebc482,f23a2023-f776-40db-8689-1fc3f7ebc482,1,0,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1,0,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,1,0,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,1,0,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,1,0,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,1,0,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,1,0,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,1,0,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,1,0,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,1,0,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,1,0,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,1,0,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,1,0,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,1,0,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,1,0,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,1,0,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,1,0,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,1,0,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,1,0,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,1,0,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,1,0,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,1,0,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,1,0,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,1,0,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,1,0,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,1,0,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,1,0,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,1,0,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,1,0,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,1,0,e62e60ea-9f0c-4a7e-869f-4639f31f826c,e62e60ea-9f0c-4a7e-869f-4639f31f826c,1,0,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,1,0,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,1,0,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,1,0,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,1,0,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,fb5e93bb-e1ff-47a6-a362-ea94e6cbac65,1,0,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,1,0,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,1,0,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,1,0,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,1,0,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,1,0,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,1,0,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,1,0,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,1,0,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,1,0,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,1,0,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,1,0,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,1,0,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,1,0,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,1,0,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,1,0,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,1,0,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,1,0,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,1,0,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,1,0,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,1,0,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,1,0,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,1,0,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,1,0,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,1,0,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,1,0,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,1,0,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,1,0,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,1,0,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,1,0,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,1,0,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,1,0,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,1,0,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,1,0,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,1,0,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,1,0,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,1,0,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,1,0,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,1,0,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,1,0,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,1,0,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,1,0,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,1,0,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,1,0,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,1,0,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,1,0,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,1,0,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,1,0,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,1,0,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,1,0,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,1,0,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,1,0,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,1,0,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,1,0,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,1,0,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,1,0,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,1,0,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,1,0,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,1,0,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,1,0,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,1,0,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,1,0,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,1,0,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,1,0,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,1,0,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,1,0,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,1,0,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,1,0,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,1,0,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,1,0,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,1,0,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,1,0,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,1,0,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,1,0,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,1,0,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,1,0,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,1,0,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,1,0,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,1,0,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,1,0,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,1,0,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,1,0,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,1,0,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,1,0,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,1,0,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,1,0,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,1,0,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,1,0,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,1,0,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,1,0,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,1,0,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,1,0,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,1,0,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,1,0,bd0f9ec3-156a-4a6f-a52b-1213ec825bc0,bd0f9ec3-156a-4a6f-a52b-1213ec825bc0,1,0,71e52f63-04db-4336-ace6-b143d0a7d250,71e52f63-04db-4336-ace6-b143d0a7d250,1,0,afe79ef0-7830-43ce-85f3-c4c97831aa67,afe79ef0-7830-43ce-85f3-c4c97831aa67,1,0,0d7c3192-b15b-4d40-83f9-b76c6f8e654f,0d7c3192-b15b-4d40-83f9-b76c6f8e654f,1,0,fe07f268-bcfd-40c6-adf3-79df859ff731,fe07f268-bcfd-40c6-adf3-79df859ff731,1,0,1a1c88ff-b0c4-42c3-bf10-ebdf4de935b7,1a1c88ff-b0c4-42c3-bf10-ebdf4de935b7,1,0,15e90374-99d9-48f7-b7d6-ec160cdb378f,15e90374-99d9-48f7-b7d6-ec160cdb378f,1,0,ad5b6b8e-c2b5-45aa-8e07-50ae8877ac8f,ad5b6b8e-c2b5-45aa-8e07-50ae8877ac8f,1,0,6c470f57-c920-435a-a013-ff83a737cf3a,6c470f57-c920-435a-a013-ff83a737cf3a,1,0,a5e13e12-72b7-477d-8d80-06015fa5dece,a5e13e12-72b7-477d-8d80-06015fa5dece,1,0,d9c47acd-b5ee-4ea1-b247-7cc09a13eb82,d9c47acd-b5ee-4ea1-b247-7cc09a13eb82,1,0,4a81906a-7db7-4e7d-a95e-79b07a43e573,4a81906a-7db7-4e7d-a95e-79b07a43e573,1,0,0bcabdf4-3348-405d-ba75-7bcc106f9e7f,0bcabdf4-3348-405d-ba75-7bcc106f9e7f,1,0,5f2980ca-3f1c-4680-a6e9-477825442782,5f2980ca-3f1c-4680-a6e9-477825442782,1,0,40fd6b4a-2180-4403-b7e6-48b42d8285b7,40fd6b4a-2180-4403-b7e6-48b42d8285b7,1,0,a671cb1e-b27a-44bb-a8ca-1388f099de2e,a671cb1e-b27a-44bb-a8ca-1388f099de2e,1,0,6cff6b09-91b5-4f2b-89aa-23d2f83f9d89,6cff6b09-91b5-4f2b-89aa-23d2f83f9d89,1,0,a4b6920e-3e25-4798-809a-27d7bfae4ee7,a4b6920e-3e25-4798-809a-27d7bfae4ee7,1,0,981f6e35-64b8-4d63-b383-32ea71fcd025,981f6e35-64b8-4d63-b383-32ea71fcd025,1,0,9a7b964d-1c06-44af-8d25-f84493c70a42,9a7b964d-1c06-44af-8d25-f84493c70a42,1,0,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,1,0,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,1,0,ab057ce4-ac51-4465-8aad-eadc9088c62d,ab057ce4-ac51-4465-8aad-eadc9088c62d,1,0,8842c0e3-2e20-4f37-ae7c-f5449004994b,8842c0e3-2e20-4f37-ae7c-f5449004994b,1,0,5b2cc44b-69cb-495c-a26b-003a495df40b,5b2cc44b-69cb-495c-a26b-003a495df40b,1,0,30250d93-10ff-45c9-920b-5fed3f9d8093,30250d93-10ff-45c9-920b-5fed3f9d8093,1,0,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,1,0,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,1,0,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,1,0,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,1,0,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,1,0,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,1,0,23f93492-59f5-491b-8708-45096934c7e6,23f93492-59f5-491b-8708-45096934c7e6,1,0,30f5471a-17fb-4184-9798-4f8e3ef0cccb,30f5471a-17fb-4184-9798-4f8e3ef0cccb,1,0,27abda4c-a43c-49b4-90cd-db780afe0c45,27abda4c-a43c-49b4-90cd-db780afe0c45,1,0,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,1,0,1a28db16-d410-4101-bf31-21cefa880dae,1a28db16-d410-4101-bf31-21cefa880dae,1,0,2b85bcf6-85b0-4efb-bada-b65414a8d264,2b85bcf6-85b0-4efb-bada-b65414a8d264,1,0,cf027de4-59c9-4b8f-9695-b1d4d16548fe,cf027de4-59c9-4b8f-9695-b1d4d16548fe,1,0,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,1,0,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,1,0,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,1,0,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,1,0,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,1,0,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,1,0,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,1,0,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,1,0,88cefe4a-a6c5-4753-935e-f956d9de9f77,88cefe4a-a6c5-4753-935e-f956d9de9f77,1,0,882e78b7-90bd-4b95-8852-146bdb51ec15,882e78b7-90bd-4b95-8852-146bdb51ec15,1,0,ae4435c3-62c0-4f08-b526-7f9571eed8ae,ae4435c3-62c0-4f08-b526-7f9571eed8ae,1,0,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,1,0,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,1,0,c7b46558-d688-4c42-ae52-f98de7923176,c7b46558-d688-4c42-ae52-f98de7923176,1,0,31fdbb46-1df1-4b74-a54e-b922260dcca6,31fdbb46-1df1-4b74-a54e-b922260dcca6,1,0,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,1,0,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,1,0,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,1,0,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,1,0,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,1,0,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,1,0,8317ac49-890d-4921-8c0d-1bfc676f0b40,8317ac49-890d-4921-8c0d-1bfc676f0b40,1,0,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,1,0,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,1,0,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,1,0,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,1,0,0c732569-a50f-4be3-a214-0843c6a3da47,0c732569-a50f-4be3-a214-0843c6a3da47,1,0,f55d74bf-5824-4228-9683-31f7c7fdf74d,f55d74bf-5824-4228-9683-31f7c7fdf74d,1,0,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,1,0,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,1,0,c30c6860-befb-497e-b432-3dba0f86c540,c30c6860-befb-497e-b432-3dba0f86c540,1,0,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,1,0,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,1,0,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,1,0,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,1,0,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,1,0,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,1,0,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,1,0,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,1,0,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,1,0,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,1,0,e67dff00-92e2-4f58-a950-d5bbca9291c5,e67dff00-92e2-4f58-a950-d5bbca9291c5,1,0,e1964724-804a-4ecc-be9e-5b84e58f2b84,e1964724-804a-4ecc-be9e-5b84e58f2b84,1,0,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,1,0,bf3cb513-2856-472b-8713-7bf8ba70cdce,bf3cb513-2856-472b-8713-7bf8ba70cdce,1,0,de4815c8-0853-47e0-862b-b60119c674f6,de4815c8-0853-47e0-862b-b60119c674f6,1,0,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,1,0,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,1,0,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,1,0,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,1,0,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,1,0,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,1,0,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,1,0,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,1,0,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,1,0,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,1,0,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,1,0,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,1,0,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,1,0,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,1,0,436b558e-6547-4ba6-8cee-954fe36743ea,436b558e-6547-4ba6-8cee-954fe36743ea,1,0,6120bb6e-b177-48bf-b467-02bab0d4cc0d,6120bb6e-b177-48bf-b467-02bab0d4cc0d,1,0,a5af4715-6c4f-484b-9599-5b1b9147713f,a5af4715-6c4f-484b-9599-5b1b9147713f,1,0,307b6e66-6fef-4777-b20a-37898928932f,307b6e66-6fef-4777-b20a-37898928932f,1,0,a69494c0-dcce-4359-aa82-c1cfae8a43eb,a69494c0-dcce-4359-aa82-c1cfae8a43eb,1,0,2b243d49-5500-403a-b177-ac1c70bb889d,2b243d49-5500-403a-b177-ac1c70bb889d,1,0,51c040c6-e7a4-4e0e-b479-039636fdb6ec,51c040c6-e7a4-4e0e-b479-039636fdb6ec,1,0,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,1,0,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,1,0,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,1,0,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,1,0,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,1,0,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,1,0,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,1,0,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,1,0,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,1,0,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,1,0,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,1,0,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,1,0,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,1,0,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,1,0,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,1,0,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,1,0,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,1,0,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,1,0,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,1,0,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,1,0,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,1,0,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,1,0,b4dde44e-57d5-4c3a-bb9b-643787ce07b0,b4dde44e-57d5-4c3a-bb9b-643787ce07b0,1,0,d2160866-78ca-424a-92b9-d389fb341ee0,d2160866-78ca-424a-92b9-d389fb341ee0,1,0,73b36823-72a4-4286-8ee2-02b2f086d5ea,73b36823-72a4-4286-8ee2-02b2f086d5ea,1,0,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,1,0,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,1,0,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,1,0,c013a650-bd4b-4e14-97cc-05df17dbb0d5,c013a650-bd4b-4e14-97cc-05df17dbb0d5,1,0,00bc2e99-c7c9-4a4b-b0bc-c9babe17deda,00bc2e99-c7c9-4a4b-b0bc-c9babe17deda,1,0,18ba2c0c-d606-47ee-9409-66acb24bd794,18ba2c0c-d606-47ee-9409-66acb24bd794,1,0,9f24891c-3846-455a-bf95-be3b186f4342,9f24891c-3846-455a-bf95-be3b186f4342,1,0,ddc332d9-1d60-40fe-87fd-7f2164db1edf,ddc332d9-1d60-40fe-87fd-7f2164db1edf,1,0,d0e3c3a5-e74c-4c0a-8679-77e6a097eb36,d0e3c3a5-e74c-4c0a-8679-77e6a097eb36,1,0,20c43755-49cc-4f11-bd2f-52a9e53547ef,20c43755-49cc-4f11-bd2f-52a9e53547ef,1,0,7dbed991-4883-444c-8ce2-96c203a905f2,7dbed991-4883-444c-8ce2-96c203a905f2,1,0,bbadd00d-6410-41ec-a7d8-4dbd52986cc2,bbadd00d-6410-41ec-a7d8-4dbd52986cc2,1,0,d5f66278-4ab2-407a-abef-eb7636e9ba95,d5f66278-4ab2-407a-abef-eb7636e9ba95,1,0,61e51391-c412-46a5-8290-d5183ad0db83,61e51391-c412-46a5-8290-d5183ad0db83,1,0,e9dfdaa2-4094-4501-a38a-3811e7e4c708,e9dfdaa2-4094-4501-a38a-3811e7e4c708,1,0,0a62947e-848a-47fa-a239-95aee6b955d4,0a62947e-848a-47fa-a239-95aee6b955d4,1,0,beaef14b-175f-4ebe-b387-9c922a42c99e,beaef14b-175f-4ebe-b387-9c922a42c99e,1,0,13daaad0-2726-4065-8158-47059865452a,13daaad0-2726-4065-8158-47059865452a,1,0,a7829dfb-adb9-4401-a609-ca9a0f2376b3,a7829dfb-adb9-4401-a609-ca9a0f2376b3,1,0,26f1076a-8100-4cf4-9539-29637a5e9137,26f1076a-8100-4cf4-9539-29637a5e9137,1,0,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,1,0,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,1,0,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,1,0,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,1,0,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,1,0,951927d4-7bfc-4edb-b97f-dcc29a937400,951927d4-7bfc-4edb-b97f-dcc29a937400,1,0,71309e88-d514-40f3-a329-b2a420e75504,71309e88-d514-40f3-a329-b2a420e75504,1,0,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,1,0,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,1,0,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,1,0,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,1,0,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,1,0,5225b4da-431e-469d-a30c-31fa434b7e86,5225b4da-431e-469d-a30c-31fa434b7e86,1,0,68dcbdd5-c1fd-472f-873c-359d3a237b8c,68dcbdd5-c1fd-472f-873c-359d3a237b8c,1,0,3c6e831c-c934-46bb-8040-edd6de81ba1b,3c6e831c-c934-46bb-8040-edd6de81ba1b,1,0,3c737aff-9581-409a-9a6e-d5e3c133d8df,3c737aff-9581-409a-9a6e-d5e3c133d8df,1,0,916a9ea9-309d-4a7a-9ded-63bda01a39d4,916a9ea9-309d-4a7a-9ded-63bda01a39d4,1,0,0fdbd1ab-716d-46b5-aa75-fb09812ced5b,0fdbd1ab-716d-46b5-aa75-fb09812ced5b,1,0,b26ab92b-9739-4eb4-b855-be6850274432,b26ab92b-9739-4eb4-b855-be6850274432,1,0,17944416-85a5-49e4-9fa8-652c671c3df0,17944416-85a5-49e4-9fa8-652c671c3df0,1,0,b7936cda-654e-4707-af76-385a63243cdf,b7936cda-654e-4707-af76-385a63243cdf,1,0,192844c3-7cb9-4477-a4af-0edb8ce5129d,192844c3-7cb9-4477-a4af-0edb8ce5129d,1,0,33324481-55d1-475f-9f12-7542a05429a2,33324481-55d1-475f-9f12-7542a05429a2,1,0,07b7591f-dcfc-483f-85f6-b5a08d952fe2,07b7591f-dcfc-483f-85f6-b5a08d952fe2,1,0,866c418f-332e-415a-bb8e-794d38f15080,866c418f-332e-415a-bb8e-794d38f15080,1,0,a34b8fdc-e756-4065-b68a-12a07fa7c40e,a34b8fdc-e756-4065-b68a-12a07fa7c40e,1,0,b853debb-d715-4296-9070-45cc5dae571d,b853debb-d715-4296-9070-45cc5dae571d,1,0,fc406b50-f267-44b8-a833-ba7e8880903e,fc406b50-f267-44b8-a833-ba7e8880903e,1,0,6517bf8b-d2fd-4b6b-a4a5-b3086ebad8de,6517bf8b-d2fd-4b6b-a4a5-b3086ebad8de,1,0,391a1891-85a2-45b8-a747-3ecd705fc75b,391a1891-85a2-45b8-a747-3ecd705fc75b,1,0,05681509-254d-4232-af69-62a63ed05716,05681509-254d-4232-af69-62a63ed05716,1,0,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,cc815221-3d2a-4ea3-b1e6-6cb9fb410bd9,1,0,b9ef62f6-9b1d-4d13-8016-73ed531d195a,b9ef62f6-9b1d-4d13-8016-73ed531d195a,1,0,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,742ed6d8-0f8d-4569-b30f-9ff3804cc3b7,1,0,229fe764-87f5-4d19-b042-c31fef5cddd6,229fe764-87f5-4d19-b042-c31fef5cddd6,1,0,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,74cd7504-d34f-42ff-90ff-7abcd54e8b6c,1,0,e932800c-fd81-417d-a601-c774b888d66a,e932800c-fd81-417d-a601-c774b888d66a,1,0,a2335b6f-1dbb-4722-979b-8bed83aa8c94,a2335b6f-1dbb-4722-979b-8bed83aa8c94,1,0,211cf921-d880-4f74-b8ee-5312dea28613,211cf921-d880-4f74-b8ee-5312dea28613,1,0,2fd3a396-b8ae-409e-9373-02a039393a80,2fd3a396-b8ae-409e-9373-02a039393a80,1,0,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,61ae74be-64b2-4bf2-aa63-8fe3dc7ed47d,1,0,346ef414-b20b-4095-86fe-18ca21c9887f,346ef414-b20b-4095-86fe-18ca21c9887f,1,0,c01ab97b-4964-4f7d-b749-56c0b94feb93,c01ab97b-4964-4f7d-b749-56c0b94feb93,1,0,0cc63813-cf16-4a99-b3bd-18a773091230,0cc63813-cf16-4a99-b3bd-18a773091230,1,0,4fc00971-c980-468a-9690-5cd520d12eb0,4fc00971-c980-468a-9690-5cd520d12eb0,1,0,85972c27-4f39-4982-9307-7877e87ef87b,85972c27-4f39-4982-9307-7877e87ef87b,1,0,96afdffb-7595-4c49-9e86-8296f50bd2f5,96afdffb-7595-4c49-9e86-8296f50bd2f5,1,0,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,1,0,e125d3e0-950f-42ee-8904-bd26091afa55,e125d3e0-950f-42ee-8904-bd26091afa55,1,0,2b4797a5-074a-4a01-b99f-1c5590cfde40,2b4797a5-074a-4a01-b99f-1c5590cfde40,1,0,718e53d2-24ec-40fb-9def-825441ada46c,718e53d2-24ec-40fb-9def-825441ada46c,1,0,4c0a7fd6-8f09-41d6-949f-65ce708c1256,4c0a7fd6-8f09-41d6-949f-65ce708c1256,1,0,792abc06-b52a-4691-ba92-96ed73ca702a,792abc06-b52a-4691-ba92-96ed73ca702a,1,0,148dbe44-86d1-4362-b9db-8ff68cd2b34d,148dbe44-86d1-4362-b9db-8ff68cd2b34d,1,0,1fbc893e-3000-4fac-88f5-c82251835d65,1fbc893e-3000-4fac-88f5-c82251835d65,1,0,05852816-63ec-4179-abca-66372bbfb04c,05852816-63ec-4179-abca-66372bbfb04c,1,0,0165f721-b011-4524-bfd5-81e35092f2be,0165f721-b011-4524-bfd5-81e35092f2be,1,0,e74925d4-1979-4600-8560-0932d26450ad,e74925d4-1979-4600-8560-0932d26450ad,1,0,aa108131-151d-4356-8a24-345e4ec74281,aa108131-151d-4356-8a24-345e4ec74281,1,0,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,1,0,e3251f1a-3c80-4c86-9960-270920bd512f,e3251f1a-3c80-4c86-9960-270920bd512f,1,0,3c3d5474-977b-4df9-88de-042e997bd10d,3c3d5474-977b-4df9-88de-042e997bd10d,1,0,4b88d172-5a44-4011-bb38-e94bf7a9c879,4b88d172-5a44-4011-bb38-e94bf7a9c879,1,0,3bced2d4-e3d7-4489-a26d-f84620b096f4,3bced2d4-e3d7-4489-a26d-f84620b096f4,1,0,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,e8c048fc-0f39-4778-aaf3-d6bff5acb06a,1,0,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,c7efb89b-f9e5-4b58-b7a0-502cea8cf1d4,1,0,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,cd133f15-aa45-4ec9-93c2-2f0f66baf3f3,1,0,18436045-1008-4114-8032-274fea0f4627,18436045-1008-4114-8032-274fea0f4627,1,0,cad93727-cffb-44a6-aaee-be73a078e802,cad93727-cffb-44a6-aaee-be73a078e802,1,0,c034f410-ff8e-45d7-925f-94448f88a7af,c034f410-ff8e-45d7-925f-94448f88a7af,1,0,0027727b-3917-4010-9953-1649266e8ed7,0027727b-3917-4010-9953-1649266e8ed7,1,0,b088786a-046f-458c-8e7a-5bebf8df8b34,b088786a-046f-458c-8e7a-5bebf8df8b34,1,0,6d015113-1e32-4f5e-aacd-8134d7307125,6d015113-1e32-4f5e-aacd-8134d7307125,1,0,58230238-d2f2-422e-90cb-de355996eb19,58230238-d2f2-422e-90cb-de355996eb19,1,0,3d907678-628d-4fb2-85c2-149839024c08,3d907678-628d-4fb2-85c2-149839024c08,1,0,71384d10-6acf-4139-b766-cb8b5796f1a7,71384d10-6acf-4139-b766-cb8b5796f1a7,1,0,a8f149d7-e9bc-4695-b4f4-88434e31aafb,a8f149d7-e9bc-4695-b4f4-88434e31aafb,1,0,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,1,0,11ba510f-cb57-43d0-9897-c49e10b67ccd,11ba510f-cb57-43d0-9897-c49e10b67ccd,1,0,9d92af67-c88d-4429-9e85-0b5bf04c4b79,9d92af67-c88d-4429-9e85-0b5bf04c4b79,1,0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,1,0,43523bbb-c923-4a20-bcb5-50d30cc826ee,43523bbb-c923-4a20-bcb5-50d30cc826ee,1,0,c89d9aad-3364-45df-88b5-b23ae76edbba,c89d9aad-3364-45df-88b5-b23ae76edbba,1,0,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,1,0,7e4b9dce-e332-4d35-8b5f-d3f88918989d,7e4b9dce-e332-4d35-8b5f-d3f88918989d,1,0,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,1,0,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,1,0,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,1,0,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,1,0,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,1,0,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,1,0,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,1,0,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,1,0,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,1,0,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,1,0,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,1,0,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,1,0,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,1,0,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,1,0,de2bdd4f-93f2-4341-86d6-7082fc286a5c,de2bdd4f-93f2-4341-86d6-7082fc286a5c,1,0,ba96ec0e-931e-45be-a782-e68ba4fedddb,ba96ec0e-931e-45be-a782-e68ba4fedddb,1,0,9af5882f-3a42-4fae-83df-6aa8de577112,9af5882f-3a42-4fae-83df-6aa8de577112,1,0,79bc5e39-3017-48bf-8e42-fa34e8b581ef,79bc5e39-3017-48bf-8e42-fa34e8b581ef,1,0,fe6e207f-d306-4470-8441-ffd3f3710d31,fe6e207f-d306-4470-8441-ffd3f3710d31,1,0,7451af80-7387-4e8d-a3da-2ae0540c3fd4,7451af80-7387-4e8d-a3da-2ae0540c3fd4,1,0,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1,0,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,1,0,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,1,0,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,1,0,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,1,0,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,1,0,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,1,0,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,1,0,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,1,0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,1,0,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,1,0,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,1,0,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,1,0,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1,0,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,1,0,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,1,0,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,1,0,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,1,0,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,1,0,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,1,0,b5bb5376-27a6-43f2-9e91-bf7c913b89fd,b5bb5376-27a6-43f2-9e91-bf7c913b89fd,1,0,24861cd2-2be0-4454-8154-2201e63be266,24861cd2-2be0-4454-8154-2201e63be266,1,0,2e364599-aad9-4d1d-a4df-6cbd3ed768e7,2e364599-aad9-4d1d-a4df-6cbd3ed768e7,1,0,b1dd4569-6ed9-49f4-b05b-359229afb7a5,b1dd4569-6ed9-49f4-b05b-359229afb7a5,1,0,c14cac09-820e-47ae-81bb-eb497950d40c,c14cac09-820e-47ae-81bb-eb497950d40c,1,0,201cd431-6027-466c-abec-09ff65f42244,201cd431-6027-466c-abec-09ff65f42244,1,0,1018c5d8-8aed-49ba-a27c-a44bddd96144,1018c5d8-8aed-49ba-a27c-a44bddd96144,1,0,a81e5d20-9c42-462d-83a3-f86522c473f5,a81e5d20-9c42-462d-83a3-f86522c473f5,1,0,1ce4440e-3709-4cb1-8505-2379d5146be3,1ce4440e-3709-4cb1-8505-2379d5146be3,1,0,81c1f13c-e4ac-46b8-a205-c4f695ddf667,81c1f13c-e4ac-46b8-a205-c4f695ddf667,1,0,a26d8489-88a8-438e-bb58-c7b5a742a243,a26d8489-88a8-438e-bb58-c7b5a742a243,1,0,4b700bfd-5179-4504-b710-fd65036dded7,4b700bfd-5179-4504-b710-fd65036dded7,1,0,b046cb0b-f88b-4fb1-b08d-bb02b20dee74,b046cb0b-f88b-4fb1-b08d-bb02b20dee74,1,0,67dc31fa-cc64-4d29-96aa-65a7fd480790,67dc31fa-cc64-4d29-96aa-65a7fd480790,1,0,17f0e86d-8661-492c-85fa-2ce3cd1a57d5,17f0e86d-8661-492c-85fa-2ce3cd1a57d5,1,0,1cd36cf8-ae51-4fca-91d8-60c82f9e21e1,1cd36cf8-ae51-4fca-91d8-60c82f9e21e1,1,0,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,1,0,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,1,0,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,1,0,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,1,0,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,1,0,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,1,0,65ad33ce-edab-4f8b-8f44-1a5634d87191,65ad33ce-edab-4f8b-8f44-1a5634d87191,1,0,bcd727b5-4678-41e9-85d5-98d4157cdd77,bcd727b5-4678-41e9-85d5-98d4157cdd77,1,0,38c6dd83-2a70-4c4a-9f29-3b2b54a15501,38c6dd83-2a70-4c4a-9f29-3b2b54a15501,1,0,f403fcb3-a4f8-479d-9fa1-85d458b9a4b5,f403fcb3-a4f8-479d-9fa1-85d458b9a4b5,1,0,c56d3cfe-6ae1-4fe3-abdc-2d845049ddde,c56d3cfe-6ae1-4fe3-abdc-2d845049ddde,1,0,66f1dc54-f28c-4fb7-a6c9-f839d656e87c,66f1dc54-f28c-4fb7-a6c9-f839d656e87c,1,0,b8e3d08d-d442-4ffa-83d8-f372a7d2d340,b8e3d08d-d442-4ffa-83d8-f372a7d2d340,1,0,ebba727b-8155-4dd8-8ea0-207ca396566b,ebba727b-8155-4dd8-8ea0-207ca396566b,1,0,e4166141-f18f-4d27-beb5-9e30fe30f842,e4166141-f18f-4d27-beb5-9e30fe30f842,1,0,b62434ac-ef9f-4fe7-8279-357e0dd760ac,b62434ac-ef9f-4fe7-8279-357e0dd760ac,1,0,eb1c7d02-f5fc-4b37-9b32-7dd828958d76,eb1c7d02-f5fc-4b37-9b32-7dd828958d76,1,0,63478206-a155-48f5-822f-9b592b561bac,63478206-a155-48f5-822f-9b592b561bac,1,0,7ab8d806-17b2-41d8-9abb-c302302b3465,7ab8d806-17b2-41d8-9abb-c302302b3465,1,0,e3822657-3052-4e11-9bcf-fdb8c1b26a9c,e3822657-3052-4e11-9bcf-fdb8c1b26a9c,1,0,db2f20a7-e01f-4c03-9343-a815e1b46b50,db2f20a7-e01f-4c03-9343-a815e1b46b50,1,0,cf122ec9-d781-434c-9742-300e701317d6,cf122ec9-d781-434c-9742-300e701317d6,1,0,2aa2a968-2cac-4883-9bc8-5a3ccbd2e7a9,2aa2a968-2cac-4883-9bc8-5a3ccbd2e7a9,1,0,7d1361af-c5d3-4312-ab5e-ba00bf3418f2,7d1361af-c5d3-4312-ab5e-ba00bf3418f2,1,0,d7fdb3d5-3c18-4d9c-938a-2fbe8a96e877,d7fdb3d5-3c18-4d9c-938a-2fbe8a96e877,1,0,b8658e11-42b6-41bb-b384-5380e2228338,b8658e11-42b6-41bb-b384-5380e2228338,1,0,40c0919f-2c53-4502-af06-745dfa47fd8e,40c0919f-2c53-4502-af06-745dfa47fd8e,1,0,b01e4e7f-1b01-4c19-ab4b-7a8c1f6b0d22,b01e4e7f-1b01-4c19-ab4b-7a8c1f6b0d22,1,0,662a2803-da19-40c7-a906-e20d0843f67f,662a2803-da19-40c7-a906-e20d0843f67f,1,0,327c0731-1496-4463-837f-8f9c3e4c1a49,327c0731-1496-4463-837f-8f9c3e4c1a49,1,0,d74a37c2-7f50-40da-b7f8-29f79ae7230c,d74a37c2-7f50-40da-b7f8-29f79ae7230c,1,0,37a677e7-6661-41b5-ba68-740361168ccf,37a677e7-6661-41b5-ba68-740361168ccf,1,0,2a41d20d-d57a-4ce8-832f-c1b83099e563,2a41d20d-d57a-4ce8-832f-c1b83099e563,1,0,a0701ad3-572a-4806-91c0-6c5fff8dd350,a0701ad3-572a-4806-91c0-6c5fff8dd350,1,0,c9f268d1-6d2a-47d5-9371-f951b95d24a6,c9f268d1-6d2a-47d5-9371-f951b95d24a6,1,0,86b155be-d611-46b4-8275-bb19a2fa20ba,86b155be-d611-46b4-8275-bb19a2fa20ba,1,0,fedb2d36-bb2e-49dd-9d52-afcc41f3636b,fedb2d36-bb2e-49dd-9d52-afcc41f3636b,1,0,5d74d2d1-a2af-4a52-a884-a60e6b07ffac,5d74d2d1-a2af-4a52-a884-a60e6b07ffac,1,0,69e67507-e063-4221-9b84-2ee9d8903c1a,69e67507-e063-4221-9b84-2ee9d8903c1a,1,0,a649cb56-2a53-4508-8bf4-9aa01373ede2,a649cb56-2a53-4508-8bf4-9aa01373ede2,1,0,7e572d75-3a89-43c0-ad68-18498d67f8ca,7e572d75-3a89-43c0-ad68-18498d67f8ca,1,0,3c159a42-d9f9-4de4-a86f-893b1fc65b46,3c159a42-d9f9-4de4-a86f-893b1fc65b46,1,0,545cd0e7-4125-48f1-9123-0bc39e436e5e,545cd0e7-4125-48f1-9123-0bc39e436e5e,1,0,9a17eec6-b517-4133-8d25-bb953d84461f,9a17eec6-b517-4133-8d25-bb953d84461f,1,0,a0a61d7f-879d-4e92-98a3-5291c834c341,a0a61d7f-879d-4e92-98a3-5291c834c341,1,0,7bf60016-2edc-443b-98b4-0864b548c482,7bf60016-2edc-443b-98b4-0864b548c482,1,0,74139209-f345-4fd9-9ade-15cc4d399836,74139209-f345-4fd9-9ade-15cc4d399836,1,0,e39de1c5-b43b-4f71-aa32-c03b8afd6f65,e39de1c5-b43b-4f71-aa32-c03b8afd6f65,1,0,d5b6aad4-b1bd-464b-aca0-f8455d6388b4,d5b6aad4-b1bd-464b-aca0-f8455d6388b4,1,0,033ab408-fa51-4af2-a82c-f3167de00681,033ab408-fa51-4af2-a82c-f3167de00681,1,0,f7267120-f367-4d47-be5e-e2aa7a2ada46,f7267120-f367-4d47-be5e-e2aa7a2ada46,1,0,911b4ba4-1902-4c69-a4c9-963ab93d35b0,911b4ba4-1902-4c69-a4c9-963ab93d35b0,1,0,70cf60eb-a5f8-4573-a28b-6844721459de,70cf60eb-a5f8-4573-a28b-6844721459de,1,0,e2666bd9-bf44-408b-98fa-b9be26bde33f,e2666bd9-bf44-408b-98fa-b9be26bde33f,1,0,9151fa13-6612-4c4c-a264-3fd669205de7,9151fa13-6612-4c4c-a264-3fd669205de7,1,0,fee8fd9d-be7d-4560-9b96-819ffd497c88,fee8fd9d-be7d-4560-9b96-819ffd497c88,1,0,c86135b4-063c-4ca8-99e2-35c61026b43f,c86135b4-063c-4ca8-99e2-35c61026b43f,1,0,186792a9-0a07-4b6d-a9a0-337221f6b009,186792a9-0a07-4b6d-a9a0-337221f6b009,1,0,49163bf6-4a6a-4da9-a0ed-257c22224b47,49163bf6-4a6a-4da9-a0ed-257c22224b47,1,0,74c71abe-90eb-4c05-a4a6-375a93e7b99c,74c71abe-90eb-4c05-a4a6-375a93e7b99c,1,0,d36efd98-34a7-41b4-99b6-34c09e71525a,d36efd98-34a7-41b4-99b6-34c09e71525a,1,0,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,1,0,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,1,0,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,1,0,ee0412d3-58e7-4715-8774-d49778e1ef73,ee0412d3-58e7-4715-8774-d49778e1ef73,1,0,ea31df21-1402-417a-9788-b17a7116e842,ea31df21-1402-417a-9788-b17a7116e842,1,0,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,1,0,e964753f-7f4c-4f9f-bd17-cdac317c1d35,e964753f-7f4c-4f9f-bd17-cdac317c1d35,1,0,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,1,0,43c22498-3fd6-4038-a291-05f0db9ab66a,43c22498-3fd6-4038-a291-05f0db9ab66a,1,0,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,1,0,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,1,0,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,1,0,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,1,0,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,1,0,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,1,0,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,1,0,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,1,0,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,1,0,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,1,0,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,1,0,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,1,0,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1,0,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,1,0,483720db-6c9e-4179-b5c7-56159c9b6073,483720db-6c9e-4179-b5c7-56159c9b6073,1,0,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,1,0,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,1,0,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,1,0,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,1,0,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,1,0,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,1,0,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,1,0,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,1,0,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,1,0,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,1,0,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,1,0,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,1,0,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,1,0,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,1,0,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,1,0,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,1,0,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,1,0,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,1,0,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,1,0,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,1,0,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,1,0,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,1,0,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,1,0,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,1,0,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,1,0,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,1,0,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,1,0,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,1,0,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,1,0,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,1,0,aa114d56-2faf-4925-8319-f0aa3993e9ee,aa114d56-2faf-4925-8319-f0aa3993e9ee,1,0,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,1,0,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,1,0,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,1,0,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,1,0,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,1,0,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,1,0,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,1,0,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,1,0,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,1,0,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,1,0,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,1,0,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,1,0,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,1,0,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,1,0,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,1,0,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,1,0,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,1,0,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,1,0,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,1,0,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,1,0,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,1,0,45af8f5d-d505-466b-a798-19f2219a180c,45af8f5d-d505-466b-a798-19f2219a180c,1,0,8a8229bc-f70a-4434-bacc-8a81fc58154b,8a8229bc-f70a-4434-bacc-8a81fc58154b,1,0,6324ad14-82ca-467b-b6b7-8d5f6049ca65,6324ad14-82ca-467b-b6b7-8d5f6049ca65,1,0,273446f0-f28b-4ce2-874c-3c6a57299b71,273446f0-f28b-4ce2-874c-3c6a57299b71,1,0,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,1,0,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,1,0,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,1,0,7a4e17bf-3649-4982-a9c6-5982390f1f1d,7a4e17bf-3649-4982-a9c6-5982390f1f1d,1,0,722be6e0-2698-431b-9206-777a36e6742f,722be6e0-2698-431b-9206-777a36e6742f,1,0,75bb0122-26bd-40be-8de8-7a57680c85ae,75bb0122-26bd-40be-8de8-7a57680c85ae,1,0,28dd22df-07cc-4e6d-89b2-b15a13f76615,28dd22df-07cc-4e6d-89b2-b15a13f76615,1,0,0c98b025-5adb-44dc-ab14-4c6517cc230b,0c98b025-5adb-44dc-ab14-4c6517cc230b,1,0,da2f09bd-109f-43aa-a90b-f033d17ed689,da2f09bd-109f-43aa-a90b-f033d17ed689,1,0,44526cb1-561d-4b87-a628-d79cc64ccdec,44526cb1-561d-4b87-a628-d79cc64ccdec,1,0,5e4dbba3-07df-4e30-be14-d9244f5ec21c,5e4dbba3-07df-4e30-be14-d9244f5ec21c,1,0,c8116351-4487-40f3-ae04-1e0741cc5df6,c8116351-4487-40f3-ae04-1e0741cc5df6,1,0,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,1,0,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,1,0,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1,0,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,1,0,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,1,0,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,1,0,a6be80f7-d6aa-4371-a180-3d355080d849,a6be80f7-d6aa-4371-a180-3d355080d849,1,0,b37722c3-e29f-4a40-b4eb-0317919fc7a5,b37722c3-e29f-4a40-b4eb-0317919fc7a5,1,0,b1b1cd90-094d-428b-a6bc-156521c1c54d,b1b1cd90-094d-428b-a6bc-156521c1c54d,1,0,4f79ef7c-79be-4a69-acc0-bd591c712d03,4f79ef7c-79be-4a69-acc0-bd591c712d03,1,0,a0dd2129-d3a1-4bca-b555-72b065be1c13,a0dd2129-d3a1-4bca-b555-72b065be1c13,1,0,dc5e8229-e301-477c-846e-2e7078e3ee5f,dc5e8229-e301-477c-846e-2e7078e3ee5f,1,0,24836e44-8fdd-44bd-91d8-4ddab2caf485,24836e44-8fdd-44bd-91d8-4ddab2caf485,1,0,3727bcfe-4d75-4270-86e7-4a66ab14866c,3727bcfe-4d75-4270-86e7-4a66ab14866c,1,0,870a4708-0b5a-4fa3-9978-d94b161d289a,870a4708-0b5a-4fa3-9978-d94b161d289a,1,0,30e9f89d-7b94-488e-9963-886c271b1af7,30e9f89d-7b94-488e-9963-886c271b1af7,1,0,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,1,0,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1,0,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,1,0,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,1,0,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,1,0,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,1,0,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,1,0,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,1,0,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,1,0,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,1,0,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,1,0,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,1,0,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,1,0,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,1,0,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,1,0,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,1,0,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,1,0,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,1,0,2d279d24-1953-4a2f-8206-77481d2fd718,2d279d24-1953-4a2f-8206-77481d2fd718,1,0,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,1,0,0a920200-77d0-42ea-abf6-0d40d63289b0,0a920200-77d0-42ea-abf6-0d40d63289b0,1,0,c850bafc-4073-44ef-b148-194f87c46f0e,c850bafc-4073-44ef-b148-194f87c46f0e,1,0,6d1dd726-815d-476e-b668-95cff4182e54,6d1dd726-815d-476e-b668-95cff4182e54,1,0,12f4a0ed-4798-4467-8834-de3eb385e22d,12f4a0ed-4798-4467-8834-de3eb385e22d,1,0,5710809e-4c41-42ab-952f-f7778fe9be0f,5710809e-4c41-42ab-952f-f7778fe9be0f,1,0,0811f6c2-6bb3-43b8-9944-910adc4c6f23,0811f6c2-6bb3-43b8-9944-910adc4c6f23,1,0,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,1,0,c86b02ab-3532-4f4c-b993-e237ed0d4d12,c86b02ab-3532-4f4c-b993-e237ed0d4d12,1,0,83c860a2-d0d7-4b7c-a127-78d86b155cfa,83c860a2-d0d7-4b7c-a127-78d86b155cfa,1,0,06e45039-8bc4-44dd-8a93-2cec34ad51ee,06e45039-8bc4-44dd-8a93-2cec34ad51ee,1,0,46e01647-cbdd-4387-affc-29b92ede8644,46e01647-cbdd-4387-affc-29b92ede8644,1,0,faa44953-118b-4027-a913-c485bca7a93f,faa44953-118b-4027-a913-c485bca7a93f,1,0,c9bd0dcd-98ec-4dc9-869a-e735fd269046,c9bd0dcd-98ec-4dc9-869a-e735fd269046,1,0,d039bfa4-39a0-43d4-ab6a-0697f9d2b375,d039bfa4-39a0-43d4-ab6a-0697f9d2b375,1,0,09072c75-75c7-4050-b674-9454558a1f87,09072c75-75c7-4050-b674-9454558a1f87,1,0,f0c8d2d2-d597-4f09-8257-0fa7524f1e44,f0c8d2d2-d597-4f09-8257-0fa7524f1e44,1,0,3e2f75ab-4143-48ca-83db-3006cb2a8584,3e2f75ab-4143-48ca-83db-3006cb2a8584,1,0,91a82492-5e27-46b6-b1a8-48e89a437715,91a82492-5e27-46b6-b1a8-48e89a437715,1,0,53bc7bfd-8786-464f-a615-ceae2971cbc9,53bc7bfd-8786-464f-a615-ceae2971cbc9,1,0,aa77817b-bd2f-4757-99b0-5e67a1b032d3,aa77817b-bd2f-4757-99b0-5e67a1b032d3,1,0,8cc27936-976d-4f31-91c6-644d15b69c55,8cc27936-976d-4f31-91c6-644d15b69c55,1,0,cf9de063-89f4-4632-b7a1-0cfbea6df643,cf9de063-89f4-4632-b7a1-0cfbea6df643,1,0,ee3bab2c-bd6a-4a33-89a2-78b4dd89bb88,ee3bab2c-bd6a-4a33-89a2-78b4dd89bb88,1,0,2478fb43-57a3-4348-b3d4-61f015e4e231,2478fb43-57a3-4348-b3d4-61f015e4e231,1,0,daa99b45-b2d2-47bc-9d7e-2d21b1a3dfd8,daa99b45-b2d2-47bc-9d7e-2d21b1a3dfd8,1,0,0449c160-01e5-4fe4-8759-5b93c484b467,0449c160-01e5-4fe4-8759-5b93c484b467,1,0,0684e4ba-28c7-4032-a43f-a3a4a37ec50b,0684e4ba-28c7-4032-a43f-a3a4a37ec50b,1,0,bcac012d-b4a9-49bb-9c54-722c741d183c,bcac012d-b4a9-49bb-9c54-722c741d183c,1,0,5370d079-975f-4f7c-95c3-7868147ecc76,5370d079-975f-4f7c-95c3-7868147ecc76,1,0,4dd66f76-e4e0-4f84-9fad-bb922cd51503,4dd66f76-e4e0-4f84-9fad-bb922cd51503,1,0,e76a411a-121b-4791-a785-dd54795eaa7f,e76a411a-121b-4791-a785-dd54795eaa7f,1,0,66844ae3-f098-462c-aef8-1fd38c403760,66844ae3-f098-462c-aef8-1fd38c403760,1,0,be96718a-223d-4597-bccf-2fb7d16dbbcc,be96718a-223d-4597-bccf-2fb7d16dbbcc,1,0,eb551461-ae0d-41dd-89fa-2f6e7f3c4840,eb551461-ae0d-41dd-89fa-2f6e7f3c4840,1,0,acec1961-a953-4f7b-b42b-baa1b8b3be14,acec1961-a953-4f7b-b42b-baa1b8b3be14,1,0,eb6394d4-1679-4494-8d23-419f5a714cdc,eb6394d4-1679-4494-8d23-419f5a714cdc,1,0,ffb3c2e4-bb9b-4d12-80bb-79e3c6d5700d,ffb3c2e4-bb9b-4d12-80bb-79e3c6d5700d,1,0,7e9fadd6-d0ad-4856-a195-1058f00bf488,7e9fadd6-d0ad-4856-a195-1058f00bf488,1,0,76d0c5ee-5b85-4670-ba1c-8fdaa7ba872a,76d0c5ee-5b85-4670-ba1c-8fdaa7ba872a,1,0,84f67d35-ca48-4fff-94e4-5f4beb7e3c08,84f67d35-ca48-4fff-94e4-5f4beb7e3c08,1,0,2972c142-0aac-4e36-b34e-4e73f18ba9cb,2972c142-0aac-4e36-b34e-4e73f18ba9cb,1,0,d6915227-4ede-4cd2-9e7c-d23dc409936e,d6915227-4ede-4cd2-9e7c-d23dc409936e,1,0,477ca2ac-ae7e-4091-bea3-9ed2d3eae788,477ca2ac-ae7e-4091-bea3-9ed2d3eae788,1,0,c9d0f1dd-bb93-4dbe-85f3-30c791a3c59e,c9d0f1dd-bb93-4dbe-85f3-30c791a3c59e,1,0,d023d15a-0f3f-46c3-8dea-43770f0a53b3,d023d15a-0f3f-46c3-8dea-43770f0a53b3,1,0,daf12fe4-79fb-43b9-9f7a-8da311449193,daf12fe4-79fb-43b9-9f7a-8da311449193,1,0,d0ad91a1-62aa-4e97-9868-82c5b8a46f22,d0ad91a1-62aa-4e97-9868-82c5b8a46f22,1,0,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,1,0,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,1,0,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,1,0,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,1,0,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,1,0,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,1,0,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,1,0,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,1,0,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,1,0,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,1,0,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,1,0,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,1,0,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,1,0,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,1,0,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,1,0,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,1,0,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,08eb74b6-1e1c-4004-a0f8-b6f1fdfc68ef,1,0,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,1,0,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,1,0,bd0e4aeb-19f9-48fc-b838-38d785004360,bd0e4aeb-19f9-48fc-b838-38d785004360,1,0,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,1,0,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,1,0,6d351276-2c04-4198-a3e4-865881c12f5c,6d351276-2c04-4198-a3e4-865881c12f5c,1,0,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,1,0,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,1,0,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,1,0,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,1,0,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,1,0,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,1,0,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,1,0,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,1,0,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,1,0,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,1,0,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,1,0,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,1,0,47714327-dd28-4e32-a1c9-20ee47d9afd0,47714327-dd28-4e32-a1c9-20ee47d9afd0,1,0,4d76ef7a-f1a6-4147-84f4-6e1717dfd77e,4d76ef7a-f1a6-4147-84f4-6e1717dfd77e,1,0,d1eb0aa7-b485-4f3a-846d-be069ca807c0,d1eb0aa7-b485-4f3a-846d-be069ca807c0,1,0,afde7867-15d3-43fa-b439-6d9e40df580b,afde7867-15d3-43fa-b439-6d9e40df580b,1,0,a676ff94-a0d1-4de9-8690-ec67f2c891d8,a676ff94-a0d1-4de9-8690-ec67f2c891d8,1,0,012bf716-3672-462e-b390-7bb4384ab4b1,012bf716-3672-462e-b390-7bb4384ab4b1,1,0,65342599-ff37-4f99-8e40-f05d87403bcf,65342599-ff37-4f99-8e40-f05d87403bcf,1,0,3a3f505a-7a50-4111-8029-5b9057fed232,3a3f505a-7a50-4111-8029-5b9057fed232,1,0,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,1,0,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,1,0,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,1,0,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,1,0,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1d66cd80-fd61-4bf2-a7f9-34b33443e1ea,1,0,03ab92e2-81a3-4e38-84a8-85c1d78d51e9,03ab92e2-81a3-4e38-84a8-85c1d78d51e9,1,0,ef09e296-af08-44ff-8303-4833b23a12c3,ef09e296-af08-44ff-8303-4833b23a12c3,1,0,73bf8c40-76ee-4c61-b56a-898bcd6da1ca,73bf8c40-76ee-4c61-b56a-898bcd6da1ca,1,0,434a0471-1389-4764-a901-69249e1fdc38,434a0471-1389-4764-a901-69249e1fdc38,1,0,7b6c1d9f-968e-4126-990e-fa2787ad83b2,7b6c1d9f-968e-4126-990e-fa2787ad83b2,1,0,b89108a9-8b4e-4b34-8f72-4eb502963743,b89108a9-8b4e-4b34-8f72-4eb502963743,1,0,398b93b1-620d-4942-ba44-7ea0f9cc14f0,398b93b1-620d-4942-ba44-7ea0f9cc14f0,1,0,7b06537e-d818-41b3-acc5-b6b63b543be8,7b06537e-d818-41b3-acc5-b6b63b543be8,1,0,74226c30-5f9b-4e47-b7cc-35e92139cbfa,74226c30-5f9b-4e47-b7cc-35e92139cbfa,1,0,09f812cb-770c-4f85-87f0-db35952c764e,09f812cb-770c-4f85-87f0-db35952c764e,1,0,8bbbcfd9-b6da-41f6-b543-863b12b9fb59,8bbbcfd9-b6da-41f6-b543-863b12b9fb59,1,0,36951804-70a4-45fa-9fad-1c37fd3ce7b7,36951804-70a4-45fa-9fad-1c37fd3ce7b7,1,0,6da02618-2454-48fe-b1dc-399d0d40d043,6da02618-2454-48fe-b1dc-399d0d40d043,1,0,5a080203-ecd2-4f40-ac64-c8024eda595e,5a080203-ecd2-4f40-ac64-c8024eda595e,1,0,3eabcb69-398b-43f5-bf53-c20f90bee5c4,3eabcb69-398b-43f5-bf53-c20f90bee5c4,1,0,9c33639e-529a-490f-9365-80778b54c3f7,9c33639e-529a-490f-9365-80778b54c3f7,1,0,561b97a0-9d42-4735-a606-8d5b5862689f,561b97a0-9d42-4735-a606-8d5b5862689f,1,0,10d5c0c2-301f-4477-a88f-254f99a30fa0,10d5c0c2-301f-4477-a88f-254f99a30fa0,1,0,1363523a-929e-49ac-ae39-d43acf9f0478,1363523a-929e-49ac-ae39-d43acf9f0478,1,0,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,1,0,2876c476-8280-426d-8bf9-c93beda0ddd5,2876c476-8280-426d-8bf9-c93beda0ddd5,1,0,963e0813-4f6b-4d31-b66d-77125c47ce19,963e0813-4f6b-4d31-b66d-77125c47ce19,1,0,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,1,0,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,1,0,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,1,0,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,1,0,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,1,0,d9f76f2f-2b32-4986-8987-a585f831d951,d9f76f2f-2b32-4986-8987-a585f831d951,1,0,b1a96083-1c12-43f4-ba61-3a0588fc7310,b1a96083-1c12-43f4-ba61-3a0588fc7310,1,0,2e37c7d0-b97f-4c72-821e-b2bb77fb3140,2e37c7d0-b97f-4c72-821e-b2bb77fb3140,1,0,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,1,0,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,1,0,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,1,0,ee49981d-91f6-4002-9205-b8a53e6f54e0,ee49981d-91f6-4002-9205-b8a53e6f54e0,1,0,64a74365-ca32-4b7d-af8e-695624e3dcb6,64a74365-ca32-4b7d-af8e-695624e3dcb6,1,0,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,1,0,ebedc283-5eb0-459b-b686-f8643666b8b8,ebedc283-5eb0-459b-b686-f8643666b8b8,1,0,6a6afffd-cfed-4801-8b59-34d27e46565c,6a6afffd-cfed-4801-8b59-34d27e46565c,1,0,a469b12d-4537-419c-91e0-37abc9d31505,a469b12d-4537-419c-91e0-37abc9d31505,1,0,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,1,0,82c42232-531e-403f-8599-cc21a248fa2c,82c42232-531e-403f-8599-cc21a248fa2c,1,0,9104b791-9ac4-41ba-a7f0-9e609db3b578,9104b791-9ac4-41ba-a7f0-9e609db3b578,1,0,2d3721d1-816f-4e84-9df1-863cb269d83d,2d3721d1-816f-4e84-9df1-863cb269d83d,1,0,eaa11272-8cc2-4f82-808f-e4f641748574,eaa11272-8cc2-4f82-808f-e4f641748574,1,0,9dfd78a7-74ba-4c7a-8842-4baf4ffd5e4f,9dfd78a7-74ba-4c7a-8842-4baf4ffd5e4f,1,0,7d422da3-8ec4-4bc8-94ba-88d92625d4c7,7d422da3-8ec4-4bc8-94ba-88d92625d4c7,1,0,8035e1ce-a36a-4628-8196-1f04f50e230a,8035e1ce-a36a-4628-8196-1f04f50e230a,1,0,51f08b3c-2f03-408e-89d5-53ccbaec4e74,51f08b3c-2f03-408e-89d5-53ccbaec4e74,1,0,920ebc04-3018-4948-bae2-16de8f0f0c9a,920ebc04-3018-4948-bae2-16de8f0f0c9a,1,0,4c4fc449-05a5-4223-bd28-c73d27780a9b,4c4fc449-05a5-4223-bd28-c73d27780a9b,1,0,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,1,0,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,1,0,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,1,0,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,1,0,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,1,0,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,1,0,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,1,0,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,1,0,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,1,0,f0b0608c-178f-4dea-b461-0d8f00d79d30,f0b0608c-178f-4dea-b461-0d8f00d79d30,1,0,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,1,0,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,1,0,5546b9a9-a4fe-4a2b-9492-883bcb37a210,5546b9a9-a4fe-4a2b-9492-883bcb37a210,1,0,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,1,0,275a5772-8428-497a-81ef-c919f15fcccd,275a5772-8428-497a-81ef-c919f15fcccd,1,0,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,1,0,b5278cbd-1771-4739-9013-a28682689778,b5278cbd-1771-4739-9013-a28682689778,1,0,a52f2de4-f414-4837-9b1a-6d8f282e1327,a52f2de4-f414-4837-9b1a-6d8f282e1327,1,0,d126a11e-c770-4309-941f-cbcdd5cbad5d,d126a11e-c770-4309-941f-cbcdd5cbad5d,1,0,f4d88096-bff9-416a-8f75-9143ede1213f,f4d88096-bff9-416a-8f75-9143ede1213f,1,0,804be484-09cf-45a4-bd1f-c8850067e2b2,804be484-09cf-45a4-bd1f-c8850067e2b2,1,0,f1a145ce-a199-475c-ab8a-065c11a27277,f1a145ce-a199-475c-ab8a-065c11a27277,1,0,25c97480-330c-42f2-a2a5-031062a3a683,25c97480-330c-42f2-a2a5-031062a3a683,1,0,a2fb1bf9-d29a-4bfe-95f1-10883fa019b3,a2fb1bf9-d29a-4bfe-95f1-10883fa019b3,1,0,6adc3aa8-8784-467d-8e12-b60418a5c729,6adc3aa8-8784-467d-8e12-b60418a5c729,1,0,265206ed-4d41-497e-a483-c14052134500,265206ed-4d41-497e-a483-c14052134500,1,0,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,1,0,10336352-f3a1-4bc3-bdec-1a2eef15f176,10336352-f3a1-4bc3-bdec-1a2eef15f176,1,0,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,1,0,3b7c713e-81ae-4adc-9519-99c936599ef7,3b7c713e-81ae-4adc-9519-99c936599ef7,1,0,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1,0,ecda2c4b-6411-4b47-ab59-1918bad5acdd,ecda2c4b-6411-4b47-ab59-1918bad5acdd,1,0,a9a05a66-0a1c-4e53-9d09-1abe8f45e354,a9a05a66-0a1c-4e53-9d09-1abe8f45e354,1,0,2c811ee8-f50d-4c39-82ee-0492feb1c431,2c811ee8-f50d-4c39-82ee-0492feb1c431,1,0,399f679b-f48a-4d4e-b890-5eab9e4598c3,399f679b-f48a-4d4e-b890-5eab9e4598c3,1,0,da9ca4c4-c291-4f8b-accd-bc1b123ed4f8,da9ca4c4-c291-4f8b-accd-bc1b123ed4f8,1,0,9ad1ea04-1aee-4a80-b4df-60526cdf3ad0,9ad1ea04-1aee-4a80-b4df-60526cdf3ad0,1,0,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,1,0,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,1,0,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,1,0,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,1,0,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,1,0,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,1,0,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,1,0,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,1,0,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,1,0,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,1,0,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,1,0,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,1,0,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,1,0,b5ea4aff-11be-4232-94a2-cb92801b6c49,b5ea4aff-11be-4232-94a2-cb92801b6c49,1,0,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,1,0,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,1,0,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,1,0,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,1,0,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,1,0,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,1,0,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,1,0,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,1,0,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,1,0,0b8c7a82-9865-4c5e-9bf1-ba6a7ef3a5d1,0b8c7a82-9865-4c5e-9bf1-ba6a7ef3a5d1,1,0,ea9fd5dd-b1de-41f8-87c2-ad3e8ee6b9bf,ea9fd5dd-b1de-41f8-87c2-ad3e8ee6b9bf,1,0,1bc24f0c-7299-4d7d-994c-0e89056f1178,1bc24f0c-7299-4d7d-994c-0e89056f1178,1,0,af958a75-241e-443a-8c1d-0c9240cca3a3,af958a75-241e-443a-8c1d-0c9240cca3a3,1,0,d65cce37-81a6-4f75-84e1-7e5b6340aa13,d65cce37-81a6-4f75-84e1-7e5b6340aa13,1,0,b60ddb04-f87c-4e16-aad0-f06d80dfbe14,b60ddb04-f87c-4e16-aad0-f06d80dfbe14,1,0,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,1,0,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,1,0,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,1,0,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,1,0,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,1,0,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,1,0,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,1,0,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,1,0,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,1,0,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,1,0,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,1,0,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,1,0,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,1,0,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,1,0,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,1,0,e5094d4f-ee61-4142-a97b-d96172350f65,e5094d4f-ee61-4142-a97b-d96172350f65,1,0,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,1,0,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,1,0,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,1,0,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,1,0,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,1,0,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,1,0,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,1,0,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,1,0,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,1,0,20c57e30-5856-4801-9e77-8006471d89f8,20c57e30-5856-4801-9e77-8006471d89f8,1,0,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,1,0,4a3fe393-8aea-4394-8c10-a234f1f191ad,4a3fe393-8aea-4394-8c10-a234f1f191ad,1,0,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,1,0,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,1,0,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,1,0,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,1,0,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,1,0,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,1,0,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,1,0,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,1,0,fd271670-bde6-4351-abec-eb82548c6c98,fd271670-bde6-4351-abec-eb82548c6c98,1,0,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,1,0,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,1,0,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,1,0,799b3dda-fbfc-4dea-a577-30321e64f4d5,799b3dda-fbfc-4dea-a577-30321e64f4d5,1,0,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,1,0,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,1,0,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,1,0,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,1,0,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,1,0,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,1,0,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,1,0,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,1,0,19a18193-c5d3-4e56-86c5-5a81c525e9ad,19a18193-c5d3-4e56-86c5-5a81c525e9ad,1,0,c208fcc0-d7b2-435b-963a-e18c97727f8f,c208fcc0-d7b2-435b-963a-e18c97727f8f,1,0,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,1,0,bf11f7b1-6332-4499-ba48-b94bc10ef869,bf11f7b1-6332-4499-ba48-b94bc10ef869,1,0,4de445f0-7c27-4540-a5a8-9c3ca2a13fd2,4de445f0-7c27-4540-a5a8-9c3ca2a13fd2,1,0,2977fedd-2c56-4d21-8eb1-a424e1b17cb3,2977fedd-2c56-4d21-8eb1-a424e1b17cb3,1,0,0b8a2936-07c5-4b90-80e6-5a058e546de6,0b8a2936-07c5-4b90-80e6-5a058e546de6,1,0,34524248-668e-48e5-a801-f489cd664de8,34524248-668e-48e5-a801-f489cd664de8,1,0,ae0891ae-ecd2-4072-8d2b-0556030c9dfd,ae0891ae-ecd2-4072-8d2b-0556030c9dfd,1,0,e8f36bca-738b-471c-b8d3-8a484978934a,e8f36bca-738b-471c-b8d3-8a484978934a,1,0,05c27c89-2c26-4252-842d-9aa43ba0ea2f,05c27c89-2c26-4252-842d-9aa43ba0ea2f,1,0,7c1e16c2-201d-4a3f-b0f4-9d66f5f8a68b,7c1e16c2-201d-4a3f-b0f4-9d66f5f8a68b,1,0,f092729c-6b5d-4709-8b28-15e06129731d,f092729c-6b5d-4709-8b28-15e06129731d,1,0,c03be2f7-d681-417d-975a-5c8c7b716659,c03be2f7-d681-417d-975a-5c8c7b716659,1,0,fca7af5f-bdc0-4264-be68-5e5e38545368,fca7af5f-bdc0-4264-be68-5e5e38545368,1,0,a3fc0bce-a87e-4c15-b57b-f285a694bcdf,a3fc0bce-a87e-4c15-b57b-f285a694bcdf,1,0,ae124745-edfb-11e6-4681-a8667f21fde4,ae124745-edfb-11e6-4681-a8667f21fde4,1,0,f6fcf9c2-edfb-11e6-4681-a8667f21fde4,f6fcf9c2-edfb-11e6-4681-a8667f21fde4,1,0,ec70cf10-edfb-11e6-4681-a8667f21fde4,ec70cf10-edfb-11e6-4681-a8667f21fde4,1,0,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,1,0,0b7cee9b-3870-49f5-a58e-063cf5353467,0b7cee9b-3870-49f5-a58e-063cf5353467,1,0,d392a791-af74-40c9-ab20-6ed6aeabe864,d392a791-af74-40c9-ab20-6ed6aeabe864,1,0,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,1,0,1612570d-b069-405a-9dd3-80b8175fb468,1612570d-b069-405a-9dd3-80b8175fb468,1,0,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,1,0,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,1,0,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,1,0,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,1,0,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,1,0,561ed574-617d-4a46-b32b-f022e07846c8,561ed574-617d-4a46-b32b-f022e07846c8,1,0,cba706bf-a9a7-4dda-9c5a-a26e85119396,cba706bf-a9a7-4dda-9c5a-a26e85119396,1,0,159a4eb5-00cd-426c-86e3-09cd3f569f22,159a4eb5-00cd-426c-86e3-09cd3f569f22,1,0,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,1,0,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,1,0,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,1,0,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,1,0,2ded5135-b6c3-46dd-b563-7b6fab986d23,2ded5135-b6c3-46dd-b563-7b6fab986d23,1,0,14215720-ccb3-4e5a-8345-cd42c96a3e77,14215720-ccb3-4e5a-8345-cd42c96a3e77,1,0,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,1,0,0690a5c7-bc25-4101-afa5-69c095d415c2,0690a5c7-bc25-4101-afa5-69c095d415c2,1,0,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,1,0,79013bba-a0f2-481c-a63e-095a54ee52aa,79013bba-a0f2-481c-a63e-095a54ee52aa,1,0,8523c346-f144-41b8-a702-2d588e7097c2,8523c346-f144-41b8-a702-2d588e7097c2,1,0,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,1,0,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,1,0,fa2bd6a6-bb46-4e21-8684-248578310164,fa2bd6a6-bb46-4e21-8684-248578310164,1,0,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,1,0,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,1,0,88ccac36-169d-48f8-bc68-15e3bb775b79,88ccac36-169d-48f8-bc68-15e3bb775b79,1,0,a1640988-bd60-43b3-86f1-184b9db275c6,a1640988-bd60-43b3-86f1-184b9db275c6,1,0,300a02f7-8062-4843-b11e-0321f8b40f4d,300a02f7-8062-4843-b11e-0321f8b40f4d,1,0,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,1,0,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,1,0,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,1,0,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,1,0,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,1,0,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,1,0,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,1,0,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,1,0,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,1,0,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,1,0,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,1,0,fb9c08ee-92e9-4bd9-8794-ef0f221eee99,fb9c08ee-92e9-4bd9-8794-ef0f221eee99,1,0,e4cd44e6-1255-490f-96d9-f805ac92cf67,e4cd44e6-1255-490f-96d9-f805ac92cf67,1,0,8ae9be37-cda5-4b66-8a97-5e77d2a2c75f,8ae9be37-cda5-4b66-8a97-5e77d2a2c75f,1,0,5a9011fc-c023-47fb-a999-2c6ca33a04b9,5a9011fc-c023-47fb-a999-2c6ca33a04b9,1,0,ab574fa5-0730-4456-b741-111e5ea8a896,ab574fa5-0730-4456-b741-111e5ea8a896,1,0,b8d5adf0-dc2f-4041-bc97-cb2442f00054,b8d5adf0-dc2f-4041-bc97-cb2442f00054,1,0,398199c4-4830-48e9-89c5-45c2c5a30ee6,398199c4-4830-48e9-89c5-45c2c5a30ee6,1,0,546ba3bb-4614-423f-954c-466530f42784,546ba3bb-4614-423f-954c-466530f42784,1,0,e5bc54f0-d7d0-471c-adda-a0e73e0dd3cf,e5bc54f0-d7d0-471c-adda-a0e73e0dd3cf,1,0,af447f33-ef41-4eda-96ec-5bac26fff33e,af447f33-ef41-4eda-96ec-5bac26fff33e,1,0,f0c83fc5-6e9a-4185-ab43-2b419ace7909,f0c83fc5-6e9a-4185-ab43-2b419ace7909,1,0,4bd15718-6a0e-4a86-921a-09d38ba4be4c,4bd15718-6a0e-4a86-921a-09d38ba4be4c,1,0,32586ba6-8922-4321-b134-70d1b77a16a4,32586ba6-8922-4321-b134-70d1b77a16a4,1,0,2d942a50-b239-4b8c-812a-5a634f5dcaef,2d942a50-b239-4b8c-812a-5a634f5dcaef,1,0,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,1,0,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,1,0,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,1,0,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,1,0,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,1,0,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,1,0,fc67b510-3fb4-4305-92d2-c252bc718f03,fc67b510-3fb4-4305-92d2-c252bc718f03,1,0,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,1,0,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,1,0,cf1f7915-94ad-47e7-8676-73271d0cf71e,cf1f7915-94ad-47e7-8676-73271d0cf71e,1,0,fceb6e4a-bd51-4193-a542-70d2317af669,fceb6e4a-bd51-4193-a542-70d2317af669,1,0,f9f991a6-ddf3-4953-8a1f-e6c0e1a7f4e9,f9f991a6-ddf3-4953-8a1f-e6c0e1a7f4e9,1,0,80847d57-1795-46c7-a106-926e1f43ac1e,80847d57-1795-46c7-a106-926e1f43ac1e,1,0,38685415-dc87-48b4-8cc4-f85b438f2ec2,38685415-dc87-48b4-8cc4-f85b438f2ec2,1,0,110eff8b-aeec-4ba5-b710-fefc1bd60284,110eff8b-aeec-4ba5-b710-fefc1bd60284,1,0,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,1,0,75eca481-002b-4046-898d-dfac9357611f,75eca481-002b-4046-898d-dfac9357611f,1,0,0110decc-d06e-43cf-9d01-30d412edcdd7,0110decc-d06e-43cf-9d01-30d412edcdd7,1,0,3ea32a24-d37b-4fad-937a-9d1357d649a9,3ea32a24-d37b-4fad-937a-9d1357d649a9,1,0,2856ee9a-0fea-4684-b7b8-4844773eae07,2856ee9a-0fea-4684-b7b8-4844773eae07,1,0,84e09840-8d67-416f-87a2-7f03c04180c9,84e09840-8d67-416f-87a2-7f03c04180c9,1,0,0388f22d-f91d-45c9-a8ae-900a24cbfe67,0388f22d-f91d-45c9-a8ae-900a24cbfe67,1,0,60fa2562-4914-46d6-a00a-1bb6e2803263,60fa2562-4914-46d6-a00a-1bb6e2803263,1,0,0d61a8d4-2dc8-435e-a238-416d7640576f,0d61a8d4-2dc8-435e-a238-416d7640576f,1,0,5ea899d4-e076-4a1c-838c-e369abc4705f,5ea899d4-e076-4a1c-838c-e369abc4705f,1,0,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,f2bf5f4a-e53b-4300-bbc7-97ac2e06f3c2,1,0,ab2e75f0-8da7-4b38-8f30-537424b719db,ab2e75f0-8da7-4b38-8f30-537424b719db,1,0,db344a42-61b8-4544-9aa1-8840ab8a70f0,db344a42-61b8-4544-9aa1-8840ab8a70f0,1,0,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,bd029e3f-a6bd-4be9-81f3-f3ea84f424ce,1,0,043bd776-5a7b-45ff-8b4a-5eed2bba0054,043bd776-5a7b-45ff-8b4a-5eed2bba0054,1,0,6a708860-e3b6-46ea-bea5-0d3e426c72f6,6a708860-e3b6-46ea-bea5-0d3e426c72f6,1,0,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,7c9e30d0-4a25-4d1d-a5ad-c48b231f453c,1,0,f53a3a46-edad-4cc0-8814-3755c2ea2c03,f53a3a46-edad-4cc0-8814-3755c2ea2c03,1,0,0a60b201-23f7-483b-ac16-5d270f32344e,0a60b201-23f7-483b-ac16-5d270f32344e,1,0,78058cd3-eb56-483c-96f5-1bf8883abc76,78058cd3-eb56-483c-96f5-1bf8883abc76,1,0,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,cd1fbfdd-d05e-4c22-aa04-83e9d36fb557,1,0,fae4675c-dcdc-42fc-911d-07c3c577b8b8,fae4675c-dcdc-42fc-911d-07c3c577b8b8,1,0,f1050611-4f82-411b-97f2-bcd8a5c914bf,f1050611-4f82-411b-97f2-bcd8a5c914bf,1,0,efacf22d-b474-4d49-af8b-6d3784aa5cf2,efacf22d-b474-4d49-af8b-6d3784aa5cf2,1,0,f818b937-9ac3-4a0c-ba50-26c060984f09,f818b937-9ac3-4a0c-ba50-26c060984f09,1,0,f385778d-96cb-4e09-884d-533739b393b1,f385778d-96cb-4e09-884d-533739b393b1,1,0,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,1,0,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,b8fe43d1-b9a7-4ec1-94bd-1e7fad424f8d,1,0,f64089ee-72dd-4fcf-8926-31e95c6fcf77,f64089ee-72dd-4fcf-8926-31e95c6fcf77,1,0,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,5d93aea8-3f41-4e77-bed5-4b2377cbfe0e,1,0,e1e151cc-7b8a-4125-804f-c902a522ed81,e1e151cc-7b8a-4125-804f-c902a522ed81,1,0,f475494e-fe94-4902-b2da-3ade01eba5bb,f475494e-fe94-4902-b2da-3ade01eba5bb,1,0,fbb814b2-cb2f-474d-9c96-5571cef3030e,fbb814b2-cb2f-474d-9c96-5571cef3030e,1,0,7bf36370-3761-4fd5-bea5-90fa142a9d57,7bf36370-3761-4fd5-bea5-90fa142a9d57,1,0,3b81427f-cf64-4a5e-adb3-5415d515fecd,3b81427f-cf64-4a5e-adb3-5415d515fecd,1,0,e9f2b604-7181-476d-8b34-3a544cbb353d,e9f2b604-7181-476d-8b34-3a544cbb353d,1,0,73773919-d01c-41dd-bb31-9c66648ac0ff,73773919-d01c-41dd-bb31-9c66648ac0ff,1,0,5d1afad0-3d7e-4214-b52a-72c184490084,5d1afad0-3d7e-4214-b52a-72c184490084,1,0,5f7901a1-f992-42fa-9ddb-d63574da3b56,5f7901a1-f992-42fa-9ddb-d63574da3b56,1,0,26abd45a-12b3-4312-88fb-53c90a6e6679,26abd45a-12b3-4312-88fb-53c90a6e6679,1,0,1541ad74-3e73-4699-bccf-c13313fbedfe,1541ad74-3e73-4699-bccf-c13313fbedfe,1,0,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1,0,1f03420b-0480-451a-9263-8431ff0b0c73,1f03420b-0480-451a-9263-8431ff0b0c73,1,0,2bf547e4-d295-4f69-9dbf-9a9d91b2db98,2bf547e4-d295-4f69-9dbf-9a9d91b2db98,1,0,46506a80-495e-4f06-a191-54ccf5d6cc3f,46506a80-495e-4f06-a191-54ccf5d6cc3f,1,0,b9788ea3-b910-4b5b-96c3-921d62745b6e,b9788ea3-b910-4b5b-96c3-921d62745b6e,1,0,0646de72-49fd-466d-af0f-843bfa527049,0646de72-49fd-466d-af0f-843bfa527049,1,0,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,1,0,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,1,0,be2b4dba-e77e-4947-bd2f-0710b357ca2a,be2b4dba-e77e-4947-bd2f-0710b357ca2a,1,0,df750e63-50fc-4085-b8b8-f05e4751ff51,df750e63-50fc-4085-b8b8-f05e4751ff51,1,0,86182e9a-89e0-40d7-b2d7-fcd92ee42942,86182e9a-89e0-40d7-b2d7-fcd92ee42942,1,0,091cb921-c7e3-4a5f-97b7-34e625159b9c,091cb921-c7e3-4a5f-97b7-34e625159b9c,1,0,f6118cdd-1dcd-464e-a49d-e95c69466750,f6118cdd-1dcd-464e-a49d-e95c69466750,1,0,39932897-959b-41a6-94ad-61426abfdbd9,39932897-959b-41a6-94ad-61426abfdbd9,1,0,c56ea6f3-1032-4b7a-a20e-e912196da1cd,c56ea6f3-1032-4b7a-a20e-e912196da1cd,1,0,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,1,0,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,1,0,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,1,0,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,1,0,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,1,0,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,1,0,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,1,0,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,1,0,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,1,0,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,1,0,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,1,0,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,1,0,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,1,0,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,1,0,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,1,0,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,1,0,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,1,0,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,1,0,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,1,0,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,1,0,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,1,0,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,1,0,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,1,0,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,1,0,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,1,0,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,1,0,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,1,0,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,1,0,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,1,0,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,1,0,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,1,0,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,1,0,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,1,0,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,1,0,25451a36-c842-44a5-94f4-7e540050b825,25451a36-c842-44a5-94f4-7e540050b825,1,0,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,8e0340c9-6469-4fc9-b19a-4be4e0e6ee82,1,0,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,1,0,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,1,0,e1e9862e-c87b-400f-bca1-b1380cb98ddc,e1e9862e-c87b-400f-bca1-b1380cb98ddc,1,0,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,1,0,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,1,0,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,1,0,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,1,0,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,1,0,0db78226-37d0-4016-b4c9-5134af1aabc7,0db78226-37d0-4016-b4c9-5134af1aabc7,1,0,8d6b4d23-a260-4352-9975-c13ce3e05220,8d6b4d23-a260-4352-9975-c13ce3e05220,1,0,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,1,0,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,1,0,6f5ac40b-ea22-47cf-acf2-614406669a72,6f5ac40b-ea22-47cf-acf2-614406669a72,1,0,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,1,0,488d2644-6fef-488a-af38-40f59c0e0d8c,488d2644-6fef-488a-af38-40f59c0e0d8c,1,0,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,1,0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,1,0,f1efef30-8651-4728-becd-abe3f9026a43,f1efef30-8651-4728-becd-abe3f9026a43,1,0,c2612e22-4f0d-4713-b4eb-decd9780d088,c2612e22-4f0d-4713-b4eb-decd9780d088,1,0,11b1410f-8e14-4b2f-8890-177f4875020e,11b1410f-8e14-4b2f-8890-177f4875020e,1,0,2276b2b0-1705-4014-956f-5087e9dd5c1e,2276b2b0-1705-4014-956f-5087e9dd5c1e,1,0,f72b9d4b-7196-45a3-9349-e32fc91e875a,f72b9d4b-7196-45a3-9349-e32fc91e875a,1,0,6c509dcc-4529-4ac3-86fe-26f807991b1c,6c509dcc-4529-4ac3-86fe-26f807991b1c,1,0,529c8887-f691-4ba8-aeaf-937858d61c30,529c8887-f691-4ba8-aeaf-937858d61c30,1,0,43435d30-8c25-4757-9a29-9173415959ff,43435d30-8c25-4757-9a29-9173415959ff,1,0,4aef5419-7cf5-4443-b773-9273c983844f,4aef5419-7cf5-4443-b773-9273c983844f,1,0,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,1,0,2bb5c23c-ad87-4b66-b766-d2e3f82715bd,2bb5c23c-ad87-4b66-b766-d2e3f82715bd,1,0,d01871bb-492e-4ab8-ada9-e9d8ec1adbce,d01871bb-492e-4ab8-ada9-e9d8ec1adbce,1,0,dd931c85-8c19-42a8-a39e-7af0c5bd346c,dd931c85-8c19-42a8-a39e-7af0c5bd346c,1,0,4fa153eb-1efb-43e5-ac09-e5431d4800df,4fa153eb-1efb-43e5-ac09-e5431d4800df,1,0,ada760f3-6a9f-4b81-afc1-98eb164af747,ada760f3-6a9f-4b81-afc1-98eb164af747,1,0,262dea64-4ccd-4b97-ac7e-ec1dbdd9ac98,262dea64-4ccd-4b97-ac7e-ec1dbdd9ac98,1,0,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,1,0,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,1,0,a8e14d2e-911d-4096-9027-deb7a08838e0,a8e14d2e-911d-4096-9027-deb7a08838e0,1,0,c51d8ae2-66fe-4052-8ee4-980855b1f90c,c51d8ae2-66fe-4052-8ee4-980855b1f90c,1,0,27610803-846f-40bd-b817-f73708f1fdb7,27610803-846f-40bd-b817-f73708f1fdb7,1,0,4e2a3873-0317-44be-8dbb-e4cefc0361a8,4e2a3873-0317-44be-8dbb-e4cefc0361a8,1,0,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,1,0,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,1,0,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,1,0,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,1,0,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,1,0,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,1,0,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,1,0,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,1,0,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,1,0,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,1,0,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,1,0,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,1,0,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,1,0,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,1,0,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,1,0,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,1,0,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,1,0,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,1,0,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,1,0,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,1,0,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,1,0,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,1,0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,1,0,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,1,0,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,1,0,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,1,0,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,1,0,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,1,0,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,1,0,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,1,0,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,1,0,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,1,0,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,1,0,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,1,0,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,1,0,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,1,0,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1,0,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,1,0,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,1,0,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,1,0,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,1,0,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,1,0,5c68c57a-31d6-4ae9-855f-3fbc57922e39,5c68c57a-31d6-4ae9-855f-3fbc57922e39,1,0,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,1,0,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,1,0,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,1,0,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,1,0,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,1,0,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,1,0,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,1,0,911f8810-e96e-4f02-9377-47e49919f87e,911f8810-e96e-4f02-9377-47e49919f87e,1,0,cde46d6d-9f8a-45b6-98a7-9411030ccd72,cde46d6d-9f8a-45b6-98a7-9411030ccd72,1,0,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,ff1a4c30-03ff-4bdd-9df2-a2579aeb4157,1,0,224b9439-4b30-4b64-8edf-e7718ee90a7d,224b9439-4b30-4b64-8edf-e7718ee90a7d,1,0,74dc2374-daf1-4a8a-ba10-d3aced96af3b,74dc2374-daf1-4a8a-ba10-d3aced96af3b,1,0,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,15f1a3a8-5d42-486d-95f9-3d43ff1d5d56,1,0,e28e953f-93b3-4d4d-9ee4-c56df26037eb,e28e953f-93b3-4d4d-9ee4-c56df26037eb,1,0,578e0fd2-997c-437a-befc-33d128097a7e,578e0fd2-997c-437a-befc-33d128097a7e,1,0,14089231-31a8-4471-b85b-064836794ff3,14089231-31a8-4471-b85b-064836794ff3,1,0,014de276-fb2f-4deb-873f-475729be0f66,014de276-fb2f-4deb-873f-475729be0f66,1,0,40a60ff7-96ca-485b-a2d9-640a208a7de6,40a60ff7-96ca-485b-a2d9-640a208a7de6,1,0,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,03e6caa4-eaa2-43aa-bdd1-768f9cce7848,1,0,2c2526c1-bdf8-4115-bdff-3e79d28321cb,2c2526c1-bdf8-4115-bdff-3e79d28321cb,1,0,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,1,0,95ab774f-27fa-4bd4-a422-0f997f632679,95ab774f-27fa-4bd4-a422-0f997f632679,1,0,ee3ad891-b7d6-439d-892b-de2f3399d147,ee3ad891-b7d6-439d-892b-de2f3399d147,1,0,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,1,0,a2ae0338-ed11-422a-8442-f6c4002ddf0d,a2ae0338-ed11-422a-8442-f6c4002ddf0d,1,0,eb59c9c3-6043-401c-87cc-ba7620139d6a,eb59c9c3-6043-401c-87cc-ba7620139d6a,1,0,2b5ce871-8630-4f2f-9ccb-d9f863886420,2b5ce871-8630-4f2f-9ccb-d9f863886420,1,0,86ae353e-7eed-434c-b4ab-cede36e462bc,86ae353e-7eed-434c-b4ab-cede36e462bc,1,0,18e65717-738b-4d39-9c85-676bca15e6b7,18e65717-738b-4d39-9c85-676bca15e6b7,1,0,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,1,0,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,1,0,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,1,0,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,1,0,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,1,0,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,1,0,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,1,0,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,1,0,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,1,0,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,1,0,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,1,0,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,1,0,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,1,0,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,1,0,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,1,0,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,1,0,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,1,0,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,1,0,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,1,0,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,1,0,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,1,0,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,1,0,feb5f490-e791-11e6-508c-a8667f21fde4,feb5f490-e791-11e6-508c-a8667f21fde4,1,0,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,1,0,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,1,0,6962f838-e792-11e6-508c-a8667f21fde4,6962f838-e792-11e6-508c-a8667f21fde4,1,0,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,1,0,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,1,0,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,1,0,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,1,0,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,1,0,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,1,0,4f2b6bf8-e792-11e6-508c-a8667f21fde4,4f2b6bf8-e792-11e6-508c-a8667f21fde4,1,0,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,1,0,a5623e87-3102-4521-b4ab-c41bf2403a1a,a5623e87-3102-4521-b4ab-c41bf2403a1a,1,0,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,1,0,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,1,0,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,1,0,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,1,0,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,1,0,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,1,0,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,1,0,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,1,0,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,1,0,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,1,0,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,1,0,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,1,0,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,1,0,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,1,0,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,1,0,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,1,0,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,1,0,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,1,0,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,1,0,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,1,0,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,1,0,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,1,0,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,1,0,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,1,0,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,1,0,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,1,0,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,1,0,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,1,0,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,1,0,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,1,0,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,1,0,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,1,0,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,1,0,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,1,0,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,1,0,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,1,0,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,1,0,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,1,0,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,1,0,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,1,0,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,1,0,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,1,0,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,1,0,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,1,0,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,1,0,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,1,0,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,1,0,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,1,0,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,1,0,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,1,0,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,1,0,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,1,0,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,1,0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,1,0,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,1,0,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,1,0,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,1,0,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,1,0,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,1,0,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,1,0,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,1,0,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,1,0,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,1,0,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,1,0,1fc05949-c1ba-4363-8353-6902bc041021,1fc05949-c1ba-4363-8353-6902bc041021,1,0,d6e61d59-fe83-4a9e-aa15-e072a39fd8fd,d6e61d59-fe83-4a9e-aa15-e072a39fd8fd,1,0,614fc08c-78b6-4d49-9488-05fcf9b76d58,614fc08c-78b6-4d49-9488-05fcf9b76d58,1,0,d983cae8-edbb-4f26-9c0a-2f701cb11046,d983cae8-edbb-4f26-9c0a-2f701cb11046,1,0,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,1,0,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,1,0,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,1,0,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,1,0,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,1,0,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,1,0,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,1,0,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,1,0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1,0,b50f3157-3c3a-4553-a16a-7fcd660e2824,b50f3157-3c3a-4553-a16a-7fcd660e2824,1,0,19858faf-2bc5-4cfb-b258-cb101ab66e87,19858faf-2bc5-4cfb-b258-cb101ab66e87,1,0,f779f4a1-1fab-46d4-8043-ac25c247d361,f779f4a1-1fab-46d4-8043-ac25c247d361,1,0,308358bc-773a-43fa-adff-dcc5884a2bd4,308358bc-773a-43fa-adff-dcc5884a2bd4,1,0,ed541a1c-a842-40a9-b357-612db71ec32c,ed541a1c-a842-40a9-b357-612db71ec32c,1,0,b0e37495-7d9e-41d0-8225-652f9ac328cf,b0e37495-7d9e-41d0-8225-652f9ac328cf,1,0,3bd2e1c8-9ef3-449b-acf6-397b90669c49,3bd2e1c8-9ef3-449b-acf6-397b90669c49,1,0,cb334191-2ff3-439e-bdaf-4b8fe6561c3b,cb334191-2ff3-439e-bdaf-4b8fe6561c3b,1,0,f9865a2a-50e3-4f9c-a509-319be62dc468,f9865a2a-50e3-4f9c-a509-319be62dc468,1,0,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,1,0,766d8852-3bb4-4a6c-81c0-911722af4e8e,766d8852-3bb4-4a6c-81c0-911722af4e8e,1,0,f6dae699-06eb-41ef-878b-3fdfe1b1f213,f6dae699-06eb-41ef-878b-3fdfe1b1f213,1,0,fe6de86a-54c9-4ae2-9f17-cfce38b7b560,fe6de86a-54c9-4ae2-9f17-cfce38b7b560,1,0,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,1,0,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,1,0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,1,0,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,1,0,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,1,0,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,1,0,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,1,0,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,1,0,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,1,0,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,1,0,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,1,0,56d97df6-9c8b-4fc5-a7a6-52107d38dcd5,56d97df6-9c8b-4fc5-a7a6-52107d38dcd5,1,0,a0be938b-139e-41bd-b067-f5241ff68c90,a0be938b-139e-41bd-b067-f5241ff68c90,1,0,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,1,0,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,1,0,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,1,0,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1,0,8064eb3a-d56c-4517-9db0-b7300149c7c4,8064eb3a-d56c-4517-9db0-b7300149c7c4,1,0,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,1,0,b1c3a6c1-5245-4a65-8a45-13948be6f6a1,b1c3a6c1-5245-4a65-8a45-13948be6f6a1,1,0,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,1,0,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,1,0,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,1,0,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,1,0,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,1,0,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,1,0,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,1,0,8adebe50-a946-40c2-9258-b17efe787e0e,8adebe50-a946-40c2-9258-b17efe787e0e,1,0,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,1,0,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,1,0,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,1,0,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,1,0,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,1,0,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,1,0,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1,0,d6b72e00-018a-4fdc-b6a4-06dcecf89809,d6b72e00-018a-4fdc-b6a4-06dcecf89809,1,0,9f816562-57f0-473f-8c85-14f7521ffd7f,9f816562-57f0-473f-8c85-14f7521ffd7f,1,0,917b0acc-88fe-4afc-b19b-6da69e060393,917b0acc-88fe-4afc-b19b-6da69e060393,1,0,a091b76e-8ba4-4534-bbb0-9990e69b8603,a091b76e-8ba4-4534-bbb0-9990e69b8603,1,0,867ee5d2-7566-4052-a311-b56e7e46b90d,867ee5d2-7566-4052-a311-b56e7e46b90d,1,0,8f51328b-73a8-46fb-b6db-7b7a84c05c2a,8f51328b-73a8-46fb-b6db-7b7a84c05c2a,1,0,0f0f5b42-2407-44e6-85d7-26ace96b2cd9,0f0f5b42-2407-44e6-85d7-26ace96b2cd9,1,0,ffec426d-2556-46d6-b313-aeca43581865,ffec426d-2556-46d6-b313-aeca43581865,1,0,f32e0941-2061-4e12-bdae-fcb65f91ac28,f32e0941-2061-4e12-bdae-fcb65f91ac28,1,0,6f0e0f44-db5a-4a13-9131-866b77b90f14,6f0e0f44-db5a-4a13-9131-866b77b90f14,1,0,9415e0aa-391f-4798-ad7d-3b854a756de8,9415e0aa-391f-4798-ad7d-3b854a756de8,1,0,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,1,0,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,1,0,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,1,0,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,1,0,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,1,0,64e702e9-8934-4356-a1b2-be0e8b390630,64e702e9-8934-4356-a1b2-be0e8b390630,1,0,74880ac4-bdd3-48e6-82a0-a2103da42723,74880ac4-bdd3-48e6-82a0-a2103da42723,1,0,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,1,0,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,1,0,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,1,0,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,1,0,ddc6761c-a32a-41e1-b110-fdc39ad440d3,ddc6761c-a32a-41e1-b110-fdc39ad440d3,1,0,0b322ee2-b018-4d00-8f05-62ee16e519ff,0b322ee2-b018-4d00-8f05-62ee16e519ff,1,0,0866e282-055a-49bb-9aa5-b1af7c74c344,0866e282-055a-49bb-9aa5-b1af7c74c344,1,0,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,1,0,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,1,0,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,1,0,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,1,0,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,1,0,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,1,0,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,1,0,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,1,0,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,1,0,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,1,0,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,1,0,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,1,0,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,1,0,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,1,0,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,1,0,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,1,0,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,1,0,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,1,0,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,1,0,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,1,0,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,1,0,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,1,0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,1,0,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,1,0,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,1,0,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,1,0,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,1,0,8c576405-29c1-46b1-ab2e-40e52c21cab0,8c576405-29c1-46b1-ab2e-40e52c21cab0,1,0,b33a89da-8589-4902-83fa-6545e5fce23e,b33a89da-8589-4902-83fa-6545e5fce23e,1,0,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,1,0,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,1,0,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,1,0,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,1,0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,1,0,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,1,0,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,1,0,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,1,0,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,1,0,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,1,0,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,1,0,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,1,0,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,1,0,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,1,0,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,1,0,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,1,0,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,1,0,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,1,0,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,1,0,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,1,0,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,1,0,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,1,0,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,1,0,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,1,0,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,1,0,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,1,0,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,1,0,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,1,0,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,1,0,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,1,0,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,1,0,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,1,0,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,1,0,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,1,0,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file diff --git a/SSL/src/Configuration/SessionModule.bsl b/SSL/src/Configuration/SessionModule.bsl index a52c45d3d..07a7b8813 100644 --- a/SSL/src/Configuration/SessionModule.bsl +++ b/SSL/src/Configuration/SessionModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий diff --git a/SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/ValueManagerModule.bsl b/SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/ValueManagerModule.bsl index 03c289cb1..6b83d29d9 100644 --- a/SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/ValueManagerModule.bsl +++ b/SSL/src/Constants/АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности/ValueManagerModule.bsl @@ -1,9 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПриЗаписи(Отказ) + // ОбменДанными.Загрузка не требуется. + // Запись служебных данных в безопасном режиме запрещена. РаботаВБезопасномРежимеСлужебный.ПриЗаписиСлужебныхДанных(ЭтотОбъект); Если ОбменДанными.Загрузка Тогда @@ -20,4 +30,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ValueManagerModule.bsl b/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ValueManagerModule.bsl index 0aeb57889..e3f8e9f16 100644 --- a/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ValueManagerModule.bsl +++ b/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -19,4 +27,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ValueManagerModule.bsl index 05787f1ae..80741058b 100644 --- a/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -18,4 +26,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl index bdb098915..faf780abd 100644 --- a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -49,6 +57,8 @@ Иначе ОчиститьРеквизитВходВПрограммуРазрешенУВсехВнешнихПользователей(); КонецЕсли; + + УстановитьПризнакИспользованияНабораСвойств(); КонецЕсли; КонецПроцедуры @@ -97,6 +107,21 @@ КонецПроцедуры +Процедура УстановитьПризнакИспользованияНабораСвойств() + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + Возврат; + КонецЕсли; + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + + ПараметрыНабора = МодульУправлениеСвойствами.СтруктураПараметровНабораСвойств(); + ПараметрыНабора.Используется = Значение; + МодульУправлениеСвойствами.УстановитьПараметрыНабораСвойств("Справочник_ВнешниеПользователи", ПараметрыНабора); + +КонецПроцедуры + #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ValueManagerModule.bsl index d127a4958..73ecad9ad 100644 --- a/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -69,4 +77,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl index 00e782aa6..536dcaf8f 100644 --- a/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -21,6 +29,8 @@ Процедура ПриЗаписи(Отказ) + // В режиме ОбменДанными.Загрузка необходимо обновлять УИД в константе ВерсияДатЗапретаИзменения, + // который позволять сеансам определить, что нужно обновить кэш дат запрета изменения в памяти. Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзменения(); КонецЕсли; @@ -40,4 +50,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьДатыЗапретаИзменения/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДатыЗапретаИзменения/ValueManagerModule.bsl index 09a20fb90..5e765a3ac 100644 --- a/SSL/src/Constants/ИспользоватьДатыЗапретаИзменения/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьДатыЗапретаИзменения/ValueManagerModule.bsl @@ -1,9 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПриЗаписи(Отказ) + // В режиме ОбменДанными.Загрузка необходимо обновлять УИД в константе ВерсияДатЗапретаИзменения, + // который позволять сеансам определить, что нужно обновить кэш дат запрета изменения в памяти. Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзменения(); КонецЕсли; @@ -16,4 +26,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl index 9b5a66b23..37e713b89 100644 --- a/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -40,4 +48,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьПолнотекстовыйПоиск/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьПолнотекстовыйПоиск/ValueManagerModule.bsl index e69de29bb..5b66dc162 100644 --- a/SSL/src/Constants/ИспользоватьПолнотекстовыйПоиск/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьПолнотекстовыйПоиск/ValueManagerModule.bsl @@ -0,0 +1,41 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + УстановитьРежимПолнотекстовогоПоиска(Значение); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура УстановитьРежимПолнотекстовогоПоиска(ИспользоватьПолнотекстовыйПоиск) + + Если ИспользоватьПолнотекстовыйПоиск Тогда + ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Разрешить); + Иначе + ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Запретить); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ValueManagerModule.bsl index 4b0578ae6..044c16cc3 100644 --- a/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -17,4 +25,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl index 83a1975a0..965205a7e 100644 --- a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl @@ -1,21 +1,35 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) - ДополнительныеСвойства.Вставить("ТекущееЗначение", Константы.ИспользоватьРазделениеПоОбластямДанных.Получить()); - Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; + ДополнительныеСвойства.Вставить("ТекущееЗначение", Константы.ИспользоватьРазделениеПоОбластямДанных.Получить()); + КонецПроцедуры Процедура ПриЗаписи(Отказ) + Если ОбменДанными.Загрузка Тогда + + Возврат; + + КонецЕсли; + // Следующие константы взаимоисключающие, используются в отдельных функциональных опциях. // // Константа.ЭтоАвтономноеРабочееМесто -> ФО.РаботаВАвтономномРежиме @@ -51,14 +65,10 @@ КонецЕсли; - Если ОбменДанными.Загрузка Тогда - - Возврат; - - КонецЕсли; - КонецПроцедуры #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьСинхронизациюДанных/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьСинхронизациюДанных/ValueManagerModule.bsl index 60f3be967..9ecba0d56 100644 --- a/SSL/src/Constants/ИспользоватьСинхронизациюДанных/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьСинхронизациюДанных/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -38,4 +46,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьШаблоныСообщений/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьШаблоныСообщений/ValueManagerModule.bsl index 5a3c7cb87..661752da7 100644 --- a/SSL/src/Constants/ИспользоватьШаблоныСообщений/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьШаблоныСообщений/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -22,4 +30,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl b/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl index d039043a7..8c6ef2479 100644 --- a/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользуютсяПрофилиБезопасности/ValueManagerModule.bsl @@ -1,9 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПриЗаписи(Отказ) + // ОбменДанными.Загрузка не требуется. + // Запись служебных данных в безопасном режиме запрещена. РаботаВБезопасномРежимеСлужебный.ПриЗаписиСлужебныхДанных(ЭтотОбъект); Если ОбменДанными.Загрузка Тогда @@ -19,4 +29,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляLinux/ValueManagerModule.bsl b/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляLinux/ValueManagerModule.bsl index ab1f63c80..5c6c51e4f 100644 --- a/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляLinux/ValueManagerModule.bsl +++ b/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляLinux/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -11,4 +19,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляWindows/ValueManagerModule.bsl b/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляWindows/ValueManagerModule.bsl index ab1f63c80..5c6c51e4f 100644 --- a/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляWindows/ValueManagerModule.bsl +++ b/SSL/src/Constants/КаталогСообщенийОбменаДаннымиДляWindows/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -11,4 +19,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/НастройкиКолонтитулов/НастройкиКолонтитулов.mdo b/SSL/src/Constants/НастройкиКолонтитулов/НастройкиКолонтитулов.mdo new file mode 100644 index 000000000..d3c423d8f --- /dev/null +++ b/SSL/src/Constants/НастройкиКолонтитулов/НастройкиКолонтитулов.mdo @@ -0,0 +1,20 @@ + + + + + + + + НастройкиКолонтитулов + + ru + Настройки колонтитулов + + + ValueStorage + + true + CommonForm.НастройкаКолонтитулов + + + diff --git a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl index e94ac6909..b53374434 100644 --- a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -48,4 +56,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписейУниверсально/ValueManagerModule.bsl b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписейУниверсально/ValueManagerModule.bsl index 366610a80..b4a5e15cd 100644 --- a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписейУниверсально/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписейУниверсально/ValueManagerModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -57,4 +64,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl b/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl index 5ee7ba6f6..f808d6a5b 100644 --- a/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -44,4 +52,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ПрофильБезопасностиИнформационнойБазы/ValueManagerModule.bsl b/SSL/src/Constants/ПрофильБезопасностиИнформационнойБазы/ValueManagerModule.bsl index ad30f9f36..2f36b8d41 100644 --- a/SSL/src/Constants/ПрофильБезопасностиИнформационнойБазы/ValueManagerModule.bsl +++ b/SSL/src/Constants/ПрофильБезопасностиИнформационнойБазы/ValueManagerModule.bsl @@ -1,9 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПриЗаписи(Отказ) + // ОбменДанными.Загрузка не требуется. + // Запись служебных данных в безопасном режиме запрещена. РаботаВБезопасномРежимеСлужебный.ПриЗаписиСлужебныхДанных(ЭтотОбъект); Если ОбменДанными.Загрузка Тогда @@ -14,5 +24,6 @@ #КонецОбласти -#КонецЕсли - +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/СинхронизироватьФайлы/ValueManagerModule.bsl b/SSL/src/Constants/СинхронизироватьФайлы/ValueManagerModule.bsl index 1edd25609..d51a25130 100644 --- a/SSL/src/Constants/СинхронизироватьФайлы/ValueManagerModule.bsl +++ b/SSL/src/Constants/СинхронизироватьФайлы/ValueManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -18,5 +26,6 @@ #КонецОбласти -#КонецЕсли - +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Commands/АвтоматическоеИзвлечениеТекстов/CommandModule.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Commands/АвтоматическоеИзвлечениеТекстов/CommandModule.bsl index 610e11f68..45e9fa501 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Commands/АвтоматическоеИзвлечениеТекстов/CommandModule.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Commands/АвтоматическоеИзвлечениеТекстов/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl index acf452e84..e77723566 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,7 +15,7 @@ Возврат; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Или Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если ОбщегоНазначения.ЭтоВебКлиент() Или Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда Возврат; // Отказ устанавливается в ПриОткрытии(). КонецЕсли; @@ -33,13 +40,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - Отказ = Истина; - ПоказатьПредупреждение(, НСтр("ru = 'Извлечение текстов не поддерживается в Веб-клиенте.'")); - Возврат; - КонецЕсли; - - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ИзвлечениеТекстовДоступно() Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Извлечение текстов поддерживается только в клиенте под управлением ОС Windows.'"); ПоказатьПредупреждение(, ТекстСообщения); @@ -122,6 +123,17 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Функция ИзвлечениеТекстовДоступно() + +#Если ВебКлиент Или МобильныйКлиент Тогда + Возврат Ложь; +#Иначе + Возврат ОбщегоНазначенияКлиент.ЭтоWindowsКлиент(); +#КонецЕсли + +КонецФункции + &НаКлиентеНаСервереБезКонтекста Функция ТекстСостоянияПодсчет() Возврат НСтр("ru = 'Поиск файлов с неизвлеченным текстом...'"); @@ -200,7 +212,7 @@ КонецЕсли; Если Результат.Статус = "Ошибка" Тогда - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Поиск файлов с неизвлеченным текстом'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Поиск файлов с неизвлеченным текстом'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), "Ошибка", Результат.ПодробноеПредставлениеОшибки, , Истина); ВызватьИсключение Результат.КраткоеПредставлениеОшибки; КонецЕсли; @@ -236,7 +248,7 @@ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Поиск файлов с неизвлеченным текстом.'"); - ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне("РаботаСФайламиСлужебныйВызовСервера.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом", Новый Структура, ПараметрыВыполнения); + ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне("РаботаСФайламиСлужебный.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом", Новый Структура, ПараметрыВыполнения); ТекущееФоновоеЗадание = "Подсчет"; ИдентификаторФоновогоЗадания = ДлительнаяОперация.ИдентификаторЗадания; АдресРезультата = ДлительнаяОперация.АдресРезультата; @@ -245,13 +257,12 @@ КонецФункции - &НаСервереБезКонтекста Процедура ЗаписьЖурналаРегистрацииСервер(ТекстСообщения) ЗаписьЖурналаРегистрации( НСтр("ru = 'Файлы.Извлечение текста'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -286,8 +297,9 @@ КонецПроцедуры -#Если НЕ ВебКлиент И НЕ МобильныйКлиент Тогда -// Извлекает текст из файлов на диске на клиенте. +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + + // Извлекает текст из файлов на диске на клиенте. &НаКлиенте Процедура ИзвлечениеТекстовКлиент(РазмерПорции = Неопределено) @@ -373,6 +385,7 @@ ОбновитьИнформациюОКоличествеФайловСНеизвлеченнымТекстом(); КонецПроцедуры + #КонецЕсли &НаСервереБезКонтекста diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Commands/АктивныеПользователи/CommandModule.bsl b/SSL/src/DataProcessors/АктивныеПользователи/Commands/АктивныеПользователи/CommandModule.bsl index ba1cbdf0c..39827cb4a 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Commands/АктивныеПользователи/CommandModule.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Commands/АктивныеПользователи/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl index 57332eea7..ea1a5a1a4 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -82,7 +90,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовТаблицыСписокПользователей +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокПользователей &НаКлиенте Процедура СписокПользователейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -461,14 +469,8 @@ СтруктураСеанса.Вставить("Значение", МассивСеансов); Фильтр = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтруктураСеанса); - КлиентПодключенЧерезВебСервер = ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер(); - Попытка - Если КлиентПодключенЧерезВебСервер Тогда - УдалитьСеансыИнформационнойБазыНаСервере(ПараметрыАдминистрирования, Фильтр) - Иначе - АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,, Фильтр); - КонецЕсли; + УдалитьСеансыИнформационнойБазыНаСервере(ПараметрыАдминистрирования, Фильтр) Исключение ЗапрашиватьПараметрыАдминистрированияИБ = Истина; ВызватьИсключение; @@ -509,7 +511,7 @@ &НаСервере Процедура УдалитьСеансыИнформационнойБазыНаСервере(ПараметрыАдминистрирования, Фильтр) - АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,, Фильтр); + АдминистрированиеКластера.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,, Фильтр); КонецПроцедуры diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl index 7a3148cf0..1d1918686 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -64,14 +72,14 @@ // Проверки возможности установки блокировки. Если Объект.НачалоДействияБлокировки > Объект.ОкончаниеДействияБлокировки И ЗначениеЗаполнено(Объект.ОкончаниеДействияБлокировки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Дата окончания блокировки не может быть меньше даты начала блокировки. Блокировка не установлена.'"),, "Объект.ОкончаниеДействияБлокировки",,Отказ); Возврат; КонецЕсли; Если Не ЗначениеЗаполнено(Объект.НачалоДействияБлокировки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Не указана дата начала блокировки.'"),, "Объект.НачалоДействияБлокировки",,Отказ); Возврат; КонецЕсли; @@ -120,7 +128,7 @@ Возврат; КонецЕсли; Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияКлиент.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; @@ -190,16 +198,9 @@ И ТекущееЗначениеБлокировки <> Объект.ЗапретитьРаботуРегламентныхЗаданий Тогда Попытка - - Если КлиентПодключенЧерезВебСервер Тогда - УстановитьБлокировкуРегламентныхЗаданийНаСервере(ПараметрыАдминистрирования); - Иначе - АдминистрированиеКластераКлиентСервер.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы( - ПараметрыАдминистрирования, Неопределено, Объект.ЗапретитьРаботуРегламентныхЗаданий); - КонецЕсли; - + УстановитьБлокировкуРегламентныхЗаданийНаСервере(ПараметрыАдминистрирования); Исключение - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), "Ошибка", + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиент.СобытиеЖурналаРегистрации(), "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),, Истина); Элементы.ГруппаОшибка.Видимость = Истина; Элементы.ТекстОшибки.Заголовок = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -338,7 +339,7 @@ РеквизитФормыВЗначение("Объект").ВыполнитьУстановку(); Элементы.ГруппаОшибка.Видимость = Ложь; Исключение - ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(СоединенияИБ.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если ЭтоАдминистраторСистемы Тогда @@ -360,7 +361,7 @@ Попытка РеквизитФормыВЗначение("Объект").ОтменитьБлокировку(); Исключение - ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(СоединенияИБ.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если ЭтоАдминистраторСистемы Тогда @@ -429,7 +430,7 @@ Обработка.ПолучитьПараметрыБлокировки(); Элементы.ГруппаОшибка.Видимость = Ложь; Исключение - ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(СоединенияИБ.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если ЭтоАдминистраторСистемы Тогда @@ -475,11 +476,7 @@ ВведеныКорректныеПараметрыАдминистрирования = Истина; Попытка - Если КлиентПодключенЧерезВебСервер Тогда - Объект.ЗапретитьРаботуРегламентныхЗаданий = БлокировкаРегламентныхЗаданийИнформационнойБазыНаСервере(ПараметрыАдминистрирования); - Иначе - Объект.ЗапретитьРаботуРегламентныхЗаданий = АдминистрированиеКластераКлиентСервер.БлокировкаРегламентныхЗаданийИнформационнойБазы(ПараметрыАдминистрирования); - КонецЕсли; + Объект.ЗапретитьРаботуРегламентныхЗаданий = БлокировкаРегламентныхЗаданийИнформационнойБазыНаСервере(ПараметрыАдминистрирования); ТекущееЗначениеБлокировки = Объект.ЗапретитьРаботуРегламентныхЗаданий; Исключение; ВведеныКорректныеПараметрыАдминистрирования = Ложь; @@ -552,11 +549,7 @@ &НаКлиенте Процедура ВключитьУправлениеБлокировкойРегламентныхЗаданий() - Если КлиентПодключенЧерезВебСервер Тогда - Объект.ЗапретитьРаботуРегламентныхЗаданий = БлокировкаРегламентныхЗаданийИнформационнойБазыНаСервере(ПараметрыАдминистрирования); - Иначе - Объект.ЗапретитьРаботуРегламентныхЗаданий = АдминистрированиеКластераКлиентСервер.БлокировкаРегламентныхЗаданийИнформационнойБазы(ПараметрыАдминистрирования); - КонецЕсли; + Объект.ЗапретитьРаботуРегламентныхЗаданий = БлокировкаРегламентныхЗаданийИнформационнойБазыНаСервере(ПараметрыАдминистрирования); ТекущееЗначениеБлокировки = Объект.ЗапретитьРаботуРегламентныхЗаданий; Элементы.ГруппаЗапретитьРаботуРегламентныхЗаданий.ТекущаяСтраница = Элементы.ГруппаУправлениеРегламентнымиЗаданиями; @@ -565,7 +558,7 @@ &НаСервере Процедура УстановитьБлокировкуРегламентныхЗаданийНаСервере(ПараметрыАдминистрирования) - АдминистрированиеКластераКлиентСервер.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы( + АдминистрированиеКластера.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы( ПараметрыАдминистрирования, Неопределено, Объект.ЗапретитьРаботуРегламентныхЗаданий); КонецПроцедуры @@ -573,7 +566,7 @@ &НаСервере Функция БлокировкаРегламентныхЗаданийИнформационнойБазыНаСервере(ПараметрыАдминистрирования) - Возврат АдминистрированиеКластераКлиентСервер.БлокировкаРегламентныхЗаданийИнформационнойБазы(ПараметрыАдминистрирования); + Возврат АдминистрированиеКластера.БлокировкаРегламентныхЗаданийИнформационнойБазы(ПараметрыАдминистрирования); КонецФункции diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl index 840332de5..1d6fceb0e 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -186,10 +193,10 @@ Попытка РеквизитФормыВЗначение("Объект").ВыполнитьУстановку(); Исключение - ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(СоединенияИБ.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначения.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl index 5e79b1f64..bdef47790 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -72,4 +80,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form index c7934bc1e..b037a4a68 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form @@ -1123,6 +1123,11 @@ true auto true + + + ПанельКоманд + + Комментарий diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl index 65abe1b08..e5a6ac423 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Форма параметризуется: // // Заголовок - Строка - заголовок формы. @@ -42,7 +50,6 @@ Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), ВидКонтактнойИнформации.Наименование, Параметры.Заголовок); СкрыватьНеактуальныеАдреса = ВидКонтактнойИнформации.СкрыватьНеактуальныеАдреса; - ТолькоНациональныйАдрес = ВидКонтактнойИнформации.ТолькоНациональныйАдрес; ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип; // Пытаемся заполнить из параметров. @@ -77,7 +84,7 @@ Процедура ПриОткрытии(Отказ) Если ЗначениеЗаполнено(ТекстПредупрежденияПриОткрытии) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупрежденияПриОткрытии,, ПолеПредупрежденияПриОткрытии); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстПредупрежденияПриОткрытии,, ПолеПредупрежденияПриОткрытии); КонецЕсли; ОтобразитьПоляПоТипуАдреса(); @@ -433,8 +440,6 @@ КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(СтрокаКонтактнойИнформации); КонецЦикла; - ЭтоИсторическаяКонтактнаяИнформация = Ложь; - ПараметрыОбновления = Новый Структура; Для Каждого СтрокаКонтактнойИнформации Из Результат.История Цикл ДанныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаКонтактнойИнформации); @@ -569,8 +574,6 @@ &НаКлиенте Процедура ОтобразитьПоляПоТипуАдреса() - ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана); - НаселенныйПунктДетально.Country = СокрЛП(Страна); Если ВидКонтактнойИнформации.ВключатьСтрануВПредставление Тогда @@ -630,7 +633,6 @@ АдресНаДату = ДействуетС; Элементы.ГруппаИсторическийАдрес.Видимость = ЗначениеЗаполнено(ДействуетС); Иначе - ДействуетДо = Неопределено; Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form index bdd74cc1e..e158d3728 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form @@ -5,31 +5,244 @@ <value>Номер телефона, факса</value> - ГруппаТелефона - 24 - - КодСтраны - 5 + СведенияОТелефоне + 56 + + ГруппаПоляТелефона + 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 + + ru + +7 + + + + + КодГорода + 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 + true + Normal + + ru + 123 + + + + + НомерТелефона + 9 + true + true + + true + + + НомерТелефона + + Top + + ru + Номер телефона в телефонном номере + + + OnChange + НомерТелефонаПриИзменении + + + НомерТелефонаExtendedTooltip + 43 + Label + true + true + + Left + + + + НомерТелефонаКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + 13 + 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 - - КодСтраны - - Top - + <key>ru</key> - <value>Код страны в телефонном номере</value> - </toolTip> - <handlers> - <event>OnChange</event> - <name>КодСтраныПриИзменении</name> - </handlers> + <value>Телефона</value> + - КодСтраныExtendedTooltip - 41 + ГруппаПоляТелефонаРасширеннаяПодсказка + 40 Label true true @@ -37,55 +250,39 @@ Left - - КодСтраныКонтекстноеМеню - 6 - true - - InputField - Enter - true - Left - true - - 6 - true - true - false - true - true - true - true - Normal - - ru - +7 - + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto - КодГорода - 3 + Комментарий + 7 true true true - КодГорода + Комментарий Top ru - Код города в телефонном номере + Дополнительный комментарий, не попадающий в представление OnChange - КодГородаПриИзменении + КомментарийПриИзменении - КодГородаExtendedTooltip - 42 + КомментарийExtendedTooltip + 47 Label true true @@ -94,8 +291,8 @@ - КодГородаКонтекстноеМеню - 4 + КомментарийКонтекстноеМеню + 8 true InputField @@ -104,124 +301,11 @@ 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 - - 13 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 true @@ -235,11 +319,11 @@ <key>ru</key> - <value>Телефона</value> + <value>Сведения о телефоне</value> - ГруппаТелефонаExtendedTooltip - 40 + СведенияОТелефонеРасширеннаяПодсказка + 57 Label true true @@ -249,6 +333,7 @@ UsualGroup + Vertical Auto true true @@ -259,6 +344,7 @@ Представление 11 + VeryLow true true @@ -299,66 +385,15 @@ Style.ButtonBackColor - Normal - - ru - Введите номер телефона - - - - - Комментарий - 7 - true - true - - true - - - Комментарий - - Top - - ru - Дополнительный комментарий, не попадающий в представление - - - КомментарийExtendedTooltip - 47 - Label - true - true - - Left - - - - КомментарийКонтекстноеМеню - 8 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - true + + Style.FormBackColor + Normal - Bottom - true - - ФормаКоманднаяПанель - -1 + + ПанельКоманд + 58 КомандаОК 32 @@ -492,8 +527,36 @@ Auto InCommandBarAndInAdditionalSubmenu + true + true + + true + + + <key>ru</key> + <value>Панель команд</value> + + + ПанельКомандРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + CommandBar + + Right + + + Bottom + true + + ФормаКоманднаяПанель + -1 Right - true OnOpen @@ -516,6 +579,11 @@ true auto true + + + ПанельКоманд + + Объект 1 diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl index 300f75313..a74ed1ee0 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Форма параметризуется: // // Заголовок - Строка - заголовок формы. @@ -98,19 +106,19 @@ КонецЕсли; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Представление", "ПодсказкаВвода", НСтр("ru ='Представление'")); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандаОК", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандаОК", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отмена", "Видимость", Ложь); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Представление", "ПодсказкаВвода", НСтр("ru ='Представление'")); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандаОК", "Картинка", БиблиотекаКартинок.ЗаписатьИЗакрыть); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандаОК", "Отображение", ОтображениеКнопки.Картинка); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отмена", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КодСтраны", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КодГорода", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НомерТелефона", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Добавочный", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КодСтраны", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КодГорода", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НомерТелефона", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Добавочный", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Лево); Если Элементы.КодГорода.СписокВыбора.Количество() < 2 Тогда @@ -158,7 +166,7 @@ Процедура КодГородаПриИзменении(Элемент) Если (КодСтраны = "+7" ИЛИ КодСтраны = "8") И СтрНачинаетсяС(КодГорода, "9") И СтрДлина(КодГорода) <> 3 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Кода мобильных телефонов начинающиеся на цифру 9 имеют фиксированную длину в 3 цифры, например - 916.'"),, "КодГорода"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Коды мобильных телефонов начинающиеся на цифру 9 имеют фиксированную длину в 3 цифры, например - 916.'"),, "КодГорода"); КонецЕсли; ЗаполнитьПредставлениеТелефона(); @@ -178,6 +186,11 @@ КонецПроцедуры +&НаКлиенте +Процедура КомментарийПриИзменении(Элемент) + ЗаполнитьПредставлениеТелефона(); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -209,7 +222,7 @@ &НаКлиенте Процедура Подключаемый_ПредупредитьПослеОткрытияФормы() - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупрежденияПриОткрытии); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстПредупрежденияПриОткрытии); КонецПроцедуры @@ -415,7 +428,7 @@ // Значение - XPath, представление - описание ошибки. Для Каждого Элемент Из СписокОшибок Цикл - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Элемент.Представление,,, + ОбщегоНазначенияКлиент.СообщитьПользователю(Элемент.Представление,,, ПутьКДаннымФормыПоПутиXPath(Элемент.Значение)); КонецЦикла; @@ -480,5 +493,4 @@ КонецФункции - #КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Form.form new file mode 100644 index 000000000..50e41934f --- /dev/null +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Form.form @@ -0,0 +1,321 @@ + + + + <key>ru</key> + <value>Веб-сайт</value> + + + АдресСайта + 1 + true + true + + true + + + Адрес + + + АдресСайтаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + АдресСайтаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Представление + 7 + true + true + + true + + + Наименование + + + ПредставлениеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ПредставлениеКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Комментарий + 4 + true + true + + true + + + Комментарий + + Left + + КомментарийРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОК + 14 + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 10 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ВводКонтактнойИнформации + + + true + + + true + +
              true
              +
              + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 2 + + String + + 250 + + + + true + + + true + + + + Адрес + + <key>ru</key> + <value>Адрес</value> + + 3 + + String + + + + true + + + true + + + + Комментарий + + <key>ru</key> + <value>Комментарий</value> + + 4 + + String + + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + Представление + + String + + + + + ВидКонтактнойИнформации + + CatalogRef.ВидыКонтактнойИнформации + + + + Комментарий + + String + + + + + + + + +
              diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl new file mode 100644 index 000000000..408ae10a8 --- /dev/null +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl @@ -0,0 +1,118 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ВидКонтактнойИнформации = Параметры.ВидКонтактнойИнформации; + Если Не ЗначениеЗаполнено(ВидКонтактнойИнформации) Тогда + ВызватьИсключение НСтр("ru='Команда не может быть выполнена для указанного объекта из-за некорректного внедрения контактной информации.'"); + КонецЕсли; + ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница; + + Заголовок = ?(Не Параметры.Свойство("Заголовок") Или ПустаяСтрока(Параметры.Заголовок), Строка(ВидКонтактнойИнформации), Параметры.Заголовок); + + ЗначенияПолей = ОпределитьЗначениеАдреса(Параметры); + + Если ПустаяСтрока(ЗначенияПолей) Тогда + Данные = УправлениеКонтактнойИнформацией.ОписаниеНовойКонтактнойИнформации(ТипКонтактнойИнформации); + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначенияПолей) Тогда + Данные = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ЗначенияПолей); + Иначе + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда + РезультатыЧтения = Новый Структура; + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); + Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда + // Распознали с ошибками, сообщим при открытии. + КонтактнаяИнформация.Представление = Параметры.Представление; + КонецЕсли; + + Данные = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, ТипКонтактнойИнформации); + + Иначе + Данные = УправлениеКонтактнойИнформацией.ОписаниеНовойКонтактнойИнформации(ТипКонтактнойИнформации); + Данные.value = ЗначенияПолей; + Данные.Comment = Параметры.Комментарий; + КонецЕсли; + + КонецЕсли; + + Адрес = Данные.Value; + Наименование = СокрЛП(Параметры.Представление); + Комментарий = Данные.Comment; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + Закрыть(РезультатВыбора(Адрес, Наименование, Комментарий)); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ОпределитьЗначениеАдреса(Параметры) + + ЗначенияПолей = ""; + Если Параметры.Свойство("Значение") Тогда + Если ПустаяСтрока(Параметры.Значение) Тогда + Если Параметры.Свойство("ЗначенияПолей") Тогда + ЗначенияПолей = Параметры.ЗначенияПолей; + КонецЕсли; + Иначе + ЗначенияПолей = Параметры.Значение; + КонецЕсли; + Иначе + ЗначенияПолей = Параметры.ЗначенияПолей; + КонецЕсли; + + Возврат ЗначенияПолей; + +КонецФункции + +&НаСервереБезКонтекста +Функция РезультатВыбора(Адрес, Наименование, Комментарий) + + ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница; + НаименованиеСайта = ?(ЗначениеЗаполнено(Наименование), Наименование, Адрес); + + КонтактнаяИнформация = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(ТипКонтактнойИнформации ); + КонтактнаяИнформация.value = СокрЛП(Адрес); + КонтактнаяИнформация.name = СокрЛП(НаименованиеСайта); + КонтактнаяИнформация.comment = СокрЛП(Комментарий); + + ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформация); + + Результат = Новый Структура(); + Результат.Вставить("Тип", ТипКонтактнойИнформации); + Результат.Вставить("Адрес", Адрес); + Результат.Вставить("КонтактнаяИнформация", УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(ДанныеВыбора, Наименование, ТипКонтактнойИнформации)); + Результат.Вставить("Значение", ДанныеВыбора); + Результат.Вставить("Представление", НаименованиеСайта); + Результат.Вставить("Комментарий", КонтактнаяИнформация.Comment); + + Возврат Результат + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form index 228f59034..b142da9ea 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form @@ -4,502 +4,49 @@ ru История контактной информации - - ОбщаяГруппа - 48 - - История - 1 - - <key>ru</key> - <value>История</value> - + + История + 1 + + <key>ru</key> + <value>История</value> + + true + true + + true + + + История + + None + CancelSearch + Copy + EndEdit + Find + MoveDown + MoveUp + ShowRowRearrangement + SortListAsc + SortListDesc + + ИсторияДействуетС + 14 true true true - История + История.ДействуетС - None - CancelSearch - Copy - EndEdit - Find - MoveDown - MoveUp - ShowRowRearrangement - SortListAsc - SortListDesc - - ИсторияДействуетС - 14 - true - true - - true - - - История.ДействуетС - - - OnChange - ИсторияДействуетСПриИзменении - - - ИсторияДействуетСРасширеннаяПодсказка - 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 - Enter - true - Left - true - - - StartChoice - ИсторияАдресНачалоВыбора - - true - true - true - true - true - Normal - - - - ИсторияКомментарий - 52 - true - true - - - История.Комментарий - - - ИсторияКомментарийРасширеннаяПодсказка - 54 - Label - true - true - - Left - - - - ИсторияКомментарийКонтекстноеМеню - 53 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - Normal - - - - ИсторияКоманднаяПанель - 3 - - ИсторияВыбрать - 50 - true - - true - - - ИсторияВыбратьРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - Form.Command.Выбрать - Normal - Auto - true - true - UserCmds - Auto - - - ИсторияДобавить - 22 - true - true - - true - - - ИсторияДобавитьРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - Form.Item.История.StandardCommand.Add - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ИсторияИзменить - 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 - - - <key>ru</key> - <value>История группа действия</value> - - - ИсторияГруппаДействияРасширеннаяПодсказка - 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> - - - ИсторияГруппаСправкаРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - - - Left - true - - - Selection - ИсторияВыбор - - - 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 + ИсторияДействуетСРасширеннаяПодсказка + 16 Label true true @@ -508,126 +55,236 @@ - ИсторияКонтекстноеМеню - 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 - + ИсторияДействуетСКонтекстноеМеню + 15 true - true - 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 + Enter + true + Left + true + + + StartChoice + ИсторияАдресНачалоВыбора + + true + true + true + true + true + Normal + + + + ИсторияКомментарий + 52 + true + true + + + История.Комментарий + + + ИсторияКомментарийРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ИсторияКомментарийКонтекстноеМеню + 53 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + Normal + + + + ИсторияКоманднаяПанель + 3 + Left + + + Selection + ИсторияВыбор + + + 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 - true - MultiRow -
              true
              - 1 - 1 - AutoUse - AutoUse - true - true - true - Auto - Auto - true - true - true - true - true - -
              - - ГруппаКоманднаяПанель - 36 + + Left + + + + ИсторияКонтекстноеМеню + 2 - ОК - 40 + ИсторияКонтекстноеМенюДобавить + 42 true true true - true - ОКРасширеннаяПодсказка - 41 + ИсторияКонтекстноеМенюДобавитьРасширеннаяПодсказка + 43 Label true true @@ -635,25 +292,25 @@ Left - Form.Command.ОК + Form.Item.История.StandardCommand.Add + Normal Auto - true true true UserCmds Auto - Отмена - 38 + ИсторияКонтекстноеМенюИзменить + 44 true true true - ОтменаРасширеннаяПодсказка - 39 + ИсторияКонтекстноеМенюИзменитьРасширеннаяПодсказка + 45 Label true true @@ -661,7 +318,305 @@ Left - Form.Command.Отмена + 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 + SelectionPresentationAndChoice + true + +
              + + ГруппаКоманднаяПанель + 36 + + ОК + 40 + VeryHigh + 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> + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + + ИсторияВыбрать + 50 + VeryHigh + true + + true + + + ИсторияВыбратьРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Form.Command.Выбрать + Normal + Auto + true + true + UserCmds + Auto + + + ИсторияДобавить + 22 + Usual + true + true + + true + + + ИсторияДобавитьРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Item.История.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ИсторияИзменить + 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 @@ -676,11 +631,11 @@ <key>ru</key> - <value>Командная панель</value> + <value>История группа действия</value> - ГруппаКоманднаяПанельРасширеннаяПодсказка - 37 + ИсторияГруппаДействияРасширеннаяПодсказка + 33 Label true true @@ -688,43 +643,59 @@ Left - CommandBar - - Right - + + + + ИсторияГруппаСправка + 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> + + + ИсторияГруппаСправкаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + - true - true - - true - - - <key>ru</key> - <value>Общая группа</value> - - - ОбщаяГруппаРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ФормаКоманднаяПанель - -1 Left diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl index 53b3711d4..65a1bc7fb 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -60,6 +67,11 @@ КонецЕсли; КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Переместить(Элементы.ОК, Элементы.ФормаКоманднаяПанель); + Элементы.Отмена.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -134,10 +146,12 @@ &НаКлиенте Процедура ИсторияПриАктивизацииСтроки(Элемент) - Элементы.ИсторияИзменить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр; - Элементы.ИсторияУдалить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр; - Элементы.ИсторияКонтекстноеМенюИзменить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр;; - Элементы.ИсторияКонтекстноеМенюУдалить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр;; + Если Элемент.ТекущиеДанные <> Неопределено Тогда + Элементы.ИсторияИзменить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр; + Элементы.ИсторияУдалить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр; + Элементы.ИсторияКонтекстноеМенюИзменить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр; + Элементы.ИсторияКонтекстноеМенюУдалить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр; + КонецЕсли; КонецПроцедуры @@ -197,7 +211,7 @@ Если ВариантыДат[История[Индекс].ДействуетС] = Неопределено Тогда ВариантыДат.Вставить(История[Индекс].ДействуетС, Истина); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Не допускается ввод адресов с одинаковыми датами.'"),, "История[" + Строка(Индекс) + "].ДействуетС"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Не допускается ввод адресов с одинаковыми датами.'"),, "История[" + Строка(Индекс) + "].ДействуетС"); Возврат; КонецЕсли; Дельта = История[Индекс].ДействуетС - ТекущаяДатаПроверки; @@ -263,10 +277,11 @@ &НаКлиенте Процедура ПослеОтветаНаВопросПроУдаление(Результат, ДополнительныеПараметры) Экспорт - Удаление = Ложь; + Если Результат = КодВозвратаДиалога.Да Тогда История.Удалить(История.НайтиПоИдентификатору(ДополнительныеПараметры.ИдентификаторСтроки)); КонецЕсли; + КонецПроцедуры &НаСервере @@ -295,7 +310,7 @@ Отбор = Новый Структура("ДействуетС", НоваяДата); НайденныеСтроки = История.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() > 1 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Не допускается ввод адресов с одинаковыми датами.'"),, "История[" + Строка(Индекс) + "].ДействуетС"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Не допускается ввод адресов с одинаковыми датами.'"),, "История[" + Строка(Индекс) + "].ДействуетС"); Если ЗначениеЗаполнено(СтараяДата) Тогда Возврат СтараяДата; Иначе diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl index c34d0a57c..9f5b72968 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl @@ -1,6 +1,14 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область ОбработчикиПодписокНаСобытия +#Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -22,8 +30,6 @@ #КонецОбласти -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - #Область СлужебныеПроцедурыИФункции // Возвращает имя формы для редактирования типа контактной информации. @@ -51,6 +57,9 @@ ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Телефон") Тогда Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; + ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "ВебСтраница") Тогда + Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВебСайт"; + ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Факс") Тогда Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo index a5657f950..045de0ce4 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo @@ -57,4 +57,13 @@ PersonalComputer MobileDevice + + ВебСайт + + ru + Веб сайт + + PersonalComputer + MobileDevice + diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Commands/ЗагрузкаДанныхEnterpriseData/CommandModule.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Commands/ЗагрузкаДанныхEnterpriseData/CommandModule.bsl index c5476a765..8bf70bdff 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Commands/ЗагрузкаДанныхEnterpriseData/CommandModule.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Commands/ЗагрузкаДанныхEnterpriseData/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Module.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Module.bsl index 1a98d9be9..82ccfc76a 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Form.form b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Form.form index fdcca12ed..932db322e 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Form.form @@ -49,11 +49,19 @@ Tumbler + + ru + Загрузка + Загрузка + + ru + Выгрузка + Выгрузка diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl index 1b7859936..d61bda15a 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -120,8 +128,8 @@ ТекВыборПериода = Неопределено; ТекПериодДанных = Неопределено; ТекОтбор = Неопределено; - НомерТекСтроки = 0; - Если СтрокиДопРегистрации.Количество()>0 Тогда + + Если СтрокиДопРегистрации.Количество() > 0 Тогда ТекВыборПериода = СтрокиДопРегистрации[0].ВыборПериода; ТекПериодДанных = СтрокиДопРегистрации[0].Период; ТекОтбор = СтрокиДопРегистрации[0].Отбор; @@ -144,7 +152,6 @@ Процедура ТаблицаПравилВыгрузкиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ТипВыбранного = ТипЗнч(ВыбранноеЗначение); ПолноеИмяМД = Элементы.ТаблицаПравилВыгрузки.ТекущиеДанные.ПолноеИмяМетаданных; ИдентификаторТекущейСтроки = Элементы.ТаблицаПравилВыгрузки.ТекущиеДанные.ПолучитьИдентификатор(); РедактированиеОтбораСтрокиДополнительныйСоставСервер(ВыбранноеЗначение, ПолноеИмяМД, ИдентификаторТекущейСтроки); @@ -270,7 +277,7 @@ УстановитьВидимостьДоступностьКнопок(Ложь); Если ИсточникЗагрузки = 1 Тогда Если НЕ ЗначениеЗаполнено(ДанныеДляЗагрузкиXDTO) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Текстовое поле с данными для загрузки не заполнено.'")); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Текстовое поле с данными для загрузки не заполнено.'")); Возврат; КонецЕсли; ЗапуститьЗагрузкуДанных(); @@ -396,7 +403,7 @@ Процедура ПодключитьРасширениеРаботыСФайламиЗавершение(Подключено, ДополнительныеПараметры) Экспорт Если Не Подключено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Для продолжения необходимо установить расширение работы с файлами.'")); Возврат; КонецЕсли; @@ -839,7 +846,6 @@ &НаКлиенте Процедура ЗагрузитьИзФайлаНаКлиенте() - АдресФайла = ""; ДопПараметры = Новый Структура("ВидФайла", "ФайлДанныхДляЗагрузки"); ОписаниеОповещения = Новый ОписаниеОповещения("ПоместитьФайлВХранилищеЗавершить", ЭтотОбъект, ДопПараметры); ПомещаемыеФайлы = Новый Массив; @@ -849,7 +855,7 @@ Интерактивно = Ложь; ПомещаемыеФайлы.Добавить(ОписаниеФайла); КонецЕсли; - НачатьПомещениеФайлов(ОписаниеОповещения, ПомещаемыеФайлы,,Интерактивно, УникальныйИдентификатор); + НачатьПомещениеФайлов(ОписаниеОповещения, ПомещаемыеФайлы, , Интерактивно, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl index e78d6ee35..d9c8dab90 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -22,7 +30,7 @@ Иначе КомпонентыОбмена.ЭтоОбменЧерезПланОбмена = Ложь; КонецЕсли; - КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = НСтр("ru = 'Перенос данных через буфер обмена'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = НСтр("ru = 'Перенос данных через буфер обмена'", ОбщегоНазначения.КодОсновногоЯзыка()); КомпонентыОбмена.ВерсияФорматаОбмена = ТекВерсияФормата; КомпонентыОбмена.XMLСхема = "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/" + ТекВерсияФормата; @@ -90,10 +98,10 @@ ТекстСообщения = НСтр("ru = 'В ходе выполнения операции возникли ошибки'") + ": " + Символы.ПС + РезультатВыгрузки.ТекстОшибки + Символы.ПС + НСтр("ru = 'Данные могут быть выгружены не полностью.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); ИначеЕсли Не РезультатВыгрузки.ЕстьВыгруженныеОбъекты Тогда ТекстСообщения = НСтр("ru = 'Не найдено ни одного объекта к выгрузке.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); КонецЕсли; Если МестоВыгрузки = 0 Тогда @@ -685,9 +693,6 @@ КонецЦикла; КонецЦикла; - // Общие параметры - Параметры = СхемаКомпоновки.Параметры; - КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных( @@ -1063,4 +1068,6 @@ КонецЦикла; КонецПроцедуры #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl index ab9ba9c2b..4120b775a 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -551,7 +558,6 @@ ДлительнаяОперация = Ложь; ДлительнаяОперацияЗавершена = Ложь; ДлительнаяОперацияЗавершенаСОшибкой = Ложь; - ЕстьОшибкаРасхожденияВерсий = Ложь; КонецПроцедуры @@ -625,7 +631,7 @@ |Повторите попытку синхронизации.'"); СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, СообщениеОбОшибкеПользователю); Если ЕстьСтраницаЗапросаПароля Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке); КонецЕсли; СинхронизацияДанныхОтключена = Истина; ИначеЕсли Не НастройкаЗавершена Тогда @@ -697,6 +703,13 @@ ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); КонецПроцедуры +&НаСервереБезКонтекста +Функция ТребуетсяУстановкаОбновления() + + Возврат ОбменДаннымиСервер.ТребуетсяУстановкаОбновления(); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // РАЗДЕЛ ОБРАБОТЧИКОВ СОБЫТИЙ ПЕРЕХОДОВ @@ -712,6 +725,8 @@ ИнициализироватьПеременныеОбработки(); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -728,6 +743,8 @@ Отказ); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -737,6 +754,8 @@ ЗафиксироватьЗавершениеОбменаСОшибкой(); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -748,6 +767,8 @@ ИнициализироватьПеременныеОбработки(); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -760,6 +781,8 @@ ПриНачалеВыгрузкиДанных(Отказ); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -775,6 +798,8 @@ КонецЕсли; КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -785,7 +810,7 @@ ПриНачалеВыгрузкиДанныхНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияВыгрузкиДанных); ПодключитьОбработчикОжидания("ПриОжиданииВыгрузкиДанных", @@ -808,7 +833,7 @@ ПриОжиданииВыгрузкиДанныхНаСервере(ПараметрыОбработчикаВыгрузкиДанных, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияВыгрузкиДанных); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияВыгрузкиДанных); ПодключитьОбработчикОжидания("ПриОжиданииВыгрузкиДанных", ПараметрыОбработчикаОжиданияВыгрузкиДанных.ТекущийИнтервал, Истина); @@ -915,7 +940,7 @@ ИначеЕсли ЕстьОшибки Тогда - Если ТребуетсяОбновление Или ОбменДаннымиВызовСервера.ТребуетсяУстановкаОбновления() Тогда + Если ТребуетсяОбновление Или ТребуетсяУстановкаОбновления() Тогда Если РольДоступнаПолныеПрава Тогда Элементы.ПанельДействий.ТекущаяСтраница = Элементы.ДействияУстановитьЗакрыть; @@ -938,7 +963,7 @@ Элементы.СтатусЗавершенияОбмена.ТекущаяСтраница = СтраницаОбменЗавершенСОшибкой; Если ВыводитьОписаниеОшибкиПользователю Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибкеПользователю); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибкеПользователю); КонецЕсли; КонецЕсли; @@ -952,6 +977,8 @@ // Обновляем все открытые динамические списки. ОбменДаннымиКлиент.ОбновитьВсеОткрытыеДинамическиеСписки(); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -968,6 +995,8 @@ Закрыть(); КонецЕсли; + Возврат Неопределено; + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -980,6 +1009,8 @@ Элементы.ВыполнитьОбмен.КнопкаПоУмолчанию = Истина; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -987,12 +1018,14 @@ Если ПустаяСтрока(WSПароль) Тогда НСтрока = НСтр("ru = 'Не указан пароль.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "WSПароль",, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока,, "WSПароль",, Отказ); Возврат Неопределено; КонецЕсли; СохранитьФлагВопросаОДолгойСинхронизации(); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -1005,6 +1038,8 @@ КонецЕсли; ПерейтиДалее = Не Отказ; + Возврат Неопределено; + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -1077,6 +1112,16 @@ Если Прогресс.Прогресс <> Неопределено Тогда СтруктураПрогресса = Прогресс.Прогресс; + + ДополнительныеПараметрыПрогресса = Неопределено; + Если Не СтруктураПрогресса.Свойство("ДополнительныеПараметры", ДополнительныеПараметрыПрогресса) Тогда + Возврат; + КонецЕсли; + + Если Не ДополнительныеПараметрыПрогресса.Свойство("ОбменДанными") Тогда + Возврат; + КонецЕсли; + ПроцентВыполнения = СтруктураПрогресса.Процент; ДопИнформацияВыполнение = СтруктураПрогресса.Текст; КонецЕсли; diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl index feca83cb0..16d1b6c3d 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -56,7 +64,7 @@ // Процедура ВыполнитьЗагрузкуПолученногоИзИнтернетаФайла(ПараметрыЗадания, АдресХранилища) Экспорт - ОбменДаннымиВызовСервера.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( ПараметрыЗадания.Отказ, ПараметрыЗадания.УзелИнформационнойБазы, ПараметрыЗадания.ИдентификаторФайлаСообщенияВСервисе, diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl index 25c3bc9af..f2836ea3a 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Commands/ГрупповоеИзменениеРеквизитов/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form index b17fc136e..150750a36 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Form.form @@ -45,10 +45,6 @@ ДоступныеОбъектыДляИзменения.Check - - OnChange - ДоступныеОбъектыДляИзмененияПометкаПриИзменении - ДоступныеОбъектыДляИзмененияПометкаРасширеннаяПодсказка 30 @@ -148,6 +144,10 @@ Selection ДоступныеОбъектыДляИзмененияВыбор + + OnChange + ДоступныеОбъектыДляИзмененияПриИзменении + ДоступныеОбъектыДляИзмененияСтрокаПоиска 17 diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl index ddf06b752..729d7ed29 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -24,6 +32,15 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыДоступныеОбъектыДляИзменения + +&НаКлиенте +Процедура ДоступныеОбъектыДляИзмененияПриИзменении(Элемент) + ОбновитьКоличествоВыбранных(); +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -31,7 +48,6 @@ ВыбратьОбъектыИЗакрытьФорму(); КонецПроцедуры - &НаКлиенте Процедура ДоступныеОбъектыДляИзмененияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) ВыбратьОбъектыИЗакрытьФорму(); @@ -77,11 +93,6 @@ Возврат Результат; КонецФункции -&НаКлиенте -Процедура ДоступныеОбъектыДляИзмененияПометкаПриИзменении(Элемент) - ОбновитьКоличествоВыбранных(); -КонецПроцедуры - &НаКлиенте Процедура ВыбратьОбъектыИЗакрытьФорму() ВыбранныеЭлементы = ВыбранныеЭлементы(); @@ -91,7 +102,6 @@ Закрыть(ВыбранныеЭлементы); КонецПроцедуры - &НаКлиенте Процедура ОбновитьКоличествоВыбранных() ТекстКнопкиВыбора = НСтр("ru = 'Выбрать'"); diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl index 44654787e..84c22e328 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl index 664e27799..a1d4f922e 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form index 8000547ca..1787f1910 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form @@ -368,7 +368,6 @@ ru Операнды - true true true @@ -410,6 +409,7 @@ ОперандыИдентификатор 21 + true true true @@ -454,7 +454,6 @@ ru Значение - true true true @@ -600,7 +599,6 @@ true Tree - true true true true @@ -1143,10 +1141,6 @@ Формула None - - OnChange - ФормулаПриИзменении - ФормулаExtendedTooltip 46 @@ -1205,148 +1199,6 @@ Auto - - ГруппаПредставление - 62 - - Представление - 47 - true - true - - true - - - Представление - - - ПредставлениеРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - - ПредставлениеКонтекстноеМеню - 48 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ДекорацияАвтоСумма - 64 - true - false - - true - - - ДекорацияАвтоСуммаExtendedTooltip - 66 - Label - true - true - - Left - - - - ДекорацияАвтоСуммаКонтекстноеМеню - 65 - true - - true - true - - - - Вычисление - 59 - true - true - - true - - - Вычисление - - None - - ВычислениеРасширеннаяПодсказка - 61 - Label - true - true - - Left - - - - ВычислениеКонтекстноеМеню - 60 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - - true - - - <key>ru</key> - <value>Представление</value> - - - ГруппаПредставлениеРасширеннаяПодсказка - 63 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - ФормаКоманднаяПанель -1 diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl index 6d7ca79f5..ac574ffe2 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -32,14 +39,6 @@ Элементы.ГруппаОперанды.Подсказка = Параметры.ОперандыЗаголовок; КонецЕсли; - УстановитьСвойствоЭлементаФормы( - Элементы, - "Операнды", - "ИзменятьСоставСтрок", - Ложь); - - УстановитьВидимость(); - КонецПроцедуры &НаКлиенте @@ -367,136 +366,6 @@ КонецФункции -&НаКлиенте -Процедура ФормулаПриИзменении(Элемент) - - Если Расширенный Тогда - Представление = ""; - КонецЕсли; - - Если ВключитьЗначение Тогда - УстановитьПредставлениеВычисленияПоФормуле(Формула, Операнды, Вычисление); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура УстановитьВидимость() - - УстановитьСвойствоЭлементаФормы( - Элементы, - "ОперандыИдентификатор", - "Видимость", - Не Расширенный); - - УстановитьСвойствоЭлементаФормы( - Элементы, - "ОперандыПредставление", - "Видимость", - Расширенный); - - УстановитьСвойствоЭлементаФормы( - Элементы, - "ОперандыЗначение", - "Видимость", - ВключитьЗначение); - - УстановитьСвойствоЭлементаФормы( - Элементы, - "Вычисление", - "Видимость", - ВключитьЗначение); - - УстановитьСвойствоЭлементаФормы( - Элементы, - "ДекорацияАвтоСумма", - "Видимость", - ВключитьЗначение); - - УстановитьСвойствоЭлементаФормы( - Элементы, - "Операнды", - "Шапка", - ВключитьЗначение); - - УстановитьСвойствоЭлементаФормы( - Элементы, - "Операторы", - "Шапка", - ВключитьЗначение); - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Процедура УстановитьПредставлениеВычисленияПоФормуле(Знач РасчетнаяФормула, Операнды, Представление) - - Если Не ЗначениеЗаполнено(РасчетнаяФормула) Тогда - Представление = ""; - Возврат; - КонецЕсли; - - РасчетнаяФормула = УдалениеНезначимыхСимволов(РасчетнаяФормула); - ВыводитьПромежуточныеВычисления = Ложь; - - МассивОперандов = ОперандыТекстовойФормулы(РасчетнаяФормула); - - Для каждого Операнд Из МассивОперандов Цикл - НайденныйСтроки = Операнды.НайтиСтроки(Новый Структура("Идентификатор", Операнд)); - Если НайденныйСтроки.Количество() = 1 Тогда - Если НЕ ВыводитьПромежуточныеВычисления Тогда - ВыводитьПромежуточныеВычисления = НЕ ПустаяСтрока(УдалениеНезначимыхСимволов(СтрЗаменить(РасчетнаяФормула, "["+Операнд+"]", ""))); - КонецЕсли; - РасчетнаяФормула = СтрЗаменить(РасчетнаяФормула, "["+Операнд+"]", Формат(НайденныйСтроки[0].Значение, "ЧРД=.; ЧН=0; ЧГ=0")); - КонецЕсли; - КонецЦикла; - - Попытка - РезультатВычисления = Формат(Вычислить(РасчетнаяФормула),"ЧЦ=15; ЧДЦ=3; ЧН=0"); - Исключение - Возврат; - КонецПопытки; - - Представление = ?(ВыводитьПромежуточныеВычисления, РасчетнаяФормула, "") + ?(ЗначениеЗаполнено(РасчетнаяФормула), " = ", "") + РезультатВычисления; - - Представление = УдалениеНезначимыхСимволов(Представление); - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция УдалениеНезначимыхСимволов(Знач ВходящаяСтрока) - - ВходящаяСтрока = СокрЛП(ВходящаяСтрока); - ДлинаСтроки = СтрДлина(ВходящаяСтрока); - КонечнаяСтрока = Строка(""); - - Пока ДлинаСтроки > 0 Цикл - - ПервыйСимвол = Лев(ВходящаяСтрока, 1); - - Если Не ПустаяСтрока(ПервыйСимвол) Тогда - КонечнаяСтрока = КонечнаяСтрока + ПервыйСимвол; - ДлинаСтроки = ДлинаСтроки - 1; - Отступ = 2; - Иначе - КонечнаяСтрока = КонечнаяСтрока + " "; - ВходящаяСтрока = СокрЛ(ВходящаяСтрока); - ДлинаСтроки = СтрДлина(ВходящаяСтрока); - Отступ = 1; - КонецЕсли; - - Если ДлинаСтроки > 1 Тогда - ВходящаяСтрока = Сред(ВходящаяСтрока, Отступ, ДлинаСтроки); - Иначе - КонечнаяСтрока = КонечнаяСтрока + Сред(ВходящаяСтрока, Отступ, 1); - ДлинаСтроки = 0; - КонецЕсли; - - КонецЦикла; - - Возврат КонечнаяСтрока; - -КонецФункции - &НаСервере Функция ПолучитьПустоеДеревоОператоров() @@ -639,40 +508,6 @@ КонецФункции -&НаКлиентеНаСервереБезКонтекста -Функция ОперандыТекстовойФормулы(Формула) - - МассивОперандов = Новый Массив(); - - ТекстФормулы = СокрЛП(Формула); - Если СтрЧислоВхождений(ТекстФормулы, "[") <> СтрЧислоВхождений(ТекстФормулы, "]") Тогда - ЕстьОперанды = Ложь; - Иначе - ЕстьОперанды = Истина; - КонецЕсли; - - Пока ЕстьОперанды = Истина Цикл - НачалоОперанда = СтрНайти(ТекстФормулы, "["); - КонецОперанда = СтрНайти(ТекстФормулы, "]"); - - Если НачалоОперанда = 0 - Или КонецОперанда = 0 - Или НачалоОперанда > КонецОперанда Тогда - ЕстьОперанды = Ложь; - Прервать; - - КонецЕсли; - - ИмяОперанда = Сред(ТекстФормулы, НачалоОперанда + 1, КонецОперанда - НачалоОперанда - 1); - МассивОперандов.Добавить(ИмяОперанда); - ТекстФормулы = СтрЗаменить(ТекстФормулы, "[" + ИмяОперанда + "]", ""); - - КонецЦикла; - - Возврат МассивОперандов - -КонецФункции - &НаКлиенте Процедура ПроверитьФормулуИнтерактивно(Формула, Операнды) @@ -703,16 +538,6 @@ Возврат ОбработкаОбъект.ВерсияБСПСоответствуетТребованиям(); КонецФункции -&НаСервере -Процедура УстановитьСвойствоЭлементаФормы(ЭлементыФормы, ИмяЭлемента, ИмяСвойства, Значение) - - ЭлементФормы = ЭлементыФормы.Найти(ИмяЭлемента); - Если ЭлементФормы <> Неопределено И ЭлементФормы[ИмяСвойства] <> Значение Тогда - ЭлементФормы[ИмяСвойства] = Значение; - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю, Знач Поле = "", Знач ПутьКДанным = "") Сообщение = Новый СообщениеПользователю; diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form index fc20b4d8b..2a6d1092c 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form @@ -45,6 +45,10 @@ Left true + + AutoComplete + ПредставлениеИзменяемыхОбъектовАвтоПодбор + StartChoice ВидИзменяемыхОбъектовНачалоВыбора @@ -1245,8 +1249,8 @@ ru Автоматически - - 0 + + Записывать @@ -1254,8 +1258,8 @@ ru В коде алгоритма - - 1 + + НеЗаписывать Vertical diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl index 0ed50f3e5..331fa075d 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -808,6 +816,7 @@ ТОЧислоОбъектовВПорции = 1; ОбрабатыватьРекурсивно = Ложь; Объект.ПоказыватьСлужебныеРеквизиты = Ложь; + Объект.ВариантЗаписиОбъекта = "Записывать"; СтруктураНастроек = ХранилищеОбщихНастроекЗагрузить( "Обработка.ГрупповоеИзменениеОбъектов", @@ -1404,7 +1413,7 @@ ПараметрыЗадания.Вставить("ТипОперации", ОбработкаОбъект.ТипОперации); ПараметрыЗадания.Вставить("КодАлгоритма", КодАлгоритма); ПараметрыЗадания.Вставить("РежимВыполнения", ОбработкаОбъект.РежимВыполнения); - ПараметрыЗадания.Вставить("ВариантЗаписиОбъекта", ?(ОбработкаОбъект.ВариантЗаписиОбъекта = 1, "НеЗаписывать", "Записывать")); + ПараметрыЗадания.Вставить("ВариантЗаписиОбъекта", ОбработкаОбъект.ВариантЗаписиОбъекта); ПараметрыЗадания.Вставить("ИспользуютсяДопРеквизиты", ОбработкаОбъект.ИспользуютсяДопРеквизиты); ПараметрыЗадания.Вставить("ИспользуютсяДопСведения", ОбработкаОбъект.ИспользуютсяДопСведения); ПараметрыЗадания.Вставить("ИзменяемыеРеквизиты", ИзменяемыеРеквизиты()); @@ -4415,4 +4424,59 @@ // Вставить содержимое обработчика. КонецПроцедуры +&НаКлиенте +Процедура ПредставлениеИзменяемыхОбъектовАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + ПолеВводаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) +КонецПроцедуры + +&НаКлиенте +Процедура ПолеВводаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + ДанныеВыбора = ДанныеВыбора(Текст, Элемент.СписокВыбора); + СтандартнаяОбработка = Не ЗначениеЗаполнено(Текст); +КонецПроцедуры + +&НаКлиенте +Функция ДанныеВыбора(Строка, СписокВыбора) + + Результат = Новый СписокЗначений; + + Если Не ЗначениеЗаполнено(Строка) Тогда + Возврат Результат; + КонецЕсли; + + Для Каждого Элемент Из СписокВыбора Цикл + ПредставлениеЭлемента = Элемент.Представление; + + СтрокаПоиска = ПредставлениеЭлемента; + + ФорматированныеСтроки = Новый Массив; + Для Каждого Подстрока Из СтрРазделить(Строка, " ", Ложь) Цикл + Позиция = СтрНайти(НРег(СтрокаПоиска), НРег(Подстрока)); + Если Позиция = 0 Тогда + ФорматированныеСтроки = Неопределено; + Прервать; + КонецЕсли; + + ПодстрокаДоВхождения = Лев(СтрокаПоиска, Позиция - 1); + ПодстрокаВхождения = Сред(СтрокаПоиска, Позиция, СтрДлина(Подстрока)); + СтрокаПоиска = Сред(СтрокаПоиска, Позиция + СтрДлина(Подстрока)); + + ФорматированныеСтроки.Добавить(ПодстрокаДоВхождения); + ФорматированныеСтроки.Добавить(Новый ФорматированнаяСтрока(ПодстрокаВхождения, Новый Шрифт( , , Истина), Новый Цвет(0,128,0))); + КонецЦикла; + + Если Не ЗначениеЗаполнено(ФорматированныеСтроки) Тогда + Продолжить; + КонецЕсли; + + ФорматированныеСтроки.Добавить(СтрокаПоиска); + СтрокаСПодсветкой = Новый ФорматированнаяСтрока(ФорматированныеСтроки); + + Результат.Добавить(Элемент.Значение, СтрокаСПодсветкой); + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl index afc2395b2..2c51d7c65 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -293,8 +301,11 @@ КонецЦикла; КонецЕсли; - ЗаписыватьОбъект = (Параметры.ВариантЗаписиОбъекта <> "НеЗаписывать"); + НастроеныИзменения = ЗначениеЗаполнено(Параметры.ИзменяемыеРеквизиты) Или ЗначениеЗаполнено(Параметры.ИзменяемыеТабличныеЧасти); + ЗаписыватьОбъект = Параметры.ВариантЗаписиОбъекта <> "НеЗаписывать" + И (ИзменяемыйОбъект.Модифицированность() Или Не НастроеныИзменения); + // Запись объекта. Если ЗаписыватьОбъект Тогда Если РежимЗаписи <> Неопределено Тогда @@ -449,7 +460,7 @@ КодАлгоритма = СтрЗаменить(КодАлгоритма, "Объект.", "Параметры."); ВыполнитьВБезопасномРежиме(КодАлгоритма, Объект); Иначе - Выполнить КодАлгоритма; + Выполнить КодАлгоритма; // АПК:487 Для "ремонтных" сценариев допускается выполнение кода Администратором. КонецЕсли; КонецПроцедуры @@ -799,12 +810,25 @@ КонецФункции -Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) +// Возвращает менеджер объекта по полному имени объекта метаданных. +// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. +// +// Параметры: +// ПолноеИмя - Строка - полное имя объекта метаданных. Пример: "Справочник.Организации". +// +// Возвращаемое значение: +// СправочникМенеджер, ДокументМенеджер, ОбработкаМенеджер, РегистрСведенийМенеджер - менеджер объекта. +// +// Пример: +// МенеджерСправочника = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.Организации"); +// ПустаяСсылка = МенеджерСправочника.ПустаяСсылка(); +// +Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) Экспорт Перем КлассОМ, ИмяОМ, Менеджер; ЧастиИмени = СтрРазделить(ПолноеИмя, "."); - Если ЧастиИмени.Количество() = 2 Тогда + Если ЧастиИмени.Количество() >= 2 Тогда КлассОМ = ЧастиИмени[0]; ИмяОМ = ЧастиИмени[1]; КонецЕсли; @@ -857,9 +881,12 @@ ИмяПодчиненногоОМ = ЧастиИмени[3]; Если ВРег(КлассПодчиненногоОМ) = "ПЕРЕРАСЧЕТ" Тогда // Перерасчет - Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; - Иначе - ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); + Попытка + Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; + ИмяОм = ИмяПодчиненногоОМ; + Исключение + Менеджер = Неопределено; + КонецПопытки; КонецЕсли; КонецЕсли; @@ -1316,6 +1343,8 @@ Возврат СтрокаПодстановки; КонецФункции +// АПК:487-выкл Копия кода ОбщегоНазначения.ВыполнитьВБезопасномРежиме(). т.к. обработка "отторгаемая". + // Выполняет произвольный алгоритм на встроенном языке 1С:Предприятия, предварительно устанавливая // безопасный режим выполнения кода и безопасный режим разделения данных для всех разделителей, // присутствующих в составе конфигурации. В результате при выполнении алгоритма: @@ -1350,6 +1379,8 @@ КонецПроцедуры +// АПК:487-вкл + // Возвращает массив существующих в конфигурации разделителей. // // Возвращаемое значение: ФиксированныйМассив(Строка) - массив имен общих реквизитов, которые @@ -1371,4 +1402,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo index 86d50a978..115d637e5 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo @@ -157,10 +157,10 @@ Вариант записи объекта - Number - - 10 - + String + + 12 + ru diff --git a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Module.bsl b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Module.bsl index becd5cf6b..01355e251 100644 --- a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Module.bsl +++ b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl index 9991b3e9e..3d061da74 100644 --- a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Commands/ЖурналРегистрации/CommandModule.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Commands/ЖурналРегистрации/CommandModule.bsl index ced150371..88f0961e4 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Commands/ЖурналРегистрации/CommandModule.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Commands/ЖурналРегистрации/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index 04636fb05..e73de89ac 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -1935,7 +1935,6 @@ AutoUse true true - false Auto End Enable diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index a24965cbb..f3426142b 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -104,7 +111,7 @@ // Взводится в значение Истина, если нужно, чтобы формирование журнала регистрации проходило не в фоне. ЗапускатьНеВФоне = Параметры.ЗапускатьНеВФоне; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Критичность", "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Нет); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Критичность", "КнопкаВыбора", Истина); @@ -335,8 +342,11 @@ &НаКлиенте Процедура ВыгрузитьЖурналДляПередачиВТехподдержку(Команда) - ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьЖурналПродолжение", ЭтотОбъект); - НачатьПодключениеРасширенияРаботыСФайлами(ОписаниеОповещения); + + ПараметрыСохраненияФайла = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохраненияФайла.Диалог.Фильтр = НСтр("ru = 'Данные журнала регистрации'") + "(*.xml)|*.xml"; + ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, ВыгрузкаЖурналаРегистрации(), "EventLog.xml", ПараметрыСохраненияФайла); + КонецПроцедуры #КонецОбласти @@ -376,7 +386,7 @@ Функция ПрочитатьЖурнал() Если РезультатВыполнения <> Неопределено - И РезультатВыполнения.ИдентификаторЗадания <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда + И ЗначениеЗаполнено(РезультатВыполнения.ИдентификаторЗадания) Тогда ДлительныеОперации.ОтменитьВыполнениеЗадания(РезультатВыполнения.ИдентификаторЗадания); КонецЕсли; @@ -451,44 +461,9 @@ СтандартнаяОбработка = Ложь; КонецПроцедуры -&НаКлиенте -Процедура ВыгрузитьЖурналПродолжение(Подключено, ДополнительныеПараметры) Экспорт - - Если Подключено Тогда - Режим = РежимДиалогаВыбораФайла.Сохранение; - ДиалогСохранения = Новый ДиалогВыбораФайла(Режим); - ДиалогСохранения.МножественныйВыбор = Ложь; - ДиалогСохранения.Фильтр = НСтр("ru = 'Данные журнала регистрации'") + "(*.xml)|*.xml"; - ДиалогСохранения.ПолноеИмяФайла = "EventLog"; - ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьЖурналЗавершение", ЭтотОбъект); - ДиалогСохранения.Показать(ОписаниеОповещения); - Иначе - ПолучитьФайл(ВыгрузкаЖурналаРегистрации(), "EventLog.xml", Истина); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыгрузитьЖурналЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - ДанныеЖурнала = ВыгрузкаЖурналаРегистрации(); - - ПолноеИмяФайла = Результат[0]; - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, ДанныеЖурнала)); - - Обработчик = Новый ОписаниеОповещения(); - НачатьПолучениеФайлов(Обработчик, ПолучаемыеФайлы, ПолноеИмяФайла, Ложь); - -КонецПроцедуры - &НаСервере Функция ВыгрузкаЖурналаРегистрации() - Возврат ЖурналРегистрации.ЖурналДляТехподдержки(ОтборЖурналаРегистрации, КоличествоПоказываемыхСобытий); + Возврат ЖурналРегистрации.ЖурналДляТехподдержки(ОтборЖурналаРегистрации, КоличествоПоказываемыхСобытий, УникальныйИдентификатор); КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl index 871e54ad7..7475f32d7 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl index c771e09aa..dc9562497 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РазделениеДанныхСеанса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl index d3cf5cdf6..6f54964d4 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl index c107cdbbc..bae568d01 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl index 846fa9b86..a6e10f4db 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Commands/ЗагрузкаДанныхИзФайла/CommandModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Commands/ЗагрузкаДанныхИзФайла/CommandModule.bsl index 0b43c8cff..14310c221 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Commands/ЗагрузкаДанныхИзФайла/CommandModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Commands/ЗагрузкаДанныхИзФайла/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Module.bsl index 9f68e0bf5..197b82502 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ВыборКолонок/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -13,16 +21,7 @@ #КонецОбласти -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура Выбор(Команда) - Закрыть(СписокКолонок); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыВыбор +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СписокКолонокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -48,4 +47,13 @@ КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбор(Команда) + Закрыть(СписокКолонок); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form index 0eb3ef6ff..d188429eb 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form @@ -3991,7 +3991,7 @@ ИзменитьРеквизиты <key>ru</key> - <value>Изменить реквизиты</value> + <value>Изменить реквизиты...</value> 9 diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl index a2fa37485..1fd3a0955 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -218,6 +226,26 @@ КонецПроцедуры +&НаКлиенте +Процедура ВидЗагрузкиДанныхВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ПереходКСледующемуШагуЗагрузкиДанных(); +КонецПроцедуры + +&НаКлиенте +Процедура ВидЗагрузкиДанныхПередНачаломИзменения(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаОтчетПриАктивизацииОбласти(Элемент) + Если ТаблицаОтчет.ТекущаяОбласть.Низ = 1 И ТаблицаОтчет.ТекущаяОбласть.Верх = 1 Тогда + Элементы.ИзменитьРеквизиты.Доступность = Ложь; + Иначе + Элементы.ИзменитьРеквизиты.Доступность = Истина; + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыШаблонСДанными @@ -229,6 +257,62 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаСопоставленияДанных + +&НаКлиенте +Процедура ТаблицаСопоставленияДанныхПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) + + Если ТипЗагрузки <> "ТабличнаяЧасть" Тогда + Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.ОбъектСопоставления) Тогда + Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "СтрокаСопоставлена"; + Иначе + Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "НеСопоставлен"; + КонецЕсли; + Иначе + Отбор = Новый Структура("ОбязательнаДляЗаполнения", Истина); + КолонкиОбязательнаДляЗаполнения = ИнформацияПоКолонкам.НайтиСтроки(Отбор); + РезультатСопоставленияСтроки = "СтрокаСопоставлена"; + Для каждого КолонкаТаблицы Из КолонкиОбязательнаДляЗаполнения Цикл + Если НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные["ТЧ_" + КолонкаТаблицы.Родитель]) Тогда + РезультатСопоставленияСтроки = ?(ЗначениеЗаполнено(Элемент.ТекущиеДанные.ОписаниеОшибки), "Неоднозначность", "НеСопоставлен"); + Прервать; + КонецЕсли; + КонецЦикла; + Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = РезультатСопоставленияСтроки; + КонецЕсли; + + ПодключитьОбработчикОжидания("ПоказатьСтатистикуПоСопоставлениюЗагрузкаИзФайла", 0.2, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаСопоставленияДанныхПриАктивизацииЯчейки(Элемент) + Элементы.УстранитьНеоднозначность.Доступность = Ложь; + Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Ложь; + + Если Элемент.ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(Элемент.ТекущиеДанные.РезультатСопоставленияСтроки) Тогда + Если ТипЗагрузки = "ТабличнаяЧасть" Тогда + Если СтрДлина(Элемент.ТекущийЭлемент.Имя) > 3 И СтрНачинаетсяС(Элемент.ТекущийЭлемент.Имя, "ТЧ_") Тогда + ИмяКолонки = Сред(Элемент.ТекущийЭлемент.Имя, 4); + Если СтрНайти(Элемент.ТекущиеДанные.ОписаниеОшибки, ИмяКолонки) > 0 Тогда + Элементы.УстранитьНеоднозначность.Доступность = Истина; + Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Истина; + КонецЕсли; + КонецЕсли; + ИначеЕсли Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "Неоднозначность" Тогда + Элементы.УстранитьНеоднозначность.Доступность = Истина; + Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Истина; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаСопоставленияДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ОткрытьФормуРазрешенияНеоднозначности(ВыбраннаяСтрока, Поле.Имя, СтандартнаяОбработка); +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -297,6 +381,7 @@ ИначеЕсли Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СопоставлениеЗагружаемыхДанных ИЛИ Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.НеНайдено + ИЛИ Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.РезультатыСопоставления ИЛИ Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ДлительныеОперации Тогда Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ЗаполнениеТаблицыДанными; @@ -340,6 +425,25 @@ КонецПроцедуры +&НаКлиенте +Процедура ГрупповоеИзменениеРеквизитов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда + Если ТаблицаОтчет.ТекущаяОбласть.Верх = 1 Тогда + ВерхняяПозиция = 2; + Иначе + ВерхняяПозиция = ТаблицаОтчет.ТекущаяОбласть.Верх; + КонецЕсли; + МассивСсылок = ГрупповоеИзменениеРеквизитовНаСервере(ВерхняяПозиция, ТаблицаОтчет.ТекущаяОбласть.Низ); + Если массивСсылок.Количество() > 0 Тогда + ПараметрыФормы = Новый Структура("МассивОбъектов", МассивСсылок); + ИмяОбъекта = "Обработка."; + ОткрытьФорму(ИмяОбъекта + "ГрупповоеИзменениеРеквизитов.Форма", ПараметрыФормы); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -531,7 +635,7 @@ ДиалогВыбораФайла.МножественныйВыбор = Ложь; ДиалогВыбораФайла.ИндексФильтра = 0; ДиалогВыбораФайла.ПолноеИмяФайла = ИмяФайла; - ДиалогВыбораФайла.Показать(Оповещение); + ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(Оповещение, ДиалогВыбораФайла); Иначе Оповещение = Новый ОписаниеОповещения("ПослеВыбораРасширенияФайла", ЭтотОбъект); ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма.РасширениеФайла",, ЭтотОбъект, Истина,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); @@ -571,7 +675,7 @@ Процедура УстановитьВидимостьЭлементовФормы() ЭтотОбъект.Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), НСтр("ru = 'Загрузка данных в справочник'"), Параметры.Заголовок); - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если ОбщегоНазначения.ЭтоВебКлиент() Тогда Элементы.СтраницаВариантЗаполнениеТаблицы.Видимость = Ложь; Элементы.СтраницыЗаполненияДанных.ТекущаяСтраница = Элементы.СтраницаВариантЗагрузкаИзФайла; Элементы.ВариантЗагрузки.Видимость = Ложь; @@ -984,7 +1088,7 @@ + НСтр("ru = 'Возможная причина: Загружаемые данные некорректные. |Техническая информация: %1'"); ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, ТехническаяИнформация); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщенияОбОшибке); КонецПроцедуры #КонецОбласти @@ -1207,9 +1311,8 @@ Элементы.Назад.Видимость = Ложь; КонецПроцедуры -#КонецОбласти -/////////////////////////////////////// СЕРВЕР ////////////////////////////////////// +#КонецОбласти &НаСервере Процедура ОпределитьДинамическийМакет(ТаблицаИнформацияПоКолонкам, КолонкиМакета) @@ -2315,8 +2418,8 @@ Если Результат <> Неопределено Тогда ДоступностьКнопокКомандойПанели(Ложь); Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ДлительныеОперации; - ИмяФайла = Результат[0].Имя; - АдресВременногоХранилища = Результат[0].Хранение; + ИмяФайла = Результат.Имя; + АдресВременногоХранилища = Результат.Хранение; Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла)); ФоновоеЗадание = ЗагрузитьФайлСДаннымиВТабличныйДокументНаСервере(АдресВременногоХранилища, Расширение); @@ -2357,7 +2460,7 @@ АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, АдресВоВременномХранилище); - ЗагрузкаДанныхИзФайла.УдалитьВременныйФайл(ИмяФайла); + ФайловаяСистема.УдалитьВременныйФайл(ИмяФайла); КонецПроцедуры @@ -2465,111 +2568,6 @@ ПодтверждениеЗакрытияФормы = Ложь; КонецПроцедуры -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыВидЗагрузкиДанных - -&НаКлиенте -Процедура ВидЗагрузкиДанныхВыборЗначения(Элемент, Значение, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ПереходКСледующемуШагуЗагрузкиДанных(); -КонецПроцедуры - -&НаКлиенте -Процедура ВидЗагрузкиДанныхПередНачаломИзменения(Элемент, Отказ) - Отказ = Истина; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыСопоставленияДанных - -&НаКлиенте -Процедура ТаблицаСопоставленияДанныхПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) - - Если ТипЗагрузки <> "ТабличнаяЧасть" Тогда - Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.ОбъектСопоставления) Тогда - Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "СтрокаСопоставлена"; - Иначе - Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "НеСопоставлен"; - КонецЕсли; - Иначе - Отбор = Новый Структура("ОбязательнаДляЗаполнения", Истина); - КолонкиОбязательнаДляЗаполнения = ИнформацияПоКолонкам.НайтиСтроки(Отбор); - РезультатСопоставленияСтроки = "СтрокаСопоставлена"; - Для каждого КолонкаТаблицы Из КолонкиОбязательнаДляЗаполнения Цикл - Если НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные["ТЧ_" + КолонкаТаблицы.Родитель]) Тогда - РезультатСопоставленияСтроки = ?(ЗначениеЗаполнено(Элемент.ТекущиеДанные.ОписаниеОшибки), "Неоднозначность", "НеСопоставлен"); - Прервать; - КонецЕсли; - КонецЦикла; - Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = РезультатСопоставленияСтроки; - КонецЕсли; - - ПодключитьОбработчикОжидания("ПоказатьСтатистикуПоСопоставлениюЗагрузкаИзФайла", 0.2, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицаСопоставленияДанныхПриАктивизацииЯчейки(Элемент) - Элементы.УстранитьНеоднозначность.Доступность = Ложь; - Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Ложь; - - Если Элемент.ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(Элемент.ТекущиеДанные.РезультатСопоставленияСтроки) Тогда - Если ТипЗагрузки = "ТабличнаяЧасть" Тогда - Если СтрДлина(Элемент.ТекущийЭлемент.Имя) > 3 И СтрНачинаетсяС(Элемент.ТекущийЭлемент.Имя, "ТЧ_") Тогда - ИмяКолонки = Сред(Элемент.ТекущийЭлемент.Имя, 4); - Если СтрНайти(Элемент.ТекущиеДанные.ОписаниеОшибки, ИмяКолонки) > 0 Тогда - Элементы.УстранитьНеоднозначность.Доступность = Истина; - Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Истина; - КонецЕсли; - КонецЕсли; - ИначеЕсли Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "Неоднозначность" Тогда - Элементы.УстранитьНеоднозначность.Доступность = Истина; - Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Истина; - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицаСопоставленияДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ОткрытьФормуРазрешенияНеоднозначности(ВыбраннаяСтрока, Поле.Имя, СтандартнаяОбработка); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыОтчет - -&НаКлиенте -Процедура ТаблицаОтчетПриАктивизацииОбласти(Элемент) - Если ТаблицаОтчет.ТекущаяОбласть.Низ = 1 И ТаблицаОтчет.ТекущаяОбласть.Верх = 1 Тогда - Элементы.ИзменитьРеквизиты.Доступность = Ложь; - Иначе - Элементы.ИзменитьРеквизиты.Доступность = Истина; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ГрупповоеИзменениеРеквизитов(Команда) - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда - Если ТаблицаОтчет.ТекущаяОбласть.Верх = 1 Тогда - ВерхняяПозиция = 2; - Иначе - ВерхняяПозиция = ТаблицаОтчет.ТекущаяОбласть.Верх; - КонецЕсли; - МассивСсылок = ГрупповоеИзменениеРеквизитовНаСервере(ВерхняяПозиция, ТаблицаОтчет.ТекущаяОбласть.Низ); - Если массивСсылок.Количество() > 0 Тогда - ПараметрыФормы = Новый Структура("МассивОбъектов", МассивСсылок); - ИмяОбъекта = "Обработка."; - ОткрытьФорму(ИмяОбъекта + "ГрупповоеИзменениеРеквизитов.Форма", ПараметрыФормы); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - #Область ФоновыеЗадания // Фоновая загрузка файла с данными @@ -2721,7 +2719,7 @@ ПоказатьОтчет(Задание.АдресРезультата); ПодтверждениеЗакрытияФормы = Истина; ИначеЕсли Задание.Статус = "Ошибка" Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Задание.КраткоеПредставлениеОшибки); + ОбщегоНазначенияКлиент.СообщитьПользователю(Задание.КраткоеПредставлениеОшибки); ПерейтиКСтранице(Элементы.СопоставлениеЗагружаемыхДанных); Иначе ПерейтиКСтранице(Элементы.СопоставлениеЗагружаемыхДанных); @@ -2749,3 +2747,4 @@ #КонецОбласти +#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl index fe62086a1..243d83e7c 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -107,13 +115,17 @@ КонецЦикла; Для каждого Элемент Из СписокНеоднозначностей Цикл + МетаданныеОбъект = Элемент.Метаданные(); + Строка = ЭлементыСправочника.Добавить(); Строка.Представление = Строка(Элемент); Для Каждого Колонка Из ВременнаяТЗ.Колонки Цикл - Типы = Новый Массив; - Типы.Добавить(ТипЗнч(Строка[Колонка.Имя])); - ОписаниеТипа = Новый ОписаниеТипов(Типы); - Строка[Колонка.Имя] = ОписаниеТипа.ПривестиЗначение(Элемент[Колонка.Имя]); + Если МетаданныеОбъект.Реквизиты.Найти(Колонка.Имя) <> Неопределено Тогда + Типы = Новый Массив; + Типы.Добавить(ТипЗнч(Строка[Колонка.Имя])); + ОписаниеТипа = Новый ОписаниеТипов(Типы); + Строка[Колонка.Имя] = ОписаниеТипа.ПривестиЗначение(Элемент[Колонка.Имя]); + КонецЕсли; КонецЦикла; КонецЦикла; @@ -167,21 +179,7 @@ #КонецОбласти -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура Выбрать(Команда) - Закрыть(Элементы.ВариантыВыбора.ТекущиеДанные.Ссылка); -КонецПроцедуры - -&НаКлиенте -Процедура НовыйЭлемент(Команда) - Закрыть(Неопределено); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовТаблицыЭлементыСправочника +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ЭлементыСправочникаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -206,7 +204,21 @@ #КонецОбласти -#Область СлужебныеФункции +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбрать(Команда) + Закрыть(Элементы.ВариантыВыбора.ТекущиеДанные.Ссылка); +КонецПроцедуры + +&НаКлиенте +Процедура НовыйЭлемент(Команда) + Закрыть(Неопределено); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьОформлениеДанных() diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl index 25e957c15..60aca087f 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl index 5bdb82986..40ea3a4be 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -19,6 +27,17 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СписокКолонокПриАктивизацииСтроки(Элемент) + Если Элемент.ТекущиеДанные <> Неопределено Тогда + ОписаниеКолонки = Элемент.ТекущиеДанные.Примечание; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -59,17 +78,6 @@ #КонецОбласти -#Область ОбработчикиСписокКолонок - -&НаКлиенте -Процедура СписокКолонокПриАктивизацииСтроки(Элемент) - Если Элемент.ТекущиеДанные <> Неопределено Тогда - ОписаниеКолонки = Элемент.ТекущиеДанные.Примечание; - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - #Область СлужебныеПроцедурыИФункции &НаСервере diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl index 461e0a4de..295d82537 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -62,7 +70,7 @@ #КонецОбласти -#Область СлужебныеФункции +#Область СлужебныеПроцедурыИФункции // Сообщает все требуемые сведения о процедуре загрузки данных из файла в Табличную часть. Функция ПараметрыЗагрузкиИзФайлаВТЧ(ИмяТабличнойЧасти, ДополнительныеПараметры) @@ -250,7 +258,7 @@ КонецЕсли; ТекстЗапроса = СтрокаЗапроса(ТекстЗапроса, СтруктураОбъекта.ТипОбъекта, - СтруктураОбъекта.НазваниеОбъекта, МассивКолонок); + СтруктураОбъекта.НазваниеОбъекта, МассивКолонок); КонецЕсли; КонецЦикла; @@ -1357,7 +1365,7 @@ АдресХранилища = ПоместитьВоВременноеХранилище(ШаблонСДанными, АдресХранилища); - ЗагрузкаДанныхИзФайла.УдалитьВременныйФайл(ИмяВременногоФайла); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); КонецПроцедуры @@ -1515,6 +1523,7 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник." + ИмяСправочника); ЭлементБлокировки.УстановитьЗначение("Ссылка", СтрокаТаблицы.ОбъектСопоставления); + Блокировка.Заблокировать(); ЭлементСправочника = СтрокаТаблицы.ОбъектСопоставления.ПолучитьОбъект(); СтрокаТаблицы.РезультатСопоставленияСтроки = "Обновлен"; @@ -1727,7 +1736,7 @@ ИнформацияОФункциональныхОпциях = Новый Соответствие; ИмяОбъектаССуффиксомРеквизит = ПолноеИмяОбъекта + ".Реквизит."; - ФункциональныеОпции = ОбщегоНазначенияПовтИсп.ДоступностьОбъектовПоОпциям(); + ФункциональныеОпции = СтандартныеПодсистемыПовтИсп.ДоступностьОбъектовПоОпциям(); Для Каждого ФункциональнаяОпция Из ФункциональныеОпции Цикл Если СтрНачинаетсяС(ФункциональнаяОпция.Ключ, ИмяОбъектаССуффиксомРеквизит) Тогда @@ -1759,7 +1768,7 @@ // Функция СобытиеЖурналаРегистрации() - Возврат НСтр("ru = 'Загрузка данных из файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Загрузка данных из файла'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Commands/ЗагрузкаКлассификатораБанков/CommandModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Commands/ЗагрузкаКлассификатораБанков/CommandModule.bsl index d1636932c..8e0a89915 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Commands/ЗагрузкаКлассификатораБанков/CommandModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Commands/ЗагрузкаКлассификатораБанков/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Form.form b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Form.form index 4270a21e9..091f87ccd 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Form.form @@ -22,6 +22,7 @@ ВариантЗагрузки Top + ShowBottom OnChange ВариантЗагрузкиПриИзменении @@ -29,9 +30,22 @@ ВариантЗагрузкиExtendedTooltip 28 + + <key>ru</key> + <value>Шаг 1: Нажмите на "Загрузить". +Шаг 2: В открывшемся окне нажмите на "Выберите файл". +Шаг 3: Укажите путь к файлу классификатора: + - На диске ИТС - <Диск ИТС>\1CITS\EXE\EXTDB\bnk.zip + - На компьютере или на сетевом диске - ...\bnk.zip +Шаг 4: Нажмите на "ОК". +Шаг 5: Дождитесь завершения загрузки.</value> + Label true true + + Style.ПоясняющийТекст + Left @@ -47,11 +61,12 @@ Left true + RadioButtons 1 ru - С сайта 1С + С Портала 1С:ИТС Интернет @@ -60,7 +75,7 @@ ru - С диска "Информационно-технологическое сопровождение" + С диска 1С:ИТС ИТС @@ -401,202 +416,90 @@ Auto
              - - КоманднаяПанель - 43 - - ГруппаКнопокСлева - 37 - - ФормаКнопкаНазад - 1 - true - true - - true - - - ФормаКнопкаНазадExtendedTooltip - 22 - Label - true - true - - Left - - - Form.Command.Назад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Кнопок слева</value> - - - ГруппаКнопокСлеваРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - CommandBar - - Left - - - - ГруппаКнопокСправа - 39 - - ФормаКнопкаДалее - 2 - true - true - - true - - - ФормаКнопкаДалееExtendedTooltip - 23 - Label - true - true - - Left - - - Form.Command.Далее - Auto - true - true - true - UserCmds - Auto - - - ФормаКнопкаОтмена - 3 - true - true - - true - - - ФормаКнопкаОтменаExtendedTooltip - 24 - Label - true - true - - Left - - - Form.Command.Отмена - Normal - Auto - true - true - UserCmds - Auto - - - ФормаКнопкаСправка - 4 - true - true - - true - - - ФормаКнопкаСправкаExtendedTooltip - 25 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Кнопок справа</value> - - - ГруппаКнопокСправаРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - КоманднаяПанельРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - Bottom true ФормаКоманднаяПанель -1 - Left + + ФормаКнопкаДалее + 2 + true + true + + true + + + ФормаКнопкаДалееExtendedTooltip + 23 + Label + true + true + + Left + + + Form.Command.Далее + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 45 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 47 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Right OnOpen @@ -641,23 +544,6 @@ ВариантЗагрузки
              - - ИдентификаторЗадания - - <key>ru</key> - <value>Идентификатор задания</value> - - 3 - - UUID - - - true - - - true - - ОповеститьКлассификаторАктуален @@ -732,28 +618,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>Отмена</name> - <title> - <key>ru</key> - <value>Отмена</value> - - 3 - - ru - Отмена - - - true - - - - Отмена - - - DontUse - Auto - diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl index 665009ff7..3c301c529 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/Forms/ЗагрузкаКлассификатора/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -19,15 +27,28 @@ ВыполнитьПроверкуПравДоступа("Изменение", Метаданные.Справочники.КлассификаторБанков); ВариантЗагрузки = "Интернет"; - УстановитьИзмененияВИнтерфейсе(); + ПоказыватьПолеВыбораФайла = Не ОбщегоНазначения.ЭтоВебКлиент(); + ДоступенВыборДискаИТС = Не ОбщегоНазначения.ЭтоМобильныйКлиент() И ПоказыватьПолеВыбораФайла; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВариантЗагрузки", "ВидПереключателя", ВидПереключателя.Переключатель); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаКнопкаОтмена", "Видимость", Ложь); - + Если Не ДоступенВыборДискаИТС Тогда + НайденныйВариант = Элементы.ВариантЗагрузки.СписокВыбора.НайтиПоЗначению("ИТС"); + Если НайденныйВариант <> Неопределено Тогда + Элементы.ВариантЗагрузки.СписокВыбора.Удалить(НайденныйВариант); + КонецЕсли; КонецЕсли; + Если ПоказыватьПолеВыбораФайла Тогда + Элементы.ВариантЗагрузки.Подсказка = ""; + Элементы.ВариантЗагрузки.ОтображениеПодсказки = ОтображениеПодсказки.Нет; + КонецЕсли; + + Элементы.Путь.Видимость = ПоказыватьПолеВыбораФайла; + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + КонецЕсли; + + УстановитьИзмененияВИнтерфейсе(); КонецПроцедуры &НаСервере @@ -69,7 +90,10 @@ Диалог = Новый ДиалогВыбораФайла(РежимДиалога); Диалог.Заголовок = ЗаголовокДиалога; Диалог.Каталог = Путь; - Диалог.Показать(Новый ОписаниеОповещения("ПутьЗавершениеВыбора", ЭтотОбъект)); + + Оповещение = Новый ОписаниеОповещения("ПутьЗавершениеВыбора", ЭтотОбъект); + ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(Оповещение, Диалог); + КонецПроцедуры // Обработчик завершения выбора каталога или файла классификатора. @@ -100,7 +124,7 @@ &НаКлиенте Процедура ОбработатьПроверкуСуществованияКлассификатора(Существует, ДополнительныеПараметры) Экспорт Если Не Существует Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru ='По указанному пути файл классификатора не обнаружен.'"),, "Путь"); КонецЕсли; КонецПроцедуры @@ -119,8 +143,11 @@ ОчиститьСообщения(); СообщениеОбОшибке = ""; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() И Не ЗначениеЗаполнено(Путь) Тогда - Если ВариантЗагрузки = "ИТС" И Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + +#Если Не ВебКлиент Тогда + + Если Не ЗначениеЗаполнено(Путь) Тогда + Если ВариантЗагрузки = "ИТС" И Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда // Не в Windows перебор букв дисков невозможен. СообщениеОбОшибке = НСтр("ru = 'При работе не в ОС Windows необходимо явно указать путь к диску'"); ИначеЕсли ВариантЗагрузки = "Файл" Тогда @@ -128,8 +155,10 @@ КонецЕсли; КонецЕсли; +#КонецЕсли + Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке,, Путь); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке,, Путь); Возврат; КонецЕсли; @@ -147,14 +176,6 @@ УстановитьИзмененияВИнтерфейсе(); КонецПроцедуры -&НаКлиенте -Процедура Отмена(Команда) - Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда - ЗавершитьФоновоеЗадание(ИдентификаторЗадания); - КонецЕсли; - Закрыть(); -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -198,8 +219,6 @@ Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; УстановитьИзмененияВИнтерфейсе(); - ИдентификаторЗадания = ДлительнаяОперация.ИдентификаторЗадания; - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; @@ -226,12 +245,13 @@ ПараметрыЗагрузки.КодБуквыДиска = 999; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьРезультатПомещенияКлассификатора", ЭтотОбъект, ПараметрыЗагрузки); - НачатьПомещениеФайла(ОписаниеОповещения, , , ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(), УникальныйИдентификатор); - Иначе - ПродолжитьПоискКлассификатора(ПараметрыЗагрузки); - КонецЕсли; +#Если ВебКлиент Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьРезультатПомещенияКлассификатора", ЭтотОбъект, ПараметрыЗагрузки); + НачатьПомещениеФайла(ОписаниеОповещения,,, Истина, УникальныйИдентификатор); +#Иначе + ПродолжитьПоискКлассификатора(ПараметрыЗагрузки); +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -367,7 +387,7 @@ КонецЕсли; Если Результат.Статус = "Ошибка" Тогда - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Загрузка классификатора банков'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Загрузка классификатора банков'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), "Ошибка", Результат.ПодробноеПредставлениеОшибки, , Истина); Элементы.ПоясняющийТекст.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -418,75 +438,30 @@ КонецЕсли; КонецПроцедуры -&НаСервере -Процедура ЗавершитьФоновоеЗадание(ИдентификаторЗадания) - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); - Если ФоновоеЗадание <> Неопределено Тогда - ФоновоеЗадание.Отменить(); - КонецЕсли; -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Общие обработчики &НаСервере Процедура УстановитьИзмененияВИнтерфейсе() - ЭтоВебКлиент = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); - // Установка свойств поля Путь. - Элементы.Путь.Видимость = Не ЭтоВебКлиент; - - // Управление вариантами загрузки. - Варианты = Элементы.ВариантЗагрузки.СписокВыбора; - НайденныйВариант = Варианты.НайтиПоЗначению("ИТС"); - - Если ЭтоВебКлиент Тогда - Если НайденныйВариант <> Неопределено Тогда - Варианты.Удалить(НайденныйВариант); - КонецЕсли; - - Элементы.ВариантЗагрузки.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; - Элементы.ВариантЗагрузки.Подсказка = НСтр("ru = 'Шаг 1: Нажмите на ""Загрузить"" - |Шаг 2: В открывшемся окне нажмите на ""Выберите файл"" - |Шаг 3: Укажите путь к файлу классификатора: - | - На диске ИТС - <Диск ИТС>\1CITS\EXE\EXTDB\bnk.zip - | - На компьютере или на сетевом диске - ...\bnk.zip - |Шаг 4: Нажмите на ""ОК"" - |Шаг 5: Дождитесь завершения загрузки.'"); - Иначе - Если НайденныйВариант = Неопределено Тогда - Варианты.Вставить(1, "ИТС", НСтр("ru = 'С диска ""Информационно-технологическое сопровождение""'")); - КонецЕсли; - + Если Не ОбщегоНазначения.ЭтоВебКлиент() Тогда Элементы.Путь.Доступность = (ВариантЗагрузки <> "Интернет"); - Элементы.Путь.ПодсказкаВвода = ""; - Элементы.ВариантЗагрузки.Подсказка = ""; - Элементы.ВариантЗагрузки.ОтображениеПодсказки = ОтображениеПодсказки.Нет; + Элементы.Путь.ПодсказкаВвода = ""; Если ВариантЗагрузки = "ИТС" Тогда Элементы.Путь.ПодсказкаВвода = НСтр("ru = 'Путь к диску ИТС, например E:\'"); - ИначеЕсли ВариантЗагрузки = "Файл" Тогда + ИначеЕсли ВариантЗагрузки = "Файл" И Не ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Элементы.Путь.ПодсказкаВвода = НСтр("ru = 'Путь к файлу классификатора, например C:\...\bnk.zip'"); КонецЕсли; КонецЕсли; - // Установка свойств кнопок мастера загрузки. - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника - Или Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайта1С Тогда - Элементы.ФормаКнопкаНазад.Видимость = Ложь; - Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Загрузить'"); - Элементы.ФормаКнопкаОтмена.Доступность = Истина; - Элементы.ФормаКнопкаДалее.Доступность = Истина; - ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка Тогда - Элементы.ФормаКнопкаНазад.Видимость = Ложь; - Элементы.ФормаКнопкаДалее.Доступность = Ложь; - Элементы.ФормаКнопкаОтмена.Доступность = Истина; - Иначе - Элементы.ФормаКнопкаНазад.Видимость = Истина; - Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Закрыть'"); - Элементы.ФормаКнопкаОтмена.Доступность = Ложь; - Элементы.ФормаКнопкаДалее.Доступность = Истина; + Элементы.ФормаКнопкаДалее.Видимость = Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника + Или Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайта1С; + + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда + Элементы.ФормаОтмена.Заголовок = НСтр("ru ='Закрыть'"); КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl index 7ca548fd2..eaed0646b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -99,7 +107,7 @@ ТекущаяВерсияКлассификатора = ВерсияКлассификатора(); - ВременныйКаталог = ОбщегоНазначения.СоздатьВременныйКаталог(); + ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог(); ПараметрыПолученияФайлов = Новый Структура; ПараметрыПолученияФайлов.Вставить("ПутьКФайлу", ""); @@ -117,9 +125,9 @@ ДанныеКлассификатора.Записать(ПараметрыПолученияФайлов.ПутьКФайлу); КонецЕсли; ПрочитатьИЗагрузитьДанные(ПараметрыЗагрузкиКлассификатора, ПараметрыПолученияФайлов, АдресХранилища); - ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); + ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); Исключение - ОбщегоНазначения.УдалитьВременныйКаталог(ВременныйКаталог); + ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); ВызватьИсключение; КонецПопытки; @@ -535,7 +543,7 @@ КонецФункции // Выполняет загрузку классификатора банков РФ из файла, полученного с сайта 1С. -Функция ЗагрузитьДанныеИзФайла(ИмяФайла) Экспорт +Процедура ЗагрузитьДанныеИзФайла(ИмяФайла) Экспорт ПапкаСИзвлеченнымиФайлами = ИзвлечьФайлыИзАрхива(ИмяФайла); Если ФайлыКлассификатораПолучены(ПапкаСИзвлеченнымиФайлами) Тогда Параметры = Новый Структура; @@ -556,7 +564,7 @@ УстановитьВерсиюКлассификатора(); КонецЕсли; -КонецФункции +КонецПроцедуры Функция ФайлыКлассификатораПолучены(ПапкаСФайлами) @@ -632,10 +640,10 @@ УстановитьПривилегированныйРежим(Ложь); Если ИспользоватьАльтернативныйСервер Тогда - Возврат НСтр("ru = 'Загрузка классификатора банков.РБК'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Загрузка классификатора банков.РБК'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; - Возврат НСтр("ru = 'Загрузка классификатора банков.1С'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Загрузка классификатора банков.1С'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form index cbb1e21d8..2c54bbe8d 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Form.form @@ -7,6 +7,7 @@ СклонениеЦелойЧасти 9 + VeryHigh ПолеПрописи4наРусском 13 @@ -292,6 +293,7 @@ ГруппаПараметрыДробнойЧасти 55 + VeryHigh СклонениеДробнойЧасти 14 @@ -691,130 +693,6 @@ Auto - - ГруппаПримерПрописи - 61 - - СуммаЧисло - 59 - - <key>ru</key> - <value>Сумма</value> - - true - true - - true - - - СуммаЧисло - - - OnChange - СуммаЧислоПриИзменении - - - СуммаЧислоExtendedTooltip - 98 - Label - true - true - - Left - - - - СуммаЧислоКонтекстноеМеню - 60 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - СуммаПрописью - 62 - true - true - - true - - - СуммаПрописью - - - СуммаПрописьюExtendedTooltip - 99 - Label - true - true - - Left - - - - СуммаПрописьюКонтекстноеМеню - 63 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Пример прописи суммы</value> - - - ГруппаПримерПрописиExtendedTooltip - 97 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - WeakSeparation - true - true - auto - Auto - Auto - - true true @@ -846,6 +724,130 @@ Auto + + ГруппаПримерПрописи + 61 + + СуммаЧисло + 59 + + <key>ru</key> + <value>Сумма</value> + + true + true + + true + + + СуммаЧисло + + + OnChange + СуммаЧислоПриИзменении + + + СуммаЧислоExtendedTooltip + 98 + Label + true + true + + Left + + + + СуммаЧислоКонтекстноеМеню + 60 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + СуммаПрописью + 62 + true + true + + true + + + СуммаПрописью + + + СуммаПрописьюExtendedTooltip + 99 + Label + true + true + + Left + + + + СуммаПрописьюКонтекстноеМеню + 63 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Пример прописи суммы</value> + + + ГруппаПримерПрописиExtendedTooltip + 97 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + true + auto + Auto + Auto + + Bottom true @@ -879,32 +881,6 @@ ФормаОтмена - 104 - true - true - - true - - - ФормаОтменаРасширеннаяПодсказка - 105 - Label - true - true - - Left - - - 0 - Normal - Auto - true - true - UserCmds - Auto - - - ФормаОтмена1 108 true true @@ -912,7 +888,7 @@ true - ФормаОтмена1РасширеннаяПодсказка + ФормаОтменаРасширеннаяПодсказка 109 Label true @@ -921,7 +897,7 @@ Left - Form.Command.Отмена + Form.StandardCommand.Cancel Normal Auto true @@ -937,7 +913,6 @@ ПриСозданииНаСервере
              Abort - Cancel Close CustomizeForm Ignore @@ -1222,28 +1197,6 @@ DontUse Auto - - Отмена - - <key>ru</key> - <value>Отмена</value> - - 2 - - ru - Отмена - - - true - - - - Отмена - - - DontUse - Auto - ПараметрыПрописи diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Module.bsl index f61b76598..a7f9e714b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -9,6 +16,16 @@ КонецЕсли; ЗаполнитьФормуПоОбъекту(); + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.СклонениеЦелойЧасти.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.ГруппаПараметрыДробнойЧасти.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.ГруппаПримерПрописи.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.СуммаПрописью.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.СуммаПрописью.Высота = 2; + Элементы.СуммаПрописью.МногострочныйРежим = Истина; + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + КонецЕсли; КонецПроцедуры #КонецОбласти @@ -120,11 +137,6 @@ Закрыть(ПараметрыПрописиНаРусском(ЭтотОбъект)); КонецПроцедуры -&НаКлиенте -Процедура Отмена(Команда) - Закрыть(); -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Form.form index f952babe1..75d5b6753 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Form.form @@ -32,6 +32,7 @@ КодВалюты 4 + VeryLow <key>ru</key> <value>Цифр. код</value> @@ -78,6 +79,7 @@ <items xsi:type="form:FormField"> <name>КраткоеНаименование</name> <id>6</id> + <displayImportance>VeryLow</displayImportance> <title> <key>ru</key> <value>Симв. код</value> @@ -124,6 +126,7 @@ <items xsi:type="form:FormField"> <name>Наименование</name> <id>8</id> + <displayImportance>VeryHigh</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -166,6 +169,7 @@ <items xsi:type="form:FormField"> <name>СтраныИТерритории</name> <id>10</id> + <displayImportance>VeryLow</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -206,6 +210,7 @@ <items xsi:type="form:FormField"> <name>Загружается</name> <id>15</id> + <displayImportance>VeryLow</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -217,7 +222,7 @@ <titleLocation>None</titleLocation> <toolTip> <key>ru</key> - <value>Валюта может быть загружена с сайта 1С</value> + <value>Курс валюты может быть загружен из Интернета</value> </toolTip> <extendedTooltip> <name>ЗагружаетсяExtendedTooltip</name> @@ -572,6 +577,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>СписокВалютКоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Валюты</name> <title> @@ -664,7 +674,7 @@ <name>Загружается</name> <title> <key>ru</key> - <value>Загружается из сети Интернет</value> + <value>Загружается из Интернета</value> 5 diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Module.bsl index 9458fe7e7..9343abc5c 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -12,6 +19,11 @@ ЗакрыватьПриВыборе = Ложь; ЗаполнитьТаблицуВалют(); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Загружается.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; + Элементы.СтраныИТерритории.Заголовок = НСтр("ru = 'Страны'"); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/СообщенияОбОшибках/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/СообщенияОбОшибках/Module.bsl index 133b64cff..851aa212b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/СообщенияОбОшибках/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/СообщенияОбОшибках/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form index e0c2fef05..074cf33c7 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form @@ -3,35 +3,36 @@ КоманднаяПанель 43 + + ФормаЗагрузитьКурсыВалют + 32 + true + true + + true + + + ФормаЗагрузитьКурсыВалютExtendedTooltip + 48 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗагрузитьКурсыВалют + Auto + true + true + true + UserCmds + Auto + КоманднаяПанельЛевая 42 - - ФормаЗагрузитьКурсыВалют - 32 - true - true - - true - - - ФормаЗагрузитьКурсыВалютExtendedTooltip - 48 - Label - true - true - - Left - - - Form.Command.ЗагрузитьКурсыВалют - Auto - true - true - true - UserCmds - Auto - true true @@ -953,6 +954,11 @@ true auto true + + + КоманднаяПанель + + Объект 1 diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl index 5923c461b..9690eaefc 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -372,7 +379,7 @@ ОчиститьСообщения(); Если Не ЗначениеЗаполнено(Объект.НачалоПериодаЗагрузки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не задана дата начала периода загрузки.'"), , "Объект.НачалоПериодаЗагрузки"); @@ -380,7 +387,7 @@ КонецЕсли; Если Не ЗначениеЗаполнено(Объект.ОкончаниеПериодаЗагрузки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не задана дата окончания периода загрузки.'"), , "Объект.ОкончаниеПериодаЗагрузки"); diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl index 5f61a21a8..02bc2c6bd 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -69,7 +77,6 @@ ТекущаяДата = ТекущаяДатаСеанса(); - СостояниеЗагрузки = Неопределено; ПриЗагрузкеВозниклиОшибки = Ложь; Если ПараметрыЗагрузки = Неопределено Тогда @@ -219,8 +226,6 @@ // Устанавливает признак загрузки курсов из интернета по данным классификатора. Процедура ПреобразованиеСвязейВалют() Экспорт - Перем Запрос, Выборка, НаборЗаписей, Запись; - Перем КлассификаторXML, КлассификаторТаблица, Валюта, НайденнаяСтрока; КлассификаторXML = Обработки["ЗагрузкаКурсовВалют"].ПолучитьМакет("ОбщероссийскийКлассификаторВалют").ПолучитьТекст(); КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторXML).Данные; @@ -331,8 +336,6 @@ // Функция ЗагрузитьКурсВалютыИзФайла(Знач Валюта, Знач ПутьКФайлу, Знач НачалоПериодаЗагрузки, Знач ОкончаниеПериодаЗагрузки) - СтатусЗагрузки = 1; - ЧислоЗагружаемыхДнейВсего = 1 + (ОкончаниеПериодаЗагрузки - НачалоПериодаЗагрузки) / ( 24 * 60 * 60); ЧислоЗагруженныхДней = 0; @@ -574,7 +577,7 @@ КонецФункции Функция ИмяСобытияЖурналаРегистрации() - Возврат НСтр("ru = 'Валюты.Загрузка курсов валют'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Валюты.Загрузка курсов валют'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции // См. ИнтернетПоддержкаПользователейПереопределяемый.ПриСохраненииДанныхАутентификацииПользователяИнтернетПоддержки. diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl index 34e87f692..56d87474d 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl index 57d7c112c..ef53d1b3b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl index 3759ddaad..96cce407d 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -800,16 +808,14 @@ Функция ПолучитьТекстУсловияДляСвойства(Правило, СвойстваОбъекта) - Перем ВидСравнения; - - ВидСравнения = Правило.ВидСравнения; + ВидСравненияПравила = Правило.ВидСравнения; // Необходимо инвертировать вид сравнения, // потому что таблицы Плана обмена и регистрируемого Объекта расположены по разному // в конфигурации КД 2.0 при настройке ПРО и в запросе к Планам обмена в данном модуле. - ИнвертироватьВидСравнения(ВидСравнения); + ИнвертироватьВидСравнения(ВидСравненияПравила); - ТекстОператора = ПолучитьТекстОператораСравнения(ВидСравнения); + ТекстОператора = ПолучитьТекстОператораСравнения(ВидСравненияПравила); СинонимТаблицы = ?(ПустаяСтрока(Правило.ТабличнаяЧастьПараметраУзла), "ПланОбменаОсновнаяТаблица", @@ -1216,7 +1222,7 @@ Функция ИнициализацияСообщений() Сообщения = Новый Соответствие; - КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); + КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); Сообщения.Вставить(0, НСтр("ru = 'Внутренняя ошибка'", КодОсновногоЯзыка)); Сообщения.Вставить(1, НСтр("ru = 'Ошибка открытия файла правил'", КодОсновногоЯзыка)); @@ -1237,4 +1243,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl index 98afb3efb..38f02a265 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Форма параметризуется. // // Параметры: @@ -883,18 +891,14 @@ &НаКлиенте Процедура ЗапуститьФоновоеЗаданиеКлиент() - // Подготовка параметров метода. - ПараметрыМетода = Новый Структура("ПарыЗамен, Параметры"); + + ПараметрыМетода = Новый Структура("ПарыЗамен, СпособУдаления"); ПараметрыМетода.ПарыЗамен = Новый Соответствие; Для Каждого Строка Из ЗаменяемыеСсылки Цикл ПараметрыМетода.ПарыЗамен.Вставить(Строка.Ссылка, ЦелевойЭлемент); КонецЦикла; - ПараметрыМетода.Параметры = Новый Структура; - ПараметрыМетода.Параметры.Вставить("СпособУдаления", ТекущийВариантУдаления); - ПараметрыМетода.Параметры.Вставить("ВключатьБизнесЛогику", Истина); - ПараметрыМетода.Параметры.Вставить("ЗаменаПарыВТранзакции", Ложь); + ПараметрыМетода.Вставить("СпособУдаления", ТекущийВариантУдаления); - // Запуск фонового задания для замены. Задание = ЗапуститьФоновоеЗадание(ПараметрыМетода, УникальныйИдентификатор); НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); @@ -907,12 +911,15 @@ &НаСервереБезКонтекста Функция ЗапуститьФоновоеЗадание(Знач ПараметрыМетода, Знач УникальныйИдентификатор) + ИмяМетода = "ПоискИУдалениеДублей.ЗаменитьСсылки"; + НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Замена ссылок'"); НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - НастройкиЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Поиск и удаление дублей: Замена ссылок'"); + НастройкиЗапуска.НаименованиеФоновогоЗадания = НаименованиеМетода; Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяМетода, ПараметрыМетода, НастройкиЗапуска); + КонецФункции &НаКлиенте diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl index a04333c3f..cf8bfb9b9 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Форма параметризуется. // // Параметры: @@ -124,7 +132,7 @@ #КонецОбласти -#Область ОбработчикиСобытийШапкиФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПодсказкаВыбораОсновногоЭлементаОбработкаНавигационнойСсылки(Элемент, ЗначениеНавигационнойСсылки, СтандартнаяОбработка) @@ -1062,15 +1070,13 @@ ИмяМетода = "ПоискИУдалениеДублей.ЗаменитьСсылки"; НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Объединение элементов'"); - ПараметрыМетода = Новый Структура("ПарыЗамен, Параметры"); + + ПараметрыМетода = Новый Структура("ПарыЗамен, СпособУдаления"); ПараметрыМетода.ПарыЗамен = Новый Соответствие; Для Каждого Строка Из МестаИспользования Цикл ПараметрыМетода.ПарыЗамен.Вставить(Строка.Ссылка, ОсновнойЭлемент); КонецЦикла; - ПараметрыМетода.Параметры = Новый Структура; - ПараметрыМетода.Параметры.Вставить("СпособУдаления", ТекущийВариантУдаления); - ПараметрыМетода.Параметры.Вставить("ВключатьБизнесЛогику", Истина); - ПараметрыМетода.Параметры.Вставить("ЗаменаПарыВТранзакции", Ложь); + ПараметрыМетода.Вставить("СпособУдаления", ТекущийВариантУдаления); Иначе diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/ManagerModule.bsl index f393f4ccd..d93425499 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/DataProcessors/ЗаполнениеГрафиковРаботы/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаполнениеГрафиковРаботы/ManagerModule.bsl index 66a368c71..ce6a9be07 100644 --- a/SSL/src/DataProcessors/ЗаполнениеГрафиковРаботы/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаполнениеГрафиковРаботы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form index 30b310a7e..6391526b6 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Form.form @@ -404,12 +404,8 @@ <key>ru</key> - <value>Группа поиск</value> + <value>Поиск</value> - - ru - Группа поиск - ГруппаПоискРасширеннаяПодсказка 44 diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl index a19616980..bcb384ddc 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -11,7 +18,7 @@ // Заполнение списка календарей. ЗакрыватьПриВыборе = Ложь; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Выбрать", "Видимость", Ложь); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПоиск", "Отображение", ОтображениеГруппыКнопок.Компактное); @@ -64,19 +71,19 @@ Функция ЗагрузитьСписокПоддерживаемыхПроизводственныхКалендарей() ПараметрыПроцедуры = Новый Структура; - + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Заполнение списка поддерживаемых календарей'"); Возврат ДлительныеОперации.ВыполнитьВФоне("Справочники.ПроизводственныеКалендари.ЗаполнитьПроизводственныеКалендариПоУмолчаниюДлительнаяОперация", - ПараметрыПроцедуры, ПараметрыВыполнения); + ПараметрыПроцедуры, ПараметрыВыполнения); КонецФункции &НаКлиенте Процедура ЗаполнитьСписокКалендарейЗавершение(Результат, ДополнительныеПараметры) Экспорт - Если Результат = Неопределено Тогда + Если Результат = Неопределено Тогда Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl index fa68dcb7d..93bf3bafe 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -9,7 +17,7 @@ // Неопределено, в случае если он не обнаружен. // Функция ОсновнойПроизводственныйКалендарь() Экспорт - + // Производственный календарь, составленный в соответствии с ст. 112 ТК РФ. ПроизводственныйКалендарь = Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ"); Если ПроизводственныйКалендарь.Пустая() Тогда @@ -43,13 +51,13 @@ Функция ВерсияОбновленияПроизводственныхКалендарей() Экспорт - Возврат "3.0.1.316"; + Возврат "3.0.2.121"; КонецФункции Функция ВерсияОбновленияДанныхПроизводственныхКалендарей() Экспорт - Возврат "3.0.1.334"; + Возврат "3.0.2.144"; КонецФункции @@ -447,7 +455,7 @@ Возврат Неопределено; КонецФункции - + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Commands/ЗащитаПерсональныхДанных/CommandModule.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Commands/ЗащитаПерсональныхДанных/CommandModule.bsl index 181ed16e2..a4317a18f 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Commands/ЗащитаПерсональныхДанных/CommandModule.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Commands/ЗащитаПерсональныхДанных/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form index ea7ce8617..5a0b89a4b 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form @@ -1762,7 +1762,6 @@ AutoUse true true - false Auto End Enable diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl index a9ffda453..b92d267e9 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -11,11 +18,11 @@ КонецЕсли; ЗаполнитьОтборЖурналаРегистрацииПоУмолчанию(); - ОтборЖурналаРегистрации = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ОтборЖурналаРегистрацииПоУмолчанию); + ОтборЖурналаРегистрации = ОбщегоНазначения.СкопироватьРекурсивно(ОтборЖурналаРегистрацииПоУмолчанию); КоличествоПоказываемыхСобытий = 200; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПросмотрЗарегистрированныхСобытий", "ОтображатьЗаголовок", Ложь); @@ -92,7 +99,7 @@ &НаКлиенте Процедура ОтключитьОтбор() - ОтборЖурналаРегистрации = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ОтборЖурналаРегистрацииПоУмолчанию); + ОтборЖурналаРегистрации = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ОтборЖурналаРегистрацииПоУмолчанию); ОбновитьТекущийСписок(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl index 6bc07d16a..1d47b3b98 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form similarity index 99% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form index 911a8fa90..bd7297955 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form @@ -1,5 +1,9 @@ + + <key>ru</key> + <value>Заявление на выпуск нового квалифицированного сертификата</value> + Шапка 156 @@ -6943,7 +6947,6 @@ LockOwner true - true true Vertical true diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Help/ru.html b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Help/ru.html similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Help/ru.html rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Help/ru.html diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа1/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа1/Picture.png similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа1/Picture.png rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа1/Picture.png diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа2/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа2/Picture.png similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа2/Picture.png rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа2/Picture.png diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа3/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа3/Picture.png similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа3/Picture.png rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа3/Picture.png diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа4/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа4/Picture.png similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа4/Picture.png rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа4/Picture.png diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа5/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа5/Picture.png similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа5/Picture.png rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа5/Picture.png diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа6/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа6/Picture.png similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа6/Picture.png rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа6/Picture.png diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа7/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа7/Picture.png similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа7/Picture.png rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа7/Picture.png diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа8/Picture.png b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа8/Picture.png similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Items/ДекорацияЭтапа8/Picture.png rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Items/ДекорацияЭтапа8/Picture.png diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl similarity index 96% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl index c985961e3..68877d8c8 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -127,12 +135,12 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ДекорацияУдостоверяющийЦентрНаименованиеНажатие(Элемент) - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку("http://ca.1c.ru/"); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://ca.1c.ru/"); КонецПроцедуры @@ -833,13 +841,13 @@ Процедура ПерейтиНаСтраницуОтправкаЗаявления() Если Не ЗначениеЗаполнено(Объект.Программа) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Поле ""Программа электронной подписи"" не заполнено'"), , "Программа"); Возврат; КонецЕсли; - Элементы.ФормаДалее.Доступность = Ложь; + Доступность = Ложь; ПодключитьОбработчикОжидания("ПерейтиНаСтраницуОтправкаЗаявленияПродолжение", 0.1, Истина); @@ -862,7 +870,8 @@ Объект.Программа = Неопределено; ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( НСтр("ru = 'Создание ключа электронной подписи'"), "", Результат, Новый Структура); - Элементы.ФормаДалее.Доступность = Истина; + + Доступность = Истина; Возврат; КонецЕсли; @@ -877,8 +886,9 @@ &НаКлиенте Процедура ПерейтиНаСтраницуОтправкаЗаявленияПослеСозданияКлючаИЗапросаНаСертификат(Результат, Контекст) Экспорт + Доступность = Истина; + Если Результат <> Истина Тогда - Элементы.ФормаДалее.Доступность = Истина; Возврат; КонецЕсли; @@ -1306,7 +1316,8 @@ Реквизиты.Вставить("Организация", Неопределено); КонецЕсли; - ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Реквизиты); + ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. + ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовОрганизацииВЗаявленииНаСертификат(Реквизиты); Если ЕстьОрганизации Тогда Организация = Реквизиты.Организация; @@ -1361,7 +1372,7 @@ РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ИНН, Не ЭтоИндивидуальныйПредприниматель, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ИНН", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ИНН", , Отказ); КонецЕсли; КонецЕсли; @@ -1371,7 +1382,7 @@ ТекстСообщения = ""; РегламентированныеДанныеКлиентСервер.КППСоответствуетТребованиям(КПП, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "КПП", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "КПП", , Отказ); КонецЕсли; КонецЕсли; @@ -1380,7 +1391,7 @@ РегламентированныеДанныеКлиентСервер.ОГРНСоответствуетТребованиям(ОГРН, Не ЭтоИндивидуальныйПредприниматель, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ОГРН", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ОГРН", , Отказ); КонецЕсли; КонецЕсли; @@ -1388,7 +1399,7 @@ ТекстСообщения = ""; РасчетныйСчетСоответствуетТребованиям(РасчетныйСчет, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "РасчетныйСчет", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "РасчетныйСчет", , Отказ); КонецЕсли; КонецЕсли; @@ -1396,7 +1407,7 @@ ТекстСообщения = ""; БИКСоответствуетТребованиям(БИК, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "БИК", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "БИК", , Отказ); КонецЕсли; КонецЕсли; @@ -1404,7 +1415,7 @@ ТекстСообщения = ""; КорреспондентскийСчетСоответствуетТребованиям(КорреспондентскийСчет, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "КорреспондентскийСчет", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "КорреспондентскийСчет", , Отказ); КонецЕсли; КонецЕсли; @@ -1412,7 +1423,7 @@ ТекстСообщения = ""; АдресСоответствуетТребованиям(ЮридическийАдресXML, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ЮридическийАдрес", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ЮридическийАдрес", , Отказ); КонецЕсли; КонецЕсли; @@ -1420,7 +1431,7 @@ ТекстСообщения = ""; АдресСоответствуетТребованиям(ФактическийАдресXML, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ФактическийАдрес", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ФактическийАдрес", , Отказ); КонецЕсли; КонецЕсли; @@ -1428,7 +1439,7 @@ ТекстСообщения = ""; ТелефонСоответствуетТребованиям(ТелефонXML, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Телефон", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Телефон", , Отказ); КонецЕсли; КонецЕсли; @@ -1746,7 +1757,8 @@ Реквизиты.Вставить("ТипВладельца"); - ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовВладельцаВЗаявленииНаСертификат(Реквизиты); + ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовВладельцаВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. + ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовВладельцаВЗаявленииНаСертификат(Реквизиты); ЗаполнитьТипыЗначения(СотрудникТип, Элементы.Сотрудник, Реквизиты.ТипВладельца); @@ -1901,7 +1913,7 @@ РегламентированныеДанныеКлиентСервер.СтраховойНомерПФРСоответствуетТребованиям( СтраховойНомерПФР, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "СтраховойНомерПФР", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "СтраховойНомерПФР", , Отказ); КонецЕсли; КонецЕсли; @@ -1917,7 +1929,7 @@ ТекстСообщения = ""; НомерПаспортаРФСоответствуетТребованиям(ДокументНомер, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ДокументНомер", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ДокументНомер", , Отказ); КонецЕсли; КонецЕсли; @@ -1929,7 +1941,7 @@ ТекстСообщения = ""; КодПодразделенияВыдачиПаспортаРФСоответствуетТребованиям(ДокументКодПодразделения, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ДокументКодПодразделения", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ДокументКодПодразделения", , Отказ); КонецЕсли; КонецЕсли; @@ -1944,7 +1956,7 @@ ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ЭлектроннаяПочта", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ЭлектроннаяПочта", , Отказ); КонецЕсли; КонецЕсли; @@ -2033,7 +2045,8 @@ КонецЕсли; Реквизиты.Вставить("ТипРуководителя"); - ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Реквизиты); + ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. + ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовРуководителяВЗаявленииНаСертификат(Реквизиты); ЗаполнитьТипыЗначения(ДокументыРуководительТип, Элементы.ДокументыРуководитель, Реквизиты.ТипРуководителя); Элементы.ДокументыРуководитель.КнопкаВыбора = ДокументыРуководительТип <> Неопределено; @@ -2106,7 +2119,8 @@ КонецЕсли; Реквизиты.Вставить("ТипПартнера"); - ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Реквизиты); + ЭлектроннаяПодписьПереопределяемый.ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Реквизиты);// АПК:222 Вызов устаревшей для совместимости. + ЗаявлениеНаСертификатПереопределяемый.ПриЗаполненииРеквизитовПартнераВЗаявленииНаСертификат(Реквизиты); ЗаполнитьТипыЗначения(ДокументыПартнерТип, Элементы.ДокументыПартнер, Реквизиты.ТипПартнера); Элементы.ДокументыПартнер.КнопкаВыбора = ДокументыПартнерТип <> Неопределено; @@ -2171,7 +2185,7 @@ РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ДокументыПартнерИНН, Не ДокументыПартнерЭтоИП, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ДокументыПартнерИНН", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ДокументыПартнерИНН", , Отказ); КонецЕсли; КонецЕсли; @@ -2181,7 +2195,7 @@ ТекстСообщения = ""; РегламентированныеДанныеКлиентСервер.КППСоответствуетТребованиям(ДокументыПартнерКПП, ТекстСообщения); Если ЗначениеЗаполнено(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ДокументыПартнерКПП", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ДокументыПартнерКПП", , Отказ); КонецЕсли; КонецЕсли; @@ -2387,7 +2401,7 @@ КонецЕсли; Если Не ЗначениеЗаполнено(ЭтотОбъект[ИмяРеквизита]) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Поле ""%1"" не заполнено'"), ЗаголовокПоля), , ИмяРеквизита, , Отказ); Возврат Ложь; @@ -2406,9 +2420,7 @@ КонецЕсли; Макет = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПолучитьМакет( - ?(ЭтоИндивидуальныйПредприниматель, - "ЗаявлениеНаСертификатИндивидуальногоПредпринимателя", - "ЗаявлениеНаСертификатЮридическогоЛица")); + ?(ЭтоИндивидуальныйПредприниматель, "ИндивидуальныйПредприниматель", "ЮридическоеЛицо")); Документ = Новый ТабличныйДокумент; ЗаполнитьЗначенияСвойств(Макет.Параметры, ЭтотОбъект); @@ -3022,7 +3034,6 @@ КорневойСертификатСтрокой = ""; Для Каждого Узел Из УзелDOM Цикл - Отпечаток = Узел.Атрибуты.ПолучитьИменованныйЭлемент("Отпечаток").ТекстовоеСодержимое; Хранилище = Узел.Атрибуты.ПолучитьИменованныйЭлемент("Хранилище").ТекстовоеСодержимое; Если Хранилище = "MY" Тогда СертификатСтрокой = Узел.ТекстовоеСодержимое; @@ -3065,23 +3076,22 @@ Возврат Неопределено; КонецЕсли; - СтруктураСертификата = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(Сертификат); - СвойстваСубъекта = ЭлектроннаяПодписьКлиентСервер.СвойстваСубъектаСертификата(Сертификат); + СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(Сертификат); + СвойстваСубъекта = ЭлектроннаяПодпись.СвойстваСубъектаСертификата(Сертификат); АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификата, УникальныйИдентификатор); АдресКорневогоСертификата = ПоместитьВоВременноеХранилище(ДанныеКорневогоСертификата, УникальныйИдентификатор); ОтпечатокКорневогоСертификата = Base64Строка(КорневойСертификат.Отпечаток); // Важно заполнить отпечаток, чтобы не было возможности добавить дубль сертификата. - Объект.Наименование = ЭлектроннаяПодписьКлиентСервер.ПредставлениеСертификата(Сертификат); + Объект.Наименование = ЭлектроннаяПодпись.ПредставлениеСертификата(Сертификат); - Объект.Подписание = Сертификат.ИспользоватьДляПодписи; - Объект.Шифрование = Сертификат.ИспользоватьДляШифрования; - - Объект.Отпечаток = СтруктураСертификата.Отпечаток; - Объект.КомуВыдан = СтруктураСертификата.КомуВыдан; - Объект.КемВыдан = СтруктураСертификата.КемВыдан; - Объект.ДействителенДо = СтруктураСертификата.ДействителенДо; + Объект.Подписание = СвойстваСертификата.Подписание; + Объект.Шифрование = СвойстваСертификата.Шифрование; + Объект.Отпечаток = СвойстваСертификата.Отпечаток; + Объект.КомуВыдан = СвойстваСертификата.КомуВыдан; + Объект.КемВыдан = СвойстваСертификата.КемВыдан; + Объект.ДействителенДо = СвойстваСертификата.ДатаОкончания; Объект.Фамилия = СвойстваСубъекта.Фамилия; Объект.Имя = СвойстваСубъекта.Имя; @@ -3229,8 +3239,8 @@ Контекст.ИмяФайлаКорневогоСертификата, АдресКорневогоСертификата)); Вызовы = Новый Массив; - ДобавитьВызов(Вызовы, "НачатьПолучениеФайлов", Контекст.ПолучаемыеФайлы, Контекст.ВременныйКаталог, Ложь, , ); - ДобавитьВызов(Вызовы, "НачатьУдалениеФайлов", Контекст.ВременныйКаталог, , , , ); + ДобавитьВызов(Вызовы, "НачатьПолучениеФайлов", Контекст.ПолучаемыеФайлы, Контекст.ВременныйКаталог, Ложь); + ДобавитьВызов(Вызовы, "НачатьУдалениеФайлов", Контекст.ВременныйКаталог, Неопределено); НачатьЗапросРазрешенияПользователя(Новый ОписаниеОповещения( "УстановитьСертификатПослеПолученияРазрешений", ЭтотОбъект, Контекст), Вызовы); @@ -3257,9 +3267,12 @@ &НаКлиенте Процедура УстановитьСертификатПослеСозданияКаталога(РазрешенияПолучены, Контекст) Экспорт - НачатьПолучениеФайлов(Новый ОписаниеОповещения( - "УстановитьСертификатПослеПолученияФайлов", ЭтотОбъект, Контекст), - Контекст.ПолучаемыеФайлы, Контекст.ВременныйКаталог, Ложь); + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов(); + ПараметрыСохранения.Диалог.Каталог = Контекст.ВременныйКаталог; + ПараметрыСохранения.Интерактивно = Ложь; + ФайловаяСистемаКлиент.СохранитьФайлы( + Новый ОписаниеОповещения("УстановитьСертификатПослеПолученияФайлов", ЭтотОбъект, Контекст), + Контекст.ПолучаемыеФайлы, ПараметрыСохранения); КонецПроцедуры @@ -3314,6 +3327,10 @@ СтандартнаяОбработка = Ложь; Криптография = Неопределено; + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + ОшибкаУстановкиСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось установить личный сертификат в контейнер ключей и хранилище ОС по причине: |%1'"), @@ -3333,6 +3350,10 @@ &НаКлиенте Процедура УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилище(Результат, ПараметрыВызова, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Контекст.Вставить("РезультатПослеВызоваУстановитьСертификатВКонтейнерИХранилище", Результат); Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( @@ -3344,6 +3365,10 @@ &НаКлиенте Процедура УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилищеПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(СписокОшибок) Тогда УстановитьСертификатПослеОшибкиВызоваУстановитьСертификатВКонтейнерИХранилище(СписокОшибок, Ложь, Контекст); Возврат; @@ -3426,6 +3451,10 @@ СтандартнаяОбработка = Ложь; Криптография = Неопределено; + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + ОшибкаУстановкиСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось установить корневой сертификат в хранилище ОС по причине: |%1'"), @@ -3440,6 +3469,10 @@ &НаКлиенте Процедура УстановитьСертификатПослеВызоваИмпортироватьСертификат(Результат, ПараметрыВызова, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Контекст.Вставить("РезультатПослеВызоваИмпортироватьСертификат", Результат); Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( @@ -3451,6 +3484,10 @@ &НаКлиенте Процедура УстановитьСертификатПослеВызоваИмпортироватьСертификатПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(СписокОшибок) Тогда УстановитьСертификатПослеОшибкиВызоваИмпортироватьСертификат(СписокОшибок, Ложь, Контекст); Возврат; @@ -3521,7 +3558,7 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ДобавитьВызов(Вызовы, Метод, П1, П2, П3, П4, П5) +Процедура ДобавитьВызов(Вызовы, Метод, П1, П2, П3 = Неопределено, П4 = Неопределено, П5 = Неопределено) Вызов = Новый Массив; Вызов.Добавить(Метод); @@ -3651,7 +3688,7 @@ // Из раздела "Справочник кодов регионов". ИменаВсехРегионовРФ = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПолучитьМакет( - "ИменаРегионовРФПоРекомендациямДляСКПЭП"); + "ИменаРегионовРФ"); Строка = ИменаВсехРегионовРФ.ПолучитьСтроку(Число(КодРегиона)); @@ -4546,6 +4583,10 @@ СтандартнаяОбработка = Ложь; Криптография = Неопределено; + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Ошибка = Новый Структура; Ошибка.Вставить("ПоказатьИнструкцию", Истина); Ошибка.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -4564,6 +4605,10 @@ &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьКонтейнер(Путь, ПараметрыВызова, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Контекст.Вставить("ПутьПослеВызоваСоздатьКонтейнер", Путь); Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( @@ -4575,6 +4620,10 @@ &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьКонтейнерПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(СписокОшибок) Тогда СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваСоздатьКонтейнер(СписокОшибок, Ложь, Контекст); Возврат; @@ -4630,8 +4679,8 @@ Контекст.ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(Контекст.ИмяФайлаЗапроса)); Вызовы = Новый Массив; - ДобавитьВызов(Вызовы, "НачатьПомещениеФайлов", Контекст.ПомещаемыеФайлы, , Ложь, УникальныйИдентификатор, ); - ДобавитьВызов(Вызовы, "НачатьУдалениеФайлов", Контекст.ИмяФайлаЗапроса, , , , ); + ДобавитьВызов(Вызовы, "НачатьПомещениеФайлов", Контекст.ПомещаемыеФайлы, Неопределено, Ложь, УникальныйИдентификатор); + ДобавитьВызов(Вызовы, "НачатьУдалениеФайлов", Контекст.ИмяФайлаЗапроса, Неопределено); НачатьЗапросРазрешенияПользователя(Новый ОписаниеОповещения( "СоздатьКлючИЗапросНаСертификатПослеПолученияРазрешений", ЭтотОбъект, Контекст), Вызовы); @@ -4669,6 +4718,10 @@ СтандартнаяОбработка = Ложь; Криптография = Неопределено; + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + СоздатьКлючИЗапросНаСертификатЗавершение(Контекст, ИнформацияОбОшибке, НСтр("ru = 'Не удалось выполнить операцию по причине:'")); @@ -4678,6 +4731,10 @@ &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьЗапросНаСертификат(Результат, ПараметрыВызова, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Контекст.Вставить("РезультатПослеВызоваСоздатьЗапросНаСертификат", Результат); Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( @@ -4689,6 +4746,10 @@ &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваСоздатьЗапросНаСертификатПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(СписокОшибок) Тогда СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваСоздатьЗапросНаСертификат(СписокОшибок, Ложь, Контекст); Возврат; @@ -4760,6 +4821,10 @@ СтандартнаяОбработка = Ложь; Криптография = Неопределено; + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + СоздатьКлючИЗапросНаСертификатЗавершение(Контекст, ИнформацияОбОшибке, НСтр("ru = 'Не удалось получить открытую часть ключа по причине:'")); @@ -4769,6 +4834,10 @@ &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлюч(Результат, ПараметрыВызова, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Контекст.Вставить("РезультатПослеВызоваПолучитьОткрытыйКлюч", Результат); Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( @@ -4780,6 +4849,10 @@ &НаКлиенте Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлючПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(СписокОшибок) Тогда СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваПолучитьОткрытыйКлюч(СписокОшибок, Ложь, Контекст); Возврат; @@ -4790,10 +4863,13 @@ Контекст.Вставить("ТекущаяОткрытаяЧастьКлючаЭП", Результат); Контекст.Вставить("ТекущийИКС", ИдентификаторКлючаСубъектаHexСтрокой(Результат)); - НачатьПомещениеФайлов(Новый ОписаниеОповещения( - "СоздатьКлючИЗапросНаСертификатПослеПомещенияФайлов", ЭтотОбъект, Контекст, - "СоздатьКлючИЗапросНаСертификатПослеОшибкиПомещенияФайлов", ЭтотОбъект), - Контекст.ПомещаемыеФайлы, , Ложь, УникальныйИдентификатор); + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + ПараметрыЗагрузки.Интерактивно = Ложь; + ФайловаяСистемаКлиент.ЗагрузитьФайлы(Новый ОписаниеОповещения( + "СоздатьКлючИЗапросНаСертификатПослеПомещенияФайлов", ЭтотОбъект, Контекст, + "СоздатьКлючИЗапросНаСертификатПослеОшибкиПомещенияФайлов", ЭтотОбъект), + ПараметрыЗагрузки, Контекст.ПомещаемыеФайлы); КонецПроцедуры @@ -5090,11 +5166,13 @@ Поля = Новый Структура; Адрес = ЮридическийАдресСтруктура; + СимволРазделения = СимволРазделенияЧастейИмениИлиЧастейФамилииИлиЧастейОтчестваВСертификате(); // Поле CN - общее имя (организация или индивидуальный предприниматель). Если ЭтоИндивидуальныйПредприниматель Тогда - ПолеОбщееИмя = СокрП(СтрЗаменить(Фамилия, " ", "_") + " " + СтрЗаменить(Имя, " ", "_") - + " " + СтрЗаменить(Отчество, " ", "_")); + ПолеОбщееИмя = СокрП(СтрЗаменить(Фамилия, " ", СимволРазделения) + + " " + СтрЗаменить(Имя, " ", СимволРазделения) + + " " + СтрЗаменить(Отчество, " ", СимволРазделения)); Иначе ПолеОбщееИмя = НаименованиеСокращенное; КонецЕсли; @@ -5102,12 +5180,14 @@ СписокПараметров.Добавить("2.5.4.3", Поля.CN); // Поле SN - фамилия должностного лица или индивидуального предпринимателя. - ПолеФамилия = СтрЗаменить(Фамилия, " ", "_"); + ПолеФамилия = СтрЗаменить(Фамилия, " ", СимволРазделения); Поля.Вставить("SN", Лев(ПолеФамилия, 64)); СписокПараметров.Добавить("2.5.4.4", Поля.SN); // Поле G - имя и отчество должностного лица или индивидуального предпринимателя. - ПолеОтчество = СокрП(СтрЗаменить(Имя, " ", "_") + " " + СтрЗаменить(Отчество, " ", "_")); + ПолеОтчество = СокрП(СтрЗаменить(Имя, " ", СимволРазделения) + + " " + СтрЗаменить(Отчество, " ", СимволРазделения)); + Поля.Вставить("G", Лев(ПолеОтчество, 64)); СписокПараметров.Добавить("2.5.4.42", Поля.G); @@ -5210,6 +5290,12 @@ КонецФункции +&НаКлиенте +Функция СимволРазделенияЧастейИмениИлиЧастейФамилииИлиЧастейОтчестваВСертификате() + + Возврат "_"; + +КонецФункции &НаКлиенте Функция ПредставлениеОшибкиДляПользователя(ИнформацияОбОшибке) @@ -5256,6 +5342,10 @@ СтандартнаяОбработка = Ложь; Криптография = Неопределено; + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить имя следующего контейнера ключей по причине: @@ -5268,6 +5358,10 @@ &НаКлиенте Процедура ПолучитьИменаКонтейнеровКлючейЦиклПослеВызоваПолучитьСледующийКонтейнерКлючей(Результат, ПараметрыВызова, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Контекст.Вставить("РезультатПослеВызоваПолучитьСледующийКонтейнерКлючей", Результат); Контекст.Вставить("ПараметрыВызоваПослеВызоваПолучитьСледующийКонтейнерКлючей", ПараметрыВызова); @@ -5280,6 +5374,10 @@ &НаКлиенте Процедура ПолучитьИменаКонтейнеровКлючейЦиклПослеВызоваПолучитьСледующийКонтейнерКлючейПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(СписокОшибок) Тогда ПолучитьИменаКонтейнеровКлючейЦиклПослеОшибкиВызоваПолучитьСледующийКонтейнерКлючей(СписокОшибок, Ложь, Контекст); Возврат; @@ -5336,7 +5434,7 @@ Контекст.Вставить("ОбработкаПродолжения", ОбработкаПродолжения); Контекст.Вставить("НазначениеВнешнейКомпонентыКриптографии", НазначениеВнешнейКомпонентыКриптографии); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами( + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами( Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст), НазначениеРасширенияДляРаботыСФайлами, @@ -5401,7 +5499,11 @@ &НаКлиенте Процедура СоздатьОбъектКриптографииПослеУстановкиНеВыводитьСообщенияОбОшибках(Контекст) Экспорт - ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки(); + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + + ПерсональныеНастройки = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки(); ПутиКПрограммам = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования; Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Объект.Программа)); @@ -5423,6 +5525,10 @@ СтандартнаяОбработка = Ложь; Криптография = Неопределено; + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + ПоказатьПредупреждение(Новый ОписаниеОповещения( "СоздатьОбъектКриптографииПослеПредупрежденияОбОшибке", ЭтотОбъект, Контекст), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -5436,6 +5542,10 @@ &НаКлиенте Процедура СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографии(Результат, ПараметрыВызова, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения( "СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографииПослеПолученияСписокОшибок", ЭтотОбъект, Контекст)); @@ -5445,6 +5555,10 @@ &НаКлиенте Процедура СоздатьОбъектКриптографииПослеВызоваСоздатьМенеджераКриптографииПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт + Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(СписокОшибок) Тогда СоздатьОбъектКриптографииПослеОшибкиВызоваСоздатьМенеджераКриптографии(СписокОшибок, Ложь, Контекст); Возврат; @@ -5483,4 +5597,21 @@ КонецПроцедуры +// Прекращение операции компоненты, если форма закрыта. +&НаКлиенте +Функция ВозможноПродолжениеПослеОперацииКомпоненты() + + Если Открыта() Тогда + Возврат Истина; + КонецЕсли; + + Криптография = Неопределено; + + ПоказатьПредупреждение(, + НСтр("ru = 'Заявление на выпуск сертификата было закрыто, операция отменена.'")); + + Возврат Ложь; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl index 770276a88..b61772729 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl @@ -1,7 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции +// Возвращает Истина, если в конфигурации используются все перечисленные подсистемы: +// 1. Подсистема Контактная информация - для работы с российскими адресами. +// 2. Подсистема Адресный классификатор - для получения кода региона по наименованию. +// 3. Подсистема Печать - для печатной формы заявления на выпуск сертификата. +// 4. Подсистема Интернет поддержка пользователей - для подключения к сервисам 1С. +// +// Возвращаемое значение: +// Булево +// +Функция ЗаявлениеНаВыпускСертификатаДоступно() Экспорт + Возврат ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") + И ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей"); +КонецФункции + Процедура ПриСозданииНаСервере(Объект, ОткрытьЗаявление) Экспорт Если ЗначениеЗаполнено(Объект.Ссылка) diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ИменаРегионовРФПоРекомендациямДляСКПЭП/Template.txt b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ИменаРегионовРФ/Template.txt similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ИменаРегионовРФПоРекомендациямДляСКПЭП/Template.txt rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ИменаРегионовРФ/Template.txt diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ЗаявлениеНаСертификатИндивидуальногоПредпринимателя/Template.mxlx b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ИндивидуальныйПредприниматель/Template.mxlx similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ЗаявлениеНаСертификатИндивидуальногоПредпринимателя/Template.mxlx rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ИндивидуальныйПредприниматель/Template.mxlx diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ЗаявлениеНаСертификатЮридическогоЛица/Template.mxlx b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ЮридическоеЛицо/Template.mxlx similarity index 100% rename from SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ЗаявлениеНаСертификатЮридическогоЛица/Template.mxlx rename to SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/ЮридическоеЛицо/Template.mxlx diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo index d95de0f76..2ddf0b9a9 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.mdo @@ -11,10 +11,10 @@ true - ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата + Форма ru - Заявление на выпуск нового квалифицированного сертификата + Форма @@ -25,21 +25,21 @@ MobileDevice - ЗаявлениеНаСертификатИндивидуальногоПредпринимателя + ИндивидуальныйПредприниматель ru - Заявление на сертификат индивидуального предпринимателя + Индивидуальный предприниматель - ЗаявлениеНаСертификатЮридическогоЛица + ЮридическоеЛицо ru - Заявление на сертификат юридического лица + Юридическое лицо - ИменаРегионовРФПоРекомендациямДляСКПЭП + ИменаРегионовРФ ru Имена регионов РФ по рекомендациям для СКПЭП diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl index a85a80b26..442c27c25 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Module.bsl index 20bf6f2ae..a927700fc 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ОбщиеПараметрыСинхронизации/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы // diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl index 5303b40a7..8a79a2357 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы // diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl index 6e45600f7..55fc71895 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы // @@ -78,7 +85,7 @@ Процедура СохранитьНастройку(Команда) Если ПустаяСтрока(ПредставлениеТекущейНастройки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru='Не заполнено имя для текущей настройки.'"), , "ПредставлениеТекущейНастройки"); Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl index 5446b7ffd..16086122e 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Необязательные параметры формы: // // УпрощенныйРежим - Булево - флаг того, что будет отчет будет формироваться в упрощенном виде. diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl index 8913e9654..6e6aab1cc 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -522,7 +529,6 @@ ЭтотОбъект(ЭтаОбработка); ЗаполнитьЗначенияСвойств(Объект, НеизменныеДанные); - ДополнениеВыгрузкиПредставлениеНастройки = ПредставлениеНастройки; СброситьНадписьКоличествТаблицы(); ОбновитьНадписьОбщегоКоличества(); diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl index 8ed8402de..bf178a916 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -1257,4 +1265,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Commands/ИнформацияПриЗапуске/CommandModule.bsl b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Commands/ИнформацияПриЗапуске/CommandModule.bsl index a3c62e761..0b46cdc51 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Commands/ИнформацияПриЗапуске/CommandModule.bsl +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Commands/ИнформацияПриЗапуске/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl index a79a1d5be..23ef4d265 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -63,7 +71,7 @@ КонецЕсли; ПросмотрСтраницы("ПоВнутреннейСсылке", ИмяОткрываемойСтраницы); Иначе - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(ИмяОткрываемойСтраницы); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(ИмяОткрываемойСтраницы); КонецЕсли; СтандартнаяОбработка = Ложь; КонецЕсли; @@ -108,7 +116,7 @@ ГлавнаяЗанята = Ложь; ИспользоватьКэшРегистра = Истина; - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() + Если ОбщегоНазначения.РежимОтладки() Или НРег(СтрЛевДоСимвола(ЭтотОбъект.ИмяФормы, ".")) = НРег("ВнешняяОбработка") Тогда ИспользоватьКэшРегистра = Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl index 08ab02875..9b55ebab6 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -96,7 +103,7 @@ ТекЭлемент = Элементы.КартаМаршрута.ТекущийЭлемент; Если Не ЗначениеЗаполнено(БизнесПроцесс) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Необходимо указать бизнес-процесс.'"),, "БизнесПроцесс"); Возврат; @@ -106,7 +113,7 @@ Или НЕ (ТипЗнч(ТекЭлемент) = Тип("ЭлементГрафическойСхемыДействие") Или ТипЗнч(ТекЭлемент) = Тип("ЭлементГрафическойСхемыВложенныйБизнесПроцесс")) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Для просмотра списка задач необходимо выбрать точку действия или вложенный бизнес-процесс карты маршрута.'"),, "КартаМаршрута"); Возврат; diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl index 8d4cd6a8f..7cfdcdd37 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -249,13 +257,25 @@ // Выполняет загрузку данных из файла сообщения обмена. // Данные загружаются в информационную базу. -// -Процедура ВыполнитьЗагрузкуДанных() Экспорт +// +// Параметры: +// ПараметрыЗагрузки - Структура, Неопределено - служебный параметр. Не предназначен для использования. +// +Процедура ВыполнитьЗагрузкуДанных(ПараметрыЗагрузки = Неопределено) Экспорт + + Если ПараметрыЗагрузки = Неопределено Тогда + ПараметрыЗагрузки = Новый Структура; + КонецЕсли; КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена("Получение"); КомпонентыОбмена.УзелКорреспондента = УзелОбменаЗагрузкаДанных; + ОбменДаннымиСВнешнейСистемой = Неопределено; + Если ПараметрыЗагрузки.Свойство("ОбменДаннымиСВнешнейСистемой", ОбменДаннымиСВнешнейСистемой) Тогда + КомпонентыОбмена.ОбменДаннымиСВнешнейСистемой = ОбменДаннымиСВнешнейСистемой; + КонецЕсли; + РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации; @@ -365,7 +385,7 @@ КонецЕсли; // Запись в журнале регистрации. - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(УзелОбменаЗагрузкаДанных)); ОбменДаннымиXDTOСервер.ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, КомпонентыОбмена, УровеньЖурналаРегистрации.Информация); @@ -392,7 +412,7 @@ ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Ложь); // Запись в журнале регистрации. - СтрокаСообщения = НСтр("ru = '%1, %2; Обработано %3 объектов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = '%1, %2; Обработано %3 объектов'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, @@ -585,6 +605,8 @@ #КонецОбласти +#Область СлужебныеПроцедурыИФункции + #Область Прочее Функция ИнициализацияТаблицыДанныхСообщенияОбмена(ТипОбъекта) @@ -636,6 +658,21 @@ КонецЕсли; Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + + Если КомпонентыОбмена.ОбменДаннымиСВнешнейСистемой Тогда + КодУзлаКорреспондента = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "Код")); + Если ЗначениеЗаполнено(КомпонентыОбмена.ИдентификаторКорреспондента) + И Не КодУзлаКорреспондента = КомпонентыОбмена.ИдентификаторКорреспондента Тогда + УзелКорреспондентаОбъект = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); + УзелКорреспондентаОбъект.Код = КомпонентыОбмена.ИдентификаторКорреспондента; + УзелКорреспондентаОбъект.ОбменДанными.Загрузка = Истина; + УзелКорреспондентаОбъект.Записать(); + + ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, + НСтр("ru = 'Изменен идентификатор узла корреспондента.'"), , Ложь, , , Истина); + КонецЕсли; + КонецЕсли; + ОбменДаннымиXDTOСервер.ОбновитьНастройкиXDTOКорреспондента(КомпонентыОбмена); ОбменДаннымиXDTOСервер.ОбновитьПрефиксКорреспондента(КомпонентыОбмена); @@ -724,10 +761,14 @@ #КонецОбласти +#КонецОбласти + #Область Инициализация Параметры = Новый Структура; #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index 34e87f692..56d87474d 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index 2fc9fb21e..c28c8a81d 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -736,8 +744,6 @@ УстановитьАтрибут(УзелСсылки, "НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике", НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике); КонецЕсли; - ВыгрузитьТолькоСсылку = ПКО.НеВыгружатьОбъектыСвойствПоСсылкам ИЛИ НЕВыгружатьПодчиненныеОбъекты; - Если ВыгружатьСвойстваОбъекта = Истина Тогда ВыгрузитьСвойства(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКО.СвойстваПоиска, @@ -1194,9 +1200,6 @@ Непериодический = НЕ Свойства.Периодический; ПодчиненныйРегистратору = Свойства.ПодчиненныйРегистратору; - - НеНужноОграничениеПоДатам = ВыборкаДляОчисткиДанных ИЛИ Непериодический; - Запрос = Новый Запрос(); ИтоговоеОграничениеПоДате = ""; @@ -1450,8 +1453,6 @@ ОпределитьПКОПоПараметрам(Правило, НаборЗаписейДляВыгрузки, ИмяПКО); - Отказ = Ложь; - Свойства = Неопределено; ПриоритетОбъектовОбмена = Правило.ПриоритетОбъектовОбмена; Если ТипЗнч(НаборЗаписейДляВыгрузки) = Тип("Структура") Тогда @@ -1474,7 +1475,7 @@ КоличествоЗаписейВРегистре = СтрокиНабораЗаписей.Количество(); СчетчикНПП = СчетчикНПП + 1; - НПП = СчетчикНПП; + НПП = СчетчикНПП; УстановитьАтрибут(Приемник, "Нпп", НПП); УстановитьАтрибут(Приемник, "Тип", СтрЗаменить(Правило.Приемник, "РегистрСведенийЗапись.", "РегистрСведенийНаборЗаписей.")); @@ -1563,8 +1564,7 @@ // // Параметры: // Приемник - xml-узел объекта приемника. -// Тип - Строка - выгружаемый тип. -// - Массив - содержит список выгружаемых строковых типов. +// Тип - Строка, Массив - выгружаемый одиночный тип, или список выгружаемых строковых типов. // СписокАтрибутов - Структура - Ключ содержит имя атрибута. // Процедура ВыгрузитьИнформациюОТипах(Приемник, Тип, СписокАтрибутов = Неопределено) Экспорт @@ -2338,7 +2338,6 @@ ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); КонецЕсли; - ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Ложь); Если ИспользоватьТранзакции Тогда ЗафиксироватьТранзакцию(); КонецЕсли; @@ -2367,7 +2366,6 @@ Если ОтложеннаяОбработкаОбъектов Тогда ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Ложь); КонецЕсли; - Если ЧтениеСообщения <> Неопределено И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда ЗаписатьВПротоколВыполнения(174,,,,,, @@ -2430,7 +2428,7 @@ СостояниеОбменаДанными().ДатаНачала = ТекущаяДатаСеанса(); // Запись в журнале регистрации. - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(УзелОбменаЗагрузкаДанных)); ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Информация); @@ -2445,7 +2443,7 @@ ЗафиксироватьЗавершениеЗагрузкиДанных(); // Запись в журнале регистрации. - СтрокаСообщения = НСтр("ru = '%1, %2; Обработано %3 объектов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = НСтр("ru = '%1, %2; Обработано %3 объектов'", ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, РезультатВыполненияОбмена(), Перечисления.ДействияПриОбмене.ЗагрузкаДанных, @@ -2956,7 +2954,6 @@ КонецЕсли; ПредставлениеКонфигурацииИсточника = ПредставлениеКонфигурацииИзПравилОбмена("Источника"); - ПредставлениеКонфигурацииПриемника = ПредставлениеКонфигурацииИзПравилОбмена("Приемника"); Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаИнформации, ПредставлениеКонфигурацииИсточника, @@ -4173,7 +4170,7 @@ Исключение ФайлПротоколаДанных = Неопределено; СтрокаСообщения = НСтр("ru = 'Ошибка при попытке записи в файл протокола данных: %1. Описание ошибки: %2'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяФайлаПротоколаОбмена, ОписаниеОшибки()); ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Предупреждение); КонецПопытки; @@ -4272,14 +4269,12 @@ Продолжить; КонецЕсли; Ключ = Поле.Ключ; - Стр = Стр + Символы.ПС + Отступ + Символы.Таб + одДополнитьСтроку(Поле.Ключ, Выравнивание) + " = " + Строка(Значение); + Стр = Стр + Символы.ПС + Отступ + Символы.Таб + одДополнитьСтроку(Ключ, Выравнивание) + " = " + Строка(Значение); КонецЦикла; КонецЕсли; - ЛитералПеревода = ?(ПустаяСтрока(СтрокаСообщенияОбОшибке()), "", Символы.ПС); - ПолеСтрокаСообщенияОбОшибке = Стр; Если ВзвестиФлагОшибок Тогда @@ -6075,8 +6070,6 @@ ТаблицаПравилВыгрузки.Очистить(); - СтрокаНастройки = Неопределено; - Пока ПравилаОбмена.Прочитать() Цикл ИмяУзла = ПравилаОбмена.ЛокальноеИмя; @@ -6982,7 +6975,6 @@ СвойстваМД = Менеджеры[Тип]; ИмяТипа = СвойстваМД.ИмяТипа; Менеджер = СвойстваМД.Менеджер; - ПометкаУдаления = Неопределено; Если ИмяТипа = "Справочник" ИЛИ ИмяТипа = "ПланВидовХарактеристик" Тогда @@ -8166,7 +8158,6 @@ Если ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD Тогда СсылкаНаОбъект = СтруктураСвойств.Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(СвойствоУникальныйИдентификатор)); - СсылкаНаОбъектФиктивная = Истина; ИначеЕсли НЕ НеСоздаватьОбъектЕслиНеНайден Тогда @@ -9439,7 +9430,6 @@ // отложенная запись объектов Объект = СтрокаДанных.Значение.Объект; - НППСсылки = СтрокаДанных.Ключ; Если СтрокаДанных.Значение.АвтоматическиГенерироватьКод = Истина Тогда @@ -11875,7 +11865,7 @@ КонецЕсли; Если ЗначениеЗаполнено(СтекВыгрузкиОбъекта) Тогда - ОтветвлениеСтекаВыгрузки = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(СтекВыгрузкиОбъекта); + ОтветвлениеСтекаВыгрузки = ОбщегоНазначения.СкопироватьРекурсивно(СтекВыгрузкиОбъекта); Иначе ОтветвлениеСтекаВыгрузки = Новый Массив; КонецЕсли; @@ -12555,7 +12545,7 @@ Попытка СтруктураРеквизитовРегистрации.Вставить(ПКС.Источник); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Загрузка правил конвертации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Загрузка правил конвертации'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -13215,7 +13205,7 @@ Попытка ОбработкаВыгрузки.ОтключитьОбработкуДляОтладки(); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ОбработкаВыгрузки = Неопределено; @@ -13225,7 +13215,7 @@ Попытка ОбработкаЗагрузки.ОтключитьОбработкуДляОтладки(); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -13563,8 +13553,6 @@ ПараметрыИнициализированы = Ложь; - ВестиДополнительныйКонтрольЗаписиВXML = Ложь; - Менеджеры = Неопределено; СообщенияОбОшибках = Неопределено; @@ -15354,7 +15342,7 @@ Попытка УдалитьФайлы(ИмяВременногоФайлаПравилОбмена); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -15394,7 +15382,6 @@ Исключение СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(75, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиПравилОбмена (конвертация)'")); - Отказ = Истина; Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; @@ -16216,7 +16203,7 @@ Если НомерПринятого >= ЧтениеСообщения.НомерСообщения Тогда // Номер сообщения меньше либо равен ранее принятому. - ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); + ЧтениеСообщенияВременное = ОбщегоНазначения.СкопироватьРекурсивно(ЧтениеСообщения, Ложь); ЧтениеСообщенияВременное.СообщениеБылоПринятоРанее = Истина; ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); @@ -16251,7 +16238,7 @@ ЧтениеСообщения.ОтправительОбъект.ОбменДанными.Загрузка = Истина; ЧтениеСообщения.ОтправительОбъект.Записать(); - ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); + ЧтениеСообщенияВременное = ОбщегоНазначения.СкопироватьРекурсивно(ЧтениеСообщения, Ложь); ЧтениеСообщенияВременное.ОтправительОбъект = ЧтениеСообщения.Отправитель.ПолучитьОбъект(); ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); КонецЕсли; @@ -16319,7 +16306,7 @@ ОбщийУзел.Записать(); // Обновляем повторно используемые значения механизма. - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); ЗафиксироватьТранзакцию(); Исключение @@ -16353,7 +16340,7 @@ Если ЧтениеСообщения <> Неопределено И ОбщийУзел.Ссылка = ЧтениеСообщения.Отправитель Тогда - ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); + ЧтениеСообщенияВременное = ОбщегоНазначения.СкопироватьРекурсивно(ЧтениеСообщения, Ложь); ЧтениеСообщенияВременное.ОтправительОбъект = ЧтениеСообщения.Отправитель.ПолучитьОбъект(); ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); КонецЕсли; @@ -17115,7 +17102,7 @@ КонецЕсли; // Обновляем повторно используемые значения МРО. - ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.ПроверитьКэшМеханизмаРегистрацииОбъектов(); НачальнаяВыгрузкаДанных = ОбменДаннымиСервер.УстановленПризнакНачальнойВыгрузкиДанных(ЗаписьСообщения.Получатель); @@ -17125,8 +17112,6 @@ ОбъектМетаданныхПредыдущий = Неопределено; ПравилоВыгрузкиДанныхПредыдущее = Неопределено; ПравилоВыгрузкиДанных = Неопределено; - НомерФайлаВыгрузки = 0; - СтрокаФайла = Неопределено; ВыгружаетсяРегистр = Ложь; ВыгружаютсяКонстанты = Ложь; @@ -17479,8 +17464,8 @@ #КонецОбласти - #КонецОбласти + #Область Инициализация ИнициализацияРеквизитовИМодульныхПеременных(); @@ -17492,4 +17477,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl index 34e87f692..56d87474d 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index fbad74c43..5bce4237a 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -21,8 +29,8 @@ ЗагрузитьМетаданные = ЗагрузитьТолькоПараметры И ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() - И (ОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() - ИЛИ НЕ ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + И (ОбменДаннымиСлужебный.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() + Или Не ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "СообщениеПолученоИзКэша")); РезультатАнализаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатАнализаДанныхКЗагрузке(ИмяФайлаСообщенияОбмена(), Ложь, Истина); @@ -263,8 +271,7 @@ УстановитьПривилегированныйРежим(Ложь); Попытка - - ОбменДаннымиВызовСервера.ОчиститьПриоритетныеДанныеОбмена(); + ОбменДаннымиСлужебный.ОчиститьПриоритетныеДанныеОбмена(); // Записываем изменения конфигурации и изменения данных в сообщение обмена. ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, КоличествоЭлементовВТранзакции); @@ -294,7 +301,7 @@ Если ЗаписьСообщения.Получатель <> ПланыОбмена.ГлавныйУзел() Тогда // Выгружаем приоритетные данные обмена (предопределенные элементы). - ПриоритетныеДанныеОбмена = ОбменДаннымиВызовСервера.ПриоритетныеДанныеОбмена(); + ПриоритетныеДанныеОбмена = ОбменДаннымиСлужебный.ПриоритетныеДанныеОбмена(); Если ПриоритетныеДанныеОбмена.Количество() > 0 Тогда @@ -445,7 +452,7 @@ Если ЗначениеЗаполнено(ДублиПредопределенных) Тогда ЗаписьЖурналаРегистрации( НСтр("ru = 'Предопределенные элементы.Найдены не уникальные записи.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -748,25 +755,25 @@ Функция ОшибкаОткрытияФайлаСообщенияОбмена() - Возврат НСтр("ru = 'Ошибка открытия файла сообщения обмена'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Ошибка открытия файла сообщения обмена'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция ОшибкаНачалаЧтенияФайлаСообщенияОбмена() - Возврат НСтр("ru = 'Ошибка при начале чтения файла сообщения обмена'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Ошибка при начале чтения файла сообщения обмена'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция ОшибкаНачалаЗаписиФайлаСообщенияОбмена() - Возврат НСтр("ru = 'Ошибка при начале записи файла сообщения обмена'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Ошибка при начале записи файла сообщения обмена'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции Функция ОшибкаЧтенияФайлаСообщенияОбмена() - Возврат НСтр("ru = 'Ошибка чтения файла сообщения обмена'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Ошибка чтения файла сообщения обмена'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -778,10 +785,12 @@ Функция ОшибкаВидаОбменаДанными() - Возврат НСтр("ru = 'Обмен не по правилам конвертации не поддерживается'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Обмен не по правилам конвертации не поддерживается'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form index c96b81700..a2d1d3d37 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form @@ -42,77 +42,24 @@ - ПодтверждениеВыбора - 3 - true - true - - true - - - ПодтверждениеВыбора - - true - None - - ПодтверждениеВыбораExtendedTooltip - 10 - Label - true - true - - Left - - - - ПодтверждениеВыбораКонтекстноеМеню - 4 - true - - RadioButtonField - Enter - true - Left - true - - 1 - 1 - - - ru - Я подтверждаю легальность получения обновления в соответствии с вышеизложенными условиями - - - 1 - - - - - ru - Я НЕ подтверждаю легальность получения обновления в соответствии с вышеизложенными условиями - - - 2 - - - Vertical - - - - Примечание - 6 + ПодтверждениеБулево + 28 <key>ru</key> - <value> (работа программы будет завершена)</value> + <value>Я подтверждаю легальность получения обновления в соответствии с вышеизложенными условиями</value> true true true + + ПодтверждениеБулево + + Right - ПримечаниеExtendedTooltip - 11 + ПодтверждениеБулевоРасширеннаяПодсказка + 30 Label true true @@ -121,15 +68,16 @@ - ПримечаниеКонтекстноеМеню - 7 + ПодтверждениеБулевоКонтекстноеМеню + 29 true - Label - true - - Left - + CheckBoxField + Enter + true + Left + true + ГруппаОтправкаСтатистики @@ -150,7 +98,12 @@ РазрешитьОтправкуСтатистики Right - None + + ru + Собранные сведения включают в себя только технические характеристики работы программы, +Отчеты об использовании программы помогают нам определить, над чем следует поработать в первую очередь. Вы можете в любой момент отключить отправку технических отчетов. + + Button РазрешитьОтправкуСтатистикиРасширеннаяПодсказка 14 @@ -181,15 +134,13 @@ 15 <key>ru</key> - <value>Собранные сведения включают в себя только технические характеристики работы программы, являются -обезличенными и не содержат информации о пользователях или бизнес-информации.</value> + <value>Собранные сведения включают в себя только технические характеристики работы программы, являются обезличенными и не содержат информации о пользователях или бизнес-информации.</value> true true true - Button ДекорацияПояснениеРасширеннаяПодсказка 17 @@ -210,6 +161,7 @@ true Label + 80 true Style.ПоясняющийТекст @@ -219,7 +171,6 @@ Top - true true true @@ -302,11 +253,13 @@ Form.Command.Продолжить - Auto true true true UserCmds + + StdPicture.WriteAndClose + Auto Right @@ -366,27 +319,6 @@ true
              - - ПодтверждениеВыбора - - <key>ru</key> - <value>Подтверждение выбора</value> - - 3 - - Number - - 2 - true - - - - true - - - true - - Результат @@ -455,6 +387,19 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ПодтверждениеБулево</name> + <id>8</id> + <valueType> + <types>Boolean</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </attributes> <formCommands> <name>Продолжить</name> <title> diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl index 55129272e..2d473d982 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -19,8 +26,6 @@ "УсловияРаспространенияОбновлений"); ТекстПредупреждения = МакетДокумента.ПолучитьТекст(); - ПодтверждениеВыбора = 0; // Пользователю требуется явно выбрать один из вариантов. - Элементы.Примечание.Видимость = Параметры.ПоказыватьПредупреждениеОПерезапуске; ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); // СтандартныеПодсистемы.ЦентрМониторинга @@ -34,26 +39,23 @@ Элементы.ГруппаОтправкаСтатистики.Видимость = Истина; Иначе РазрешитьОтправкуСтатистики = Истина; - Элементы.ГруппаОтправкаСтатистики.Видимость = Ложь; + Элементы.ГруппаОтправкаСтатистики.Видимость = Ложь; КонецЕсли; Иначе Элементы.ГруппаОтправкаСтатистики.Видимость = Ложь; КонецЕсли; // Конец СтандартныеПодсистемы.ЦентрМониторинга + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + Элементы.ФормаПродолжить.Отображение = ОтображениеКнопки.Картинка; + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - #Если МобильныйКлиент Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Для корректной работы необходим режим толстого, тонкого или ВЕБ-клиента.'")); - Отказ = Истина; - Возврат; - - #КонецЕсли - Если ИнформационнаяБазаФайловая И СтрНайти(ПараметрЗапуска, "ВыполнитьОбновлениеИЗавершитьРаботу") > 0 Тогда @@ -72,7 +74,7 @@ &НаКлиенте Процедура ОсновныеДействияФормыПродолжить(Команда) - Результат = ПодтверждениеВыбора = 1; + Результат = ПодтверждениеБулево; Если Результат <> Истина Тогда Если Параметры.ПоказыватьПредупреждениеОПерезапуске И НЕ ПропуститьПерезапуск Тогда diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl index 48fb78c11..94b1b1ae0 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Commands/НастройкиИспользованияПрофилейБезопасности/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl index b372321f7..d24367564 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl index 2d89f8e5e..43b99376b 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -211,7 +219,7 @@ Задание.Отменить(); Исключение // Возможно задание как раз в этот момент закончилось и ошибки нет. - ЗаписьЖурналаРегистрации(НСтр("ru = 'Настройка разрешений на использование внешних ресурсов.Отмена выполнения фонового задания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Настройка разрешений на использование внешних ресурсов.Отмена выполнения фонового задания'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl index 553df6d76..b9c344fce 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -127,13 +135,13 @@ ИмяПоля = "АдминистраторИБ"; ПользовательИБ = ПолучитьАдминистратораИБ(); Если ПользовательИБ = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Указанный пользователь не имеет доступа к информационной базе.'"),, + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Указанный пользователь не имеет доступа к информационной базе.'"),, ИмяПоля,,Отказ); Возврат; КонецЕсли; Если Не Пользователи.ЭтоПолноправныйПользователь(ПользовательИБ, Истина) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'У пользователя нет административных прав.'"),, + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'У пользователя нет административных прав.'"),, ИмяПоля,,Отказ); Возврат; КонецЕсли; @@ -262,33 +270,7 @@ &НаКлиенте Процедура ПрименитьРазрешения() - ПараметрыПрименения = НачатьПрименениеЗапросов(АдресХранилища); - - ВидыОпераций = ПараметрыПрименения.ВидыОпераций; - Сценарий = ПараметрыПрименения.СценарийПримененияЗапросов; - ТребуютсяПараметрыАдминистрированияИБ = ПараметрыПрименения.ТребуютсяПараметрыАдминистрированияИнформационнойБазы; - - ПараметрыАдминистрированияКластера = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(); - ПараметрыАдминистрированияКластера.ТипПодключения = ТипПодключения; - ПараметрыАдминистрированияКластера.АдресАгентаСервера = АдресАгентаСервера; - ПараметрыАдминистрированияКластера.ПортАгентаСервера = ПортАгентаСервера; - ПараметрыАдминистрированияКластера.АдресСервераАдминистрирования = АдресСервераАдминистрирования; - ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования = ПортСервераАдминистрирования; - ПараметрыАдминистрированияКластера.ПортКластера = ПортКластераСерверов; - ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера = ИмяАдминистратораКластера; - ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера = ПарольАдминистратораКластера; - - Если ТребуютсяПараметрыАдминистрированияИБ Тогда - ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(); - ПараметрыАдминистрированияИБ.ИмяВКластере = ИмяВКластере; - ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы = ИмяПользователяИнформационнойБазы(АдминистраторИБ); - ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы = ПарольАдминистратораИБ; - Иначе - ПараметрыАдминистрированияИБ = Неопределено; - КонецЕсли; - - НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент.ПрименитьИзмененияРазрешенийВПрофиляхБезопасностиВКластереСерверов( - ВидыОпераций, Сценарий, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + ПрименитьРазрешенияНаСервере(АдресХранилища); КонецПроцедуры @@ -347,4 +329,119 @@ КонецПроцедуры +&НаСервере +Процедура ПрименитьРазрешенияНаСервере(АдресХранилища) + + ПараметрыПрименения = НачатьПрименениеЗапросов(АдресХранилища); + + ВидыОпераций = ПараметрыПрименения.ВидыОпераций; + Сценарий = ПараметрыПрименения.СценарийПримененияЗапросов; + ТребуютсяПараметрыАдминистрированияИБ = ПараметрыПрименения.ТребуютсяПараметрыАдминистрированияИнформационнойБазы; + + ПараметрыАдминистрированияКластера = АдминистрированиеКластера.ПараметрыАдминистрированияКластера(); + ПараметрыАдминистрированияКластера.ТипПодключения = ТипПодключения; + ПараметрыАдминистрированияКластера.АдресАгентаСервера = АдресАгентаСервера; + ПараметрыАдминистрированияКластера.ПортАгентаСервера = ПортАгентаСервера; + ПараметрыАдминистрированияКластера.АдресСервераАдминистрирования = АдресСервераАдминистрирования; + ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования = ПортСервераАдминистрирования; + ПараметрыАдминистрированияКластера.ПортКластера = ПортКластераСерверов; + ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера = ИмяАдминистратораКластера; + ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера = ПарольАдминистратораКластера; + + Если ТребуютсяПараметрыАдминистрированияИБ Тогда + ПараметрыАдминистрированияИБ = АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(); + ПараметрыАдминистрированияИБ.ИмяВКластере = ИмяВКластере; + ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы = ИмяПользователяИнформационнойБазы(АдминистраторИБ); + ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы = ПарольАдминистратораИБ; + Иначе + ПараметрыАдминистрированияИБ = Неопределено; + КонецЕсли; + + ПрименитьИзмененияРазрешенийВПрофиляхБезопасностиВКластереСерверов( + ВидыОпераций, Сценарий, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Применение запросов разрешений на использование внешних ресурсов. +// + +// Применяет изменения разрешений в профилях безопасности в кластере серверов по сценарию. +// +// Параметры: +// ВидыОпераций - Структура, описывающая значения перечисления ОперацииАдминистрированияПрофилейБезопасности: +// * Ключ - Строка - имя значения перечисления, +// * Значение - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности, +// СценарийПримененияРазрешений - Массив(Структура) - сценарий применения изменений разрешений на +// использование профилей безопасности в кластере серверов. Значениями массива являются структуры +// со следующими полями: +// * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности - операция, которую +// требуется выполнить, +// * Профиль - Строка, имя профиля безопасности, +// * Разрешения - Структура - описание свойств профиля безопасности, см. +// АдминистрированиеКластера.СвойстваПрофиляБезопасности(), +// ПараметрыАдминистрированияКластера - Структура - параметры администрирования кластера серверов, см. +// АдминистрированиеКластера.ПараметрыАдминистрированияКластера(), +// ПараметрыАдминистрированияИнформационнойБазы - Структура - параметры администрирования информационной +// базы, см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера(). +// +&НаСервереБезКонтекста +Процедура ПрименитьИзмененияРазрешенийВПрофиляхБезопасностиВКластереСерверов(Знач ВидыОпераций, Знач СценарийПримененияРазрешений, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы = Неопределено) + + ТребуютсяПараметрыАдминистрированияИБ = (ПараметрыАдминистрированияИнформационнойБазы <> Неопределено); + + АдминистрированиеКластера.ПроверитьПараметрыАдминистрирования( + ПараметрыАдминистрированияКластера, + ПараметрыАдминистрированияИнформационнойБазы, + Истина, + ТребуютсяПараметрыАдминистрированияИБ); + + Для Каждого ЭлементСценария Из СценарийПримененияРазрешений Цикл + + Если ЭлементСценария.Операция = ВидыОпераций.Создание Тогда + + Если АдминистрированиеКластера.ПрофильБезопасностиСуществует(ПараметрыАдминистрированияКластера, ЭлементСценария.Профиль) Тогда + + ОбщегоНазначения.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Профиль безопасности %1 уже присутствует в кластере серверов. Настройки в профиле безопасности будут замещены...'"), ЭлементСценария.Профиль)); + + АдминистрированиеКластера.УстановитьСвойстваПрофиляБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Разрешения); + + Иначе + + АдминистрированиеКластера.СоздатьПрофильБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Разрешения); + + КонецЕсли; + + ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.Назначение Тогда + + АдминистрированиеКластера.УстановитьПрофильБезопасностиИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИнформационнойБазы, ЭлементСценария.Профиль); + + ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.Обновление Тогда + + АдминистрированиеКластера.УстановитьСвойстваПрофиляБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Разрешения); + + ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.Удаление Тогда + + Если АдминистрированиеКластера.ПрофильБезопасностиСуществует(ПараметрыАдминистрированияКластера, ЭлементСценария.Профиль) Тогда + + АдминистрированиеКластера.УдалитьПрофильБезопасности(ПараметрыАдминистрированияКластера, ЭлементСценария.Профиль); + + Иначе + + ОбщегоНазначения.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Профиль безопасности %1 отсутствует в кластере серверов. Возможно, профиль безопасности был удален ранее...'"), ЭлементСценария.Профиль)); + + КонецЕсли; + + ИначеЕсли ЭлементСценария.Операция = ВидыОпераций.УдалениеНазначения Тогда + + АдминистрированиеКластера.УстановитьПрофильБезопасностиИнформационнойБазы(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИнформационнойБазы, ""); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl index d0552ab5e..c52e7c2a9 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl index 50830cc62..a193548b7 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ОткрытиеВнешнейОбработкиИлиОтчетаСВыборомБезопасногоРежима/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -19,20 +27,20 @@ Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) Если Не ЗначениеЗаполнено(ФайлОбработкиИмя) Или Не ЗначениеЗаполнено(ФайлОбработкиАдрес) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Укажите файл внешнего отчета или обработки.'"),, + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Укажите файл внешнего отчета или обработки.'"),, "ФайлОбработкиИмя"); Отказ = Истина; Иначе СвойстваФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ФайлОбработкиИмя); Если НРег(СвойстваФайла.Расширение) <> НРег(".epf") И НРег(СвойстваФайла.Расширение) <> НРег(".erf") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Выбранный файл не является внешним отчетом или обработкой.'"),, + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Выбранный файл не является внешним отчетом или обработкой.'"),, "ФайлОбработкиИмя"); Отказ = Истина; КонецЕсли; КонецЕсли; Если Не ЗначениеЗаполнено(БезопасныйРежим) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Укажите безопасный режим для подключения внешнего модуля.'"),, + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Укажите безопасный режим для подключения внешнего модуля.'"),, "БезопасныйРежим"); Отказ = Истина; КонецЕсли; @@ -41,7 +49,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовУправленияФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ФайлОбработкиИмяНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Module.bsl index edc8e6bab..be3a2553a 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/Форма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index a8738e52a..6f4c31591 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Базовая функциональность". // Серверные процедуры и функции общего назначения: diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl index 1103aed34..d933a92d9 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда //////////////////////////////////////////////////////////////////////////////// @@ -307,7 +315,7 @@ Отбор.Вставить("ТипВладельца", ТипВладельца); Отбор.Вставить("ИдентификаторВладельца", ИдентификаторВладельца); - СтрокаЗамещения = Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.СтрокаТаблицыРазрешений( + Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.СтрокаТаблицыРазрешений( ПланПримененияЗапросов.Замещаемые, Отбор); КонецЕсли; @@ -381,14 +389,8 @@ // Процедура РассчитатьПрименениеЗапросов() Экспорт - ВнешняяТранзакция = ТранзакцияАктивна(); - - Если Не ВнешняяТранзакция Тогда - НачатьТранзакцию(); - КонецЕсли; - + НачатьТранзакцию(); Попытка - Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ЗаблокироватьРегистрыПредоставленныхРазрешений(); ИсходныйСрезРазрешенийВРазрезеВладельцев = РегистрыСведений.РазрешенияНаИспользованиеВнешнихРесурсов.СрезРазрешений(); @@ -399,18 +401,10 @@ РассчитатьРезультатПримененияЗапросовБезУчетаВладельцев(); РассчитатьДельтуБезУчетаВладельцев(); - Если Не ВнешняяТранзакция Тогда - ОтменитьТранзакцию(); - КонецЕсли; - + ОтменитьТранзакцию(); Исключение - - Если Не ВнешняяТранзакция Тогда - ОтменитьТранзакцию(); - КонецЕсли; - + ОтменитьТранзакцию(); ВызватьИсключение; - КонецПопытки; Если ТребуетсяПрименениеРазрешенийВКластереСерверов() Тогда @@ -418,8 +412,9 @@ Попытка ЗаблокироватьДанныеДляРедактирования(Семафор()); Исключение - ВызватьИсключение НСтр("ru = 'Ошибка конкурентного доступа к настройке разрешений на использование внешних ресурсов. - |Попробуйте выполнить операцию позже.'"); + ВызватьИсключение + НСтр("ru = 'Ошибка конкурентного доступа к настройке разрешений на использование внешних ресурсов. + |Попробуйте выполнить операцию позже.'"); КонецПопытки; КонецЕсли; @@ -498,7 +493,7 @@ // * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности, // * Профиль - Строка - имя профиля безопасности, // * Разрешения - Структура - см. -// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// АдминистрированиеКластера.СвойстваПрофиляБезопасности(). // Функция СценарийПрименения() Экспорт @@ -598,7 +593,6 @@ Процедура ЗавершитьПрименениеЗапросовНаИспользованиеВнешнихРесурсов() Экспорт НачатьТранзакцию(); - Попытка Если ТребуетсяЗаписьРазрешенийВРегистр() Тогда @@ -697,12 +691,9 @@ РазблокироватьДанныеДляРедактирования(Семафор()); ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); ВызватьИсключение; - КонецПопытки; КонецПроцедуры @@ -822,12 +813,12 @@ Для Каждого КлючИЗначение Из СтрокаРезультата.Разрешения Цикл ИсходноеРазрешение = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(КлючИЗначение.Значение); - ИсходноеРазрешение.Description = ""; // Описания не должны влиять на хэш-суммы для варианта без учета владельцев. - + // Описания не должны влиять на хэш-суммы для варианта без учета владельцев. + ОписаниеРазрешения = ИсходноеРазрешение.Description; + ИсходноеРазрешение.Description = ""; КлючРазрешения = РегистрыСведений.РазрешенияНаИспользованиеВнешнихРесурсов.КлючРазрешения(ИсходноеРазрешение); Разрешение = Строка.Разрешения.Получить(КлючРазрешения); - Если Разрешение = Неопределено Тогда Если СтрокаРезультата.Тип = "FileSystemAccess" Тогда @@ -840,35 +831,27 @@ Если ИсходноеРазрешение.AllowedWrite Тогда // Выполним поиск разрешения на использование того же каталога, но только для чтения. - КопияРазрешения = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(ОбщегоНазначения.ОбъектXDTOВСтрокуXML(ИсходноеРазрешение)); КопияРазрешения.AllowedWrite = Ложь; КлючКопии = РегистрыСведений.РазрешенияНаИспользованиеВнешнихРесурсов.КлючРазрешения(КопияРазрешения); + // Удалим вложенное разрешение, после добавления текущего оно будет не нужно. ВложенноеРазрешение = Строка.Разрешения.Получить(КлючКопии); - Если ВложенноеРазрешение <> Неопределено Тогда - - // Удалим вложенное разрешение, после добавления текущего оно будет не нужно. Строка.Разрешения.Удалить(КлючКопии); - КонецЕсли; Иначе // Выполним поиск разрешения на использование того же каталога, но в т.ч. и для записи. - КопияРазрешения = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(ОбщегоНазначения.ОбъектXDTOВСтрокуXML(ИсходноеРазрешение)); КопияРазрешения.AllowedWrite = Истина; КлючКопии = РегистрыСведений.РазрешенияНаИспользованиеВнешнихРесурсов.КлючРазрешения(КопияРазрешения); + // Обрабатывать это разрешение не требуется, каталог будет разрешен за счет объемлющего. ОбъемлющееРазрешение = Строка.Разрешения.Получить(КлючКопии); - Если ОбъемлющееРазрешение <> Неопределено Тогда - - // Обрабатывать это разрешение не требуется, каталог будет разрешен за счет объемлющего. Продолжить; - КонецЕсли; КонецЕсли; @@ -877,6 +860,7 @@ КонецЕсли; + ИсходноеРазрешение.Description = ОписаниеРазрешения; Строка.Разрешения.Вставить(КлючРазрешения, ОбщегоНазначения.ОбъектXDTOВСтрокуXML(ИсходноеРазрешение)); Дополнение = СтрокаРезультата.ДополненияРазрешений.Получить(КлючИЗначение.Ключ); @@ -1116,11 +1100,11 @@ // ТипПрограммногоМодуля - СправочникСсылка.ИдентификаторыОбъектовМетаданных, // ИдентификаторПрограммногоМодуля - УникальныйИдентификатор. // -// Возвращаемое значение: Структура - см. АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// Возвращаемое значение: Структура - см. АдминистрированиеКластера.СвойстваПрофиляБезопасности(). // Функция ПрофильВНотацииИнтерфейсаАдминистрированияКластера(Знач ИмяПрофиля, Знач ТипПрограммногоМодуля, Знач ИдентификаторПрограммногоМодуля) - Профиль = АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(); + Профиль = АдминистрированиеКластера.СвойстваПрофиляБезопасности(); Профиль.Имя = ИмяПрофиля; Профиль.Описание = НовоеОписаниеПрофиляБезопасности(ТипПрограммногоМодуля, ИдентификаторПрограммногоМодуля); Профиль.ПрофильБезопасногоРежима = Истина; @@ -1150,7 +1134,7 @@ Если СтандартныеВиртуальныеКаталоги().Получить(Разрешение.Path) <> Неопределено Тогда - ВиртуальныйКаталог = АдминистрированиеКластераКлиентСервер.СвойстваВиртуальногоКаталога(); + ВиртуальныйКаталог = АдминистрированиеКластера.СвойстваВиртуальногоКаталога(); ВиртуальныйКаталог.ЛогическийURL = Разрешение.Path; ВиртуальныйКаталог.ФизическийURL = СтандартныеВиртуальныеКаталоги().Получить(Разрешение.Path); ВиртуальныйКаталог.ЧтениеДанных = Разрешение.AllowedRead; @@ -1160,7 +1144,7 @@ Иначе - ВиртуальныйКаталог = АдминистрированиеКластераКлиентСервер.СвойстваВиртуальногоКаталога(); + ВиртуальныйКаталог = АдминистрированиеКластера.СвойстваВиртуальногоКаталога(); ВиртуальныйКаталог.ЛогическийURL = Разрешение.Path; ВиртуальныйКаталог.ФизическийURL = ЭкранироватьСимволПроцент(Разрешение.Path); ВиртуальныйКаталог.ЧтениеДанных = Разрешение.AllowedRead; @@ -1172,7 +1156,7 @@ ИначеЕсли Строка.Тип = "CreateComObject" Тогда - COMКласс = АдминистрированиеКластераКлиентСервер.СвойстваCOMКласса(); + COMКласс = АдминистрированиеКластера.СвойстваCOMКласса(); COMКласс.Имя = Разрешение.ProgId; COMКласс.CLSID = Разрешение.CLSID; COMКласс.Компьютер = Разрешение.ComputerName; @@ -1184,7 +1168,7 @@ Дополнение = ОбщегоНазначения.ЗначениеИзСтрокиXML(Строка.ДополненияРазрешений.Получить(КлючИЗначение.Ключ)); Для Каждого КлючИЗначениеДополнения Из Дополнение Цикл - ВнешнийКомпонент = АдминистрированиеКластераКлиентСервер.СвойстваВнешнейКомпоненты(); + ВнешнийКомпонент = АдминистрированиеКластера.СвойстваВнешнейКомпоненты(); ВнешнийКомпонент.Имя = Разрешение.TemplateName + "\" + КлючИЗначениеДополнения.Ключ; ВнешнийКомпонент.ХэшСумма = КлючИЗначениеДополнения.Значение; ВнешнийКомпонент.Описание = Разрешение.Description; @@ -1194,7 +1178,7 @@ ИначеЕсли Строка.Тип = "ExternalModule" Тогда - ВнешнийМодуль = АдминистрированиеКластераКлиентСервер.СвойстваВнешнегоМодуля(); + ВнешнийМодуль = АдминистрированиеКластера.СвойстваВнешнегоМодуля(); ВнешнийМодуль.Имя = Разрешение.Name; ВнешнийМодуль.ХэшСумма = Разрешение.Hash; ВнешнийМодуль.Описание = Разрешение.Description; @@ -1202,7 +1186,7 @@ ИначеЕсли Строка.Тип = "RunApplication" Тогда - ПриложениеОС = АдминистрированиеКластераКлиентСервер.СвойстваПриложенияОС(); + ПриложениеОС = АдминистрированиеКластера.СвойстваПриложенияОС(); ПриложениеОС.Имя = Разрешение.CommandMask; ПриложениеОС.ШаблонСтрокиЗапуска = Разрешение.CommandMask; ПриложениеОС.Описание = Разрешение.Description; @@ -1210,7 +1194,7 @@ ИначеЕсли Строка.Тип = "InternetResourceAccess" Тогда - ИнтернетРесурс = АдминистрированиеКластераКлиентСервер.СвойстваИнтернетРесурса(); + ИнтернетРесурс = АдминистрированиеКластера.СвойстваИнтернетРесурса(); ИнтернетРесурс.Имя = НРег(Разрешение.Protocol) + "://" + НРег(Разрешение.Host) + ":" + Разрешение.Port; ИнтернетРесурс.Протокол = Разрешение.Protocol; ИнтернетРесурс.Адрес = Разрешение.Host; @@ -1355,4 +1339,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl index a62261287..4c8723ff6 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -14,11 +22,11 @@ Возврат; КонецЕсли; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда ВызватьИсключение НСтр("ru = 'Резервное копирование и восстановление данных необходимо настроить средствами операционной системы или другими сторонними средствами.'"); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если ОбщегоНазначения.ЭтоВебКлиент() Тогда ВызватьИсключение НСтр("ru = 'Резервное копирование недоступно в веб-клиенте.'"); КонецЕсли; @@ -178,7 +186,7 @@ Процедура ПерейтиСоСтраницыНастройки() ПараметрыРезервногоКопированияИБ = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"]; - ТекущийПользователь = ПользователиКлиентСервер.ТекущийПользователь(); + ТекущийПользователь = ПользователиКлиент.ТекущийПользователь(); Если Объект.ВыполнятьАвтоматическоеРезервноеКопирование Тогда @@ -186,38 +194,56 @@ Возврат; КонецЕсли; - РезультатПодключения = РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ); - Если РезультатПодключения.ОшибкаПодключенияКомпоненты Тогда - Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ДополнительныеНастройки; - ОбнаруженнаяОшибкаПодключения = РезультатПодключения.КраткоеОписаниеОшибки; - Возврат; - КонецЕсли; + Контекст = Новый Структура; + Контекст.Вставить("ПараметрыРезервногоКопированияИБ", ПараметрыРезервногоКопированияИБ); + Контекст.Вставить("ТекущийПользователь", ТекущийПользователь); - ЗаписатьНастройки(ТекущийПользователь); - - Если Объект.ВариантВыполнения = "ПоРасписанию" Тогда - ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); - ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = ТекущаяДата; - ПараметрыРезервногоКопированияИБ.ДатаПоследнегоРезервногоКопирования = ТекущаяДата; - ПараметрыРезервногоКопированияИБ.РасписаниеЗначение = Расписание; - ИначеЕсли Объект.ВариантВыполнения = "ПриЗавершенииРаботы" Тогда - ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; - КонецЕсли; - - РезервноеКопированиеИБКлиент.ПодключитьОбработчикОжиданияРезервногоКопирования(); - - ИмяФормыНастроек = "e1cib/app/Обработка.НастройкаРезервногоКопированияИБ/"; - - ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование'"), ИмяФормыНастроек, - НСтр("ru = 'Резервное копирование настроено.'")); - - Иначе - - ОстановитьСервисОповещения(ТекущийПользователь); - РезервноеКопированиеИБКлиент.ОтключитьОбработчикОжиданияРезервногоКопирования(); - ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; + Оповещение = Новый ОписаниеОповещения( + "ПерейтиСоСтраницыНастройкиПослеПроверкиДоступаКИнформационнойБазе", ЭтотОбъект, Контекст); + РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ, Оповещение); + Возврат; КонецЕсли; + + ОстановитьСервисОповещения(ТекущийПользователь); + РезервноеКопированиеИБКлиент.ОтключитьОбработчикОжиданияРезервногоКопирования(); + ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; + ПараметрыРезервногоКопированияИБ.ПараметрОповещения = "НеОповещать"; + + ОбновитьПовторноИспользуемыеЗначения(); + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиСоСтраницыНастройкиПослеПроверкиДоступаКИнформационнойБазе(РезультатПодключения, Контекст) Экспорт + + ПараметрыРезервногоКопированияИБ = Контекст.ПараметрыРезервногоКопированияИБ; + ТекущийПользователь = Контекст.ТекущийПользователь; + + Если РезультатПодключения.ОшибкаПодключенияКомпоненты Тогда + Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ДополнительныеНастройки; + ОбнаруженнаяОшибкаПодключения = РезультатПодключения.КраткоеОписаниеОшибки; + Возврат; + КонецЕсли; + + ЗаписатьНастройки(ТекущийПользователь); + + Если Объект.ВариантВыполнения = "ПоРасписанию" Тогда + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = ТекущаяДата; + ПараметрыРезервногоКопированияИБ.ДатаПоследнегоРезервногоКопирования = ТекущаяДата; + ПараметрыРезервногоКопированияИБ.РасписаниеЗначение = Расписание; + ИначеЕсли Объект.ВариантВыполнения = "ПриЗавершенииРаботы" Тогда + ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; + КонецЕсли; + + РезервноеКопированиеИБКлиент.ПодключитьОбработчикОжиданияРезервногоКопирования(); + + ИмяФормыНастроек = "e1cib/app/Обработка.НастройкаРезервногоКопированияИБ/"; + + ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование'"), ИмяФормыНастроек, + НСтр("ru = 'Резервное копирование настроено.'")); ПараметрыРезервногоКопированияИБ.ПараметрОповещения = "НеОповещать"; @@ -231,7 +257,7 @@ #Если ВебКлиент ИЛИ МобильныйКлиент Тогда ТекстСообщения = НСтр("ru = 'Для корректной работы необходим режим тонкого или толстого клиента.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); РеквизитыЗаполнены = Ложь; #Иначе РеквизитыЗаполнены = Истина; @@ -239,13 +265,13 @@ Если ПустаяСтрока(Объект.КаталогСРезервнымиКопиями) Тогда ТекстСообщения = НСтр("ru = 'Не выбран каталог для резервной копии.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); РеквизитыЗаполнены = Ложь; ИначеЕсли НайтиФайлы(Объект.КаталогСРезервнымиКопиями).Количество() = 0 Тогда ТекстСообщения = НСтр("ru = 'Указан несуществующий каталог.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); РеквизитыЗаполнены = Ложь; Иначе @@ -257,7 +283,7 @@ ТестовыйФайл.Закрыть(); Исключение ТекстСообщения = НСтр("ru = 'Нет доступа к каталогу с резервными копиями.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); РеквизитыЗаполнены = Ложь; КонецПопытки; @@ -276,7 +302,7 @@ Если ТребуетсяВводПароля И ПустаяСтрока(ПарольАдминистратораИБ) Тогда ТекстСообщения = НСтр("ru = 'Не задан пароль администратора.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "ПарольАдминистратораИБ"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "ПарольАдминистратораИБ"); РеквизитыЗаполнены = Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Module.bsl index 4327a5a38..c4413a32e 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Module.bsl @@ -1,14 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если ОбщегоНазначения.ЭтоВебКлиент() Тогда ВызватьИсключение НСтр("ru = 'Резервное копирование недоступно в веб-клиенте.'"); КонецЕсли; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда Возврат; // Отказ устанавливается в ПриОткрытии(). КонецЕсли; @@ -20,7 +27,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда Отказ = Истина; ТекстСообщения = НСтр("ru = 'Резервное копирование поддерживается только в клиенте под управлением ОС Windows.'"); ПоказатьПредупреждение(, ТекстСообщения); diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/ManagerModule.bsl index a08835a2f..683863360 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/ManagerModule.bsl @@ -1,5 +1,14 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область ОбработчикиПодписокНаСобытия +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -16,4 +25,6 @@ КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl index 1b0c0575b..2c00bcb85 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -14,7 +22,7 @@ Возврат; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Отказ = Истина; ВызватьИсключение НСтр("ru = 'Для корректной работы необходим режим толстого, тонкого или ВЕБ-клиента.'"); diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl index 08432fa97..33ba7adb2 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -14,10 +22,10 @@ Возврат; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Отказ = Истина; - ВызватьИсключение НСтр("ru = 'Для корректной работы необходим режим толстого, тонкого или ВЕБ-клиента.'"); + ВызватьИсключение НСтр("ru = 'Для корректной работы необходим режим толстого, или тонкого клиента.'"); КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl index 310cd07b4..751656636 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl @@ -1,8 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда СтандартнаяОбработка = Ложь; УстановитьПривилегированныйРежим(Истина); @@ -26,17 +35,13 @@ ВыбраннаяФорма = "НастройкаБезИнтервалов"; Иначе -#КонецЕсли ВызватьИсключение(НСтр("ru = 'Менеджер сервиса не поддерживает резервное копирование приложений'")); -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда КонецЕсли; -#КонецЕсли КонецПроцедуры -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Функция ПолучитьВерсииWebСервиса() Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса( @@ -46,6 +51,7 @@ "ZoneBackupControl"); КонецФункции -#КонецЕсли #КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl index af4f4c883..522dce38c 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl index 096250a60..e916f6046 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl index d7cb702d9..7fdbb25da 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form index 8c9b24e09..9b554b412 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form @@ -1787,6 +1787,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>НастройкиОтчетов</name> <title> diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl index 2532453c8..905263ee8 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -261,12 +268,12 @@ Функция ОбновлениеСпискаНастроек() Если РезультатВыполнения <> Неопределено - И РезультатВыполнения.ИдентификаторЗадания <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда + И ЗначениеЗаполнено(РезультатВыполнения.ИдентификаторЗадания) Тогда ДлительныеОперации.ОтменитьВыполнениеЗадания(РезультатВыполнения.ИдентификаторЗадания); КонецЕсли; Если ПоискНастроек Тогда - ПомеченныеЭлементыДерева(); + ЗаполнитьПомеченныеЭлементыДерева(); КонецЕсли; ПараметрыДлительнойОперации = ПараметрыДлительнойОперации(); @@ -566,7 +573,7 @@ КонецПроцедуры &НаСервере -Функция ПомеченныеЭлементыДерева() +Процедура ЗаполнитьПомеченныеЭлементыДерева() НастройкиОтчетовДерево = РеквизитФормыВЗначение("НастройкиОтчетов"); ВнешнийВидДерево = РеквизитФормыВЗначение("ВнешнийВид"); @@ -594,7 +601,7 @@ КонецЕсли; -КонецФункции +КонецПроцедуры &НаСервере Функция ПараметрыДлительнойОперации() diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form index a4de35d1b..59d5f905d 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form @@ -1073,6 +1073,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>СписокПользователей</name> <title> diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl index f9c981220..efb617820 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -124,6 +131,10 @@ Элементы.ГруппаПоказыватьПользователейДочернихГрупп.Видимость = Ложь; КонецЕсли; +#Если МобильныйКлиент Тогда + Элементы.СписокПользователей.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; +#КонецЕсли + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl index 870179d14..f8e8dbcff 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -218,19 +225,19 @@ ОчиститьСообщения(); Если ПользовательСсылка = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите пользователя, чьи настройки необходимо скопировать.'"), , "ПользовательСсылка"); Возврат; КонецЕсли; Если КоличествоПользователей = 0 И ПереключательКомуКопироватьНастройки <> "ВсемПользователям" Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите одного или несколько пользователей, которым необходимо скопировать настройки.'"), , "Приемник"); Возврат; КонецЕсли; Если ПереключательКопируемыеНастройки = "СкопироватьОтдельные" И КоличествоНастроек = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите настройки, которые необходимо скопировать.'"), , "ПереключательКопируемыеНастройки"); Возврат; КонецЕсли; @@ -488,8 +495,6 @@ &НаСервере Функция КопированиеВсехНастроек() - Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСсылка); - Если ПереключательКомуКопироватьНастройки = "ВыбраннымПользователям" Тогда Приемники = ПользователиПолучателиНастроек.МассивПользователей; Иначе diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form index afe83a47d..f469ab2bd 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form @@ -1203,6 +1203,7 @@ <searchStringLocation>None</searchStringLocation> <viewStatusLocation>None</viewStatusLocation> <searchControlLocation>None</searchControlLocation> + <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> </items> <visible>true</visible> @@ -1685,6 +1686,7 @@ <searchStringLocation>None</searchStringLocation> <viewStatusLocation>None</viewStatusLocation> <searchControlLocation>None</searchControlLocation> + <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> </items> <visible>true</visible> @@ -2163,6 +2165,7 @@ <searchStringLocation>None</searchStringLocation> <viewStatusLocation>None</viewStatusLocation> <searchControlLocation>None</searchControlLocation> + <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> </items> <visible>true</visible> @@ -2618,6 +2621,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Объект</name> <id>1</id> diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl index 21f4d98e9..6705c7748 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -464,8 +472,7 @@ Функция ОбновлениеСпискаНастроек() Если РезультатВыполнения <> Неопределено - И РезультатВыполнения.ИдентификаторЗадания <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда - + И ЗначениеЗаполнено(РезультатВыполнения.ИдентификаторЗадания) Тогда ДлительныеОперации.ОтменитьВыполнениеЗадания(РезультатВыполнения.ИдентификаторЗадания); КонецЕсли; @@ -525,7 +532,6 @@ Процедура РассчитатьКоличествоНастроек() СписокНастроек = НастройкиОтчетов.ПолучитьЭлементы(); - КоличествоНастроек = КоличествоНастроекВДереве(СписокНастроек); Если КоличествоНастроек <> 0 Тогда @@ -536,7 +542,6 @@ Элементы.НастройкиОтчетовСтраница.Заголовок = НСтр("ru = 'Настройки отчетов'"); КонецЕсли; - КоличествоНастроекОтчетов = КоличествоНастроек; СписокНастроек = ВнешнийВид.ПолучитьЭлементы(); КоличествоНастроек = КоличествоНастроекВДереве(СписокНастроек); @@ -548,7 +553,6 @@ Элементы.ВнешнийВидСтраница.Заголовок = НСтр("ru = 'Внешний вид'"); КонецЕсли; - КоличествоНастроекВнешнегоВида = КоличествоНастроек; СписокНастроек = ПрочиеНастройки.ПолучитьЭлементы(); КоличествоНастроек = КоличествоНастроекВДереве(СписокНастроек); @@ -560,9 +564,6 @@ Элементы.ПрочиеНастройкиСтраница.Заголовок = НСтр("ru = 'Прочие настройки'"); КонецЕсли; - КоличествоПрочихНастроек = КоличествоНастроек; - ВсегоНастроек = КоличествоПрочихНастроек + КоличествоНастроекОтчетов; - КонецПроцедуры &НаСервере diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl index 1f6b0d990..331c9b079 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -218,7 +225,7 @@ Если ПереключательКомуОчищатьНастройки = "ВыбраннымПользователям" И КоличествоПользователей = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите пользователя или пользователей, |которым необходимо очистить настройки.'"), , "Источник"); Возврат Ложь; @@ -241,7 +248,7 @@ Если ПереключательОчищаемыеНастройки = "ОтдельныеНастройки" И КоличествоНастроек = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите настройки, которые необходимо очистить.'"), , "ПереключательОчищаемыеНастройки"); Возврат Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl index e10c008ef..dc9e8034c 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl index 42a2740e0..f0c043782 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -325,7 +333,6 @@ ПрочиеНастройкиПользователей = Новый Структура; ПользователиСлужебный.ПриПолученииПрочихНастроекПользователя(СведенияОПользователе, ПрочиеНастройкиПользователей); Ключи = Новый СписокЗначений; - МассивПрочихНастроек = Новый Массив; Если ПрочиеНастройкиПользователей.Количество() <> 0 Тогда Для Каждого ПрочаяНастройка Из ПрочиеНастройкиПользователей Цикл @@ -614,7 +621,7 @@ Если МенеджерНастроек = ХранилищеПользовательскихНастроекОтчетов Или МенеджерНастроек = ХранилищеВариантовОтчетов Тогда - МассивДоступныхОтчетов = ОтчетыДоступныеПользователю(ПользовательПриемникИБ); + МассивДоступныхОтчетов = ОтчетыДоступныеПользователю(ПользовательПриемникИБ, ПользовательПриемник); КлючОтчета = СтрРазделить(КлючОбъекта, "/", Ложь); Если МассивДоступныхОтчетов.Найти(КлючОтчета[0]) = Неопределено Тогда @@ -690,7 +697,7 @@ ПользовательПриемникИБ = ИмяПользователяИБ(ПользовательПриемник); Если МенеджерНастроек = ХранилищеПользовательскихНастроекОтчетов Тогда - МассивДоступныхОтчетов = ОтчетыДоступныеПользователю(ПользовательПриемникИБ); + МассивДоступныхОтчетов = ОтчетыДоступныеПользователю(ПользовательПриемникИБ, ПользовательПриемник); КлючОтчета = СтрРазделить(КлючОбъекта, "/", Ложь); Если МассивДоступныхОтчетов.Найти(КлючОтчета[0]) = Неопределено Тогда @@ -1009,7 +1016,7 @@ Запрос.Параметры.Вставить("ПользовательИсточник", ПользовательИсточник); Запрос.Параметры.Вставить("НеуказанныйПользователь", Пользователи.СсылкаНеуказанногоПользователя()); Запрос.Параметры.Вставить("ПустойУникальныйИдентификатор", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); Если Очистка Тогда Запрос.Текст = ТекстЗапросаСпискаВсехПользователей(Ложь, Очистка) @@ -1235,19 +1242,25 @@ // Возвращаемое значение: // Результат - Массив - ключи отчетов, доступных переданному пользователю. // -Функция ОтчетыДоступныеПользователю(ПользовательПриемник) +Функция ОтчетыДоступныеПользователю(ИмяПользователяИБ, ПользовательСсылка) Результат = Новый Массив; УстановитьПривилегированныйРежим(Истина); - ПользовательИнформационнойБазы = ПользователиИнформационнойБазы.НайтиПоИмени(ПользовательПриемник); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователяИБ); Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл - Если ПравоДоступа("Просмотр", ОтчетМетаданные, ПользовательИнформационнойБазы) Тогда + Если ПравоДоступа("Просмотр", ОтчетМетаданные, ПользовательИБ) Тогда Результат.Добавить("Отчет." + ОтчетМетаданные.Имя); КонецЕсли; КонецЦикла; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриДобавленииДополнительныхОтчетовДоступныхУказанномуПользователю(Результат, + ПользовательИБ, ПользовательСсылка); + КонецЕсли; + Возврат Результат; КонецФункции @@ -1639,24 +1652,20 @@ ТаблицаВариантовОтчетов.Колонки.Добавить("Представление"); ТаблицаВариантовОтчетов.Колонки.Добавить("СтандартнаяОбработка"); - ДоступныеОтчеты = ОтчетыДоступныеПользователю(ТекущийПользовательИБ); + ДоступныеОтчеты = ОтчетыДоступныеПользователю(ТекущийПользовательИБ, ТекущийПользователь); - Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл + Для Каждого ПолноеИмяОтчета Из ДоступныеОтчеты Цикл СтандартнаяОбработка = Истина; - Если ДоступныеОтчеты.Найти("Отчет." + ОтчетМетаданные.Имя) = Неопределено Тогда - Продолжить; - КонецЕсли; - - ИнтеграцияПодсистемБСП.ПриПолученииПользовательскихВариантовОтчетов(ОтчетМетаданные, + ИнтеграцияПодсистемБСП.ПриПолученииПользовательскихВариантовОтчетов(ПолноеИмяОтчета, ПользовательИнформационнойБазы, ТаблицаВариантовОтчетов, СтандартнаяОбработка); Если СтандартнаяОбработка Тогда - ВариантыОтчета = ХранилищеВариантовОтчетов.ПолучитьСписок("Отчет." + ОтчетМетаданные.Имя, ПользовательИнформационнойБазы); + ВариантыОтчета = ХранилищеВариантовОтчетов.ПолучитьСписок(ПолноеИмяОтчета, ПользовательИнформационнойБазы); Для Каждого ВариантОтчета Из ВариантыОтчета Цикл СтрокаВариантовОтчетов = ТаблицаВариантовОтчетов.Добавить(); - СтрокаВариантовОтчетов.КлючОбъекта = "Отчет." + ОтчетМетаданные.Имя; + СтрокаВариантовОтчетов.КлючОбъекта = ПолноеИмяОтчета; СтрокаВариантовОтчетов.КлючВарианта = ВариантОтчета.Значение; СтрокаВариантовОтчетов.Представление = ВариантОтчета.Представление; СтрокаВариантовОтчетов.СтандартнаяОбработка = Истина; diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/НастройкаОтправкиОтчетовОбОшибках/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/НастройкаОтправкиОтчетовОбОшибках/CommandModule.bsl index def0f5ad7..2fca83c55 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/НастройкаОтправкиОтчетовОбОшибках/CommandModule.bsl +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/НастройкаОтправкиОтчетовОбОшибках/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/ПроблемыПроизводительности/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/ПроблемыПроизводительности/CommandModule.bsl index d365ae99e..fc694229b 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/ПроблемыПроизводительности/CommandModule.bsl +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Commands/ПроблемыПроизводительности/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаОтправкуОтчетовОбОшибках/Module.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаОтправкуОтчетовОбОшибках/Module.bsl index 39399a723..f7396ee10 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаОтправкуОтчетовОбОшибках/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаОтправкуОтчетовОбОшибках/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -76,7 +83,7 @@ // Пользователь не хочет, чтобы его спрашивали и вообще не хочет ничего отправлять. Если Ответ.НеСпрашиватьБольше Тогда НовыеПараметры.Вставить("ОтправлятьФайлыДампов", 0); - НовыеПараметры.Вставить("РезультатОтправки", Нстр("ru = 'Пользователь отказал в предоставлении полных дампов.'")); + НовыеПараметры.Вставить("РезультатОтправки", НСтр("ru = 'Пользователь отказал в предоставлении полных дампов.'")); // Согласовывать больше нечего, очищаем параметры. НовыеПараметры.Вставить("ИнформацияОДампах", ""); НовыеПараметры.Вставить("ВариантыДампов", Новый Соответствие); diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Module.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Module.bsl index 1fc87f1a7..aa7425748 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ЗапросНаСборИОтправкуОтчетовОбОшибках/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиКомандФормы @@ -17,7 +24,7 @@ &НаКлиенте Процедура Нет(Команда) НовыеПараметры = Новый Структура("ОтправлятьФайлыДампов", 0); - НовыеПараметры.Вставить("РезультатОтправки", Нстр("ru = 'Пользователь отказал в предоставлении полных дампов.'")); + НовыеПараметры.Вставить("РезультатОтправки", НСтр("ru = 'Пользователь отказал в предоставлении полных дампов.'")); УстановитьПараметрыЦентраМониторинга(НовыеПараметры); Закрыть(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Module.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Module.bsl index 35b8d95ef..91c3dedd8 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/НастройкиЦентраМониторинга/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -9,7 +16,6 @@ Если Параметры.Свойство("ИдентификаторЗадания") Тогда ИдентификаторЗадания = Параметры.ИдентификаторЗадания; АдресРезультатаЗадания = Параметры.АдресРезультатаЗадания; - ВывестиРезультатПолученияИдентификатора = Истина; Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда СостояниеЗаданияПолученияИдентификатора = ЗаданиеВыполнено(ИдентификаторЗадания); КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl index 709f19ea6..57d78951a 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl @@ -1,4 +1,10 @@ - +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -69,16 +75,16 @@ РезультатПроверки = Истина; Если ПоЗапросу Тогда Если ПустаяСтрока(Контакты)Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не указана контактная информация.'"),,"Контакты"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не указана контактная информация.'"),,"Контакты"); РезультатПроверки = Ложь; КонецЕсли; Иначе Если ПустаяСтрока(Контакты)Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не указана контактная информация.'"),,"Контакты"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не указана контактная информация.'"),,"Контакты"); РезультатПроверки = Ложь; КонецЕсли; Если ПустаяСтрока(Комментарий)Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнен комментарий.'"),,"Комментарий"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не заполнен комментарий.'"),,"Комментарий"); РезультатПроверки = Ложь; КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl index 576ff52fb..a0af2d15e 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl index f5f06d8f7..edfc7de06 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/ПорядокОбновленияПлатформы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -27,7 +34,7 @@ Процедура ПорядокОбновленияПрограммыПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) Если ДанныеСобытия.Href <> Неопределено Тогда СтандартнаяОбработка = Ложь; - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(ДанныеСобытия.Href); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(ДанныеСобытия.Href); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ИмпортЗамеровПроизводительности/CommandModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ИмпортЗамеровПроизводительности/CommandModule.bsl index 2e2439855..7e72adbc5 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ИмпортЗамеровПроизводительности/CommandModule.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ИмпортЗамеровПроизводительности/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/НастройкиОценкиПроизводительности/CommandModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/НастройкиОценкиПроизводительности/CommandModule.bsl index 41a3d5571..48c35653a 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/НастройкиОценкиПроизводительности/CommandModule.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/НастройкиОценкиПроизводительности/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ПодборЦелевогоВремени/CommandModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ПодборЦелевогоВремени/CommandModule.bsl new file mode 100644 index 000000000..b66ae4d21 --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ПодборЦелевогоВремени/CommandModule.bsl @@ -0,0 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ПараметрыОткрытия = Новый Структура("КлючеваяОперация", ПараметрКоманды); + ОткрытьФорму("Обработка.ОценкаПроизводительности.Форма.ПодборЦелевогоВремениКлючевойОперации", ПараметрыОткрытия); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ЭкспортЗамеровПроизводительности/CommandModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ЭкспортЗамеровПроизводительности/CommandModule.bsl index 114e6116d..57427bf7f 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ЭкспортЗамеровПроизводительности/CommandModule.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Commands/ЭкспортЗамеровПроизводительности/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl index 6e0f24d83..61ce9e00d 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -68,12 +76,12 @@ Если ЕстьБСП Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьКаталогЭкспортаПредложено", ЭтотОбъект); - МодульОбщегоНазначения = Вычислить("ОбщегоНазначенияКлиент"); - Если ТипЗнч(МодульОбщегоНазначения) = Тип("ОбщийМодуль") Тогда - МодульОбщегоНазначения.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения); + МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); + Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда + МодульФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); КонецЕсли; КонецЕсли; - + КонецПроцедуры &НаСервере @@ -89,7 +97,7 @@ Если Выполнять И ПустаяСтрока(СокрЛП(ЭтотОбъект[ПутьЭлемент.ПутьКДанным])) Тогда СообщениеТекст = НСтр("ru = 'Поле ""%1"" не заполнено'"); СообщениеТекст = СтрЗаменить(СообщениеТекст, "%1", ПутьЭлемент.Заголовок); - ОценкаПроизводительностиКлиентСервер.СообщитьПользователю( + ОценкаПроизводительностиСлужебный.СообщитьПользователю( СообщениеТекст, , ПутьЭлемент.Имя, @@ -169,7 +177,7 @@ ВыборФайла.Заголовок = НСтр("ru = 'Выбор каталога экспорта'"); ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораКаталогаЗавершение", ЭтотОбъект, Неопределено); - ВыборФайла.Показать(ОписаниеОповещения); + ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ВыборФайла); КонецЕсли; @@ -287,7 +295,7 @@ КонецПроцедуры &НаКлиенте -Функция ПроверитьРазрешенияНаДоступКВнешнимРесурсам(ЗакрытьФорму) +Процедура ПроверитьРазрешенияНаДоступКВнешнимРесурсам(ЗакрытьФорму) Если ВнешниеРесурсыРазрешены <> Истина Тогда Если ЗакрытьФорму Тогда @@ -327,7 +335,7 @@ СохранитьНаСервере(); КонецЕсли; -КонецФункции +КонецПроцедуры &НаСервереБезКонтекста Функция ЗапросНаИспользованиеВнешнихРесурсов(Каталоги) diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl index d872af341..c3b9be4e6 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -26,7 +33,7 @@ ВыборФайла.Фильтр = "Файлы импорта замеров (*.zip)|*.zip"; ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораФайлаЗавершение", ЭтотОбъект, Неопределено); - ВыборФайла.Показать(ОписаниеОповещения); + ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ВыборФайла); КонецЕсли; @@ -37,9 +44,9 @@ Если ЕстьБСП Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьФайлаИмпортаПредложено", ЭтотОбъект, Неопределено); - МодульОбщегоНазначения = Вычислить("ОбщегоНазначенияКлиент"); - Если ТипЗнч(МодульОбщегоНазначения) = Тип("ОбщийМодуль") Тогда - МодульОбщегоНазначения.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения); + МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); + Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда + МодульФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl index b04276a7b..db8524034 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Form.form new file mode 100644 index 000000000..a5a0b1311 --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Form.form @@ -0,0 +1,538 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <title> + <key>ru</key> + <value>Подбор целевого времени</value> + + + Период + 1 + true + true + + true + + + Период + + + ПериодРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПериодКонтекстноеМеню + 2 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + КлючеваяОперация + 4 + true + true + + true + + + КлючеваяОперация + + + КлючеваяОперацияРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + КлючеваяОперацияКонтекстноеМеню + 5 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ТекущийApdex + 7 + true + true + + true + + + ТекущийAPDEX + + + ru + Значение APDEX, подобранное по субъективной оценке пользователя + + + ТекущийApdexРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ТекущийApdexКонтекстноеМеню + 8 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + КоличествоЗамеров + 20 + true + true + + true + + + КоличествоЗамеров + + + КоличествоЗамеровРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + КоличествоЗамеровКонтекстноеМеню + 21 + true + + LabelField + Enter + true + Left + true + + 7 + true + true + + + + ЦелевоеВремя + 14 + true + true + + true + + + ЦелевоеВремя + + + ru + Целевое время, рассчитанные на основе указанных параметров + + + ЦелевоеВремяРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ЦелевоеВремяКонтекстноеМеню + 15 + true + + InputField + true + Enter + true + Left + true + + 7 + true + true + true + true + true + true + Normal + + + + РасчетныйAPDEX + 17 + true + true + + true + + + РасчетныйAPDEX + + + РасчетныйAPDEXРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + РасчетныйAPDEXКонтекстноеМеню + 18 + true + + LabelField + Enter + true + Left + true + + 7 + true + true + + + + ДиаграммаЗамеровВремени + 23 + + <key>ru</key> + <value>Замеры времени</value> + + true + true + + true + + + ДиаграммаЗамеровВремени + + + ДиаграммаЗамеровВремениРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ДиаграммаЗамеровВремениКонтекстноеМеню + 24 + true + + ChartField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаПодобратьЦелевоеВремя + 10 + true + true + + true + + + ФормаПодобратьЦелевоеВремяРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.ПодобратьЦелевоеВремя + Auto + true + true + true + UserCmds + Auto + + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ОценкаПроизводительности + + + true + + + true + +
              true
              +
              + + Период + + <key>ru</key> + <value>Период</value> + + 2 + + StandardPeriod + + + true + + + true + + + Период + + + + КлючеваяОперация + + <key>ru</key> + <value>Ключевая операция</value> + + 3 + + CatalogRef.КлючевыеОперации + + + true + + + true + + + КлючеваяОперация + + + + ТекущийAPDEX + + <key>ru</key> + <value>Текущий APDEX</value> + + 4 + + Number + + 4 + 3 + true + + + + true + + + true + + + ТекущийAPDEX + + + + ЦелевоеВремя + + <key>ru</key> + <value>Целевое время</value> + + 5 + + Number + + 10 + 3 + true + + + + true + + + true + + + + РасчетныйAPDEX + + <key>ru</key> + <value>Расчетный APDEX</value> + + 6 + + Number + + 4 + 3 + true + + + + true + + + true + + + + КоличествоЗамеров + + <key>ru</key> + <value>Количество замеров</value> + + 7 + + Number + + 10 + true + + + + true + + + true + + + + ДиаграммаЗамеровВремени + + <key>ru</key> + <value>Диаграмма замеров времени</value> + + 8 + + Chart + + + true + + + true + + + + + ПодобратьЦелевоеВремя + + <key>ru</key> + <value>Подобрать целевое время</value> + + 1 + + ru + Подобрать целевое время + + + true + + + + ПодобратьЦелевоеВремя + + + Auto + Auto + + + + + + +
              diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Help/ru.html new file mode 100644 index 000000000..dc5abd9d1 --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Help/ru.html @@ -0,0 +1,24 @@ + +

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

              +

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

              +

              Далее необходимо соотнести качественную оценку со значением APDEX в соответствии с таблицей.

              + + + + + + + + + + + + +
              +

              Шкала APDEX

              +

              Значение

              +

              Оценка

              +

              от

              +

              до

              0.000.50неприемлемо
              0.500.70очень плохо
              0.700.85плохо
              0.850.94хорошо
              0.941.00отлично


              +

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

              +

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

              \ 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..ba6677c7e --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Module.bsl @@ -0,0 +1,258 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Параметры.Свойство("КлючеваяОперация", КлючеваяОперация); + Если Не ЗначениеЗаполнено(Период.ДатаНачала) Тогда + Период.ДатаНачала = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -3); + КонецЕсли; + Если Не ЗначениеЗаполнено(Период.ДатаОкончания) Тогда + Период.ДатаОкончания = НачалоДня(ТекущаяДатаСеанса()); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПодобратьЦелевоеВремя(Команда) + РезультатПроверки = ПроверкаЗаполнения(); + Если РезультатПроверки Тогда + + ПараметрыПодбора = Новый Структура; + ПараметрыПодбора.Вставить("КлючеваяОперация", КлючеваяОперация); + ПараметрыПодбора.Вставить("ДатаНачала", Период.ДатаНачала); + ПараметрыПодбора.Вставить("ДатаОкончания", Период.ДатаОкончания); + ПараметрыПодбора.Вставить("ЦелевойAPDEX", ТекущийAPDEX); + РезультатПодбора = ПодборЦелевоеВремяНаСервере(ПараметрыПодбора); + Если РезультатПодбора.Свойство("ОписаниеОшибки") Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = РезультатПодбора.ОписаниеОшибки; + Сообщение.Сообщить(); + Возврат; + КонецЕсли; + РасчетныйAPDEX = РезультатПодбора.РасчетныйAPDEX; + КоличествоЗамеров = РезультатПодбора.КоличествоЗамеров; + ЦелевоеВремя = РезультатПодбора.ЦелевоеВремя; + + ДиаграммаЗамеровВремени.ТипДиаграммы = ТипДиаграммы.График; + ДиаграммаЗамеровВремени.ОбластьПостроения.ШкалаЗначений.ТекстЗаголовка = НСтр("ru = 'Количество замеров, шт'"); + ДиаграммаЗамеровВремени.Очистить(); + Серия = ДиаграммаЗамеровВремени.Серии.Добавить("Время выполнения, с"); + Для Каждого Замер Из РезультатПодбора.Замеры Цикл + Для Каждого Запись Из Замер Цикл + Точка = ДиаграммаЗамеровВремени.Точки.Добавить(Запись.Ключ); + Точка.Текст = Формат(Запись.Ключ, "ЧН=0"); + ДиаграммаЗамеровВремени.УстановитьЗначение(Точка, Серия, Запись.Значение); + КонецЦикла; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Функция ПроверкаЗаполнения() + Успешно = Истина; + Если КлючеваяОперация.Пустая() Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = НСтр("ru = 'Не указана ключевая операция.'"); + Сообщение.Поле = "КлючеваяОперация"; + Сообщение.Сообщить(); + Успешно = Ложь; + КонецЕсли; + Если Не ЗначениеЗаполнено(ТекущийApdex) Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = НСтр("ru = 'Не указан текущий APDEX.'"); + Сообщение.Поле = "ТекущийApdex"; + Сообщение.Сообщить(); + Успешно = Ложь; + КонецЕсли; + Если Не ЗначениеЗаполнено(Период.ДатаНачала) Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = НСтр("ru = 'Не указана дата начала периода.'"); + Сообщение.Поле = "Период"; + Сообщение.Сообщить(); + Успешно = Ложь; + КонецЕсли; + Если Не ЗначениеЗаполнено(Период.ДатаОкончания) Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = НСтр("ru = 'Не указана дата окончания периода.'"); + Сообщение.Поле = "Период"; + Сообщение.Сообщить(); + Успешно = Ложь; + КонецЕсли; + Возврат Успешно; +КонецФункции + +&НаСервереБезКонтекста +Функция ПодборЦелевоеВремяНаСервере(ПараметрыПодбора) + + РезультатПодбора = Новый Структура; + РезультатПодбора.Вставить("Замеры", Новый Массив); + РезультатПодбора.Вставить("КоличествоЗамеров", 0); + РезультатПодбора.Вставить("ЦелевоеВремя", 0); + РезультатПодбора.Вставить("РасчетныйAPDEX", 0); + Минимум = 0; + Максимум = 0; + ДопустимаяРазница = 0.01; + МаксимальноеКоличествоИтераций = 1000; + Счетчик = 0; + МВТ = Новый МенеджерВременныхТаблиц; + + + Запрос = Новый Запрос("ВЫБРАТЬ + | Замеры.ВремяВыполнения КАК ВремяВыполнения, + | 1 КАК КоличествоЗамеров + |ПОМЕСТИТЬ ЗамерыОперации + |ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + |ГДЕ + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + | И Замеры.КлючеваяОперация = &КлючеваяОперация + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЕСТЬNULL(МАКСИМУМ(ЗамерыОперации.ВремяВыполнения), 0) КАК МАКСИМУМВремяВыполнения, + | ЕСТЬNULL(МИНИМУМ(ЗамерыОперации.ВремяВыполнения), 0) КАК МИНИМУМВремяВыполнения, + | ЕСТЬNULL(СУММА(ЗамерыОперации.КоличествоЗамеров), 0) КАК КоличествоЗамеров + |ИЗ + | ЗамерыОперации КАК ЗамерыОперации"); + Запрос.МенеджерВременныхТаблиц = МВТ; + Запрос.УстановитьПараметр("ДатаНачала", (ПараметрыПодбора.ДатаНачала - Дата(1,1,1)) * 1000); + Запрос.УстановитьПараметр("ДатаОкончания", (ПараметрыПодбора.ДатаОкончания - Дата(1,1,1)) * 1000); + Запрос.УстановитьПараметр("КлючеваяОперация", ПараметрыПодбора.КлючеваяОперация); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Минимум = Выборка.МИНИМУМВремяВыполнения; + Максимум = Выборка.МАКСИМУМВремяВыполнения; + РезультатПодбора.КоличествоЗамеров = Выборка.КоличествоЗамеров; + Иначе + РезультатПодбора.Вставить("ОписаниеОшибки", НСтр("ru = 'Не удалось получить данные о замерах, попробуйте изменить настройки.'")); + Возврат РезультатПодбора; + КонецЕсли; + + Если РезультатПодбора.КоличествоЗамеров = 0 Тогда + РезультатПодбора.Вставить("ОписаниеОшибки", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Получено 0 замеров по ключевой операции %1. Измените период или выберите другую ключевую операцию.'"), + ПараметрыПодбора.КлючеваяОперация)); + Возврат РезультатПодбора; + КонецЕсли; + + ТекущееЦелевоеВремя = (Минимум + Максимум) / 2; + РасчетныйAPDEX = ЗначениеAPDEX(МВТ, ТекущееЦелевоеВремя); + Отклонение = Макс(РасчетныйAPDEX - ПараметрыПодбора.ЦелевойAPDEX, ПараметрыПодбора.ЦелевойAPDEX - РасчетныйAPDEX); + + Пока Отклонение > ДопустимаяРазница + И Счетчик < МаксимальноеКоличествоИтераций + Цикл + Счетчик = Счетчик + 1; + ДанныеМинимум = ОтклонениеAPDEX(Минимум, ТекущееЦелевоеВремя, МВТ, ПараметрыПодбора.ЦелевойAPDEX); + ДанныеМаксимум = ОтклонениеAPDEX(Максимум, ТекущееЦелевоеВремя, МВТ, ПараметрыПодбора.ЦелевойAPDEX); + + Если Максимум - Минимум <= 0.002 Тогда + Прервать; + ИначеЕсли ДанныеМинимум.Отклонение <= ДанныеМаксимум.Отклонение Тогда + Максимум = ТекущееЦелевоеВремя; + ТекущееЦелевоеВремя = ДанныеМинимум.ТекущееЦелевоеВремя; + Отклонение = ДанныеМинимум.Отклонение; + РасчетныйAPDEX = ДанныеМинимум.APDEX; + ИначеЕсли ДанныеМинимум.Отклонение > ДанныеМаксимум.Отклонение Тогда + Минимум = ТекущееЦелевоеВремя; + ТекущееЦелевоеВремя = ДанныеМаксимум.ТекущееЦелевоеВремя; + Отклонение = ДанныеМаксимум.Отклонение; + РасчетныйAPDEX = ДанныеМаксимум.APDEX; + КонецЕсли; + + КонецЦикла; + + РезультатПодбора.ЦелевоеВремя = ТекущееЦелевоеВремя; + РезультатПодбора.РасчетныйAPDEX = РасчетныйAPDEX; + РезультатПодбора.Замеры = СоответствиеЗамеров(МВТ); + + Возврат РезультатПодбора; + +КонецФункции + +&НаСервереБезКонтекста +Функция ОтклонениеAPDEX(ГраницаИнтервала, ТекущееЦелевоеВремя, МенеджерВременныхТаблиц, ЦелевойAPDEX) + ТекущееЦелевоеВремяНовое = ОКР((ГраницаИнтервала + ТекущееЦелевоеВремя) / 2, 3); + APDEX = ЗначениеAPDEX(МенеджерВременныхТаблиц, ТекущееЦелевоеВремяНовое); + Отклонение = Макс(APDEX - ЦелевойAPDEX, ЦелевойAPDEX - APDEX); + Возврат Новый Структура("ТекущееЦелевоеВремя, APDEX, Отклонение", ТекущееЦелевоеВремяНовое, APDEX, Отклонение) +КонецФункции + +&НаСервереБезКонтекста +Функция СоответствиеЗамеров(МенеджерВременныхТаблиц) + СоответствиеЗамеров = Новый Массив; + Запрос = Новый Запрос("ВЫБРАТЬ + | ВЫРАЗИТЬ(ЗамерыОперации.ВремяВыполнения КАК ЧИСЛО(15, 0)) КАК ВремяВыполнения, + | СУММА(ЗамерыОперации.КоличествоЗамеров) КАК КоличествоЗамеров + |ИЗ + | ЗамерыОперации КАК ЗамерыОперации + | + |СГРУППИРОВАТЬ ПО + | ВЫРАЗИТЬ(ЗамерыОперации.ВремяВыполнения КАК ЧИСЛО(15, 0)) + | + |УПОРЯДОЧИТЬ ПО + | ВремяВыполнения"); + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Замер = Новый Соответствие; + Замер.Вставить(Выборка.ВремяВыполнения, Выборка.КоличествоЗамеров); + СоответствиеЗамеров.Добавить(Замер); + КонецЦикла; + Возврат СоответствиеЗамеров; +КонецФункции + +&НаСервереБезКонтекста +Функция ЗначениеAPDEX(МенеджерВременныхТаблиц, ТекущееЦелевоеВремя) + Запрос = Новый Запрос("ВЫБРАТЬ + | СУММА(ВЫБОР + | КОГДА ЗамерыОперации.ВремяВыполнения <= &ЦелевоеВремя + | ТОГДА ЗамерыОперации.КоличествоЗамеров + | ИНАЧЕ 0 + | КОНЕЦ) КАК T, + | СУММА(ВЫБОР + | КОГДА ЗамерыОперации.ВремяВыполнения > &ЦелевоеВремя + | И ЗамерыОперации.ВремяВыполнения <= 4 * &ЦелевоеВремя + | ТОГДА ЗамерыОперации.КоличествоЗамеров + | ИНАЧЕ 0 + | КОНЕЦ) КАК T_4T, + | СУММА(ЗамерыОперации.КоличествоЗамеров) КАК N, + | ЕСТЬNULL((СУММА(ВЫБОР + | КОГДА ЗамерыОперации.ВремяВыполнения <= &ЦелевоеВремя + | ТОГДА ЗамерыОперации.КоличествоЗамеров + | ИНАЧЕ 0 + | КОНЕЦ) + СУММА(ВЫБОР + | КОГДА ЗамерыОперации.ВремяВыполнения > &ЦелевоеВремя + | И ЗамерыОперации.ВремяВыполнения <= 4 * &ЦелевоеВремя + | ТОГДА ЗамерыОперации.КоличествоЗамеров + | ИНАЧЕ 0 + | КОНЕЦ) / 2) / СУММА(ЗамерыОперации.КоличествоЗамеров),0) КАК APDEX + |ИЗ + | ЗамерыОперации КАК ЗамерыОперации"); + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ЦелевоеВремя", ТекущееЦелевоеВремя); + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + Возврат Окр(Выборка.APDEX, 3); +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl index 7af092860..c4f8f09ce 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -29,7 +36,7 @@ Объект.Производительность.Загрузить(ЗагружаемаяНастройка); Исключение ТекстСообщения = НСтр("ru = 'Не удалось загрузить настройки.'"); - ОценкаПроизводительностиКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОценкаПроизводительностиСлужебный.СообщитьПользователю(ТекстСообщения); КонецПопытки; Если ПустаяСтрока(Объект.ВариантФильтраКомментарий) Тогда @@ -322,7 +329,7 @@ // Получение итоговой ТаблицаКлючевыхОпераций которая будет выведена пользователю. ТаблицаКлючевыхОпераций = ОбработкаОбъект.ПоказателиПроизводительности(); Если ТаблицаКлючевыхОпераций = Неопределено Тогда - ОценкаПроизводительностиКлиентСервер.СообщитьПользователю(НСтр("ru = 'Период установлен не верно.'")); + ОценкаПроизводительностиСлужебный.СообщитьПользователю(НСтр("ru = 'Период установлен не верно.'")); Возврат; КонецЕсли; @@ -902,7 +909,7 @@ КонецПроцедуры &НаСервере -Функция ДобавитьКлючевуюОперациюСервер(ПараметрыКлючевойОперации) +Процедура ДобавитьКлючевуюОперациюСервер(ПараметрыКлючевойОперации) НоваяСтрока = Объект.Производительность.Добавить(); НоваяСтрока.КлючеваяОперация = ПараметрыКлючевойОперации.КлючеваяОперация; @@ -911,7 +918,7 @@ Объект.Производительность.Сортировать("Приоритет"); -КонецФункции +КонецПроцедуры // Вычисляет точные дату начала и окончания на выбранном отрезке. // @@ -1098,7 +1105,7 @@ Если СтрокаТЧ.ЦелевоеВремя = 0 И СтрокаТЧ.КлючеваяОперация <> Объект.ОбщаяПроизводительностьСистемы Тогда - ОценкаПроизводительностиКлиентСервер.СообщитьПользователю( + ОценкаПроизводительностиСлужебный.СообщитьПользователю( НСтр("ru = 'Целевое время обязательно должно быть заполнено.'"), , "Производительность[" + Формат(Объект.Производительность.Индекс(СтрокаТЧ),"ЧГ=0") + "].ЦелевоеВремя", diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl index dbd627a24..f40b73b27 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийЭлементовШапкиФормы diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl index aef35bf82..4b7fe256c 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -25,7 +32,7 @@ ВыборФайла.Заголовок = НСтр("ru = 'Выбор каталога экспорта'"); ОписаниеОповещения = Новый ОписаниеОповещения("ДиалогВыбораКаталогаЗавершение", ЭтотОбъект, Неопределено); - ВыборФайла.Показать(ОписаниеОповещения); + ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ВыборФайла); КонецЕсли; @@ -35,9 +42,9 @@ Процедура КаталогЭкспортаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Если ЕстьБСП Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьКаталогЭкспортаПредложено", ЭтотОбъект); - МодульОбщегоНазначения = Вычислить("ОбщегоНазначенияКлиент"); - Если ТипЗнч(МодульОбщегоНазначения) = Тип("ОбщийМодуль") Тогда - МодульОбщегоНазначения.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения); + МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); + Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда + МодульФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); КонецЕсли; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl index 5991d2714..74eec556a 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -430,4 +438,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo index 169f755b7..7131521ca 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -316,6 +316,20 @@ PersonalComputer MobileDevice + + ПодборЦелевогоВремениКлючевойОперации + + ru + Подбор целевого времени ключевой операции + + + + ru + + + PersonalComputer + MobileDevice + НастройкиОценкиПроизводительности @@ -343,4 +357,16 @@ ActionsPanelTools Auto + + ПодборЦелевогоВремени + + ru + Подбор целевого времени + + FormCommandBarImportant + + CatalogRef.КлючевыеОперации + + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ИнтернетПоддержкаИСервисы/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ИнтернетПоддержкаИСервисы/CommandModule.bsl index 659bd8ef0..5c0ed6f0b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ИнтернетПоддержкаИСервисы/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ИнтернетПоддержкаИСервисы/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиПользователейИПрав/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиПользователейИПрав/CommandModule.bsl index 94c91c6af..35365e8d2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиПользователейИПрав/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиПользователейИПрав/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиРаботыСФайлами/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиРаботыСФайлами/CommandModule.bsl index b4efcf71e..227e44c54 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиРаботыСФайлами/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиРаботыСФайлами/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Обслуживание/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Обслуживание/CommandModule.bsl index 96d11b5c4..c878ea861 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Обслуживание/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Обслуживание/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ОбщиеНастройки/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ОбщиеНастройки/CommandModule.bsl index 7e2ba37d6..6fe3b6176 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ОбщиеНастройки/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ОбщиеНастройки/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Органайзер/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Органайзер/CommandModule.bsl index 9b1630971..7f2cdd6c6 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Органайзер/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Органайзер/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПечатныеФормыОтчетыИОбработки/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПечатныеФормыОтчетыИОбработки/CommandModule.bsl index a45b0d09a..f306b2824 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПечатныеФормыОтчетыИОбработки/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПечатныеФормыОтчетыИОбработки/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанных/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанных/CommandModule.bsl index 279934120..e8b3cdf8b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанных/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанных/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form index f290a4b8e..3970e9d4f 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form @@ -463,6 +463,7 @@ ShowBottom Auto + true true true @@ -713,7 +714,7 @@ 1642 <key>ru</key> - <value>Загрузка классификатора банков РФ с сайта 1С или диска 1С:ИТС.</value> + <value>Загрузка классификатора банков РФ с Портала 1С:ИТС или диска 1С:ИТС.</value> Label true @@ -778,7 +779,7 @@ 1646 <key>ru</key> - <value>Загрузка курсов выбранных валют за указанный период с сайта 1С.</value> + <value>Загрузка курсов выбранных валют за указанный период с Портала 1С:ИТС.</value> Label true @@ -1489,6 +1490,165 @@ Auto + + ГруппаОбновлениеПрограммыИсправления + 1884 + + ГруппаНастройкаИсправленияПатчи + 1886 + + БИПЗагружатьИУстанавливатьИсправленияАвтоматически + 1888 + true + true + + true + + + БИПЗагружатьИУстанавливатьИсправленияАвтоматически + + Right + + ru + Получение информации, загрузка и установка доступных исправлений (патчей) конфигурации в "тихом режиме" без участия пользователя. + + ShowBottom + + OnChange + БИПЗагружатьИУстанавливатьИсправленияАвтоматическиПриИзменении + + + БИПЗагружатьИУстанавливатьИсправленияАвтоматическиРасширеннаяПодсказка + 1890 + Label + true + true + + Left + + + + БИПЗагружатьИУстанавливатьИсправленияАвтоматическиКонтекстноеМеню + 1889 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Настройка исправления патчи</value> + + 43 + + ГруппаНастройкаИсправленияПатчиРасширеннаяПодсказка + 1887 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ДекорацияРасписаниеУстановкаИсправлений + 1891 + + <key>ru</key> + <value>Настроить расписание</value> + + true + true + + true + + + ДекорацияРасписаниеУстановкаИсправленийРасширеннаяПодсказка + 1893 + Label + true + true + + Left + + + + ДекорацияРасписаниеУстановкаИсправленийКонтекстноеМеню + 1892 + true + + Label + 2 + true + true + + + Click + ДекорацияРасписаниеУстановкаИсправленийНажатие + + true + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Обновление программы Исправления</value> + + + Style.FormTextColor + + + Style.NormalTextFont + + true + 80 + false + false + + ГруппаОбновлениеПрограммыИсправленияРасширеннаяПодсказка + 1885 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + ГруппаОбновлениеИОписаниеИзмененийВтораяСтрока 1785 @@ -3780,6 +3940,23 @@ true + + БИПЗагружатьИУстанавливатьИсправленияАвтоматически + + <key>ru</key> + <value>Загружать и устанавливать исправления (патчи) автоматически</value> + + 28 + + Boolean + + + true + + + true + + БИПВойтиИлиВыйти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl index 1bd00cb9b..f0d4081e8 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -20,10 +28,10 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда ВидимостьГруппыНастройки = Не РазделениеВключено; Если ВидимостьГруппыНастройки Тогда - ВидимостьГруппыКоманды = Истина; Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); - Элементы.ГруппаАдресныйКлассификаторПраваяКолонка.Видимость = Ложь; + Элементы.ГруппаАдресныйКлассификаторПраваяКолонка.Видимость = + НЕ МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); Иначе ВидимостьГруппыНастройки = Ложь; @@ -33,9 +41,6 @@ СведенияОДоступностиАдресныхСведений = МодульАдресныйКлассификаторСлужебный.СведенияОДоступностиАдресныхСведений(); АдресныйКлассификаторСодержитЗагруженныеСведения = СведенияОДоступностиАдресныхСведений.Получить("ИспользоватьЗагруженные") = Истина; Элементы.РегистрСведенийАдресныеОбъектыОчиститьАдресныйКлассификатор.Доступность = АдресныйКлассификаторСодержитЗагруженныеСведения; - - Иначе - ВидимостьГруппыКоманды = Ложь; КонецЕсли; Элементы.ГруппаАдресныйКлассификаторНастройки.Видимость = ВидимостьГруппыНастройки; Иначе @@ -74,7 +79,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВызовОнлайнПоддержки") Тогда Элементы.ГруппаИнтеграцияВызовОнлайнПоддержки.Видимость = - ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент(); + ОбщегоНазначения.ЭтоWindowsКлиент(); Иначе Элементы.ГруппаИнтеграцияВызовОнлайнПоддержки.Видимость = Ложь; КонецЕсли; @@ -173,10 +178,20 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "ИнтернетПоддержкаПодключена" Тогда + Элементы.ГруппаАдресныйКлассификаторПраваяКолонка.Видимость = Ложь; + ИначеЕсли ИмяСобытия = "ИнтернетПоддержкаОтключена" Тогда + Элементы.ГруппаАдресныйКлассификаторПраваяКолонка.Видимость = Истина; + КонецЕсли; + Если ИмяСобытия = "ОчищенАдресныйКлассификатор" Или ИмяСобытия = "ЗагруженАдресныйКлассификатор" Тогда Элементы.РегистрСведенийАдресныеОбъектыОчиститьАдресныйКлассификатор.Доступность = (Параметр = Истина); КонецЕсли; + Если ИмяСобытия = "ИнтернетПоддержкаОтключена" Или ИмяСобытия = "ИнтернетПоддержкаПодключена" Тогда + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + Если ОбрабатыватьНастройкиБИП Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.БазоваяФункциональностьБИП") Тогда МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); @@ -354,6 +369,28 @@ Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +&НаКлиенте +Процедура БИПЗагружатьИУстанавливатьИсправленияАвтоматическиПриИзменении(Элемент) + + МодульПолучениеОбновленийПрограммыКлиент = + ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеОбновленийПрограммыКлиент"); + МодульПолучениеОбновленийПрограммыКлиент.ИнтернетПоддержкаИСервисы_ЗагружатьИУстанавливатьИсправленияАвтоматическиПриИзменении( + ЭтотОбъект, + Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияРасписаниеУстановкаИсправленийНажатие(Элемент) + + МодульПолучениеОбновленийПрограммыКлиент = + ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеОбновленийПрограммыКлиент"); + МодульПолучениеОбновленийПрограммыКлиент.ИнтернетПоддержкаИСервисы_ДекорацияРасписаниеУстановкаИсправленийНажатие( + ЭтотОбъект, + Элемент); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form index 1c7d37f7a..0746699ee 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form @@ -417,6 +417,7 @@ <extInfo xsi:type="form:UsualGroupExtInfo"> <group>Vertical</group> <behavior>Auto</behavior> + <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> <united>true</united> <throughAlign>Auto</throughAlign> @@ -1218,7 +1219,7 @@ <key>ru</key> <value>Запрет изменения данных прошлых периодов.</value> </toolTip> - <toolTipRepresentation>ShowBottom</toolTipRepresentation> + <toolTipRepresentation>None</toolTipRepresentation> <handlers> <event>OnChange</event> <name>Подключаемый_ПриИзмененииРеквизита</name> @@ -1245,42 +1246,8 @@ <showInFooter>true</showInFooter> <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> </items> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <title> - <key>ru</key> - <value>Даты запрета изменения использование</value> - - 43 - false - - ГруппаДатыЗапретаИзмененияИспользованиеРасширеннаяПодсказка - 2201 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаДатыЗапретаИзмененияНастройка - 2205 - РегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанных + НастроитьДатыЗапретаИзменения 2207 <key>ru</key> @@ -1292,7 +1259,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>РегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанныхРасширеннаяПодсказка</name> + <name>НастроитьДатыЗапретаИзмененияРасширеннаяПодсказка</name> <id>2208</id> <title> <key>ru</key> @@ -1306,7 +1273,7 @@ </extInfo> </extendedTooltip> <type>Hyperlink</type> - <commandName>InformationRegister.ДатыЗапретаИзменения.Command.ДатыЗапретаИзмененияДанных</commandName> + <commandName>Form.Command.НастроитьДатыЗапретаИзменения</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -1321,13 +1288,18 @@ </userVisible> <title> <key>ru</key> - <value>Даты запрета изменения настройка</value> + <value>Даты запрета изменения использование</value> + + ru + Запрет изменения данных прошлых периодов. + + ShowBottom 43 false - ГруппаДатыЗапретаИзмененияНастройкаРасширеннаяПодсказка - 2206 + ГруппаДатыЗапретаИзмененияИспользованиеРасширеннаяПодсказка + 2201 Label true true @@ -1337,7 +1309,7 @@ UsualGroup - Vertical + HorizontalIfPossible Auto true true @@ -1965,7 +1937,7 @@ 2 ru - Отображает ход обновления доступа, а также позволяет вручную: + Для отслеживания хода обновления прав доступа. Также для нештатных случаев позволяет: - обновить доступ отдельного объекта, - запланировать обновление доступа к требуемым спискам. @@ -1980,6 +1952,28 @@ Auto Auto + + НастроитьДатыЗапретаИзменения + + <key>ru</key> + <value>Настроить</value> + + 4 + + ru + Настроить даты запрета изменения + + + true + + + + НастроитьДатыЗапретаИзменения + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl index 24a00c5d1..bf033dd27 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -199,6 +207,16 @@ КонецПроцедуры +&НаКлиенте +Процедура НастроитьДатыЗапретаИзменения(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзмененияСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ДатыЗапретаИзмененияСлужебныйКлиент"); + МодульДатыЗапретаИзмененияСлужебныйКлиент.ОткрытьДатыЗапретаИзмененияДанных(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -355,8 +373,7 @@ И (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьДатыЗапретаИзменения" Или РеквизитПутьКДанным = "") Тогда - Элементы.ГруппаДатыЗапретаИзмененияНастройка.Доступность = - НаборКонстант.ИспользоватьДатыЗапретаИзменения; + Элементы.НастроитьДатыЗапретаИзменения.Доступность = НаборКонстант.ИспользоватьДатыЗапретаИзменения; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form index a46953e99..2a4c80260 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form @@ -573,7 +573,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl index 0a4caeaa4..ca97bc7c0 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -40,6 +48,11 @@ НастройкиПрограммыПереопределяемый.НастройкиРаботыСФайламиПриСозданииНаСервере(ЭтотОбъект); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.СписокРасширенийТекстовыхФайлов.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.СписокРасширенийФайловOpenDocumentОбластиДанных.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -113,7 +126,7 @@ Процедура МаксимальныйРазмерФайлаОбластиДанныхПриИзменении(Элемент) Если МаксимальныйРазмерФайлаОбластиДанных = 0 Тогда ТекстСообщения = НСтр("ru = 'Поле ""Максимальный размер файла"" не заполнено.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ,"МаксимальныйРазмерФайлаОбластиДанных"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, ,"МаксимальныйРазмерФайлаОбластиДанных"); Возврат; КонецЕсли; Подключаемый_ПриИзмененииРеквизита(Элемент); @@ -136,7 +149,7 @@ Процедура МаксимальныйРазмерФайлаПриИзменении(Элемент) Если МаксимальныйРазмерФайла = 0 Тогда ТекстСообщения = НСтр("ru = 'Поле ""Максимальный размер файла"" не заполнено.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ,"МаксимальныйРазмерФайла"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, ,"МаксимальныйРазмерФайла"); Возврат; КонецЕсли; Подключаемый_ПриИзмененииРеквизита(Элемент); diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl index 7808af687..f0990afd7 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -37,8 +45,8 @@ Элементы.ГруппаРезервноеКопированиеИВосстановление.Видимость = Пользователи.ЭтоПолноправныйПользователь(, Истина) И Не ОбщегоНазначения.РазделениеВключено() - И Не ОбщегоНазначенияКлиентСервер.КлиентПодключенЧерезВебСервер() - И ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент(); + И Не ОбщегоНазначения.КлиентПодключенЧерезВебСервер() + И ОбщегоНазначения.ЭтоWindowsКлиент(); ОбновитьНастройкиРезервногоКопирования(); Иначе @@ -75,8 +83,8 @@ Пользователи.ЭтоПолноправныйПользователь(, Истина) И Не ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() И Не ОбщегоНазначения.РазделениеВключено() - И Не ОбщегоНазначенияКлиентСервер.КлиентПодключенЧерезВебСервер() - И ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент(); + И Не ОбщегоНазначения.КлиентПодключенЧерезВебСервер() + И ОбщегоНазначения.ЭтоWindowsКлиент(); Элементы.ГруппаУстановленныеИсправления.Видимость = Пользователи.ЭтоПолноправныйПользователь() diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form index 2d9ecff46..7d3859794 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form @@ -1367,42 +1367,34 @@ ГруппаИспользоватьВерсионированиеОбъектов 2065 - ИспользоватьВерсионированиеОбъектов - 2067 - - <key>ru</key> - <value>Хранить историю изменений</value> - + ХранитьИсториюИзменений + 2087 true true true - НаборКонстант.ИспользоватьВерсионированиеОбъектов + ХранитьИсториюИзменений Right - ShowBottom OnChange - ИспользоватьВерсионированиеОбъектовПриИзменении + ХранитьИсториюИзмененийПриИзменении - ИспользоватьВерсионированиеОбъектовExtendedTooltip - 2069 - - <key>ru</key> - <value>Хранение и просмотр версий документов и справочников программы.</value> - + ХранитьИсториюИзмененийРасширеннаяПодсказка + 2089 Label + true true Left - ИспользоватьВерсионированиеОбъектовКонтекстноеМеню - 2068 + ХранитьИсториюИзмененийКонтекстноеМеню + 2088 true CheckBoxField @@ -1412,6 +1404,33 @@ true + + НастроитьХранениеИсторииИзменений + 2090 + true + true + + true + + + НастроитьХранениеИсторииИзмененийРасширеннаяПодсказка + 2091 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастроитьХранениеИсторииИзменений + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1421,6 +1440,11 @@ ru Использовать версионирование объектов + + ru + Хранение и просмотр версий документов и справочников программы. + + ShowBottom 43 false @@ -1435,76 +1459,7 @@ UsualGroup - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаРегистрСведенийНастройкиВерсионированияОбъектов - 2070 - - РегистрСведенийНастройкиВерсионированияОбъектов - 2072 - - <key>ru</key> - <value>Настройки хранения</value> - - true - true - - true - - - РегистрСведенийНастройкиВерсионированияОбъектовРасширеннаяПодсказка - 2073 - - <key>ru</key> - <value>Настройка хранения и очистка версий документов и справочников.</value> - - Label - true - - Left - - - Hyperlink - InformationRegister.НастройкиВерсионированияОбъектов.StandardCommand.OpenList - Normal - Auto - true - true - UserCmds - ShowBottom - Auto - - true - true - - true - - - <key>ru</key> - <value>Регистр сведений настройки версионирования объектов</value> - - 43 - false - - ГруппаРегистрСведенийНастройкиВерсионированияОбъектовExtendedTooltip - 2071 - Label - true - true - - Left - - - UsualGroup - - Vertical + AlwaysHorizontal Auto true true @@ -1547,11 +1502,11 @@ - ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстов + ГруппаУправлениеПолнотекстовымПоиском 2074 - ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовИспользование - 2076 + ГруппаПолнотекстовыйПоиск + 2092 ИспользоватьПолнотекстовыйПоиск 2078 @@ -1564,11 +1519,6 @@ ИспользоватьПолнотекстовыйПоиск Right - - ru - Управление поиском и извлечением текстов из файлов. - - ShowBottom OnChange ИспользоватьПолнотекстовыйПоискПриИзменении @@ -1597,54 +1547,17 @@ true - true - true - - true - - - <key>ru</key> - <value>Управление полнотекстовым поиском и извлечением текстов использование</value> - - 43 - - ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовИспользованиеРасширеннаяПодсказка - 2077 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовНастройка - 2081 - УправлениеПолнотекстовымПоискомИИзвлечениемТекстов - 2083 - - <key>ru</key> - <value>Настроить</value> - + НастроитьПолнотекстовыйПоиск + 2085 true true true - УправлениеПолнотекстовымПоискомИИзвлечениемТекстовРасширеннаяПодсказка - 2084 + НастроитьПолнотекстовыйПоискРасширеннаяПодсказка + 2086 Label true true @@ -1653,7 +1566,7 @@ Hyperlink - Form.Command.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов + Form.Command.НастроитьПолнотекстовыйПоиск Normal Auto true @@ -1668,12 +1581,16 @@ <key>ru</key> - <value>Управление полнотекстовым поиском и извлечением текстов настройка</value> + <value>Группа полнотекстовый поиск</value> - 43 + + ru + Управление поиском в документах, файлах, отчетах. + + ShowBottom - ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовНастройкаРасширеннаяПодсказка - 2082 + ГруппаПолнотекстовыйПоискРасширеннаяПодсказка + 2093 Label true true @@ -1683,7 +1600,7 @@ UsualGroup - Vertical + HorizontalIfPossible Auto true true @@ -1698,11 +1615,11 @@ <key>ru</key> - <value>Полнотекстовый поиск данных</value> + <value>Поиск данных</value> false - ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовExtendedTooltip + ГруппаУправлениеПолнотекстовымПоискомРасширеннаяПодсказка 2075 Label true @@ -1987,6 +1904,10 @@ -1 Left + + NotificationProcessing + ОбработкаОповещения + OnCreateAtServer ПриСозданииНаСервере @@ -2076,6 +1997,23 @@ true + + ХранитьИсториюИзменений + + <key>ru</key> + <value>Хранить историю изменений</value> + + 7 + + Boolean + + + true + + + true + + ИспользованиеПрофилейБезопасности @@ -2099,7 +2037,25 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>УправлениеПолнотекстовымПоискомИИзвлечениемТекстов</name> + <name>НастроитьПолнотекстовыйПоиск</name> + <title> + <key>ru</key> + <value>Настроить</value> + + 6 + + true + + + + НастроитьПолнотекстовыйПоиск + + + Auto + Auto + + + НастроитьХранениеИсторииИзменений <key>ru</key> <value>Настроить</value> @@ -2107,17 +2063,17 @@ <id>1</id> <toolTip> <key>ru</key> - <value>Управление полнотекстовым поиском и извлечением текстов</value> + <value>Настроить хранение истории изменений</value> </toolTip> <use> <common>true</common> </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>УправлениеПолнотекстовымПоискомИИзвлечениемТекстов</name> + <name>НастроитьХранениеИсторииИзменений</name> </handler> </action> - <currentRowUse>DontUse</currentRowUse> + <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <commandInterface> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl index 021d05809..39ae98259 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -53,17 +61,26 @@ Элементы.ГруппаПубликацияИнформационнойБазы.Видимость = Не (ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто()); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда - Элементы.ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстов.Видимость = - Пользователи.ЭтоПолноправныйПользователь(, Истина); - Иначе - Элементы.ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстов.Видимость = Ложь; - КонецЕсли; - УстановитьДоступность(); НастройкиПрограммыПереопределяемый.ОбщиеНастройкиПриСозданииНаСервере(ЭтотОбъект); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + ХранитьИсториюИзменений = МодульВерсионированиеОбъектов.ЗначениеФлажкаХранитьИсторию(); + Иначе + Элементы.ГруппаВерсионирование.Видимость = Ложь; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") + И Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + + МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); + ИспользоватьПолнотекстовыйПоиск = МодульПолнотекстовыйПоискСервер.ЗначениеФлажкаИспользоватьПоиск(); + Иначе + Элементы.ГруппаУправлениеПолнотекстовымПоиском.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -74,6 +91,25 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВерсионированиеОбъектовКлиент"); + МодульВерсионированиеОбъектовКлиент.ОбработкаОповещенияИзмененияФлажкаХранитьИсторию( + ИмяСобытия, + ХранитьИсториюИзменений); + КонецЕсли; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда + МодульПолнотекстовыйПоискКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолнотекстовыйПоискКлиент"); + МодульПолнотекстовыйПоискКлиент.ОбработкаОповещенияИзмененияФлажкаИспользоватьПоиск( + ИмяСобытия, + ИспользоватьПолнотекстовыйПоиск); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -94,19 +130,6 @@ Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры -&НаКлиенте -Процедура ИспользоватьПолнотекстовыйПоискПриИзменении(Элемент) - - Если ИспользоватьПолнотекстовыйПоиск = 0 Тогда // Предыдущее значение - 2 (3й режим). - ИспользоватьПолнотекстовыйПоиск = 1; - ИначеЕсли ИспользоватьПолнотекстовыйПоиск = 2 Тогда // Предыдущее значение - 1 (Истина). - ИспользоватьПолнотекстовыйПоиск = 0; - КонецЕсли; - - ПриИзмененииРежимаПолнотекстовогоПоиска(Элемент, Истина); - -КонецПроцедуры - &НаКлиенте Процедура АдресПубликацииИнформационнойБазыПриИзменении(Элемент) @@ -131,8 +154,23 @@ КонецПроцедуры &НаКлиенте -Процедура ИспользоватьВерсионированиеОбъектовПриИзменении(Элемент) - Подключаемый_ПриИзмененииРеквизита(Элемент); +Процедура ХранитьИсториюИзмененийПриИзменении(Элемент) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВерсионированиеОбъектовКлиент"); + МодульВерсионированиеОбъектовКлиент.ПриИзмененииФлажкаХранитьИсторию(ХранитьИсториюИзменений); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьПолнотекстовыйПоискПриИзменении(Элемент) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда + МодульПолнотекстовыйПоискКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолнотекстовыйПоискКлиент"); + МодульПолнотекстовыйПоискКлиент.ПриИзмененииФлажкаИспользоватьПоиск(ИспользоватьПолнотекстовыйПоиск); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -150,11 +188,21 @@ КонецПроцедуры &НаКлиенте -Процедура УправлениеПолнотекстовымПоискомИИзвлечениемТекстов(Команда) +Процедура НастроитьХранениеИсторииИзменений(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВерсионированиеОбъектовКлиент"); + МодульВерсионированиеОбъектовКлиент.ПоказатьНастройку(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьПолнотекстовыйПоиск(Команда) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда МодульПолнотекстовыйПоискКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолнотекстовыйПоискКлиент"); - МодульПолнотекстовыйПоискКлиент.ПоказатьУправлениеПолнотекстовымПоискомИИзвлечениемТекстов(); + МодульПолнотекстовыйПоискКлиент.ПоказатьНастройку(); КонецЕсли; КонецПроцедуры @@ -180,7 +228,7 @@ &НаКлиенте Процедура АдресПубликацииИнформационнойНачалоВыбораЗавершение(ИмяРеквизита) - Если ОбщегоНазначенияКлиентСервер.КлиентПодключенЧерезВебСервер() Тогда + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда АдресПубликацииИнформационнойБазыНачалоВыбораНаСервере(ИмяРеквизита, СтрокаСоединенияИнформационнойБазы()); Подключаемый_ПриИзмененииРеквизита(Элементы[ИмяРеквизита]); Иначе @@ -202,13 +250,6 @@ //////////////////////////////////////////////////////////////////////////////// // Клиент -&НаКлиенте -Процедура ПриИзмененииРеквизитаПослеОтветаНаВопрос(Ответ, ПараметрыВыполнения) Экспорт - Если Ответ = "АктивныеПользователи" Тогда - СтандартныеПодсистемыКлиент.ОткрытьСписокАктивныхПользователей(); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) @@ -237,35 +278,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПриИзмененииРежимаПолнотекстовогоПоиска(Элемент, ОбновлятьИнтерфейс = Истина) - - КонстантаИмя = ПриИзмененииРеквизитаСервер(Элемент.Имя); - - Если КонстантаИмя = "НеУдалосьУстановитьРежимПолнотекстовогоПоиска" Тогда - // Выдача предупреждающего сообщения. - ТекстВопроса = НСтр("ru = 'Для изменения режима полнотекстового поиска требуется завершение сеансов всех пользователей, кроме текущего.'"); - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("АктивныеПользователи", НСтр("ru = 'Активные пользователи'")); - Кнопки.Добавить(КодВозвратаДиалога.Отмена); - - Обработчик = Новый ОписаниеОповещения("ПриИзмененииРеквизитаПослеОтветаНаВопрос", ЭтотОбъект); - ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, , "АктивныеПользователи"); - Возврат; - КонецЕсли; - - Если ОбновлятьИнтерфейс Тогда - ОбновитьИнтерфейс = Истина; - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); - КонецЕсли; - - Если КонстантаИмя <> "" Тогда - Оповестить("Запись_НаборКонстант", Новый Структура, КонстантаИмя); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Вызов сервера @@ -313,49 +325,11 @@ Если НРег(Лев(РеквизитПутьКДанным, 14)) = НРег("НаборКонстант.") Тогда // Если путь к данным реквизита указан через "НаборКонстант". КонстантаИмя = Сред(РеквизитПутьКДанным, 15); - Иначе - // Определение имени и запись значения реквизита в соответствующей константе из "НаборКонстант". - // Используется для тех реквизитов формы, которые связаны с константами напрямую (в отношении один-к-одному). - Если РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" Тогда - Попытка - Если ИспользоватьПолнотекстовыйПоиск Тогда - ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Разрешить); - Иначе - ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Запретить); - КонецЕсли; - Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Полнотекстовый поиск'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат "НеУдалосьУстановитьРежимПолнотекстовогоПоиска"; - КонецПопытки; - КонстантаИмя = "ИспользоватьПолнотекстовыйПоиск"; - НаборКонстант.ИспользоватьПолнотекстовыйПоиск = ИспользоватьПолнотекстовыйПоиск; - // Включение/отключение зависимых регламентных заданий. - Изменения = Новый Структура("Использование", НаборКонстант.ИспользоватьПолнотекстовыйПоиск); - Задание = РегламентныеЗаданияНайтиПредопределенное("ОбновлениеИндексаППД"); - Если Задание <> Неопределено Тогда - РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения); - КонецЕсли; - Задание = РегламентныеЗаданияНайтиПредопределенное("СлияниеИндексаППД"); - Если Задание <> Неопределено Тогда - РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - Изменения.Использование = Изменения.Использование И НаборКонстант.ИзвлекатьТекстыФайловНаСервере; - Задание = РегламентныеЗаданияНайтиПредопределенное("ИзвлечениеТекста"); - Если Задание <> Неопределено Тогда - РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения); - КонецЕсли; - КонецЕсли; - КонецЕсли; + КонецЕсли; // Сохранения значения константы. - Если КонстантаИмя <> "" Или РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" Тогда + Если КонстантаИмя <> "" Тогда КонстантаМенеджер = Константы[КонстантаИмя]; КонстантаЗначение = НаборКонстант[КонстантаИмя]; @@ -413,37 +387,6 @@ "Видимость", Не ДоступностьНастройкиПроксиНаСервере); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") - И (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьВерсионированиеОбъектов" - Или РеквизитПутьКДанным = "") Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "РегистрСведенийНастройкиВерсионированияОбъектов", - "Доступность", - НаборКонстант.ИспользоватьВерсионированиеОбъектов); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда - Если РеквизитПутьКДанным = "" Или РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" Тогда - МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); - Если НаборКонстант.ИспользоватьПолнотекстовыйПоиск <> МодульПолнотекстовыйПоискСервер.ОперацииРазрешены() Тогда - ИспользоватьПолнотекстовыйПоиск = 2; - Иначе - ИспользоватьПолнотекстовыйПоиск = НаборКонстант.ИспользоватьПолнотекстовыйПоиск; - КонецЕсли; - Элементы.ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовНастройка.Доступность = (ИспользоватьПолнотекстовыйПоиск = 1); - КонецЕсли; - КонецЕсли; - КонецПроцедуры -&НаСервере -Функция РегламентныеЗаданияНайтиПредопределенное(ИмяПредопределенного) - Фильтр = Новый Структура("Метаданные", ИмяПредопределенного); - Найденные = РегламентныеЗаданияСервер.НайтиЗадания(Фильтр); - Задание = ?(Найденные.Количество() = 0, Неопределено, Найденные[0]); - Возврат Задание; -КонецФункции - #КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl index f6cf8de0c..8b605d9bf 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form index f649c634e..9d0009ec0 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form @@ -525,6 +525,74 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаНастройкаКолонтитулов</name> + <id>1692</id> + <items xsi:type="form:Button"> + <name>НастройкаКолонтитулов</name> + <id>1694</id> + <title> + <key>ru</key> + <value>Настройка колонтитулов</value> + + true + true + + true + + + НастройкаКолонтитуловРасширеннаяПодсказка + 1695 + + <key>ru</key> + <value>Установка номеров страниц, даты и других полей в колонтитулах отчетов при печати.</value> + + Label + true + true + + Left + + + Hyperlink + CommonCommand.НастройкаКолонтитулов + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Настройка колонтитулов</value> + + + ГруппаНастройкаКолонтитуловРасширеннаяПодсказка + 1693 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + true true diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl index 444094fe9..521ae029a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form index 717987d35..2f83bf997 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form @@ -320,7 +320,7 @@ НаборКонстант.ИспользоватьДатыЗапретаЗагрузки Right - ShowBottom + None OnChange Подключаемый_ПриИзмененииРеквизита @@ -351,40 +351,6 @@ true - true - true - - true - - - <key>ru</key> - <value>Даты запрета загрузки использование</value> - - 43 - false - - ГруппаДатыЗапретаЗагрузкиИспользованиеРасширеннаяПодсказка - 2054 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаДатыЗапретаЗагрузкиНастройка - 2061 НастроитьДатыЗапретаЗагрузки 2065 @@ -408,7 +374,7 @@ Hyperlink - InformationRegister.ДатыЗапретаИзменения.Command.ДатыЗапретаЗагрузкиДанных + Form.Command.НастроитьДатыЗапретаЗагрузки Normal Auto true @@ -421,6 +387,46 @@ true + + <key>ru</key> + <value>Даты запрета загрузки использование</value> + + + ru + Запрет загрузки данных прошлых периодов из других программ. +Не влияет на распределенные информационные базы. + + ShowBottom + 43 + false + + ГруппаДатыЗапретаЗагрузкиИспользованиеРасширеннаяПодсказка + 2054 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаДатыЗапретаЗагрузкиНастройка + 2061 + true + true + + true + <key>ru</key> <value>Даты запрета загрузки настройка</value> @@ -1088,6 +1094,28 @@ <common>true</common> </edit> </attributes> + <formCommands> + <name>НастроитьДатыЗапретаЗагрузки</name> + <title> + <key>ru</key> + <value>Настроить даты запрета загрузки</value> + + 1 + + ru + Настроить даты запрета загрузки данных + + + true + + + + НастроитьДатыЗапретаЗагрузки + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl index 6be27b60d..0cc84b07b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -110,7 +118,7 @@ Если ФоновоеЗадание <> Неопределено Тогда ТекстОшибки = НСтр("ru='Не удалось изменить префикс. |См. подробности в журнале регистрации.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); КонецЕсли; КонецЕсли; @@ -142,6 +150,16 @@ #Область ОбработчикиКомандФормы +&НаКлиенте +Процедура НастроитьДатыЗапретаЗагрузки(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзмененияСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ДатыЗапретаИзмененияСлужебныйКлиент"); + МодульДатыЗапретаИзмененияСлужебныйКлиент.ОткрытьДатыЗапретаЗагрузкиДанных(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + // Обработка оповещений от других открытых форм. // // Параметры: @@ -389,7 +407,7 @@ Или РеквизитПутьКДанным = "") И ПодсистемаСуществуетДатыЗапретаИзменения Тогда - Элементы.ГруппаДатыЗапретаЗагрузкиНастройка.Доступность = НаборКонстант.ИспользоватьДатыЗапретаЗагрузки; + Элементы.НастроитьДатыЗапретаЗагрузки.Доступность = НаборКонстант.ИспользоватьДатыЗапретаЗагрузки; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl index f3bb95316..fe4d18c85 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаКлиенте diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl index 8bf3cb87c..78f5f80a3 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl index 642603262..e76f50b1b 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Commands/ПереносФайловВТома/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form index 078bc9901..e7bda8e91 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form @@ -70,6 +70,7 @@ Label true + 8 false false @@ -254,7 +255,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl index 1fc2d271a..471f26154 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -23,6 +30,11 @@ ДополнительныеПараметры.Вставить( "ПриОткрытииЕстьТомаХраненияФайлов", РаботаСФайлами.ЕстьТомаХраненияФайлов()); + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ДекорацияИконка.Видимость = Ложь; + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + КонецЕсли; КонецПроцедуры @@ -96,11 +108,6 @@ Для Каждого ВерсияСтруктура Из МассивВерсий Цикл - Прогресс = 0; - Если ЧислоВерсийВБазе <> 0 Тогда - Прогресс = Окр(НомерЦикла * 100 / ЧислоВерсийВБазе, 2); - КонецЕсли; - ПакетВерсий.Добавить(ВерсияСтруктура); Если ПакетВерсий.Количество() >= ЧислоВерсийВПакете Тогда @@ -332,7 +339,7 @@ Если Размер > МаксимальныйРазмерФайла Тогда ИмяДляЖурнала = ВерсияСтруктура.Текст; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка переноса файла в том'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка переноса файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При переносе в том файла @@ -345,7 +352,7 @@ КонецЕсли; ИмяДляЖурнала = ВерсияСтруктура.Текст; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Начат перенос файла в том'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Начат перенос файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,, ФайлСсылка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Начат перенос в том файла @@ -413,10 +420,10 @@ ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); ФайлОбъект.Записать(); // Для переноса полей версии в файл. - РаботаСФайламиСлужебныйВызовСервера.УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ВерсияСсылка); + РаботаСФайламиСлужебный.УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ВерсияСсылка); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Завершен перенос файла в том'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Файлы.Завершен перенос файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация,, ФайлСсылка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Завершен перенос в том файла @@ -434,7 +441,7 @@ МассивФайловСОшибками.Добавить(СтруктураОшибки); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка переноса файла в том'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка переноса файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При переносе в том файла diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl index ed58aca46..99b0d4dbb 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/ОтключениеОбсуждений/CommandModule.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/ОтключениеОбсуждений/CommandModule.bsl index 4cd1013ac..b57aaee57 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/ОтключениеОбсуждений/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/ОтключениеОбсуждений/CommandModule.bsl @@ -1,59 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - Если Не ОбсужденияСлужебныйВызовСервера.Подключены() Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Подключение обсуждений не выполнено.'")); - Возврат; - КонецЕсли; - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("Отключить"); - Кнопки.Добавить(КодВозвратаДиалога.Нет); - - Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОтключении", ЭтотОбъект); - - ПоказатьВопрос(Оповещение, НСтр("ru = 'Отключить обсуждения?'"), - Кнопки,, КодВозвратаДиалога.Нет); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура ПослеОтветаНаВопросОбОтключении(КодВозврата, Контекст) Экспорт - - Если КодВозврата = "Отключить" Тогда - ПриОтключении(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОтключении() - - Оповещение = Новый ОписаниеОповещения("ПослеУспешногоОтключения", ЭтотОбъект,, - "ПриОбработкеОшибкиОтключения", ЭтотОбъект); - СистемаВзаимодействия.НачатьОтменуРегистрацииИнформационнойБазы(Оповещение); - -КонецПроцедуры - -&НаКлиенте -Процедура ПослеУспешногоОтключения(Контекст) Экспорт - - Оповестить("ОбсужденияПодключены", Ложь); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОбработкеОшибкиОтключения(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке); + ОбсужденияСлужебныйКлиент.ПоказатьОтключение(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl index 6d342c56b..f98234062 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -244,7 +251,7 @@ Возврат "ТребуетсяСоздатьАдминистратора"; КонецЕсли; - Если ОбсужденияСлужебныйВызовСервера.Заблокированы() Тогда + Если ОбсужденияСлужебный.Заблокированы() Тогда Возврат "ТребуетсяРазблокировать"; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Commands/ПоискИУдалениеДублей/CommandModule.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Commands/ПоискИУдалениеДублей/CommandModule.bsl index 6059d0f79..f705d5a1e 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Commands/ПоискИУдалениеДублей/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Commands/ПоискИУдалениеДублей/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl index aa3715b3d..069ef63b8 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Ожидаются параметры: // // ОбластьПоискаДублей - Строка - Полное имя метаданных таблицы ранее выбранной области поиска. diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form index 0cb685607..56871ac80 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form @@ -1476,6 +1476,7 @@ true true + true Style.ПоясняющийТекст @@ -2839,6 +2840,7 @@ Label true true + true Style.ПоясняющийТекст @@ -4508,27 +4510,6 @@ true - - ВсегоЭлементов - - <key>ru</key> - <value>Всего элементов</value> - - 31 - - Number - - 10 - true - - - - true - - - true - - АдресНастроек @@ -4562,6 +4543,44 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ОписаниеОшибкиПоискаДублей</name> + <title> + <key>ru</key> + <value>Описание ошибки поиска дублей</value> + + 34 + + String + + + + true + + + true + + + + ВсегоЭлементов + + <key>ru</key> + <value>Всего элементов</value> + + 35 + + Number + + 10 + + + + true + + + true + + ВыбратьОсновнойЭлемент diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl index e072078f2..8e7eec94a 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -23,7 +31,6 @@ ЗаполнитьЗначенияСвойств(НастройкиФормы, Параметры); ПриСозданииНаСервереИнициализацияДанных(НастройкиФормы); - ИнициализироватьКомпоновщикОтбораИПравила(НастройкиФормы); // Схема должна быть переформирована всегда, настройки компоновщика - в разрезе ОбластьПоискаДублей. @@ -37,12 +44,10 @@ ОтображениеСостояния = Элементы.ВыполнениеПоиска.ОтображениеСостояния; ОтображениеСостояния.Видимость = Истина; - ОтображениеСостояния.Текст = НСтр("ru = 'Поиск дублей...'"); ОтображениеСостояния.Картинка = Элементы.ДлительнаяОперация48.Картинка; ОтображениеСостояния = Элементы.ВыполнениеУдаления.ОтображениеСостояния; ОтображениеСостояния.Видимость = Истина; - ОтображениеСостояния.Текст = НСтр("ru = 'Удаление дублей...'"); ОтображениеСостояния.Картинка = Элементы.ДлительнаяОперация48.Картинка; ОтображениеСостояния = Элементы.ДублейНеНайдено.ОтображениеСостояния; @@ -117,7 +122,7 @@ // Обновление элементов формы. НастройкиМастера.ТекущийШаг = ШагПоиск; - ВидимостьДоступность(ЭтотОбъект); + УстановитьВидимостьДоступность(ЭтотОбъект); КонецПроцедуры @@ -300,7 +305,7 @@ #КонецОбласти -#Область ОбработчикиСобытийТаблицыНайденныеДубли +#Область ОбработчикиСобытийЭлементовТаблицыФормыНайденныеДубли &НаКлиенте Процедура НайденныеДублиПриАктивизацииСтроки(Элемент) @@ -377,13 +382,20 @@ &НаКлиенте Процедура НайденныеДублиПометкаПриИзменении(Элемент) + ДанныеСтроки = Элементы.НайденныеДубли.ТекущиеДанные; - ДанныеСтроки.Пометка = ДанныеСтроки.Пометка % 2; - ИзменитьПометкиКандидатовИерархически(ДанныеСтроки); - ПересчитатьКоличествоНайденныхДублей(); + ОписаниеОшибкиПоискаДублей = ""; + ВсегоНайденоДублей = 0; + Для Каждого Дубль Из НайденныеДубли.ПолучитьЭлементы() Цикл + Для Каждого Потомок Из Дубль.ПолучитьЭлементы() Цикл + Если Не Потомок.Основной И Потомок.Пометка Тогда + ВсегоНайденоДублей = ВсегоНайденоДублей + 1; + КонецЕсли; + КонецЦикла; + КонецЦикла; ОбновитьОписаниеСостоянияНайденныхДублей(ЭтотОбъект); @@ -391,7 +403,7 @@ #КонецОбласти -#Область ОбработчикиСобытийТаблицыНеобработанныеДубли +#Область ОбработчикиСобытийЭлементовТаблицыФормыНеобработанныеДубли &НаКлиенте Процедура НеобработанныеДублиПриАктивизацииСтроки(Элемент) @@ -458,7 +470,7 @@ #КонецОбласти -#Область ОбработчикиСобытийТаблицыМестаИспользованияНеобработанных +#Область ОбработчикиСобытийЭлементовТаблицыФормыМестаИспользованияНеобработанных &НаКлиенте Процедура МестаИспользованияНеобработанныхПриАктивизацииСтроки(Элемент) @@ -482,7 +494,7 @@ #КонецОбласти -#Область ОбработчикиСобытийТаблицыМестаИспользованияКандидата +#Область ОбработчикиСобытийЭлементовТаблицыФормыМестаИспользованияКандидата &НаКлиенте Процедура МестаИспользованияКандидатаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -656,7 +668,7 @@ // Обновляет видимость и доступность элементов формы в соответствии с текущим шагом мастера. &НаКлиентеНаСервереБезКонтекста -Процедура ВидимостьДоступность(Форма) +Процедура УстановитьВидимостьДоступность(Форма) Элементы = Форма.Элементы; НастройкиМастера = Форма.НастройкиМастера; @@ -712,7 +724,7 @@ НастройкиМастера.ТекущийШаг = ОписаниеШага; // Обновление видимости. - ВидимостьДоступность(ЭтотОбъект); + УстановитьВидимостьДоступность(ЭтотОбъект); ПриАктивацииШагаМастера(); КонецПроцедуры @@ -772,7 +784,7 @@ КонецЕсли; Элементы.Шапка.Доступность = Ложь; НастройкиМастера.ПоказатьДиалогПередЗакрытием = Истина; - ЗапуститьФоновоеЗаданиеКлиент(); + НайтиИУдалитьДублиКлиент(); ИначеЕсли ТекущаяСтраница = Элементы.ШагВыборОсновногоЭлемента Тогда @@ -784,7 +796,7 @@ Элементы.Шапка.Доступность = Ложь; НастройкиМастера.ПоказатьДиалогПередЗакрытием = Истина; - ЗапуститьФоновоеЗаданиеКлиент(); + НайтиИУдалитьДублиКлиент(); ИначеЕсли ТекущаяСтраница = Элементы.ШагУспешноеУдаление Тогда @@ -797,6 +809,13 @@ ИначеЕсли ТекущаяСтраница = Элементы.ШагДублейНеНайдено Тогда Элементы.Шапка.Доступность = Истина; + Если ПустаяСтрока(ОписаниеОшибкиПоискаДублей) Тогда + Сообщение = НСтр("ru = 'Не обнаружено дублей по указанным параметрам.'"); + Иначе + Сообщение = ОписаниеОшибкиПоискаДублей; + КонецЕсли; + Элементы.ДублейНеНайдено.ОтображениеСостояния.Текст = Сообщение + Символы.ПС + + НСтр("ru = 'Измените условия и нажмите ""Найти дубли""'"); ИначеЕсли ТекущаяСтраница = Элементы.ШагВозниклаОшибка Тогда @@ -810,6 +829,7 @@ &НаКлиенте Процедура ШагМастераДалее() + ОчиститьСообщения(); ТекущаяСтраница = Элементы.ШагиМастера.ТекущаяСтраница; Если ТекущаяСтраница = Элементы.ШагПоискНеВыполнялся Тогда @@ -981,18 +1001,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПересчитатьКоличествоНайденныхДублей() - ВсегоНайденоДублей = 0; - Для Каждого Дубль Из НайденныеДубли.ПолучитьЭлементы() Цикл - Для Каждого Потомок Из Дубль.ПолучитьЭлементы() Цикл - Если Не Потомок.Основной И Потомок.Пометка Тогда - ВсегоНайденоДублей = ВсегоНайденоДублей + 1; - КонецЕсли; - КонецЦикла; - КонецЦикла; -КонецПроцедуры - &НаКлиенте Процедура ИзменитьОсновнойЭлементИерархически(Знач ДанныеСтроки, Знач Родитель) Для Каждого Потомок Из Родитель.ПолучитьЭлементы() Цикл @@ -1014,13 +1022,17 @@ &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьОписаниеСостоянияНайденныхДублей(Форма) - Форма.ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Найдено дублей: %2 (среди элементов: %1). Все отмеченные элементы будут помечены на удаление и заменены во всех местах использования на оригиналы (отмечены стрелкой).'"), - Форма.ВсегоЭлементов, - Форма.ВсегоНайденоДублей), - , - Форма.ЦветПоясняющийТекст); + Если ПустаяСтрока(Форма.ОписаниеОшибкиПоискаДублей) Тогда + Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выбрано дублей: %1 из %2.'"), + Форма.ВсегоНайденоДублей, Форма.ВсегоЭлементов); + Иначе + Описание = Форма.ОписаниеОшибкиПоискаДублей; + КонецЕсли; + + Форма.ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Описание + Символы.ПС + + НСтр("ru = 'Выбранные элементы будут помечены на удаление и заменены на оригиналы (отмечены стрелкой).'"), + , Форма.ЦветПоясняющийТекст); КонецПроцедуры @@ -1410,27 +1422,30 @@ // Работа с длительными операциями &НаКлиенте -Процедура ЗапуститьФоновоеЗаданиеКлиент() - Задание = ЗапуститьФоновоеЗадание(); +Процедура НайтиИУдалитьДублиКлиент() + + Задание = НайтиИУдалитьДубли(); НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); НастройкиОжидания.ВыводитьОкноОжидания = Ложь; - - Обработчик = Новый ОписаниеОповещения("ПослеЗавершенияФоновогоЗадания", ЭтотОбъект); - + НастройкиОжидания.ВыводитьПрогрессВыполнения = Истина; + НастройкиОжидания.ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("НайтиИУдалитьДублиПрогресс", ЭтотОбъект);; + Обработчик = Новый ОписаниеОповещения("НайтиИУдалитьДублиЗавершение", ЭтотОбъект); ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания); + КонецПроцедуры &НаСервере -Функция ЗапуститьФоновоеЗадание() +Функция НайтиИУдалитьДубли() ПараметрыПроцедуры = Новый Структура; ПараметрыПроцедуры.Вставить("УчитыватьПрикладныеПравила", УчитыватьПрикладныеПравила); ТекущаяСтраница = Элементы.ШагиМастера.ТекущаяСтраница; - Если ТекущаяСтраница = Элементы.ШагВыполнениеПоиска Тогда + Элементы.ВыполнениеПоиска.ОтображениеСостояния.Текст = НСтр("ru = 'Поиск дублей...'"); + ИмяПроцедуры = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя() + ".МодульОбъекта.ФоновыйПоискДублей"; НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Поиск дублей'"); ПараметрыПроцедуры.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); @@ -1445,14 +1460,14 @@ ИначеЕсли ТекущаяСтраница = Элементы.ШагВыполнениеУдаления Тогда + Элементы.ВыполнениеУдаления.ОтображениеСостояния.Текст = НСтр("ru = 'Удаление дублей...'"); + ИмяПроцедуры = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя() + ".МодульОбъекта.ФоновоеУдалениеДублей"; НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Удаление дублей'"); - ПараметрыПроцедуры.Вставить("СпособУдаления", "Пометка"); ПараметрыПроцедуры.Вставить("ПарыЗамен", ПарыЗаменДублей()); - ПараметрыПроцедуры.Вставить("ЗаменаПарыВТранзакции", Ложь); Иначе - ВызватьИсключение НСтр("ru = 'Некорректное имя процедуры.'"); + ВызватьИсключение НСтр("ru = 'Некорректное состояние в НайтиИУдалитьДубли.'"); КонецЕсли; НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); @@ -1462,7 +1477,39 @@ КонецФункции &НаКлиенте -Процедура ПослеЗавершенияФоновогоЗадания(Задание, ДополнительныеПараметры) Экспорт +Процедура НайтиИУдалитьДублиПрогресс(Прогресс, ДополнительныеПараметры) Экспорт + + Если Прогресс = Неопределено Или Прогресс.Прогресс = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущаяСтраница = Элементы.ШагиМастера.ТекущаяСтраница; + Если ТекущаяСтраница = Элементы.ШагВыполнениеПоиска Тогда + + Сообщение = НСтр("ru = 'Поиск дублей...'"); + Если Прогресс.Прогресс.Процент > 0 Тогда + Сообщение = Сообщение + " " + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '(найдено %1)'"), Прогресс.Прогресс.Процент); + КонецЕсли; + Элементы.ВыполнениеПоиска.ОтображениеСостояния.Текст = Сообщение; + + ИначеЕсли ТекущаяСтраница = Элементы.ШагВыполнениеУдаления Тогда + + Сообщение = НСтр("ru = 'Удаление дублей...'"); + Если Прогресс.Прогресс.Процент > 0 Тогда + Сообщение = Сообщение + " " + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '(удалено %1 из %2)'"), Прогресс.Прогресс.Процент, ВсегоНайденоДублей); + КонецЕсли; + Элементы.ВыполнениеУдаления.ОтображениеСостояния.Текст = Сообщение; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НайтиИУдалитьДублиЗавершение(Задание, ДополнительныеПараметры) Экспорт НастройкиМастера.ПоказатьДиалогПередЗакрытием = Ложь; Активизировать(); ТекущаяСтраница = Элементы.ШагиМастера.ТекущаяСтраница; @@ -1489,14 +1536,11 @@ Если ТекущаяСтраница = Элементы.ШагВыполнениеПоиска Тогда ВсегоНайденоДублей = ЗаполнитьРезультатыПоискаДублей(Задание.АдресРезультата); + ВсегоЭлементов = ВсегоНайденоДублей; Если ВсегоНайденоДублей > 0 Тогда - // Найдены дубли. + ОбновитьОписаниеСостоянияНайденныхДублей(ЭтотОбъект); ПерейтиНаШагМастера(НастройкиМастера.ТекущийШаг.Индекс + 1); - ИначеЕсли ВсегоНайденоДублей < 0 Тогда - // Возникла ошибка (вероятно, найдено слишком много дублей). - ПерейтиНаШагМастера(Элементы.ШагВозниклаОшибка); Иначе - // Дублей по текущим установкам не найдено. ПерейтиНаШагМастера(Элементы.ШагДублейНеНайдено); КонецЕсли; ИначеЕсли ТекущаяСтраница = Элементы.ШагВыполнениеУдаления Тогда @@ -1514,16 +1558,11 @@ &НаСервере Функция ЗаполнитьРезультатыПоискаДублей(Знач АдресРезультата) - // Данные - результат функции ГруппыДублей модуля. - Данные = ПолучитьИзВременногоХранилища(АдресРезультата); - Если Не ПустаяСтрока(Данные.ОписаниеОшибки) Тогда // Фоновое сломалось - Элементы.НадписьТекстОшибки.Заголовок = Данные.ОписаниеОшибки; - Элементы.СсылкаПодробнее.Видимость = Ложь; - Возврат -1; - КонецЕсли; - // Нет ошибок поиска - // Строим дерево для редактирования по таблицам результата. + // Получаем результат функции ГруппыДублей модуля обработки. + Данные = ПолучитьИзВременногоХранилища(АдресРезультата); + ОписаниеОшибкиПоискаДублей = Данные.ОписаниеОшибки; + ЭлементыДерева = НайденныеДубли.ПолучитьЭлементы(); ЭлементыДерева.Очистить(); @@ -1578,15 +1617,8 @@ УдалитьИзВременногоХранилища(АдресМестИспользования); КонецЕсли; АдресМестИспользования = ПоместитьВоВременноеХранилище(МестаИспользования, УникальныйИдентификатор); - - Если ВсегоНайденоДублей = ЭлементыДерева.Количество() Тогда - ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Информация16.Картинка, " ", - НСтр("ru = 'Не обнаружено дублей по указанным условиям.'")); - Иначе - ОбновитьОписаниеСостоянияНайденныхДублей(ЭтотОбъект); - КонецЕсли; - Возврат ВсегоНайденоДублей; + КонецФункции &НаСервере diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl index 515f61a39..4d7eb89f2 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Ожидаются параметры: // // ИдентификаторОсновнойФормы - УникальныйИдентификатор - Идентификатор формы, через хранилище которой diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl index 172ad8d36..f41d911fb 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Ожидаются параметры: // // ОбластьПоискаДублей - Строка - Полное имя метаданных таблицы ранее выбранной области поиска. @@ -70,7 +78,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура УчитыватьПрикладныеПравилаПриИзменении(Элемент) @@ -92,7 +100,7 @@ #КонецОбласти -#Область ОбработчикиСобытийТаблицыПравилаПоиска +#Область ОбработчикиСобытийЭлементовТаблицыФормыПравилаПоиска &НаКлиенте Процедура ПравилаПоискаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -121,7 +129,7 @@ #КонецОбласти -#Область ОбработчикиКомандыФормы +#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗавершитьРедактирование(Команда) diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl index 14a691018..430f41d79 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -35,7 +43,7 @@ // // Параметры: // ПараметрыПоиска - Структура - Описывает параметры поиска. -// ЭталонныйОбъект - Произвольный - Объект для сравнения при поиски похожих элементов. +// ЭталонныйОбъект - Произвольный - объект, для которого производится поиск дублей. // // Возвращаемое значение: // Структура - Результаты поиска дублей. @@ -55,7 +63,6 @@ Функция ГруппыДублей(Знач ПараметрыПоиска, Знач ЭталонныйОбъект = Неопределено) Экспорт ПолноеИмяОМ = ПараметрыПоиска.ОбластьПоискаДублей; ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОМ); - ЧитатьТаблицу1ИзСУБД = (ЭталонныйОбъект = Неопределено); // 1. Определяем параметры с учетом прикладного кода. РазмерВозвращаемойПорции = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "МаксимальноеЧислоДублей"); @@ -195,12 +202,9 @@ ПолеКД = Новый ПолеКомпоновкиДанных(СокрЛП(ИмяПоля)); ДоступноеПолеКД = НастройкиКД.ДоступныеПоляВыбора.НайтиПоле(ПолеКД); Если ДоступноеПолеКД = Неопределено Тогда - ЗаписьЖурналаРегистрации( - ПоискИУдалениеДублей.НаименованиеПодсистемы(Ложь), - УровеньЖурналаРегистрации.Предупреждение, - ОбъектМетаданных, - ЭталонныйОбъект, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не найдено.'"), Строка(ПолеКД))); + ЗаписьЖурналаРегистрации(ПоискИУдалениеДублей.НаименованиеПодсистемы(Ложь), + УровеньЖурналаРегистрации.Предупреждение, ОбъектМетаданных, ЭталонныйОбъект, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не существует.'"), Строка(ПолеКД))); Продолжить; КонецЕсли; ВыбранноеПолеКД = НастройкиКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); @@ -241,14 +245,14 @@ ГруппировкаКД.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); // Чтение данных оригиналов. - Если ЧитатьТаблицу1ИзСУБД Тогда - Выборка1 = ИнициализироватьВыборкуКД(СхемаКД, КомпоновщикНастроекКД.ПолучитьНастройки()); + Если ЭталонныйОбъект = Неопределено Тогда + ВыборкаЭталонныхОбъектов = ИнициализироватьВыборкуКД(СхемаКД, КомпоновщикНастроекКД.ПолучитьНастройки()); Иначе ТаблицаЗначений = ОбъектВТаблицуЗначений(ЭталонныйОбъект, РасшифровкаДополнительныхПолей); Если Не ЕстьКод И Не ЕстьНомер Тогда ТаблицаЗначений.Колонки.Добавить("Код", Новый ОписаниеТипов("Неопределено")); КонецЕсли; - Выборка1 = ИнициализироватьВыборкуТЗ(ТаблицаЗначений); + ВыборкаЭталонныхОбъектов = ИнициализироватьВыборкуТЗ(ТаблицаЗначений); КонецЕсли; // Подготовка СКД к чтению данных дублей. @@ -263,11 +267,7 @@ КонецЦикла; ЭлементОтбораКД = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); - Если ЧитатьТаблицу1ИзСУБД Тогда - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; - Иначе - ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; - КонецЕсли; + ЭлементОтбораКД.ВидСравнения = ?(ЭталонныйОбъект = Неопределено, ВидСравненияКомпоновкиДанных.Больше, ВидСравненияКомпоновкиДанных.НеРавно); ОтборыКандидатов.Вставить("Ссылка", ЭлементОтбораКД); // Результат и цикл поиска @@ -307,104 +307,95 @@ СтруктураПолей.Вставить("СписокПолейИдентичности", ПоляСравненияНаРавенство); СтруктураПолей.Вставить("СписокПолейПодобия", ПоляСравненияНаПодобие); - Пока СледующийЭлементВыборки(Выборка1) Цикл - СтрокаТаблицы1 = Выборка1.ТекущийЭлемент; + Пока СледующийЭлементВыборки(ВыборкаЭталонныхОбъектов) Цикл + ЭталонныйЭлемент = ВыборкаЭталонныхОбъектов.ТекущийЭлемент; // Установка отборов для выбора кандидатов. Для Каждого КлючИЗначение Из ОтборыКандидатов Цикл ЭлементОтбораКД = КлючИЗначение.Значение; - ЭлементОтбораКД.ПравоеЗначение = СтрокаТаблицы1[КлючИЗначение.Ключ]; + ЭлементОтбораКД.ПравоеЗначение = ЭталонныйЭлемент[КлючИЗначение.Ключ]; КонецЦикла; // Выборка кандидатов данных из СУБД. - Выборка2 = ИнициализироватьВыборкуКД(СхемаКД, НастройкиКД); - Таблица2 = Выборка2.ПроцессорВыводаКД.Вывести(Выборка2.ПроцессорКД); + ВыборкаКандидатов = ИнициализироватьВыборкуКД(СхемаКД, НастройкиКД); + КандидатыДублей = ВыборкаКандидатов.ПроцессорВыводаКД.Вывести(ВыборкаКандидатов.ПроцессорКД); Если СтруктураПолейПодобия.Количество() > 0 Тогда FuzzySearch = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("FuzzyStringMatchExtension", "ОбщийМакет.КомпонентаПоискаСтрок"); Если FuzzySearch = Неопределено Тогда Результат.ОписаниеОшибки = - НСтр("ru = 'Не удалось подключить внешнюю компоненту FuzzyStringMatchExtension - |из макета ""ОбщийМакет.КомпонентаПоискаСтрок"" + НСтр("ru = 'Не удалось подключить внешнюю компоненту FuzzyStringMatchExtension из макета ""ОбщийМакет.КомпонентаПоискаСтрок"" |Подробнее см. в журнале регистрации.'"); Возврат Результат; КонецЕсли; Для Каждого КлючЗначение Из СтруктураПолейПодобия Цикл ИмяПоля = КлючЗначение.Ключ; - МассивСтрок = Таблица2.ВыгрузитьКолонку(ИмяПоля); - СтрокаМассивом = СтрСоединить(МассивСтрок,"~"); - СтрокаДляПоиска = СтрокаТаблицы1[ИмяПоля]; - МассивИндексовСтрокой = FuzzySearch.StringSearch(НРег(СтрокаДляПоиска), НРег(СтрокаМассивом), "~", 10, 80, 90); - Если ПустаяСтрока(МассивИндексовСтрокой) Тогда + ИскомыеСтроки = СтрСоединить(КандидатыДублей.ВыгрузитьКолонку(ИмяПоля), "~"); + СтрокаДляПоиска = ЭталонныйЭлемент[ИмяПоля]; + ИндексыСтрок = FuzzySearch.StringSearch(НРег(СтрокаДляПоиска), НРег(ИскомыеСтроки), "~", 10, 80, 90); + Если ПустаяСтрока(ИндексыСтрок) Тогда Продолжить; КонецЕсли; - МассивИндексов = СтрРазделить(МассивИндексовСтрокой, ","); - Если МассивИндексов.Количество() > 0 Тогда - Для Каждого ИндексСтроки Из МассивИндексов Цикл - Если ПустаяСтрока(ИндексСтроки) Тогда - Продолжить; + Для Каждого ИндексСтроки Из СтрРазделить(ИндексыСтрок, ",") Цикл + Если ПустаяСтрока(ИндексСтроки) Тогда + Продолжить; + КонецЕсли; + ЭлементДубль = КандидатыДублей.Получить(ИндексСтроки); + Если ИспользоватьПрикладныеПравила Тогда + ДобавитьСтрокуКандидатов(ТаблицаКандидатов, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); + Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда + ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, ЭталонныйЭлемент, ТаблицаКандидатов, + СтруктураПолей, ДополнительныеПараметры); + ТаблицаКандидатов.Очистить(); КонецЕсли; - СтрокаТаблицы2 = Таблица2.Получить(ИндексСтроки); - Если ИспользоватьПрикладныеПравила Тогда - // Наполняем таблицу для прикладных правил, вызываем их, если пора. - ДобавитьСтрокуКандидатов(ТаблицаКандидатов, СтрокаТаблицы1, СтрокаТаблицы2, СтруктураПолей); - Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда - ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, СтрокаТаблицы1, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); - ТаблицаКандидатов.Очистить(); - КонецЕсли; - Иначе - // Это дубли. - ДобавитьДубльВРезультат(ТаблицаДублей, СтрокаТаблицы1, СтрокаТаблицы2, СтруктураПолей); - КонецЕсли; - КонецЦикла; - КонецЕсли; + Иначе + ЗарегистрироватьДубль(ТаблицаДублей, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); + КонецЕсли; + КонецЦикла; КонецЦикла; Иначе - Для Каждого СтрокаТаблицы2 Из Таблица2 Цикл + Для Каждого ЭлементДубль Из КандидатыДублей Цикл Если ИспользоватьПрикладныеПравила Тогда - // Наполняем таблицу для прикладных правил, вызываем их, если пора. - ДобавитьСтрокуКандидатов(ТаблицаКандидатов, СтрокаТаблицы1, СтрокаТаблицы2, СтруктураПолей); + ДобавитьСтрокуКандидатов(ТаблицаКандидатов, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда - ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, СтрокаТаблицы1, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); + ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, ЭталонныйЭлемент, ТаблицаКандидатов, + СтруктураПолей, ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; Иначе - // Это дубли. - ДобавитьДубльВРезультат(ТаблицаДублей, СтрокаТаблицы1, СтрокаТаблицы2, СтруктураПолей); + ЗарегистрироватьДубль(ТаблицаДублей, ЭталонныйЭлемент, ЭлементДубль, СтруктураПолей); КонецЕсли; КонецЦикла; КонецЕсли; // Обрабатываем остаток таблицы для прикладных правил. Если ИспользоватьПрикладныеПравила Тогда - ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, СтрокаТаблицы1, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); + ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, ЭталонныйЭлемент, ТаблицаКандидатов, + СтруктураПолей, ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; - // Завершен анализ группы, смотрим на количество. Много клиенту не отдаем. + // Учитываем ограничение. Если РазмерВозвращаемойПорции > 0 И (ТаблицаДублей.Количество() > РазмерВозвращаемойПорции) Тогда + Найдено = ТаблицаДублей.Количество(); // Откатываем последнюю группу. - Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Родитель ", СтрокаТаблицы1.Ссылка) ) Цикл + Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Родитель", ЭталонныйЭлемент.Ссылка) ) Цикл ТаблицаДублей.Удалить(Строка); КонецЦикла; - Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Ссылка", СтрокаТаблицы1.Ссылка) ) Цикл + Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Ссылка", ЭталонныйЭлемент.Ссылка) ) Цикл ТаблицаДублей.Удалить(Строка); КонецЦикла; - // Если это была последняя группа, то сообщаем об ошибке. - Если ТаблицаДублей.Количество() = 0 Тогда - Результат.ОписаниеОшибки = НСтр("ru = 'Найдено слишком много элементов, определены не все группы дублей.'"); + Если Найдено > 0 И ТаблицаДублей.Количество() = 0 Тогда + Результат.ОписаниеОшибки = НСтр("ru = 'Найдено слишком много дублей одного элемента.'"); Иначе - Результат.ОписаниеОшибки = НСтр("ru = 'Найдено слишком много элементов. Уточните критерии поиска дублей.'"); + Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Найдено слишком много дублей. Показаны только первые %1.'"), РазмерВозвращаемойПорции); КонецЕсли; - Прервать; + Возврат Результат; КонецЕсли; КонецЦикла; - Если Результат.ОписаниеОшибки <> Неопределено Тогда - Возврат Результат; - КонецЕсли; - // Расчет мест использования Если РассчитыватьМестаИспользования Тогда НаборСсылок = Новый Массив; @@ -489,9 +480,10 @@ Процедура ФоновоеУдалениеДублей(Знач Параметры, Знач АдресРезультата) Экспорт ПараметрыЗамены = Новый Структура; - ПараметрыЗамены.Вставить("СпособУдаления", Параметры.СпособУдаления); ПараметрыЗамены.Вставить("ВключатьБизнесЛогику", Истина); ПараметрыЗамены.Вставить("УчитыватьПрикладныеПравила", Параметры.УчитыватьПрикладныеПравила); + ПараметрыЗамены.Вставить("ЗаменаПарыВТранзакции", Ложь); + ПараметрыЗамены.Вставить("СпособУдаления", "Пометка"); ЗаменитьСсылки(Параметры.ПарыЗамен, ПараметрыЗамены, АдресРезультата); @@ -528,7 +520,7 @@ // Дополнительный анализ кандидатов в дубли прикладном методом. // -Процедура ДобавитьДублиПоПрикладнымПравилам(СтрокиДереваРезультата, Знач МенеджерОбластиПоиска, Знач ОсновныеДанные, Знач ТаблицаКандидатов, Знач СтруктураПолей, Знач ДополнительныеПараметры) +Процедура ЗарегистрироватьДублиПоПрикладнымПравилам(СтрокиДереваРезультата, Знач МенеджерОбластиПоиска, Знач ОсновныеДанные, Знач ТаблицаКандидатов, Знач СтруктураПолей, Знач ДополнительныеПараметры) Если ТаблицаКандидатов.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -559,7 +551,7 @@ Данные2.Вставить(ИмяПоля, ПараКандидатов.Поля2[ИмяПоля]); КонецЦикла; - ДобавитьДубльВРезультат(СтрокиДереваРезультата, Данные1, Данные2, СтруктураПолей); + ЗарегистрироватьДубль(СтрокиДереваРезультата, Данные1, Данные2, СтруктураПолей); КонецЦикла; КонецПроцедуры @@ -600,10 +592,10 @@ // Добавляем в дерево результатов найденный вариант. // -Процедура ДобавитьДубльВРезультат(ТаблицаДублей, Знач СтрокаТаблицы1, Знач СтрокаТаблицы2, Знач СтруктураПолей) +Процедура ЗарегистрироватьДубль(ТаблицаДублей, Знач Элемент1, Знач Элемент2, Знач СтруктураПолей) // Определить какой элемент уже добавлен в дубли. - СтрокаДублей1 = ТаблицаДублей.Найти(СтрокаТаблицы1.Ссылка, "Ссылка"); - СтрокаДублей2 = ТаблицаДублей.Найти(СтрокаТаблицы2.Ссылка, "Ссылка"); + СтрокаДублей1 = ТаблицаДублей.Найти(Элемент1.Ссылка, "Ссылка"); + СтрокаДублей2 = ТаблицаДублей.Найти(Элемент2.Ссылка, "Ссылка"); Дубль1Зарегистрирован = (СтрокаДублей1 <> Неопределено); Дубль2Зарегистрирован = (СтрокаДублей2 <> Неопределено); @@ -619,23 +611,26 @@ СсылкаГруппыДублей = ?(ЗначениеЗаполнено(СтрокаДублей2.Родитель), СтрокаДублей2.Родитель, СтрокаДублей2.Ссылка); Иначе // Регистрация группы дублей. ГруппаДублей = ТаблицаДублей.Добавить(); - ГруппаДублей.Ссылка = СтрокаТаблицы1.Ссылка; + ГруппаДублей.Ссылка = Элемент1.Ссылка; СсылкаГруппыДублей = ГруппаДублей.Ссылка; КонецЕсли; СписокСвойств = "Ссылка, Код, Наименование," + СтруктураПолей.СписокПолейИдентичности + "," + СтруктураПолей.СписокПолейПодобия; Если Не Дубль1Зарегистрирован Тогда - СтрокаДублей1 = ТаблицаДублей.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаДублей1, СтрокаТаблицы1, СписокСвойств); - СтрокаДублей1.Родитель = СсылкаГруппыДублей; + СведенияОДубле = ТаблицаДублей.Добавить(); + ЗаполнитьЗначенияСвойств(СведенияОДубле, Элемент1, СписокСвойств); + СведенияОДубле.Родитель = СсылкаГруппыДублей; КонецЕсли; Если Не Дубль2Зарегистрирован Тогда - СтрокаДублей2 = ТаблицаДублей.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаДублей2, СтрокаТаблицы2, СписокСвойств); - СтрокаДублей2.Родитель = СсылкаГруппыДублей; + СведенияОДубле = ТаблицаДублей.Добавить(); + ЗаполнитьЗначенияСвойств(СведенияОДубле, Элемент2, СписокСвойств); + СведенияОДубле.Родитель = СсылкаГруппыДублей; КонецЕсли; + + ДлительныеОперации.СообщитьПрогресс(ТаблицаДублей.Количество()); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -732,4 +727,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl index a270cdf09..89747e460 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl index d8d3919cb..89a59c782 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form index 2ed838844..b82f6fbdc 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form @@ -118,6 +118,72 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> + <items xsi:type="form:FormGroup"> + <name>Группа3</name> + <id>212</id> + <items xsi:type="form:FormField"> + <name>ИспользоватьПолнотекстовыйПоиск</name> + <id>214</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>216</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ИспользоватьПолнотекстовыйПоискКонтекстноеМеню</name> + <id>215</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> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>Группа3РасширеннаяПодсказка</name> + <id>213</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <type>UsualGroup</type> + <extInfo xsi:type="form:UsualGroupExtInfo"> + <group>HorizontalIfPossible</group> + <behavior>Auto</behavior> + <showLeftMargin>true</showLeftMargin> + <united>true</united> + <throughAlign>Auto</throughAlign> + <currentRowUse>Auto</currentRowUse> + </extInfo> + </items> <items xsi:type="form:FormGroup"> <name>Группа1</name> <id>151</id> @@ -179,6 +245,228 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаМаксимальныйРазмерИндексируемыхДанных</name> + <id>193</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаМаксимальныйРазмерИндексируемыхДанныхЗначение</name> + <id>195</id> + <items xsi:type="form:FormField"> + <name>ОграничитьМаксимальныйРазмерИндексируемыхДанных</name> + <id>209</id> + <title> + <key>ru</key> + <value>Ограничить максимальный размер индексируемых данных</value> + + true + true + + true + + + ОграничитьМаксимальныйРазмерИндексируемыхДанных + + Right + + OnChange + ОграничитьМаксимальныйРазмерИндексируемыхДанныхПриИзменении + + + ОграничитьМаксимальныйРазмерИндексируемыхДанныхРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + + ОграничитьМаксимальныйРазмерИндексируемыхДанныхКонтекстноеМеню + 210 + true + + CheckBoxField + Enter + true + Left + true + + + + МаксимальныйРазмерИндексируемыхДанных + 197 + true + true + + true + + + МаксимальныйРазмерИндексируемыхДанных + + None + + OnChange + МаксимальныйРазмерИндексируемыхДанныхПриИзменении + + + МаксимальныйРазмерИндексируемыхДанныхРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + + МаксимальныйРазмерИндексируемыхДанныхКонтекстноеМеню + 198 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияМб + 200 + + <key>ru</key> + <value>Мб</value> + + true + true + + true + + + ДекорацияМбРасширеннаяПодсказка + 202 + Label + true + true + + Left + + + + ДекорацияМбКонтекстноеМеню + 201 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Максимальный размер индексируемых данных значение</value> + + + ГруппаМаксимальныйРазмерИндексируемыхДанныхЗначениеРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + МаксимальныйРазмерИндексируемыхДанныхПодсказка + 203 + + <key>ru</key> + <value>Ограничение размера позволяет повысить скорость индексации и полнотекстового поиска.</value> + + true + true + + true + + + МаксимальныйРазмерИндексируемыхДанныхПодсказкаРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + + МаксимальныйРазмерИндексируемыхДанныхПодсказкаКонтекстноеМеню + 204 + true + + Label + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Максимальный размер индексируемых данных</value> + + + ГруппаМаксимальныйРазмерИндексируемыхДанныхРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + ГруппаУправлениеПолнотекстовымПоиском 30 @@ -409,223 +697,6 @@ Auto - - ГруппаМаксимальныйРазмерИндексируемыхДанных - 193 - - ГруппаМаксимальныйРазмерИндексируемыхДанныхЗначение - 195 - - ОграничитьМаксимальныйРазмерИндексируемыхДанных - 209 - true - true - - true - - - ОграничитьМаксимальныйРазмерИндексируемыхДанных - - None - - OnChange - ОграничитьМаксимальныйРазмерИндексируемыхДанныхПриИзменении - - - ОграничитьМаксимальныйРазмерИндексируемыхДанныхРасширеннаяПодсказка - 211 - Label - true - true - - Left - - - - ОграничитьМаксимальныйРазмерИндексируемыхДанныхКонтекстноеМеню - 210 - true - - CheckBoxField - Enter - true - Left - true - - - - МаксимальныйРазмерИндексируемыхДанных - 197 - true - true - - true - - - МаксимальныйРазмерИндексируемыхДанных - - - OnChange - МаксимальныйРазмерИндексируемыхДанныхПриИзменении - - - МаксимальныйРазмерИндексируемыхДанныхРасширеннаяПодсказка - 199 - Label - true - true - - Left - - - - МаксимальныйРазмерИндексируемыхДанныхКонтекстноеМеню - 198 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ДекорацияМб - 200 - - <key>ru</key> - <value>Мб</value> - - true - true - - true - - - ДекорацияМбРасширеннаяПодсказка - 202 - Label - true - true - - Left - - - - ДекорацияМбКонтекстноеМеню - 201 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Максимальный размер индексируемых данных значение</value> - - - ГруппаМаксимальныйРазмерИндексируемыхДанныхЗначениеРасширеннаяПодсказка - 196 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - МаксимальныйРазмерИндексируемыхДанныхПодсказка - 203 - - <key>ru</key> - <value>Ограничение размера позволяет повысить скорость индексации и полнотекстового поиска.</value> - - true - true - - true - - - МаксимальныйРазмерИндексируемыхДанныхПодсказкаРасширеннаяПодсказка - 205 - Label - true - true - - Left - - - - МаксимальныйРазмерИндексируемыхДанныхПодсказкаКонтекстноеМеню - 204 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Максимальный размер индексируемых данных</value> - - - ГруппаМаксимальныйРазмерИндексируемыхДанныхРасширеннаяПодсказка - 194 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - true true @@ -988,6 +1059,10 @@ -1 Left + + NotificationProcessing + ОбработкаОповещения + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl index f604a1238..9c6562df1 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -9,10 +17,13 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + ИспользоватьПолнотекстовыйПоиск = ПолнотекстовыйПоискСервер.ЗначениеФлажкаИспользоватьПоиск(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") И Пользователи.ЭтоПолноправныйПользователь() Тогда @@ -20,7 +31,7 @@ Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость = Пользователи.ЭтоПолноправныйПользователь(, Истина) И Не ОбщегоНазначения.РазделениеВключено() - И НЕ ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент(); + И Не ОбщегоНазначения.ЭтоМобильныйКлиент(); Иначе Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость = Ложь; @@ -37,7 +48,7 @@ КонецЕсли; // Значения реквизитов формы - ИзвлекатьТекстыФайловНаСервере = НаборКонстант.ИзвлекатьТекстыФайловНаСервере; + ИзвлекатьТекстыФайловНаСервере = ?(НаборКонстант.ИзвлекатьТекстыФайловНаСервере, 1, 0); СведенияОРегламентныхЗаданиях = Новый Структура; ЗаполнитьСведенияОРегламентномЗадании("ИзвлечениеТекста"); @@ -64,10 +75,28 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + ПолнотекстовыйПоискКлиент.ОбработкаОповещенияИзмененияФлажкаИспользоватьПоиск( + ИмяСобытия, + ИспользоватьПолнотекстовыйПоиск); + + УстановитьДоступность(); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы +&НаКлиенте +Процедура ИспользоватьПолнотекстовыйПоискПриИзменении(Элемент) + + ПолнотекстовыйПоискКлиент.ПриИзмененииФлажкаИспользоватьПоиск(ИспользоватьПолнотекстовыйПоиск); + +КонецПроцедуры + &НаКлиенте Процедура ИзвлекатьТекстыФайловНаСервереПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент, Ложь); @@ -110,7 +139,7 @@ Исключение ТекстСообщенияОбОшибке = НСтр("ru = 'В настоящее время проверка индекса невозможна, так как выполняется его очистка или обновление.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщенияОбОшибке); КонецПопытки; ПоказатьОповещениеПользователя(НСтр("ru = 'Полнотекстовый поиск'"),, НСтр("ru = 'Индекс содержит корректные данные'")); @@ -302,7 +331,7 @@ КонецЕсли; Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'Полнотекстовый поиск'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Полнотекстовый поиск'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -331,16 +360,10 @@ &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "", ИндексПроверен = Ложь) - Если РеквизитПутьКДанным = "" Или РеквизитПутьКДанным = "ИспользоватьПолнотекстовыйПоиск" Тогда - Если НаборКонстант.ИспользоватьПолнотекстовыйПоиск <> ПолнотекстовыйПоискСервер.ОперацииРазрешены() Тогда - ИспользоватьПолнотекстовыйПоиск = 2; - Иначе - ИспользоватьПолнотекстовыйПоиск = НаборКонстант.ИспользоватьПолнотекстовыйПоиск; - КонецЕсли; - Элементы.ГруппаУправлениеПолнотекстовымПоиском.Доступность = (ИспользоватьПолнотекстовыйПоиск = 1); - Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Доступность = (ИспользоватьПолнотекстовыйПоиск = 1); - - КонецЕсли; + Состояние = ПолнотекстовыйПоискСервер.СостояниеПолнотекстовогоПоиска(); + + Элементы.ГруппаУправлениеПолнотекстовымПоиском.Доступность = (ИспользоватьПолнотекстовыйПоиск = 1); + Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Доступность = (ИспользоватьПолнотекстовыйПоиск = 1); Если РеквизитПутьКДанным = "" Или РеквизитПутьКДанным = "ОграничитьМаксимальныйРазмерИндексируемыхДанных" @@ -352,8 +375,7 @@ Если ИспользоватьПолнотекстовыйПоиск = 1 Тогда ДатаАктуальностиИндекса = ПолнотекстовыйПоиск.ДатаАктуальности(); - ИндексАктуален = ПолнотекстовыйПоискСервер.ИндексПоискаАктуален(); - ФлагДоступность = НЕ ИндексАктуален; + ИндексАктуален = (Состояние = "ПоискРазрешен"); Если ИндексПроверен И Не ИндексСодержитКорректныеДанные Тогда СтатусИндекса = НСтр("ru = 'Требуется очистка и обновление'"); ИначеЕсли ИндексАктуален Тогда @@ -364,7 +386,6 @@ Иначе ДатаАктуальностиИндекса = '00010101'; ИндексАктуален = Ложь; - ФлагДоступность = Ложь; СтатусИндекса = НСтр("ru = 'Полнотекстовый поиск отключен'"); КонецЕсли; МаксимальныйРазмерИндексируемыхДанных = ПолнотекстовыйПоиск.ПолучитьМаксимальныйРазмерИндексируемыхДанных() / 1048576; @@ -380,7 +401,7 @@ Элементы.СтатусИндекса.Шрифт = Новый Шрифт; КонецЕсли; - Элементы.ОбновитьИндекс.Доступность = ФлагДоступность; + Элементы.ОбновитьИндекс.Доступность = Не ИндексАктуален; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form index 7dd958f2c..d9c1cc764 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form @@ -1,5 +1,9 @@ + + <key>ru</key> + <value>Поиск</value> + СтрокаПоиска 3 @@ -50,7 +54,7 @@ Normal ru - Найти документ или файл + Найти документ, файл или отчет @@ -106,7 +110,6 @@ DontBlock true - true true HorizontalIfPossible true diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl index b5d851e1e..f6d9f62bb 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl index cf7eae488..b98c09a03 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ManagerModule.bsl @@ -1,3 +1,13 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -10,3 +20,5 @@ КонецПроцедуры #КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl index ce4bb5a14..24e73a466 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -99,7 +107,7 @@ ПриНачалеПроверкиПодключенияНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияПроверкиПодключения); ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключения", @@ -117,7 +125,7 @@ ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключения", ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); @@ -202,7 +210,7 @@ ПриНачалеРегистрацииИзмененийНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияРегистрацииДанныхДляНачальнойВыгрузки); ПодключитьОбработчикОжидания("ПриОжиданииРегистрацииИзменений", @@ -220,7 +228,7 @@ ПриОжиданииРегистрацииИзмененийНаСервере(ПараметрыОбработчикаРегистрацииДанныхДляНачальнойВыгрузки, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияРегистрацииДанныхДляНачальнойВыгрузки); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияРегистрацииДанныхДляНачальнойВыгрузки); ПодключитьОбработчикОжидания("ПриОжиданииРегистрацииИзменений", ПараметрыОбработчикаОжиданияРегистрацииДанныхДляНачальнойВыгрузки.ТекущийИнтервал, Истина); @@ -302,7 +310,7 @@ Если ПродолжитьОжидание Тогда Если ЭтоОбменСПриложениемВСервисе Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияВыгрузкиДанныхДляСопоставления); ПодключитьОбработчикОжидания("ПриОжиданииВыгрузкиДанныхДляСопоставления", @@ -334,7 +342,7 @@ ПриОжиданииВыгрузкиДанныхДляСопоставленияНаСервере(ПараметрыОбработчикаВыгрузкиДанныхДляСопоставления, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияВыгрузкиДанныхДляСопоставления); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияВыгрузкиДанныхДляСопоставления); ПодключитьОбработчикОжидания("ПриОжиданииВыгрузкиДанныхДляСопоставления", ПараметрыОбработчикаОжиданияВыгрузкиДанныхДляСопоставления.ТекущийИнтервал, Истина); @@ -372,7 +380,6 @@ СтруктураПрогресса = Прогресс.Прогресс; Если СтруктураПрогресса <> Неопределено Тогда ПроцентВыполнения = СтруктураПрогресса.Процент; - ДопИнформацияВыполнение = СтруктураПрогресса.Текст; КонецЕсли; КонецПроцедуры @@ -466,13 +473,13 @@ // Обязательная должны быть переданы параметры выполнения выгрузки данных. Если Не Параметры.Свойство("УзелОбмена") Тогда ТекстСообщения = НСтр("ru = 'Форма не предназначена для непосредственного использования.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ); Возврат; КонецЕсли; Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Параметры.УзелОбмена) Тогда ТекстСообщения = НСтр("ru = 'Начальная выгрузка не поддерживается для узлов распределенных информационных баз.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ); Возврат; КонецЕсли; @@ -595,20 +602,24 @@ Элементы.РежимВыгрузкиДанных.Доступность = Не НачальнаяВыгрузка; + Возврат Неопределено; + КонецФункции &НаКлиенте Функция Подключаемый_СтраницаЗапросПароля_ПриПереходеДалее(Отказ) Если Не ЗапроситьПароль Тогда - Возврат 0; + Возврат Неопределено; КонецЕсли; Если ПустаяСтрока(WSПароль) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите пароль.'"), , "WSПароль", , Отказ); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -617,6 +628,8 @@ ПерейтиДалее = Ложь; ПриНачалеПроверкиПодключения(); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -624,7 +637,7 @@ Если Не ПроверкаПодключенияВыполнена Тогда ПропуститьСтраницу = Истина; - Возврат 0; + Возврат Неопределено; Иначе Если РежимВыгрузкиДанных = "ОбычнаяВыгрузка" Тогда ПропуститьСтраницу = Истина; @@ -632,6 +645,8 @@ КонецЕсли; КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -640,6 +655,8 @@ ПерейтиДалее = Ложь; ПриНачалеРегистрацииИзменений(); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -647,6 +664,8 @@ ПропуститьСтраницу = Не ПроверкаПодключенияВыполнена Или Не РегистрацияИзмененийВыполнена; + + Возврат Неопределено; КонецФункции @@ -656,6 +675,8 @@ ПерейтиДалее = Ложь; ПриНачалеВыгрузкиДанныхДляСопоставления(); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -671,6 +692,8 @@ Элементы.ПанельСостояниеЗавершения.ТекущаяСтраница = Элементы.СтраницаЗавершениеУспех; КонецЕсли; + Возврат Неопределено; + КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form index 951f0a93a..748f63100 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form @@ -2136,7 +2136,7 @@ <key>ru</key> - <value>Группа завершение сопоставления</value> + <value>Завершение сопоставления</value> ГруппаЗавершениеСопоставленияРасширеннаяПодсказка @@ -6573,7 +6573,7 @@ <key>ru</key> - <value>Командная панель6</value> + <value>Командная панель 6</value> КоманднаяПанель6РасширеннаяПодсказка diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 51aa055a9..2a4fddddc 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Форма параметризуется двумя способами: // // Вариант 1 @@ -390,7 +398,7 @@ Если ВыделенныеСтроки.Количество() = 0 Тогда НСтрока = НСтр("ru = 'Выберите имя таблицы в поле статистической информации.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"ДеревоИнформацииСтатистики",, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока,,"ДеревоИнформацииСтатистики",, Отказ); Возврат; КонецЕсли; @@ -980,7 +988,7 @@ Возврат; КонецЕсли; - ОбщегоНазначенияКлиент.ОткрытьПроводник(ИмяКаталога); + ФайловаяСистемаКлиент.ОткрытьПроводник(ИмяКаталога); КонецПроцедуры @@ -1890,6 +1898,16 @@ Если Прогресс.Прогресс <> Неопределено Тогда СтруктураПрогресса = Прогресс.Прогресс; + + ДополнительныеПараметрыПрогресса = Неопределено; + Если Не СтруктураПрогресса.Свойство("ДополнительныеПараметры", ДополнительныеПараметрыПрогресса) Тогда + Возврат; + КонецЕсли; + + Если Не ДополнительныеПараметрыПрогресса.Свойство("ОбменДанными") Тогда + Возврат; + КонецЕсли; + ПроцентВыполнения = СтруктураПрогресса.Процент; ДопИнформацияВыполнение = СтруктураПрогресса.Текст; КонецЕсли; @@ -1946,21 +1964,23 @@ Если Объект.УзелИнформационнойБазы.Пустая() Тогда НСтрока = НСтр("ru = 'Укажите узел информационной базы'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока, , "Объект.УзелИнформационнойБазы", , Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока, , "Объект.УзелИнформационнойБазы", , Отказ); ИначеЕсли Объект.ВидТранспортаСообщенийОбмена.Пустая() И Не ПолученоСообщениеДляСопоставленияДанных Тогда НСтрока = НСтр("ru = 'Укажите вариант подключения'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока, , "Объект.ВидТранспортаСообщенийОбмена", , Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока, , "Объект.ВидТранспортаСообщенийОбмена", , Отказ); ИначеЕсли ОбменЧерезВебСервис И ПустаяСтрока(WSПароль) Тогда НСтрока = НСтр("ru = 'Не указан пароль.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока, , "WSПароль", , Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока, , "WSПароль", , Отказ); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -1978,6 +1998,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции &НаСервере @@ -1996,7 +2018,7 @@ WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, , СообщениеПользователю); Если WSПрокси = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "WSПароль", , Отказ); + ОбщегоНазначения.СообщитьПользователю(СообщениеПользователю, , "WSПароль", , Отказ); Возврат; КонецЕсли; @@ -2009,7 +2031,7 @@ // Обновляем запись в РС. СтруктураЗаписи = Новый Структура; СтруктураЗаписи.Вставить("Корреспондент", Объект.УзелИнформационнойБазы); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", WSЗапомнитьПароль); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); СтруктураЗаписи.Вставить("WSПароль", WSПароль); РегистрыСведений.НастройкиТранспортаОбменаДанными.ОбновитьЗапись(СтруктураЗаписи); @@ -2023,7 +2045,7 @@ ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); Возврат; КонецПопытки; @@ -2040,6 +2062,8 @@ ИнициализироватьПеременныеОбработки(); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2070,6 +2094,8 @@ ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2137,6 +2163,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2209,6 +2237,8 @@ ИнициализироватьПеременныеОбработки(); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2234,10 +2264,12 @@ ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); + Возврат Неопределено; + КонецФункции &НаКлиенте -Функция ЗавершениеАнализаДанных() +Процедура ЗавершениеАнализаДанных() ОбработатьСтатусВыполненияФоновогоЗадания(); @@ -2262,7 +2294,7 @@ ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 0.1, Истина); -КонецФункции +КонецПроцедуры &НаСервере Процедура ЗавершениеАнализаДанныхНаСервере() @@ -2359,6 +2391,8 @@ ПриИзмененииФлагаЗакончитьСопоставлениеДанных(); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2388,6 +2422,8 @@ ПоказатьВопрос(Оповещение, Сообщение, Кнопки,, КодВозвратаДиалога.Да); + Возврат Неопределено; + КонецФункции // Продолжение процедуры (см. выше). @@ -2426,6 +2462,8 @@ ИнициализироватьПеременныеОбработки(); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2449,6 +2487,8 @@ ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2493,6 +2533,8 @@ ПропуститьСтраницу = Истина; КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2503,6 +2545,8 @@ ПропуститьСтраницу = Истина; КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2511,6 +2555,8 @@ ПерейтиДалее = Ложь; ПодключитьОбработчикОжидания("ПриНачалеРегистрацииДанных", 0.1, Истина); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2520,7 +2566,7 @@ ПриНачалеРегистрацииДанныхНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияРегистрацииДанных); ПодключитьОбработчикОжидания("ПриОжиданииРегистрацииДанных", @@ -2538,7 +2584,7 @@ ПриОжиданииРегистрацииДанныхНаСервере(ПараметрыОбработчикаРегистрацииДанных, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияРегистрацииДанных); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияРегистрацииДанных); ПодключитьОбработчикОжидания("ПриОжиданииРегистрацииДанных", ПараметрыОбработчикаОжиданияРегистрацииДанных.ТекущийИнтервал, Истина); @@ -2564,9 +2610,9 @@ ИзменитьПорядковыйНомерПерехода(-1); Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не удалось зарегистрировать данные для выгрузки.'")); КонецЕсли; КонецЕсли; @@ -2628,6 +2674,8 @@ ИнициализироватьПеременныеОбработки(); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2636,6 +2684,8 @@ ПерейтиДалее = Ложь; ПриНачалеВыгрузкиДанных(Отказ); + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2658,6 +2708,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2668,7 +2720,7 @@ ПриНачалеВыгрузкиДанныхНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияВыгрузкиДанных); ПодключитьОбработчикОжидания("ПриОжиданииВыгрузкиДанных", @@ -2705,7 +2757,7 @@ ПриОжиданииВыгрузкиДанныхНаСервере(ПараметрыОбработчикаВыгрузкиДанных, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияВыгрузкиДанных); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияВыгрузкиДанных); ПодключитьОбработчикОжидания("ПриОжиданииВыгрузкиДанных", ПараметрыОбработчикаОжиданияВыгрузкиДанных.ТекущийИнтервал, Истина); @@ -2729,9 +2781,9 @@ ИзменитьПорядковыйНомерПерехода(-1); Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не удалось выполнить обмен данными.'")); КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl index 59a66fdda..527e54635 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl index 326b35ab2..7ba6cbcc1 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -303,4 +311,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl index 68f5d49b0..4450d1725 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -58,7 +65,7 @@ ПриНачалеЗагрузкиНастроекXDTOНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("ПриОжиданииЗагрузкиНастроекXDTO", @@ -76,7 +83,7 @@ ПриОжиданииЗагрузкиНастроекXDTOНаСервере(ПараметрыОбработчика, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("ПриОжиданииЗагрузкиНастроекXDTO", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form index 02c0163d0..a49e005f9 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form @@ -1070,7 +1070,7 @@ <key>ru</key> - <value>Группа файл настройки пассивный режим</value> + <value>Файл настройки пассивный режим</value> ГруппаФайлНастройкиПассивныйРежимРасширеннаяПодсказка @@ -1385,7 +1385,7 @@ <key>ru</key> - <value>Группа файл настройки обычные каналы связи</value> + <value>Файл настройки обычные каналы связи</value> ГруппаФайлНастройкиОбычныеКаналыСвязиРасширеннаяПодсказка @@ -4232,7 +4232,6 @@ Page Vertical - Center auto false @@ -4796,7 +4795,6 @@ Page Vertical - Center auto false diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Module.bsl index cb39e57d7..01798997e 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -306,7 +314,7 @@ ПриНачалеПолученияСпискаПриложенийДляПодключенияНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложенийДляПодключения", @@ -324,7 +332,7 @@ ПриОжиданииПолученияСпискаПриложенийДляПодключенияНаСервере(ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложенийДляПодключения", ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина); @@ -426,14 +434,11 @@ Если ВидПодключения = "Интернет" Тогда ПриНачалеПроверкиПодключенияНаСервере("WS", ПродолжитьОжидание); ИначеЕсли ВидПодключения = "ВнешнееСоединение" Тогда - Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); - КонецЕсли; ПриНачалеПроверкиПодключенияНаСервере("COM", ПродолжитьОжидание); КонецЕсли; Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияПроверкиПодключения); ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOnline", @@ -451,7 +456,7 @@ ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOnline", ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); @@ -475,9 +480,9 @@ ИзменитьПорядковыйНомерПерехода(-1); Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения.'")); КонецЕсли; КонецЕсли; @@ -515,7 +520,7 @@ ПриНачалеПроверкиПодключенияНаСервере(ПроверяемыйВидТранспорта, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияПроверкиПодключения); ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOffline", @@ -572,9 +577,9 @@ ИзменитьПорядковыйНомерПерехода(-1); Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения %1.'"), ПроверяемыйВидТранспорта)); КонецЕсли; @@ -590,7 +595,7 @@ ПриНачалеПроверкиПодключенияВМоделиСервисаНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияПроверкиПодключения); ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияВМоделиСервиса", @@ -608,7 +613,7 @@ ПриОжиданииПроверкиПодключенияВМоделиСервисаНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияВМоделиСервиса", ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); @@ -631,9 +636,9 @@ ИзменитьПорядковыйНомерПерехода(-1); Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения.'")); КонецЕсли; КонецЕсли; @@ -774,7 +779,7 @@ ПриНачалеСохраненияНастроекПодключенияНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения); ПодключитьОбработчикОжидания("ПриОжиданииСохраненияНастроекПодключения", @@ -793,7 +798,7 @@ ПараметрыОбработчикаСохраненияНастроекПодключения, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения); ПодключитьОбработчикОжидания("ПриОжиданииСохраненияНастроекПодключения", ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения.ТекущийИнтервал, Истина); @@ -882,7 +887,7 @@ ТекстСообщения = НСтр("ru = 'Не удалось сохранить настройки подключения.'"); КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); КонецЕсли; @@ -1403,8 +1408,8 @@ ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка(), ИдентификаторНастройки); Для Каждого ТекущийВидТранспорта Из ИспользуемыеТранспортыСообщенийОбмена Цикл - // В модели сервиса поддерживается обмен только через "Интернет" и "Интернет-пассивное соединение" - // для планов обмена XDTO. + // В модели сервиса обмен через Интернет и Интернет-пассивное соединение + // поддерживается только для планов обмена XDTO. Если МодельСервиса Тогда Если ТекущийВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WS И ТекущийВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда @@ -1478,7 +1483,7 @@ Если Результат.Отказ Тогда ИзменитьПорядковыйНомерПерехода(-1); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.СообщениеОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке); Возврат; КонецЕсли; @@ -1505,7 +1510,7 @@ Если Результат.Отказ Тогда ИзменитьПорядковыйНомерПерехода(-1); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.СообщениеОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке); Возврат; КонецЕсли; @@ -1568,6 +1573,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗарегистрироватьCOMСоединительЗавершение(Зарегистрировано, ДополнительныеПараметры) Экспорт + + ПриНачалеПроверкиПодключенияOnline(); + +КонецПроцедуры + #Область ИнициализацияФормыПриСоздании &НаСервере @@ -1577,7 +1589,7 @@ Если Не Параметры.Свойство("ИмяПланаОбмена") Или Не Параметры.Свойство("ИдентификаторНастройки") Тогда ТекстСообщения = НСтр("ru = 'Форма не предназначена для непосредственного использования.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ); Возврат; КонецЕсли; @@ -1613,7 +1625,7 @@ И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета"); НастройкаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); - НастройкаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена); + НастройкаXDTO = ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена); ЗаполнитьДоступныеВидыТранспорта(); @@ -1804,6 +1816,7 @@ Элементы.ВидПодключенияОбычныеКаналыСвязи.Видимость = ДоступныеВидыТранспорта.Свойство("FILE") Или ДоступныеВидыТранспорта.Свойство("FTP") Или ДоступныеВидыТранспорта.Свойство("EMAIL"); + Элементы.ВидПодключенияПассивныйРежим.Видимость = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим"); Элементы.ГруппаФайлНастройкиПассивныйРежим.Видимость = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим"); @@ -1951,6 +1964,8 @@ ПриИзмененииСпособНастройкиПодключения(); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -1960,15 +1975,15 @@ ТекущиеДанные = Элементы.ПриложенияВСервисе.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите приложение из списка для продолжения настройки подключения.'"), , "ПриложенияВСервисе", , Отказ); - Возврат 0; + Возврат Неопределено; ИначеЕсли ТекущиеДанные.НастройкаСинхронизацииВМенеджереСервиса Тогда ПоказатьПредупреждение(, НСтр("ru = 'Для настройки синхронизации данных с выбранным приложением перейдите в менеджер сервиса. |В менеджере сервиса воспользуйтесь командой ""Синхронизация данных"".'")); Отказ = Истина; - Возврат 0; + Возврат Неопределено; Иначе ПрефиксОбласти = ТекущиеДанные.Префикс; @@ -1986,22 +2001,24 @@ Если ВидПодключения = "ОбычныеКаналыСвязи" И ЗагрузитьПараметрыПодключенияИзФайла Тогда Если ПустаяСтрока(ИмяФайлаНастроекПодключенияДляЗагрузки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите файл с настройками подключения.'"), , "ИмяФайлаНастроекПодключенияДляЗагрузки", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; ИначеЕсли ВидПодключения = "ПассивныйРежим" Тогда Если ПустаяСтрока(ИмяФайлаНастроекXDTOКорреспондента) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите файл с настройками программы-корреспондента.'"), , "ИмяФайлаНастроекXDTOКорреспондента", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; КонецЕсли; КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2009,27 +2026,31 @@ Если ВидПодключения <> "Интернет" Тогда ПропуститьСтраницу = Истина; - Возврат 0; + Возврат Неопределено; КонецЕсли; Элементы.ПараметрыДоступаВИнтернет1.Видимость = ДоступнаНастройкаПараметровДоступаВИнтернет; + Возврат Неопределено; + КонецФункции &НаКлиенте Функция Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриПереходеДалее(Отказ) Если ВидПодключения <> "Интернет" Тогда - Возврат 0; + Возврат Неопределено; КонецЕсли; Если ПустаяСтрока(ИнтернетВебАдрес) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите адрес программы в Интернет.'"), , "ИнтернетВебАдрес", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2049,42 +2070,46 @@ ВнешнееСоединениеВидАутентификации = "1СПредприятие"; ПриИзмененииВнешнееСоединениеВидАутентификации(); + Возврат Неопределено; + КонецФункции &НаКлиенте Функция Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриПереходеДалее(Отказ) Если ВидПодключения <> "ВнешнееСоединение" Тогда - Возврат 0; + Возврат Неопределено; КонецЕсли; Если ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый" Тогда Если ПустаяСтрока(ВнешнееСоединениеКаталогИнформационнойБазы) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите каталог расположения информационной базы.'"), , "ВнешнееСоединениеКаталогИнформационнойБазы", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; ИначеЕсли ВнешнееСоединениеВариантРаботыИнформационнойБазы = "КлиентСерверный" Тогда Если ПустаяСтрока(ВнешнееСоединениеКластерСерверов) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите имя кластера серверов 1С:Предприятия.'"), , "ВнешнееСоединениеКластерСерверов", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; Если ПустаяСтрока(ВнешнееСоединениеИмяИнформационнойБазы) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите имя информационной базы в кластере серверов 1С:Предприятия.'"), , "ВнешнееСоединениеИмяИнформационнойБазы", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2092,7 +2117,7 @@ Если ВидПодключения <> "ОбычныеКаналыСвязи" Тогда ПропуститьСтраницу = Истина; - Возврат 0; + Возврат Неопределено; КонецЕсли; ДополнительныеПараметрыНастройки = Новый Структура; @@ -2116,40 +2141,42 @@ ВыполнитьОбработкуОповещения(ОповещениеПродолжениеНастройки, Результат); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте Функция Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриПереходеДалее(Отказ) Если ВидПодключения <> "ОбычныеКаналыСвязи" Тогда - Возврат 0; + Возврат Неопределено; КонецЕсли; Если Не ОбычныеКаналыСвязиFILEИспользование И Не ОбычныеКаналыСвязиFTPИспользование И Не ОбычныеКаналыСвязиEMAILИспользование Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите хотя бы один способ передачи файлов с данными.'"), , "ОбычныеКаналыСвязиFILEИспользование", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; Если ОбычныеКаналыСвязиАрхивироватьФайлы И ОбычныеКаналыСвязиИспользоватьПарольДляАрхива И ПустаяСтрока(ОбычныеКаналыСвязиПарольАрхива) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите пароль для архивации файлов.'"), , "ОбычныеКаналыСвязиПарольАрхива", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; Если ОбычныеКаналыСвязиFILEИспользование Тогда Если ПустаяСтрока(ОбычныеКаналыСвязиFILEКаталог) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите каталог для передачи файлов с данными.'"), , "ОбычныеКаналыСвязиFILEКаталог", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; КонецЕсли; @@ -2157,18 +2184,18 @@ Если ОбычныеКаналыСвязиFTPИспользование Тогда Если ПустаяСтрока(ОбычныеКаналыСвязиFTPПуть) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите адрес каталога для передачи файлов с данными.'"), , "ОбычныеКаналыСвязиFTPПуть", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; Если ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла И Не ЗначениеЗаполнено(ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите максимальный допустимый размер файлов с данными.'"), , "ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; КонецЕсли; @@ -2176,22 +2203,24 @@ Если ОбычныеКаналыСвязиEMAILИспользование Тогда Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиEMAILУчетнаяЗапись) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Выберите учетную запись электронной почты для отправки сообщений с данными.'"), , "ОбычныеКаналыСвязиEMAILУчетнаяЗапись", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; Если ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения И Не ЗначениеЗаполнено(ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите максимальный допустимый размер почтового вложения.'"), , "ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения", , Отказ); - Возврат 0; + Возврат Неопределено; КонецЕсли; КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2213,6 +2242,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2229,11 +2260,12 @@ Если ВидПодключения = "ВнешнееСоединение" И ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); + Оповещение = Новый ОписаниеОповещения("ЗарегистрироватьCOMСоединительЗавершение", ЭтотОбъект); + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь, Оповещение); + Иначе + ПриНачалеПроверкиПодключенияOnline(); КонецЕсли; - ПриНачалеПроверкиПодключенияOnline(); - ИначеЕсли МодельСервиса Тогда ПриНачалеПроверкиПодключенияВМоделиСервиса(); @@ -2244,6 +2276,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2272,6 +2306,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2281,14 +2317,14 @@ Если ДоступноИзменениеНаименования И ПустаяСтрока(Наименование) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите наименование этой программы.'"), , "Наименование", , Отказ); КонецЕсли; Если ДоступноИзменениеПрефикса И ПустаяСтрока(Префикс) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите префикс этой программы.'"), , "Префикс", , Отказ); КонецЕсли; @@ -2297,7 +2333,7 @@ Если ДоступноИзменениеНаименованияКорреспондента И ПустаяСтрока(НаименованиеКорреспондента) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите наименование программы-корреспондента.'"), , "НаименованиеКорреспондента", , Отказ); КонецЕсли; @@ -2306,7 +2342,7 @@ Если ДоступноИзменениеПрефиксаКорреспондента И ПустаяСтрока(ПрефиксКорреспондента) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите префикс программы-корреспондента.'"), , "ПрефиксКорреспондента", , Отказ); КонецЕсли; @@ -2315,11 +2351,13 @@ Если СохранитьПараметрыПодключенияВФайл И ПустаяСтрока(ИмяФайлаНастроекПодключенияДляВыгрузки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите путь к файлу для сохранения настроек подключения.'"), , "ИмяФайлаНастроекПодключенияДляВыгрузки", , Отказ); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -2328,6 +2366,8 @@ ПерейтиДалее = Ложь; ПриНачалеСохраненияНастроекПодключения(); + Возврат Неопределено; + КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form index 9f91af833..8fcf7ce3f 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form @@ -470,6 +470,278 @@ Auto + + ГруппаПодтверждениеПодключения + 146 + + ПанельПодтверждениеПодключения + 150 + + СтраницаПодтверждениеПодключенияУспешно + 152 + + Декорация19 + 158 + true + true + + true + + + Декорация19РасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + Декорация19КонтекстноеМеню + 159 + true + + 2 + true + 1 + true + + + CommonPicture.Успешно + + + + true + true + + true + + + <key>ru</key> + <value>Страница подтверждение подключения успешно</value> + + + СтраницаПодтверждениеПодключенияУспешноРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаПодтверждениеПодключенияТекущий + 154 + + Декорация20 + 161 + true + true + + true + + + Декорация20РасширеннаяПодсказка + 163 + Label + true + true + + Left + + + + Декорация20КонтекстноеМеню + 162 + true + + 2 + true + 1 + true + + + StdPicture.BusinessProcessStart + + + + true + true + + true + + + <key>ru</key> + <value>Страница подтверждение подключения текущий</value> + + + СтраницаПодтверждениеПодключенияТекущийРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаПодтверждениеПодключенияПустой + 156 + + Декорация21 + 164 + true + true + + true + + + Декорация21РасширеннаяПодсказка + 166 + Label + true + true + + Left + + + + Декорация21КонтекстноеМеню + 165 + true + + 2 + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Страница подтверждение подключения пустой</value> + + + СтраницаПодтверждениеПодключенияПустойРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель подтверждение подключения</value> + + + ПанельПодтверждениеПодключенияРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Pages + + Auto + + + + ПолучитьПодтверждениеПодключения + 148 + true + true + + true + + + ПолучитьПодтверждениеПодключенияРасширеннаяПодсказка + 149 + + <key>ru</key> + <value>Система "%НаименованиеКорреспондента%" должна подтвердить запрос на настройку подключения из этой программы.</value> + + Label + true + + Left + + + Hyperlink + Form.Command.ПолучитьПодтверждениеПодключения + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Подтверждение подключения</value> + + + ГруппаПодтверждениеПодключенияРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + ГруппаНастройкаПравил 32 @@ -1692,24 +1964,6 @@ true - - НаименованиеКонфигурацииКорреспондента - - <key>ru</key> - <value>Наименование конфигурации корреспондента</value> - - 5 - - String - - - - true - - - true - - МодельСервиса @@ -1727,24 +1981,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>КраткаяИнформацияПоОбмену</name> - <title> - <key>ru</key> - <value>Краткая информация по обмену</value> - - 9 - - String - - - - true - - - true - - РезервноеКопирование @@ -2051,24 +2287,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ЗаголовокПомощникаСозданияОбмена</name> - <title> - <key>ru</key> - <value>Заголовок помощника создания обмена</value> - - 24 - - String - - - - true - - - true - - НастройкаУниверсальногоОбмена @@ -2157,6 +2375,53 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ОбменДаннымиСВнешнейСистемой</name> + <title> + <key>ru</key> + <value>Обмен данными с внешней системой</value> + + 30 + + Boolean + + + true + + + true + + + + ПараметрыПодключенияВнешнейСистемы + + <key>ru</key> + <value>Параметры подключения внешней системы</value> + + 31 + + + true + + + true + + + + ОписаниеВариантаНастройки + + <key>ru</key> + <value>Описание варианта настройки</value> + + 32 + + + true + + + true + + ПодробноеОписаниеСинхронизацииДанных @@ -2270,28 +2535,6 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>НастроитьРасписание</name> - <title> - <key>ru</key> - <value>Настроить расписание синхронизации данных</value> - - 6 - - ru - Настроить расписание - - - true - - - - НастроитьРасписание - - - Auto - Auto - ВыполнитьСопоставлениеИЗагрузкуДанных @@ -2314,6 +2557,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ПолучитьПодтверждениеПодключения</name> + <title> + <key>ru</key> + <value>Получить подтверждение подключения</value> + + 8 + + ru + Получить подтверждение подключения + + + true + + + + ПолучитьПодтверждениеПодключения + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl index 72cea7e22..47a6d8eb5 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -33,8 +40,19 @@ Возврат; КонецЕсли; + СсылкаСуществует = Ложь; + НастройкаЗавершена = Ложь; + + Если ЗначениеЗаполнено(УзелОбмена) Тогда + НастройкаЗавершена = НастройкаСинхронизацииЗавершена(УзелОбмена, СсылкаСуществует); + Если Не СсылкаСуществует Тогда + // Закрытие формы при удалении настройки синхронизации. + Возврат; + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(УзелОбмена) - Или Не НастройкаСинхронизацииЗавершена(УзелОбмена) + Или Не НастройкаЗавершена Или (НастройкаРИБ И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ И Не НачальныйОбразСоздан(УзелОбмена))Тогда ТекстПредупреждения = НСтр("ru = 'Настройка синхронизации данных еще не завершена. |Завершить работу с помощником? Настройку можно будет продолжить позже.'"); @@ -62,7 +80,7 @@ СтандартнаяОбработка = Ложь; Если РезервноеКопирование Тогда - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаОбработкиРезервногоКопирования); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаОбработкиРезервногоКопирования); КонецЕсли; КонецПроцедуры @@ -74,40 +92,103 @@ &НаКлиенте Процедура ПодробноеОписаниеСинхронизацииДанных(Команда) - ОбменДаннымиКлиент.ОткрытьПодробноеОписаниеСинхронизации(ПодробнаяИнформацияПоОбмену); + ОбменДаннымиКлиент.ОткрытьПодробноеОписаниеСинхронизации(ОписаниеВариантаНастройки.ПодробнаяИнформацияПоОбмену); КонецПроцедуры &НаКлиенте Процедура НастроитьПараметрыПодключения(Команда) - Если Не НастройкаНовойСинхронизации Тогда - Если МодельСервиса Тогда - СтрокаПредупреждение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Настройка подключения к ""%1"" уже выполнена. - |Редактирование параметров подключения не предусмотрено.'"), УзелОбмена); - ПоказатьПредупреждение(, СтрокаПредупреждение); - Возврат; - Иначе - Отбор = Новый Структура("Корреспондент", УзелОбмена); - ЗначенияЗаполнения = Новый Структура("Корреспондент", УзелОбмена); - - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, - ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ЭтотОбъект); - КонецЕсли; + Если ЭтоОбменСПриложениемВСервисе + И (Не НастройкаНовойСинхронизации + Или Не ТекущийЭтапНастройки = "НастройкаПодключения") Тогда + СтрокаПредупреждение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Настройка подключения к ""%1"" уже выполнена. + |Редактирование параметров подключения не предусмотрено.'"), УзелОбмена); + ПоказатьПредупреждение(, СтрокаПредупреждение); Возврат; КонецЕсли; - ПараметрыПомощника = Новый Структура; - ПараметрыПомощника.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); - ПараметрыПомощника.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); - Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - ПараметрыПомощника.Вставить("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьПараметрыПодключенияЗавершение", ЭтотОбъект); + + Если ОбменДаннымиСВнешнейСистемой Тогда + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда + Контекст = Новый Структура; + Контекст.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + Контекст.Вставить("ПараметрыПодключения", ПараметрыПодключенияВнешнейСистемы); + Контекст.Вставить("Корреспондент", УзелОбмена); + + Если НастройкаНовойСинхронизации + И ТекущийЭтапНастройки = "НастройкаПодключения" Тогда + Контекст.Вставить("Режим", "НовоеПодключение"); + Иначе + Контекст.Вставить("Режим", "РедактированиеПараметровПодключения"); + КонецЕсли; + + Отказ = Ложь; + ИмяФормыПомощника = ""; + ПараметрыПомощника = Новый Структура; + + МодульОбменДаннымиСВнешнимиСистемамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиСВнешнимиСистемамиКлиент"); + МодульОбменДаннымиСВнешнимиСистемамиКлиент.ПередНастройкойПараметровПодключения( + Контекст, Отказ, ИмяФормыПомощника, ПараметрыПомощника); + + Если Не Отказ Тогда + ОткрытьФорму(ИмяФормыПомощника, + ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецЕсли; + КонецЕсли; + Возврат; + ИначеЕсли НастройкаНовойСинхронизации Тогда + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПомощника.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + ПараметрыПомощника.Вставить("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); + КонецЕсли; + + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаПодключения", + ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Иначе + Отбор = Новый Структура("Корреспондент", УзелОбмена); + ЗначенияЗаполнения = Новый Структура("Корреспондент", УзелОбмена); + + ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, + ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ЭтотОбъект); КонецЕсли; - ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьПараметрыПодключенияЗавершение", ЭтотОбъект); - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаПодключения", - ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьПодтверждениеПодключения(Команда) + + Если Не ОбменДаннымиСВнешнейСистемой + Или ПолученыНастройкиXDTOКорреспондента(УзелОбмена) Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Подключение подтверждено.'")); + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда + Контекст = Новый Структура; + Контекст.Вставить("Режим", "ПодтверждениеПодключения"); + Контекст.Вставить("Корреспондент", УзелОбмена); + Контекст.Вставить("ИдентификаторНастройки", "ИдентификаторНастройки"); + Контекст.Вставить("ПараметрыПодключения", ПараметрыПодключенияВнешнейСистемы); + + Отказ = Ложь; + ИмяФормыПомощника = ""; + ПараметрыПомощника = Новый Структура; + + МодульОбменДаннымиСВнешнимиСистемамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиСВнешнимиСистемамиКлиент"); + МодульОбменДаннымиСВнешнимиСистемамиКлиент.ПередНастройкойПараметровПодключения( + Контекст, Отказ, ИмяФормыПомощника, ПараметрыПомощника); + + Если Не Отказ Тогда + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПолучитьПодтверждениеПодключенияЗавершение", ЭтотОбъект); + ОткрытьФорму(ИмяФормыПомощника, + ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -119,15 +200,10 @@ // Для плана обмена XDTO перед настройкой правил выгрузки и загрузки // должны быть получены настройки корреспондента. Если НастройкаXDTO Тогда - СостояниеНастройки = СостояниеНастройкиСинхронизации(УзелОбмена); - Если Не СостояниеНастройки.НастройкаСинхронизацииЗавершена - И Не СостояниеНастройки.ПолученыНастройкиXDTOКорреспондента Тогда - - ПараметрыЗагрузки = Новый Структура; - ПараметрыЗагрузки.Вставить("УзелОбмена", УзелОбмена); - - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.ЗагрузкаНастроекXDTO", - ПараметрыЗагрузки, ЭтотОбъект, , , , ОповещениеПродолжения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПрерватьНастройку = Ложь; + ВыполнитьЗагрузкуНастроекXDTOПриНеобходимости(ПрерватьНастройку, ОповещениеПродолжения); + + Если ПрерватьНастройку Тогда Возврат; КонецЕсли; КонецЕсли; @@ -191,17 +267,6 @@ КонецПроцедуры -&НаКлиенте -Процедура НастроитьРасписание(Команда) - - РасписаниеВыполненияОбменаДанными = ПредопределенноеРасписаниеКаждыйЧас(); - - Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РасписаниеВыполненияОбменаДанными); - ОписаниеОповещения = Новый ОписаниеОповещения("НастроитьРасписаниеЗавершение", ЭтотОбъект); - Диалог.Показать(ОписаниеОповещения); - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -235,20 +300,6 @@ КонецФункции -&НаСервереБезКонтекста -Функция ПредопределенноеРасписаниеКаждыйЧас() - - Возврат ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными().ПредопределенноеРасписаниеКаждыйЧас(); - -КонецФункции - -&НаСервереБезКонтекста -Процедура СоздатьСценарийОбменаДаннымиПоРасписанию(УзелОбмена, Расписание) - - Справочники.СценарииОбменовДанными.СоздатьСценарий(УзелОбмена, Расписание); - -КонецПроцедуры - &НаКлиенте Процедура НастроитьПараметрыПодключенияЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт @@ -257,6 +308,11 @@ Если РезультатЗакрытия.Свойство("УзелОбмена") Тогда УзелОбмена = РезультатЗакрытия.УзелОбмена; + КлючУникальности = ИмяПланаОбмена + "_" + ИдентификаторНастройки + "_" + УзелОбмена.УникальныйИдентификатор(); + + Если ОбменДаннымиСВнешнейСистемой Тогда + ОбновитьПараметрыПодключенияВнешнейСистемы(УзелОбмена, ПараметрыПодключенияВнешнейСистемы); + КонецЕсли; КонецЕсли; Если МодельСервиса Тогда @@ -285,6 +341,40 @@ КонецПроцедуры +&НаСервереБезКонтекста +Процедура ОбновитьПараметрыПодключенияВнешнейСистемы(УзелОбмена, ПараметрыПодключенияВнешнейСистемы) + + ПараметрыПодключенияВнешнейСистемы = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаВнешнейСистемы(УзелОбмена); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьПодтверждениеПодключенияЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если ПолученыНастройкиXDTOКорреспондента(УзелОбмена) Тогда + ПерейтиКСледующемуЭтапуНастройки(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьЗагрузкуНастроекXDTOПриНеобходимости(ПрерватьНастройку, ОповещениеПродолжения) + + СостояниеНастройки = СостояниеНастройкиСинхронизации(УзелОбмена); + Если Не СостояниеНастройки.НастройкаСинхронизацииЗавершена + И Не СостояниеНастройки.ПолученыНастройкиXDTOКорреспондента Тогда + + ПараметрыЗагрузки = Новый Структура; + ПараметрыЗагрузки.Вставить("УзелОбмена", УзелОбмена); + + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.ЗагрузкаНастроекXDTO", + ПараметрыЗагрузки, ЭтотОбъект, , , , ОповещениеПродолжения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + ПрерватьНастройку = Истина; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура НастроитьПравилаОтправкиИПолученияДанныхПродолжение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт @@ -303,6 +393,22 @@ ЗаполнитьТаблицуЭтаповНастройки(); ОбновитьОтображениеТекущегоСостоянияНастройки(); + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьПравилаОтправкиИПолученияДанныхЗавершение", ЭтотОбъект); + + ПараметрыПроверки = Новый Структура; + ПараметрыПроверки.Вставить("Корреспондент", УзелОбмена); + ПараметрыПроверки.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПроверки.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + + НастройкаВыполнена = Ложь; + ПередНастройкойСинхронизацииДанных(ПараметрыПроверки, НастройкаВыполнена, ИмяФормыПомощникаНастройкиСинхронизацииДанных); + + Если НастройкаВыполнена Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Настройка правил отправки и получения данных выполнена.'")); + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, Истина); + Возврат; + КонецЕсли; + ПараметрыПомощника = Новый Структура; Если ПустаяСтрока(ИмяФормыПомощникаНастройкиСинхронизацииДанных) Тогда @@ -316,8 +422,6 @@ ПараметрыПомощника.Вставить("ИмяФормыПомощника", ИмяФормыПомощникаНастройкиСинхронизацииДанных); КонецЕсли; - ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьПравилаОтправкиИПолученияДанныхЗавершение", ЭтотОбъект); - ОткрытьФорму(ПараметрыПомощника.ИмяФормыПомощника, ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); @@ -366,24 +470,17 @@ КонецПроцедуры -&НаКлиенте -Процедура НастроитьРасписаниеЗавершение(Расписание, ДополнительныеПараметры) Экспорт - - Если Расписание <> Неопределено Тогда - - СоздатьСценарийОбменаДаннымиПоРасписанию(УзелОбмена, Расписание); - - Если ТекущийЭтапНастройки = "НастройкаРасписания" Тогда - ПерейтиКСледующемуЭтапуНастройки(); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ОбновитьОтображениеТекущегоСостоянияНастройки() + // Видимость элементов настройки. + Для Каждого ЭтапНастройки Из ВсеЭтапыНастройки Цикл + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "Группа" + ЭтапНастройки.Ключ, + "Видимость", + ЭтапыНастройки.НайтиСтроки(Новый Структура("Название", ЭтапНастройки.Ключ)).Количество() > 0); + КонецЦикла; + Если ПустаяСтрока(ТекущийЭтапНастройки) Тогда // Все этапы завершены. Для Каждого ЭтапНастройки Из ЭтапыНастройки Цикл @@ -446,6 +543,26 @@ Если СледующаяСтрока <> Неопределено Тогда ТекущийЭтапНастройки = СледующаяСтрока.Название; + + Если ТекущийЭтапНастройки = "НастройкаПравил" Тогда + ПараметрыПроверки = Новый Структура; + ПараметрыПроверки.Вставить("Корреспондент", УзелОбмена); + ПараметрыПроверки.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПроверки.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + + НастройкаВыполнена = НастройкаСинхронизацииЗавершена(УзелОбмена); + Если Не НастройкаВыполнена Тогда + Если Не НастройкаXDTO Или ПолученыНастройкиXDTOКорреспондента(УзелОбмена) Тогда + ПередНастройкойСинхронизацииДанных(ПараметрыПроверки, НастройкаВыполнена, ИмяФормыПомощникаНастройкиСинхронизацииДанных); + КонецЕсли; + КонецЕсли; + + Если НастройкаВыполнена Тогда + ПерейтиКСледующемуЭтапуНастройки(); + Возврат; + КонецЕсли; + КонецЕсли; + Если ВсеЭтапыНастройки[ТекущийЭтапНастройки] <> "Основное" Тогда ТекущийЭтапНастройки = ""; КонецЕсли; @@ -458,8 +575,9 @@ КонецПроцедуры &НаСервереБезКонтекста -Функция НастройкаСинхронизацииЗавершена(УзелОбмена) +Функция НастройкаСинхронизацииЗавершена(УзелОбмена, СсылкаСуществует = Ложь) + СсылкаСуществует = ОбщегоНазначения.СсылкаСуществует(УзелОбмена); Возврат ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(УзелОбмена); КонецФункции @@ -471,21 +589,42 @@ КонецФункции +&НаСервереБезКонтекста +Процедура ПередНастройкойСинхронизацииДанных(ПараметрыПроверки, НастройкаВыполнена, ИмяФормыПомощника) + + Если ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ПередНастройкойСинхронизацииДанных", ПараметрыПроверки.ИмяПланаОбмена) Тогда + + Контекст = Новый Структура; + Контекст.Вставить("Корреспондент", ПараметрыПроверки.Корреспондент); + Контекст.Вставить("ИдентификаторНастройки", ПараметрыПроверки.ИдентификаторНастройки); + Контекст.Вставить("НачальнаяНастройка", Не НастройкаСинхронизацииЗавершена(ПараметрыПроверки.Корреспондент)); + + ПланыОбмена[ПараметрыПроверки.ИмяПланаОбмена].ПередНастройкойСинхронизацииДанных( + Контекст, НастройкаВыполнена, ИмяФормыПомощника); + + Если НастройкаВыполнена Тогда + ОбменДаннымиСервер.ЗавершитьНастройкуСинхронизацииДанных(ПараметрыПроверки.Корреспондент); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + #Область ИнициализацияФормыПриСоздании &НаСервере Процедура ИнициализироватьСвойстваФормы() - Если ПустаяСтрока(ЗаголовокПомощникаСозданияОбмена) Тогда + Заголовок = ОписаниеВариантаНастройки.ЗаголовокПомощникаСозданияОбмена; + + Если ПустаяСтрока(Заголовок) Тогда Если НастройкаРИБ Тогда Заголовок = НСтр("ru = 'Настройка распределенной информационной базы'"); Иначе Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Настройка синхронизации данных с ""%1""'"), - НаименованиеКонфигурацииКорреспондента); + ОписаниеВариантаНастройки.НаименованиеКорреспондента); КонецЕсли; - Иначе - Заголовок = ЗаголовокПомощникаСозданияОбмена; КонецЕсли; КонецПроцедуры @@ -493,7 +632,11 @@ &НаСервере Процедура ИнициализироватьРеквизитыФормы() + Параметры.Свойство("ОписаниеВариантаНастройки", ОписаниеВариантаНастройки); + Параметры.Свойство("ОбменДаннымиСВнешнейСистемой", ОбменДаннымиСВнешнейСистемой); + НастройкаНовойСинхронизации = Параметры.Свойство("НастройкаНовойСинхронизации"); + ПродолжениеНастройкиВПодчиненномУзлеРИБ = Параметры.Свойство("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); МодельСервиса = ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); @@ -502,32 +645,55 @@ ИмяПланаОбмена = Параметры.ИмяПланаОбмена; ИдентификаторНастройки = Параметры.ИдентификаторНастройки; - ПродолжениеНастройкиВПодчиненномУзлеРИБ = Параметры.Свойство("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); - - Если Не ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда - ИмяПланаОбменаРИБ = ОбменДаннымиСервер.ГлавныйУзел().Метаданные().Имя; - - ПродолжениеНастройкиВПодчиненномУзлеРИБ = (ИмяПланаОбмена = ИмяПланаОбменаРИБ) - И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить(); - + Если ОбменДаннымиСВнешнейСистемой Тогда + Параметры.Свойство("ПараметрыПодключенияВнешнейСистемы", ПараметрыПодключенияВнешнейСистемы); + Иначе + Если Не ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда + ИмяПланаОбменаРИБ = ОбменДаннымиСервер.ГлавныйУзел().Метаданные().Имя; + + ПродолжениеНастройкиВПодчиненномУзлеРИБ = (ИмяПланаОбмена = ИмяПланаОбменаРИБ) + И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить(); + КонецЕсли; + КонецЕсли; + + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + ОбменДаннымиСервер.ПриПродолженииНастройкиПодчиненногоУзлаРИБ(); + УзелОбмена = ОбменДаннымиСервер.ГлавныйУзел(); КонецЕсли; - КонецЕсли; - - Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - ОбменДаннымиСервер.ПриПродолженииНастройкиПодчиненногоУзлаРИБ(); - УзелОбмена = ОбменДаннымиСервер.ГлавныйУзел(); КонецЕсли; Иначе УзелОбмена = Параметры.УзелОбмена; - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена); + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена); ИдентификаторНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(УзелОбмена); Если МодельСервиса Тогда Параметры.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); Параметры.Свойство("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); КонецЕсли; + + Если ОбменДаннымиСВнешнейСистемой Тогда + ОбновитьПараметрыПодключенияВнешнейСистемы(УзелОбмена, ПараметрыПодключенияВнешнейСистемы); + КонецЕсли; + КонецЕсли; + + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ + Или (Не ОбменДаннымиСВнешнейСистемой + И ОписаниеВариантаНастройки = Неопределено) Тогда + МодульПомощник = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + ОписаниеВариантаНастройки = МодульПомощник.СтруктураОписанияВариантаНастройки(); + + ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "НаименованиеКонфигурацииКорреспондента, + |ЗаголовокКомандыДляСозданияНовогоОбменаДанными, + |ЗаголовокПомощникаСозданияОбмена, + |КраткаяИнформацияПоОбмену, + |ПодробнаяИнформацияПоОбмену", + ИдентификаторНастройки); + + ЗаполнитьЗначенияСвойств(ОписаниеВариантаНастройки, ЗначенияНастроекДляВарианта); + ОписаниеВариантаНастройки.НаименованиеКорреспондента = ЗначенияНастроекДляВарианта.НаименованиеКонфигурацииКорреспондента; КонецЕсли; ВидТранспорта = Неопределено; @@ -548,38 +714,37 @@ МодульРезервноеКопированиеИБСервер.НавигационнаяСсылкаОбработкиРезервногоКопирования(); КонецЕсли; - НастройкаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); - НастройкаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена); - - ДоступнаИнтерактивнаяОтправка = Не НастройкаРИБ; + НастройкаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); + НастройкаXDTO = ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена); НастройкаУниверсальногоОбмена = ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена); // без правил конвертации - Если НастройкаНовойСинхронизации - Или НастройкаРИБ - Или НастройкаУниверсальногоОбмена Тогда - ПолученыДанныеДляСопоставления = Ложь; - ИначеЕсли МодельСервиса Тогда - ПолученыДанныеДляСопоставления = ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(УзелОбмена); - Иначе - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM - Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим - Или Не ЕстьНастройкиТранспорта Тогда + ДоступнаИнтерактивнаяОтправка = Не НастройкаРИБ; + + Если Не ОбменДаннымиСВнешнейСистемой Тогда + + Если НастройкаНовойСинхронизации + Или НастройкаРИБ + Или НастройкаУниверсальногоОбмена Тогда + ПолученыДанныеДляСопоставления = Ложь; + ИначеЕсли ЭтоОбменСПриложениемВСервисе Тогда ПолученыДанныеДляСопоставления = ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(УзелОбмена); Иначе - ПолученыДанныеДляСопоставления = Истина; + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM + Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS + Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим + Или Не ЕстьНастройкиТранспорта Тогда + ПолученыДанныеДляСопоставления = ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(УзелОбмена); + Иначе + ПолученыДанныеДляСопоставления = Истина; + КонецЕсли; КонецЕсли; + КонецЕсли; ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "НаименованиеКонфигурацииКорреспондента, - |КраткаяИнформацияПоОбмену, - |ЗаголовокПомощникаСозданияОбмена, - |ПодробнаяИнформацияПоОбмену, - |ИмяФормыСозданияНачальногоОбраза, + "ИмяФормыСозданияНачальногоОбраза, |ИмяФормыПомощникаНастройкиСинхронизацииДанных", ИдентификаторНастройки); - ЗаполнитьЗначенияСвойств(ЭтотОбъект, ЗначенияНастроекДляВарианта); Если ПустаяСтрока(ИмяФормыСозданияНачальногоОбраза) @@ -592,24 +757,26 @@ ТекущийЭтапНастройки = ""; Если НастройкаНовойСинхронизации Тогда ТекущийЭтапНастройки = "НастройкаПодключения"; - Иначе - Если Не НастройкаСинхронизацииЗавершена(УзелОбмена) Тогда - ТекущийЭтапНастройки = "НастройкаПравил"; - ИначеЕсли НастройкаРИБ - И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ - И Не НачальныйОбразСоздан(УзелОбмена) Тогда - Если Не ПустаяСтрока(ИмяФормыСозданияНачальногоОбраза) Тогда - ТекущийЭтапНастройки = "НачальныйОбразРИБ"; - КонецЕсли; + ИначеЕсли ОбменДаннымиСВнешнейСистемой + И Не ПолученыНастройкиXDTOКорреспондента(УзелОбмена) Тогда + ТекущийЭтапНастройки = "ПодтверждениеПодключения"; + ИначеЕсли Не НастройкаСинхронизацииЗавершена(УзелОбмена) Тогда + ТекущийЭтапНастройки = "НастройкаПравил"; + ИначеЕсли НастройкаРИБ + И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ + И Не НачальныйОбразСоздан(УзелОбмена) Тогда + Если Не ПустаяСтрока(ИмяФормыСозданияНачальногоОбраза) Тогда + ТекущийЭтапНастройки = "НачальныйОбразРИБ"; КонецЕсли; КонецЕсли; ВсеЭтапыНастройки = Новый Структура; - ВсеЭтапыНастройки.Вставить("НастройкаПодключения", "Основное"); - ВсеЭтапыНастройки.Вставить("НастройкаПравил", "Основное"); - ВсеЭтапыНастройки.Вставить("НачальныйОбразРИБ", "Основное"); - ВсеЭтапыНастройки.Вставить("СопоставлениеИЗагрузка", "Основное"); - ВсеЭтапыНастройки.Вставить("НачальнаяВыгрузкаДанных", "Основное"); + ВсеЭтапыНастройки.Вставить("НастройкаПодключения", "Основное"); + ВсеЭтапыНастройки.Вставить("ПодтверждениеПодключения", "Основное"); + ВсеЭтапыНастройки.Вставить("НастройкаПравил", "Основное"); + ВсеЭтапыНастройки.Вставить("НачальныйОбразРИБ", "Основное"); + ВсеЭтапыНастройки.Вставить("СопоставлениеИЗагрузка", "Основное"); + ВсеЭтапыНастройки.Вставить("НачальнаяВыгрузкаДанных", "Основное"); КонецПроцедуры @@ -636,8 +803,16 @@ ДобавитьЭтапНастройки("НастройкаПодключения", "НастроитьПараметрыПодключения"); КонецЕсли; + Если ОбменДаннымиСВнешнейСистемой Тогда + ДобавитьЭтапНастройки("ПодтверждениеПодключения", "ПолучитьПодтверждениеПодключения"); + КонецЕсли; + ДобавитьЭтапНастройки("НастройкаПравил", "НастроитьПравилаОтправкиИПолучения"); + Если ОбменДаннымиСВнешнейСистемой Тогда + Возврат; + КонецЕсли; + Если НастройкаРИБ И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ И Не ПустаяСтрока(ИмяФормыСозданияНачальногоОбраза) Тогда @@ -656,21 +831,18 @@ ДобавитьЭтапНастройки("НачальнаяВыгрузкаДанных", "ВыполнитьНачальнуюВыгрузкуДанных"); КонецЕсли; - // Видимость элементов настройки. - Для Каждого ЭтапНастройки Из ВсеЭтапыНастройки Цикл - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "Группа" + ЭтапНастройки.Ключ, - "Видимость", - ЭтапыНастройки.НайтиСтроки(Новый Структура("Название", ЭтапНастройки.Ключ)).Количество() > 0); - КонецЦикла; - КонецПроцедуры &НаСервере Процедура УстановитьНачальноеОтображениеЭлементовФормы() - Элементы.ДекорацияКраткаяИнформацияПоОбменуНадпись.Заголовок = КраткаяИнформацияПоОбмену; + Элементы.ДекорацияКраткаяИнформацияПоОбменуНадпись.Заголовок = ОписаниеВариантаНастройки.КраткаяИнформацияПоОбмену; + Элементы.ПодробноеОписаниеСинхронизацииДанных.Видимость = ЗначениеЗаполнено(ОписаниеВариантаНастройки.ПодробнаяИнформацияПоОбмену); Элементы.ГруппаРезервноеКопирование.Видимость = РезервноеКопирование; + Элементы.ПолучитьПодтверждениеПодключения.РасширеннаяПодсказка.Заголовок = СтрЗаменить( + Элементы.ПолучитьПодтверждениеПодключения.РасширеннаяПодсказка.Заголовок, + "%НаименованиеКорреспондента%", + ОписаниеВариантаНастройки.НаименованиеКорреспондента); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Form.form index 986ecc65f..2be64e494 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Form.form @@ -1,8 +1,674 @@ - + - ГруппаОбменДругиеПрограммы - 15 + ПанельВариантыНастроек + 19 + + СтраницаОжидание + 25 + + Группа1 + 27 + + Декорация1 + 29 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 30 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + Декорация2 + 32 + + <key>ru</key> + <value>Выполняется получение списка доступных настроек синхронизации данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 33 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа1</value> + + + Группа1РасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница ожидание</value> + + + СтраницаОжиданиеРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаВариантыНастроек + 23 + + ГруппаОбменДругиеПрограммы + 15 + true + true + + true + + + <key>ru</key> + <value>Обмен данными с другими программами</value> + + + ГруппаОбменДругиеПрограммыРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + Button + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаОбменРИБ + 17 + true + true + + true + + + <key>ru</key> + <value>Распределенные информационные базы</value> + + + ГруппаОбменРИБРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + Button + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаОбменВнешниеСистемы + 35 + + ПанельОбменВнешниеСистемы + 37 + + СтраницаВнешниеСистемыВариантыНастроек + 43 + true + true + + true + + + <key>ru</key> + <value>Страница внешние системы варианты настроек</value> + + + СтраницаВнешниеСистемыВариантыНастроекРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаВнешниеСистемыНетВариантовНастроек + 45 + + Группа3 + 55 + + Декорация4 + 57 + + <key>ru</key> + <value>Нет доступных для подключения сервисов.</value> + + true + true + + true + + + Декорация4РасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 58 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа3</value> + + + Группа3РасширеннаяПодсказка + 56 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница внешние системы нет вариантов настроек</value> + + + СтраницаВнешниеСистемыНетВариантовНастроекРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаВнешниеСистемыНеПодключенаИнтернетПоддержка + 39 + + Группа4 + 60 + + Декорация5 + 62 + + <key>ru</key> + <value>Для получения списка доступных сервисов необходимо выполнить подключение к Интернет-поддержке.</value> + + true + true + + true + + + Декорация5РасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 63 + true + + Label + true + + Left + + + + ПодключитьИнтернетПоддержку + 65 + true + true + + true + + + ПодключитьИнтернетПоддержкуРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + UsualButton + Form.Command.ПодключитьИнтернетПоддержку + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа4</value> + + + Группа4РасширеннаяПодсказка + 61 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница внешние системы не подключена интернет поддержка</value> + + + СтраницаВнешниеСистемыНеПодключенаИнтернетПоддержкаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаВнешниеСистемыОшибка + 41 + + Группа2 + 47 + + Декорация3 + 49 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 50 + true + + true + true + + + CommonPicture.Предупреждение + + + + + ДекорацияНадписьВнешниеСистемыОшибка + 52 + + <key>ru</key> + <value>При получении списка доступных для подключения сервисов произошла ошибка. +Попробуйте повторить запрос позднее. + +Подробнее см. <link v8config://3cb7df0b-dc9c-4ab0-8981-61aa499325da/OpenLog>журнал </><link ОткрытьЖурналРегистрации>регистрации</>.</value> + + true + true + + true + + + ДекорацияНадписьВнешниеСистемыОшибкаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ДекорацияНадписьВнешниеСистемыОшибкаКонтекстноеМеню + 53 + true + + true + Label + true + + + URLProcessing + ДекорацияНадписьВнешниеСистемыОшибкаОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа2</value> + + + Группа2РасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница внешние системы ошибка</value> + + + СтраницаВнешниеСистемыОшибкаРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель обмен внешние системы</value> + + + ПанельОбменВнешниеСистемыРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Обмен данными с внешними системами</value> + + + ГруппаОбменВнешниеСистемыРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + Button + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница варианты настроек</value> + + + СтраницаВариантыНастроекРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + true true @@ -10,11 +676,11 @@ <key>ru</key> - <value>Обмен данными с другими программами</value> + <value>Панель варианты настроек</value> - ГруппаОбменДругиеПрограммыРасширеннаяПодсказка - 16 + ПанельВариантыНастроекРасширеннаяПодсказка + 20 Label true true @@ -22,66 +688,55 @@ Left - UsualGroup - - Vertical - Collapsible - Button - WeakSeparation - true - true - auto - Auto + Pages + Auto - - ГруппаОбменРИБ - 17 - true - true - - true - - - <key>ru</key> - <value>Распределенные информационные базы</value> - - - ГруппаОбменРИБРасширеннаяПодсказка - 18 - Label - true - true - - Left - - - UsualGroup - - Vertical - Collapsible - Button - WeakSeparation - true - true - auto - Auto - Auto - - - None - false ФормаКоманднаяПанель -1 + + ФормаОбновитьСписокНастроек + 21 + true + true + + true + + + ФормаОбновитьСписокНастроекРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Command.ОбновитьСписокНастроек + Normal + Auto + true + true + UserCmds + Auto + Left true + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере + + URLProcessing + ОбработкаНавигационнойСсылки + DontBlock true true @@ -109,10 +764,10 @@ true - ИмяКоманды + НавигационнаяСсылка <key>ru</key> - <value>Имя команды</value> + <value>Навигационная ссылка</value> 1 @@ -126,6 +781,24 @@ true + + ИмяПланаОбмена + + <key>ru</key> + <value>Имя плана обмена</value> + + 2 + + String + + + + true + + + true + + ИдентификаторНастройки @@ -145,15 +818,29 @@ </edit> </columns> <columns> - <name>ИмяПланаОбмена</name> + <name>ОписаниеВариантаНастройки</name> <title> <key>ru</key> - <value>Имя плана обмена</value> + <value>Описание варианта настройки</value> + + 4 + + + true + + + true + + + + ВнешняяСистема + + <key>ru</key> + <value>Внешняя система</value> 5 - String - + Boolean true @@ -162,7 +849,117 @@ true + + ПараметрыПодключенияВнешнейСистемы + + <key>ru</key> + <value>Параметры подключения внешней системы</value> + + 6 + + + true + + + true + + + + ПараметрыОбработчика + + <key>ru</key> + <value>Параметры обработчика</value> + + 2 + + + true + + + true + + + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 3 + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 4 + + Boolean + + + true + + + true + + + + ОбновитьСписокНастроек + + <key>ru</key> + <value>Обновить</value> + + 1 + + ru + Обновить список настроек + + + true + + + StdPicture.Reread + + + + ОбновитьСписокНастроек + + + TextPicture + Auto + Auto + + + ПодключитьИнтернетПоддержку + + <key>ru</key> + <value>Подключить</value> + + 2 + + ru + Подключить интернет поддержку + + + true + + + + ПодключитьИнтернетПоддержку + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl index e1351f032..9d00984a9 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -15,7 +23,75 @@ Возврат; КонецЕсли; - ДобавитьКомандыСозданияНовогоОбмена(); + ПараметрыОбработчика = Неопределено; + ПриНачалеПолученияВариантовНастроекОбменаДаннымиНаСервере(УникальныйИдентификатор, ПараметрыОбработчика, ДлительнаяОперация); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ПриНачалеПолученияВариантовНастроекОбменаДанными(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаНавигационнойСсылки(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтрокиКоманды = КомандыСозданияОбмена.НайтиСтроки( + Новый Структура("НавигационнаяСсылка", НавигационнаяСсылкаФорматированнойСтроки)); + + Если СтрокиКоманды.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаКоманды = СтрокиКоманды[0]; + СтандартнаяОбработка = Ложь; + + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("ИмяПланаОбмена", СтрокаКоманды.ИмяПланаОбмена); + ПараметрыПомощника.Вставить("ИдентификаторНастройки", СтрокаКоманды.ИдентификаторНастройки); + ПараметрыПомощника.Вставить("ОписаниеВариантаНастройки", СтрокаКоманды.ОписаниеВариантаНастройки); + ПараметрыПомощника.Вставить("ОбменДаннымиСВнешнейСистемой", СтрокаКоманды.ВнешняяСистема); + ПараметрыПомощника.Вставить("ПараметрыПодключенияВнешнейСистемы", СтрокаКоманды.ПараметрыПодключенияВнешнейСистемы); + ПараметрыПомощника.Вставить("НастройкаНовойСинхронизации"); + + КлючУникальностиПомощника = ПараметрыПомощника.ИмяПланаОбмена + "_" + ПараметрыПомощника.ИдентификаторНастройки; + + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаСинхронизации", ПараметрыПомощника, , КлючУникальностиПомощника); + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДекорацияНадписьВнешниеСистемыОшибкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + Если НавигационнаяСсылкаФорматированнойСтроки = "ОткрытьЖурналРегистрации" Тогда + + СтандартнаяОбработка = Ложь; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда + + СобытиеЖурналаРегистрации = Новый Массив; + + МодульОбменДаннымиСВнешнимиСистемамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиСВнешнимиСистемамиКлиент"); + СобытиеЖурналаРегистрации.Добавить(МодульОбменДаннымиСВнешнимиСистемамиКлиент.ИмяСобытияЖурналаРегистрации()); + + Отбор = Новый Структура; + Отбор.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрации); + Отбор.Вставить("Уровень", "Ошибка"); + Отбор.Вставить("ДатаНачала", ДатаНачалаОтбораЖурналаРегистрации()); + + ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(Отбор, ЭтотОбъект); + + КонецЕсли; + + КонецЕсли; КонецПроцедуры @@ -24,102 +100,209 @@ #Область ОбработчикиКомандФормы &НаКлиенте -Процедура НастройкаПараметровТранспортаОбменаДанными(Команда) +Процедура ОбновитьСписокНастроек(Команда) - СтрокиКоманды = КомандыСозданияОбмена.НайтиСтроки(Новый Структура("ИмяКоманды", Команда.Имя)); - - Если СтрокиКоманды.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ПараметрыПомощника = Новый Структура; - ПараметрыПомощника.Вставить("ИмяПланаОбмена", СтрокиКоманды[0].ИмяПланаОбмена); - ПараметрыПомощника.Вставить("ИдентификаторНастройки", СтрокиКоманды[0].ИдентификаторНастройки); - ПараметрыПомощника.Вставить("НастройкаНовойСинхронизации"); - - КлючУникальностиПомощника = ПараметрыПомощника.ИмяПланаОбмена + "_" + ПараметрыПомощника.ИдентификаторНастройки; - - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаСинхронизации", ПараметрыПомощника, , КлючУникальностиПомощника); - - Закрыть(); + ПриНачалеПолученияВариантовНастроекОбменаДанными(); КонецПроцедуры + +&НаКлиенте +Процедура ПодключитьИнтернетПоддержку(Команда) + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержкуЗавершение", ЭтотОбъект); + + МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); + МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей(ОповещениеОЗакрытии, ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаСервереБезКонтекста +Функция ДатаНачалаОтбораЖурналаРегистрации() + + Возврат НачалоДня(ТекущаяДатаСеанса()); + +КонецФункции + +&НаКлиенте +Процедура ПриНачалеПолученияВариантовНастроекОбменаДанными(ПриОткрытии = Ложь) + + Если Не ПриОткрытии Тогда + ПараметрыОбработчика = Неопределено; + ПриНачалеПолученияВариантовНастроекОбменаДаннымиНаСервере(УникальныйИдентификатор, ПараметрыОбработчика, ДлительнаяОперация); + КонецЕсли; + + Если ДлительнаяОперация Тогда + Элементы.ПанельВариантыНастроек.ТекущаяСтраница = Элементы.СтраницаОжидание; + Элементы.ФормаОбновитьСписокНастроек.Доступность = Ложь; + + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + ПодключитьОбработчикОжидания("ПриОжиданииПолученияВариантовНастроекОбменаДанными", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииПолученияВариантовНастроекОбменаДанными(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииПолученияВариантовНастроекОбменаДанными() + + ПриОжиданииПолученияВариантовНастроекОбменаДаннымиНаСервере(ПараметрыОбработчика, ДлительнаяОперация); + + Если ДлительнаяОперация Тогда + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + ПодключитьОбработчикОжидания("ПриОжиданииПолученияВариантовНастроекОбменаДанными", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииПолученияВариантовНастроекОбменаДанными(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПолученияВариантовНастроекОбменаДанными() + + ПриЗавершенииПолученияВариантовНастроекОбменаДаннымиНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПодключитьИнтернетПоддержкуЗавершение(Результат, ДополнительныеПараметры) Экспорт + + ПриНачалеПолученияВариантовНастроекОбменаДанными(); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриНачалеПолученияВариантовНастроекОбменаДаннымиНаСервере(УникальныйИдентификатор, ПараметрыОбработчика, ПродолжитьОжидание) + + МодульПомощника = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + МодульПомощника.ПриНачалеПолученияВариантовНастроекОбменаДанными(УникальныйИдентификатор, ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииПолученияВариантовНастроекОбменаДаннымиНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + МодульПомощника = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + МодульПомощника.ПриОжиданииПолученияВариантовНастроекОбменаДанными(ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + &НаСервере -Процедура ДобавитьКомандыСозданияНовогоОбмена() +Процедура ПриЗавершенииПолученияВариантовНастроекОбменаДаннымиНаСервере() + + Настройки = Неопределено; + + МодульПомощника = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + МодульПомощника.ПриЗавершенииПолученияВариантовНастроекОбменаДанными(ПараметрыОбработчика, Настройки); + + ОчиститьКомандыСозданияНовогоОбмена(); + ДобавитьКомандыСозданияНовогоОбмена(Настройки); + + Элементы.ПанельВариантыНастроек.ТекущаяСтраница = Элементы.СтраницаВариантыНастроек; + Элементы.ФормаОбновитьСписокНастроек.Доступность = Истина; + +КонецПроцедуры + +&НаСервере +Процедура ОчиститьКомандыСозданияНовогоОбмена() КомандыСозданияОбмена.Очистить(); - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + УдалитьПодчиненныеЭлементыГруппы(Элементы.ГруппаОбменДругиеПрограммы); + УдалитьПодчиненныеЭлементыГруппы(Элементы.ГруппаОбменРИБ); + УдалитьПодчиненныеЭлементыГруппы(Элементы.СтраницаВнешниеСистемыВариантыНастроек); - ТаблицаНастройки = Неопределено; - МодульПомощникНастройки.ПриПолученииДоступныхНастроекСинхронизацииДанных(ТаблицаНастройки, Истина); +КонецПроцедуры + +&НаСервере +Процедура УдалитьПодчиненныеЭлементыГруппы(ЭлементГруппа) - НаименованияКонфигураций = Новый Соответствие; - Для Каждого СтрокаНастройки Из ТаблицаНастройки Цикл - Если СтрокаНастройки.ЭтоПланОбменаРаспределеннойИнформационнойБазы Тогда - Продолжить; - КонецЕсли; - - НаименованияКонфигураций.Вставить(СтрокаНастройки.ИмяКонфигурацииКорреспондента, - СтрокаНастройки.НаименованиеКонфигурацииКорреспондента); + Пока ЭлементГруппа.ПодчиненныеЭлементы.Количество() > 0 Цикл + Элементы.Удалить(ЭлементГруппа.ПодчиненныеЭлементы[0]); КонецЦикла; - ТаблицаНастройки.Сортировать("ЭтоПланОбменаXDTO"); +КонецПроцедуры + +&НаСервере +Процедура ДобавитьКомандыСозданияНовогоОбмена(Настройки) - ТаблицаКонфигурации = ТаблицаНастройки.Скопировать(, - "ИмяКонфигурацииКорреспондента, ЭтоПланОбменаРаспределеннойИнформационнойБазы"); - ТаблицаКонфигурации.Свернуть("ИмяКонфигурацииКорреспондента, ЭтоПланОбменаРаспределеннойИнформационнойБазы"); + СтандартныеНастройки = Неопределено; + Если Настройки.Свойство("СтандартныеНастройки", СтандартныеНастройки) Тогда + + ТаблицаНастройкиДругиеПрограммы = СтандартныеНастройки.Скопировать(Новый Структура("ЭтоПланОбменаРИБ", Ложь)); + ТаблицаНастройкиДругиеПрограммы.Сортировать("ЭтоПланОбменаXDTO"); + ДобавитьКомандыСозданияНовогоОбменаСтандартныеНастройки(ТаблицаНастройкиДругиеПрограммы, Элементы.ГруппаОбменДругиеПрограммы); + + ТаблицаНастройкиРИБ = СтандартныеНастройки.Скопировать(Новый Структура("ЭтоПланОбменаРИБ", Истина)); + ДобавитьКомандыСозданияНовогоОбменаСтандартныеНастройки(ТаблицаНастройкиРИБ, Элементы.ГруппаОбменРИБ); + + КонецЕсли; + + НастройкиВнешниеСистемы = Неопределено; + Если Настройки.Свойство("НастройкиВнешниеСистемы", НастройкиВнешниеСистемы) Тогда + + Элементы.ГруппаОбменВнешниеСистемы.Видимость = Истина; + + Если НастройкиВнешниеСистемы.КодОшибки = "" Тогда + + Если НастройкиВнешниеСистемы.ВариантыНастроек.Количество() > 0 Тогда + ДобавитьКомандыСозданияНовогоОбменаНастройкиВнешниеСистемы( + НастройкиВнешниеСистемы.ВариантыНастроек, Элементы.СтраницаВнешниеСистемыВариантыНастроек); + Элементы.ПанельОбменВнешниеСистемы.ТекущаяСтраница = Элементы.СтраницаВнешниеСистемыВариантыНастроек; + Иначе + Элементы.ПанельОбменВнешниеСистемы.ТекущаяСтраница = Элементы.СтраницаВнешниеСистемыНетВариантовНастроек; + КонецЕсли; + + ИначеЕсли НастройкиВнешниеСистемы.КодОшибки = "НеверныйЛогинИлиПароль" Тогда + + Элементы.ПанельОбменВнешниеСистемы.ТекущаяСтраница = Элементы.СтраницаВнешниеСистемыНеПодключенаИнтернетПоддержка; + + ИначеЕсли ЗначениеЗаполнено(НастройкиВнешниеСистемы.КодОшибки) Тогда + + Элементы.ПанельОбменВнешниеСистемы.ТекущаяСтраница = Элементы.СтраницаВнешниеСистемыОшибка; + + КонецЕсли; + + Иначе + + Элементы.ГруппаОбменВнешниеСистемы.Видимость = Ложь; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьКомандыСозданияНовогоОбменаСтандартныеНастройки(ТаблицаНастройки, РодительскаяГруппа) + + ТаблицаКонфигурации = ТаблицаНастройки.Скопировать(, "ИмяКонфигурацииКорреспондента"); + ТаблицаКонфигурации.Свернуть("ИмяКонфигурацииКорреспондента"); - НомерКонфигурации = 0; Для Каждого СтрокаКонфигурация Из ТаблицаКонфигурации Цикл - НомерКонфигурации = НомерКонфигурации + 1; + СтрокиНастройки = ТаблицаНастройки.НайтиСтроки( + Новый Структура("ИмяКонфигурацииКорреспондента", СтрокаКонфигурация.ИмяКонфигурацииКорреспондента)); - Отбор = Новый Структура("ИмяКонфигурацииКорреспондента, ЭтоПланОбменаРаспределеннойИнформационнойБазы"); - ЗаполнитьЗначенияСвойств(Отбор, СтрокаКонфигурация); - - СтрокиНастройки = ТаблицаНастройки.НайтиСтроки(Отбор); - - Если СтрокиНастройки.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - РодительскаяГруппа = Неопределено; - - Если СтрокаКонфигурация.ЭтоПланОбменаРаспределеннойИнформационнойБазы Тогда - РодительскаяГруппа = Элементы.ГруппаОбменРИБ; - Иначе - РодительскаяГруппа = Элементы.ГруппаОбменДругиеПрограммы; - КонецЕсли; - - НомерНастройки = 0; Для Каждого СтрокаНастройки Из СтрокиНастройки Цикл - НомерНастройки = НомерНастройки + 1; + ОписаниеВариантаНастройки = СтруктураОписанияВариантаНастройки(); + ЗаполнитьЗначенияСвойств(ОписаниеВариантаНастройки, СтрокаНастройки); + ОписаниеВариантаНастройки.НаименованиеКорреспондента = СтрокаНастройки.НаименованиеКонфигурацииКорреспондента; - ГруппаВариант = Элементы.Добавить("ГруппаКонфигурация" + НомерКонфигурации + "Настройка" + НомерНастройки, - Тип("ГруппаФормы"), РодительскаяГруппа); - ГруппаВариант.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаВариант.Отображение = ОтображениеОбычнойГруппы.Нет; - ГруппаВариант.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; - ГруппаВариант.ОтображатьЗаголовок = Ложь; - - ИмяКоманды = "КомандаКонфигурация" + НомерКонфигурации + "Настройка" + НомерНастройки; - - СоздатьКомандуИЭлементФормы(ИмяКоманды, - СтрокаНастройки.ЗаголовокКомандыДляСозданияНовогоОбменаДанными, - ГруппаВариант, - СтрокаНастройки.КраткаяИнформацияПоОбмену); - - СтрокаКоманды = КомандыСозданияОбмена.Добавить(); - СтрокаКоманды.ИмяКоманды = ИмяКоманды; - СтрокаКоманды.ИдентификаторНастройки = СтрокаНастройки.ИдентификаторНастройки; - СтрокаКоманды.ИмяПланаОбмена = СтрокаНастройки.ИмяПланаОбмена; + ДобавитьКомандуСозданияНовогоОбменаДляВариантаНастройки( + РодительскаяГруппа, + СтрокаНастройки.ИмяПланаОбмена, + СтрокаНастройки.ИдентификаторНастройки, + ОписаниеВариантаНастройки); КонецЦикла; @@ -127,6 +310,68 @@ КонецПроцедуры +&НаСервере +Процедура ДобавитьКомандыСозданияНовогоОбменаНастройкиВнешниеСистемы(ВариантыНастроек, РодительскаяГруппа) + + Для Каждого ВариантНастроек Из ВариантыНастроек Цикл + + ОписаниеВариантаНастройки = СтруктураОписанияВариантаНастройки(); + ЗаполнитьЗначенияСвойств(ОписаниеВариантаНастройки, ВариантНастроек); + + ДобавитьКомандуСозданияНовогоОбменаДляВариантаНастройки( + РодительскаяГруппа, + ВариантНастроек.ИмяПланаОбмена, + ВариантНастроек.ИдентификаторНастройки, + ОписаниеВариантаНастройки, + Истина, + ВариантНастроек.ПараметрыПодключения); + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьКомандуСозданияНовогоОбменаДляВариантаНастройки( + РодительскаяГруппа, + ИмяПланаОбмена, + ИдентификаторНастройки, + ОписаниеВариантаНастройки, + ВнешняяСистема = Ложь, + ПараметрыПодключенияВнешнейСистемы = Неопределено) + + НавигационнаяСсылка = "Настройка" + ИмяПланаОбмена + "Вариант" + ИдентификаторНастройки; + + ЭлементСсылка = Элементы.Добавить( + "ДекорацияНадпись" + НавигационнаяСсылка, + Тип("ДекорацияФормы"), + РодительскаяГруппа); + ЭлементСсылка.Вид = ВидДекорацииФормы.Надпись; + ЭлементСсылка.Заголовок = Новый ФорматированнаяСтрока( + ОписаниеВариантаНастройки.ЗаголовокКомандыДляСозданияНовогоОбменаДанными, , , , НавигационнаяСсылка); + ЭлементСсылка.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + ЭлементСсылка.АвтоМаксимальнаяШирина = Ложь; + + ЭлементСсылка.РасширеннаяПодсказка.Заголовок = ОписаниеВариантаНастройки.КраткаяИнформацияПоОбмену; + ЭлементСсылка.РасширеннаяПодсказка.АвтоМаксимальнаяШирина = Ложь; + + СтрокаКоманда = КомандыСозданияОбмена.Добавить(); + СтрокаКоманда.НавигационнаяСсылка = НавигационнаяСсылка; + СтрокаКоманда.ИмяПланаОбмена = ИмяПланаОбмена; + СтрокаКоманда.ИдентификаторНастройки = ИдентификаторНастройки; + СтрокаКоманда.ОписаниеВариантаНастройки = ОписаниеВариантаНастройки; + СтрокаКоманда.ВнешняяСистема = ВнешняяСистема; + СтрокаКоманда.ПараметрыПодключенияВнешнейСистемы = ПараметрыПодключенияВнешнейСистемы; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СтруктураОписанияВариантаНастройки() + + МодульПомощник = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + Возврат МодульПомощник.СтруктураОписанияВариантаНастройки(); + +КонецФункции + &НаСервере Процедура ПроверитьВозможностьНастройкиСинхронизацииДанных(Отказ = Ложь) @@ -152,26 +397,9 @@ Если Отказ И Не ПустаяСтрока(ТекстСообщения) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); КонецЕсли; КонецПроцедуры -&НаСервере -Процедура СоздатьКомандуИЭлементФормы(ИмяКоманды, Заголовок, Родитель, Подсказка) - - Команда = Команды.Добавить(ИмяКоманды); - Команда.Заголовок = Заголовок; - Команда.Действие = "НастройкаПараметровТранспортаОбменаДанными"; - Команда.Подсказка = Подсказка; - - КнопкаКоманды = Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Родитель); - КнопкаКоманды.ИмяКоманды = ИмяКоманды; - КнопкаКоманды.Вид = ВидКнопкиФормы.Гиперссылка; - КнопкаКоманды.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; - КнопкаКоманды.АвтоМаксимальнаяШирина = Ложь; - КнопкаКоманды.РасширеннаяПодсказка.АвтоМаксимальнаяШирина = Ложь; - -КонецПроцедуры - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Form.form index 0f3d10253..54cf3bd42 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Form.form @@ -207,6 +207,7 @@ true Label + true true Left @@ -220,7 +221,7 @@ 57 <key>ru</key> - <value>Удалить настройку также в программе "%НаименованиеКорреспондента%"</value> + <value>Удалить настройку также в программе "Наименование корреспондента".</value> true true @@ -1383,6 +1384,23 @@ true + + ЭтоОбменСВнешнейСистемой + + <key>ru</key> + <value>Это обмен с внешней системой</value> + + 18 + + Boolean + + + true + + + true + + КомандаДалее diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl index 0a57e575b..c6c905dae 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -76,7 +84,7 @@ ПриНачалеУдаленияНастройкиСинхронизацииНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("ПриОжиданииУдаленияНастройкиСинхронизации", @@ -95,7 +103,7 @@ ПараметрыОбработчика, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("ПриОжиданииУдаленияНастройкиСинхронизации", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); @@ -130,9 +138,9 @@ ИзменитьПорядковыйНомерПерехода(-1); Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не удалось удалить настройку синхронизации данных.'")); КонецЕсли; КонецЕсли; @@ -251,8 +259,9 @@ ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелОбмена); ПодключениеOnline = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS); + ЭтоОбменСВнешнейСистемой = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема); - УдалитьНастройкуВКорреспонденте = ПодключениеOnline; + УдалитьНастройкуВКорреспонденте = ПодключениеOnline Или ЭтоОбменСВнешнейСистемой; ПолучитьПараметрыКорреспондента = МодельСервиса И Не Параметры.Свойство("ЭтоОбменСПриложениемВСервисе") @@ -314,15 +323,26 @@ ПерейтиДалее = Ложь; ПриНачалеПолученияСпискаПриложений(); + Возврат Неопределено; + КонецФункции &НаКлиенте Функция Подключаемый_СтраницаНачало_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - Элементы.ГруппаНачалоДополнительно.Видимость = ПодключениеOnline; + Элементы.ГруппаНачалоДополнительно.Видимость = ПодключениеOnline Или ЭтоОбменСВнешнейСистемой; - Элементы.УдалитьНастройкуВКорреспонденте.Заголовок = СтрЗаменить(Элементы.УдалитьНастройкуВКорреспонденте.Заголовок, - "%НаименованиеКорреспондента%", НаименованиеКорреспондента); + Если ЭтоОбменСВнешнейСистемой Тогда + Элементы.УдалитьНастройкуВКорреспонденте.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удалить настройку обмена с системой ""%1"" на Портале 1С:ИТС.'"), + НаименованиеКорреспондента); + Иначе + Элементы.УдалитьНастройкуВКорреспонденте.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удалить настройку также в программе ""%1"".'"), + НаименованиеКорреспондента); + КонецЕсли; + + Возврат Неопределено; КонецФункции @@ -338,6 +358,8 @@ ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); КонецЕсли; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -345,6 +367,8 @@ ПерейтиДалее = Ложь; + Возврат Неопределено; + КонецФункции &НаКлиенте @@ -352,6 +376,9 @@ Оповестить("Запись_УзелПланаОбмена"); ЗакрытьФормы("ФормаУзла"); + ЗакрытьФормы("НастройкаСинхронизации"); + + Возврат Неопределено; КонецФункции @@ -638,7 +665,7 @@ ПриНачалеПолученияСпискаПриложенийНаСервере(ПараметрыОбработчика, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложений", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); @@ -655,7 +682,7 @@ ПриОжиданииПолученияСпискаПриложенийНаСервере(ПараметрыОбработчика, ПродолжитьОжидание); Если ПродолжитьОжидание Тогда - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложений", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); @@ -731,7 +758,7 @@ НаименованиеКорреспондента = СтрокаПриложение.НаименованиеПриложения; КонецЕсли; Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтатусЗавершения.СообщениеОбОшибке); + ОбщегоНазначения.СообщитьПользователю(СтатусЗавершения.СообщениеОбОшибке); ПерейтиДалее = Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl index 4f2ffafcd..be9cc4e53 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl @@ -1,128 +1,15 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс -// Для внутреннего использования. -// -Процедура ПриПолученииДоступныхНастроекСинхронизацииДанных(ТаблицаНастройки, - ИспользоватьПомощникСозданияОбменаДанными = Истина) Экспорт - - ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(, Истина); - - МодельСервиса = ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); - - ТаблицаНастройки = Новый ТаблицаЗначений; - ТаблицаНастройки.Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); - ТаблицаНастройки.Колонки.Добавить("ИдентификаторНастройки", Новый ОписаниеТипов("Строка")); - ТаблицаНастройки.Колонки.Добавить("ИмяКонфигурацииКорреспондента", Новый ОписаниеТипов("Строка")); - ТаблицаНастройки.Колонки.Добавить("НаименованиеКонфигурацииКорреспондента", Новый ОписаниеТипов("Строка")); - ТаблицаНастройки.Колонки.Добавить("ИспользоватьПомощникСозданияОбменаДанными", Новый ОписаниеТипов("Булево")); - ТаблицаНастройки.Колонки.Добавить("ЗаголовокКомандыДляСозданияНовогоОбменаДанными", Новый ОписаниеТипов("Строка")); - ТаблицаНастройки.Колонки.Добавить("КраткаяИнформацияПоОбмену", Новый ОписаниеТипов("Строка")); - ТаблицаНастройки.Колонки.Добавить("ЭтоПланОбменаРаспределеннойИнформационнойБазы", Новый ОписаниеТипов("Булево")); - ТаблицаНастройки.Колонки.Добавить("ЭтоПланОбменаXDTO", Новый ОписаниеТипов("Булево")); - ТаблицаНастройки.Колонки.Добавить("ИмяПланаОбменаДляПереходаНаНовыйОбмен", Новый ОписаниеТипов("Строка")); - - СписокПлановОбмена = Новый Массив; - - Если МодельСервиса Тогда - МодульОбменДаннымиВМоделиСервисаПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервисаПовтИсп"); - СписокПлановОбмена = МодульОбменДаннымиВМоделиСервисаПовтИсп.ПланыОбменаСинхронизацииДанных(); - Иначе - СписокПлановОбмена = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); - КонецЕсли; - - Для Каждого ИмяПланаОбмена Из СписокПлановОбмена Цикл - МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; - - Если Не ЭтоПолноправныйПользователь - И ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Тогда - // Для создания обмена РИБ требуются права администратора системы. - Продолжить; - КонецЕсли; - - Если Не ОбменДаннымиПовтИсп.ДоступноИспользованиеПланаОбмена(ИмяПланаОбмена) Тогда - Продолжить; - КонецЕсли; - - НастройкиОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "ВариантыНастроекОбмена, ИмяПланаОбменаДляПереходаНаНовыйОбмен"); - - Для Каждого ВариантНастройки Из НастройкиОбмена.ВариантыНастроекОбмена Цикл - ПредопределеннаяНастройка = ВариантНастройки.ИдентификаторНастройки; - - ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "ИспользоватьПомощникСозданияОбменаДанными, - |ИмяКонфигурацииКорреспондента, - |НаименованиеКонфигурацииКорреспондента, - |ЗаголовокКомандыДляСозданияНовогоОбменаДанными, - |КраткаяИнформацияПоОбмену", - ПредопределеннаяНастройка); - - Если ИспользоватьПомощникСозданияОбменаДанными - И Не ЗначенияНастроекДляВарианта.ИспользоватьПомощникСозданияОбменаДанными Тогда - Продолжить; - КонецЕсли; - - СтрокаНастройки = ТаблицаНастройки.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаНастройки, ЗначенияНастроекДляВарианта); - - СтрокаНастройки.ИмяПланаОбмена = ИмяПланаОбмена; - СтрокаНастройки.ИдентификаторНастройки = ПредопределеннаяНастройка; - СтрокаНастройки.ЭтоПланОбменаРаспределеннойИнформационнойБазы = - ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); - СтрокаНастройки.ЭтоПланОбменаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена); - СтрокаНастройки.ИмяПланаОбменаДляПереходаНаНовыйОбмен = НастройкиОбмена.ИмяПланаОбменаДляПереходаНаНовыйОбмен; - - КонецЦикла; - - КонецЦикла; - - // Удаляем устаревшие варианты настройки обмена. - Если МодельСервиса Тогда - ПланыОбменаXDTO = Новый Массив; - УстаревшиеНастройки = Новый Массив; - - Для Каждого СтрокаНастройки Из ТаблицаНастройки Цикл - Если СтрокаНастройки.ЭтоПланОбменаXDTO Тогда - Если ПланыОбменаXDTO.Найти(СтрокаНастройки.ИмяПланаОбмена) = Неопределено Тогда - ПланыОбменаXDTO.Добавить(СтрокаНастройки.ИмяПланаОбмена); - КонецЕсли; - Продолжить; - КонецЕсли; - Если Не ЗначениеЗаполнено(СтрокаНастройки.ИмяПланаОбменаДляПереходаНаНовыйОбмен) Тогда - Продолжить; - КонецЕсли; - УстаревшиеНастройки.Добавить(СтрокаНастройки); - КонецЦикла; - - ТаблицаНастройкиXDTO = ТаблицаНастройки.Скопировать(Новый Структура("ЭтоПланОбменаXDTO", Истина)); - - НастройкиДляУдаления = Новый Массив; - Для Каждого СтрокаНастройки Из УстаревшиеНастройки Цикл - Для Каждого ПланОбменаXDTO Из ПланыОбменаXDTO Цикл - ВариантНастройки = ОбменДаннымиСервер.ВариантНастройкиОбменаДляКорреспондента( - ПланОбменаXDTO, СтрокаНастройки.ИмяКонфигурацииКорреспондента); - Если Не ЗначениеЗаполнено(ВариантНастройки) Тогда - Продолжить; - КонецЕсли; - НастройкиXDTO = ТаблицаНастройкиXDTO.НайтиСтроки(Новый Структура("ИдентификаторНастройки", ВариантНастройки)); - Если НастройкиXDTO.Количество() > 0 Тогда - НастройкиДляУдаления.Добавить(СтрокаНастройки); - Прервать; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - Для Сч = 1 По НастройкиДляУдаления.Количество() Цикл - ТаблицаНастройки.Удалить(НастройкиДляУдаления[Сч - 1]); - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - // Для внутреннего использования. // Процедура ВыгрузитьНастройкиПодключенияДляПодчиненногоУзлаРИБ(НастройкиПодключения) Экспорт @@ -460,6 +347,115 @@ КонецФункции +// Для внутреннего использования. +// +Процедура ПриНачалеПолученияВариантовНастроекОбменаДанными(УникальныйИдентификатор, ПараметрыОбработчика, ПродолжитьОжидание) Экспорт + + ТаблицаСтандартныеНастройки = Неопределено; + ПриПолученииДоступныхНастроекСинхронизацииДанных(ТаблицаСтандартныеНастройки); + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("АдресРезультатаСтандартныеНастройки", ПоместитьВоВременноеХранилище(ТаблицаСтандартныеНастройки, УникальныйИдентификатор)); + + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда + ПродолжитьОжидание = Истина; + + ВариантыНастроек = ОписаниеВариантовНастроекОбменаДаннымиСВнешнимиСистемами(); + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ВариантыНастроек", ВариантыНастроек); + ПараметрыПроцедуры.Вставить("УзелОбмена", Неопределено); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение доступных вариантов настроек обмена данными с внешними системами.'"); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиСВнешнимиСистемами.ПриПолученииВариантовНастроекОбменаДанными", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + ПараметрыОбработчикаВнешниеСистемы = Неопределено; + ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчикаВнешниеСистемы, ПродолжитьОжидание); + + ПараметрыОбработчика.Вставить("ПараметрыОбработчикаВнешниеСистемы", ПараметрыОбработчикаВнешниеСистемы); + + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриОжиданииПолученияВариантовНастроекОбменаДанными(ПараметрыОбработчика, ПродолжитьОжидание) Экспорт + + Если ПараметрыОбработчика.Свойство("ПараметрыОбработчикаВнешниеСистемы") Тогда + ПриОжиданииДлительнойОперации(ПараметрыОбработчика.ПараметрыОбработчикаВнешниеСистемы, ПродолжитьОжидание); + Иначе + ПродолжитьОжидание = Ложь; + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПриЗавершенииПолученияВариантовНастроекОбменаДанными(ПараметрыОбработчика, Результат) Экспорт + + Результат = Новый Структура; + Результат.Вставить("СтандартныеНастройки", ПолучитьИзВременногоХранилища(ПараметрыОбработчика.АдресРезультатаСтандартныеНастройки)); + + Если ПараметрыОбработчика.Свойство("ПараметрыОбработчикаВнешниеСистемы") Тогда + + НастройкиВнешниеСистемы = Новый Структура; + НастройкиВнешниеСистемы.Вставить("КодОшибки"); // НастройкиПолучены, НетНастроек, Ошибка, НеПодключенаИнтернетПоддержка + НастройкиВнешниеСистемы.Вставить("СообщениеОбОшибке"); + НастройкиВнешниеСистемы.Вставить("ВариантыНастроек"); + + СтатусЗавершенияВнешниеСистемы = Неопределено; + ПриЗавершенииДлительнойОперации(ПараметрыОбработчика.ПараметрыОбработчикаВнешниеСистемы, СтатусЗавершенияВнешниеСистемы); + + Если СтатусЗавершенияВнешниеСистемы.Отказ Тогда + НастройкиВнешниеСистемы.КодОшибки = "ОшибкаФоновогоЗадания"; + НастройкиВнешниеСистемы.СообщениеОбОшибке = СтатусЗавершенияВнешниеСистемы.СообщениеОбОшибке; + Иначе + ЗаполнитьЗначенияСвойств(НастройкиВнешниеСистемы, СтатусЗавершенияВнешниеСистемы.Результат); + КонецЕсли; + + Результат.Вставить("НастройкиВнешниеСистемы", НастройкиВнешниеСистемы); + + КонецЕсли; + +КонецПроцедуры + +Функция ОписаниеВариантовНастроекОбменаДаннымиСВнешнимиСистемами() Экспорт + + ВариантыНастроек = Новый ТаблицаЗначений; + ВариантыНастроек.Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); + ВариантыНастроек.Колонки.Добавить("ИдентификаторНастройки", Новый ОписаниеТипов("Строка")); + ВариантыНастроек.Колонки.Добавить("ЗаголовокКомандыДляСозданияНовогоОбменаДанными", Новый ОписаниеТипов("Строка")); + ВариантыНастроек.Колонки.Добавить("КраткаяИнформацияПоОбмену", Новый ОписаниеТипов("ФорматированнаяСтрока")); + ВариантыНастроек.Колонки.Добавить("ПодробнаяИнформацияПоОбмену", Новый ОписаниеТипов("Строка")); + ВариантыНастроек.Колонки.Добавить("ЗаголовокПомощникаСозданияОбмена", Новый ОписаниеТипов("Строка")); + ВариантыНастроек.Колонки.Добавить("НаименованиеКорреспондента", Новый ОписаниеТипов("Строка")); + ВариантыНастроек.Колонки.Добавить("ПараметрыПодключения"); + + Возврат ВариантыНастроек; + +КонецФункции + +Функция СтруктураОписанияВариантаНастройки() Экспорт + + ОписаниеВариантаНастройки = Новый Структура; + ОписаниеВариантаНастройки.Вставить("ЗаголовокКомандыДляСозданияНовогоОбменаДанными", ""); + ОписаниеВариантаНастройки.Вставить("КраткаяИнформацияПоОбмену", Новый ФорматированнаяСтрока("")); + ОписаниеВариантаНастройки.Вставить("ПодробнаяИнформацияПоОбмену", ""); + ОписаниеВариантаНастройки.Вставить("ЗаголовокПомощникаСозданияОбмена", ""); + ОписаниеВариантаНастройки.Вставить("НаименованиеКорреспондента", ""); + + Возврат ОписаниеВариантаНастройки; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -584,6 +580,150 @@ #КонецОбласти +Процедура ПриПолученииДоступныхНастроекСинхронизацииДанных(ТаблицаНастройки) + + ТаблицаНастройки = Новый ТаблицаЗначений; + ТаблицаНастройки.Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("ИдентификаторНастройки", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("ИмяКонфигурацииКорреспондента", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("НаименованиеКонфигурацииКорреспондента", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("ЗаголовокКомандыДляСозданияНовогоОбменаДанными", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("ЗаголовокПомощникаСозданияОбмена", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("КраткаяИнформацияПоОбмену", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("ПодробнаяИнформацияПоОбмену", Новый ОписаниеТипов("Строка")); + ТаблицаНастройки.Колонки.Добавить("ЭтоПланОбменаРИБ", Новый ОписаниеТипов("Булево")); + ТаблицаНастройки.Колонки.Добавить("ЭтоПланОбменаXDTO", Новый ОписаниеТипов("Булево")); + ТаблицаНастройки.Колонки.Добавить("ИмяПланаОбменаДляПереходаНаНовыйОбмен", Новый ОписаниеТипов("Строка")); + + СписокПлановОбмена = ПланыОбменаДляНастройкиСинхронизации(); + + Для Каждого ИмяПланаОбмена Из СписокПлановОбмена Цикл + + ЗаполнитьТаблицуВариантамиНастроекПланаОбмена(ТаблицаНастройки, ИмяПланаОбмена); + + КонецЦикла; + + УдалитьУстаревшиеВариантыНастроекВМоделиСервиса(ТаблицаНастройки); + +КонецПроцедуры + +Функция ПланыОбменаДляНастройкиСинхронизации() + + СписокПлановОбмена = Новый Массив; + + ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(, Истина); + + МодельСервиса = ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + + Если МодельСервиса Тогда + МодульОбменДаннымиВМоделиСервисаПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервисаПовтИсп"); + СписокПлановОбмена = МодульОбменДаннымиВМоделиСервисаПовтИсп.ПланыОбменаСинхронизацииДанных(); + Иначе + СписокПлановОбмена = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + КонецЕсли; + + Для Инд = -СписокПлановОбмена.ВГраница() По 0 Цикл + + ИмяПланаОбмена = СписокПлановОбмена[-Инд]; + + Если (Не ЭтоПолноправныйПользователь + И ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена)) + Или Не ОбменДаннымиПовтИсп.ДоступноИспользованиеПланаОбмена(ИмяПланаОбмена) Тогда + // Для создания обмена РИБ требуются права администратора системы. + СписокПлановОбмена.Удалить(-Инд); + КонецЕсли; + + КонецЦикла; + + Возврат СписокПлановОбмена; + +КонецФункции + +Процедура ЗаполнитьТаблицуВариантамиНастроекПланаОбмена(ТаблицаНастройки, ИмяПланаОбмена) + + НастройкиОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "ВариантыНастроекОбмена, ИмяПланаОбменаДляПереходаНаНовыйОбмен"); + + Для Каждого ВариантНастройки Из НастройкиОбмена.ВариантыНастроекОбмена Цикл + ПредопределеннаяНастройка = ВариантНастройки.ИдентификаторНастройки; + + ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "ИспользоватьПомощникСозданияОбменаДанными, + |ИмяКонфигурацииКорреспондента, + |НаименованиеКонфигурацииКорреспондента, + |ЗаголовокКомандыДляСозданияНовогоОбменаДанными, + |ЗаголовокПомощникаСозданияОбмена, + |КраткаяИнформацияПоОбмену, + |ПодробнаяИнформацияПоОбмену", + ПредопределеннаяНастройка); + + Если Не ЗначенияНастроекДляВарианта.ИспользоватьПомощникСозданияОбменаДанными Тогда + Продолжить; + КонецЕсли; + + СтрокаНастройки = ТаблицаНастройки.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаНастройки, ЗначенияНастроекДляВарианта); + + СтрокаНастройки.ИмяПланаОбмена = ИмяПланаОбмена; + СтрокаНастройки.ИдентификаторНастройки = ПредопределеннаяНастройка; + СтрокаНастройки.ЭтоПланОбменаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); + СтрокаНастройки.ЭтоПланОбменаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена); + СтрокаНастройки.ИмяПланаОбменаДляПереходаНаНовыйОбмен = НастройкиОбмена.ИмяПланаОбменаДляПереходаНаНовыйОбмен; + + КонецЦикла; + +КонецПроцедуры + +Процедура УдалитьУстаревшиеВариантыНастроекВМоделиСервиса(ТаблицаНастройки) + + МодельСервиса = ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + + Если Не МодельСервиса Тогда + Возврат; + КонецЕсли; + + ПланыОбменаXDTO = Новый Массив; + УстаревшиеНастройки = Новый Массив; + + Для Каждого СтрокаНастройки Из ТаблицаНастройки Цикл + Если СтрокаНастройки.ЭтоПланОбменаXDTO Тогда + Если ПланыОбменаXDTO.Найти(СтрокаНастройки.ИмяПланаОбмена) = Неопределено Тогда + ПланыОбменаXDTO.Добавить(СтрокаНастройки.ИмяПланаОбмена); + КонецЕсли; + Продолжить; + КонецЕсли; + Если Не ЗначениеЗаполнено(СтрокаНастройки.ИмяПланаОбменаДляПереходаНаНовыйОбмен) Тогда + Продолжить; + КонецЕсли; + УстаревшиеНастройки.Добавить(СтрокаНастройки); + КонецЦикла; + + ТаблицаНастройкиXDTO = ТаблицаНастройки.Скопировать(Новый Структура("ЭтоПланОбменаXDTO", Истина)); + + НастройкиДляУдаления = Новый Массив; + Для Каждого СтрокаНастройки Из УстаревшиеНастройки Цикл + Для Каждого ПланОбменаXDTO Из ПланыОбменаXDTO Цикл + ВариантНастройки = ОбменДаннымиСервер.ВариантНастройкиОбменаДляКорреспондента( + ПланОбменаXDTO, СтрокаНастройки.ИмяКонфигурацииКорреспондента); + Если Не ЗначениеЗаполнено(ВариантНастройки) Тогда + Продолжить; + КонецЕсли; + НастройкиXDTO = ТаблицаНастройкиXDTO.НайтиСтроки(Новый Структура("ИдентификаторНастройки", ВариантНастройки)); + Если НастройкиXDTO.Количество() > 0 Тогда + НастройкиДляУдаления.Добавить(СтрокаНастройки); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Для Сч = 1 По НастройкиДляУдаления.Количество() Цикл + ТаблицаНастройки.Удалить(НастройкиДляУдаления[Сч - 1]); + КонецЦикла; + +КонецПроцедуры + Процедура ПриПодключенииККорреспонденту(Отказ, ИмяПланаОбмена, Знач ВерсияКорреспондента, СообщениеОбОшибке = "") Если Не ЗначениеЗаполнено(ВерсияКорреспондента) Тогда @@ -1233,13 +1373,23 @@ // 1. Удаление настройки синхронизации в программе-корреспонденте (опционально). Если НастройкиУдаления.УдалитьНастройкуВКорреспонденте Тогда УдалитьНастройкуСинхронизацииВКорреспонденте(НастройкиУдаления, Результат); + + Если Не Результат.НастройкаУдаленаВКорреспонденте Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При удалении настройки синхронизации в программе ""%1"" возникла ошибка: %2. + | + |Попробуйте выполнить удаление позже, или снимите флажок ""Удалить настройку также в программе..."".'"), + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкиУдаления.УзелОбмена, "Наименование"), + Результат.СообщениеОбОшибкеВКорреспонденте); + КонецЕсли; + КонецЕсли; // 2. Удаление настройки синхронизации в этой программе. Попытка ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(НастройкиУдаления.УзелОбмена); Исключение - Результат.НастройкаУдалена = Ложь; + Результат.НастройкаУдалена = Ложь; Результат.СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), @@ -1319,7 +1469,7 @@ КонецЕсли; Если WSПрокси = Неопределено Тогда - Отказ = Истина; + Результат.НастройкаУдаленаВКорреспонденте = Ложь; Возврат; КонецЕсли; @@ -1332,10 +1482,31 @@ ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибкеВКорреспонденте); КонецПопытки; - + + ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда + + Контекст = Новый Структура; + Контекст.Вставить("Корреспондент", НастройкиУдаления.УзелОбмена); + + МодульОбменДаннымиСВнешнимиСистемами = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСВнешнимиСистемами"); + + Попытка + МодульОбменДаннымиСВнешнимиСистемами.ПриУдаленииНастройкиСинхронизации(Контекст); + Исключение + Информация = ИнформацияОбОшибке(); + + Результат.НастройкаУдаленаВКорреспонденте = Ложь; + Результат.СообщениеОбОшибкеВКорреспонденте = КраткоеПредставлениеОшибки(Информация); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(Информация)); + КонецПопытки; + + КонецЕсли; Иначе - Результат.НастройкаУдаленаВКорреспонденте = Ложь; - Результат.СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Результат.НастройкаУдаленаВКорреспонденте = Ложь; + Результат.СообщениеОбОшибкеВКорреспонденте = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для вида подключения ""%1"" не поддерживается удаление настройки синхронизации на стороне программы-корреспондента.'"), ВидТранспорта); КонецЕсли; @@ -1365,41 +1536,6 @@ КонецПроцедуры -Функция ПредопределенноеРасписаниеКаждыйЧас() Экспорт - - Месяцы = Новый Массив; - Месяцы.Добавить(1); - Месяцы.Добавить(2); - Месяцы.Добавить(3); - Месяцы.Добавить(4); - Месяцы.Добавить(5); - Месяцы.Добавить(6); - Месяцы.Добавить(7); - Месяцы.Добавить(8); - Месяцы.Добавить(9); - Месяцы.Добавить(10); - Месяцы.Добавить(11); - Месяцы.Добавить(12); - - ДниНедели = Новый Массив; - ДниНедели.Добавить(1); - ДниНедели.Добавить(2); - ДниНедели.Добавить(3); - ДниНедели.Добавить(4); - ДниНедели.Добавить(5); - ДниНедели.Добавить(6); - ДниНедели.Добавить(7); - - Расписание = Новый РасписаниеРегламентногоЗадания; - Расписание.Месяцы = Месяцы; - Расписание.ДниНедели = ДниНедели; - Расписание.ПериодПовтораВТечениеДня = 60 * 60; // 60 минут - Расписание.ПериодПовтораДней = 1; // каждый день - - Возврат Расписание; - -КонецФункции - Функция КодУзла(НастройкиПодключения) Если НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена @@ -2025,10 +2161,13 @@ ОбменДаннымиXDTOСервер.ЗаполнитьСтруктуруНастроекXDTOКорреспондента(СтруктураНастроек, Header, , УзелОбмена); // Проверка UID отправителя на соответствие формату. + УИД = Header.Confirmation.From; Попытка - УИД = Новый УникальныйИдентификатор(Header.Confirmation.From); + УИД = Новый УникальныйИдентификатор(УИД); Исключение - ВызватьИсключение НСтр("ru = 'Идентификатор отправителя в файле с настройками EnterpriseData не соответствует формату.'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатор отправителя <%1> в файле с настройками EnterpriseData не соответствует ожидаемому формату GUID.'"), + УИД); КонецПопытки; СтруктураНастроек.Вставить("ИдентификаторОтправителя", Header.Confirmation.From); diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index 28ddca3ad..9f2c58d8c 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -81,7 +89,7 @@ КонецПопытки; // Обновляем повторно используемые значения МРО. - ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.ПроверитьКэшМеханизмаРегистрацииОбъектов(); Попытка @@ -320,13 +328,13 @@ МодульПомощникНастройки.НастройкиПодключенияВXML(ЭтотОбъект, ИмяВременногоФайла); Исключение СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); - УдалитьВременныйФайл(ИмяВременногоФайла); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); Возврат; КонецПопытки; АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла)); - УдалитьВременныйФайл(ИмяВременногоФайла); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); КонецПроцедуры @@ -698,16 +706,6 @@ КонецПроцедуры -Процедура УдалитьВременныйФайл(ИмяВременногоФайла) - - Если Не ПустаяСтрока(ИмяВременногоФайла) Тогда - - УдалитьФайлы(ИмяВременногоФайла); - - КонецЕсли; - -КонецПроцедуры - Процедура СообщитьИнформациюОбОшибке(ИнформацияОбОшибке, Отказ) ПолеСтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); @@ -726,4 +724,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo index ded7872d0..a390c622b 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo @@ -60,10 +60,6 @@ <types>String</types> <stringQualifiers/> </type> - <toolTip> - <key>ru</key> - <value>Имя информационной базы на сервере 1С:Предприятия</value> - </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> @@ -94,10 +90,6 @@ <types>String</types> <stringQualifiers/> </type> - <toolTip> - <key>ru</key> - <value>Имя сервера 1С:Предприятия</value> - </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl index b35c7e107..c644efeb2 100644 --- a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Form.form index 705e4e64a..549297ee2 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Form.form @@ -253,20 +253,113 @@ <textSize>Normal</textSize> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>Расширение0</name> - <id>10</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаРазрешениеКартинка</name> + <id>93</id> + <items xsi:type="form:FormField"> + <name>Расширение0</name> + <id>10</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ОбъектПрототип[0].Расширение</segments> + </dataPath> + <extendedTooltip> + <name>Расширение0РасширеннаяПодсказка</name> + <id>66</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>Расширение0КонтекстноеМеню</name> + <id>11</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <readOnly>true</readOnly> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <footerHorizontalAlign>Left</footerHorizontalAlign> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>false</horizontalStretch> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <borderColor xsi:type="core:ColorRef"> + <color>Style.BorderColor</color> + </borderColor> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Картинка0</name> + <id>20</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ОбъектПрототип[0].ИндексКартинки</segments> + </dataPath> + <titleLocation>None</titleLocation> + <extendedTooltip> + <name>Картинка0РасширеннаяПодсказка</name> + <id>67</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>Картинка0КонтекстноеМеню</name> + <id>21</id> + <autoFill>true</autoFill> + </contextMenu> + <type>PictureField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <footerHorizontalAlign>Left</footerHorizontalAlign> + <extInfo xsi:type="form:ImageFieldExtInfo"> + <width>2</width> + <autoMaxWidth>true</autoMaxWidth> + <height>1</height> + <autoMaxHeight>true</autoMaxHeight> + <valuesPicture xsi:type="core:PictureRef"> + <picture>CommonPicture.КоллекцияПиктограммФайлов</picture> + </valuesPicture> + <border xsi:type="core:BorderDef"> + <width>1</width> + </border> + </extInfo> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>ОбъектПрототип[0].Расширение</segments> - </dataPath> + <title> + <key>ru</key> + <value>Разрешение, картинка</value> + - Расширение0РасширеннаяПодсказка - 66 + ГруппаРазрешениеКартинкаРасширеннаяПодсказка + 94 Label true true @@ -274,75 +367,14 @@ Left - - Расширение0КонтекстноеМеню - 11 - true - - InputField - true - Enter - true - Left - true - Left - - true - true - false - true - true - true - - Style.BorderColor - - Normal - - - - Картинка0 - 20 - true - true - - true - - - ОбъектПрототип[0].ИндексКартинки - - None - - Картинка0РасширеннаяПодсказка - 67 - Label - true - true - - Left - - - - Картинка0КонтекстноеМеню - 21 - true - - PictureField - Enter - true - Left - true - Left - - 2 - true - 1 - true - - CommonPicture.КоллекцияПиктограммФайлов - - - 1 - + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl index b2502db8e..f1acdc12e 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -10,17 +17,12 @@ ОбъектЗначение = Параметры.Ключ.ПолучитьОбъект(); ОбъектЗначение.Заполнить(Неопределено); - - ИмяСправочника = ОбъектЗначение.Метаданные().Имя; ЗаголовокОшибки = НСтр("ru = 'Ошибка при настройке формы элемента присоединенных файлов.'"); ОкончаниеОшибки = НСтр("ru = 'В этом случае настройка формы элемента невозможна.'"); - ИмяСправочникаХранилищаВерсийФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияВерсийФайлов( - ТипЗнч(ОбъектЗначение.Владелец.ВладелецФайла), "", ЗаголовокОшибки, ОкончаниеОшибки); - НастроитьОбъектФормы(ОбъектЗначение); - + Если ТипЗнч(ЭтотОбъект.Объект.Владелец) = Тип("СправочникСсылка.Файлы") Тогда Элементы.ПолноеНаименование.ТолькоПросмотр = Истина; КонецЕсли; @@ -34,7 +36,7 @@ ТомПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(ЭтотОбъект.Объект.Том); - ОбщиеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ОбщиеНастройкиРаботыСФайлами(); + ОбщиеНастройки = РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки; РасширениеФайлаВСписке = РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( ОбщиеНастройки.СписокРасширенийТекстовыхФайлов, ЭтотОбъект.Объект.Расширение); @@ -42,7 +44,7 @@ Если РасширениеФайлаВСписке Тогда Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) Тогда - КодировкаЗначение = РаботаСФайламиСлужебныйВызовСервера.ПолучитьКодировкуВерсииФайла(ЭтотОбъект.Объект.Ссылка); + КодировкаЗначение = РаботаСФайламиСлужебный.ПолучитьКодировкуВерсииФайла(ЭтотОбъект.Объект.Ссылка); СписокКодировок = РаботаСФайламиСлужебный.Кодировки(); ЭлементСписка = СписокКодировок.НайтиПоЗначению(КодировкаЗначение); @@ -61,7 +63,7 @@ Элементы.Кодировка.Видимость = Ложь; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СтандартнаяЗаписатьИЗакрыть", "Отображение", ОтображениеКнопки.Картинка); @@ -200,7 +202,7 @@ Функция ОбработатьКомандуЗаписиВерсииФайла() Если ПустаяСтрока(ЭтотОбъект.Объект.ПолноеНаименование) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Для продолжения укажите имя версии файла.'"), , "Наименование", "Объект"); Возврат Ложь; КонецЕсли; @@ -208,7 +210,7 @@ Попытка РаботаСФайламиСлужебныйКлиент.КорректноеИмяФайла(ЭтотОбъект.Объект.ПолноеНаименование); Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), ,"Наименование", "Объект"); Возврат Ложь; КонецПопытки; @@ -246,7 +248,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка записи версии присоединенного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка записи версии присоединенного файла'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Form.form index f80b66aaf..d90cb6a6a 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Form.form @@ -214,6 +214,7 @@ None None None + SelectionPresentationAndChoice true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Module.bsl index fa6f9fc24..c9ce4ca9d 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -19,6 +26,10 @@ Заголовок = Параметры.Заголовок; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Form.form index 2018b69ee..4aa5d95e6 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Form.form @@ -37,357 +37,6 @@ Auto - - КоманднаяПанель - 140 - - ФормаИзменить - 118 - - <key>ru</key> - <value>Открыть карточку</value> - - true - true - - true - - - ФормаИзменитьРасширеннаяПодсказка - 119 - Label - true - true - - Left - - - Form.Command.ОткрытьСвойстваФайла - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаГруппаКомандОсновные - 67 - - ФормаПросмотреть - 69 - true - true - - true - - false - - ФормаПросмотретьРасширеннаяПодсказка - 92 - Label - true - true - - Left - - - Form.Command.Просмотреть - Normal - true - true - UserCmds - Auto - - - ФормаОсвободить - 82 - true - true - - true - - false - - ФормаОсвободитьРасширеннаяПодсказка - 93 - Label - true - true - - Left - - - Form.Command.Освободить - Normal - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд основные</value> - - - ФормаГруппаКомандОсновныеРасширеннаяПодсказка - 91 - Label - true - true - - Left - - - - - - ФормаГлобальныеКоманды - 122 - true - true - - true - - - <key>ru</key> - <value>Форма глобальные команды</value> - - - ФормаГлобальныеКомандыРасширеннаяПодсказка - 123 - Label - true - true - - Left - - - - FormCommandPanelGlobalCommands - - - - ФормаГруппаКомандДополнительные - 132 - - ФормаИзменить82 - 126 - - <key>ru</key> - <value>Открыть карточку</value> - - true - true - - true - - - ФормаИзменить82РасширеннаяПодсказка - 127 - Label - true - true - - Left - - - Form.Command.ОткрытьСвойстваФайла - Normal - Auto - true - true - UserCmds - Auto - - - ФормаУстановитьПометкуУдаления - 128 - true - true - - true - - - ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка - 129 - Label - true - true - - Left - - - Form.Command.ПометитьНаУдаление - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаСохранитьКак - 59 - - <key>ru</key> - <value>Сохранить как...</value> - - true - true - - true - - false - - ФормаСохранитьКакРасширеннаяПодсказка - 94 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд дополнительные</value> - - - ФормаГруппаКомандДополнительныеРасширеннаяПодсказка - 133 - Label - true - true - - Left - - - - - - ФормаСтандартныеКоманды - 68 - - Обновить - 151 - true - true - - true - - - ОбновитьРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Refresh - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма стандартные команды</value> - - - ФормаСтандартныеКомандыРасширеннаяПодсказка - 95 - Label - true - true - - Left - - - - Form - - - - ФормаСправка - 90 - true - true - - true - - - ФормаСправкаExtendedTooltip - 96 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - КоманднаяПанельРасширеннаяПодсказка - 141 - Label - true - true - - Left - - - CommandBar - - Left - - Список 10 @@ -755,6 +404,7 @@ СписокРазмер 39 + VeryLow <key>ru</key> <value>Размер (КБ)</value> @@ -813,6 +463,7 @@ <items xsi:type="form:FormField"> <name>СписокРасширение</name> <id>72</id> + <displayImportance>VeryLow</displayImportance> <title> <key>ru</key> <value>Расширение</value> @@ -851,6 +502,7 @@ <items xsi:type="form:FormField"> <name>СписокРедактирует</name> <id>29</id> + <displayImportance>VeryLow</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible/> @@ -1292,7 +944,6 @@ <searchStringLocation>None</searchStringLocation> <viewStatusLocation>None</viewStatusLocation> <searchControlLocation>None</searchControlLocation> - <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> @@ -1308,6 +959,357 @@ <autoCommandBar> <name>ФормаКоманднаяПанель</name> <id>-1</id> + <items xsi:type="form:Button"> + <name>ФормаИзменить</name> + <id>118</id> + <title> + <key>ru</key> + <value>Открыть карточку</value> + + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + Form.Command.ОткрытьСвойстваФайла + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаГруппаКомандОсновные + 67 + + ФормаПросмотреть + 69 + true + true + + true + + false + + ФормаПросмотретьРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + Form.Command.Просмотреть + Normal + true + true + UserCmds + Auto + + + ФормаОсвободить + 82 + true + true + + true + + false + + ФормаОсвободитьРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + Form.Command.Освободить + Normal + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа команд основные</value> + + + ФормаГруппаКомандОсновныеРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + + + ФормаГлобальныеКоманды + 122 + true + true + + true + + + <key>ru</key> + <value>Форма глобальные команды</value> + + + ФормаГлобальныеКомандыРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + + FormCommandPanelGlobalCommands + + + + ФормаГруппаКомандДополнительные + 132 + + ФормаИзменить82 + 126 + + <key>ru</key> + <value>Открыть карточку</value> + + true + true + + true + + + ФормаИзменить82РасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Form.Command.ОткрытьСвойстваФайла + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьПометкуУдаления + 128 + true + true + + true + + + ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + Form.Command.ПометитьНаУдаление + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаСохранитьКак + 59 + + <key>ru</key> + <value>Сохранить как...</value> + + true + true + + true + + false + + ФормаСохранитьКакРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма группа команд дополнительные</value> + + + ФормаГруппаКомандДополнительныеРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + + + ФормаСтандартныеКоманды + 68 + + Обновить + 151 + true + true + + true + + + ОбновитьРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма стандартные команды</value> + + + ФормаСтандартныеКомандыРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + Form + + + + ПоказыватьСлужебныеФайлы + 155 + true + true + + true + + + ПоказыватьСлужебныеФайлыРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + Form.Command.ПоказыватьСлужебныеФайлы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаСправка + 90 + true + true + + true + + + ФормаСправкаExtendedTooltip + 96 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left @@ -1379,7 +1381,8 @@ СведенияОФайлах.ВладелецФайла КАК ВладелецФайла, СведенияОФайлах.Расширение КАК Расширение, СведенияОФайлах.ХранитьВерсии КАК ХранитьВерсии, - СведенияОФайлах.НомерКартинкиПодписанЗашифрован КАК НомерКартинкиПодписанЗашифрован + СведенияОФайлах.НомерКартинкиПодписанЗашифрован КАК НомерКартинкиПодписанЗашифрован, + СведенияОФайлах.Служебный КАК Служебный ИЗ РегистрСведений.СведенияОФайлах КАК СведенияОФайлах ГДЕ @@ -1543,6 +1546,28 @@ DontUse Auto + + ПоказыватьСлужебныеФайлы + + <key>ru</key> + <value>Показывать служебные файлы</value> + + 7 + + ru + Показывать служебные файлы + + + true + + + + ПоказыватьСлужебныеФайлы + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl index 10428a0c1..9cb3ec9d7 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,10 +15,18 @@ Возврат; КонецЕсли; - Список.Параметры.УстановитьЗначениеПараметра( - "ТекущийПользователь", Пользователи.ТекущийПользователь()); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + Если ТипЗнч(ТекущийПользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + РаботаСФайламиСлужебный.ИзменитьФормуДляВнешнегоПользователя(ЭтотОбъект, Истина); + КонецЕсли; - РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьУсловноеОформлениеСпискаФайлов(Список); + Список.Параметры.УстановитьЗначениеПараметра( + "ТекущийПользователь", ТекущийПользователь); + + РаботаСФайламиСлужебный.ЗаполнитьУсловноеОформлениеСпискаФайлов(Список); + + РаботаСФайламиСлужебный.ДобавитьОтборыВСписокФайлов(Список); + Элементы.ПоказыватьСлужебныеФайлы.Видимость = Пользователи.ЭтоПолноправныйПользователь(); ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере(); @@ -149,6 +164,14 @@ Элементы.Список.Обновить(); КонецПроцедуры +&НаКлиенте +Процедура ПоказыватьСлужебныеФайлы(Команда) + + Элементы.ПоказыватьСлужебныеФайлы.Пометка = + РаботаСФайламиСлужебныйКлиент.ПоказыватьСлужебныеФайлыНажатие(Список); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form index 7183ebfc5..86b638dd7 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Form.form @@ -339,6 +339,16 @@ true auto true + + + СписокКоманднаяПанель + + + + + КоманднаяПанель + + Список diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl index 840939614..af5292c3d 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl index 28006313e..4e5712842 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -13,6 +20,10 @@ ПоказыватьТолькоОсновныеКодировки = Истина; ЗаполнитьСписокКодировок(Не ПоказыватьТолькоОсновныеКодировки); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСохраненияШифрованногоФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСохраненияШифрованногоФайла/Module.bsl index 0c0059d19..d65335a7e 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСохраненияШифрованногоФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСохраненияШифрованногоФайла/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -11,16 +18,15 @@ СохранятьСРасшифровкой = 1; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьКлиентСервер = - ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - РасширениеДляЗашифрованныхФайлов = - МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляЗашифрованныхФайлов; + РасширениеДляЗашифрованныхФайлов = + МодульЭлектроннаяПодпись.ПерсональныеНастройки().РасширениеДляЗашифрованныхФайлов; Иначе РасширениеДляЗашифрованныхФайлов = "p7m"; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СохранятьСРасшифровкой", "ВидПереключателя", ВидПереключателя.Переключатель); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСохранитьФайл", "Отображение", ОтображениеКнопки.Картинка); @@ -28,6 +34,10 @@ КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Form.form index 7fefae914..374aa9063 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Form.form @@ -136,6 +136,10 @@ </items> <horizontalAlign>Right</horizontalAlign> </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> <excludedCommands>CustomizeForm</excludedCommands> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Module.bsl index 91488ce4b..1b66b5eda 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Module.bsl @@ -1,3 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + Элементы.СпособСравненияВерсийФайлов.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Form.form index 8b2909072..0dbe4478e 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Form.form @@ -511,6 +511,10 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <handlers> + <event>BeforeClose</event> + <name>ПередЗакрытием</name> + </handlers> <handlers> <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl index d9faab97e..77e92dfc8 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ГруппаФайлов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -28,7 +35,6 @@ ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь(); ИначеЕсли ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); - ЗначениеКопирования = Параметры.ЗначениеКопирования; ОбъектЗначение = Справочники[КопируемыйОбъект.Метаданные().Имя].СоздатьГруппу(); ОбъектЗначение.Родитель = Параметры.Родитель; @@ -64,6 +70,19 @@ КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если Модифицированность Тогда + + Отказ = Истина; + ОповещениеОбОтвете = Новый ОписаниеОповещения("ЗакрытьФормуПослеОтветаНаВопрос", ЭтотОбъект); + ПоказатьВопрос(ОповещениеОбОтвете, НСтр("ru = 'Данные были изменены. Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -205,7 +224,7 @@ ОчиститьСообщения(); Если ПустаяСтрока(ЭтотОбъект.Объект.Наименование) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Для продолжения укажите имя файла.'"), , "Наименование", "Объект"); Возврат Ложь; КонецЕсли; @@ -213,7 +232,7 @@ Попытка РаботаСФайламиСлужебныйКлиент.КорректноеИмяФайла(ЭтотОбъект.Объект.Наименование); Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), ,"Наименование", "Объект"); Возврат Ложь; КонецПопытки; @@ -260,7 +279,7 @@ Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка записи группы присоединенных файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка записи группы присоединенных файлов'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); ВызватьИсключение; @@ -270,8 +289,6 @@ ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); КонецЕсли; - ЗначениеКопирования = Справочники[ИмяСправочника].ПустаяСсылка(); - ОбновитьЗаголовок(); ОбновитьИнформациюОбИзменении(); @@ -314,4 +331,17 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗакрытьФормуПослеОтветаНаВопрос(Ответ, ДополнительныеПараметры) Экспорт + + Если Ответ = КодВозвратаДиалога.Да + И ОбработатьКомандуЗаписиФайла() Тогда + Закрыть(); + ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда + Модифицированность = Ложь; + Закрыть(); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form index eef70a6a0..e37eef706 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form @@ -91,1544 +91,6 @@ <items xsi:type="form:FormGroup"> <name>КоманднаяПанель</name> <id>242</id> - <items xsi:type="form:Button"> - <name>ФормаВыбрать</name> - <id>220</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаВыбратьРасширеннаяПодсказка</name> - <id>221</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.StandardCommand.Choose</commandName> - <representation>Auto</representation> - <defaultButton>true</defaultButton> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>Добавить</name> - <id>261</id> - <title> - <key>ru</key> - <value>Добавить файл с диска...</value> - - true - - true - - - ДобавитьРасширеннаяПодсказка - 262 - Label - true - true - - Left - - - Form.Command.Добавить - Normal - Auto - true - true - UserCmds - Auto - - - ПодменюДобавить - 257 - - ДобавитьИзФайлаНаДиске - 1 - - <key>ru</key> - <value>Файл с диска...</value> - - true - true - - true - - - ДобавитьИзФайлаНаДискеРасширеннаяПодсказка - 103 - Label - true - true - - Left - - - Form.Command.Добавить - Normal - true - true - UserCmds - Auto - - - ДобавитьФайлПоШаблону - 328 - true - true - - true - - - ДобавитьФайлПоШаблонуРасширеннаяПодсказка - 329 - Label - true - true - - Left - - - Form.Command.ДобавитьФайлПоШаблону - Normal - Auto - true - true - UserCmds - Auto - - - ДобавитьФайлСоСканера - 259 - true - true - - true - - - ДобавитьФайлСоСканераРасширеннаяПодсказка - 260 - Label - true - true - - Left - - - Form.Command.ДобавитьФайлСоСканера - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Добавить</value> - - - ПодменюДобавитьРасширеннаяПодсказка - 258 - Label - true - true - - Left - - - Popup - - - StdPicture.CreateListItem - - Auto - Normal - - - - ЗагрузитьФайлы - 300 - true - true - - true - - - ЗагрузитьФайлыРасширеннаяПодсказка - 301 - Label - true - true - - Left - - - Form.Command.ЗагрузитьФайлы - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ЗагрузитьПапку - 321 - true - true - - true - - - ЗагрузитьПапкуРасширеннаяПодсказка - 322 - Label - true - true - - Left - - - Form.Command.ЗагрузитьПапку - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СоздатьГруппу - 298 - true - true - - true - - - СоздатьГруппуРасширеннаяПодсказка - 299 - Label - true - true - - Left - - - Form.Command.СоздатьГруппу - Normal - Auto - true - true - UserCmds - Auto - - - ФормаИзменить - 102 - true - true - - true - - - ФормаИзменитьРасширеннаяПодсказка - 122 - Label - true - true - - Left - - - Form.Command.ОткрытьСвойстваФайла - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаГруппаКомандОсновные - 33 - - ФормаОткрыть - 3 - true - true - - true - - - ФормаОткрытьРасширеннаяПодсказка - 105 - Label - true - true - - Left - - - Form.Command.ОткрытьФайлДляПросмотра - Normal - true - true - UserCmds - Auto - - - Занять - 332 - true - true - - true - - - ЗанятьРасширеннаяПодсказка - 333 - Label - true - true - - Left - - - Form.Command.Занять - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаРедактировать - 34 - true - true - - true - - - ФормаРедактироватьExtendedTooltip - 107 - Label - true - true - - Left - - - Form.Command.Редактировать - Normal - true - true - UserCmds - Auto - - - ФормаЗакончитьРедактирование - 43 - true - true - - true - - - ФормаЗакончитьРедактированиеExtendedTooltip - 108 - Label - true - true - - Left - - - Form.Command.ЗакончитьРедактирование - Normal - Auto - true - true - UserCmds - Auto - - - ПодменюПечать - 334 - - Печать - 265 - true - true - - true - - - ПечатьРасширеннаяПодсказка - 266 - Label - true - true - - Left - - - Form.Command.Печать - Normal - Auto - true - true - UserCmds - Auto - - - ПечатьСоШтампом - 336 - true - true - - true - - - ПечатьСоШтампомРасширеннаяПодсказка - 337 - Label - true - true - - Left - - - Form.Command.ПечатьСоШтампом - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Печать</value> - - - ПодменюПечатьРасширеннаяПодсказка - 335 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - - Отправить - 263 - true - true - - true - - - ОтправитьРасширеннаяПодсказка - 264 - Label - true - true - - Left - - - Form.Command.Отправить - Normal - Auto - true - true - UserCmds - Auto - - - СравнитьФайлы - 323 - true - true - - true - - - СравнитьФайлыРасширеннаяПодсказка - 324 - Label - true - true - - Left - - - Form.Command.СравнитьФайлы - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд основные</value> - - - ФормаГруппаКомандОсновныеРасширеннаяПодсказка - 106 - Label - true - true - - Left - - - - - - ФормаГлобальныеКоманды - 218 - true - true - - true - - - <key>ru</key> - <value>Форма глобальные команды</value> - - None - - ФормаГлобальныеКомандыРасширеннаяПодсказка - 219 - Label - true - true - - Left - - - - FormCommandPanelGlobalCommands - - - - ФормаГруппаКомандЭлектроннаяПодписьИШифрование - 72 - - ФормаГруппаКомандЭлектроннаяПодпись - 244 - - ФормаЭППодписать - 75 - true - true - - true - - - ФормаЭППодписатьРасширеннаяПодсказка - 111 - Label - true - true - - Left - - - Form.Command.Подписать - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСохранитьВместеСЭП - 73 - true - true - - true - - - ФормаСохранитьВместеСЭПРасширеннаяПодсказка - 112 - Label - true - true - - Left - - - Form.Command.СохранитьВместеСЭП - Normal - Auto - true - true - UserCmds - Auto - - - ФормаДобавитьЭПИзФайла - 74 - true - true - - true - - - ФормаДобавитьЭПИзФайлаРасширеннаяПодсказка - 113 - Label - true - true - - Left - - - Form.Command.ДобавитьЭПИзФайла - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд электронная подпись</value> - - - ФормаГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка - 245 - Label - true - true - - Left - - - - - - ФормаГруппаКомандШифрование - 78 - - ФормаЗашифровать - 76 - true - true - - true - - - ФормаЗашифроватьExtendedTooltip - 115 - Label - true - true - - Left - - - Form.Command.Зашифровать - Normal - Auto - true - true - UserCmds - Auto - - - ФормаРасшифровать - 77 - true - true - - true - - - ФормаРасшифроватьExtendedTooltip - 116 - Label - true - true - - Left - - - Form.Command.Расшифровать - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд шифрование</value> - - - ФормаГруппаКомандШифрованиеРасширеннаяПодсказка - 114 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Электронная подпись и шифрование</value> - - - ФормаГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - Popup - - - CommonPicture.ПодписанЗашифрованЗаголовок - - Picture - Normal - - - - ФормаГруппаКомандДополнительные - 18 - - ФормаИзменить82 - 238 - true - - true - - - ФормаИзменить82РасширеннаяПодсказка - 239 - Label - true - true - - Left - - - Form.Command.ОткрытьСвойстваФайла - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСкопировать - 19 - true - true - - true - - - ФормаСкопироватьExtendedTooltip - 118 - Label - true - true - - Left - - - Form.Command.Скопировать - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - УстановитьПометкуУдаления - 21 - true - true - - true - - - УстановитьПометкуУдаленияРасширеннаяПодсказка - 119 - Label - true - true - - Left - - - Form.Command.УстановитьПометкуУдаления - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаСохранитьКак - 4 - true - true - - true - - - ФормаСохранитьКакExtendedTooltip - 120 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ГруппаРежимПросмотра - 311 - - РежимПросмотраСписок - 313 - true - true - - true - - - РежимПросмотраСписокРасширеннаяПодсказка - 314 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.List - Normal - Auto - true - true - UserCmds - Auto - - - ИерархическийСписок - 315 - true - true - - true - - - ИерархическийСписокРасширеннаяПодсказка - 316 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.HierarchicalList - Normal - Auto - true - true - UserCmds - Auto - - - Дерево - 317 - true - true - - true - - - ДеревоРасширеннаяПодсказка - 318 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Tree - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Режим просмотра</value> - - - ГруппаРежимПросмотраРасширеннаяПодсказка - 312 - Label - true - true - - Left - - - Popup - - - StdPicture.ListViewMode - - Auto - Normal - - - - ПеренестиВГруппу - 338 - true - true - - true - - - ПеренестиВГруппуРасширеннаяПодсказка - 339 - Label - true - true - - Left - - - Form.Command.ПереместитьВГруппу - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаОсвободить - 49 - true - true - - true - - - ФормаОсвободитьExtendedTooltip - 109 - Label - true - true - - Left - - - Form.Command.Освободить - Normal - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаОбновитьИзФайлаНаДиске - 51 - true - true - - true - - - ФормаОбновитьИзФайлаНаДискеExtendedTooltip - 121 - Label - true - true - - Left - - - Form.Command.ОбновитьИзФайлаНаДиске - Normal - Auto - true - true - UserCmds - - CommonPicture.ОбновитьФайлИзФайлаНаДиске - - Auto - InAdditionalSubmenu - - - ФормаОткрытьКаталогФайла - 2 - true - true - - true - - - ФормаОткрытьКаталогФайлаExtendedTooltip - 123 - Label - true - true - - Left - - - Form.Command.ОткрытьКаталогФайла - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд дополнительные</value> - - - ФормаГруппаКомандДополнительныеРасширеннаяПодсказка - 117 - Label - true - true - - Left - - - - - - ФормаГруппаКомандПоиска - 12 - - ФормаНайти - 10 - true - - true - - - ФормаНайтиExtendedTooltip - 125 - Label - true - true - - Left - - - Form.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаОтменитьПоиск - 11 - true - - true - - - ФормаОтменитьПоискExtendedTooltip - 126 - Label - true - true - - Left - - - Form.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд поиска</value> - - - ФормаГруппаКомандПоискаРасширеннаяПодсказка - 124 - Label - true - true - - Left - - - - - - Предпросмотр - 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 - - ФормаОбновить - 222 - true - true - - true - - - ФормаОбновитьРасширеннаяПодсказка - 223 - Label - true - true - - Left - - - Form.Command.Обновить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаГруппаНастройкаСписка - 236 - - ФормаНастройкаСписка - 234 - true - true - - true - - - ФормаНастройкаСпискаРасширеннаяПодсказка - 235 - Label - true - true - - Left - - - Form.StandardCommand.ListSettings - Normal - Auto - true - true - UserCmds - Auto - - - ФормаЗагрузитьНастройкиДинамическогоСписка - 224 - true - true - - true - - - ФормаЗагрузитьНастройкиДинамическогоСпискаРасширеннаяПодсказка - 225 - Label - true - true - - Left - - - Form.StandardCommand.LoadDynamicListSettings - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСохранитьНастройкиДинамическогоСписка - 226 - true - true - - true - - - ФормаСохранитьНастройкиДинамическогоСпискаРасширеннаяПодсказка - 227 - Label - true - true - - Left - - - Form.StandardCommand.SaveDynamicListSettings - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСтандартныеНастройкиДинамическогоСписка - 228 - true - true - - true - - - ФормаСтандартныеНастройкиДинамическогоСпискаРасширеннаяПодсказка - 229 - Label - true - true - - Left - - - Form.StandardCommand.DynamicListStandardSettings - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма группа настройка списка</value> - - - ФормаГруппаНастройкаСпискаРасширеннаяПодсказка - 237 - Label - true - true - - Left - - - - - - ФормаВывестиСписок - 230 - true - true - - true - - - ФормаВывестиСписокРасширеннаяПодсказка - 231 - Label - true - true - - Left - - - Form.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - - - ФормаИзменитьФорму - 232 - true - true - - true - - - ФормаИзменитьФормуРасширеннаяПодсказка - 233 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Дополнительно</value> - - None - - ФормаГруппаДополнительноРасширеннаяПодсказка - 217 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - - СохранитьПапку - 319 - true - true - - true - - - СохранитьПапкуРасширеннаяПодсказка - 320 - Label - true - true - - Left - - - Form.Command.СохранитьПапку - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаСправка - 9 - true - true - - true - - - ФормаСправкаExtendedTooltip - 131 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - true true @@ -1659,6 +121,7 @@ ГруппаПояснениеОблачногоСервиса 287 + VeryHigh ДекорацияКартинкаОблачногоСервиса 295 @@ -1846,6 +309,7 @@ ГруппаФайлы 270 + Usual Список 6 @@ -2119,7 +583,7 @@ 191 <key>ru</key> - <value>Изменил</value> + <value>Отредактировал</value> true true @@ -2438,6 +902,10 @@ BeforeRowChange СписокПередНачаломИзменения + + OnChange + СписокПриИзменении + СписокСтрокаПоиска 248 @@ -2770,6 +1238,10 @@ СписокКонтекстноеМенюЗакончитьРедактирование 59 + + <key>ru</key> + <value>Закончить редактирование</value> + true true @@ -3458,6 +1930,1627 @@ ФормаКоманднаяПанель -1 + + ФормаВыбрать + 220 + VeryHigh + true + true + + true + + + ФормаВыбратьРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + Form.StandardCommand.Choose + Auto + true + true + true + UserCmds + Auto + + + Добавить + 261 + VeryHigh + + <key>ru</key> + <value>Добавить файл с диска...</value> + + true + + true + + + ДобавитьРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + Form.Command.Добавить + Normal + Auto + true + true + UserCmds + Auto + + + ПодменюДобавить + 257 + VeryHigh + + ДобавитьИзФайлаНаДиске + 1 + + <key>ru</key> + <value>Файл с диска...</value> + + true + true + + true + + + ДобавитьИзФайлаНаДискеРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + Form.Command.Добавить + Normal + true + true + UserCmds + Auto + + + ДобавитьФайлПоШаблону + 328 + true + true + + true + + + ДобавитьФайлПоШаблонуРасширеннаяПодсказка + 329 + Label + true + true + + Left + + + Form.Command.ДобавитьФайлПоШаблону + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьФайлСоСканера + 259 + true + true + + true + + + ДобавитьФайлСоСканераРасширеннаяПодсказка + 260 + Label + true + true + + Left + + + Form.Command.ДобавитьФайлСоСканера + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавить</value> + + + ПодменюДобавитьРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + + + ФормаГруппаИмпорт + 352 + Usual + + ЗагрузитьФайлы + 300 + true + true + + true + + + ЗагрузитьФайлыРасширеннаяПодсказка + 301 + Label + true + true + + Left + + + Form.Command.ЗагрузитьФайлы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ЗагрузитьПапку + 321 + true + true + + true + + + ЗагрузитьПапкуРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + Form.Command.ЗагрузитьПапку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Импорт</value> + + + ФормаГруппаИмпортРасширеннаяПодсказка + 353 + Label + true + true + + Left + + + + + + СоздатьГруппу + 298 + true + true + + true + + + СоздатьГруппуРасширеннаяПодсказка + 299 + Label + true + true + + Left + + + Form.Command.СоздатьГруппу + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменить + 102 + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + Form.Command.ОткрытьСвойстваФайла + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаГруппаКомандОсновные + 33 + + ФормаОткрыть + 3 + true + true + + true + + + ФормаОткрытьРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + Form.Command.ОткрытьФайлДляПросмотра + Normal + true + true + UserCmds + Auto + + + Занять + 332 + true + true + + true + + + ЗанятьРасширеннаяПодсказка + 333 + Label + true + true + + Left + + + Form.Command.Занять + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаРедактировать + 34 + true + true + + true + + + ФормаРедактироватьExtendedTooltip + 107 + Label + true + true + + Left + + + Form.Command.Редактировать + Normal + true + true + UserCmds + Auto + + + ФормаЗакончитьРедактирование + 43 + true + true + + true + + + ФормаЗакончитьРедактированиеExtendedTooltip + 108 + Label + true + true + + Left + + + Form.Command.ЗакончитьРедактирование + Normal + Auto + true + true + UserCmds + Auto + + + ПодменюПечать + 334 + + Печать + 265 + true + true + + true + + + ПечатьРасширеннаяПодсказка + 266 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + ПечатьСоШтампом + 336 + true + true + + true + + + ПечатьСоШтампомРасширеннаяПодсказка + 337 + Label + true + true + + Left + + + Form.Command.ПечатьСоШтампом + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Печать</value> + + + ПодменюПечатьРасширеннаяПодсказка + 335 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + Отправить + 263 + true + true + + true + + + ОтправитьРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + Auto + true + true + UserCmds + Auto + + + СравнитьФайлы + 323 + true + true + + true + + + СравнитьФайлыРасширеннаяПодсказка + 324 + Label + true + true + + Left + + + Form.Command.СравнитьФайлы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма группа команд основные</value> + + + ФормаГруппаКомандОсновныеРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + + + + ФормаГлобальныеКоманды + 218 + true + true + + true + + + <key>ru</key> + <value>Форма глобальные команды</value> + + None + + ФормаГлобальныеКомандыРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + FormCommandPanelGlobalCommands + + + + ФормаГруппаКомандЭлектроннаяПодписьИШифрование + 72 + + ФормаГруппаКомандЭлектроннаяПодпись + 244 + + ФормаЭППодписать + 75 + true + true + + true + + + ФормаЭППодписатьРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + Form.Command.Подписать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСохранитьВместеСЭП + 73 + true + true + + true + + + ФормаСохранитьВместеСЭПРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + Form.Command.СохранитьВместеСЭП + Normal + Auto + true + true + UserCmds + Auto + + + ФормаДобавитьЭПИзФайла + 74 + true + true + + true + + + ФормаДобавитьЭПИзФайлаРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + Form.Command.ДобавитьЭПИзФайла + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа команд электронная подпись</value> + + + ФормаГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка + 245 + Label + true + true + + Left + + + + + + ФормаГруппаКомандШифрование + 78 + + ФормаЗашифровать + 76 + true + true + + true + + + ФормаЗашифроватьExtendedTooltip + 115 + Label + true + true + + Left + + + Form.Command.Зашифровать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаРасшифровать + 77 + true + true + + true + + + ФормаРасшифроватьExtendedTooltip + 116 + Label + true + true + + Left + + + Form.Command.Расшифровать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа команд шифрование</value> + + + ФормаГруппаКомандШифрованиеРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Электронная подпись и шифрование</value> + + + ФормаГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + Popup + + + CommonPicture.ПодписанЗашифрованЗаголовок + + Picture + Normal + + + + ФормаГруппаКомандДополнительные + 18 + true + true + + true + + + <key>ru</key> + <value>Форма группа команд дополнительные</value> + + + ФормаГруппаКомандДополнительныеРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + + + + ФормаГруппаКомандПоиска + 12 + + ФормаНайти + 10 + true + + true + + + ФормаНайтиExtendedTooltip + 125 + Label + true + true + + Left + + + Form.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОтменитьПоиск + 11 + true + + true + + + ФормаОтменитьПоискExtendedTooltip + 126 + Label + true + true + + Left + + + Form.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма группа команд поиска</value> + + + ФормаГруппаКомандПоискаРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + + + + НастроитьСинхронизацию + 283 + true + true + + true + + + НастроитьСинхронизациюРасширеннаяПодсказка + 284 + Label + true + true + + Left + + + Form.Command.НастроитьСинхронизацию + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаГруппаДополнительно + 216 + + ФормаИзменить82 + 238 + true + + true + + + ФормаИзменить82РасширеннаяПодсказка + 239 + Label + true + true + + Left + + + Form.Command.ОткрытьСвойстваФайла + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСкопировать + 19 + true + true + + true + + + ФормаСкопироватьExtendedTooltip + 118 + Label + true + true + + Left + + + Form.Command.Скопировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + УстановитьПометкуУдаления + 21 + true + true + + true + + + УстановитьПометкуУдаленияРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + Form.Command.УстановитьПометкуУдаления + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаСохранитьКак + 4 + true + true + + true + + + ФормаСохранитьКакExtendedTooltip + 120 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаРежимПросмотра + 311 + + РежимПросмотраСписок + 313 + true + true + + true + + + РежимПросмотраСписокРасширеннаяПодсказка + 314 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.List + Normal + Auto + true + true + UserCmds + Auto + + + ИерархическийСписок + 315 + true + true + + true + + + ИерархическийСписокРасширеннаяПодсказка + 316 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.HierarchicalList + Normal + Auto + true + true + UserCmds + Auto + + + Дерево + 317 + true + true + + true + + + ДеревоРасширеннаяПодсказка + 318 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Tree + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Режим просмотра</value> + + + ГруппаРежимПросмотраРасширеннаяПодсказка + 312 + Label + true + true + + Left + + + Popup + + + StdPicture.ListViewMode + + Auto + Normal + + + + ПеренестиВГруппу + 338 + true + true + + true + + + ПеренестиВГруппуРасширеннаяПодсказка + 339 + Label + true + true + + Left + + + Form.Command.ПереместитьВГруппу + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОсвободить + 49 + true + true + + true + + + ФормаОсвободитьExtendedTooltip + 109 + Label + true + true + + Left + + + Form.Command.Освободить + Normal + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОбновитьИзФайлаНаДиске + 51 + true + true + + true + + + ФормаОбновитьИзФайлаНаДискеExtendedTooltip + 121 + Label + true + true + + Left + + + Form.Command.ОбновитьИзФайлаНаДиске + Normal + Auto + true + true + UserCmds + + CommonPicture.ОбновитьФайлИзФайлаНаДиске + + Auto + InAdditionalSubmenu + + + ФормаОткрытьКаталогФайла + 2 + true + true + + true + + + ФормаОткрытьКаталогФайлаExtendedTooltip + 123 + Label + true + true + + Left + + + Form.Command.ОткрытьКаталогФайла + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + None + + ФормаГруппаДополнительноРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ФормаГруппаНастройки + 348 + + ФормаОбновить + 222 + true + true + + true + + + ФормаОбновитьРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаИзменитьФорму + 232 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ФормаВывестиСписок + 230 + true + true + + true + + + ФормаВывестиСписокРасширеннаяПодсказка + 231 + Label + true + true + + Left + + + Form.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГруппаНастройкаСписка + 236 + + ФормаНастройкаСписка + 234 + true + true + + true + + + ФормаНастройкаСпискаРасширеннаяПодсказка + 235 + Label + true + true + + Left + + + Form.StandardCommand.ListSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗагрузитьНастройкиДинамическогоСписка + 224 + true + true + + true + + + ФормаЗагрузитьНастройкиДинамическогоСпискаРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + Form.StandardCommand.LoadDynamicListSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСохранитьНастройкиДинамическогоСписка + 226 + true + true + + true + + + ФормаСохранитьНастройкиДинамическогоСпискаРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + Form.StandardCommand.SaveDynamicListSettings + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСтандартныеНастройкиДинамическогоСписка + 228 + true + true + + true + + + ФормаСтандартныеНастройкиДинамическогоСпискаРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + Form.StandardCommand.DynamicListStandardSettings + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа настройка списка</value> + + + ФормаГруппаНастройкаСпискаРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Настройки</value> + + + ФормаГруппаНастройкиРасширеннаяПодсказка + 349 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + СохранитьПапку + 319 + true + true + + true + + + СохранитьПапкуРасширеннаяПодсказка + 320 + Label + true + true + + Left + + + Form.Command.СохранитьПапку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Предпросмотр + 272 + true + true + + true + + + ПредпросмотрРасширеннаяПодсказка + 273 + Label + true + true + + Left + + + Form.Command.Предпросмотр + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказыватьСлужебныеФайлы + 350 + true + true + + true + + + ПоказыватьСлужебныеФайлыРасширеннаяПодсказка + 351 + Label + true + true + + Left + + + Form.Command.ПоказыватьСлужебныеФайлы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаСправка + 9 + true + true + + true + + + ФормаСправкаExtendedTooltip + 131 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left @@ -3475,7 +3568,6 @@ Refresh DontBlock true - true Vertical true true @@ -3566,6 +3658,7 @@ ЛОЖЬ КАК ФайлРедактируетДругойПользователь, ЛОЖЬ КАК ХранитьВерсии, ЛОЖЬ КАК ЭтоГруппа, + ЛОЖЬ КАК Служебный, &ВладелецФайла КАК ВладелецФайла, НЕОПРЕДЕЛЕНО КАК Редактирует, НЕОПРЕДЕЛЕНО КАК РедактируетПользователь @@ -3925,7 +4018,9 @@ TextPicture - DontUse + + Список + Auto @@ -3951,7 +4046,9 @@ Picture - DontUse + + Список + Auto @@ -3973,7 +4070,9 @@ ОткрытьКаталогФайла - DontUse + + Список + Auto @@ -3999,7 +4098,9 @@ TextPicture - DontUse + + Список + Auto @@ -4026,7 +4127,9 @@ TextPicture - DontUse + + Список + Auto @@ -4052,7 +4155,9 @@ Text - DontUse + + Список + Auto @@ -4078,7 +4183,9 @@ TextPicture - DontUse + + Список + Auto @@ -4101,7 +4208,9 @@ Text - DontUse + + Список + Auto @@ -4123,7 +4232,9 @@ СохранитьВместеСЭП - DontUse + + Список + Auto @@ -4145,7 +4256,9 @@ ДобавитьЭПИзФайла - DontUse + + Список + Auto @@ -4170,7 +4283,9 @@ Зашифровать - DontUse + + Список + Auto @@ -4192,7 +4307,9 @@ Расшифровать - DontUse + + Список + Auto @@ -4219,7 +4336,9 @@ Picture - DontUse + + Список + Auto @@ -4268,7 +4387,9 @@ Скопировать - DontUse + + Список + Auto @@ -4342,7 +4463,9 @@ TextPicture - DontUse + + Список + Auto @@ -4368,7 +4491,9 @@ TextPicture - DontUse + + Список + Auto @@ -4485,7 +4610,9 @@ СохранитьПапку - DontUse + + Список + Auto @@ -4576,7 +4703,9 @@ Занять - DontUse + + Список + Auto @@ -4598,7 +4727,9 @@ ПечатьСоШтампом - DontUse + + Список + Auto @@ -4624,7 +4755,9 @@ ПеренестиВГруппу - DontUse + + Список + Auto @@ -4649,6 +4782,30 @@ УстановитьПометкуУдаления + + Список + + Auto + + + ПоказыватьСлужебныеФайлы + + <key>ru</key> + <value>Показывать служебные файлы</value> + + 32 + + ru + Показывать служебные файлы + + + true + + + + ПоказыватьСлужебныеФайлы + + Auto Auto @@ -4683,6 +4840,12 @@ + + СкрыватьВладельца + + Boolean + + diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html index 03a3794e1..f2f2ccfc2 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html @@ -1,6 +1,6 @@

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

              -

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

              +

              Открывается по ссылке Файлы из карточки объекта программы.

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

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

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

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

            Загрузка файлов

            +
            • +
              Нажмите Еще - Загрузить файлы, укажите путь к файлам на компьютере.

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

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

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

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

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

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

          Печать файла

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

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

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

        Печать файла

        +

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

        +

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

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

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

        • -
          С помощью команды Еще - Сохранить как можно сохранить файл в указанный каталог на жестком или сетевом диске.
          +
          С помощью команды Еще - Дополнительно - Сохранить как можно сохранить файл в указанный каталог на жестком или сетевом диске.
        • Также можно воспользоваться соответствующей командой контекстного меню по правой кнопке мыши.
        • -
          Соответствующей командой меню Еще или контекстного меню по правой кнопке мыши можно Открыть каталог файла в Проводнике Windows.

        Обновление файла

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

        Обновление файла

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

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

        • Выберите в списке файлы для сравнения.
          @@ -67,8 +69,14 @@
        • Зашифровать - по команде происходит шифрование файла. В отличие от подписания могут использоваться несколько сертификатов, например, если необходимо зашифровать файл для нескольких пользователей. Зашифрованный файл в списках отображается со значком .
        • Расшифровать - по команде происходит расшифровка файла. Для расшифровки нужно ввести пароль к закрытому ключу.

        Печать табличного документа со штампом электронной подписи

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

        См. также:

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

      Служебные присоединенные файлы (только для администратора)

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

      См. также:

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl index bcd8d357c..14ad6194c 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -12,7 +19,7 @@ ТекущаяСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока"); СписокОткрытИзКарточкиФайла = ЗначениеЗаполнено(ТекущаяСсылка); - Элементы.ВладелецФайла.Видимость = СписокОткрытИзКарточкиФайла; + Элементы.ВладелецФайла.Видимость = СписокОткрытИзКарточкиФайла И Не Параметры.СкрыватьВладельца; Если СписокОткрытИзКарточкиФайла И ВладелецФайла = Неопределено Тогда ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСсылка, "ВладелецФайла"); Параметры.ВладелецФайла = ВладелецФайла; @@ -36,7 +43,7 @@ Элементы.СписокВажныеРеквизиты.Видимость = Не Параметры.ПростаяФорма; Предпросмотр = Параметры.ПростаяФорма; - ПоказыватьКолонкуРазмер = РаботаСФайламиСлужебныйВызовСервера.ПолучитьПоказыватьКолонкуРазмер(); + ПоказыватьКолонкуРазмер = РаботаСФайламиСлужебный.ПолучитьПоказыватьКолонкуРазмер(); Если Не ПоказыватьКолонкуРазмер Тогда Элементы.СписокРазмер.Видимость = Ложь; КонецЕсли; @@ -44,7 +51,7 @@ Если Не ПустаяСтрока(Параметры.ЗаголовокФормы) Тогда Заголовок = Параметры.ЗаголовокФормы; ИначеЕсли СписокОткрытИзКарточкиФайла Тогда - Заголовок = Заголовок + " (" + Строка(ТипЗнч(ВладелецФайла)) + " " + Строка(ВладелецФайла) + ")"; + Заголовок = Заголовок + ": " + ОбщегоНазначения.ПредметСтрокой(ВладелецФайла); КонецЕсли; Если ЗначениеЗаполнено(Параметры.ПараметрыОтправки) Тогда @@ -73,8 +80,6 @@ ТипСправочникаСФайлами = Тип("СправочникСсылка." + ИмяСправочникаХранилищаФайлов); - МассивИсключенийСозданияФайловПоШаблону = Новый Массив; - МетаданныеСправочникаСФайлами = Метаданные.НайтиПоТипу(ТипСправочникаСФайлами); ИмяСправочникаХранилищаВерсийФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияВерсийФайлов( @@ -96,29 +101,32 @@ ВозможностьСоздаватьВерсииФайлов = ЭтоВладелецЭлементовСправочникаФайлы; - НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов); + Если ТипЗнч(Пользователи.АвторизованныйПользователь()) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + РаботаСФайламиСлужебный.ИзменитьФормуДляВнешнегоПользователя(ЭтотОбъект, Истина); + КонецЕсли; + + ЕстьРеквизитСлужебный = РаботаСФайламиСлужебный.ЕстьРеквизитСлужебный(ИмяСправочникаХранилищаФайлов); + НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов, ЕстьРеквизитСлужебный); Если Не ВозможностьСоздаватьГруппыФайлов Тогда СкрытьКнопкиСозданияГруппы(); КонецЕсли; ЕстьПравоДобавления = Истина; - Если НЕ ПравоДоступа("ИнтерактивноеДобавление", МетаданныеСправочникаСФайлами) Тогда СкрытьКнопкиДобавления(); ЕстьПравоДобавления = Ложь; КонецЕсли; - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда ТолькоПросмотр = Не ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами); - Иначе - ТолькоПросмотр = Параметры.ТолькоПросмотр Или НЕ ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами) - Или НЕ ПравоДоступа("Редактирование", Параметры.ВладелецФайла.Метаданные()); + Иначе + ТолькоПросмотр = Не ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами) + Или Не ПравоДоступа("Редактирование", Параметры.ВладелецФайла.Метаданные()); КонецЕсли; Если ТолькоПросмотр Тогда СкрытьКнопкиИзменения(); - ЕстьПравоДобавления = Ложь; КонецЕсли; ИменаВсехКомандФормы = ПолучитьИменаКомандФормы(); @@ -167,20 +175,23 @@ ЕстьЭлектроннаяПодпись = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись"); Элементы.ПечатьСоШтампом.Видимость = ЕстьЭлектроннаяПодпись; - Элементы.СравнитьФайлы.Видимость = Не ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() - И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); + Элементы.СравнитьФайлы.Видимость = Не ОбщегоНазначения.ЭтоLinuxКлиент() И Не ОбщегоНазначения.ЭтоВебКлиент(); ЗапрещенныеРасширения = РаботаСФайламиСлужебный.СписокЗапрещенныхРасширений(); - УстановитьУсловноеОформление(); + Элементы.ПоказыватьСлужебныеФайлы.Видимость = ЕстьРеквизитСлужебный + И Пользователи.ЭтоПолноправныйПользователь(); + + УстановитьУсловноеОформление(ЕстьРеквизитСлужебный); + Если ЕстьРеквизитСлужебный Тогда + РаботаСФайламиСлужебный.ДобавитьОтборыВСписокФайлов(Список); + КонецЕсли; РаботаСФайламиПереопределяемый.ПриСозданииФормыСпискаФайлов(ЭтотОбъект); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаОткрытьКаталогФайла", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СписокКонтекстноеМенюОткрытьКаталогФайла", "Видимость", Ложь); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ПодменюДобавить.Отображение = ОтображениеКнопки.Картинка; + Элементы.ДобавитьФайлСоСканера.Заголовок = НСтр("ru = 'С камеры устройства...'"); КонецЕсли; КонецПроцедуры @@ -208,7 +219,13 @@ ПодключитьОбработчикОжидания("ПриИзмененииИспользованияПодписанияИлиШифрования", 0.3, Истина); Возврат; ИначеЕсли ИмяСобытия = "Запись_Файл" Тогда - + + Если Не ЗначениеЗаполнено(Источник) + Или (ТипЗнч(Источник) = Тип("Массив") + И Источник.Количество() = 0) Тогда + Возврат; + КонецЕсли; + СсылкаНаФайл = ?(ТипЗнч(Источник) = Тип("Массив"), Источник[0], Источник); Если ТипЗнч(СсылкаНаФайл) <> ТипСправочникаСФайлами Тогда Возврат; @@ -274,7 +291,7 @@ Возврат; КонецЕсли; - КакОткрывать = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ДействиеПоДвойномуЩелчкуМыши; + КакОткрывать = РаботаСФайламиСлужебныйКлиент.ПерсональныеНастройкиРаботыСФайлами().ДействиеПоДвойномуЩелчкуМыши; Если КакОткрывать = "ОткрыватьКарточку" Тогда ПоказатьЗначение(, ВыбраннаяСтрока); @@ -288,7 +305,7 @@ ПараметрыОбработчика.Вставить("ДанныеФайла", ДанныеФайла); Обработчик = Новый ОписаниеОповещения("СписокВыборПослеВыбораРежимаРедактирования", ЭтотОбъект, ПараметрыОбработчика); - РаботаСФайламиСлужебныйКлиент.ВыбратьРежимИРедактироватьФайл(Обработчик, ДанныеФайла, Истина); + РаботаСФайламиСлужебныйКлиент.ВыбратьРежимИРедактироватьФайл(Обработчик, ДанныеФайла, Не ДанныеФайла.Служебный); КонецПроцедуры @@ -405,6 +422,13 @@ КонецПроцедуры +&НаКлиенте +Процедура СписокПриИзменении(Элемент) + + Оповестить("Запись_Файл", Новый Структура("Событие", "ДанныеФайлаИзменены"), Элемент.ВыделенныеСтроки); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -567,11 +591,9 @@ &НаКлиенте Процедура Печать(Команда) - СистемнаяИнфо = Новый СистемнаяИнформация; - Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86 - И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'")); - Возврат; + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'")); + Возврат; КонецЕсли; ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; @@ -768,6 +790,14 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПоказыватьСлужебныеФайлы(Команда) + + Элементы.ПоказыватьСлужебныеФайлы.Пометка = + РаботаСФайламиСлужебныйКлиент.ПоказыватьСлужебныеФайлыНажатие(Список); + +КонецПроцедуры + ////////////////////////////////////////////////////////////////////////////////// // Обработчики команд для поддержки ЭП и шифрования. @@ -1077,7 +1107,7 @@ #Область СлужебныеПроцедурыИФункции &НаСервере -Процедура УстановитьУсловноеОформление() +Процедура УстановитьУсловноеОформление(Знач ЕстьРеквизитСлужебный = Ложь) УсловноеОформление.Элементы.Очистить(); Список.УсловноеОформление.Элементы.Очистить(); @@ -1086,10 +1116,25 @@ Элемент = Список.УсловноеОформление.Элементы.Добавить(); - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФайлРедактируетДругойПользователь"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; + Если ЕстьРеквизитСлужебный Тогда + ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + + ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФайлРедактируетДругойПользователь"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.Использование = Истина; + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Служебный"); + ОтборЭлемента.ПравоеЗначение = Ложь; + Иначе + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФайлРедактируетДругойПользователь"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + КонецЕсли; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); @@ -1119,6 +1164,18 @@ Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + // Служебные файлы + + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + Элемент.Использование = Истина; + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.Использование = Истина; + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Служебный"); + Отбор.ПравоеЗначение = Истина; + КонецПроцедуры &НаКлиенте @@ -1393,7 +1450,7 @@ КонецПроцедуры &НаСервере -Процедура НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов) +Процедура НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов, Знач ЕстьРеквизитСлужебный = Ложь) СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); @@ -1450,6 +1507,7 @@ | КОНЕЦ КАК Редактирует, | Файлы.Редактирует КАК РедактируетПользователь, | &ЭтоГруппа КАК ЭтоГруппа, + | &Служебный КАК Служебный, | Файлы.ВладелецФайла КАК ВладелецФайла, | Файлы.ХранитьВерсии КАК ХранитьВерсии |ИЗ @@ -1461,6 +1519,8 @@ ПолноеИмяСправочника = "Справочник." + ИмяСправочникаХранилищаФайлов; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", ПолноеИмяСправочника); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Служебный", ?(ЕстьРеквизитСлужебный, "Файлы.Служебный", "ЛОЖЬ")); + СвойстваСписка.ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа", ?(ВозможностьСоздаватьГруппыФайлов, "Файлы.ЭтоГруппа", "ЛОЖЬ")); @@ -1563,7 +1623,6 @@ ФайлРедактируется = ТекущиеДанныеФайла.ФайлРедактируется; ФайлПодписан = ТекущиеДанныеФайла.ПодписанЭП; ФайлЗашифрован = ТекущиеДанныеФайла.Зашифрован; - ФайлСсылка = ТекущиеДанныеФайла.Ссылка; Если ФайлРедактируется Тогда Если ФайлРедактируетТекущийПользователь Тогда @@ -1597,7 +1656,6 @@ УдалитьКомандуИзМассива(ИменаКоманд, "Зашифровать"); УдалитьКомандуИзМассива(ИменаКоманд, "Расшифровать"); УдалитьКомандуИзМассива(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); - УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьСвойстваФайла"); УдалитьКомандуИзМассива(ИменаКоманд, "Скопировать"); УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьКаталогФайла"); УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьФайлДляПросмотра"); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form index e75312605..3f7b87d01 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form @@ -1,5 +1,794 @@ + + КоманднаяПанель + 273 + + ФормаЗакрыть + 231 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 232 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСтандартнаяЗаписатьИЗакрыть + 1 + true + true + + true + + + ФормаСтандартнаяЗаписатьИЗакрытьExtendedTooltip + 57 + Label + true + true + + Left + + + Form.Command.СтандартнаяЗаписатьИЗакрыть + true + true + true + UserCmds + Auto + + + ФормаСтандартнаяЗаписать + 2 + true + true + + true + + + ФормаСтандартнаяЗаписатьExtendedTooltip + 58 + Label + true + true + + Left + + + Form.Command.СтандартнаяЗаписать + Normal + true + true + UserCmds + Auto + + + ФормаСтандартнаяПеречитать + 3 + true + true + + true + + + ФормаСтандартнаяПеречитатьExtendedTooltip + 59 + Label + true + true + + Left + + + Form.Command.СтандартнаяПеречитать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаПоказатьВСписке + 149 + true + true + + true + + + ФормаПоказатьВСпискеРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Form.Command.ПоказатьВСписке + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПодменюПечать + 205 + + Печать + 207 + true + true + + true + + + ПечатьРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + ПечатьСоШтампом + 209 + true + true + + true + + + ПечатьСоШтампомРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + Form.Command.ПечатьСоШтампом + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Печать</value> + + + ПодменюПечатьРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ГруппаФайловыеФункции + 10 + + ФормаРедактировать + 14 + true + true + + true + + + ФормаРедактироватьExtendedTooltip + 64 + Label + true + true + + Left + + + Form.Command.Редактировать + Normal + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаЗакончитьРедактирование + 15 + true + true + + true + + + ФормаЗакончитьРедактированиеExtendedTooltip + 65 + Label + true + true + + Left + + + Form.Command.ЗакончитьРедактирование + Normal + Picture + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Файловые функции</value> + + + ГруппаФайловыеФункцииExtendedTooltip + 62 + Label + true + true + + Left + + + + + + ФормаГлобальныеКоманды + 98 + true + true + + true + + + <key>ru</key> + <value>Форма глобальные команды</value> + + None + + ФормаГлобальныеКомандыРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + FormCommandPanelGlobalCommands + + + + ФормаСтандартныеСкопировать + 4 + true + true + + true + + + ФормаСтандартныеСкопироватьExtendedTooltip + 60 + Label + true + true + + Left + + + Form.Command.СтандартныеСкопировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаСтандартныеУстановитьПометкуУдаления + 5 + true + true + + true + + + ФормаСтандартныеУстановитьПометкуУдаленияExtendedTooltip + 61 + Label + true + true + + Left + + + Form.Command.СтандартныеУстановитьПометкуУдаления + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаГруппаДополнительныеКоманды + 100 + + ФормаСохранитьКак + 12 + true + true + + true + + + ФормаСохранитьКакExtendedTooltip + 67 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаЗанять + 229 + true + true + + true + + + ФормаЗанятьРасширеннаяПодсказка + 230 + Label + true + true + + Left + + + Form.Command.Занять + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОсвободить + 16 + true + true + + true + + + ФормаОсвободитьExtendedTooltip + 66 + Label + true + true + + Left + + + Form.Command.Освободить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОбновитьИзФайлаНаДиске + 24 + true + true + + true + + + ФормаОбновитьИзФайлаНаДискеExtendedTooltip + 68 + Label + true + true + + Left + + + Form.Command.ОбновитьИзФайлаНаДиске + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОткрытьКаталогФайла + 13 + true + true + + true + + + ФормаОткрытьКаталогФайлаExtendedTooltip + 69 + Label + true + true + + Left + + + Form.Command.ОткрытьКаталогФайла + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма группа дополнительные команды</value> + + None + + ФормаГруппаДополнительныеКомандыРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + + + ФормаОтправить + 211 + true + true + + true + + + ФормаОтправитьРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГруппаКомандЭлектроннаяПодписьИШифрование + 17 + + ФормаГруппаКомандЭлектроннаяПодпись + 129 + + ФормаПодписатьФайлЭП + 19 + true + true + + true + + + ФормаПодписатьФайлЭПРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.Command.Подписать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаДобавитьЭПИзФайла + 20 + true + true + + true + + + ФормаДобавитьЭПИзФайлаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + Form.Command.ДобавитьЭПИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСохранитьВместеСЭП + 21 + true + true + + true + + + ФормаСохранитьВместеСЭПРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + Form.Command.СохранитьВместеСЭП + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа команд электронная подпись</value> + + + ФормаГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + + + ФормаГруппаКомандШифрование + 18 + + ФормаЗашифровать + 22 + true + true + + true + + + ФормаЗашифроватьExtendedTooltip + 75 + Label + true + true + + Left + + + Form.Command.Зашифровать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаРасшифровать + 23 + true + true + + true + + + ФормаРасшифроватьExtendedTooltip + 76 + Label + true + true + + Left + + + Form.Command.Расшифровать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа команд шифрование</value> + + + ФормаГруппаКомандШифрованиеРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Электронная подпись и шифрование</value> + + + ФормаГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + Popup + + + CommonPicture.ПодписанЗашифрованЗаголовок + + Picture + Normal + + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + CommandBar + + Left + + ГруппаПояснениеОблачногоСервиса 215 @@ -185,30 +974,160 @@ Auto + + ДекорацияПояснениеСлужебный + 233 + + <key>ru</key> + <value>Служебный файл доступен только для просмотра.</value> + + true + true + + true + + + ДекорацияПояснениеСлужебныйРасширеннаяПодсказка + 235 + Label + true + true + + Left + + + + ДекорацияПояснениеСлужебныйКонтекстноеМеню + 234 + true + + Label + true + true + + Left + Center + + Style.ToolTipBackColor + + + ГруппаОбщаяИнформация 29 - ГруппаОбщиеДанные - 156 - - Наименование0 - 102 + ГруппаОбщиеДанныеИХарактеристики + 236 + + ГруппаОбщиеДанные + 156 + + Наименование0 + 102 + VeryHigh + true + true + + true + + + ОбъектПрототип[0].Наименование + + + ru + Имя файла (без расширения) + + + Наименование0РасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + Наименование0КонтекстноеМеню + 103 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + Описание0 + 105 + true + true + + true + + + ОбъектПрототип[0].Описание + + Left + + ru + Краткое описание файла + + + Описание0РасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + Описание0КонтекстноеМеню + 106 + true + + InputField + Enter + true + Left + true + + 2 + true + true + true + true + true + Normal + + ru + Краткое пояснение. Для редактирования содержимого файла нажмите кнопку Редактировать. + + + true true true - - ОбъектПрототип[0].Наименование - - + <key>ru</key> - <value>Имя файла (без расширения)</value> - </toolTip> + <value>Общие данные</value> + - Наименование0РасширеннаяПодсказка - 104 + ГруппаОбщиеДанныеРасширеннаяПодсказка + 157 Label true true @@ -216,44 +1135,406 @@ Left - - Наименование0КонтекстноеМеню - 103 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto - - Описание0 - 105 - true + + ГруппаХарактеристикиФайла + 246 + + ДатаСозданияФайла + 248 + + <key>ru</key> + <value>Создан</value> + + true + true + + true + + + ОбъектПрототип[0].ДатаСоздания + + + ru + Дата добавления файла в список + + + ДатаСозданияФайлаРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + ДатаСозданияФайлаКонтекстноеМеню + 249 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаМодификацииФайла + 251 + + <key>ru</key> + <value>Изменен</value> + + true + true + + true + + + ДатаМодификации + + + ru + Дата изменения данных файла (местное время) + + + ДатаМодификацииФайлаРасширеннаяПодсказка + 253 + Label + true + true + + Left + + + + ДатаМодификацииФайлаКонтекстноеМеню + 252 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаРазмерСДекорациейФайла + 254 + + РазмерФайла + 256 + + <key>ru</key> + <value>Размер</value> + + true + true + + true + + + ОбъектПрототип[0].Размер + + + ru + Размер файла + + + РазмерФайлаРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + + РазмерФайлаКонтекстноеМеню + 257 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияБайтХарактеристики + 259 + + <key>ru</key> + <value>байт</value> + + true + true + + true + + + ДекорацияБайтХарактеристикиРасширеннаяПодсказка + 261 + Label + true + true + + Left + + + + ДекорацияБайтХарактеристикиКонтекстноеМеню + 260 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Размер с декорацией</value> + + + ГруппаРазмерСДекорациейФайлаРасширеннаяПодсказка + 255 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаРасширениеФайла + 262 + + РасширениеФайла + 264 + true + true + + true + + + ОбъектПрототип[0].Расширение + + + ru + Расширение файла + + + РасширениеФайлаРасширеннаяПодсказка + 266 + Label + true + true + + Left + + + + РасширениеФайлаКонтекстноеМеню + 265 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИндексКартинкиФайла + 267 + true + true + + true + + + ОбъектПрототип[0].ИндексКартинки + + None + + ИндексКартинкиФайлаРасширеннаяПодсказка + 269 + Label + true + true + + Left + + + + ИндексКартинкиФайлаКонтекстноеМеню + 268 + true + + PictureField + Enter + true + Left + true + + 2 + true + 1 + true + + CommonPicture.КоллекцияПиктограммФайлов + + + 1 + + + + true + true + + true + + + <key>ru</key> + <value>Расширение файла</value> + + + ГруппаРасширениеФайлаРасширеннаяПодсказка + 263 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Center + Auto + true + true + Auto + Auto + + + + КодировкаФайла + 270 + true + true + + true + + + Кодировка + + + КодировкаФайлаРасширеннаяПодсказка + 272 + Label + true + true + + Left + + + + КодировкаФайлаКонтекстноеМеню + 271 + true + + LabelField + Enter + true + Left + true + + true + true + + true true - - ОбъектПрототип[0].Описание - - Left - + <key>ru</key> - <value>Краткое описание файла</value> - </toolTip> + <value>Дополнительные сведения</value> + - Описание0РасширеннаяПодсказка - 107 + ГруппаХарактеристикиФайлаРасширеннаяПодсказка + 247 Label true true @@ -261,28 +1542,14 @@ Left - - Описание0КонтекстноеМеню - 106 - true - - InputField - Enter - true - Left - true - - 2 - true - true - true - true - true - Normal - - ru - Краткое пояснение. Для редактирования содержимого файла нажмите кнопку Редактировать. - + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -292,11 +1559,11 @@ <key>ru</key> - <value>Общие данные</value> + <value>Общие данные и характеристики</value> - ГруппаОбщиеДанныеРасширеннаяПодсказка - 157 + ГруппаОбщиеДанныеИХарактеристикиРасширеннаяПодсказка + 237 Label true true @@ -514,6 +1781,7 @@ ГруппаДополнительныеДанныеСтраницы 25 + VeryLow ГруппаСведенияОФайле 26 @@ -2257,747 +3525,12 @@ Auto + None + false ФормаКоманднаяПанель -1 - - ФормаСтандартнаяЗаписатьИЗакрыть - 1 - true - true - - true - - - ФормаСтандартнаяЗаписатьИЗакрытьExtendedTooltip - 57 - Label - true - true - - Left - - - Form.Command.СтандартнаяЗаписатьИЗакрыть - true - true - true - UserCmds - Auto - - - ФормаСтандартнаяЗаписать - 2 - true - true - - true - - - ФормаСтандартнаяЗаписатьExtendedTooltip - 58 - Label - true - true - - Left - - - Form.Command.СтандартнаяЗаписать - Normal - true - true - UserCmds - Auto - - - ФормаСтандартнаяПеречитать - 3 - true - true - - true - - - ФормаСтандартнаяПеречитатьExtendedTooltip - 59 - Label - true - true - - Left - - - Form.Command.СтандартнаяПеречитать - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаПоказатьВСписке - 149 - true - true - - true - - - ФормаПоказатьВСпискеРасширеннаяПодсказка - 150 - Label - true - true - - Left - - - Form.Command.ПоказатьВСписке - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ПодменюПечать - 205 - - Печать - 207 - true - true - - true - - - ПечатьРасширеннаяПодсказка - 208 - Label - true - true - - Left - - - Form.Command.Печать - Normal - Auto - true - true - UserCmds - Auto - - - ПечатьСоШтампом - 209 - true - true - - true - - - ПечатьСоШтампомРасширеннаяПодсказка - 210 - Label - true - true - - Left - - - Form.Command.ПечатьСоШтампом - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Печать</value> - - - ПодменюПечатьРасширеннаяПодсказка - 206 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - - ГруппаФайловыеФункции - 10 - - ФормаРедактировать - 14 - true - true - - true - - - ФормаРедактироватьExtendedTooltip - 64 - Label - true - true - - Left - - - Form.Command.Редактировать - Normal - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаЗакончитьРедактирование - 15 - true - true - - true - - - ФормаЗакончитьРедактированиеExtendedTooltip - 65 - Label - true - true - - Left - - - Form.Command.ЗакончитьРедактирование - Normal - Picture - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Файловые функции</value> - - - ГруппаФайловыеФункцииExtendedTooltip - 62 - Label - true - true - - Left - - - - - - ФормаГлобальныеКоманды - 98 - true - true - - true - - - <key>ru</key> - <value>Форма глобальные команды</value> - - None - - ФормаГлобальныеКомандыРасширеннаяПодсказка - 99 - Label - true - true - - Left - - - - FormCommandPanelGlobalCommands - - - - ФормаСтандартныеСкопировать - 4 - true - true - - true - - - ФормаСтандартныеСкопироватьExtendedTooltip - 60 - Label - true - true - - Left - - - Form.Command.СтандартныеСкопировать - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаСтандартныеУстановитьПометкуУдаления - 5 - true - true - - true - - - ФормаСтандартныеУстановитьПометкуУдаленияExtendedTooltip - 61 - Label - true - true - - Left - - - Form.Command.СтандартныеУстановитьПометкуУдаления - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаГруппаДополнительныеКоманды - 100 - - ФормаСохранитьКак - 12 - true - true - - true - - - ФормаСохранитьКакExtendedTooltip - 67 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаЗанять - 229 - true - true - - true - - - ФормаЗанятьРасширеннаяПодсказка - 230 - Label - true - true - - Left - - - Form.Command.Занять - Normal - Auto - true - true - UserCmds - Auto - - - ФормаОсвободить - 16 - true - true - - true - - - ФормаОсвободитьExtendedTooltip - 66 - Label - true - true - - Left - - - Form.Command.Освободить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаОбновитьИзФайлаНаДиске - 24 - true - true - - true - - - ФормаОбновитьИзФайлаНаДискеExtendedTooltip - 68 - Label - true - true - - Left - - - Form.Command.ОбновитьИзФайлаНаДиске - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаОткрытьКаталогФайла - 13 - true - true - - true - - - ФормаОткрытьКаталогФайлаExtendedTooltip - 69 - Label - true - true - - Left - - - Form.Command.ОткрытьКаталогФайла - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма группа дополнительные команды</value> - - None - - ФормаГруппаДополнительныеКомандыРасширеннаяПодсказка - 101 - Label - true - true - - Left - - - - - - ФормаОтправить - 211 - true - true - - true - - - ФормаОтправитьРасширеннаяПодсказка - 212 - Label - true - true - - Left - - - Form.Command.Отправить - Normal - Auto - true - true - UserCmds - Auto - - - ФормаГруппаКомандЭлектроннаяПодписьИШифрование - 17 - - ФормаГруппаКомандЭлектроннаяПодпись - 129 - - ФормаПодписатьФайлЭП - 19 - true - true - - true - - - ФормаПодписатьФайлЭПРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - Form.Command.Подписать - Normal - Auto - true - true - UserCmds - Auto - - - ФормаДобавитьЭПИзФайла - 20 - true - true - - true - - - ФормаДобавитьЭПИзФайлаРасширеннаяПодсказка - 72 - Label - true - true - - Left - - - Form.Command.ДобавитьЭПИзФайла - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСохранитьВместеСЭП - 21 - true - true - - true - - - ФормаСохранитьВместеСЭПРасширеннаяПодсказка - 73 - Label - true - true - - Left - - - Form.Command.СохранитьВместеСЭП - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд электронная подпись</value> - - - ФормаГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка - 130 - Label - true - true - - Left - - - - - - ФормаГруппаКомандШифрование - 18 - - ФормаЗашифровать - 22 - true - true - - true - - - ФормаЗашифроватьExtendedTooltip - 75 - Label - true - true - - Left - - - Form.Command.Зашифровать - Normal - Auto - true - true - UserCmds - Auto - - - ФормаРасшифровать - 23 - true - true - - true - - - ФормаРасшифроватьExtendedTooltip - 76 - Label - true - true - - Left - - - Form.Command.Расшифровать - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма группа команд шифрование</value> - - - ФормаГруппаКомандШифрованиеРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Электронная подпись и шифрование</value> - - - ФормаГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - Popup - - - CommonPicture.ПодписанЗашифрованЗаголовок - - Picture - Normal - - Left - true NotificationProcessing @@ -3023,6 +3556,16 @@ true auto true + + + ГруппаКоманды + + + + + КоманднаяПанель + + ДатаМодификации @@ -4658,7 +5201,7 @@ </userVisible> </cmiFragmentRecord> <cmiFragmentRecord> - <command>CommonCommand.ВерсииФайла</command> + <command>0</command> <type>Added</type> <group>FormNavigationPanelGoTo</group> <index>2</index> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl index 124ad526b..8254b610e 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -18,14 +26,14 @@ ДоступнаЭлектроннаяПодпись = РаботаСФайламиСлужебный.ДоступнаЭлектроннаяПодпись(ТипЗнч(ПрисоединенныйФайл)); ТекущийПользователь = Пользователи.АвторизованныйПользователь(); - Элементы.ВладелецФайла0.Заголовок = ТипВладельца; - ПараметрыОтправки = ?(ЗначениеЗаполнено(Параметры.ПараметрыОтправки), Параметры.ПараметрыОтправки, РаботаСФайламиСлужебный.ПодготовитьСтруктуруПараметровОтправки()); РаботаСФайламиСлужебный.ФормаЭлементаПриСозданииНаСервере( ЭтотОбъект, Отказ, СтандартнаяОбработка, Параметры, ТолькоПросмотр, Истина); - + + Элементы.ВладелецФайла0.Заголовок = ТипВладельца; + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы); ЗапрещенныеРасширения = РаботаСФайламиСлужебный.СписокЗапрещенныхРасширений(); ОбновитьЗаголовок(); @@ -33,37 +41,17 @@ РаботаСФайламиПереопределяемый.ПриСозданииФормыЭлементаФайлов(ЭтотОбъект); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСтандартнаяЗаписатьИЗакрыть", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаОткрытьФайлДляПросмотра", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Редактировать", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ЗакончитьРедактирование", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСохранитьИзменения", "Отображение", ОтображениеКнопки.Картинка); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СохранитьКак", "Отображение", ОтображениеКнопки.Картинка); - - ИменаЭлементаОписание = Новый Массив(2); - ИменаЭлементаОписание[0] = "Описание"; - ИменаЭлементаОписание[1] = "Описание0"; - - Для каждого ИмяЭлемента Из ИменаЭлементаОписание Цикл - - Если Элементы.Найти(ИмяЭлемента) = Неопределено Тогда - - Продолжить; - - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, ИмяЭлемента, "ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Нет); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, ИмяЭлемента, "ПодсказкаВвода", НСтр("ru ='Краткое описание'")); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, ИмяЭлемента, "МаксимальнаяВысота", 2); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, ИмяЭлемента, "АвтоМаксимальнаяВысота", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, ИмяЭлемента, "РастягиватьПоВертикали", Ложь); - - КонецЦикла; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаОбщаяИнформация", "Группировка", ГруппировкаПодчиненныхЭлементовФормы.Вертикальная); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаКоманды", "Группировка", ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда); + Элементы.Описание.Высота = 0; + Элементы.Наименование.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.ВладелецФайла.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.ГруппаСведенияЧасть1.ВыравниваниеЭлементовИЗаголовков = + ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.ГруппаСведенияЧасть2.ВыравниваниеЭлементовИЗаголовков = + ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; + Элементы.ГруппаХарактеристикиФайла.ВыравниваниеЭлементовИЗаголовков = + ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; КонецЕсли; @@ -112,12 +100,6 @@ ОбновитьОбъект(); КонецЕсли; - // СтандартныеПодсистемы.Свойства - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); - КонецЕсли; - // Конец СтандартныеПодсистемы.Свойства - КонецПроцедуры #КонецОбласти @@ -191,8 +173,6 @@ &НаКлиенте Процедура ОбновитьИзФайлаНаДиске(Команда) - Перем НовоеРасширение; - Если ЭтоНовый() ИЛИ ЭтотОбъект.Объект.Зашифрован ИЛИ ЭтотОбъект.Объект.ПодписанЭП @@ -320,17 +300,14 @@ &НаКлиенте Процедура Печать(Команда) - СистемнаяИнфо = Новый СистемнаяИнформация; - Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86 - И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'")); - Возврат; + Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'")); + Возврат; КонецЕсли; - Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) Тогда + Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) + Или ОбработатьКомандуЗаписиФайла() Тогда ПечатьФайла(); - Иначе - ПоказатьПредупреждение(, НСтр("ru = 'Для печати файла необходимо записать данные. Записать?'")); КонецЕсли; КонецПроцедуры @@ -338,7 +315,8 @@ &НаКлиенте Процедура ПечатьСоШтампом(Команда) - Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) Тогда + Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) + Или ОбработатьКомандуЗаписиФайла() Тогда ДокументСоШтампом = РаботаСФайламиСлужебныйВызовСервера.ТабличныйДокументСоШтампом(ЭтотОбъект.Объект.Ссылка, ЭтотОбъект.Объект.Ссылка); РаботаСФайламиСлужебныйКлиент.ПечатьФайлаСоШтампом(ДокументСоШтампом); КонецЕсли; @@ -348,8 +326,11 @@ &НаКлиенте Процедура Отправить(Команда) - Файлы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЭтотОбъект.Объект.Ссылка); - РаботаСФайламиСлужебныйКлиент.ОтправитьФайлыПоПочте(Файлы, УникальныйИдентификатор, ПараметрыОтправки); + Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) + Или ОбработатьКомандуЗаписиФайла() Тогда + Файлы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЭтотОбъект.Объект.Ссылка); + РаботаСФайламиСлужебныйКлиент.ОтправитьФайлыПоПочте(Файлы, УникальныйИдентификатор, ПараметрыОтправки); + КонецЕсли; КонецПроцедуры @@ -1106,6 +1087,10 @@ КонецЕсли; + Если Форма.ТолькоПросмотр Тогда + СделатьКомандыЭПНедоступными(ИменаКоманд); + КонецЕсли; + Возврат ИменаКоманд; КонецФункции @@ -1188,7 +1173,7 @@ Функция ОбработатьКомандуЗаписиФайла() Если ПустаяСтрока(ЭтотОбъект.Объект.Наименование) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Для продолжения укажите имя файла.'"), , "Наименование", "Объект"); Возврат Ложь; КонецЕсли; @@ -1196,7 +1181,7 @@ Попытка РаботаСФайламиСлужебныйКлиент.КорректноеИмяФайла(ЭтотОбъект.Объект.Наименование); Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), ,"Наименование", "Объект"); Возврат Ложь; КонецПопытки; @@ -1401,12 +1386,9 @@ КонецЕсли; Контекст = Новый Структура; - Контекст.Вставить("МодульЭлектроннаяПодписьКлиентСервер", - ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер")); + МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); - ОбщиеНастройки = Контекст.МодульЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); - - Если ОбщиеНастройки.ПроверятьЭлектронныеПодписиНаСервере Тогда + Если МодульЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда Возврат; КонецЕсли; @@ -1518,8 +1500,7 @@ СтрокаТаблицы.Отпечаток = Base64Строка(Контекст.Сертификат.Отпечаток); СтрокаТаблицы.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификата, УникальныйИдентификатор); - СтрокаТаблицы.КомуВыданСертификат = - Контекст.МодульЭлектроннаяПодписьКлиентСервер.ПредставлениеСубъекта(Контекст.Сертификат); + СтрокаТаблицы.КомуВыданСертификат = Контекст.МодульЭлектроннаяПодпись.ПредставлениеСубъекта(Контекст.Сертификат); ПрочитатьСертификатыПодписейЦиклНачало(Контекст); @@ -1588,7 +1569,6 @@ Если СведенияОСинхронизации.Количество() > 0 Тогда УчетнаяЗапись = СведенияОСинхронизации.УчетнаяЗапись; - ФайлыРедактируютсяВОблачномСервисе = Истина; ВидимостьПояснения = Истина; АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Form.form index 595996cc9..d40351ba3 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Form.form @@ -531,6 +531,23 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ИдентификаторВладельца</name> + <title> + <key>ru</key> + <value>Идентификатор владельца</value> + + 9 + + UUID + + + true + + + true + + ЗакончитьРедактирование @@ -754,6 +771,29 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>ИдентификаторВладельца</name> + <valueType> + <types>UUID</types> + </valueType> + </parameters> + <parameters> + <name>Файл</name> + <valueType> + <types>CatalogRef</types> + </valueType> + </parameters> + <parameters> + <name>ДанныеФайла</name> + <valueType/> + </parameters> + <parameters> + <name>ИмяОткрываемогоФайла</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl index 5fdc01a3d..5d1d5c24d 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -11,6 +18,11 @@ Файл = Параметры.Файл; ДанныеФайла = Параметры.ДанныеФайла; ИмяОткрываемогоФайла = Параметры.ИмяОткрываемогоФайла; + ИдентификаторВладельца = Параметры.ИдентификаторВладельца; + + Если Не ЗначениеЗаполнено(ИдентификаторВладельца) Тогда + ИдентификаторВладельца = УникальныйИдентификатор; + КонецЕсли; Если ДанныеФайла.ФайлРедактируетТекущийПользователь Тогда РежимРедактирования = Истина; @@ -21,7 +33,7 @@ КонецЕсли; Элементы.Текст.ТолькоПросмотр = Не РежимРедактирования; - Элементы.ПоказатьОтличия.Видимость = ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент(); + Элементы.ПоказатьОтличия.Видимость = ОбщегоНазначения.ЭтоWindowsКлиент(); Элементы.ПоказатьОтличия.Доступность = РежимРедактирования; Элементы.Редактировать.Доступность = Не РежимРедактирования; Элементы.ЗакончитьРедактирование.Доступность = РежимРедактирования; @@ -29,7 +41,8 @@ Элементы.Записать.Доступность = РежимРедактирования; Элементы.ФормаВыбратьКодировку.Доступность = РежимРедактирования; - Если ДанныеФайла.Версия <> ДанныеФайла.ТекущаяВерсия Тогда + Если ДанныеФайла.Версия <> ДанныеФайла.ТекущаяВерсия + ИЛИ ДанныеФайла.Служебный Тогда Элементы.Редактировать.Доступность = Ложь; КонецЕсли; @@ -179,7 +192,7 @@ Процедура ВнешнийРедактор(Команда) ЗаписатьТекст(); - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ИмяОткрываемогоФайла); + ФайловаяСистемаКлиент.ОткрытьФайл(ИмяОткрываемогоФайла); Закрыть(); КонецПроцедуры @@ -187,7 +200,7 @@ &НаКлиенте Процедура Редактировать(Команда) - РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(Неопределено, Файл, УникальныйИдентификатор); + РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(Неопределено, Файл, ИдентификаторВладельца); КонецПроцедуры @@ -197,9 +210,9 @@ ЗаписатьТекст(); Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеЗавершение", ЭтотОбъект); - ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, УникальныйИдентификатор); + ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, ИдентификаторВладельца); ПараметрыОбновленияФайла.Кодировка = КодировкаТекстаФайла; - РаботаСФайламиСлужебныйКлиент.СохранитьИзмененияФайлаСОповещением(Обработчик, Файл, УникальныйИдентификатор); + РаботаСФайламиСлужебныйКлиент.СохранитьИзмененияФайлаСОповещением(Обработчик, Файл, ИдентификаторВладельца); КонецПроцедуры @@ -212,7 +225,7 @@ ПараметрыОбработчика.Вставить("Сценарий", "ЗакончитьРедактирование"); Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеЗавершение", ЭтотОбъект, ПараметрыОбработчика); - ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, УникальныйИдентификатор); + ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, ИдентификаторВладельца); ПараметрыОбновленияФайла.Кодировка = КодировкаТекстаФайла; РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла); @@ -246,7 +259,7 @@ ПараметрыОбработчика.Вставить("Сценарий", "ЗаписатьИЗакрыть"); Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеЗавершение", ЭтотОбъект, ПараметрыОбработчика); - ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, УникальныйИдентификатор); + ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, ИдентификаторВладельца); ПараметрыОбновленияФайла.Кодировка = КодировкаТекстаФайла; РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла); @@ -273,7 +286,7 @@ ПараметрыОбработчика = Новый Структура; ПараметрыОбработчика.Вставить("Сценарий", "Закрыть"); Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеЗавершение", ЭтотОбъект, ПараметрыОбработчика); - ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, УникальныйИдентификатор); + ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, Файл, ИдентификаторВладельца); ПараметрыОбновленияФайла.Кодировка = КодировкаТекстаФайла; РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла); @@ -335,9 +348,12 @@ &НаКлиенте Процедура ЗаписатьТекстВФайл(ИмяФайла) + ТекстФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(Текст.ПолучитьТекст()); + Текст.УстановитьТекст(ТекстФайла); + Если КодировкаТекстаФайла = "utf-8_WithoutBOM" Тогда - ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(Текст.ПолучитьТекст(), "utf-8", Ложь); + ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(, "utf-8", Ложь); ДвоичныеДанные.Записать(ИмяФайла); Иначе @@ -395,7 +411,7 @@ &НаКлиенте Процедура ВыполнитьСравнениеФайлов(Результат, ПараметрыВыполнения) Экспорт Если ПараметрыВыполнения.ТекущийШаг = 1 Тогда - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиент.ПерсональныеНастройкиРаботыСФайлами(); ПараметрыВыполнения.СпособСравненияВерсийФайлов = ПерсональныеНастройки.СпособСравненияВерсийФайлов; // Первый вызов - еще не инициализирована настройка. Если ПараметрыВыполнения.СпособСравненияВерсийФайлов = Неопределено Тогда @@ -409,7 +425,7 @@ Если Результат <> КодВозвратаДиалога.ОК Тогда Возврат; КонецЕсли; - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиент.ПерсональныеНастройкиРаботыСФайлами(); ПараметрыВыполнения.СпособСравненияВерсийФайлов = ПерсональныеНастройки.СпособСравненияВерсийФайлов; Если ПараметрыВыполнения.СпособСравненияВерсийФайлов = Неопределено Тогда Возврат; @@ -423,12 +439,12 @@ // Сохранение файла для левой части. Если ДанныеФайла.ТекущаяВерсия = ДанныеФайла.Версия Тогда - ДанныеФайлаСлева = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляСохранения(Файл, , УникальныйИдентификатор); + ДанныеФайлаСлева = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляСохранения(Файл, , ИдентификаторВладельца); АдресФайлаСлева = ДанныеФайлаСлева.НавигационнаяСсылкаТекущейВерсии; Иначе АдресФайлаСлева = РаботаСФайламиСлужебныйВызовСервера.ПолучитьНавигационнуюСсылкуДляОткрытия( ДанныеФайла.Версия, - УникальныйИдентификатор); + ИдентификаторВладельца); КонецЕсли; ПередаваемыеФайлы = Новый Массив; ПередаваемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПараметрыВыполнения.ПолноеИмяФайлаСлева, АдресФайлаСлева)); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Form.form index 69229edcc..42e8a2167 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Form.form @@ -180,6 +180,7 @@ <items xsi:type="form:FormGroup"> <name>ГруппаНаименованиеИОписание</name> <id>26</id> + <displayImportance>VeryHigh</displayImportance> <items xsi:type="form:FormField"> <name>СписокИндексКартинки</name> <id>7</id> @@ -1125,7 +1126,7 @@ <searchStringLocation>None</searchStringLocation> <viewStatusLocation>None</viewStatusLocation> <searchControlLocation>None</searchControlLocation> - <currentRowUse>SelectionPresentation</currentRowUse> + <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefresh>true</autoRefresh> @@ -1285,6 +1286,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Список</name> <title> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl index 513790c14..c03116596 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -10,11 +17,11 @@ НастроитьДинамическийСписок(); - Пользователь = Пользователи.ТекущийПользователь(); + Пользователь = Пользователи.АвторизованныйПользователь(); Список.Параметры.УстановитьЗначениеПараметра("Редактирует", Пользователь); - ПоказыватьКолонкуРазмер = РаботаСФайламиСлужебныйВызовСервера.ПолучитьПоказыватьКолонкуРазмер(); + ПоказыватьКолонкуРазмер = РаботаСФайламиСлужебный.ПолучитьПоказыватьКолонкуРазмер(); Если ПоказыватьКолонкуРазмер = Ложь Тогда Элементы.СписокТекущаяВерсияРазмер.Видимость = Ложь; КонецЕсли; @@ -293,7 +300,7 @@ |ГДЕ | СведенияОФайлах.Редактирует = &Редактирует"; - Запрос.УстановитьПараметр("Редактирует", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("Редактирует", Пользователи.АвторизованныйПользователь()); УстановитьПривилегированныйРежим(Истина); РезультатЗапроса = Запрос.Выполнить(); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form index 13756e1e0..19402e0c9 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Form.form @@ -104,7 +104,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> - <group>HorizontalIfPossible</group> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> @@ -211,7 +211,7 @@ </extendedTooltip> <type>UsualGroup</type> <extInfo xsi:type="form:UsualGroupExtInfo"> - <group>HorizontalIfPossible</group> + <group>AlwaysHorizontal</group> <behavior>Auto</behavior> <showLeftMargin>true</showLeftMargin> <united>true</united> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Module.bsl index 9970ab327..394f4f917 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -13,6 +20,10 @@ РежимСозданияФайла = 1; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Form.form index 1c0b2c7fa..74222d6bb 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Form.form @@ -36,9 +36,11 @@ <items xsi:type="form:FormGroup"> <name>КоманднаяПанель</name> <id>113</id> + <displayImportance>VeryLow</displayImportance> <items xsi:type="form:Button"> <name>ФормаОткрытьФайл</name> <id>53</id> + <displayImportance>VeryLow</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -870,6 +872,7 @@ <searchStringLocation>None</searchStringLocation> <viewStatusLocation>None</viewStatusLocation> <searchControlLocation>None</searchControlLocation> + <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefresh>true</autoRefresh> @@ -1099,6 +1102,16 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>ОсновнаяКоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Список</name> <title> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl index 57cab382f..d7742f11d 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлСуществует/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлСуществует/Module.bsl index aa652d167..f90854c34 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлСуществует/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлСуществует/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -7,6 +15,10 @@ ТекстСообщения = Параметры.ТекстСообщения; БазовоеДействие = Параметры.БазовоеДействие; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Form.form index 39ae57738..02d141b86 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Form.form @@ -283,6 +283,7 @@ <items xsi:type="form:FormField"> <name>СписокНаРедактирование</name> <id>17</id> + <displayImportance>VeryLow</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -322,118 +323,25 @@ <showInFooter>true</showInFooter> <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> </items> - <items xsi:type="form:FormGroup"> - <name>СписокГруппаИмяИКартинка</name> - <id>19</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> - <titleLocation>None</titleLocation> - <extendedTooltip> - <name>СписокИндексКартинкиРасширеннаяПодсказка</name> - <id>43</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>СписокИндексКартинкиКонтекстноеМеню</name> - <id>5</id> - <autoFill>true</autoFill> - </contextMenu> - <type>PictureField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <footerHorizontalAlign>Left</footerHorizontalAlign> - <extInfo xsi:type="form:ImageFieldExtInfo"> - <width>2</width> - <autoMaxWidth>true</autoMaxWidth> - <height>1</height> - <autoMaxHeight>true</autoMaxHeight> - <horizontalStretch>true</horizontalStretch> - <verticalStretch>true</verticalStretch> - <valuesPicture xsi:type="core:PictureRef"> - <picture>CommonPicture.КоллекцияПиктограммФайлов</picture> - </valuesPicture> - <border xsi:type="core:BorderDef"> - <width>1</width> - </border> - </extInfo> - </items> - <items xsi:type="form:FormField"> - <name>СписокИмяФайла</name> - <id>6</id> - <title> - <key>ru</key> - <value>Файл</value> - - true - true - - true - - - Список.ИмяФайла - - - СписокИмяФайлаРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - - СписокИмяФайлаКонтекстноеМеню - 7 - true - - InputField - Enter - true - true - Left - true - Left - - 40 - true - true - true - true - - Style.BorderColor - - Normal - - + + СписокИмяФайла + 6 + VeryHigh + + <key>ru</key> + <value>Файл</value> + true true true - - <key>ru</key> - <value>Список группа имя и картинка</value> - + + Список.ИмяФайла + - СписокГруппаИмяИКартинкаРасширеннаяПодсказка - 42 + СписокИмяФайлаРасширеннаяПодсказка + 44 Label true true @@ -441,16 +349,35 @@ Left - ColumnGroup - - InCell - auto - true + + СписокИмяФайлаКонтекстноеМеню + 7 + true + + InputField + Enter + true + true + Left + true + Left + + 40 + true + true + true + true + true + + Style.BorderColor + + Normal СписокРазмер 8 + Usual <key>ru</key> <value>Размер (КБ)</value> @@ -501,6 +428,7 @@ <items xsi:type="form:FormField"> <name>СписокДатаИзменения</name> <id>10</id> + <displayImportance>Usual</displayImportance> <title> <key>ru</key> <value>Дата изменения</value> @@ -555,6 +483,7 @@ <items xsi:type="form:FormField"> <name>СписокФайл</name> <id>48</id> + <displayImportance>Usual</displayImportance> <title> <key>ru</key> <value>Ссылка (Файл)</value> @@ -599,6 +528,7 @@ <items xsi:type="form:FormField"> <name>СписокВерсия</name> <id>51</id> + <displayImportance>Usual</displayImportance> <title> <key>ru</key> <value>Ссылка (Версия)</value> @@ -1001,12 +931,19 @@ <initialListView>Auto</initialListView> <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> + <rowPictureDataPath xsi:type="form:DataPath"> + <segments>Список.ИндексКартинки</segments> + </rowPictureDataPath> + <rowsPicture xsi:type="core:PictureRef"> + <picture>CommonPicture.КоллекцияПиктограммФайлов</picture> + </rowsPicture> <borderColor xsi:type="core:ColorRef"> <color>Style.BorderColor</color> </borderColor> <searchStringLocation>None</searchStringLocation> <viewStatusLocation>None</viewStatusLocation> <searchControlLocation>None</searchControlLocation> + <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <rowFilter xsi:type="core:UndefinedValue"/> </items> @@ -1036,6 +973,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Список</name> <title> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl index c507e46fc..2d39829c9 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФайлыВОсновномРабочемКаталоге/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -10,6 +17,10 @@ ЗаполнитьСписок(); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.СписокНаРедактирование.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -356,7 +367,7 @@ УстановитьПривилегированныйРежим(Истина); СписокЗначений = Новый Массив; - ТекущийПользователь = Пользователи.ТекущийПользователь(); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); // Для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует. ЗапросВРегистр = Новый Запрос; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Form.form index f81c02158..2f2339ea4 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Form.form @@ -287,6 +287,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>ОсновнаяКоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>КомментарийКВерсии</name> <title> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Module.bsl index e5f795ae0..a3270dccd 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВопроса/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВопроса/Form.form index 0644f1f4c..e9962894e 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВопроса/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВопроса/Form.form @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> +<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>2</id> @@ -395,6 +395,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>ОсновнаяКоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Файлы</name> <title> diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВопроса/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВопроса/Module.bsl index 229d60d4d..489cf8df0 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВопроса/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВопроса/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -24,7 +31,7 @@ СтандартнаяОбработка = Ложь; ФайлСсылка = Файлы[ВыбраннаяСтрока].Значение; - ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройки = РаботаСФайламиСлужебныйКлиент.ПерсональныеНастройкиРаботыСФайлами(); КакОткрывать = ПерсональныеНастройки.ДействиеПоДвойномуЩелчкуМыши; Если КакОткрывать = "ОткрыватьКарточку" Тогда ПараметрыФормы = Новый Структура; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form index 7e050b528..24b76cdf3 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form @@ -96,106 +96,6 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>ГруппаИнформация</name> - <id>13</id> - <items xsi:type="form:Decoration"> - <name>ДекорацияКартинка</name> - <id>11</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ДекорацияКартинкаExtendedTooltip</name> - <id>22</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>ДекорацияКартинкаКонтекстноеМеню</name> - <id>12</id> - <autoFill>true</autoFill> - </contextMenu> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <skipOnInput>false</skipOnInput> - <extInfo xsi:type="form:PictureDecorationExtInfo"> - <picture xsi:type="core:PictureRef"> - <picture>CommonPicture.Информация</picture> - </picture> - </extInfo> - </items> - <items xsi:type="form:Decoration"> - <name>ДекорацияНадпись</name> - <id>14</id> - <title> - <key>ru</key> - <value>Совет - для редактирования файла удобно использовать кнопку F4.</value> - - true - true - - true - - - ДекорацияНадписьExtendedTooltip - 23 - Label - true - true - - Left - - - - ДекорацияНадписьКонтекстноеМеню - 15 - true - - Label - 1 - true - false - - Left - - - true - true - - true - - - <key>ru</key> - <value>Информация</value> - - - ГруппаИнформацияExtendedTooltip - 21 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - NormalSeparation - true - true - Auto - Auto - - БольшеНеСпрашивать 6 diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl index 981ad3517..afcf7d0d8 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,20 +15,8 @@ КонецЕсли; БольшеНеСпрашивать = Ложь; - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.КакОткрывать.Заголовок = НСтр("ru ='Режим открытия файла'"); - Элементы.КакОткрывать.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; - Элементы.КакОткрывать.ВидПереключателя = ВидПереключателя.Переключатель; - Элементы.Отмена.Видимость = Ложь; - Элементы.Справка.Видимость = Ложь; - Элементы.ДекорацияНадпись.Высота = 2; - Элементы.КоманднаяПанельМобильныйКлиент.Видимость = Истина; - Элементы.ОткрытьФайлМобильныйКлиент.КнопкаПоУмолчанию = Истина; - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет; - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form index a043ca2a7..78c37adef 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form @@ -35,6 +35,7 @@ КартинкаИНаименование 29 + VeryHigh ВыбранныеФайлыИндексКартинки 30 @@ -266,6 +267,7 @@ None None None + SelectionPresentationAndChoice true @@ -546,6 +548,11 @@ true auto true + + + ОсновнаяКоманднаяПанель + + Объект 1 diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl index 631559104..103936fdb 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -18,7 +26,7 @@ Элементы.ХранитьВерсии.Видимость = ВозможностьСоздаватьВерсииФайлов; - ПерсональныеНастройкиРаботыСФайлами = РаботаСФайламиСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройкиРаботыСФайлами = РаботаСФайлами.НастройкиРаботыСФайлами(); Элементы.УдалитьФайлыИзОсновногоКаталога.Видимость = ПерсональныеНастройкиРаботыСФайлами.ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов; УдалитьФайлыИзОсновногоКаталога = ПерсональныеНастройкиРаботыСФайлами.УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form index 198b84670..6f6ce56a3 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form @@ -473,6 +473,11 @@ true auto true + + + ОсновнаяКоманднаяПанель + + Объект 1 diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl index 9435db766..720ed20ed 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -73,14 +80,14 @@ Если ПустаяСтрока(Каталог) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не выбран каталог для импорта.'"), , "Каталог"); Возврат; КонецЕсли; Если ПапкаДляДобавления.Пустая() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Укажите папку.'"), , "ПапкаДляДобавления"); Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form index 83e64c44f..b36b501e2 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form @@ -113,7 +113,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Auto true true @@ -149,6 +149,7 @@ КартинкаИНаименование 29 + VeryHigh ВыбранныеФайлыИндексКартинки 30 @@ -385,6 +386,7 @@ None None None + SelectionPresentationAndChoice true @@ -794,6 +796,11 @@ true auto true + + + ОсновнаяКоманднаяПанель + + Объект 1 diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl index c6d333646..5ff3d1ed1 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -62,7 +69,7 @@ ПоляНеЗаполнены = Ложь; Если ВыбранныеФайлы.Количество() = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Нет файлов для добавления.'"), , "ВыбранныеФайлы"); ПоляНеЗаполнены = Истина; КонецЕсли; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Form.form index 5158d487c..89f336f4d 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Form.form @@ -4,85 +4,6 @@ ru Отчет о загрузке файлов - - ОсновнаяКоманднаяПанель - 1 - - Закрыть - 6 - true - true - - true - - - ЗакрытьРасширеннаяПодсказка - 7 - Label - true - true - - Left - - - Form.StandardCommand.Close - true - true - true - UserCmds - Auto - - - ФормаСправка - 8 - true - true - - true - - - ФормаСправкаРасширеннаяПодсказка - 9 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Основная командная панель</value> - - - ОсновнаяКоманднаяПанельExtendedTooltip - 4 - Label - true - true - - Left - - - CommandBar - - Left - Form - - Отчет 2 @@ -138,11 +59,60 @@ true - None - false ФормаКоманднаяПанель -1 + + Закрыть + 6 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + Form.StandardCommand.Close + true + true + true + UserCmds + Auto + + + ФормаСправка + 8 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Module.bsl index 1fe0dd30b..4666b3be0 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,8 +15,7 @@ Возврат; КонецЕсли; - Отчет = РаботаСФайламиСлужебныйВызовСервера.ИмпортФайловСформироватьОтчет( - Параметры.МассивИменФайловСОшибками); + Отчет = РаботаСФайламиСлужебный.ИмпортФайловСформироватьОтчет(Параметры.МассивИменФайловСОшибками); Если Параметры.Свойство("Заголовок") Тогда Заголовок = Параметры.Заголовок; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form index 2fdcf4e81..4e6c18692 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form @@ -238,6 +238,11 @@ true auto true + + + КоманднаяПанель + + ДеревоФайлов diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl index bc12dfa7c..a7c8c9fab 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -12,16 +19,15 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьКлиентСервер = - ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - РасширениеДляЗашифрованныхФайлов = - МодульЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки().РасширениеДляЗашифрованныхФайлов; + РасширениеДляЗашифрованныхФайлов = + МодульЭлектроннаяПодпись.ПерсональныеНастройки().РасширениеДляЗашифрованныхФайлов; Иначе РасширениеДляЗашифрованныхФайлов = "p7m"; КонецЕсли; - ИмяСправочникаХранилищаФайлов = Параметры.ИмяСправочникаХранилищаФайлов; + ИмяСправочникаХранилищаФайлов = Параметры.ИмяСправочникаХранилищаФайлов; ИмяСправочникаХранилищаВерсийФайлов = Параметры.ИмяСправочникаХранилищаВерсийФайлов; КонецПроцедуры @@ -44,7 +50,7 @@ СтандартнаяОбработка = Ложь; Если Не ПустаяСтрока(Элемент.ТекстРедактирования) Тогда - ОбщегоНазначенияКлиент.ОткрытьПроводник(Элемент.ТекстРедактирования); + ФайловаяСистемаКлиент.ОткрытьПроводник(Элемент.ТекстРедактирования); КонецЕсли; КонецПроцедуры @@ -647,8 +653,6 @@ КонецЕсли; КонецЕсли; - РазмерВМб = ПараметрыВыполнения.ЗаписьФайла.Размер / (1024 * 1024); - // Запишем файл заново АдресФайлаДляОткрытия = РаботаСФайламиСлужебныйВызовСервера.ПолучитьНавигационнуюСсылкуДляОткрытия( ПараметрыВыполнения.ЗаписьФайла.ТекущаяВерсия, diff --git a/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo b/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo index 0cb1ceac5..609117449 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo +++ b/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo @@ -10,20 +10,6 @@ <value>Работа с файлами</value> </synonym> <useStandardCommands>true</useStandardCommands> - <forms uuid="c73da415-6fc3-449a-a784-b25aed54eccd"> - <name>ВерсииФайла</name> - <synonym> - <key>ru</key> - <value>Версии файла</value> - </synonym> - <help> - <pages> - <lang>ru</lang> - </pages> - </help> - <usePurposes>PersonalComputer</usePurposes> - <usePurposes>MobileDevice</usePurposes> - </forms> <forms uuid="8deb4f57-18fc-4db0-ad0f-82d60af3d80b"> <name>ВерсияПрисоединенногоФайла</name> <synonym> diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index b5e1d2069..0c4ee1626 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -5,29 +5,75 @@ <value>Адрес</value> - ПанельКоманд - 82 + ПанельКонтактнаяИнформация + 547 - ГруппаПроверитьЗаполнения - 86 + ГруппаКомандаДобавить + 167 + VeryLow - ГруппаКомандаДобавить - 167 - - ГруппаДобавлениеСтроения - 410 + ГруппаДобавлениеСтроения + 410 + true + true + + true + + + <key>ru</key> + <value>Здание</value> + + + ГруппаДобавлениеСтроенияРасширеннаяПодсказка + 411 + Label + true + true + + Left + + + + + + ГруппаДобавлениеПомещения + 408 + true + true + + true + + + <key>ru</key> + <value>Помещение</value> + + + ГруппаДобавлениеПомещенияРасширеннаяПодсказка + 409 + Label + true + true + + Left + + + + + + ГруппаГруппаДобавлениеКомментария + 406 + + ДобавитьКомментарий + 386 + Usual true true true - - <key>ru</key> - <value>Здание</value> - - ГруппаДобавлениеСтроенияРасширеннаяПодсказка - 411 + ДобавитьКомментарийРасширеннаяПодсказка + 387 Label true true @@ -35,81 +81,13 @@ Left - - - - ГруппаДобавлениеПомещения - 408 - true - true - - true - - - <key>ru</key> - <value>Помещение</value> - - - ГруппаДобавлениеПомещенияРасширеннаяПодсказка - 409 - Label - true - true - - Left - - - - - - ГруппаГруппаДобавлениеКомментария - 406 - - ДобавитьКомментарий - 386 - true - true - - true - - - ДобавитьКомментарийРасширеннаяПодсказка - 387 - Label - true - true - - Left - - - Form.Command.ДобавитьКомментарий - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа добавление комментария</value> - - - ГруппаГруппаДобавлениеКомментарияРасширеннаяПодсказка - 407 - Label - true - true - - Left - - - + Form.Command.ДобавитьКомментарий + Normal + Auto + true + true + UserCmds + Auto true true @@ -118,11 +96,11 @@ <key>ru</key> - <value>Добавить</value> + <value>Группа добавление комментария</value> - ГруппаКомандаДобавитьРасширеннаяПодсказка - 168 + ГруппаГруппаДобавлениеКомментарияРасширеннаяПодсказка + 407 Label true true @@ -130,23 +108,49 @@ Left - Popup - - - StdPicture.CreateListItem - - Auto - Normal - + + true + true + + true + + + <key>ru</key> + <value>Добавить</value> + + + ГруппаКомандаДобавитьРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + + + ГруппаПроверитьАдрес + 545 ПроверитьЗаполнениеАдреса 87 + Usual true true true + true ПроверитьЗаполнениеАдресаExtendedTooltip 138 @@ -163,7 +167,6 @@ true true UserCmds - Auto АдресныйКлассификаторУстарел @@ -198,12 +201,11 @@ <key>ru</key> - <value>Проверить заполнения</value> + <value>Проверить адрес</value> - true - ГруппаПроверитьЗаполненияРасширеннаяПодсказка - 137 + ГруппаПроверитьАдресРасширеннаяПодсказка + 546 Label true true @@ -211,302 +213,299 @@ Left - CommandBar - - Left - + + + + ФормаВсеДействияИзмененияАдреса + 152 + + МуниципальноеДеление + 454 + true + true + + true + + + МуниципальноеДелениеРасширеннаяПодсказка + 455 + Label + true + true + + Left + + + Form.Command.МуниципальноеДеление + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + АдминистративноТерриториальноеДеление + 456 + true + true + + true + + + АдминистративноТерриториальноеДелениеРасширеннаяПодсказка + 457 + Label + true + true + + Left + + + Form.Command.АдминистративноТерриториальноеДеление + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + АдресВСвободнойФорме + 102 + true + true + + true + + + АдресВСвободнойФормеРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + Form.Command.АдресВСвободнойФорме + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма все действия изменения адреса</value> + + + ФормаВсеДействияИзмененияАдресаРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + + + + ГруппаДействияСАдресом + 458 + + ФормаОчиститьАдрес + 90 + true + true + + true + + + ФормаОчиститьАдресExtendedTooltip + 143 + Label + true + true + + Left + + + Form.Command.ОчиститьАдрес + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ЗаполнитьПоПочтовомуИндексу + 150 + true + true + + true + + + ЗаполнитьПоПочтовомуИндексуРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Form.Command.ЗаполнитьПоПочтовомуИндексу + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Действия с адресом</value> + + + ГруппаДействияСАдресомРасширеннаяПодсказка + 459 + Label + true + true + + Left + + + + + + ФормаВводАдресаПоказать + 101 + + ИсторияИзменений + 326 + true + true + + true + + + ИсторияИзмененийРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + Form.Command.ИсторияИзменений + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + АдресНаКартеЯндексКартах + 328 + true + true + + true + + + АдресНаКартеЯндексКартахРасширеннаяПодсказка + 329 + Label + true + true + + Left + + + Form.Command.АдресНаЯндексКарты + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказатьНаКартеGoogle + 330 + true + true + + true + + + ПоказатьНаКартеGoogleРасширеннаяПодсказка + 331 + Label + true + true + + Left + + + Form.Command.АдресНаGoogleMaps + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма ввод адреса показать</value> + + + ФормаВводАдресаПоказатьРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + ПанельКомандФормы 83 - - ФормаВводАдресаПоказать - 101 - - ИсторияИзменений - 326 - true - true - - true - - - ИсторияИзмененийРасширеннаяПодсказка - 327 - Label - true - true - - Left - - - Form.Command.ИсторияИзменений - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - АдресНаКартеЯндексКартах - 328 - true - true - - true - - - АдресНаКартеЯндексКартахРасширеннаяПодсказка - 329 - Label - true - true - - Left - - - Form.Command.АдресНаЯндексКарты - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ПоказатьНаКартеGoogle - 330 - true - true - - true - - - ПоказатьНаКартеGoogleРасширеннаяПодсказка - 331 - Label - true - true - - Left - - - Form.Command.АдресНаGoogleMaps - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Форма ввод адреса показать</value> - - - ФормаВводАдресаПоказатьРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - - - - ФормаВсеДействияИзмененияАдреса - 152 - - МуниципальноеДеление - 454 - true - true - - true - - - МуниципальноеДелениеРасширеннаяПодсказка - 455 - Label - true - true - - Left - - - Form.Command.МуниципальноеДеление - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - АдминистративноТерриториальноеДеление - 456 - true - true - - true - - - АдминистративноТерриториальноеДелениеРасширеннаяПодсказка - 457 - Label - true - true - - Left - - - Form.Command.АдминистративноТерриториальноеДеление - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - АдресВСвободнойФорме - 102 - true - true - - true - - - АдресВСвободнойФормеРасширеннаяПодсказка - 145 - Label - true - true - - Left - - - Form.Command.АдресВСвободнойФорме - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ГруппаДействияСАдресом - 458 - - ФормаОчиститьАдрес - 90 - true - true - - true - - - ФормаОчиститьАдресExtendedTooltip - 143 - Label - true - true - - Left - - - Form.Command.ОчиститьАдрес - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ЗаполнитьПоПочтовомуИндексу - 150 - true - true - - true - - - ЗаполнитьПоПочтовомуИндексуРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - Form.Command.ЗаполнитьПоПочтовомуИндексу - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Действия с адресом</value> - - - ГруппаДействияСАдресомРасширеннаяПодсказка - 459 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Форма все действия изменения адреса</value> - - - ФормаВсеДействияИзмененияАдресаРасширеннаяПодсказка - 153 - Label - true - true - - Left - - - - ЗагрузитьКлассификатор 172 @@ -607,10 +606,7 @@ Left - CommandBar - - Right - + true true @@ -619,11 +615,11 @@ <key>ru</key> - <value>Панель команд</value> + <value>Панель контактная информация</value> - ПанельКомандExtendedTooltip - 136 + ПанельКонтактнаяИнформацияРасширеннаяПодсказка + 548 Label true true @@ -631,21 +627,17 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Left ГруппаИнформация - 542 + 537 Предупреждение - 544 + 539 <key>ru</key> <value>Предупреждение</value> @@ -657,7 +649,7 @@ </userVisible> <extendedTooltip> <name>ПредупреждениеРасширеннаяПодсказка</name> - <id>546</id> + <id>541</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -667,7 +659,7 @@ </extendedTooltip> <contextMenu> <name>ПредупреждениеКонтекстноеМеню</name> - <id>545</id> + <id>540</id> <autoFill>true</autoFill> </contextMenu> <autoMaxWidth>true</autoMaxWidth> @@ -680,7 +672,8 @@ </items> <items xsi:type="form:Decoration"> <name>ИнформацияОЗагрузкеАдресныеСведений</name> - <id>539</id> + <id>542</id> + <displayImportance>VeryHigh</displayImportance> <title> <key>ru</key> <value>Для автоподбора и проверки адресов необходимо загрузить адресные сведения. <link load>Загрузить @@ -693,7 +686,7 @@ </userVisible> <extendedTooltip> <name>ИнформацияОЗагрузкеАдресныеСведенийРасширеннаяПодсказка</name> - <id>541</id> + <id>544</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -703,7 +696,7 @@ </extendedTooltip> <contextMenu> <name>ИнформацияОЗагрузкеАдресныеСведенийКонтекстноеМеню</name> - <id>540</id> + <id>543</id> <autoFill>true</autoFill> </contextMenu> <formatted>true</formatted> @@ -725,16 +718,12 @@ </userVisible> <title> <key>ru</key> - <value>Группа информация</value> + <value>Информация</value> - - ru - Группа информация - true ГруппаИнформацияРасширеннаяПодсказка - 543 + 538 Label true true @@ -759,21 +748,79 @@ ГруппаИсторическийАдрес 358 - - ТекстАдресНаДату - 360 + + ГруппаДатаДействияАдреса + 549 + + АдресНаДату + 363 + + <key>ru</key> + <value>Адрес на</value> + + true + true + + true + + + АдресНаДату + + Left + + OnChange + АдресНаДатуПриИзменении + + + АдресНаДатуРасширеннаяПодсказка + 365 + Label + true + true + + Left + + + + АдресНаДатуКонтекстноеМеню + 364 + true + + InputField + Enter + true + Left + true + + + AutoComplete + АдресНаДатуАвтоПодбор + + 10 + true + true + true + true + true + true + true + Normal + Always + + + true + true + + true + <key>ru</key> - <value>Адрес на</value> + <value>Дата действия адреса</value> - true - true - - true - + false - ТекстАдресНаДатуРасширеннаяПодсказка - 362 + ГруппаДатаДействияАдресаРасширеннаяПодсказка + 550 Label true true @@ -781,67 +828,15 @@ Left - - ТекстАдресНаДатуКонтекстноеМеню - 361 - true - - Label - true - true - - Left - - - - АдресНаДату - 363 - true - true - - true - - - АдресНаДату - - None - - OnChange - АдресНаДатуПриИзменении - - - АдресНаДатуРасширеннаяПодсказка - 365 - Label - true - true - - Left - - - - АдресНаДатуКонтекстноеМеню - 364 - true - - InputField - Enter - true - Left - true - - - AutoComplete - АдресНаДатуАвтоПодбор - - 10 - true - true - true - true - true - true - Normal + UsualGroup + + AlwaysHorizontal + ItemsLeftTitlesLeft + None + Auto + true + Auto + Auto @@ -918,6 +913,8 @@ Дата действия адреса 2 + false + Left ГруппаИсторическийАдресРасширеннаяПодсказка 359 @@ -930,6 +927,8 @@ UsualGroup + HorizontalIfPossible + Left Auto true true @@ -1271,12 +1270,12 @@ true 11 + true true true false ShowInDropList true - true true Normal @@ -1334,12 +1333,12 @@ ChoiceProcessing ДомОбработкаВыбора + 12 true true true true true - true true true OnValueChange @@ -1426,10 +1425,10 @@ true true true + true ShowInDropList true true - true true Normal @@ -1487,15 +1486,17 @@ ChoiceProcessing СтроениеОбработкаВыбора + 12 true true true true true - true true true Normal + Always + DontUse true @@ -1609,6 +1610,7 @@ true true true + true ShowInDropList true true @@ -1661,6 +1663,7 @@ Left true + 12 true true true @@ -1744,10 +1747,6 @@ ru Панель команд - - ru - Панель команд мобильный клиент - ПанельКомандМобильныйКлиентРасширеннаяПодсказка 536 @@ -1772,10 +1771,6 @@ ru Панель команд - - ru - Группа мобильный клиент - ГруппаМобильныйКлиентРасширеннаяПодсказка 534 @@ -1823,13 +1818,14 @@ Auto true true - Auto + DontUse Auto ГруппаИнформационныеСообщения 528 + VeryLow СервисНедоступен 272 @@ -2520,12 +2516,8 @@ true true true - true true true - - Style.ButtonBackColor - Normal @@ -2972,7 +2964,7 @@ - ГруппаПанельНиз + ПанельВнизу 491 СтраницаТипАдреса @@ -3280,16 +3272,19 @@ Form.Command.КомандаОК - Auto true true true UserCmds + + StdPicture.WriteAndClose + Auto ФормаОтмена 57 + VeryHigh true true @@ -3344,10 +3339,10 @@ <key>ru</key> - <value>Панель низ</value> + <value>Панель внизу</value> - ГруппаПанельНизРасширеннаяПодсказка + ПанельВнизуРасширеннаяПодсказка 492 Label true @@ -3366,12 +3361,10 @@ Auto - None - false ФормаКоманднаяПанель -1 - Right + Left ChoiceProcessing @@ -3405,6 +3398,21 @@ true auto true + + + ФормаКомандаОК + + + + + ФормаОтмена + + + + + ПанельКонтактнаяИнформация + + Комментарий @@ -4065,10 +4073,10 @@ </edit> </attributes> <attributes> - <name>ЕстьКлассификатор</name> + <name>ЕстьЗагруженныйКлассификатор</name> <title> <key>ru</key> - <value>Есть классификатор</value> + <value>Есть загруженный классификатор</value> 40 @@ -4565,10 +4573,10 @@ - КлассификаторДоступен + ВебКлассификаторДоступен <key>ru</key> - <value>Классификатор доступен</value> + <value>Веб классификатор доступен</value> 55 @@ -4717,28 +4725,6 @@ DontUse Auto - - КомандаОтмена - - <key>ru</key> - <value>Отмена</value> - - 7 - - ru - Отменить изменения и закрыть форму - - - true - - - - КомандаОтмена - - - DontUse - Auto - ЗаполнитьПоПочтовомуИндексу @@ -4946,6 +4932,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>КомандаОтмена</name> + <title> + <key>ru</key> + <value>Отмена</value> + + 6 + + ru + Команда отмена + + + true + + + + КомандаОтмена + + + Auto + Auto + ВидКонтактнойИнформации diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index 945e15695..b622dcdc8 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Форма параметризуется: // // Заголовок - Строка - заголовок формы. @@ -34,10 +42,11 @@ // Настройки формы СведенияОАдресномКлассификаторе = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.СведенияОДоступностиАдресногоКлассификатора(); - ЕстьКлассификатор = СведенияОАдресномКлассификаторе["ИспользоватьЗагруженные"]; - КлассификаторДоступен = СведенияОАдресномКлассификаторе["КлассификаторДоступен"]; - ВебСервисИспользуется = КлассификаторДоступен; - АвтоподборДоступен = КлассификаторДоступен Или ЕстьКлассификатор; + ЕстьЗагруженныйКлассификатор = СведенияОАдресномКлассификаторе["ИспользоватьЗагруженные"]; + ВебКлассификаторДоступен = СведенияОАдресномКлассификаторе["КлассификаторДоступен"]; + ВебСервисИспользуется = ВебКлассификаторДоступен; + АвтоподборДоступен = ВебКлассификаторДоступен Или ЕстьЗагруженныйКлассификатор; + ЕстьПравоЗагружатьКлассификатор = Обработки.РасширенныйВводКонтактнойИнформации.ЕстьВозможностьИзмененияАдресногоКлассификатора(); Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений); @@ -53,6 +62,9 @@ ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип; МеждународныйФорматАдреса = ВидКонтактнойИнформации.МеждународныйФорматАдреса; + Элементы.АдресВСвободнойФорме.Видимость = Не ВидКонтактнойИнформации.ПроверятьКорректность; + Элементы.ПредставлениеАдресаКонтекстноеМенюВвестиАдресВСвободнойФорме.Видимость = Не ВидКонтактнойИнформации.ПроверятьКорректность; + // Пытаемся заполнить из параметров. ЗначенияПолей = ОпределитьЗначениеАдреса(Параметры); @@ -122,56 +134,36 @@ Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь; Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; Элементы.СтраницаТипАдреса.Видимость = Ложь; + Элементы.ГруппаИнформация.Видимость = Ложь; КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ГруппаИнформационныеСообщения.Видимость = Ложь; + Элементы.НаселенныйПункт.МногострочныйРежим = Истина; + Элементы.ФормаКомандаОК.Отображение = ОтображениеКнопки.Картинка; + Элементы.ТипДома.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто; + Элементы.ТипСтроения.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто; + элементы.ФормаОтмена.Видимость = Ложь; + КонецЕсли; + ОпределитьОтображениеЭлементовНаФорме(); - Если КлассификаторДоступен Тогда - Элементы.ГруппаИнформация.Видимость = Ложь; - Иначе - Элементы.ГруппаИнформация.Видимость = Не АдресныеСведенияКлассификатораЗагружены(НаименованиеРегиона(НаселенныйПунктДетально)).РегионЗагружен; - КонецЕсли; Если Не ЕстьПравоЗагружатьКлассификатор Тогда Элементы.ИнформацияОЗагрузкеАдресныеСведений.Заголовок = НСтр("ru='Для автоподбора и проверки адресов обратитесь к администратору для загрузки адресных сведений.'"); Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; КонецЕсли; - ДоступностьКлассификатора = Неопределено; - УстановитьКлючИспользованияФормы(); СформироватьМенюДобавленияСтроенийИПомещений(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; - - Элементы.Переместить(Элементы.ГруппаКомандаДобавить, Элементы.ПанельКомандМобильныйКлиент); - Элементы.Переместить(Элементы.ФормаКомандаОК, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ПроверитьЗаполнениеАдреса, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ИсторияИзменений, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.АдресНаКартеЯндексКартах, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ПоказатьНаКартеGoogle, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.МуниципальноеДеление, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.АдминистративноТерриториальноеДеление, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.АдресВСвободнойФорме, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ФормаОчиститьАдрес, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ЗаполнитьПоПочтовомуИндексу, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ЗагрузитьКлассификатор, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.Справка, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаОтмена", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НаселенныйПункт", "Заголовок", НСтр("ru ='Город'")); - - КонецЕсли; - КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Если ЗначениеЗаполнено(ТекстПредупрежденияПриОткрытии) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупрежденияПриОткрытии,, ПолеПредупрежденияПриОткрытии); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстПредупрежденияПриОткрытии,, ПолеПредупрежденияПриОткрытии); КонецЕсли; ОтобразитьПоляПоТипуАдреса(); @@ -194,7 +186,7 @@ Если ИмяСобытия = "АдресныйКлассификаторАктуализирован" ИЛИ ИмяСобытия = "ЗагруженАдресныйКлассификатор" Тогда АдресныеСведенияЗагружены = АдресныеСведенияКлассификатораЗагружены(НаименованиеРегиона(НаселенныйПунктДетально)); - Если КлассификаторДоступен Или АдресныеСведенияЗагружены.РегионЗагружен Тогда + Если ВебКлассификаторДоступен Или АдресныеСведенияЗагружены.РегионЗагружен Тогда Элементы.ГруппаИнформация.Видимость = Ложь; Элементы.Дом.КнопкаВыбора = Истина; Элементы.Улица.КнопкаВыбора = Истина; @@ -208,6 +200,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") + И ВыбранноеЗначение.Свойство("КраткоеПредставлениеОшибки") + И ЗначениеЗаполнено(ВыбранноеЗначение.КраткоеПредставлениеОшибки) Тогда + ПоказатьПредупреждение(, ВыбранноеЗначение.КраткоеПредставлениеОшибки); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -317,7 +318,7 @@ Если НЕ ПодборПоИндексуДоступен Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Индекс %1 не найден в адресном классификаторе'"), Формат(Результат.Индекс, "ЧРГ=' '; ЧГ=0")); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,, "Объект.Индекс"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,,, "Объект.Индекс"); Иначе ПроверитьДоступностьКлассификатора(); КонецЕсли; @@ -337,7 +338,6 @@ ОбработкаИзмененияАдреса(); УстановитьФлагиВМенюПоТипуАдреса(); - Модифицированность = Истина; ТекущийЭлемент = Элементы.Дом; Иначе ОбновитьПредставлениеАдреса(); @@ -370,8 +370,18 @@ Если ПустаяСтрока(НаселенныйПунктДетально.HouseType) Тогда НаселенныйПунктДетально.HouseType = ТипДома; КонецЕсли; + + НайденныйИдентификатор = ИдентификаторАдреса(НаселенныйПунктДетально, Истина); + Если ЗначениеЗаполнено(НайденныйИдентификатор) Тогда + НайденныйИндекс = НайтиИндексУДома(НайденныйИдентификатор, Дом); + Если ЗначениеЗаполнено(НайденныйИндекс) Тогда + Индекс = НайденныйИндекс; + НаселенныйПунктДетально.ZipCode = Индекс; + КонецЕсли; + КонецЕсли; + ОбновитьПредставлениеАдреса(); - + КонецПроцедуры &НаКлиенте @@ -411,6 +421,7 @@ Для каждого Помещения Из НаселенныйПунктДетально.Buildings Цикл Если СтрСравнить(Помещения.Type, ТипСтроения) = 0 Тогда Помещения.Type = ЭтотОбъект["ТипСтроения"]; + Помещения.number = Строение; ЭтоНовый = Ложь; Прервать; КонецЕсли; @@ -599,8 +610,6 @@ НаселенныйПунктДетально = Результат; ОбработкаИзмененияАдреса(); - Модифицированность = Истина; - КонецЕсли; КонецПроцедуры @@ -615,19 +624,17 @@ Модифицированность = Истина; - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда - Если ЕстьПравоЗагружатьКлассификатор И ВыбранноеЗначение.ПредлагатьЗагрузкуКлассификатора = Истина Тогда - // Предлагаем загрузить классификатор. - ПредложениеЗагрузкиКлассификатора( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), - ВыбранноеЗначение); - Иначе - НаселенныйПунктУстановитьПоляАдреса(НаселенныйПунктДетально, ВыбранноеЗначение); - КонецЕсли; + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда + Возврат; КонецЕсли; - ОбработкаИзмененияАдреса(); - УстановитьФлагиВМенюПоТипуАдреса(); + Если ЕстьПравоЗагружатьКлассификатор И ВыбранноеЗначение.ПредлагатьЗагрузкуКлассификатора = Истина Тогда + // Предлагаем загрузить классификатор. + ПредложениеЗагрузкиКлассификатора(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), + ВыбранноеЗначение.Представление), ВыбранноеЗначение); + Иначе + УстановитьНаселенныйПунктПослеВыбора(ВыбранноеЗначение); + КонецЕсли; КонецПроцедуры @@ -687,7 +694,7 @@ Улица = Элемент.ТекстРедактирования; КонецЕсли; - ИдентификаторНаселенногоПункта = РаботаСАдресамиКлиентСервер.ИдентификаторАдреса(НаселенныйПунктДетально, Ложь); + ИдентификаторНаселенногоПункта = ИдентификаторАдреса(НаселенныйПунктДетально, Ложь); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Родитель", ИдентификаторНаселенногоПункта); @@ -709,7 +716,7 @@ НаселенныйПунктДетально = ОпределитьАдресПоИдентификатору(Результат); ОбработкаИзмененияАдреса(); Иначе - ТекстПредупреждения = НСтр("ru = 'Выбор из списка недоступен, т.к в адресном классификаторе отсутствует информация о улицах для введенного адреса.'"); + ПоказатьПредупреждение(, НСтр("ru = 'Выбор из списка недоступен, т.к в адресном классификаторе отсутствует информация о улицах для введенного адреса.'")); КонецЕсли; КонецПроцедуры @@ -737,7 +744,7 @@ КонецЕсли; СведенияОбАдресе.Вставить("Муниципальный", РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.addressType)); - НаселенныйПунктДетально = ОпределитьАдресПоИдентификатору(СведенияОбАдресе); + НаселенныйПунктУстановитьПоляАдреса(НаселенныйПунктДетально, СведенияОбАдресе, Истина); ОбработкаИзмененияАдреса(); Элементы.Улица.ОбновитьТекстРедактирования(); @@ -752,8 +759,7 @@ ДанныеВыбора = Новый СписокЗначений; - ИдентификаторНаселенногоПункта = РаботаСАдресамиКлиентСервер.ИдентификаторАдреса(НаселенныйПунктДетально, Ложь); - + ИдентификаторНаселенногоПункта = ИдентификаторАдреса(НаселенныйПунктДетально, Ложь); Если СтрДлина(Текст) < 2 Или Не ЗначениеЗаполнено(ИдентификаторНаселенногоПункта)Тогда // Нет вариантов, список пуст, стандартную обработку не надо трогать. Возврат; @@ -811,7 +817,7 @@ КонецЕсли; Если ЗначениеЗаполнено(Текст) Тогда - Идентификатор = РаботаСАдресамиКлиентСервер.ИдентификаторАдреса(НаселенныйПунктДетально, Истина); + Идентификатор = ИдентификаторАдреса(НаселенныйПунктДетально, Истина); Если ЗначениеЗаполнено(Идентификатор) Тогда ДанныеВыбора = СписокАвтоподбораВариантовДомов(Идентификатор, Текст + "%"); СтандартнаяОбработка = (ДанныеВыбора.Количество() = 0); @@ -871,32 +877,14 @@ КонецФункции &НаКлиенте -Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") И ВыбранноеЗначение.Отказ Тогда - - Если ЗначениеЗаполнено(ВыбранноеЗначение.КраткоеПредставлениеОшибки) Тогда - КраткоеПредставлениеОшибки = ВыбранноеЗначение.КраткоеПредставлениеОшибки; - Иначе - КраткоеПредставлениеОшибки = НСтр("ru = 'Выбор из списка недоступен, т.к в адресном классификаторе отсутствует информация о адресных сведениях.'"); - КонецЕсли; - - ПоказатьПредупреждение(, КраткоеПредставлениеОшибки); - СтандартнаяОбработка = Ложь; +Процедура ИнформацияОЗагрузкеАдресныеСведенийОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Если НавигационнаяСсылкаФорматированнойСтроки = "load" Тогда + ОткрытьФормуЗагрузкиКлассификатора(); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ДомНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ПоказатьСписокДомов(Ложь); -КонецПроцедуры - -&НаКлиенте -Процедура СтроениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ПоказатьСписокДомов(Истина); -КонецПроцедуры - #КонецОбласти #Область ОбработчикиКомандФормы @@ -933,14 +921,13 @@ ОчиститьАдресКлиент(); ОбработкаИзмененияАдреса(); - Модифицированность = Истина; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьПоПочтовомуИндексу(Команда) - Если ЕстьКлассификатор И СтрДлина(Индекс) = 6 Тогда + Если ЕстьЗагруженныйКлассификатор И СтрДлина(Индекс) = 6 Тогда ФормаВыбораУлицПоИндексу(Индекс); КонецЕсли; @@ -950,56 +937,60 @@ Процедура ЗагрузитьКлассификатор(Команда) ОткрытьФормуЗагрузкиКлассификатора(); - + КонецПроцедуры &НаКлиенте Процедура ВвестиАдресВСвободнойФорме(Команда) - Если Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.НациональныйАдрес Тогда - ПоказатьАдресВСвободнойФорме(); - Иначе - Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.НациональныйАдрес; - Элементы.АдресВСвободнойФорме.Пометка = Ложь; + ЭтоНациональныйАдрес = РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.AddressType) + Или ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.AddressType); - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда - - Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда - // Попытка восстановить адрес по полям из представления. - НаселенныйПунктДетально = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса); - Иначе - - ЧастиАдреса = СтрРазделить(ПредставлениеАдреса, ","); - Если СтрСравнить(Страна, ЧастиАдреса[0]) = 0 Тогда - ЧастиАдреса.Удалить(0); - КонецЕсли; - - Если ЧастиАдреса.Количество() > 1 Тогда - ЧастьУлица = СокрЛП(ЧастиАдреса[ЧастиАдреса.Количество() - 1]); - ЧастиАдреса.Удалить(ЧастиАдреса.Количество() - 1); - Иначе - ЧастьУлица = ""; - КонецЕсли; - - ЧастьГород = СокрЛП(?(ЧастиАдреса.Количество() > 0, СтрСоединить(ЧастиАдреса, ","), "")); - - Если ЭтоСтранаУчастникЕАЭС(НаселенныйПунктДетально.Country) Тогда - НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(); - НаселенныйПунктДетально.Area = ЧастьГород; - Иначе - НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(); - НаселенныйПунктДетально.City = ЧастьГород; - КонецЕсли; - НаселенныйПунктДетально.Street = ЧастьУлица; - КонецЕсли; - - КонецЕсли; - - ОтобразитьВыданныйТипАдреса(НаселенныйПунктДетально.AddressType); + Если РазрешитьВводАдресаВСвободнойФорме Тогда + ПереключитьНаСтруктурированныйВвод(); + ИначеЕсли ЭтоНациональныйАдрес Тогда + ТекстВопроса = НСтр("ru='Ввести адрес в свободной форме? + |Адреса, введенные в свободной форме, могут не пройти проверку по адресному классификатору.'"); + Оповещение = Новый ОписаниеОповещения("ВвестиАдресВСвободнойФормеЗавершение", ЭтотОбъект); + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , НСтр("ru='Подтверждение'")); + Иначе + ПереключитьАдресВСвободнойФорму(); КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Комментарий = "", ВСтруктуру = Ложь) + + Адрес = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Перечисления.ТипыКонтактнойИнформации.Адрес, ВСтруктуру); + Адрес.comment = Комментарий; + Возврат Адрес; + +КонецФункции + +&НаКлиенте +Процедура ПоказатьАдресВСвободнойФорме() + + ОчиститьАдресКлиент(); + УдалитьСтрануИзПредставления(); + + НаселенныйПунктДетально.Value = ПредставлениеАдреса; + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + НаселенныйПунктДетально.Comment = Комментарий; + НаселенныйПунктДетально.Country = Строка(Страна); + + Элементы.СтранаВСвободнойФорме.Видимость = Не ВидКонтактнойИнформации.ТолькоНациональныйАдрес; + + Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.ВСвободнойФорме; + Элементы.АдресВСвободнойФорме.Пометка = Истина; + Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь; + Элементы.МуниципальноеДеление.Пометка = Ложь; + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + + ПоказатьПодсказкуПоТипАдреса(); + +КонецПроцедуры + &НаКлиенте Процедура АвторизацияНаСайтеПоддержкиПользователей(Команда) @@ -1011,6 +1002,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ДомНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ПоказатьСписокДомов(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура СтроениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ПоказатьСписокДомов(Истина); +КонецПроцедуры &НаКлиенте Процедура ИсторияИзменений(Команда) @@ -1059,14 +1059,14 @@ &НаКлиенте Процедура АдминистративноТерриториальноеДеление(Команда) - ОтобразитьВыданныйТипАдреса(РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес()); + ПереключитьНаСтруктурированныйВвод(РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес()); КонецПроцедуры &НаКлиенте Процедура МуниципальноеДеление(Команда) - ОтобразитьВыданныйТипАдреса(РаботаСАдресамиКлиентСервер.МуниципальныйАдрес()); + ПереключитьНаСтруктурированныйВвод(РаботаСАдресамиКлиентСервер.МуниципальныйАдрес()); КонецПроцедуры @@ -1097,6 +1097,13 @@ ТекущийЭлемент = Элементы[ИмяТекущего]; КонецЕсли; + Если НайденныеСтроки[0].Тип = "Помещение" Тогда + Значение = ?(НайденныеСтроки[0].Значение <> НСтр("ru='Другое'"), НайденныеСтроки[0].Значение, ""); + НаселенныйПунктДетально.Apartments.Добавить(ЗначениеСтроенияИлиПомещения(Значение, ЭтотОбъект[ИмяТекущего])); + Иначе + НаселенныйПунктДетально.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(НайденныеСтроки[0].Значение, ЭтотОбъект[ИмяТекущего])); + КонецЕсли; + ОбновитьМенюДобавленияСтроенийИПомещений(); КонецПроцедуры @@ -1105,65 +1112,6 @@ #Область СлужебныеПроцедурыИФункции -&НаКлиенте -Процедура ОткрытьФормуЗагрузкиКлассификатора() - - Перем ДополнительныеПараметры, СведенияОРегионе; - - ДополнительныеПараметры = Новый Структура(); - - Если ТипЗнч(НаселенныйПунктДетально) = Тип("Структура") И НаселенныйПунктДетально.Свойство("Area") Тогда - СведенияОРегионе = СведенияОРегионе(НаселенныйПунктДетально.Area + " " + НаселенныйПунктДетально.AreaType); - ДополнительныеПараметры.Вставить("КодРегионаДляЗагрузки", СведенияОРегионе.КодСубъектаРФ); - КонецЕсли; - - ЗагрузитьАдресныйКлассификатор(ДополнительныеПараметры); - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, ВСтруктуру = Ложь) - - Адрес = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Перечисления.ТипыКонтактнойИнформации.Адрес, ВСтруктуру); - Возврат Адрес; - -КонецФункции - - -&НаКлиенте -Процедура ПоказатьАдресВСвободнойФорме() - - ОчиститьАдресКлиент(); - УдалитьСтрануИзПредставления(); - НаселенныйПунктДетально.Value = ПредставлениеАдреса; - НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); - НаселенныйПунктДетально.Comment = Комментарий; - НаселенныйПунктДетально.Country = Строка(Страна); - - Элементы.СтранаВСвободнойФорме.Видимость = Не ВидКонтактнойИнформации.ТолькоНациональныйАдрес; - - Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.ВСвободнойФорме; - Элементы.АдресВСвободнойФорме.Пометка = Истина; - Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь; - Элементы.МуниципальноеДеление.Пометка = Ложь; - НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); - - ПоказатьПодсказкуПоТипАдреса(); - -КонецПроцедуры - -&НаКлиенте -Процедура УдалитьСтрануИзПредставления() - - ПредставлениеАдреса = СокрЛП(ПредставлениеАдреса); - Если СтрНачинаетсяС(ВРег(ПредставлениеАдреса), ВРег(Страна)) Тогда - Позиция = СтрДлина(Страна) + 1; - Позиция = ?(Сред(ПредставлениеАдреса, Позиция, 1) = ",", Позиция + 1, Позиция); - ПредставлениеАдреса = СокрЛП(Сред(ПредставлениеАдреса, Позиция)); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Функция ВариантыУлицПоТексту(Знач Текст) @@ -1195,6 +1143,70 @@ КонецПроцедуры +&НаКлиенте +Процедура ВвестиАдресВСвободнойФормеЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + ПереключитьАдресВСвободнойФорму(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПереключитьАдресВСвободнойФорму() + + Элементы.ПроверитьЗаполнениеАдреса.Доступность = Ложь; + + Если Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.НациональныйАдрес Тогда + РазрешитьВводАдресаВСвободнойФорме = Истина; + ПоказатьАдресВСвободнойФорме(); + Возврат; + КонецЕсли; + + РазрешитьВводАдресаВСвободнойФорме = Ложь; + Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.НациональныйАдрес; + + Если Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда + ОтобразитьВыданныйТипАдреса(НаселенныйПунктДетально.AddressType); + Возврат; + КонецЕсли; + + Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда + // Попытка восстановить адрес по полям из представления. + НаселенныйПунктДетально = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Комментарий, Истина); + ОтобразитьВыданныйТипАдреса(НаселенныйПунктДетально.AddressType); + Возврат; + КонецЕсли; + + ЧастиАдреса = СтрРазделить(ПредставлениеАдреса, ","); + Если СтрСравнить(Страна, ЧастиАдреса[0]) = 0 Тогда + ЧастиАдреса.Удалить(0); + КонецЕсли; + + Если ЧастиАдреса.Количество() > 1 Тогда + ЧастьУлица = СокрЛП(ЧастиАдреса[ЧастиАдреса.Количество() - 1]); + ЧастиАдреса.Удалить(ЧастиАдреса.Количество() - 1); + Иначе + ЧастьУлица = ""; + КонецЕсли; + + ЧастьГород = СокрЛП(?(ЧастиАдреса.Количество() > 0, СтрСоединить(ЧастиАдреса, ","), "")); + + Если ЭтоСтранаУчастникЕАЭС(НаселенныйПунктДетально.Country) Тогда + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(); + НаселенныйПунктДетально.Area = ЧастьГород; + Иначе + НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(); + НаселенныйПунктДетально.City = ЧастьГород; + КонецЕсли; + НаселенныйПунктДетально.Street = ЧастьУлица; + + ОтобразитьВыданныйТипАдреса(НаселенныйПунктДетально.AddressType); + +КонецПроцедуры + &НаКлиенте Процедура ОчиститьНаселенныйПункт() @@ -1235,8 +1247,7 @@ Процедура ПереопределитьТипаАдресаПоСтране(Страна, НаселенныйПунктДетально) Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда - Если СтрСравнить(НаселенныйПунктДетально.AddressType, УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС()) = 0 - Или СтрСравнить(НаселенныйПунктДетально.AddressType, УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес()) = 0 Тогда + Если СтрСравнить(НаселенныйПунктДетально.AddressType, РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес()) <> 0 Тогда НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); КонецЕсли; ИначеЕсли ЭтоСтранаУчастникЕАЭС(Страна) Тогда @@ -1244,7 +1255,7 @@ Иначе НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(); КонецЕсли; - + КонецПроцедуры &НаКлиенте @@ -1297,7 +1308,7 @@ КонецЦикла; - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоИностранныйАдрес(НаселенныйПунктДетально.AddressType) + Если ЭтоИностранныйАдрес(НаселенныйПунктДетально.AddressType) И НаселенныйПунктДетально.Свойство("Street") Тогда СписокЭлементовАдреса = Новый Массив; @@ -1343,24 +1354,29 @@ КонецПроцедуры &НаКлиенте -Процедура ОтобразитьВыданныйТипАдреса(ВыбранныйТипАдреса) +Процедура ОтобразитьВыданныйТипАдреса(ВыбранныйТипАдреса = Неопределено) - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) И ПустаяСтрока(НаселенныйПунктДетально.Area) Тогда Если РаботаСАдресамиКлиентСервер.ЭтоОсновнаяСтрана(Страна) Тогда // Попытка восстановить адрес по полям из представления. - НаселенныйПунктДетально = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Истина); + НаселенныйПунктДетально = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, Комментарий); Иначе + + УдалитьСтрануИзПредставления(); + НаселенныйПунктДетально.Street = ПредставлениеАдреса; + НаселенныйПунктДетально.AddressType = ?(ЭтоСтранаУчастникЕАЭС(Страна), + УправлениеКонтактнойИнформациейКлиентСервер.АдресЕАЭС(), + УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес()); КонецЕсли; - Комментарий = НаселенныйПунктДетально.comment; - РазрешитьВводАдресаВСвободнойФорме = Ложь; - КонецЕсли; - НаселенныйПунктДетально.AddressType = ВыбранныйТипАдреса; + Если ВыбранныйТипАдреса <> Неопределено Тогда + НаселенныйПунктДетально.AddressType = ВыбранныйТипАдреса; + КонецЕсли; ОбработкаИзмененияАдреса(); Если Элементы.АдресПредставлениеКомментарий.ТекущаяСтраница = Элементы.ВСвободнойФорме Тогда @@ -1372,10 +1388,22 @@ КонецПроцедуры +&НаКлиенте +Процедура УдалитьСтрануИзПредставления() + + ПредставлениеАдреса = СокрЛП(ПредставлениеАдреса); + Если СтрНачинаетсяС(ВРег(ПредставлениеАдреса), ВРег(Страна)) Тогда + Позиция = СтрДлина(Страна) + 1; + Позиция = ?(Сред(ПредставлениеАдреса, Позиция, 1) = ",", Позиция + 1, Позиция); + ПредставлениеАдреса = СокрЛП(Сред(ПредставлениеАдреса, Позиция)); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПоказатьСписокДомов(ВключитьОтбор) - Идентификатор = РаботаСАдресамиКлиентСервер.ИдентификаторАдреса(НаселенныйПунктДетально, Истина); + Идентификатор = ИдентификаторАдреса(НаселенныйПунктДетально, Истина); Если ЗначениеЗаполнено(Идентификатор) И ЕстьСписокДомов(Идентификатор) Тогда ПараметрыФормы = Новый Структура("Идентификатор, Дом, Строение", Идентификатор, Дом, Строение); @@ -1423,19 +1451,21 @@ Процедура ПодтвердитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт Если Модифицированность Тогда // При немодифицированности работает как "отмена". + Контекст = Новый Структура("ВидКонтактнойИнформации, НаселенныйПунктДетально, ОсновнаяСтрана, Страна"); ЗаполнитьЗначенияСвойств(Контекст, ЭтотОбъект); - Результат = РезультатаВыбораПоОбновлениюФлагов(Контекст, ВозвращатьСписокЗначений); + Результат = РезультатВыбора(Контекст, ВозвращатьСписокЗначений); // Флаги вида были прочитаны заново. ВидКонтактнойИнформации = Контекст.ВидКонтактнойИнформации; - Если (ВидКонтактнойИнформации.ПроверятьКорректность - И Не РазрешитьВводАдресаВСвободнойФорме - Или ВидКонтактнойИнформации.МеждународныйФорматАдреса) + Если (ВидКонтактнойИнформации.ПроверятьКорректность И Не РазрешитьВводАдресаВСвободнойФорме + Или ВидКонтактнойИнформации.МеждународныйФорматАдреса) И Результат.ОшибкиЗаполнения.Количество() > 0 Тогда - СообщитьОбОшибкахЗаполнения(Результат.ОшибкиЗаполнения, Ложь); - Возврат; + + СообщитьОбОшибкахЗаполнения(Результат.ОшибкиЗаполнения, Ложь); + Возврат; + КонецЕсли; Результат = Результат.ДанныеВыбора; @@ -1512,7 +1542,6 @@ Отбор = Новый Структура("ДействуетС, Вид", АдресДействуетС, Результат.Вид); СтрокиСАдресом = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); - ПредставлениеРедактируемогоАдреса = ?(СтрокиСАдресом.Количество() > 0, СтрокиСАдресом[0].Представление, ""); Если ДанныеБылиИзменены Тогда НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, Результат); @@ -1606,8 +1635,6 @@ КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(СтрокаКонтактнойИнформации); КонецЦикла; - ЭтоИсторическаяКонтактнаяИнформация = Ложь; - ПараметрыОбновления = Новый Структура; Для Каждого СтрокаКонтактнойИнформации Из Результат.История Цикл ДанныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаКонтактнойИнформации); @@ -1649,18 +1676,13 @@ КонецПроцедуры &НаСервереБезКонтекста -Функция РезультатаВыбораПоОбновлениюФлагов(Контекст, ВозвращатьСписокЗначений = Ложь) +Функция РезультатВыбора(Контекст, ВозвращатьСписокЗначений = Ложь) + // Обновляем некоторые флаги ЗначениеФлагов = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Контекст.ВидКонтактнойИнформации.Ссылка); Контекст.ВидКонтактнойИнформации.ТолькоНациональныйАдрес = ЗначениеФлагов.ТолькоНациональныйАдрес; Контекст.ВидКонтактнойИнформации.ПроверятьКорректность = ЗначениеФлагов.ПроверятьКорректность; - - Возврат РезультатВыбора(Контекст, ВозвращатьСписокЗначений); -КонецФункции - -&НаСервереБезКонтекста -Функция РезультатВыбора(Контекст, ВозвращатьСписокЗначений = Ложь) НаселенныйПунктДетально = Контекст.НаселенныйПунктДетально; Результат = Новый Структура("ДанныеВыбора, ОшибкиЗаполнения"); @@ -1675,9 +1697,7 @@ ДанныеВыбора = НаселенныйПунктДетально; КонецЕсли; - Если ТипЗнч(ДанныеВыбора) = Тип("Структура") Тогда - Если ПустаяСтрока(ДанныеВыбора.countryCode) Тогда СведенияОСтране = УправлениеКонтактнойИнформацией.ДанныеСтраныМира(Неопределено, ДанныеВыбора.Country); Если СведенияОСтране <> Неопределено Тогда @@ -1798,8 +1818,8 @@ &НаКлиенте Процедура ПослеЗагрузкиАдресногоКлассификатора(Результат, ДополнительныеПараметры) Экспорт - Если Результат <> Неопределено Тогда - СообщениеОНеобходимостиОбновленияКлассификатора(НаселенныйПунктДетально.Регион.Идентификатор); + Если ТипЗнч(НаселенныйПунктДетально) = Тип("Структура") И НаселенныйПунктДетально.Свойство("areaId") Тогда + СообщениеОНеобходимостиОбновленияКлассификатора(НаселенныйПунктДетально.areaId); КонецЕсли; КонецПроцедуры @@ -1833,32 +1853,33 @@ НаселенныйПунктДетально.AddressType = РаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); КонецЕсли; - Элементы.Улица.Заголовок = НСтр("ru='Улица'"); + Элементы.Улица.Заголовок = НСтр("ru='Улица'"); Элементы.ОКТМО.Видимость = ВидКонтактнойИнформации.УказыватьОКТМО; - ВебСервисИспользуется = КлассификаторДоступен; - АвтоподборДоступен = КлассификаторДоступен Или ЕстьКлассификатор; + ВебСервисИспользуется = ВебКлассификаторДоступен; + АвтоподборДоступен = ВебКлассификаторДоступен Или ЕстьЗагруженныйКлассификатор; ВидимостьСтроений = Истина; Элементы.ГруппаДобавлениеСтроения.Видимость = Истина; Элементы.ГруппаДобавлениеПомещения.Видимость = Истина; - Элементы.Дом.КнопкаВыбора = Истина; + Элементы.Дом.КнопкаВыбора = АвтоподборДоступен; + Элементы.Улица.КнопкаВыбора = АвтоподборДоступен; Элементы.НаселенныйПункт.КнопкаВыбора = Истина; Элементы.Строение.КнопкаВыбора = Ложь; - Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru='Введите первые буквы названия населенного пункта'"); - Элементы.Улица.ПодсказкаВвода = НСтр("ru='Введите первые буквы названия улицы'"); + Элементы.НаселенныйПункт.ПодсказкаВвода = НСтр("ru='Введите первые буквы названия населенного пункта'"); + Элементы.Улица.ПодсказкаВвода = НСтр("ru='Введите первые буквы названия улицы'"); Иначе - Элементы.ГруппаДобавлениеСтроения.Видимость = Ложь; + Элементы.ГруппаДобавлениеСтроения.Видимость = Ложь; Элементы.ГруппаДобавлениеПомещения.Видимость = Ложь; Если ЭтоСтранаУчастникЕАЭС И Не МеждународныйФорматАдреса Тогда - Элементы.Улица.Заголовок = НСтр("ru='Улица'"); + Элементы.Улица.Заголовок = НСтр("ru='Улица'"); Элементы.НаселенныйПункт.КнопкаВыбора = Истина; ВидимостьСтроений = Истина; Элементы.Дом.КнопкаВыбора = Ложь; Элементы.Строение.КнопкаВыбора = Ложь; Иначе - Элементы.Улица.Заголовок = НСтр("ru='Адрес'"); + Элементы.Улица.Заголовок = НСтр("ru='Адрес'"); Элементы.НаселенныйПункт.КнопкаВыбора = Ложь; Элементы.Улица.КнопкаВыбора = Ложь; ВидимостьСтроений = Ложь; @@ -1867,7 +1888,7 @@ Элементы.ОКТМО.Видимость = Ложь; Элементы.ПроверитьЗаполнениеАдреса.Доступность = Ложь; ВебСервисИспользуется = Ложь; - АвтоподборДоступен = Ложь; + АвтоподборДоступен = Ложь; Элементы.НаселенныйПункт.ПодсказкаВвода = ""; Элементы.Улица.ПодсказкаВвода = ""; @@ -1876,7 +1897,6 @@ // Проверять, вводить в свободной форме и искать по индексу можем только российские адреса. Элементы.Улица.МногострочныйРежим = НЕ ЭтоНациональныйАдрес; Элементы.ГруппаСтроенияИИнформация.Видимость = ВидимостьСтроений; - Элементы.Улица.КнопкаВыбора = ЭтоНациональныйАдрес; Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоНациональныйАдрес И АвтоподборДоступен; Элементы.ЗаполнитьПоПочтовомуИндексу.Доступность = ЭтоНациональныйАдрес; Элементы.МуниципальноеДеление.Доступность = ЭтоНациональныйАдрес; @@ -1895,7 +1915,7 @@ Процедура ОпределитьОтображениеЭлементовНаФорме() // Разовые настройки отображения формы. - Если Не ЕстьКлассификатор Тогда + Если Не ЕстьЗагруженныйКлассификатор Тогда Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь; Элементы.Улица.КнопкаВыбора = Ложь; Элементы.Дом.КнопкаВыбора = Ложь; @@ -1904,7 +1924,7 @@ Элементы.Улица.ПодсказкаВвода = НСтр("ru='Введите название улицы'"); КонецЕсли; - Если КлассификаторДоступен Или МеждународныйФорматАдреса Тогда + Если ВебКлассификаторДоступен Или МеждународныйФорматАдреса Тогда Элементы.ГруппаИнформация.Видимость = Ложь; @@ -1957,7 +1977,7 @@ КодСтраны = ДанныеСтраны.Код; КонецЕсли; - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(ДанныеАдреса.AddressType)Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(ДанныеАдреса.AddressType) Тогда РазрешитьВводАдресаВСвободнойФорме = Истина; КонецЕсли; @@ -2042,6 +2062,10 @@ ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипПомещения,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипПомещения.СписокВыбора.ВыгрузитьЗначения()); НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипПомещенияПриИзменении"); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + НовыйТип.КнопкаВыбора = Истина; + НовыйТип.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто; + КонецЕсли; НовыйЭлемент = Элементы.Добавить("Помещение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Помещение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); @@ -2057,6 +2081,10 @@ ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипСтроения,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипСтроения.СписокВыбора.ВыгрузитьЗначения()); НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипСтроенияПриИзменении"); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + НовыйТип.КнопкаВыбора = Истина; + НовыйТип.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто; + КонецЕсли; НовыйЭлемент = Элементы.Добавить("Строение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Строение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); @@ -2099,6 +2127,11 @@ КонецФункции +&НаКлиенте +Процедура ОбновитьДополнительныеЗдания() + ОтобразитьДополнительныеЗдания(); +КонецПроцедуры + &НаСервере Функция ОтобразитьДополнительныеЗдания(НаселенныйПунктДетальноПереопределение = Неопределено) @@ -2166,6 +2199,10 @@ ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипСтроения, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипСтроения.СписокВыбора.ВыгрузитьЗначения()); НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипСтроенияПриИзменении"); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + НовыйТип.КнопкаВыбора = Истина; + НовыйТип.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто; + КонецЕсли; НовыйЭлемент = Элементы.Добавить("Строение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Строение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); @@ -2212,6 +2249,10 @@ ЗаполнитьЗначенияСвойств(НовыйТип, Элементы.ТипПомещения, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); НовыйТип.СписокВыбора.ЗагрузитьЗначения(Элементы.ТипПомещения.СписокВыбора.ВыгрузитьЗначения()); НовыйТип.УстановитьДействие("ПриИзменении", "Подключаемый_ТипПомещенияПриИзменении"); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + НовыйТип.КнопкаВыбора = Истина; + НовыйТип.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.Авто; + КонецЕсли; НовыйЭлемент = Элементы.Добавить("Помещение" + Идентификатор, Тип("ПолеФормы"), НоваяГруппа); ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Помещение,, "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); @@ -2266,7 +2307,6 @@ АдресНаДату = ДействуетС; Элементы.ГруппаИсторическийАдрес.Видимость = ЗначениеЗаполнено(ДействуетС); Иначе - ДействуетДо = Неопределено; Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); @@ -2606,7 +2646,7 @@ Элементы.СообщениеОбОшибке.Видимость = Истина; // Сообщаем список с привязкой к полям. Для Каждого Элемент Из СписокОшибок Цикл - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( Элемент.Представление,,, Элемент.Значение); КонецЦикла; @@ -2649,7 +2689,7 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура НаселенныйПунктУстановитьПоляАдреса(НаселенныйПунктДетально, Знач ВыбранноеЗначение) +Процедура НаселенныйПунктУстановитьПоляАдреса(НаселенныйПунктДетально, Знач ВыбранноеЗначение, Знач ВключатьУлица) Если ВыбранноеЗначение.Свойство("Адрес") И ЗначениеЗаполнено(ВыбранноеЗначение.Адрес) Тогда ПолученныйАдрес = УправлениеКонтактнойИнформациейСлужебный.СтрокаJSONВСтруктуру(ВыбранноеЗначение.Адрес); @@ -2657,7 +2697,11 @@ ПолученныйАдрес = ОпределитьАдресПоИдентификатору(ВыбранноеЗначение); КонецЕсли; - ИменаУровнейНаселенногоПункта = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса("Все", ЗначениеЗаполнено(ПолученныйАдрес.street)); + Если Не ВключатьУлица Тогда + ВключатьУлица = ЗначениеЗаполнено(ПолученныйАдрес.street); + КонецЕсли; + + ИменаУровнейНаселенногоПункта = РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса("Все", ВключатьУлица); Для каждого ИмяУровня Из ИменаУровнейНаселенногоПункта Цикл Если ПолученныйАдрес.Свойство(ИмяУровня) Тогда НаселенныйПунктДетально[ИмяУровня] = ПолученныйАдрес[ИмяУровня]; @@ -2706,7 +2750,7 @@ &НаКлиенте Процедура ПроверитьДоступностьКлассификатора() - Если Не ЕстьКлассификатор Тогда + Если Не ЕстьЗагруженныйКлассификатор Тогда Возврат; КонецЕсли; @@ -2761,7 +2805,7 @@ НеобходимоПерерисоватьПоляДомов = НаселенныйПунктДетально.Buildings.Количество() > 1; НаселенныйПунктДетально.ZIPcode = ВыбранноеЗначение.Индекс; - НаселенныйПунктДетально.oktmo = ВыбранноеЗначение.ОКТМО; + НаселенныйПунктДетально.OKTMO = ВыбранноеЗначение.ОКТМО; НаселенныйПунктДетально.okato = ВыбранноеЗначение.ОКАТО; НаселенныйПунктДетально.ifnsFLCode = ВыбранноеЗначение.КодИФНСФЛ; НаселенныйПунктДетально.ifnsULCode = ВыбранноеЗначение.КодИФНСЮЛ; @@ -2796,8 +2840,8 @@ // отрисовка - Индекс = НаселенныйПунктДетально.ZIPcode; - ОКТМО = НаселенныйПунктДетально.oktmo; + Индекс = НаселенныйПунктДетально.ZipCode; + ОКТМО = НаселенныйПунктДетально.OKTMO; Дом = НаселенныйПунктДетально.HouseNumber; Если ЗначениеЗаполнено(НаселенныйПунктДетально.HouseType) Тогда @@ -2811,7 +2855,7 @@ НеобходимоПерерисоватьПоляДомов = Истина; КонецЕсли; Иначе - Строение= ""; + Строение = ""; КонецЕсли; Если НеобходимоПерерисоватьПоляДомов Тогда @@ -2827,11 +2871,6 @@ Возврат ВРег(Лев(Строка, 1)) + Сред(НРег(Строка), 2); // Использовать ТРег нельзя. КонецФункции -&НаКлиенте -Процедура ОбновитьДополнительныеЗдания() - ОтобразитьДополнительныеЗдания(); -КонецПроцедуры - &НаКлиенте Процедура ОтобразитьДополнительныеЗданияКлиент() ИмяТекущего = ОтобразитьДополнительныеЗдания(); @@ -2890,10 +2929,10 @@ // Возможно пустые значения, чтобы не смущали. Если ПустаяСтрока(Дом) И ПустаяСтрока(ТипДома) Тогда - ТипДома = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипДома); + ТипДома = ПервыйИлиПустой(Элементы.ТипДома); КонецЕсли; Если ПустаяСтрока(Строение) И ПустаяСтрока(ТипСтроения) Тогда - ТипСтроения = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипСтроения); + ТипСтроения = ПервыйИлиПустой(Элементы.ТипСтроения); КонецЕсли; Если Параметры.Свойство("ТипПомещения") @@ -2902,11 +2941,11 @@ КонецЕсли; Если ПустаяСтрока(Помещение) И ПустаяСтрока(ТипПомещения) Тогда - ТипПомещения = УправлениеКонтактнойИнформациейКлиентСервер.ПервыйИлиПустой(Элементы.ТипПомещения); + ТипПомещения = ПервыйИлиПустой(Элементы.ТипПомещения); КонецЕсли; Для каждого ВариантДанных Из ВариантыДанныхСтроение.ВариантыТипа Цикл - ДобавитьОписаниеСтроенияИлиПомещения(ВариантДанных, "Строение"); + ДобавитьОписаниеСтроенияИлиПомещения(ВариантДанных, "Строение"); КонецЦикла; Для каждого ВариантДанных Из ВариантыДанныхПомещение.ВариантыТипа Цикл @@ -2921,6 +2960,30 @@ КонецПроцедуры +// Возвращает первый элемент из списка. +// +// Параметры: +// СписокДанных - СписокЗначений, Массив, ПолеФормы. +// +// Возвращаемое значение: +// Произвольный - первый элемент. +// Неопределено - нет первого элемента. +// +&НаСервереБезКонтекста +Функция ПервыйИлиПустой(Знач СписокДанных) + + ТипСписка = ТипЗнч(СписокДанных); + Если ТипСписка = Тип("СписокЗначений") И СписокДанных.Количество() > 0 Тогда + Возврат СписокДанных[0].Значение; + ИначеЕсли ТипСписка = Тип("Массив") И СписокДанных.Количество() > 0 Тогда + Возврат СписокДанных[0]; + ИначеЕсли ТипСписка = Тип("ПолеФормы") Тогда + Возврат ПервыйИлиПустой(СписокДанных.СписокВыбора); + КонецЕсли; + + Возврат Неопределено; +КонецФункции + &НаСервереБезКонтекста Функция СведенияОРегионе(НаименованиеСубъектаРФ) @@ -3010,6 +3073,11 @@ КонецПроцедуры +&НаКлиенте +Функция ЭтоИностранныйАдрес(ТипАдреса) + Возврат СтрСравнить(УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(), ТипАдреса) = 0; +КонецФункции + // Предлагает загрузить адресный классификатор. // // Параметры: @@ -3017,20 +3085,19 @@ // Регион - Число, Строка - Код или название региона для загрузки. // &НаКлиенте -Процедура ПредложениеЗагрузкиКлассификатора(Знач Текст = "", Знач ВыбранноеЗначение = Неопределено) +Процедура ПредложениеЗагрузкиКлассификатора(Знач Текст = "", Знач ДанныеОбАдресе = Неопределено) Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда Возврат; КонецЕсли; - Регион = ?(ВыбранноеЗначение <> Неопределено, ВыбранноеЗначение.Представление, ""); - НеЗагружатьАдресныйКлассификатор = ПараметрыПриложения.Получить("АдресныйКлассификатор.НеЗагружатьКлассификатор"); Если НеЗагружатьАдресныйКлассификатор = Неопределено ИЛИ НеЗагружатьАдресныйКлассификатор = Ложь Тогда + Регион = ДанныеОбАдресе.Представление; ТипПараметраРегиона = ТипЗнч(Регион); - ПараметрыФормы = Новый Структура; + ПараметрыФормы = Новый Структура; ПараметрыЗагрузки = Новый Структура; - ПараметрыЗагрузки.Вставить("ВыбранноеЗначение", ВыбранноеЗначение); + ПараметрыЗагрузки.Вставить("ДанныеОбАдресе", ДанныеОбАдресе); ПараметрыФормы.Вставить("ТекстПредупреждения", Текст); Если ТипПараметраРегиона = Тип("Число") Тогда @@ -3043,6 +3110,8 @@ Оповещение = Новый ОписаниеОповещения("ПредложениеЗагрузкиКлассификатораЗавершение", ЭтотОбъект, ПараметрыЗагрузки); ОткрытьФорму("Обработка.РасширенныйВводКонтактнойИнформации.Форма.ЗагрузкаАдресногоКлассификатора", ПараметрыФормы, ЭтотОбъект,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Иначе + УстановитьНаселенныйПунктПослеВыбора(ДанныеОбАдресе); КонецЕсли; КонецПроцедуры @@ -3051,10 +3120,21 @@ Процедура ПредложениеЗагрузкиКлассификатораЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + УстановитьНаселенныйПунктПослеВыбора(ДополнительныеПараметры.ДанныеОбАдресе); Возврат; КонецЕсли; ЗагрузитьАдресныйКлассификатор(ДополнительныеПараметры); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьНаселенныйПунктПослеВыбора(Знач ДанныеОбАдресе) + + НаселенныйПунктУстановитьПоляАдреса(НаселенныйПунктДетально, ДанныеОбАдресе, Ложь); + ОбработкаИзмененияАдреса(); + УстановитьФлагиВМенюПоТипуАдреса(); + КонецПроцедуры // Загружает адресный классификатор. @@ -3205,7 +3285,7 @@ Если РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаМуниципальныйАдрес; - ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда + ИначеЕсли ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаАдминистративноТерриториальныйАдрес; Иначе Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаДругойАдрес; @@ -3216,7 +3296,7 @@ &НаКлиенте Процедура ОбработкаИзмененияАдреса() - НаселенныйПункт = РаботаСАдресамиКлиентСервер.ПредставлениеНаселенногоПунктаАдреса(НаселенныйПунктДетально); + НаселенныйПункт = ПредставлениеНаселенногоПунктаАдреса(НаселенныйПунктДетально); Если СтрСравнить(Страна, НаселенныйПунктДетально.Country) <> 0 Тогда УстановитьСтрану(НаселенныйПунктДетально.Country); @@ -3267,8 +3347,30 @@ Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; КонецЕсли; + Модифицированность = Истина; + КонецПроцедуры +&НаКлиенте +Функция ПредставлениеНаселенногоПунктаАдреса(Адрес) + + СписокЗаполненныхУровней = Новый Массив; + + Для каждого ИмяУровня Из РаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(Адрес.AddressType, Ложь) Цикл + + Если ЗначениеЗаполнено(Адрес[ИмяУровня]) Тогда + Если НЕ РаботаСАдресамиКлиентСервер.ПредставлениеУровняБезСокращения(ИмяУровня) Тогда + СписокЗаполненныхУровней.Добавить(Адрес[ИмяУровня] + " " + Адрес[ИмяУровня + "Type"]); + Иначе + СписокЗаполненныхУровней.Добавить(Адрес[ИмяУровня]); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат СтрСоединить(СписокЗаполненныхУровней, ", "); + +КонецФункции + &НаКлиенте Процедура УстановитьФлагиВМенюПоТипуАдреса() @@ -3277,20 +3379,59 @@ Элементы.МуниципальноеДеление.Пометка = Ложь; Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь; ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда - Элементы.АдресВСвободнойФорме.Пометка = Ложь; - Элементы.МуниципальноеДеление.Пометка = Истина; + Элементы.АдресВСвободнойФорме.Пометка = Ложь; + Элементы.МуниципальноеДеление.Пометка = Истина; Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь; - ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда - Элементы.АдресВСвободнойФорме.Пометка = Ложь; - Элементы.МуниципальноеДеление.Пометка = Ложь; + Элементы.ПроверитьЗаполнениеАдреса.Доступность = Истина; + ИначеЕсли ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда + Элементы.АдресВСвободнойФорме.Пометка = Ложь; + Элементы.МуниципальноеДеление.Пометка = Ложь; Элементы.АдминистративноТерриториальноеДеление.Пометка = Истина; + Элементы.ПроверитьЗаполнениеАдреса.Доступность = Истина; Иначе Элементы.МуниципальноеДеление.Пометка = Ложь; Элементы.АдминистративноТерриториальноеДеление.Пометка = Ложь; + Элементы.АдресВСвободнойФорме.Пометка = Ложь; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПереключитьНаСтруктурированныйВвод(ТипАдреса = Неопределено) + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда + РазрешитьВводАдресаВСвободнойФорме = Ложь; + ТекстВопроса = НСтр("ru='Изменения, введенные вручную, будут потеряны. + |Исходный адрес будет перемещен в комментарий. + |Продолжить?'"); + + ДополнительныеПараметры = Новый Структура("ТипАдреса", ТипАдреса); + Оповещение = Новый ОписаниеОповещения("ПереключитьНаСтруктурированныйВводЗавершение", ЭтотОбъект, ДополнительныеПараметры ); + + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет,,, НСтр("ru='Подтверждение'")); + Иначе + ОтобразитьВыданныйТипАдреса(ТипАдреса); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПереключитьНаСтруктурированныйВводЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + Комментарий = ?(НЕ ПустаяСтрока(Комментарий), Комментарий + Символы.ПС, "") + + НСтр("ru = 'Исходный адрес:'") + " " + ПредставлениеАдреса; + НаселенныйПунктДетально.comment = Комментарий; + + ПодключитьОбработчикОжидания("УстановитьПиктограммуКомментария", 0.1, Истина); + + ОтобразитьВыданныйТипАдреса(ДополнительныеПараметры.ТипАдреса); + +КонецПроцедуры + &НаКлиенте Процедура ОчиститьИдентификаторыАдреса() Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл @@ -3311,12 +3452,82 @@ КонецПроцедуры &НаКлиенте -Процедура ИнформацияОЗагрузкеАдресныеСведенийОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - Если НавигационнаяСсылкаФорматированнойСтроки = "load" Тогда - ОткрытьФормуЗагрузкиКлассификатора(); +Функция ИдентификаторАдреса(Адрес, ВключатьУлицу) + + ИдентификаторАдреса = Неопределено; + МаксимальныйУровень = 0; + Уровни = СопоставлениеУровняАдресаИНаименования(Адрес.AddressType, ВключатьУлицу); + + Для каждого Уровень Из Уровни Цикл + УровеньКлюч = ?(Уровень.Ключ < 10, Уровень.Ключ * 10, Уровень.Ключ); + Если УровеньКлюч > МаксимальныйУровень + И Адрес.Свойство(Уровень.Значение + "Id") + И ЗначениеЗаполнено(Адрес[Уровень.Значение + "Id"]) Тогда + ИдентификаторАдреса = Адрес[Уровень.Значение + "Id"]; + МаксимальныйУровень = УровеньКлюч; + КонецЕсли; + + КонецЦикла; + + Возврат ИдентификаторАдреса; + +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиИндексУДома(АдресныйОбъект, Дом) + + ПолныйСписокДомов = Обработки.РасширенныйВводКонтактнойИнформации.СписокДомов(АдресныйОбъект, Дом, 1); + Если ПолныйСписокДомов.Количество() > 0 Тогда + Возврат ПолныйСписокДомов[0].Значение.Индекс; КонецЕсли; + Возврат ""; + +КонецФункции + +&НаКлиенте +Функция СопоставлениеУровняАдресаИНаименования(ТипАдреса, ВключатьУлицу) + Уровни = Новый Соответствие; + + Уровни.Вставить(1, "Area"); + Если РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(ТипАдреса) Тогда + Уровни.Вставить(31, "MunDistrict"); + Уровни.Вставить(41, "Settlement"); + Иначе + Уровни.Вставить(3, "District"); + Уровни.Вставить(4, "City"); + КонецЕсли; + + Уровни.Вставить(5, "CityDistrict"); + Уровни.Вставить(6, "Locality"); + Уровни.Вставить(65, "Territory"); + + Если ВключатьУлицу Тогда + Уровни.Вставить(7, "Street"); + КонецЕсли; + + Возврат Уровни; +КонецФункции + +&НаКлиенте +Функция ЭтоАдминистративноТерриториальныйАдрес(ТипАдреса) + Возврат СтрСравнить(ТипАдреса, РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес()) = 0; +КонецФункции + +&НаКлиенте +Процедура ОткрытьФормуЗагрузкиКлассификатора() + + Перем ДополнительныеПараметры, СведенияОРегионе; + + ДополнительныеПараметры = Новый Структура(); + + Если ТипЗнч(НаселенныйПунктДетально) = Тип("Структура") И НаселенныйПунктДетально.Свойство("Area") Тогда + СведенияОРегионе = СведенияОРегионе(НаселенныйПунктДетально.Area + " " + НаселенныйПунктДетально.AreaType); + ДополнительныеПараметры.Вставить("КодРегионаДляЗагрузки", СведенияОРегионе.КодСубъектаРФ); + КонецЕсли; + + ЗагрузитьАдресныйКлассификатор(ДополнительныеПараметры); + КонецПроцедуры #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form index 59abe6616..9ecc385de 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Form.form @@ -720,6 +720,11 @@ true auto true + + + ГруппаКоманднаяПанель + + Объект 1 diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl index 7234273df..5ad7cc09b 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Параметры формы: // Индекс - Число - Почтовый индекс для поиска вариантов адресов. // СкрыватьНеактуальныеАдреса - Булево - флаг того, что при неактуальные адреса будут скрываться. @@ -42,7 +50,7 @@ ВариантыАдреса.Загрузить(ДанныеКлассификатора.Данные); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; @@ -84,7 +92,7 @@ Если ЗначениеЗаполнено(Текст) Тогда - РаботаСАдресамиКлиентСервер.ПреобразоватьВводАдреса(Текст); + РаботаСАдресамиКлиент.ПреобразоватьВводАдреса(Текст); Элементы.ВариантыАдреса.ОтборСтрок = Новый ФиксированнаяСтруктура("Представление", Текст); Иначе @@ -130,7 +138,6 @@ &НаКлиенте Процедура ОповеститьВладельца(Знач Данные, Отказ = Ложь) - ТекущийИндекс = Формат(Индекс, "ЧЦ=6; ЧРГ=; ЧН=; ЧГ=0"); Результат = Новый Структура("Муниципальный, Идентификатор, Индекс"); Результат.Вставить("КраткоеПредставлениеОшибки", КраткоеПредставлениеОшибки); Результат.Вставить("Отказ", Отказ); diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form index a4dffefad..4143c8c4c 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Form.form @@ -532,6 +532,11 @@ true auto true + + + ГруппаКоманднаяПанель + + Объект 1 diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl index 6e6f0c0ea..f5e42c806 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Параметры формы: // Уровень - Число - Запрашиваемый уровень. // Родитель - УникальныйИдентификатор - Родительский объект. @@ -35,7 +43,7 @@ Параметры.Свойство("СкрыватьНеактуальные", СкрыватьНеактуальные); ПараметрыПоиска = Новый Структура; - ПараметрыПоиска.Вставить("КоличествоЗаписей", 7000); + ПараметрыПоиска.Вставить("КоличествоЗаписей", 3000); Если НЕ ЗначениеЗаполнено(Родитель) И Уровень > 1 Тогда // поиск адреса без родителя @@ -76,7 +84,7 @@ Элементы.ВариантыАдреса.ТекущаяСтрока = Кандидаты[0].ПолучитьИдентификатор(); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; @@ -153,7 +161,7 @@ &НаКлиенте Процедура ОповеститьВладельца(Знач Данные, Отказ = Ложь) - Результат = РаботаСАдресамиКлиентСервер.КонструкторРезультатаВыбора(); + Результат = КонструкторРезультатаВыбора(); Если Данные <> Неопределено Тогда ЗаполнитьЗначенияСвойств(Результат, Данные); @@ -170,8 +178,25 @@ Результат.Муниципальный = РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(ТипАдреса); ОповеститьОВыборе(Результат); + КонецПроцедуры +&НаКлиенте +Функция КонструкторРезультатаВыбора() + + Результат = Новый Структура(); + Результат.Вставить("РегионЗагружен", Неопределено); + Результат.Вставить("Идентификатор", ""); + Результат.Вставить("Представление", ""); + Результат.Вставить("КраткоеПредставлениеОшибки", ""); + Результат.Вставить("Отказ", Ложь); + Результат.Вставить("Уровень", 0); + Результат.Вставить("Муниципальный", Неопределено); + Результат.Вставить("ПредлагатьЗагрузкуКлассификатора", Ложь); + Возврат Результат; + +КонецФункции + &НаСервере Процедура УстановитьУсловноеОформление() @@ -200,7 +225,6 @@ Процедура НайтиАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) Если ЗначениеЗаполнено(Текст) Тогда - ДлинаТекста = СтрДлина(Текст); Фильтр = Новый ФиксированнаяСтруктура("Представление", Текст); Элементы.ВариантыАдреса.ОтборСтрок = Фильтр; Иначе diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl index ed8e66d4f..f313611a7 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -31,7 +39,7 @@ Элементы.СписокДомов.ТекущаяСтрока = Строки[0].ПолучитьИдентификатор(); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаВыбрать", "Видимость", Ложь); diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl index e644f80b9..5c2d22eb4 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// // Параметры формы: // Уровень - Число - Запрашиваемый уровень. @@ -18,6 +25,7 @@ // записи. // --------------------------------------------------------------------------------------------------------------------- // + #Область ОбработчикиСобытийФормы &НаСервере @@ -27,15 +35,10 @@ Возврат; КонецЕсли; - НомерПорции = Неопределено; - Параметры.Свойство("Родитель", Родитель); Параметры.Свойство("ТипАдреса", ТипАдреса); ПараметрыПоиска = Новый Структура; - - ПолучениеДанныхСИспользованиемВебСервиса = Обработки.РасширенныйВводКонтактнойИнформации.КлассификаторДоступенЧерезВебСервис(); - Уровень = 7; ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.АдресаДляИнтерактивногоВыбора(Родитель, Уровень, ТипАдреса, ПараметрыПоиска); @@ -43,7 +46,7 @@ ВариантыАдреса.Загрузить(ДанныеКлассификатора.Данные); НаселенныйПунктДетально = Параметры.НаселенныйПунктДетально; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Элементы.Переместить(Элементы.ВариантыАдресаНайти, Элементы.ФормаКоманднаяПанель); Элементы.Переместить(Элементы.ВариантыАдресаОтменитьПоиск, Элементы.ФормаКоманднаяПанель); @@ -58,7 +61,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура НайтиАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) @@ -70,8 +73,8 @@ Если ЗначениеЗаполнено(Текст) Тогда - РаботаСАдресамиКлиентСервер.ПреобразоватьВводАдреса(Текст); - Элементы.ВариантыАдреса.ОтборСтрок = Новый ФиксированнаяСтруктура("Представление", Текст); + РаботаСАдресамиКлиент.ПреобразоватьВводАдреса(Текст); + Элементы.ВариантыАдреса.ОтборСтрок = Новый ФиксированнаяСтруктура("Представление", Текст); Иначе Элементы.ВариантыАдреса.ОтборСтрок = Неопределено; @@ -93,7 +96,7 @@ #КонецОбласти -#Область КомандыФормы +#Область ОбработчикиКомандФормы &НаКлиенте Процедура Выбрать(Команда) diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index b6845cccb..5cff6cf6b 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -38,51 +38,21 @@ Left - - Группа1 - 11 - - НапоминатьОЗагрузке - 4 - true - true - - true - - - НеНапоминатьОЗагрузке - - Right - - НапоминатьОЗагрузкеРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - - НапоминатьОЗагрузкеКонтекстноеМеню - 5 - true - - CheckBoxField - Enter - true - Left - true - - + + НапоминатьОЗагрузке + 4 true true true + + НеНапоминатьОЗагрузке + + Right - Группа1РасширеннаяПодсказка - 12 + НапоминатьОЗагрузкеРасширеннаяПодсказка + 6 Label true true @@ -90,16 +60,17 @@ Left - UsualGroup - - HorizontalIfPossible - Auto - NormalSeparation - true - true - Auto - Auto - + + НапоминатьОЗагрузкеКонтекстноеМеню + 5 + true + + CheckBoxField + Enter + true + Left + true + Bottom true @@ -134,19 +105,15 @@ Auto - Закрыть + Отмена 9 - - <key>ru</key> - <value>Закрыть</value> - true true true - ЗакрытьРасширеннаяПодсказка + ОтменаРасширеннаяПодсказка 10 Label true @@ -235,7 +202,7 @@ Отмена <key>ru</key> - <value>Отмена</value> + <value>Закрыть</value> 2 diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index 8433a28c3..ed18e5f01 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form index 14bdbfc52..80152dd6b 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form @@ -592,11 +592,13 @@ Form.Command.КомандаОК - Auto true true true UserCmds + + StdPicture.WriteAndClose + Auto diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl index 7b7183648..d4679f692 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + //// Форма параметризуется: //// //// ИдентификаторНаселенногоПункта - УникальныйИдентификатор - Идентификатор текущего объекта для определения и @@ -54,16 +62,14 @@ ЕстьПравоЗагружатьКлассификатор = Обработки.РасширенныйВводКонтактнойИнформации.ЕстьВозможностьИзмененияАдресногоКлассификатора(); СведенияОАдресномКлассификаторе = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.СведенияОДоступностиАдресногоКлассификатора(); - КлассификаторДоступен = СведенияОАдресномКлассификаторе["КлассификаторДоступен"]; + КлассификаторДоступен = СведенияОАдресномКлассификаторе["КлассификаторДоступен"]; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - Элементы.ФормаКомандаОК.Отображение = ОтображениеКнопки.Картинка; - Элементы.ТипАдреса.ВидПереключателя = ВидПереключателя.Переключатель; Элементы.ФормаСправка.Видимость = Ложь; - Элементы.ФормаОтмена.Видимость = Ложь; + Элементы.ФормаОтмена.Видимость = Ложь; КонецЕсли; @@ -198,9 +204,7 @@ &НаКлиенте Процедура НаселенныйПунктОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); - КонецПроцедуры &НаКлиенте @@ -254,7 +258,13 @@ &НаКлиенте Процедура КомандаОК(Команда) - Закрыть(НаселенныйПунктДетально); + + Если Модифицированность Тогда + Закрыть(НаселенныйПунктДетально); + Иначе + Закрыть(); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -419,7 +429,8 @@ &НаКлиенте Процедура ОбработкаВыбора(Элемент, Знач ВыбранноеЗначение, СтандартнаяОбработка) - Если ПустаяСтрока(ВыбранноеЗначение) Тогда + + Если ПустаяСтрока(ВыбранноеЗначение) Тогда ТекстПредупреждения = НСтр("ru = 'Выбор из списка недоступен, т.к в адресном классификаторе отсутствует информация о адресных сведениях.'"); ПоказатьПредупреждение(, ТекстПредупреждения ); СтандартнаяОбработка = Ложь; @@ -429,9 +440,7 @@ Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") И ВыбранноеЗначение.Свойство("Идентификатор") И ПустаяСтрока(ВыбранноеЗначение.Идентификатор) Тогда - ТекстПредупреждения = НСтр("ru = 'Выбор из списка недоступен, т.к в адресном классификаторе отсутствует информация о адресных сведениях.'"); - ПоказатьПредупреждение(, ТекстПредупреждения); - СтандартнаяОбработка = Ложь; + СтандартнаяОбработка = Ложь; Возврат; КонецЕсли; @@ -454,7 +463,7 @@ ОпределитьПоляАдреса(); Элемент.ОбновитьТекстРедактирования(); - Если ЕстьПравоЗагружатьКлассификатор И Не КлассификаторДоступен И ВыбранноеЗначение.ПредлагатьЗагрузкуКлассификатора Тогда +Если ЕстьПравоЗагружатьКлассификатор И Не КлассификаторДоступен И ВыбранноеЗначение.ПредлагатьЗагрузкуКлассификатора Тогда // Предлагаем загрузить классификатор. ПредложениеЗагрузкиКлассификатора(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), ВыбранноеЗначение.Представление); diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl index d50d7bb31..89af38e68 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -10,8 +18,9 @@ Если ТипЗнч(Параметры.Объект) = Тип("ДанныеФормыСтруктура") Тогда ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры.Объект); КонецЕсли; + Элементы.Адрес.ТолькоПросмотр = Параметры.ТолькоПросмотр; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Элементы.Переместить(Элементы.ОК, Элементы.ФормаКоманднаяПанель); Элементы.Переместить(Элементы.Справка, Элементы.ФормаКоманднаяПанель); diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl index 24d347a11..2cbbd8f56 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl @@ -1,4 +1,14 @@ -#Область ОбработчикиПодписокНаСобытия +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -21,8 +31,6 @@ #КонецОбласти -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - #Область СлужебныеПроцедурыИФункции // Возвращает имя формы для редактирования типа контактной информации. @@ -56,23 +64,6 @@ #Область ВзаимодействиеСАдреснымКлассификатором -// Определение режима работы форм ввода. -// -// Возвращаемое значение: -// Булево - Истина, если работа с классификатором ведется через веб-сервис. -// -Функция КлассификаторДоступенЧерезВебСервис() Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Возврат Ложь; - КонецЕсли; - - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Источник = МодульАдресныйКлассификаторСлужебный.ИсточникДанныхАдресногоКлассификатора(); - - Возврат Не ПустаяСтрока(Источник); -КонецФункции - // Возвращает флаг того, что текущий пользователь может загружать или очищать адресный классификатор. // // Возвращаемое значение: @@ -214,7 +205,6 @@ КонецЕсли; Адрес = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(АдресВXML); - ЕстьОшибки = Ложь; ТолькоНациональныйАдрес = Истина; Если ТипЗнч(ПараметрыПроверкиАдреса) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда @@ -389,7 +379,6 @@ Результат = Новый Структура("Данные", Новый СписокЗначений); СтруктураОшибкиПоставщикаАдресногоКлассификатора(Результат); - ДанныеВыбора = Новый СписокЗначений; Уровень = 7; РодительскийИдентификатор = ПараметрыАвтоподбора.Идентификатор; ТипАдреса = ПараметрыАвтоподбора.ТипАдреса; @@ -465,7 +454,7 @@ КонецЕсли; // Старый формат через разделитель строк и равенство. - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -489,11 +478,11 @@ Если ТипЗначенийПолей = Тип("СписокЗначений") Тогда СписокПолей = ЗначенияПолей; ИначеЕсли ТипЗначенийПолей = Тип("Структура") Тогда - СписокПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей( - РаботаСАдресамиКлиентСервер.СтрокаПолей(ЗначенияПолей, Ложь)); + СписокПолей = УправлениеКонтактнойИнформациейСлужебный.ПреобразоватьСтрокуВСписокПолей( + РаботаСАдресами.СтрокаПолей(ЗначенияПолей, Ложь)); Иначе // Уже преобразовано в строку - СписокПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(ЗначенияПолей); + СписокПолей = УправлениеКонтактнойИнформациейСлужебный.ПреобразоватьСтрокуВСписокПолей(ЗначенияПолей); КонецЕсли; ТипКвартирыНеопределен = Истина; @@ -506,7 +495,7 @@ Если ИмяПоля="ИНДЕКС" Тогда ЭлементИндекс = СоздатьДопАдрЭлемента(НациональныйАдрес); - ЭлементИндекс.ТипАдрЭл = РаботаСАдресамиКлиентСервер.КодСериализацииПочтовогоИндекса(); + ЭлементИндекс.ТипАдрЭл = РаботаСАдресами.КодСериализацииПочтовогоИндекса(); ЭлементИндекс.Значение = ЭлементСписка.Значение; ИначеЕсли ИмяПоля = "СТРАНА" Тогда @@ -543,7 +532,7 @@ Если ЭлементДом = Неопределено Тогда ЭлементДом = СоздатьНомерДопАдрЭлемента(НациональныйАдрес); КонецЕсли; - ЭлементДом.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); + ЭлементДом.Тип = РаботаСАдресами.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); ТипДомаНеопределен = Ложь; ИначеЕсли ИмяПоля = "ДОМ" Тогда @@ -556,7 +545,7 @@ Если ЭлементКорпус = Неопределено Тогда ЭлементКорпус = СоздатьНомерДопАдрЭлемента(НациональныйАдрес); КонецЕсли; - ЭлементКорпус.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); + ЭлементКорпус.Тип = РаботаСАдресами.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); ТипКорпусаНеопределен = Ложь; ИначеЕсли ИмяПоля = "КОРПУС" Тогда @@ -569,7 +558,7 @@ Если ЭлементКвартира = Неопределено Тогда ЭлементКвартира = СоздатьНомерДопАдрЭлемента(НациональныйАдрес); КонецЕсли; - ЭлементКвартира.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); + ЭлементКвартира.Тип = РаботаСАдресами.КодСериализацииОбъектаАдресации(ЭлементСписка.Значение); ТипКвартирыНеопределен = Ложь; ИначеЕсли ИмяПоля = "КВАРТИРА" Тогда @@ -587,15 +576,15 @@ // Умолчания Если ТипДомаНеопределен И ЭлементДом <> Неопределено Тогда - ЭлементДом.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации("Дом"); + ЭлементДом.Тип = РаботаСАдресами.КодСериализацииОбъектаАдресации("Дом"); КонецЕсли; Если ТипКорпусаНеопределен И ЭлементКорпус <> Неопределено Тогда - ЭлементКорпус.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации("Корпус"); + ЭлементКорпус.Тип = РаботаСАдресами.КодСериализацииОбъектаАдресации("Корпус"); КонецЕсли; Если ТипКвартирыНеопределен И ЭлементКвартира <> Неопределено Тогда - ЭлементКвартира.Тип = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации("Квартира"); + ЭлементКвартира.Тип = РаботаСАдресами.КодСериализацииОбъектаАдресации("Квартира"); КонецЕсли; // Представление с приоритетами. @@ -641,7 +630,7 @@ КонецЕсли; // Пустой объект с представлением. - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); Результат.Состав.Состав = Представление; @@ -711,7 +700,7 @@ ТипXDTO = Тип("ОбъектXDTO"); Если ТипЗнч(ОбъектИнформации) = ТипXDTO Тогда - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(); Если ОбъектИнформации.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация") Тогда Адрес = ОбъектИнформации.Состав; @@ -749,7 +738,7 @@ Если НовоеЗначение = Неопределено Тогда // Чтение - Результат = АдресРФ.Получить( РаботаСАдресамиКлиентСервер.XPathПочтовогоИндекса() ); + Результат = АдресРФ.Получить(РаботаСАдресами.XPathПочтовогоИндекса() ); Если Результат <> Неопределено Тогда Результат = Результат.Значение; КонецЕсли; @@ -757,9 +746,9 @@ КонецЕсли; // Запись - КодИндекса = РаботаСАдресамиКлиентСервер.КодСериализацииПочтовогоИндекса(); + КодИндекса = РаботаСАдресами.КодСериализацииПочтовогоИндекса(); - ЗаписьИндекса = АдресРФ.Получить(РаботаСАдресамиКлиентСервер.XPathПочтовогоИндекса()); + ЗаписьИндекса = АдресРФ.Получить(РаботаСАдресами.XPathПочтовогоИндекса()); Если ЗаписьИндекса = Неопределено Тогда ЗаписьИндекса = АдресРФ.ДопАдрЭл.Добавить(ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); ЗаписьИндекса.ТипАдрЭл = КодИндекса; @@ -783,8 +772,6 @@ Если НовоеЗначение = Неопределено Тогда // Чтение - Результат = Неопределено; - XDTOТип = XDTOАдрес.Тип(); Если XDTOТип = ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ") Тогда АдресРФ = XDTOАдрес; @@ -793,7 +780,7 @@ КонецЕсли; Если ТипЗнч(АдресРФ) = Тип("ОбъектXDTO") Тогда - Возврат ПолучитьXDTOРеквизитОбъекта(АдресРФ, РаботаСАдресамиКлиентСервер.XPathРайона()); + Возврат ПолучитьXDTOРеквизитОбъекта(АдресРФ, РаботаСАдресами.XPathРайона()); КонецЕсли; Возврат Неопределено; @@ -829,7 +816,7 @@ ДополнительныйЭлементАдреса = НайтиДополнительныйЭлементАдреса(АдресРФ).Значение; Результат.ДополнительныйЭлемент = ДополнительныйЭлементАдреса; - Результат.ПодчиненныйЭлемент = ДополнительныйЭлементАдреса(АдресРФ, РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(91)); + Результат.ПодчиненныйЭлемент = ДополнительныйЭлементАдреса(АдресРФ, РаботаСАдресами.XPathДополнительногоОбъектаАдресации(91)); Возврат Результат; @@ -867,7 +854,7 @@ XPath = ""; ДополнительныйЭлементАдреса = Неопределено; Для каждого ВариантДополнительныйЭлементАдреса Из ВариантыДополнительногоЭлементаАдреса Цикл - XPath = РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(90, ВариантДополнительныйЭлементАдреса); + XPath = РаботаСАдресами.XPathДополнительногоОбъектаАдресации(90, ВариантДополнительныйЭлементАдреса); ДополнительныйЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, XPath); Если ДополнительныйЭлементАдреса <> Неопределено Тогда Прервать; @@ -953,7 +940,7 @@ Для Каждого ДопЭлемент Из АдресРФ.ДопАдрЭл Цикл Если ДопЭлемент.Номер <> Неопределено Тогда КодОбъекта = ДопЭлемент.Номер.Тип; - ТипОбъекта = РаботаСАдресамиКлиентСервер.ТипОбъектаПоКодуСериализации(КодОбъекта); + ТипОбъекта = РаботаСАдресами.ТипОбъектаПоКодуСериализации(КодОбъекта); Если ТипОбъекта <> Неопределено Тогда Вид = ТипОбъекта.Тип; Если Вид = 1 Или Вид = 2 Тогда @@ -967,7 +954,7 @@ НоваяСтрока.Тип = ТипОбъекта.Наименование; НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; НоваяСтрока.Сокращение = ТипОбъекта.Сокращение; - НоваяСтрока.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(НоваяСтрока.Тип); + НоваяСтрока.ПутьXPath = РаботаСАдресами.XPathНомераДополнительногоОбъектаАдресации(НоваяСтрока.Тип); НоваяСтрока.Вид = Вид; КонецЕсли; Иначе @@ -975,7 +962,7 @@ НоваяСтрока.Тип = ДопЭлемент.Номер.Тип; НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; НоваяСтрока.Сокращение = ДопЭлемент.Номер.Тип; - НоваяСтрока.ПутьXPath = РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации("2000"); + НоваяСтрока.ПутьXPath = РаботаСАдресами.XPathНомераДополнительногоОбъектаАдресации("2000"); НоваяСтрока.Вид = 3; КонецЕсли; КонецЕсли; @@ -1011,13 +998,13 @@ Возврат; КонецЕсли; - Запись = XDTOАдрес.Получить(РаботаСАдресамиКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Тип)); + Запись = XDTOАдрес.Получить(РаботаСАдресами.XPathНомераДополнительногоОбъектаАдресации(Тип)); Если Запись = Неопределено Тогда Запись = XDTOАдрес.ДопАдрЭл.Добавить( ФабрикаXDTO.Создать(XDTOАдрес.ДопАдрЭл.ВладеющееСвойство.Тип)); Запись.Номер = ФабрикаXDTO.Создать(Запись.Свойства().Получить("Номер").Тип); Запись.Номер.Значение = Значение; - КодТипа = РаботаСАдресамиКлиентСервер.КодСериализацииОбъектаАдресации(Тип); + КодТипа = РаботаСАдресами.КодСериализацииОбъектаАдресации(Тип); Если КодТипа = Неопределено Тогда КодТипа = Тип; КонецЕсли; @@ -1238,8 +1225,6 @@ Возврат ?(РезультатГруппами, Новый Массив, Новый СписокЗначений); КонецЕсли; - АдресРФ = Неопределено; - ВсеОшибки = ОбщиеГруппыОшибокЗаполненияАдреса(Адрес, ФлагиПроверки); ПроверятьКлассификатор = Истина; @@ -1353,7 +1338,10 @@ НСтр("ru = 'Не указан регион.'"), "Регион"); КонецЕсли; - // 3) Регион, Район, Город, НаселенныйПункт, Улица должны: иметь сокращение, только кириллица. + // 3) Регион, Район, Город, НаселенныйПункт, Улица должны: + // - иметь сокращение. + // - не длинней 50 символов. + // - только кириллица. ДопустимоКромеКириллицы = "/,-. 0123456789_N"; @@ -1364,7 +1352,7 @@ ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, "СубъектРФ", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии региона ""%1"".'"), Регион), НСтр("ru = 'Регион'")); КонецЕсли; - Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Регион, Ложь, ДопустимоКромеКириллицы) Тогда + Если Не СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Регион, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии региона ""%1"" есть не кириллические символы.'"), Регион), НСтр("ru = 'Регион'")); КонецЕсли @@ -1378,7 +1366,7 @@ ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии района ""%1"".'"), Район), НСтр("ru = 'Район'")); КонецЕсли; - Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Район, Ложь, ДопустимоКромеКириллицы) Тогда + Если Не СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Район, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии района ""%1"" есть не кириллические символы.'"), Район), НСтр("ru = 'Район'")); КонецЕсли; @@ -1392,7 +1380,7 @@ ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии города ""%1"".'"), Город), НСтр("ru = 'Город'")); КонецЕсли; - Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Город, Ложь, ДопустимоКромеКириллицы) Тогда + Если Не СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Город, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии города ""%1"" есть не кириллические символы.'"), Город), НСтр("ru = 'Город'")); КонецЕсли; @@ -1407,7 +1395,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии населенного пункта ""%1"".'"), НаселенныйПункт), НСтр("ru = 'Населенный пункт'")); КонецЕсли; - Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(НаселенныйПункт, Ложь, ДопустимоКромеКириллицы) Тогда + Если Не СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(НаселенныйПункт, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии населенного пункта ""%1"" есть не кириллические символы.'"), НаселенныйПункт), НСтр("ru = 'Населенный пункт'")); @@ -1422,7 +1410,7 @@ ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не указано сокращение в названии улицы ""%1"".'"), Улица), НСтр("ru = 'Улица'")); КонецЕсли; - Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Улица, Ложь, ДопустимоКромеКириллицы) Тогда + Если Не СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Улица, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии улицы ""%1"" есть не кириллические символы.'"), Улица), НСтр("ru = 'Улица'")); КонецЕсли; @@ -1440,7 +1428,7 @@ // 6) Поля Город и НаселенныйПункт могут быть одновременно пустые только в регионе - городе ФЗ. Если ПустаяСтрока(Город) И ПустаяСтрока(НаселенныйПункт) И ПустаяСтрока(Район) Тогда - Если НазванияГородовФедеральногоЗначения().Найти(ВРег(Регион)) = Неопределено Тогда + Если НазванияГородовФедеральногоЗначения()[ВРег(Регион)] = Неопределено Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "Город", НСтр("ru = 'Город может быть не указан только в регионе - городе федерального значения.'"), НСтр("ru = 'Город'")); @@ -1520,11 +1508,11 @@ // Возвращает массив наименований регионов - городов федерального значения. Функция НазванияГородовФедеральногоЗначения() - Результат = Новый Массив; - Результат.Добавить("МОСКВА Г"); - Результат.Добавить("САНКТ-ПЕТЕРБУРГ Г"); - Результат.Добавить("СЕВАСТОПОЛЬ Г"); - Результат.Добавить("БАЙКОНУР Г"); + Результат = Новый Соответствие; + Результат.Вставить("МОСКВА Г", Истина); + Результат.Вставить("САНКТ-ПЕТЕРБУРГ Г", Истина); + Результат.Вставить("СЕВАСТОПОЛЬ Г", Истина); + Результат.Вставить("БАЙКОНУР Г", Истина); Возврат Результат; КонецФункции @@ -1600,7 +1588,7 @@ Результат = Новый Структура("Представление, ЗначенияПолей", XDTOКонтактная.Представление, Новый СписокЗначений); - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(); Состав = XDTOКонтактная.Состав; Если Состав = Неопределено Тогда @@ -1633,7 +1621,7 @@ Функция АдресВСтарыйСписокПолей(XDTOАдрес, РасширенныйСоставПолей = Истина) Список = Новый СписокЗначений; - ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); + ПространствоИмен = УправлениеКонтактнойИнформациейСлужебный.ПространствоИмен(); XDTOТип = XDTOАдрес.Тип(); Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда @@ -1666,18 +1654,18 @@ ДобавитьЗначение(Список, "Регион", АдресРФ.СубъектРФ); ДобавитьЗначение(Список, "КодРегиона", РаботаСАдресами.КодРегиона(АдресРФ.СубъектРФ) ); Если РасширенныйСоставПолей Тогда - ДобавитьЗначение(Список, "РегионСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(АдресРФ.СубъектРФ)); + ДобавитьЗначение(Список, "РегионСокращение", Сокращение(АдресРФ.СубъектРФ)); КонецЕсли; Район = РайонАдреса(АдресРФ); ДобавитьЗначение(Список, "Район", Район); Если РасширенныйСоставПолей Тогда - ДобавитьЗначение(Список, "РайонСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Район)); + ДобавитьЗначение(Список, "РайонСокращение", Сокращение(Район)); КонецЕсли; ДобавитьЗначение(Список, "Город", АдресРФ.Город); Если РасширенныйСоставПолей Тогда - ДобавитьЗначение(Список, "ГородСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(АдресРФ.Город)); + ДобавитьЗначение(Список, "ГородСокращение", Сокращение(АдресРФ.Город)); КонецЕсли; // преобразование ФИАС в КЛАДР @@ -1685,9 +1673,8 @@ Улица = АдресРФ.Улица; ДополнительныйЭлементАдреса = НайтиДополнительныйЭлементАдреса(АдресРФ).Значение; ПодчиненныйЭлементЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, - РаботаСАдресамиКлиентСервер.XPathДополнительногоОбъектаАдресации(91)); + РаботаСАдресами.XPathДополнительногоОбъектаАдресации(91)); - ЕстьУлица = ЗначениеЗаполнено(Улица); ЕстьДополнительныйЭлементАдреса = ЗначениеЗаполнено(ДополнительныйЭлементАдреса); ЕстьПодчиненныйЭлементЭлементАдреса = ЗначениеЗаполнено(ПодчиненныйЭлементЭлементАдреса); @@ -1706,13 +1693,13 @@ ДобавитьЗначение(Список, "НаселенныйПункт", НаселенныйПункт); Если РасширенныйСоставПолей Тогда - ДобавитьЗначение(Список, "НаселенныйПунктСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(НаселенныйПункт)); + ДобавитьЗначение(Список, "НаселенныйПунктСокращение", Сокращение(НаселенныйПункт)); КонецЕсли; ДобавитьЗначение(Список, "Улица", Улица); Если РасширенныйСоставПолей Тогда - ДобавитьЗначение(Список, "УлицаСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Улица)); + ДобавитьЗначение(Список, "УлицаСокращение", Сокращение(Улица)); КонецЕсли; // Дом и корпус @@ -1741,7 +1728,7 @@ ТипКорпуса = ПараметрыОбъекта[0].Тип; ЗначениеКорпуса = ""; Разделитель = ""; - Сокращения = РаботаСАдресамиКлиентСервер.СокращенияОбъектовАдресацииАдресаРФ(); + Сокращения = РаботаСАдресами.СокращенияОбъектовАдресацииАдресаРФ(); Для Каждого СтрокаОбъекта Из ПараметрыОбъекта Цикл ИмяЗдания = ?(ЗначениеЗаполнено(Сокращения[СтрокаОбъекта.Тип]), Сокращения[СтрокаОбъекта.Тип], СтрокаОбъекта.Тип); ЗначениеКорпуса = ЗначениеКорпуса + Разделитель + ИмяЗдания + " " + СтрокаОбъекта.Значение; @@ -1763,7 +1750,7 @@ ТипПомещения = ПараметрыОбъекта[0].Тип; ЗначениеПомещения = ""; Разделитель = ""; - Сокращения = РаботаСАдресамиКлиентСервер.СокращенияОбъектовАдресацииАдресаРФ(); + Сокращения = РаботаСАдресами.СокращенияОбъектовАдресацииАдресаРФ(); Для Каждого СтрокаОбъекта Из ПараметрыОбъекта Цикл ИмяПомещения = ?(ЗначениеЗаполнено(Сокращения[СтрокаОбъекта.Тип]), Сокращения[СтрокаОбъекта.Тип], СтрокаОбъекта.Тип); ЗначениеПомещения = ЗначениеПомещения + Разделитель + ИмяПомещения + " " + СтрокаОбъекта.Значение; @@ -1790,11 +1777,26 @@ Список.Добавить(Строка(Значение), ИмяПоля); КонецПроцедуры +// Возвращает отдельно сокращение от значения. +// +// Параметры: +// Текст - Строка - Полное наименования. +// +// Возвращаемое значение: +// Строка - выделенное сокращение. +// +Функция Сокращение(Знач Текст) + + Части = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(Текст); + Возврат Части.Сокращение; + +КонецФункции + // Возвращает варианты типов домов (по признаку владения). Функция ВариантыДанныхДом() Экспорт Возврат Новый Структура("ВариантыТипа, МожноПодбиратьЗначения", - РаботаСАдресамиКлиентСервер.НаименованияОбъектовАдресацииПоТипу(1), Ложь); + РаботаСАдресами.НаименованияОбъектовАдресацииПоТипу(1), Ложь); КонецФункции @@ -1802,7 +1804,7 @@ Функция ВариантыДанныхСтроение() Экспорт Возврат Новый Структура("ВариантыТипа, МожноПодбиратьЗначения", - РаботаСАдресамиКлиентСервер.НаименованияОбъектовАдресацииПоТипу(2), Ложь); + РаботаСАдресами.НаименованияОбъектовАдресацииПоТипу(2), Ложь); КонецФункции @@ -1810,7 +1812,7 @@ Функция ВариантыДанныхПомещение() Экспорт Возврат Новый Структура("ВариантыТипа, МожноПодбиратьЗначения", - РаботаСАдресамиКлиентСервер.НаименованияОбъектовАдресацииПоТипу(3, Ложь), Ложь); + РаботаСАдресами.НаименованияОбъектовАдресацииПоТипу(3, Ложь), Ложь); КонецФункции diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Commands/РегистрацияИзмененийДляОтправки/CommandModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Commands/РегистрацияИзмененийДляОтправки/CommandModule.bsl index f3d53dff7..d9c231d6f 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Commands/РегистрацияИзмененийДляОтправки/CommandModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Commands/РегистрацияИзмененийДляОтправки/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl index b8eeb5347..23ecea7a1 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы // diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl index aadc5d6ec..aee73cb77 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы // diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl index 00ce9fe8f..3d1b39e65 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы // diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl index 250ac7d7d..56cb34687 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы // diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form index d4aab5716..039c94866 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form @@ -321,39 +321,6 @@ true - - ВерсияДанных - - <key>ru</key> - <value>Версия данных</value> - - 5 - - String - - - - true - - - true - - - - ПредупреждениеПриОткрытии - - <key>ru</key> - <value>Предупреждение при открытии</value> - - 6 - - - true - - - true - - ЗаписатьИзмененияУзла diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl index e5f33f813..9a1d5c233 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl index 054cf3bdd..506b15708 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы // @@ -30,7 +37,14 @@ ТаблицаРегистрации = ""; ОбъектСтрокой = ОбъектРегистрации; КонецЕсли; - Заголовок = "Регистрация " + ТекущийОбъект.ПредставлениеСсылки(ОбъектСтрокой) + Расшифровка; + + ЧастиЗаголовка = Новый Массив; + ЧастиЗаголовка.Добавить(НСтр("ru = 'Регистрация'")); + ЧастиЗаголовка.Добавить(" "); + ЧастиЗаголовка.Добавить(ТекущийОбъект.ПредставлениеСсылки(ОбъектСтрокой)); + ЧастиЗаголовка.Добавить(Расшифровка); + + Заголовок = Новый ФорматированнаяСтрока(ЧастиЗаголовка); ПрочитатьУзлыОбмена(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form index 372a29f00..9af8b49f5 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form @@ -4385,6 +4385,10 @@ <event>NotificationProcessing</event> <name>ОбработкаОповещения</name> </handlers> + <handlers> + <event>BeforeClose</event> + <name>ПередЗакрытием</name> + </handlers> <handlers> <event>OnLoadDataFromSettingsAtServer</event> <name>ПриЗагрузкеДанныхИзНастроекНаСервере</name> @@ -5039,6 +5043,23 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ЗакрытьФормуБезусловно</name> + <title> + <key>ru</key> + <value>Закрыть форму безусловно</value> + + 24 + + Boolean + + + true + + + true + + ДобавитьРегистрациюСсылки diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl index 0b0b186ce..9b316d002 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Форма редактирования регистрации изменений обмена объектов на указанном узле. // Может быть открыта со следующими параметрами: // @@ -141,7 +149,6 @@ Параметры.Свойство("ИменаСкрываемыхМетаданных", ИменаСкрываемыхМетаданных); ДополнитьИменаСкрываемыхМетаданных(); - ТекущаяСтрокаМетаданных = Неопределено; Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаПустая; Параметры.Свойство("ЗапрещеноВыбиратьУзелОбмена", ЗапрещеноВыбиратьУзелОбмена); @@ -159,6 +166,25 @@ КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если ЗавершениеРаботы Тогда + Возврат; + КонецЕсли; + + Если ЗакрытьФормуБезусловно Тогда + Возврат; + КонецЕсли; + + Если ДлительнаяОперацияЗапущена Тогда + Отказ = Истина; + Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеФормыЗавершение", ЭтотОбъект); + ПоказатьВопрос(Оповещение, НСтр("ru = 'Прервать выполнение регистрации данных?'"), РежимДиалогаВопрос.ДаНет); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПриЗакрытии(ЗавершениеРаботы) @@ -166,8 +192,9 @@ Возврат; КонецЕсли; - // Автосохранение настроек - СохраняемыеВНастройкахДанныеМодифицированы = Истина; + Если ДлительнаяОперацияЗапущена Тогда + ЗавершитьВыполнениеДлительнойОперации(ФоновоеЗаданиеИдентификатор); + КонецЕсли; КонецПроцедуры @@ -698,6 +725,18 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ПодтвердитьЗакрытиеФормыЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Если Не РезультатВопроса = КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + ЗакрытьФормуБезусловно = Истина; + Закрыть(); + +КонецПроцедуры + &НаСервере Процедура УстановитьУсловноеОформление() @@ -939,8 +978,6 @@ ЗаполнитьКоличествоРегистрацийВДереве(); // Обновляем активную страницу. - ПоследняяАктивнаяКолонкаМетаданных = Неопределено; - ПоследняяАктивнаяСтрокаМетаданных = Неопределено; Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаПустая; // Обновляем команды, зависящие от узла. @@ -1361,6 +1398,7 @@ &НаКлиенте Процедура РезультатВыполненияФоновогоЗадания() + ФоновоеЗаданиеПолучитьРезультатНаСервере(); ДлительнаяОперацияЗапущена = Ложь; @@ -1372,16 +1410,23 @@ Сообщение.Текст = СообщениеОбОшибке; Сообщение.Сообщить(); КонецЕсли; - Если ФоновоеЗаданиеРезультатВыполнения.Свойство("ДополнительныеДанныеРезультата") - И ФоновоеЗаданиеРезультатВыполнения.ДополнительныеДанныеРезультата.Свойство("Команда") Тогда - СообщитьОРезультатахРегистрации(ФоновоеЗаданиеРезультатВыполнения.ДополнительныеДанныеРезультата); - ЗаполнитьКоличествоРегистрацийВДереве(); - ОбновитьСодержимоеСтраницы(); + + Если Не ФоновоеЗаданиеРезультатВыполнения = Неопределено Тогда + Если ФоновоеЗаданиеРезультатВыполнения.Свойство("ДополнительныеДанныеРезультата") + И ФоновоеЗаданиеРезультатВыполнения.ДополнительныеДанныеРезультата.Свойство("Команда") Тогда + + СообщитьОРезультатахРегистрации(ФоновоеЗаданиеРезультатВыполнения.ДополнительныеДанныеРезультата); + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); + + КонецЕсли; КонецЕсли; + КонецПроцедуры &НаСервере Функция ФоновоеЗаданиеЗапуститьНаСервере(ПараметрыФоновогоЗадания) + МодульДлительныеОперации = ОбщийМодульДлительныеОперации(); ПараметрыВыполнения = МодульДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.ДополнительныйРезультат = Ложь; @@ -1397,29 +1442,42 @@ Результат = МодульДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыФоновогоЗадания, ПараметрыВыполнения); ФоновоеЗаданиеИдентификатор = Результат.ИдентификаторЗадания; ФоновоеЗаданиеАдресХранилища = Результат.АдресРезультата; + Возврат Результат; + КонецФункции &НаСервере Процедура ФоновоеЗаданиеПолучитьРезультатНаСервере() - ФоновоеЗаданиеРезультатВыполнения.Вставить("ДополнительныеДанныеРезультата", Новый Структура()); - СообщениеОбОшибке = ""; - ТиповоеПредставлениеОшибки = НСтр("ru='При изменении регистрации произошла ошибка. Подробности см. в журнале регистрации'"); - Если ФоновоеЗаданиеРезультатВыполнения.Статус = "Ошибка" Тогда - СообщениеОбОшибке = ФоновоеЗаданиеРезультатВыполнения.ПодробноеПредставлениеОшибки; - Иначе + + Если ФоновоеЗаданиеРезультатВыполнения <> Неопределено Тогда + ФоновоеЗаданиеРезультатВыполнения.Вставить("ДополнительныеДанныеРезультата", Новый Структура); + СообщениеОбОшибке = ""; + ТиповоеПредставлениеОшибки = НСтр("ru = 'При изменении регистрации произошла ошибка. Подробности см. в журнале регистрации'"); - РезультатВыполненияВФоне = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); - - Если РезультатВыполненияВФоне = Неопределено Тогда - СообщениеОбОшибке = ТиповоеПредставлениеОшибки; + Если ФоновоеЗаданиеРезультатВыполнения.Статус = "Ошибка" Тогда + СообщениеОбОшибке = ФоновоеЗаданиеРезультатВыполнения.ПодробноеПредставлениеОшибки; Иначе - ФоновоеЗаданиеРезультатВыполнения.ДополнительныеДанныеРезультата = РезультатВыполненияВФоне; - УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + РезультатВыполненияВФоне = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + + Если РезультатВыполненияВФоне = Неопределено Тогда + СообщениеОбОшибке = ТиповоеПредставлениеОшибки; + Иначе + ФоновоеЗаданиеРезультатВыполнения.ДополнительныеДанныеРезультата = РезультатВыполненияВФоне; + УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + КонецЕсли; КонецЕсли; КонецЕсли; + ФоновоеЗаданиеАдресХранилища = Неопределено; ФоновоеЗаданиеИдентификатор = Неопределено; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗавершитьВыполнениеДлительнойОперации(ИдентификаторЗадания) + МодульДлительныеОперации = ОбщийМодульДлительныеОперации(); + МодульДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); КонецПроцедуры // Возвращает ссылку на общий модуль "ДлительныеОперацииКлиент". @@ -2330,9 +2388,8 @@ Если Группа.ПолучитьЭлементы().Количество() = 0 Тогда // Пробуем из структуры имен метаданных, считаем все отмеченными. - МассивПредставлений = СтруктураПредставленийМетаданных[Группа.МетаПолноеИмя]; - МассивАвто = СтруктураАвторегистрацииМетаданных[Группа.МетаПолноеИмя]; - МассивИмен = СтруктураИменМетаданных[Группа.МетаПолноеИмя]; + МассивАвто = СтруктураАвторегистрацииМетаданных[Группа.МетаПолноеИмя]; + МассивИмен = СтруктураИменМетаданных[Группа.МетаПолноеИмя]; Для Индекс = 0 По МассивИмен.ВГраница() Цикл Если БезУчетаАвторегистрации Или МассивАвто[Индекс] = 2 Тогда Результат.МетаИмена.Добавить(МассивИмен[Индекс]); @@ -2501,7 +2558,7 @@ КонецФункции &НаСервере -Функция ПроверитьВерсиюИРежимСовместимостиПлатформы() +Процедура ПроверитьВерсиюИРежимСовместимостиПлатформы() Информация = Новый СистемнаяИнформация; Если Не (Лев(Информация.ВерсияПриложения, 3) = "8.3" @@ -2519,7 +2576,7 @@ КонецЕсли; -КонецФункции +КонецПроцедуры &НаСервере Функция ЗарегистрироватьИОМИПредопределенныеНаСервере() diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl index 90790a5a5..d1b2b0cc0 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -640,7 +648,7 @@ // Данные - Строка - Список имен реквизитов для чтения через запятую. // // Возвращаемое значение: -// Структура - считанные данные. +// Структура - считанные данные. // Функция ПолучитьПараметрыУзлаОбмена(Ссылка, Данные) Экспорт @@ -2236,4 +2244,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl index f341845d5..4aba5f0a7 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form index 481d651bd..9f22c9f6c 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form @@ -696,9 +696,9 @@ <extInfo xsi:type="form:UsualGroupExtInfo"> <group>Vertical</group> <behavior>Auto</behavior> + <representation>NormalSeparation</representation> <showLeftMargin>true</showLeftMargin> <united>true</united> - <throughAlign>Auto</throughAlign> <currentRowUse>Auto</currentRowUse> </extInfo> </items> @@ -749,6 +749,7 @@ <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> <autoMaxWidth>true</autoMaxWidth> + <height>5</height> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> <multiLine>true</multiLine> diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl index 388f62053..e5ecb919d 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form index 9898f0c97..14366de58 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form @@ -671,18 +671,99 @@ <representationInContextMenu>Auto</representationInContextMenu> <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> </items> - <items xsi:type="form:Button"> - <name>ТаблицаРегламентныеЗаданияВыполнитьСейчас</name> - <id>152</id> + <items xsi:type="form:FormGroup"> + <name>ТаблицаРегламентныеЗаданияВыполнение</name> + <id>314</id> + <items xsi:type="form:Button"> + <name>ТаблицаРегламентныеЗаданияВыполнитьСейчас</name> + <id>152</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <skipOnInput>false</skipOnInput> + <extendedTooltip> + <name>ТаблицаРегламентныеЗаданияВыполнитьСейчасExtendedTooltip</name> + <id>191</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ВыполнитьРегламентноеЗаданиеВручную</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ТаблицаРегламентныеЗаданияВыполнитьНеВФоне</name> + <id>279</id> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ТаблицаРегламентныеЗаданияВыполнитьНеВФонеРасширеннаяПодсказка</name> + <id>280</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ВыполнитьНеВФоне</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ТаблицаРегламентныеЗаданияСобытияЖурналаРегистрации</name> + <id>306</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ТаблицаРегламентныеЗаданияСобытияЖурналаРегистрацииРасширеннаяПодсказка</name> + <id>307</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.СобытияЖурналаРегистрации</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> - <skipOnInput>false</skipOnInput> + <title> + <key>ru</key> + <value>Выполнение</value> + - ТаблицаРегламентныеЗаданияВыполнитьСейчасExtendedTooltip - 191 + ТаблицаРегламентныеЗаданияВыполнениеРасширеннаяПодсказка + 315 Label true true @@ -690,38 +771,7 @@ Left - Form.Command.ВыполнитьРегламентноеЗаданиеВручную - Normal - Auto - true - true - UserCmds - Auto - - - ТаблицаРегламентныеЗаданияВыполнитьНеВФоне - 279 - true - - true - - - ТаблицаРегламентныеЗаданияВыполнитьНеВФонеРасширеннаяПодсказка - 280 - Label - true - true - - Left - - - Form.Command.ВыполнитьНеВФоне - Normal - Auto - true - true - UserCmds - Auto + ТаблицаРегламентныеЗаданияОбновитьДанные @@ -749,6 +799,33 @@ UserCmds Auto + + ТаблицаРегламентныеЗаданияПоказатьВсеЗадания + 275 + true + true + + true + + + ТаблицаРегламентныеЗаданияПоказатьВсеЗаданияРасширеннаяПодсказка + 276 + Label + true + true + + Left + + + Form.Command.ПоказатьВсеЗадания + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ТаблицаРегламентныеЗаданияИзменитьФорму 244 @@ -802,33 +879,6 @@ UserCmds Auto - - ТаблицаРегламентныеЗаданияПоказатьВсеЗадания - 275 - true - true - - true - - - ТаблицаРегламентныеЗаданияПоказатьВсеЗаданияРасширеннаяПодсказка - 276 - Label - true - true - - Left - - - Form.Command.ПоказатьВсеЗадания - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - Left true
      @@ -1061,6 +1111,32 @@ UserCmds Auto + + ТаблицаРегламентныеЗаданияКонтекстноеМенюСобытияЖурналаРегистрации + 308 + true + true + + true + + + ТаблицаРегламентныеЗаданияКонтекстноеМенюСобытияЖурналаРегистрацииРасширеннаяПодсказка + 309 + Label + true + true + + Left + + + Form.Command.СобытияЖурналаРегистрации + Normal + Auto + true + true + UserCmds + Auto + ТаблицаРегламентныеЗаданияКонтекстноеМенюКопироватьВБуферОбмена 171 @@ -2184,32 +2260,6 @@ ТаблицаФоновыеЗаданияКоманднаяПанель 67 - - ТаблицаФоновыеЗаданияОбновитьРегламентныеЗадания - 281 - true - true - - true - - - ТаблицаФоновыеЗаданияОбновитьРегламентныеЗаданияРасширеннаяПодсказка - 282 - Label - true - true - - Left - - - Form.Command.ОбновитьРегламентныеЗадания - Normal - PictureAndText - true - true - UserCmds - Auto - ТаблицаФоновыеЗаданияОткрыть 121 @@ -2238,6 +2288,32 @@ UserCmds Auto + + ТаблицаФоновыеЗаданияСобытияЖурналаРегистрации + 310 + true + true + + true + + + ТаблицаФоновыеЗаданияСобытияЖурналаРегистрацииРасширеннаяПодсказка + 311 + Label + true + true + + Left + + + Form.Command.СобытияЖурналаРегистрации + Normal + Auto + true + true + UserCmds + Auto + ТаблицаФоновыеЗаданияОтменить 122 @@ -2269,6 +2345,31 @@ UserCmds Auto + + ТаблицаФоновыеЗаданияОбновитьРегламентныеЗадания + 281 + true + true + + true + + + ТаблицаФоновыеЗаданияОбновитьРегламентныеЗаданияРасширеннаяПодсказка + 282 + Label + true + true + + Left + + + Form.Command.ОбновитьРегламентныеЗадания + Normal + true + true + UserCmds + Auto + ТаблицаФоновыеЗаданияСправка 154 @@ -2387,6 +2488,32 @@ ТаблицаФоновыеЗаданияКонтекстноеМеню 66 + + ТаблицаФоновыеЗаданияКонтекстноеМенюСобытияЖурналаРегистрации + 312 + true + true + + true + + + ТаблицаФоновыеЗаданияКонтекстноеМенюСобытияЖурналаРегистрацииРасширеннаяПодсказка + 313 + Label + true + true + + Left + + + Form.Command.СобытияЖурналаРегистрации + Normal + Auto + true + true + UserCmds + Auto + true true @@ -3594,12 +3721,15 @@ true + + StdPicture.Stop + ОтменитьФоновоеЗадание - Text + TextPicture DontUse Auto @@ -3770,6 +3900,31 @@ DontUse Auto + + СобытияЖурналаРегистрации + + <key>ru</key> + <value>События журнала регистрации</value> + + 1 + + ru + Показать события журнала регистрации для выбранного задания + + + true + + + StdPicture.EventLog + + + + СобытияЖурналаРегистрации + + + DontUse + Auto + diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index 81388076f..0b5043a23 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -16,18 +24,18 @@ |выполняется только администраторами.'"); КонецЕсли; - ПустойИдентификатор = Строка(Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ПустойИдентификатор = Строка(ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); ТекстНеОпределено = РегламентныеЗаданияСлужебный.ТекстНеОпределено(); ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда + Если ОбщегоНазначения.РежимОтладки() Тогда Элементы.ТаблицаРегламентныеЗаданияКонтекстноеМенюВыполнитьНеВФоне.Видимость = Истина; Элементы.ТаблицаРегламентныеЗаданияВыполнитьНеВФоне.Видимость = Истина; КонецЕсли; Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = РегламентныеЗаданияСервер.РаботаСВнешнимиРесурсамиЗаблокирована(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Элементы.ТаблицаРегламентныеЗаданияОбновитьДанные.ТолькоВоВсехДействиях = Истина; Элементы.ТаблицаРегламентныеЗаданияНастроитьРасписание.ТолькоВоВсехДействиях = Истина; @@ -348,15 +356,15 @@ Если Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные = Неопределено Тогда ПоказатьПредупреждение(, НСтр("ru = 'Выберите фоновое задание.'")); - Иначе - ОтменитьФоновоеЗаданиеНаСервере(Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные.Идентификатор); - ЗагрузитьРегламентныеЗадания(, Истина); - - ПоказатьПредупреждение(, - НСтр("ru = 'Задание отменено, но состояние отмены будет - |установлено сервером только через секунды, - |возможно потребуется обновить данные вручную.'")); + Возврат; КонецЕсли; + + ОтменитьФоновоеЗаданиеНаСервере(Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные.Идентификатор); + ЗагрузитьРегламентныеЗадания(, Истина); + + ПоказатьПредупреждение(, + НСтр("ru = 'Задание отменено, но состояние отмены будет установлено сервером только через некоторое время, + |возможно потребуется обновить данные вручную.'")); КонецПроцедуры @@ -384,7 +392,7 @@ Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл ТекущиеДанные = ТаблицаРегламентныеЗадания.НайтиПоИдентификатору(ВыделеннаяСтрока); - ПараметрыВыполнения = ЗапуститьРегламентноеЗаданиеНеВФоне(ТекущиеДанные.Идентификатор); + ЗапуститьРегламентноеЗаданиеНеВФоне(ТекущиеДанные.Идентификатор); Индекс = Индекс + 1; КонецЦикла; @@ -398,7 +406,7 @@ КонецПроцедуры &НаСервере -Функция ЗапуститьРегламентноеЗаданиеНеВФоне(ИдентификаторЗадания) +Процедура ЗапуститьРегламентноеЗаданиеНеВФоне(ИдентификаторЗадания) РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); @@ -410,7 +418,37 @@ ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяМетода, Задание.Параметры); ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить("РегламентныеЗадания", ИмяМетода, Неопределено); -КонецФункции +КонецПроцедуры + +&НаКлиенте +Процедура СобытияЖурналаРегистрации(Команда) + + ОтборСобытий = Новый Структура; + Если Элементы.Задания.ТекущаяСтраница = Элементы.РегламентныеЗадания Тогда + ТекущиеДанные = Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите регламентное задание.'")); + Возврат; + КонецЕсли; + Если Не ЗначениеЗаполнено(ТекущиеДанные.ДатаНачала) И Не ЗначениеЗаполнено(ТекущиеДанные.ДатаОкончания) Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Нет событий для просмотра, так как регламентное задание не выполнялось.'")); + Возврат; + КонецЕсли; + ОтборСобытий.Вставить("ДатаНачала", ТекущиеДанные.ДатаНачала); + ОтборСобытий.Вставить("ДатаОкончания", ТекущиеДанные.ДатаОкончания); + ИначеЕсли Элементы.Задания.ТекущаяСтраница = Элементы.ФоновыеЗадания Тогда + ТекущиеДанные = Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите фоновое задание.'")); + Возврат; + КонецЕсли; + ОтборСобытий.Вставить("ДатаНачала", ТекущиеДанные.Начало); + ОтборСобытий.Вставить("ДатаОкончания", ТекущиеДанные.Конец); + КонецЕсли; + + ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ОтборСобытий, ЭтотОбъект); + +КонецПроцедуры #КонецОбласти @@ -790,7 +828,6 @@ Процедура ОтменитьФоновоеЗаданиеНаСервере(Знач Идентификатор) РегламентныеЗаданияСлужебный.ОтменитьФоновоеЗадание(Идентификатор); - ОбновитьТаблицуФоновыхЗаданий(); КонецПроцедуры @@ -908,7 +945,7 @@ Функция ЗагрузкаРегламентныхЗаданий(ИдентификаторЗадания) Если РезультатВыполнения <> Неопределено - И РезультатВыполнения.ИдентификаторЗадания <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда + И ЗначениеЗаполнено(РезультатВыполнения.ИдентификаторЗадания) Тогда ДлительныеОперации.ОтменитьВыполнениеЗадания(РезультатВыполнения.ИдентификаторЗадания); КонецЕсли; @@ -922,11 +959,9 @@ ПараметрыВыполнения.ОжидатьЗавершение = 0; // запускать сразу ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Формирование таблицы регламентных заданий'"); - РезультатВыполнения = ДлительныеОперации.ВыполнитьВФоне("РегламентныеЗаданияСлужебный.ОбновленнаяТаблицаРегламентныхЗаданий", + Возврат ДлительныеОперации.ВыполнитьВФоне("РегламентныеЗаданияСлужебный.СформироватьТаблицуРегламентныхЗаданий", ПараметрыДлительнойОперации, ПараметрыВыполнения); - Возврат РезультатВыполнения; - КонецФункции &НаСервере @@ -1012,7 +1047,7 @@ ПараметрыВыполнения.ОжидатьЗавершение = 0; ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Регламентные задания. Обновление списка фоновых заданий'"); - Результат = ДлительныеОперации.ВыполнитьВФоне("РегламентныеЗаданияСлужебный.ТаблицаСвойствФоновыхЗаданийВФоне", + Результат = ДлительныеОперации.ВыполнитьВФоне("РегламентныеЗаданияСлужебный.ЗаполнитьТаблицуСвойствФоновыхЗаданийВФоне", ПередаваемыеПараметры, ПараметрыВыполнения); Если Результат.Статус = "Выполнено" Тогда diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form index 59b03d4c7..f47357c45 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Form.form @@ -1,5 +1,5 @@ - + <key>ru</key> <value>Фоновое задание</value> @@ -550,6 +550,7 @@ <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> <autoMaxWidth>true</autoMaxWidth> + <height>5</height> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> <multiLine>true</multiLine> @@ -590,6 +591,32 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> + <items xsi:type="form:Button"> + <name>ФормаСобытияЖурналаРегистрации</name> + <id>46</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаСобытияЖурналаРегистрацииРасширеннаяПодсказка</name> + <id>47</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.СобытияЖурналаРегистрации</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> @@ -607,6 +634,7 @@ <excludedCommands>Retry</excludedCommands> <excludedCommands>SaveValues</excludedCommands> <excludedCommands>Yes</excludedCommands> + <width>60</width> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> @@ -828,6 +856,32 @@ <common>true</common> </edit> </attributes> + <formCommands> + <name>СобытияЖурналаРегистрации</name> + <title> + <key>ru</key> + <value>События журнала регистрации</value> + + 1 + + ru + Показать события журнала регистрации для данного задания + + + true + + + StdPicture.EventLog + + + + СобытияЖурналаРегистрации + + + TextPicture + DontUse + Auto + Идентификатор diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl index cb3f88975..27ba9b3ad 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -59,3 +66,15 @@ КонецПроцедуры #КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СобытияЖурналаРегистрации(Команда) + ОтборСобытий = Новый Структура; + ОтборСобытий.Вставить("ДатаНачала", Начало); + ОтборСобытий.Вставить("ДатаОкончания", Конец); + ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ОтборСобытий, ЭтотОбъект); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ВыполнитьВосстановлениеДанных/CommandModule.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ВыполнитьВосстановлениеДанных/CommandModule.bsl index f79ed6a3c..b9be36b05 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ВыполнитьВосстановлениеДанных/CommandModule.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ВыполнитьВосстановлениеДанных/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl index fcf652974..d7fb7742c 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Commands/ПоказатьРезультат/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl index 086f58524..a2ba1c55e 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,16 +15,13 @@ Возврат; КонецЕсли; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда ВызватьИсключение НСтр("ru = 'Резервное копирование и восстановление данных необходимо настроить средствами операционной системы или другими сторонними средствами.'"); КонецЕсли; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - Возврат; // Отказ устанавливается в ПриОткрытии(). - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - ВызватьИсключение НСтр("ru = 'Резервное копирование недоступно в веб-клиенте.'"); + Если ОбщегоНазначения.ЭтоВебКлиент() + Или ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ВызватьИсключение НСтр("ru = 'Резервное копирование недоступно в веб-клиенте и мобильном клиенте.'"); КонецЕсли; Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда @@ -75,10 +79,10 @@ Возврат; КонецЕсли; - ОтключитьОбработчикОжидания("ИстечениеВремениОжидания"); - ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); - ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); - + СоединенияИБКлиент.УстановитьПризнакЗавершитьВсеСеансыКромеТекущего(Ложь); + СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); + СоединенияИБВызовСервера.РазрешитьРаботуПользователей(); + КонецПроцедуры &НаКлиенте @@ -109,8 +113,10 @@ &НаКлиенте Процедура НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); + КонецПроцедуры #КонецОбласти @@ -133,35 +139,42 @@ Возврат; КонецЕсли; - Страницы = Элементы.СтраницыЗагрузкиДанных; + Оповещение = Новый ОписаниеОповещения("ГотовоПослеПроверкиДоступаКИнформационнойБазе", ЭтотОбъект); + + РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ, Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ГотовоПослеПроверкиДоступаКИнформационнойБазе(РезультатПодключения, Контекст) Экспорт - РезультатПодключения = РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ); Если РезультатПодключения.ОшибкаПодключенияКомпоненты Тогда Элементы.СтраницыСтатусаВосстановления.ТекущаяСтраница = Элементы.СтраницаОшибкаПодключения; ОбнаруженнаяОшибкаПодключения = РезультатПодключения.КраткоеОписаниеОшибки; - Возврат; Иначе УстановитьПараметрыРезервногоКопирования(); - КонецЕсли; - - Страницы.ТекущаяСтраница = Элементы.СтраницаИнформацииИВыполненияРезервногоКопирования; - Элементы.Закрыть.Доступность = Истина; - Элементы.Готово.Доступность = Ложь; - - КоличествоСеансовИнформационнойБазы = КоличествоСеансовИнформационнойБазы(); - Элементы.КоличествоАктивныхПользователей.Заголовок = КоличествоСеансовИнформационнойБазы; - - УстановитьБлокировкуСоединений = Истина; - СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(НСтр("ru = 'Выполняется восстановление информационной базы.'"), "РезервноеКопирование"); - - Если КоличествоСеансовИнформационнойБазы = 1 Тогда - СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(УстановитьБлокировкуСоединений); - СоединенияИБКлиент.ЗавершитьРаботуЭтогоСеанса(Ложь); - НачатьРезервноеКопирование(); - Иначе - СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(УстановитьБлокировкуСоединений); - УстановитьОбработчикОжиданияНачалаРезервногоКопирования(); - УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования(); + + Страницы = Элементы.СтраницыЗагрузкиДанных; + + Страницы.ТекущаяСтраница = Элементы.СтраницаИнформацииИВыполненияРезервногоКопирования; + Элементы.Закрыть.Доступность = Истина; + Элементы.Готово.Доступность = Ложь; + + КоличествоСеансовИнформационнойБазы = КоличествоСеансовИнформационнойБазы(); + Элементы.КоличествоАктивныхПользователей.Заголовок = КоличествоСеансовИнформационнойБазы; + + СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(НСтр("ru = 'Выполняется восстановление информационной базы.'"), "РезервноеКопирование"); + + Если КоличествоСеансовИнформационнойБазы = 1 Тогда + СоединенияИБКлиент.УстановитьПризнакЗавершитьВсеСеансыКромеТекущего(Истина); + СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Истина); + НачатьРезервноеКопирование(); + Иначе + СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Истина); + УстановитьОбработчикОжиданияНачалаРезервногоКопирования(); + УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования(); + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -188,7 +201,7 @@ &НаКлиенте Процедура УстановитьОбработчикОжиданияНачалаРезервногоКопирования() - ПодключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения", 60); + ПодключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения", 5); КонецПроцедуры @@ -212,18 +225,16 @@ &НаКлиенте Функция ПроверитьЗаполнениеРеквизитов() -#Если ВебКлиент Тогда - ТекстСообщения = НСтр("ru = 'Восстановление не доступно в веб-клиенте.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); +#Если ВебКлиент Или МобильныйКлиент Тогда + ТекстСообщения = НСтр("ru = 'Восстановление не доступно в веб-клиенте и мобильном клиенте.'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); Возврат Ложь; -#КонецЕсли - - РеквизитыЗаполнены = Истина; +#Иначе Если ТребуетсяВводПароля И ПустаяСтрока(ПарольАдминистратораИБ) Тогда ТекстСообщения = НСтр("ru = 'Не задан пароль администратора.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "ПарольАдминистратораИБ"); - РеквизитыЗаполнены = Ложь; + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "ПарольАдминистратораИБ"); + Возврат Ложь; КонецЕсли; Объект.ФайлЗагрузкиРезервнойКопии = СокрЛП(Объект.ФайлЗагрузкиРезервнойКопии); @@ -231,59 +242,61 @@ Если ПустаяСтрока(ИмяФайла) Тогда ТекстСообщения = НСтр("ru = 'Не выбран файл с резервной копией.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); Возврат Ложь; КонецЕсли; ФайлАрхива = Новый Файл(ИмяФайла); - Если ВРег(ФайлАрхива.Расширение) <> ".ZIP" Или ВРег(ФайлАрхива.Расширение) <> ".1CD" Тогда + Если ВРег(ФайлАрхива.Расширение) <> ".ZIP" И ВРег(ФайлАрхива.Расширение) <> ".1CD" Тогда ТекстСообщения = НСтр("ru = 'Выбранный файл не является архивом с резервной копией.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); - Возврат РеквизитыЗаполнены; + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); + Возврат Ложь; КонецЕсли; Если ВРег(ФайлАрхива.Расширение) = ".1CD" Тогда Если ВРег(ФайлАрхива.ИмяБезРасширения) <> "1CV8" Тогда - ТекстСообщения = НСтр("ru = 'Выбранный файл не является резервной копией (неправильное имя файла информационной базы).'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); Возврат Ложь; КонецЕсли; - Возврат РеквизитыЗаполнены; - КонецЕсли; - - ZipФайл = Новый ЧтениеZipФайла(ИмяФайла); - Если ZipФайл.Элементы.Количество() <> 1 Тогда + Иначе - ТекстСообщения = НСтр("ru = 'Выбранный файл не является архивом с резервной копией (содержит более одного файла).'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); - Возврат Ложь; + ZipФайл = Новый ЧтениеZipФайла(ИмяФайла); + Если ZipФайл.Элементы.Количество() <> 1 Тогда + + ТекстСообщения = НСтр("ru = 'Выбранный файл не является архивом с резервной копией (содержит более одного файла).'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); + Возврат Ложь; + + КонецЕсли; + + ФайлВАрхиве = ZipФайл.Элементы[0]; + + Если ВРег(ФайлВАрхиве.Расширение) <> "1CD" Тогда + + ТекстСообщения = НСтр("ru = 'Выбранный файл не является архивом с резервной копией (не содержит файл информационной базы).'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); + Возврат Ложь; + + КонецЕсли; + + Если ВРег(ФайлВАрхиве.ИмяБезРасширения) <> "1CV8" Тогда + + ТекстСообщения = НСтр("ru = 'Выбранный файл не является архивом с резервной копией (неправильное имя файла информационной базы).'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); + Возврат Ложь; + + КонецЕсли; КонецЕсли; - ФайлВАрхиве = ZipФайл.Элементы[0]; + Возврат Истина; - Если ВРег(ФайлВАрхиве.Расширение) <> "1CD" Тогда - - ТекстСообщения = НСтр("ru = 'Выбранный файл не является архивом с резервной копией (не содержит файл информационной базы).'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); - Возврат Ложь; - - КонецЕсли; - - Если ВРег(ФайлВАрхиве.ИмяБезРасширения) <> "1CV8" Тогда - - ТекстСообщения = НСтр("ru = 'Выбранный файл не является архивом с резервной копией (неправильное имя файла информационной базы).'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.ФайлЗагрузкиРезервнойКопии"); - Возврат Ложь; - - КонецЕсли; - - Возврат РеквизитыЗаполнены; +#КонецЕсли КонецФункции @@ -325,8 +338,11 @@ &НаКлиенте Процедура НачатьРезервноеКопирование() +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( + РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), "Информация", НСтр("ru = 'Выполняется восстановление данных информационной базы:'") + " " + ИмяГлавногоФайлаСкрипта); @@ -338,18 +354,38 @@ ПутьКПрограммеЗапуска = СтандартныеПодсистемыКлиент.ПапкаСистемныхПриложений() + "mshta.exe"; СтрокаЗапуска = """%1"" ""%2"" [p1]%3[/p1]"; - СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапуска, - ПутьКПрограммеЗапуска, ИмяГлавногоФайлаСкрипта, РезервноеКопированиеИБКлиент.СтрокаUnicode(ПарольАдминистратораИБ)); - - ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаЗапуска); + СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СтрокаЗапуска, + ПутьКПрограммеЗапуска, + ИмяГлавногоФайлаСкрипта, + РезервноеКопированиеИБКлиент.СтрокаUnicode(ПарольАдминистратораИБ)); - ЗавершитьРаботуСистемы(Ложь); + ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.Оповещение = Новый ОписаниеОповещения("ПослеЗапускаСкрипта", ЭтотОбъект); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Ложь; + + ФайловаяСистемаКлиент.ЗапуститьПрограмму(СтрокаЗапуска, ПараметрыЗапускаПрограммы); + +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗапускаСкрипта(Результат, Контекст) Экспорт + + Если Результат.ПриложениеЗапущено Тогда + ЗавершитьРаботуСистемы(Ложь); + Иначе + ПоказатьПредупреждение(, Результат.ОписаниеОшибки); + КонецЕсли; КонецПроцедуры ////////////////////////////////////////////////////////////////////////////////////////////////////////// // Процедуры и функции подготовки восстановления данных. +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + &НаКлиенте Функция СформироватьФайлыСкриптаОбновления() @@ -359,12 +395,13 @@ // Структура параметров необходима для их определения на клиенте и передачи на сервер. СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("ИмяФайлаПрограммы" , ПараметрыКопирования.ИмяФайлаПрограммы); - СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации" , ПараметрыКопирования.СобытиеЖурналаРегистрации); - СтруктураПараметров.Вставить("ИмяCOMСоединителя" , ПараметрыРаботыКлиента.ИмяCOMСоединителя); - СтруктураПараметров.Вставить("ЭтоБазоваяВерсияКонфигурации" , ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации); - СтруктураПараметров.Вставить("ИнформационнаяБазаФайловая" , ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая); - СтруктураПараметров.Вставить("ПараметрыСкрипта" , РезервноеКопированиеИБКлиент.ПараметрыАутентификацииАдминистратораОбновления(ПарольАдминистратораИБ)); + СтруктураПараметров.Вставить("ИмяФайлаПрограммы" , ПараметрыКопирования.ИмяФайлаПрограммы); + СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации" , ПараметрыКопирования.СобытиеЖурналаРегистрации); + СтруктураПараметров.Вставить("ИмяCOMСоединителя" , ПараметрыРаботыКлиента.ИмяCOMСоединителя); + СтруктураПараметров.Вставить("ЭтоБазоваяВерсияКонфигурации", ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации); + СтруктураПараметров.Вставить("ИнформационнаяБазаФайловая" , ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая); + СтруктураПараметров.Вставить("ПараметрыСкрипта" , РезервноеКопированиеИБКлиент.ПараметрыАутентификацииАдминистратораОбновления(ПарольАдминистратораИБ)); + СтруктураПараметров.Вставить("ПараметрыЗапускаПредприятия" , ОбщегоНазначенияСлужебныйКлиент.ПараметрыЗапускаПредприятияИзСкрипта()); ИменаМакетов = "ДопФайлРезервногоКопирования"; ИменаМакетов = ИменаМакетов + ",ЗаставкаВосстановления"; @@ -407,6 +444,8 @@ КонецФункции +#КонецЕсли + &НаСервере Функция ПолучитьТекстыМакетов(ИменаМакетов, СтруктураПараметров, СообщенияДляЖурналаРегистрации) @@ -462,8 +501,7 @@ ПутьКИнформационнойБазе = СоединенияИБКлиентСервер.ПутьКИнформационнойБазе(ПризнакФайловогоРежима, 0); ПараметрПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, "/F", "/S") + ПутьКИнформационнойБазе; - СтрокаПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, ПутьКИнформационнойБазе, ""); - СтрокаКаталога = ПроверитьКаталогНаУказаниеКорневогоЭлемента(Объект.КаталогСРезервнымиКопиями); + СтрокаПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, ПутьКИнформационнойБазе, ""); Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , ПодготовитьТекст(ИмяИсполняемогоФайлаПрограммы)); Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , ПодготовитьТекст(ПараметрПутиКИнформационнойБазе)); @@ -476,22 +514,12 @@ Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); // Используется КаталогВременныхФайлов, т.к. автоматическое удаление временного каталога не допустимо. Результат = СтрЗаменить(Результат, "[КаталогВременныхФайлов]" , ПодготовитьТекст(КаталогВременныхФайлов())); + Результат = СтрЗаменить(Результат, "[ПараметрыЗапускаПредприятия]" , ПодготовитьТекст(СтруктураПараметров.ПараметрыЗапускаПредприятия)); Возврат Результат; КонецФункции -&НаСервере -Функция ПроверитьКаталогНаУказаниеКорневогоЭлемента(СтрокаКаталога) - - Если СтрЗаканчиваетсяНа(СтрокаКаталога, ":\") Тогда - Возврат Лев(СтрокаКаталога, СтрДлина(СтрокаКаталога) - 1) ; - Иначе - Возврат СтрокаКаталога; - КонецЕсли; - -КонецФункции - &НаСервере Функция ПодготовитьТекст(Знач Текст) @@ -514,7 +542,7 @@ КонецПроцедуры -&НаСервере +&НаСервереБезКонтекста Функция КоличествоСеансовИнформационнойБазы() Возврат СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь, Ложь); diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl index be94e3dfe..3d00d801b 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -14,11 +22,11 @@ Возврат; КонецЕсли; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда ВызватьИсключение НСтр("ru = 'Резервное копирование и восстановление данных необходимо настроить средствами операционной системы или другими сторонними средствами.'"); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если ОбщегоНазначения.ЭтоВебКлиент() Тогда ВызватьИсключение НСтр("ru = 'Резервное копирование недоступно в веб-клиенте.'"); КонецЕсли; @@ -141,6 +149,7 @@ КонецЕсли; СоединенияИБКлиент.УстановитьПризнакЗавершитьВсеСеансыКромеТекущего(Ложь); + СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); СоединенияИБВызовСервера.РазрешитьРаботуПользователей(); Если ПроцессВыполняется() Тогда @@ -182,7 +191,7 @@ Процедура ИмяФайлаРезервнойКопииОткрытие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ОбщегоНазначенияКлиент.ОткрытьПроводник(ИмяФайлаРезервнойКопии); + ФайловаяСистемаКлиент.ОткрытьПроводник(ИмяФайлаРезервнойКопии); КонецПроцедуры @@ -262,11 +271,20 @@ Возврат; КонецЕсли; - РезультатПодключения = РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ); + Оповещение = Новый ОписаниеОповещения( + "ПерейтиНаСтраницуРезервногоКопированияПослеПроверкиДоступаКИнформационнойБазе", ЭтотОбъект); + + РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ, Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиНаСтраницуРезервногоКопированияПослеПроверкиДоступаКИнформационнойБазе(РезультатПодключения, + Контекст) Экспорт + Если РезультатПодключения.ОшибкаПодключенияКомпоненты Тогда Элементы.СтраницыСтатусаКопирования.ТекущаяСтраница = Элементы.СтраницаОшибкаПодключения; ОбнаруженнаяОшибкаПодключения = РезультатПодключения.КраткоеОписаниеОшибки; - ПерейтиДалее = Ложь; Возврат; Иначе УстановитьПараметрыРезервногоКопирования(); @@ -274,31 +292,25 @@ ПроцессВыполняется(Истина); - Элементы.Отмена.Доступность = Истина; - Элементы.КоличествоАктивныхПользователей.Заголовок = КоличествоСеансовИнформационнойБазы(); - УстановитьЗаголовокКнопкиДалее(Истина); - Элементы.Далее.Доступность = Ложь; + КоличествоСеансовИнформационнойБазы = КоличествоСеансовИнформационнойБазы(); + Элементы.КоличествоАктивныхПользователей.Заголовок = КоличествоСеансовИнформационнойБазы; - Если КоличествоСеансовИнформационнойБазы() = 1 Тогда - - СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(НСтр("ru = 'Для выполнения резервного копирования.'"), "РезервноеКопирование"); + Элементы.Отмена.Доступность = Истина; + Элементы.Далее.Доступность = Ложь; + УстановитьЗаголовокКнопкиДалее(Истина); + + СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(НСтр("ru = 'Выполняется восстановление информационной базы.'"), "РезервноеКопирование"); + + Если КоличествоСеансовИнформационнойБазы = 1 Тогда СоединенияИБКлиент.УстановитьПризнакЗавершитьВсеСеансыКромеТекущего(Истина); СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Истина); - СоединенияИБКлиент.ЗавершитьРаботуЭтогоСеанса(Ложь); - НачатьРезервноеКопирование(); - Иначе - - ОчиститьСообщения(); - ПроверитьНаличиеБлокирующихСеансов(); - СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(НСтр("ru = 'Для выполнения резервного копирования.'"), "РезервноеКопирование"); СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Истина); УстановитьОбработчикОжиданияНачалаРезервногоКопирования(); УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования(); - КонецЕсли; КонецПроцедуры @@ -360,7 +372,7 @@ #Если ВебКлиент Тогда ТекстСообщения = НСтр("ru = 'Создание резервной копии не доступно в веб-клиенте.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); РеквизитыЗаполнены = Ложь; #Иначе @@ -423,7 +435,7 @@ Процедура ЗафиксироватьОшибкуПроверкиРеквизитов(ТекстОшибки, ПутьКРеквизиту, ВыдаватьОшибку) Если ВыдаватьОшибку Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, ПутьКРеквизиту); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки,, ПутьКРеквизиту); Иначе ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), "Ошибка", ТекстОшибки, , Истина); @@ -481,7 +493,7 @@ &НаКлиенте Процедура УстановитьОбработчикОжиданияНачалаРезервногоКопирования() - ПодключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения", 30); + ПодключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения", 5); КонецПроцедуры @@ -529,10 +541,14 @@ &НаКлиенте Процедура НачатьРезервноеКопирование() +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(); - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), - "Информация", НСтр("ru = 'Выполняется резервное копирование информационной базы:'") + " " + ИмяГлавногоФайлаСкрипта); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( + РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), + "Информация", + НСтр("ru = 'Выполняется резервное копирование информационной базы:'") + " " + ИмяГлавногоФайлаСкрипта); Если Параметры.РежимРаботы = "ВыполнитьСейчас" Или Параметры.РежимРаботы = "ВыполнитьПриЗавершенииРаботы" Тогда РезервноеКопированиеИБКлиент.УдалитьРезервныеКопииПоНастройке(); @@ -547,12 +563,30 @@ ПутьКПрограммеЗапуска = СтандартныеПодсистемыКлиент.ПапкаСистемныхПриложений() + "mshta.exe"; СтрокаЗапуска = """%1"" ""%2"" [p1]%3[/p1]"; - СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапуска, - ПутьКПрограммеЗапуска, ИмяГлавногоФайлаСкрипта, РезервноеКопированиеИБКлиент.СтрокаUnicode(ПарольАдминистратораИБ)); - - ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(СтрокаЗапуска); + СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СтрокаЗапуска, + ПутьКПрограммеЗапуска, + ИмяГлавногоФайлаСкрипта, + РезервноеКопированиеИБКлиент.СтрокаUnicode(ПарольАдминистратораИБ)); - ЗавершитьРаботуСистемы(Ложь); + ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.Оповещение = Новый ОписаниеОповещения("ПослеЗапускаСкрипта", ЭтотОбъект); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Ложь; + + ФайловаяСистемаКлиент.ЗапуститьПрограмму(СтрокаЗапуска, ПараметрыЗапускаПрограммы); + +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗапускаСкрипта(Результат, Контекст) Экспорт + + Если Результат.ПриложениеЗапущено Тогда + ЗавершитьРаботуСистемы(Ложь); + Иначе + ПоказатьПредупреждение(, Результат.ОписаниеОшибки); + КонецЕсли; КонецПроцедуры @@ -571,6 +605,8 @@ ////////////////////////////////////////////////////////////////////////////////////////////////////////// // Процедуры и функции подготовки резервного копирования. +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + &НаКлиенте Функция СформироватьФайлыСкриптаОбновления() @@ -580,11 +616,12 @@ // Структура параметров необходима для их определения на клиенте и передачи на сервер. СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("ИмяФайлаПрограммы" , ПараметрыРезервногоКопирования.ИмяФайлаПрограммы); - СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации" , ПараметрыРезервногоКопирования.СобытиеЖурналаРегистрации); - СтруктураПараметров.Вставить("ИмяCOMСоединителя" , ПараметрыРаботыКлиентаПриЗапуске.ИмяCOMСоединителя); - СтруктураПараметров.Вставить("ЭтоБазоваяВерсияКонфигурации" , ПараметрыРаботыКлиентаПриЗапуске.ЭтоБазоваяВерсияКонфигурации); - СтруктураПараметров.Вставить("ПараметрыСкрипта" , РезервноеКопированиеИБКлиент.ПараметрыАутентификацииАдминистратораОбновления(ПарольАдминистратораИБ)); + СтруктураПараметров.Вставить("ИмяФайлаПрограммы" , ПараметрыРезервногоКопирования.ИмяФайлаПрограммы); + СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации" , ПараметрыРезервногоКопирования.СобытиеЖурналаРегистрации); + СтруктураПараметров.Вставить("ИмяCOMСоединителя" , ПараметрыРаботыКлиентаПриЗапуске.ИмяCOMСоединителя); + СтруктураПараметров.Вставить("ЭтоБазоваяВерсияКонфигурации" , ПараметрыРаботыКлиентаПриЗапуске.ЭтоБазоваяВерсияКонфигурации); + СтруктураПараметров.Вставить("ПараметрыСкрипта" , РезервноеКопированиеИБКлиент.ПараметрыАутентификацииАдминистратораОбновления(ПарольАдминистратораИБ)); + СтруктураПараметров.Вставить("ПараметрыЗапускаПредприятия" , ОбщегоНазначенияСлужебныйКлиент.ПараметрыЗапускаПредприятияИзСкрипта()); ИменаМакетов = "ДопФайлРезервногоКопирования"; ИменаМакетов = ИменаМакетов + ",ЗаставкаРезервногоКопирования"; @@ -626,6 +663,8 @@ КонецФункции +#КонецЕсли + &НаСервере Функция ПолучитьТекстыМакетов(ИменаМакетов, СтруктураПараметров, СообщенияДляЖурналаРегистрации) @@ -687,18 +726,19 @@ СтрокаКаталога = ПроверитьКаталогНаУказаниеКорневогоЭлемента(Объект.КаталогСРезервнымиКопиями); - Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , ПодготовитьТекст(ИмяИсполняемогоФайлаПрограммы)); - Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , ПодготовитьТекст(ПараметрПутиКИнформационнойБазе)); + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , ПодготовитьТекст(ИмяИсполняемогоФайлаПрограммы)); + Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , ПодготовитьТекст(ПараметрПутиКИнформационнойБазе)); Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]", ПодготовитьТекст(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")))); Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]", ПодготовитьТекст(СтрокаСоединенияИнформационнойБазы)); - Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , ПодготовитьТекст(ИмяПользователя())); - Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , ПодготовитьТекст(СтруктураПараметров.СобытиеЖурналаРегистрации)); - Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" , "true"); - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" , ПодготовитьТекст(СтрокаКаталога + "\backup" + СтрокаКаталогаИзДаты())); + Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , ПодготовитьТекст(ИмяПользователя())); + Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , ПодготовитьТекст(СтруктураПараметров.СобытиеЖурналаРегистрации)); + Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" , "true"); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" , ПодготовитьТекст(СтрокаКаталога + "\backup" + СтрокаКаталогаИзДаты())); Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , "false"); - Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , ПодготовитьТекст(СтруктураПараметров.ИмяCOMСоединителя)); - Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); - Результат = СтрЗаменить(Результат, "[ВыполнитьПриЗавершенииРаботы]" , ?(Параметры.РежимРаботы = "ВыполнитьПриЗавершенииРаботы", "true", "false")); + Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , ПодготовитьТекст(СтруктураПараметров.ИмяCOMСоединителя)); + Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); + Результат = СтрЗаменить(Результат, "[ВыполнитьПриЗавершенииРаботы]" , ?(Параметры.РежимРаботы = "ВыполнитьПриЗавершенииРаботы", "true", "false")); + Результат = СтрЗаменить(Результат, "[ПараметрыЗапускаПредприятия]" , ПодготовитьТекст(СтруктураПараметров.ПараметрыЗапускаПредприятия)); Возврат Результат; @@ -737,11 +777,13 @@ &НаКлиенте Процедура НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); + КонецПроцедуры -&НаСервере +&НаСервереБезКонтекста Функция КоличествоСеансовИнформационнойБазы() Возврат СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь, Ложь); diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ДопФайлРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ДопФайлРезервногоКопирования/Template.txt index 72d9fc477..b2215f6ab 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ДопФайлРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ДопФайлРезервногоКопирования/Template.txt @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // helpers.js // Вспомогательные функции. diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt index 1b4c3d482..70f7f2bad 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt @@ -1,4 +1,13 @@ #Область ОбластьПараметров +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Параметры процедуры обновления var now = new Date() var outFileName = 'log' + now.valueOf() + '.txt' // Путь к log-файлу @@ -15,9 +24,11 @@ var comConnectorName = [ИмяCOMСоединителя] // имя COM-клас var useComConnector = [ИспользоватьCOMСоединитель] // флаг использования COM-соединения для работы с 1С:Предприятием 8 var tempLogFileName = 'templog.txt' var retryCount = 0 +var runAppAdditionalParams = [ПараметрыЗапускаПредприятия] // Аргументы командной строки, которые следует добавить к запуску 1С:Предприятия в режиме клиента. #КонецОбласти #Область ОбластьРезервногоКопирования + if (useComConnector) { var comConnectorCached = new ActiveXObject(comConnectorName) // для защиты от перерегистрации comConnector из других сеансов } @@ -398,7 +409,16 @@ function fromUnicode (text) { // Интерактивный запуск "1С:Предприятие" function runEnterprise () { - return runApp(v8exe, format('ENTERPRISE {0} {1}', infoBasePath, infoBaseAuthorization), SW_SHOW, false) + return runApp( + v8exe, + format( + 'ENTERPRISE {0} {1} {2}', + infoBasePath, + infoBaseAuthorization, + runAppAdditionalParams), + SW_SHOW, + false) + return 0 } #КонецОбласти diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt index 69eae7242..016827ab9 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt @@ -1,4 +1,13 @@ #Область ОбластьПараметров +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Параметры процедуры обновления var now = new Date() var outFileName = 'log' + now.valueOf() + '.txt' // Путь к log-файлу @@ -15,9 +24,11 @@ var comConnectorName = [ИмяCOMСоединителя] // имя COM-клас var useComConnector = [ИспользоватьCOMСоединитель] // флаг использования COM-соединения для работы с 1С:Предприятием 8 var OnExit = [ВыполнитьПриЗавершенииРаботы] // "true" - при завершении работы, "false" - прямо сейчас. var tempLogFileName = 'templog.txt' +var runAppAdditionalParams = [ПараметрыЗапускаПредприятия] // Аргументы командной строки, которые следует добавить к запуску 1С:Предприятия в режиме клиента. #КонецОбласти #Область ОбластьРезервногоКопирования + if (useComConnector) { var comConnectorCached = new ActiveXObject(comConnectorName) // для защиты от перерегистрации comConnector из других сеансов } @@ -427,9 +438,18 @@ function fromUnicode (text) { // Интерактивный запуск "1С:Предприятие" function runEnterprise () { - if (OnExit === false) { - return runApp(v8exe, format('ENTERPRISE {0} {1}', infoBasePath, infoBaseAuthorization), SW_SHOW, false) + if (OnExit === false) { + return runApp( + v8exe, + format( + 'ENTERPRISE {0} {1} {2}', + infoBasePath, + infoBaseAuthorization, + runAppAdditionalParams), + SW_SHOW, + false) } + return 0 } #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl index 51789ede7..838b19e6c 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -55,20 +63,9 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) - - Если ЗавершениеРаботы Тогда - Если ВыполняетсяОбновлениеВерсииИБ Тогда - Отказ = Истина; - КонецЕсли; - Возврат; - КонецЕсли; - Если ВыполняетсяОбновлениеВерсииИБ Тогда Отказ = Истина; - ИначеЕсли МонопольныйРежимУстановлен Тогда - СнятьМонопольныйРежим(); КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -92,17 +89,6 @@ //////////////////////////////////////////////////////////////////////////////// // Обновление параметров работы программы и неразделенных данных в сервисе. -&НаСервереБезКонтекста -Процедура СнятьМонопольныйРежим() - - Если МонопольныйРежим() Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; - - МонопольныйРежимУстановлен = Ложь; - -КонецПроцедуры - &НаКлиенте Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(Параметры) Экспорт @@ -308,6 +294,11 @@ Возврат; КонецЕсли; + Если Прогресс.Свойство("ДополнительныеПараметры") + И Прогресс.ДополнительныеПараметры.Свойство("ОбменДанными") Тогда + Возврат; + КонецЕсли; + Если Прогресс.Прогресс <> Неопределено Тогда ПрогрессВыполнения = 10 + (90 * Прогресс.Прогресс.Процент / 100); КонецЕсли; @@ -530,10 +521,10 @@ КонецЕсли; СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновлении.ОбрабатываемыеДанные = Новый Соответствие; + ОбрабатываемыеДанные = СведенияОбОбновлении.ОбрабатываемыеДанные; ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; - ОписаниеПроцедур = Новый Соответствие; - Для Каждого ОписаниеБиблиотеки Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл Если ОписанияБиблиотек[ОписаниеБиблиотеки.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков <> "Параллельно" Тогда ОбновлениеИнформационнойБазыСлужебный.ОтметитьРегистрациюОтложенныхОбработчиковОбновления(ОписаниеБиблиотеки.ИмяБиблиотеки, Истина); @@ -541,8 +532,6 @@ КонецЕсли; ПараллельноСВерсии = ОписанияБиблиотек[ОписаниеБиблиотеки.ИмяБиблиотеки].ПараллельноеОтложенноеОбновлениеСВерсии; - ЕстьДанныеДляРегистрации = Ложь; - Для Каждого ОписаниеВерсии Из ОписаниеБиблиотеки.Строки Цикл Если ОписаниеВерсии.НомерВерсии = "*" Тогда Продолжить; @@ -553,25 +542,25 @@ Продолжить; КонецЕсли; - ЕстьДанныеДляРегистрации = Истина; Для Каждого ОписаниеОбработчика Из ОписаниеВерсии.Строки Цикл - Очередь = ОписаниеОбработчика.ОчередьОтложеннойОбработки; - ПроцедураЗаполнения = ОписаниеОбработчика.ПроцедураЗаполненияДанныхОбновления; - ИмяОбработчика = ОписаниеОбработчика.ИмяОбработчика; + ОписаниеОбрабатываемыхДанных = ОбновлениеИнформационнойБазыСлужебный.НовоеОписаниеОбрабатываемыхДанных( + ОписаниеОбработчика.Многопоточный, + Истина); - ОписаниеПроцедуры = Новый Структура; - ОписаниеПроцедуры.Вставить("Статус", ""); - ОписаниеПроцедуры.Вставить("Очередь", Очередь); - ОписаниеПроцедуры.Вставить("ПроцедураЗаполнения", ПроцедураЗаполнения); - ОписаниеПроцедуры.Вставить("ИмяОбработчика", ИмяОбработчика); + Если ОписаниеОбработчика.Многопоточный Тогда + ОписаниеОбрабатываемыхДанных.ПараметрыВыборки = + ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки(); + КонецЕсли; - ОписаниеПроцедур.Вставить(ИмяОбработчика, ОписаниеПроцедуры); + ОписаниеОбрабатываемыхДанных.ИмяОбработчика = ОписаниеОбработчика.ИмяОбработчика; + ОписаниеОбрабатываемыхДанных.Очередь = ОписаниеОбработчика.ОчередьОтложеннойОбработки; + ОписаниеОбрабатываемыхДанных.ПроцедураЗаполнения = ОписаниеОбработчика.ПроцедураЗаполненияДанныхОбновления; + ОбрабатываемыеДанные[ОписаниеОбработчика.ИмяОбработчика] = ОписаниеОбрабатываемыхДанных; КонецЦикла; КонецЦикла; КонецЦикла; - СведенияОбОбновлении.ОписаниеПроцедурЗаполнения = ОписаниеПроцедур; ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); Если Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() @@ -582,7 +571,7 @@ ХодРегистрации = Новый Структура; ХодРегистрации.Вставить("НачальныйПрогресс", ПрогрессВыполнения); - ХодРегистрации.Вставить("ВсегоПроцедур", ОписаниеПроцедур.Количество()); + ХодРегистрации.Вставить("ВсегоПроцедур", ОбрабатываемыеДанные.Количество()); ХодРегистрации.Вставить("ВыполненоПроцедур", 0); // Снятие блокировки информационной базы и выполнение регистрации на плане обмена. @@ -638,9 +627,8 @@ // Обновление прогресса. ВыполненоПроцедур = 0; - Для Каждого ЭлементОписаниеПроцедуры Из СведенияОбОбновлении.ОписаниеПроцедурЗаполнения Цикл - ОписаниеПроцедуры = ЭлементОписаниеПроцедуры.Значение; - Если ОписаниеПроцедуры.Статус = "Выполнено" Тогда + Для Каждого ОписаниеОбрабатываемыхДанных Из СведенияОбОбновлении.ОбрабатываемыеДанные Цикл + Если ОписаниеОбрабатываемыхДанных.Значение.Статус = "Выполнено" Тогда ВыполненоПроцедур = ВыполненоПроцедур + 1; КонецЕсли; КонецЦикла; diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form index 94d0eaeba..f1c20f23e 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form @@ -618,21 +618,91 @@ ОбновлениеВФайловойБазе 30 - - КартинкаИнформацияФайловаяБаза - 32 - - <key>ru</key> - <value>Картинка действие выполняется</value> - + + ГруппаШапкаФайловаяБаза + 247 + + КартинкаИнформацияФайловаяБаза + 32 + + <key>ru</key> + <value>Картинка действие выполняется</value> + + true + true + + true + + + КартинкаИнформацияФайловаяБазаExtendedTooltip + 136 + Label + true + true + + Left + + + + КартинкаИнформацияФайловаяБазаКонтекстноеМеню + 33 + true + + true + true + + + CommonPicture.Предупреждение32 + + + + + ЗаголовокИнформацииФайловаяБаза + 35 + + <key>ru</key> + <value>Необходимо выполнить дополнительные процедуры обработки данных. +Работа с этими данными в программе временно ограничена.</value> + + true + true + + true + + + ЗаголовокИнформацииФайловаяБазаExtendedTooltip + 139 + Label + true + true + + Left + + + + ЗаголовокИнформацииФайловаяБазаКонтекстноеМеню + 36 + true + + Label + true + + Left + Center + + true true true + + <key>ru</key> + <value>Шапка файловая база</value> + - КартинкаИнформацияФайловаяБазаExtendedTooltip - 136 + ГруппаШапкаФайловаяБазаРасширеннаяПодсказка + 248 Label true true @@ -640,17 +710,14 @@ Left - - КартинкаИнформацияФайловаяБазаКонтекстноеМеню - 33 - true - - true - true - - - CommonPicture.Предупреждение32 - + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto @@ -659,41 +726,6 @@ ГруппаЗапуститьОтложенноеОбновление 71 - - ЗаголовокИнформацииФайловаяБаза - 35 - - <key>ru</key> - <value>Необходимо выполнить дополнительные процедуры обработки данных. -Работа с этими данными в программе временно ограничена.</value> - - true - true - - true - - - ЗаголовокИнформацииФайловаяБазаExtendedTooltip - 139 - Label - true - true - - Left - - - - ЗаголовокИнформацииФайловаяБазаКонтекстноеМеню - 36 - true - - Label - true - - Left - Center - - ОткрытьСписокОтложенныхОбработчиков1 81 @@ -838,7 +870,7 @@ Page - HorizontalIfPossible + Vertical auto false @@ -846,44 +878,44 @@ СтатусОбновленияДляПользователя 120 - - КартинкаИнформацияПользователю - 121 - - <key>ru</key> - <value>Картинка действие выполняется</value> - - true - true - - true - - - КартинкаИнформацияПользователюExtendedTooltip - 146 - Label + + ГруппаШапкаМодельСервиса + 249 + + КартинкаИнформацияПользователю + 121 + + <key>ru</key> + <value>Картинка действие выполняется</value> + + true + true + + true + + + КартинкаИнформацияПользователюExtendedTooltip + 146 + Label + true + true + + Left + + + + КартинкаИнформацияПользователюКонтекстноеМеню + 122 + true + true true - - Left + + + CommonPicture.Предупреждение32 + - - - КартинкаИнформацияПользователюКонтекстноеМеню - 122 - true - - true - true - - - CommonPicture.Предупреждение32 - - - - - ГруппаСодержаниеСтраницы - 123 + ЗаголовокИнформацииДляПользователя 124 @@ -920,37 +952,6 @@ Center - - ОткрытьСписокОтложенныхОбработчиков2 - 126 - - <key>ru</key> - <value>Список процедур обработки данных</value> - - true - true - - true - - - ОткрытьСписокОтложенныхОбработчиков2ExtendedTooltip - 149 - Label - true - true - - Left - - - Hyperlink - Form.Command.ОткрытьСписокДополнительныхПроцедурОбработкиДанных - Normal - Auto - true - true - UserCmds - Auto - true true @@ -958,11 +959,11 @@ <key>ru</key> - <value>Содержание страницы</value> + <value>Шапка модель сервиса</value> - ГруппаСодержаниеСтраницыExtendedTooltip - 147 + ГруппаШапкаМодельСервисаРасширеннаяПодсказка + 250 Label true true @@ -972,7 +973,7 @@ UsualGroup - Vertical + HorizontalIfPossible Auto true true @@ -980,6 +981,37 @@ Auto + + ОткрытьСписокОтложенныхОбработчиков2 + 126 + + <key>ru</key> + <value>Список процедур обработки данных</value> + + true + true + + true + + + ОткрытьСписокОтложенныхОбработчиков2ExtendedTooltip + 149 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОткрытьСписокДополнительныхПроцедурОбработкиДанных + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1001,7 +1033,7 @@ Page - HorizontalIfPossible + Vertical false @@ -1011,44 +1043,44 @@ ГруппаХодОбновления 5 - - КартинкаДействиеВыполняется - 3 - - <key>ru</key> - <value>Картинка действие выполняется</value> - - true - true - - true - - - КартинкаДействиеВыполняетсяExtendedTooltip - 152 - Label + + ГруппаШапкаКлиентСервер + 251 + + КартинкаДействиеВыполняется + 3 + + <key>ru</key> + <value>Картинка действие выполняется</value> + + true + true + + true + + + КартинкаДействиеВыполняетсяExtendedTooltip + 152 + Label + true + true + + Left + + + + КартинкаДействиеВыполняетсяКонтекстноеМеню + 4 + true + true true - - Left + + + CommonPicture.ДлительнаяОперация48 + - - - КартинкаДействиеВыполняетсяКонтекстноеМеню - 4 - true - - true - true - - - CommonPicture.ДлительнаяОперация48 - - - - - ГруппаИнформацияОПрогрессе - 6 + ЗаголовокИнформации 7 @@ -1083,6 +1115,38 @@ Left + true + true + + true + + + <key>ru</key> + <value>Шапка клиент сервер</value> + + + ГруппаШапкаКлиентСерверРасширеннаяПодсказка + 252 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаИнформацияОПрогрессе + 6 ИнформацияСтатусОбновления 9 @@ -1527,7 +1591,7 @@ UsualGroup - HorizontalIfPossible + Vertical Auto NormalSeparation true @@ -1567,40 +1631,40 @@ ГруппаОтложенноеОбновлениеЗавершено 42 - - КартинкаЗавершено - 43 - true - true - - true - - - КартинкаЗавершеноРасширеннаяПодсказка - 165 - Label + + ГруппаШапкаЗавершено + 253 + + КартинкаЗавершено + 43 + true + true + + true + + + КартинкаЗавершеноРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + КартинкаЗавершеноКонтекстноеМеню + 44 + true + true true - - Left + + + CommonPicture.Ошибка32 + - - - КартинкаЗавершеноКонтекстноеМеню - 44 - true - - true - true - - - CommonPicture.Ошибка32 - - - - - ГруппаИнформацияОбОбновлении1 - 45 + ИнформацияОтложенныеОбработчикиОтсутствуют 118 @@ -1628,79 +1692,84 @@ true Label + true + 2 true Left - - ГруппаПереходКСпискуОтложенныхОбработчиков - 56 - - ИнформацияОтложенноеОбновлениеЗавершено - 50 - - <key>ru</key> - <value>Дополнительные процедуры обработки данных не выполнялись</value> - - true - true - - true - - - ИнформацияОтложенноеОбновлениеЗавершеноРасширеннаяПодсказка - 169 - Label - true - true - - Left - - - - ИнформацияОтложенноеОбновлениеЗавершеноКонтекстноеМеню - 51 - true - + + ИнформацияОтложенноеОбновлениеЗавершено + 50 + + <key>ru</key> + <value>Дополнительные процедуры обработки данных не выполнялись</value> + + true + true + + true + + + ИнформацияОтложенноеОбновлениеЗавершеноРасширеннаяПодсказка + 169 Label - 60 + true true Left - - - ОткрытьСписокОтложенныхОбработчиков - 57 - - <key>ru</key> - <value>Необходимо выполнить процедуры обработки данных</value> - - true - true - - true - - - ОткрытьСписокОтложенныхОбработчиковExtendedTooltip - 170 - Label - true - true - - Left - - - Hyperlink - Form.Command.ОткрытьСписокДополнительныхПроцедурОбработкиДанных - Normal - Auto - true - true - UserCmds - Auto - + + + ИнформацияОтложенноеОбновлениеЗавершеноКонтекстноеМеню + 51 + true + + Label + true + 60 + 2 + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Шапка завершено</value> + + + ГруппаШапкаЗавершеноРасширеннаяПодсказка + 254 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаИнформацияОбОбновлении1 + 45 + + ГруппаПереходКСпискуОтложенныхОбработчиков + 56 true true @@ -1731,6 +1800,37 @@ Auto + + ОткрытьСписокОтложенныхОбработчиков + 57 + + <key>ru</key> + <value>Необходимо выполнить процедуры обработки данных</value> + + true + true + + true + + + ОткрытьСписокОтложенныхОбработчиковExtendedTooltip + 170 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОткрытьСписокДополнительныхПроцедурОбработкиДанных + Normal + Auto + true + true + UserCmds + Auto + ГиперссылкаОсновноеОбновление 88 @@ -1824,7 +1924,7 @@ UsualGroup - HorizontalIfPossible + Vertical Auto NormalSeparation true @@ -1923,54 +2023,26 @@ 2 - - ГруппаПодвал - 180 - - ГруппаКоманднаяПанель - 182 - - ФормаЗакрыть - 14 - - <key>ru</key> - <value>Закрыть</value> - - true - true - - true - - - ФормаЗакрытьExtendedTooltip - 127 - Label - true - true - - Left - - - Form.StandardCommand.Close - true - true - true - UserCmds - Auto - + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаЗакрыть + 14 + + <key>ru</key> + <value>Закрыть</value> + true true true - - <key>ru</key> - <value>Командная панель</value> - - Bottom - ГруппаКоманднаяПанельРасширеннаяПодсказка - 183 + ФормаЗакрытьExtendedTooltip + 127 Label true true @@ -1978,49 +2050,13 @@ Left - CommandBar - - Right - FormCommandPanelGlobalCommands - - - true - true - - true - - - <key>ru</key> - <value>Подвал</value> - - true - - ГруппаПодвалРасширеннаяПодсказка - 181 - Label + Form.StandardCommand.Close + true true true - - Left - - - UsualGroup - - HorizontalIfPossible - Bottom - Auto - NormalSeparation - true - true - Auto - Auto - - - None - false - - ФормаКоманднаяПанель - -1 + UserCmds + Auto + Right diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl index 9cead1f13..6aabf6a8d 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -131,6 +138,10 @@ Возврат; КонецЕсли; +#Если МобильныйКлиент Тогда + ЭтотОбъект.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет; +#КонецЕсли + Если Не ИБФайловая Тогда ПодключитьОбработчикОжидания("ПроверитьСтатусВыполненияОбработчиков", 15); КонецЕсли; @@ -268,10 +279,10 @@ Процедура НачатьПоискФайловЗавершение(МассивФайлов, ДополнительныеПараметры) Экспорт Если МассивФайлов.Количество() > 0 Тогда ФайлЖурнала = МассивФайлов[0]; - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ФайлЖурнала.ПолноеИмя); + ФайловаяСистемаКлиент.ОткрытьФайл(ФайлЖурнала.ПолноеИмя); Иначе // Если лога нет, то открываем временный каталог скрипта обновления. - ОбщегоНазначенияКлиент.ОткрытьПроводник(КаталогСкрипта); + ФайловаяСистемаКлиент.ОткрытьПроводник(КаталогСкрипта); КонецЕсли; КонецПроцедуры @@ -304,7 +315,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); Блокировка.Заблокировать(); СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); @@ -441,7 +452,6 @@ &НаСервере Функция СообщениеОРезультатахОбновления(СведенияОбОбновлении) - СписокОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков; УспешноВыполненоОбработчиков = 0; ВсегоОбработчиков = 0; Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl index 2d9bd8b3d..70b553e12 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенноеОбновлениеНеЗавершено/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form index cf57b2948..ca87cb06c 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form @@ -470,86 +470,15 @@ Auto - - ОтложенныеОбработчики - 34 - - <key>ru</key> - <value>Отложенные обработчики</value> - - true - true - - true - - - ОтложенныеОбработчики - - None - Add - CancelSearch - Change - Copy - Delete - EndEdit - Find - MoveDown - 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 + + ГруппаСодержимое + 127 + + ОтложенныеОбработчики + 34 <key>ru</key> - <value>№</value> + <value>Отложенные обработчики</value> true true @@ -557,103 +486,35 @@ true - ОтложенныеОбработчики.Номер + ОтложенныеОбработчики - - НомерРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - - НомерКонтекстноеМеню - 39 - true - - InputField - Left - Auto - true - Left - true - - 4 - true - true - false - true - true - true - true - Normal - - - - ОтложенныеОбработчикиОбработчик - 41 - true - true - - true - - - ОтложенныеОбработчики.Обработчик - - - ОтложенныеОбработчикиОбработчикExtendedTooltip - 43 - Label - true - true - - Left - - - - ОтложенныеОбработчикиОбработчикКонтекстноеМеню - 42 - true - - InputField - Auto - true - Left - true - - 36 - true - true - false - true - false - true - true - true - Normal - - - - ГруппаСтатусКартинка - 44 + None + Add + CancelSearch + Change + Copy + Delete + EndEdit + Find + MoveDown + MoveUp + SortListAsc + SortListDesc - ОтложенныеОбработчикиСтатусКартинка - 46 + Приоритет + 99 true true true - ОтложенныеОбработчики.СтатусКартинка + ОтложенныеОбработчики.КартинкаПриоритет None - ОтложенныеОбработчикиСтатусКартинкаExtendedTooltip - 48 + ПриоритетРасширеннаяПодсказка + 101 Label true true @@ -662,19 +523,23 @@ - ОтложенныеОбработчикиСтатусКартинкаКонтекстноеМеню - 47 + ПриоритетКонтекстноеМеню + 100 true PictureField Auto true + + CommonPicture.ВосклицательныйЗнакСерый + Left true - 9 + 2 true true + true true @@ -683,19 +548,23 @@ - ОтложенныеОбработчикиСтатусОбработчика - 49 + Номер + 38 + + <key>ru</key> + <value>№</value> + true true true - ОтложенныеОбработчики.СтатусПредставление + ОтложенныеОбработчики.Номер - ОтложенныеОбработчикиСтатусОбработчикаExtendedTooltip - 51 + НомерРасширеннаяПодсказка + 40 Label true true @@ -704,17 +573,18 @@ - ОтложенныеОбработчикиСтатусОбработчикаКонтекстноеМеню - 50 + НомерКонтекстноеМеню + 39 true InputField + Left Auto true Left true - 1 + 4 true true false @@ -725,225 +595,20 @@ Normal - true - true - - true - - - <key>ru</key> - <value>Статус картинка</value> - - 10 - false - - ГруппаСтатусКартинкаExtendedTooltip - 45 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - ОтложенныеОбработчикиИнтервалВыполнения - 80 - true - true - - true - - - ОтложенныеОбработчики.ИнтервалВыполнения - - - ОтложенныеОбработчикиИнтервалВыполненияРасширеннаяПодсказка - 82 - Label - true - true - - Left - - - - ОтложенныеОбработчикиИнтервалВыполненияКонтекстноеМеню - 81 - true - - InputField - Auto - true - Left - true - - 15 - true - true - false - true - true - true - true - true - Normal - - - - ОтложенныеОбработчикиДлительностьВыполнения - 77 - true - true - - true - - - ОтложенныеОбработчики.ДлительностьВыполнения - - - ОтложенныеОбработчикиДлительностьВыполненияРасширеннаяПодсказка - 79 - Label - true - true - - Left - - - - ОтложенныеОбработчикиДлительностьВыполненияКонтекстноеМеню - 78 - true - - InputField - Auto - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - - - ОтложенныеОбработчикиКоманднаяПанель - 36 - Left - - - OnActivateRow - ОтложенныеОбработчикиПриАктивизацииСтроки - - - ОтложенныеОбработчикиСтрокаПоиска - 60 - - ОтложенныеОбработчикиСтрокаПоискаРасширеннаяПодсказка - 62 - Label - true - true - - Left - - - - ОтложенныеОбработчикиСтрокаПоискаКонтекстноеМеню - 61 - true - - ОтложенныеОбработчики - - true - - - - ОтложенныеОбработчикиСостояниеПросмотра - 63 - - ОтложенныеОбработчикиСостояниеПросмотраРасширеннаяПодсказка - 65 - Label - true - true - - Left - - - - ОтложенныеОбработчикиСостояниеПросмотраКонтекстноеМеню - 64 - true - - ViewStatusAddition - ОтложенныеОбработчики - - true - - - - ОтложенныеОбработчикиУправлениеПоиском - 66 - - ОтложенныеОбработчикиУправлениеПоискомРасширеннаяПодсказка - 68 - Label - true - true - - Left - - - - ОтложенныеОбработчикиУправлениеПоискомКонтекстноеМеню - 67 - true - - SearchControlAddition - ОтложенныеОбработчики - - true - - - - ОтложенныеОбработчикиРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - - ОтложенныеОбработчикиКонтекстноеМеню - 35 - - КонтекстноеМенюЗапуститьВыделенный - 125 + + ОтложенныеОбработчикиОбработчик + 41 true true true + + ОтложенныеОбработчики.Обработчик + - КонтекстноеМенюЗапуститьВыделенныйРасширеннаяПодсказка - 126 + ОтложенныеОбработчикиОбработчикExtendedTooltip + 43 Label true true @@ -951,80 +616,47 @@ Left - Form.Command.ЗапуститьВыделенный - Normal - Auto - true - true - UserCmds - Auto - - - КонтекстноеМенюПриостановить - 85 - true - true - - true - - - КонтекстноеМенюПриостановитьРасширеннаяПодсказка - 86 - Label + + ОтложенныеОбработчикиОбработчикКонтекстноеМеню + 42 + true + + InputField + Auto + true + Left + true + + 36 true true - - Left - - - Form.Command.Приостановить - Normal - Auto - true - true - UserCmds - Auto - - - КонтекстноеМенюЗапустить - 87 - true - true - - true - - - КонтекстноеМенюЗапуститьРасширеннаяПодсказка - 88 - Label - true - true - - Left - - - Form.Command.Запустить - Normal - Auto - true - true - UserCmds - Auto + false + true + true + true + true + true + Normal + - ОтложенныеОбработчикиКонтекстноеМенюПорядок - 112 - - ВПлановомПорядкеКонтекстноеМеню - 104 + ГруппаСтатусКартинка + 44 + + ОтложенныеОбработчикиСтатусКартинка + 46 true true true + + ОтложенныеОбработчики.СтатусКартинка + + None - ВПлановомПорядкеКонтекстноеМенюРасширеннаяПодсказка - 105 + ОтложенныеОбработчикиСтатусКартинкаExtendedTooltip + 48 Label true true @@ -1032,25 +664,41 @@ Left - Form.Command.ВПлановомПорядке - Normal - Auto - true - true - UserCmds - Auto + + ОтложенныеОбработчикиСтатусКартинкаКонтекстноеМеню + 47 + true + + PictureField + Auto + true + Left + true + + 9 + true + true + true + + + 1 + + - - ЖелательноБыстрееКонтекстноеМеню - 102 + + ОтложенныеОбработчикиСтатусОбработчика + 49 true true true + + ОтложенныеОбработчики.СтатусПредставление + - ЖелательноБыстрееКонтекстноеМенюРасширеннаяПодсказка - 103 + ОтложенныеОбработчикиСтатусОбработчикаExtendedTooltip + 51 Label true true @@ -1058,13 +706,27 @@ Left - Form.Command.ЖелательноБыстрее - Normal - Auto - true - true - UserCmds - Auto + + ОтложенныеОбработчикиСтатусОбработчикаКонтекстноеМеню + 50 + true + + InputField + Auto + true + Left + true + + 1 + true + true + false + true + true + true + true + Normal + true true @@ -1073,11 +735,13 @@ <key>ru</key> - <value>Отложенные обработчики контекстное меню порядок</value> + <value>Статус картинка</value> + 10 + false - ОтложенныеОбработчикиКонтекстноеМенюПорядокРасширеннаяПодсказка - 113 + ГруппаСтатусКартинкаExtendedTooltip + 45 Label true true @@ -1085,19 +749,27 @@ Left - + ColumnGroup + + InCell + auto + true + - - ОтложенныеОбработчикиКонтекстноеМенюКопироватьВБуферОбмена - 114 + + ОтложенныеОбработчикиИнтервалВыполнения + 80 true true true + + ОтложенныеОбработчики.ИнтервалВыполнения + - ОтложенныеОбработчикиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 115 + ОтложенныеОбработчикиИнтервалВыполненияРасширеннаяПодсказка + 82 Label true true @@ -1105,25 +777,43 @@ Left - Form.Item.ОтложенныеОбработчики.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto + + ОтложенныеОбработчикиИнтервалВыполненияКонтекстноеМеню + 81 + true + + InputField + Auto + true + Left + true + + 15 + true + true + false + true + true + true + true + true + Normal + - - ОтложенныеОбработчикиКонтекстноеМенюВыделитьВсе - 116 + + ОтложенныеОбработчикиДлительностьВыполнения + 77 true true true + + ОтложенныеОбработчики.ДлительностьВыполнения + - ОтложенныеОбработчикиКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка - 117 + ОтложенныеОбработчикиДлительностьВыполненияРасширеннаяПодсказка + 79 Label true true @@ -1131,220 +821,111 @@ Left - Form.Item.ОтложенныеОбработчики.StandardCommand.SelectAll - Normal - Auto - true - true - UserCmds - Auto + + ОтложенныеОбработчикиДлительностьВыполненияКонтекстноеМеню + 78 + true + + InputField + Auto + true + Left + true + + 15 + true + true + false + true + true + true + true + Normal + - true - - true - true - true - true - true - true - MultiRow -
      true
      - 1 - 1 - AutoUse - AutoUse - true - true - true - Auto - Auto - true - true - true - true - true - -
      - - ОтложенныеОбработчикиИнформацияОПроцедуреОбновления - 15 - true - true - - true - - - Items.ОтложенныеОбработчики.CurrentData.ИнформацияОПроцедуреОбновления - - None - - ОтложенныеОбработчикиИнформацияОПроцедуреОбновленияExtendedTooltip - 28 - Label - true - true - + + ОтложенныеОбработчикиКоманднаяПанель + 36 Left - - - - ОтложенныеОбработчикиИнформацияОПроцедуреОбновленияКонтекстноеМеню - 16 - true - - InputField - true - Enter - true - Left - true - - 4 - false - true - true - true - true - true - Normal - - - - ГиперссылкаПрогрессОбновления - 120 - - <key>ru</key> - <value>Отчет по прогрессу отложенного обновления</value> - - true - true - - true - - - ГиперссылкаПрогрессОбновленияРасширеннаяПодсказка - 122 - Label - true - true - - Left - - - - ГиперссылкаПрогрессОбновленияКонтекстноеМеню - 121 - true - - Label - true - + - Click - ГиперссылкаПрогрессОбновленияНажатие + OnActivateRow + ОтложенныеОбработчикиПриАктивизацииСтроки - true - Left - - - - ГиперссылкаОтложенноеОбновление - 13 - - <key>ru</key> - <value>Техническая информация о результатах обработки данных</value> - - true - true - - true - - Button - - ГиперссылкаОтложенноеОбновлениеExtendedTooltip - 29 - - <key>ru</key> - <value>Техническая информация из журнала регистрации для обращения в службу технической поддержки.</value> - - Label - true - true - - Left - - - - ГиперссылкаОтложенноеОбновлениеКонтекстноеМеню - 14 - true - - Label - true - - - Click - ГиперссылкаОтложенноеОбновлениеНажатие - - true - Left - - - - ОбновлениеВыполняется - 20 - - <key>ru</key> - <value>В данный момент выполняются дополнительные процедуры обработки данных</value> - - true - - true - - - ОбновлениеВыполняетсяExtendedTooltip - 30 - Label - true - true - - Left - - - - ОбновлениеВыполняетсяКонтекстноеМеню - 21 - true - - Label - 2 - true - - Style.ПоясняющийТекст - - - Left - Bottom - - - - ГруппаПовторныйЗапуск - 10 - - ТекстПояснения - 11 - - <key>ru</key> - <value>Невыполненные процедуры рекомендуется запустить повторно.</value> - - true - true - - true - + + ОтложенныеОбработчикиСтрокаПоиска + 60 + + ОтложенныеОбработчикиСтрокаПоискаРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + ОтложенныеОбработчикиСтрокаПоискаКонтекстноеМеню + 61 + true + + ОтложенныеОбработчики + + true + + + + ОтложенныеОбработчикиСостояниеПросмотра + 63 + + ОтложенныеОбработчикиСостояниеПросмотраРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + ОтложенныеОбработчикиСостояниеПросмотраКонтекстноеМеню + 64 + true + + ViewStatusAddition + ОтложенныеОбработчики + + true + + + + ОтложенныеОбработчикиУправлениеПоиском + 66 + + ОтложенныеОбработчикиУправлениеПоискомРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + ОтложенныеОбработчикиУправлениеПоискомКонтекстноеМеню + 67 + true + + SearchControlAddition + ОтложенныеОбработчики + + true + + - ТекстПоясненияExtendedTooltip - 32 + ОтложенныеОбработчикиРасширеннаяПодсказка + 37 Label true true @@ -1353,27 +934,256 @@ - ТекстПоясненияКонтекстноеМеню - 12 + ОтложенныеОбработчикиКонтекстноеМеню + 35 + + КонтекстноеМенюЗапуститьВыделенный + 125 + true + true + + true + + + КонтекстноеМенюЗапуститьВыделенныйРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + Form.Command.ЗапуститьВыделенный + Normal + Auto + true + true + UserCmds + Auto + + + КонтекстноеМенюПриостановить + 85 + true + true + + true + + + КонтекстноеМенюПриостановитьРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + Form.Command.Приостановить + Normal + Auto + true + true + UserCmds + Auto + + + КонтекстноеМенюЗапустить + 87 + true + true + + true + + + КонтекстноеМенюЗапуститьРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Form.Command.Запустить + Normal + Auto + true + true + UserCmds + Auto + + + ОтложенныеОбработчикиКонтекстноеМенюПорядок + 112 + + ВПлановомПорядкеКонтекстноеМеню + 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 + + true + + + <key>ru</key> + <value>Отложенные обработчики контекстное меню порядок</value> + + + ОтложенныеОбработчикиКонтекстноеМенюПорядокРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + + + ОтложенныеОбработчикиКонтекстноеМенюКопироватьВБуферОбмена + 114 + true + true + + true + + + ОтложенныеОбработчикиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + Form.Item.ОтложенныеОбработчики.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + ОтложенныеОбработчикиКонтекстноеМенюВыделитьВсе + 116 + true + true + + true + + + ОтложенныеОбработчикиКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + Form.Item.ОтложенныеОбработчики.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + true - Label + true + true + true + true true - - Left - + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + Choice + true +
      - - ЗапуститьПовторно - 9 + + ОтложенныеОбработчикиИнформацияОПроцедуреОбновления + 15 true true true + + Items.ОтложенныеОбработчики.CurrentData.ИнформацияОПроцедуреОбновления + + None - ЗапуститьПовторноExtendedTooltip - 33 + ОтложенныеОбработчикиИнформацияОПроцедуреОбновленияExtendedTooltip + 28 Label true true @@ -1381,14 +1191,238 @@ Left - UsualButton - Form.Command.ЗапуститьПовторно - Normal - PictureAndText - true + + ОтложенныеОбработчикиИнформацияОПроцедуреОбновленияКонтекстноеМеню + 16 + true + + InputField + true + Enter + true + Left + true + + 4 + false + true + true + true + true + true + Normal + + + + ГиперссылкаПрогрессОбновления + 120 + + <key>ru</key> + <value>Отчет по прогрессу отложенного обновления</value> + + true + true + + true + + + ГиперссылкаПрогрессОбновленияРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + + ГиперссылкаПрогрессОбновленияКонтекстноеМеню + 121 + true + + Label true - UserCmds - Auto + + + Click + ГиперссылкаПрогрессОбновленияНажатие + + true + Left + + + + ГиперссылкаОтложенноеОбновление + 13 + + <key>ru</key> + <value>Техническая информация о результатах обработки данных</value> + + true + true + + true + + Button + + ГиперссылкаОтложенноеОбновлениеExtendedTooltip + 29 + + <key>ru</key> + <value>Техническая информация из журнала регистрации для обращения в службу технической поддержки.</value> + + Label + true + true + + Left + + + + ГиперссылкаОтложенноеОбновлениеКонтекстноеМеню + 14 + true + + Label + true + + + Click + ГиперссылкаОтложенноеОбновлениеНажатие + + true + Left + + + + ОбновлениеВыполняется + 20 + + <key>ru</key> + <value>В данный момент выполняются дополнительные процедуры обработки данных</value> + + true + + true + + + ОбновлениеВыполняетсяExtendedTooltip + 30 + Label + true + true + + Left + + + + ОбновлениеВыполняетсяКонтекстноеМеню + 21 + true + + Label + 2 + true + + Style.ПоясняющийТекст + + + Left + Bottom + + + + ГруппаПовторныйЗапуск + 10 + + ТекстПояснения + 11 + + <key>ru</key> + <value>Невыполненные процедуры рекомендуется запустить повторно.</value> + + true + true + + true + + + ТекстПоясненияExtendedTooltip + 32 + Label + true + true + + Left + + + + ТекстПоясненияКонтекстноеМеню + 12 + true + + Label + true + + Left + + + + ЗапуститьПовторно + 9 + true + true + + true + + + ЗапуститьПовторноExtendedTooltip + 33 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗапуститьПовторно + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Повторный запуск</value> + + + ГруппаПовторныйЗапускExtendedTooltip + 31 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + true true @@ -1397,11 +1431,11 @@ <key>ru</key> - <value>Повторный запуск</value> + <value>Содержимое</value> - ГруппаПовторныйЗапускExtendedTooltip - 31 + ГруппаСодержимоеРасширеннаяПодсказка + 128 Label true true @@ -1413,7 +1447,6 @@ Vertical Auto - NormalSeparation true true Auto @@ -1480,6 +1513,11 @@ true auto true + + + ГруппаКоманднаяПанель + + Объект 1 diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl index 5635ba92b..9a364b25d 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -32,7 +39,7 @@ ОбновлениеВыполняется = (СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено); КонецЕсли; - Если Не ОбщегоНазначенияКлиентСервер.РежимОтладки() + Если Не ОбщегоНазначения.РежимОтладки() Или СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Истина Тогда Элементы.ЗапуститьВыделенный.Видимость = Ложь; Элементы.КонтекстноеМенюЗапуститьВыделенный.Видимость = Ложь; @@ -49,6 +56,15 @@ Элементы.ГиперссылкаПрогрессОбновления.Видимость = ПараллельныйРежимИспользуется; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + Элементы.ГруппаСодержимое.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; + Элементы.Приоритет.Видимость = Ложь; + Элементы.Номер.Видимость = Ложь; + Элементы.ОтложенныеОбработчикиИнтервалВыполнения.Видимость = Ложь; + Элементы.ОтложенныеОбработчикиДлительностьВыполнения.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -333,7 +349,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); Блокировка.Заблокировать(); СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); @@ -365,7 +381,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); Блокировка.Заблокировать(); СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); @@ -639,7 +655,7 @@ Для Каждого ИнформацияПоОбработчику Из ИсходныеДанные Цикл СписокОбъектов = Новый СписокЗначений; Обработчик = ИнформацияПоОбработчику.Ключ; - ОбрабатываемыеОбъектыПООчередям = ИнформацияПоОбработчику.Значение; + ОбрабатываемыеОбъектыПООчередям = ИнформацияПоОбработчику.Значение.ДанныеОбработчика; Для Каждого ОбрабатываемыйОбъект Из ОбрабатываемыеОбъектыПООчередям Цикл ИмяОбъекта = ОбрабатываемыйОбъект.Ключ; Очередь = ОбрабатываемыйОбъект.Значение.Очередь; @@ -766,7 +782,7 @@ НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); Блокировка.Заблокировать(); СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form index 8a3f7daea..24e6cc483 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form @@ -73,8 +73,9 @@ true Label + true true - false + true Left diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Module.bsl index 70ddb5195..749203eba 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиКомандФормы diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl index 587f0870c..8146da158 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -18,7 +25,7 @@ КонецЕсли; Если ЗначениеЗаполнено(Параметры.ПодробноеПредставлениеОшибки) Тогда - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, + ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Параметры.ПодробноеПредставлениеОшибки); КонецЕсли; @@ -112,45 +119,25 @@ КонецЕсли; -#Если ВебКлиент Тогда - Оповещение = Новый ОписаниеОповещения("ОткрытьВнешнююОбработкуБезРасширения", ЭтотОбъект); - НачатьПомещениеФайла(Оповещение,,, Истина, УникальныйИдентификатор); - Возврат; -#КонецЕсли - - ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Внешняя обработка'") + "(*.epf)|*.epf"; - ДиалогОткрытияФайла.МножественныйВыбор = Ложь; - ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите внешнюю обработку'"); - - ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьВнешнююОбработкуЗавершение", ЭтотОбъект); - ДиалогОткрытияФайла.Показать(ОписаниеОповещения); + Оповещение = Новый ОписаниеОповещения("ОткрытьВнешнююОбработкуЗавершение", ЭтотОбъект); + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Внешняя обработка'") + "(*.epf)|*.epf"; + ПараметрыЗагрузки.Диалог.МножественныйВыбор = Ложь; + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите внешнюю обработку'"); + ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); КонецПроцедуры &НаКлиенте Процедура ОткрытьВнешнююОбработкуЗавершение(Результат, ДополнительныеПараметры) Экспорт - Если Результат <> Неопределено - И Результат.Количество() = 1 Тогда - ПолноеИмяФайла = Результат[0]; - ВыбраннаяОбработка = Новый ДвоичныеДанные(ПолноеИмяФайла); - АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ВыбраннаяОбработка, УникальныйИдентификатор); - ИмяВнешнейОбработки = ПодключитьВнешнююОбработку(АдресВоВременномХранилище); + Если ТипЗнч(Результат) = Тип("Структура") Тогда + ИмяВнешнейОбработки = ПодключитьВнешнююОбработку(Результат.Хранение); ОткрытьФорму(ИмяВнешнейОбработки + ".Форма"); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ОткрытьВнешнююОбработкуБезРасширения(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт - - Если Результат Тогда - ИмяВнешнейОбработки = ПодключитьВнешнююОбработку(Адрес); - ОткрытьФорму(ИмяВнешнейОбработки + ".Форма",, ЭтотОбъект,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - КонецЕсли; - -КонецПроцедуры - &НаСервере Функция ПодключитьВнешнююОбработку(АдресВоВременномХранилище) @@ -159,14 +146,8 @@ КонецЕсли; Менеджер = ВнешниеОбработки; - - Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда - ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , Ложь, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); - Иначе - ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , Ложь); - КонецЕсли; - + ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , Ложь, + ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); Возврат Менеджер.Создать(ИмяОбработки, Ложь).Метаданные().ПолноеИмя(); КонецФункции diff --git a/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/Forms/Форма/Module.bsl index b4cb5206d..adafa7d14 100644 --- a/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl index e49897f32..95712d13d 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/СдвигГраницыИтогов/ManagerModule.bsl b/SSL/src/DataProcessors/СдвигГраницыИтогов/ManagerModule.bsl index fece2e751..ff981019b 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтогов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/СдвигГраницыИтогов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Module.bsl index a475f9797..18d182ea3 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -28,7 +35,7 @@ Если ПустаяСтрока(ИмяУстройства) Тогда ТекстСообщения = НСтр("ru = 'Не выбран сканер.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ИмяУстройства"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , "ИмяУстройства"); Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl index 3a0c46859..ea11f924c 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl index ba1ce9564..9f3775332 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl index f7f8017af..1387efbc7 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -37,7 +45,7 @@ НеОткрыватьКарточкуПослеСозданияИзФайла = Параметры.НеОткрыватьКарточкуПослеСозданияИзФайла; КонецЕсли; - НомерФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьНовыйНомерДляСканирования(ВладелецФайла); + НомерФайла = РаботаСФайламиСлужебный.ПолучитьНовыйНомерДляСканирования(ВладелецФайла); ИмяФайла = РаботаСФайламиСлужебныйКлиентСервер.ИмяСканированногоФайла(НомерФайла, ""); ФорматСканированногоИзображения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( @@ -644,7 +652,6 @@ КонецЕсли; - ИмяФайлаКартинки = ""; Элементы.Сохранить.Доступность = Ложь; ПараметрСжатие = ?(ВРег(ФорматКартинки) = "JPG", КачествоJPG, СжатиеTIFFЧисло); diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form index 77ec72941..86c9f3517 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form @@ -47,7 +47,6 @@ true true true - true ru @@ -174,7 +173,6 @@ true true true - true ru @@ -358,7 +356,6 @@ true true true - true ru @@ -459,7 +456,6 @@ true true true - true ru @@ -615,7 +611,6 @@ true true true - true ru diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Module.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Module.bsl index 12ee63b30..c7c5c7186 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Module.bsl +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -39,28 +47,7 @@ #КонецОбласти -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура ОК(Команда) - Результат = ИндивидуальныеНастройкиОбработкиСвойства(); - - Если Результат.ПравилоОбработки.Количество() <> 0 Тогда - Оповестить("СкрытиеПерсональныхДанных_УстановленоПравилоОбработки", Результат); - КонецЕсли; - - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура Отмена(Команда) - Закрыть(); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПравилоЧислоПриИзменении(Элемент) @@ -84,6 +71,27 @@ #КонецОбласти +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + Результат = ИндивидуальныеНастройкиОбработкиСвойства(); + + Если Результат.ПравилоОбработки.Количество() <> 0 Тогда + Оповестить("СкрытиеПерсональныхДанных_УстановленоПравилоОбработки", Результат); + КонецЕсли; + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + Закрыть(); +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаКлиенте @@ -95,7 +103,7 @@ Если Элементы.СтраницаПравилоОбработкиСтрок.Видимость Тогда ПравилоОбработки.Добавить("Строка", ПравилоСтрока); - Если КоличествоТиповСвойства = 1 Тогда + Если КоличествоТиповСвойства = 1 И ЗначениеЗаполнено(ПравилоСтрока) Тогда Представление = Элементы.ПравилоСтрока.СписокВыбора.НайтиПоЗначению(ПравилоСтрока).Представление; КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Form.form b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Form.form index 675dbd7cb..cc6f7cd60 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Form.form @@ -2383,21 +2383,6 @@ true - - ПараметрыОбработчикаОжидания - - <key>ru</key> - <value>Параметры обработчика ожидания</value> - - 13 - - - true - - - true - - ДеревоМетаданныхЗаполнено @@ -2483,6 +2468,21 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>РезультатДлительнойОперации</name> + <title> + <key>ru</key> + <value>Результат длительной операции</value> + + 19 + + + true + + + true + + ВыполнитьСкрытие diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl index ea177c724..41120afae 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl @@ -1,9 +1,10 @@ -#Область ОписаниеПеременных - -&НаКлиенте -Перем ФормаДлительнойОперации; - -#КонецОбласти +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -61,7 +62,86 @@ #КонецОбласти -#Область ОбработчикиСобытийТаблицыФормыОбрабатываемыеОбъекты +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПравилоЧислоПриИзменении(Элемент) + Если ПредставлениеПравилаЧисло = "Умножить" + Или ПредставлениеПравилаЧисло = "Разделить" + Или ПредставлениеПравилаЧисло = "Прибавить" + Или ПредставлениеПравилаЧисло = "Вычесть" Тогда + Элементы.СтраницыЗначения.ТекущаяСтраница = Элементы.ЗначениеЧисла; + Иначе + Элементы.СтраницыЗначения.ТекущаяСтраница = Элементы.ПустаяСтраница; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПравилоДатаПриИзменении(Элемент) + Если ПредставлениеПравилаДата = "НеИзменять" Тогда + Элементы.СтраницыЗначенияДаты.ТекущаяСтраница = Элементы.ПустаяСтраницаДата; + Иначе + Элементы.СтраницыЗначенияДаты.ТекущаяСтраница = Элементы.СтраницаЗначенияДата; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура РасширенныеВозможностиНажатие(Элемент) + + Если ДеревоМетаданныхЗаполнено Тогда + Если Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаЧастотныеВозможности Тогда + Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаРасширенныеВозможности; + Если МакетОпределен Тогда + Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации - полные возможности'"); + КонецЕсли; + Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Обычный вид'"); + Иначе + Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаЧастотныеВозможности; + Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации'"); + Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Полные возможности'"); + КонецЕсли; + Иначе + Если ДеревоМетаданныхЗаполнено() Тогда + Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаРасширенныеВозможности; + Элементы.РасширенныеВозможности.Доступность = Истина; + Если МакетОпределен Тогда + Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации - полные возможности'"); + КонецЕсли; + Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Обычный вид'"); + Иначе + Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; + Элементы.РасширенныеВозможности.Доступность = Ложь; + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ОбработатьРезультатВыполнениеЗадания", ЭтотОбъект); + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатДлительнойОперации, ОповещениеОЗакрытии, ПараметрыОжидания); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗначениеЧислоПриИзменении(Элемент) + Если ЗначениеЧисло = 0 Тогда + ТекстПредупреждения = НСтр("ru = 'Значение должно быть не нулевым.'"); + ПоказатьПредупреждение(, ТекстПредупреждения); + ЗначениеЧисло = 1; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗначениеДатаПриИзменении(Элемент) + Если ЗначениеДата = 0 Тогда + ТекстПредупреждения = НСтр("ru = 'Значение должно быть не нулевым.'"); + ПоказатьПредупреждение(, ТекстПредупреждения); + ЗначениеДата = 1; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОбрабатываемыеОбъекты &НаКлиенте Процедура ОбрабатываемыеОбъектыПравилоОбработкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -118,83 +198,6 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы - -&НаКлиенте -Процедура ПравилоЧислоПриИзменении(Элемент) - Если ПредставлениеПравилаЧисло = "Умножить" - Или ПредставлениеПравилаЧисло = "Разделить" - Или ПредставлениеПравилаЧисло = "Прибавить" - Или ПредставлениеПравилаЧисло = "Вычесть" Тогда - Элементы.СтраницыЗначения.ТекущаяСтраница = Элементы.ЗначениеЧисла; - Иначе - Элементы.СтраницыЗначения.ТекущаяСтраница = Элементы.ПустаяСтраница; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПравилоДатаПриИзменении(Элемент) - Если ПредставлениеПравилаДата = "НеИзменять" Тогда - Элементы.СтраницыЗначенияДаты.ТекущаяСтраница = Элементы.ПустаяСтраницаДата; - Иначе - Элементы.СтраницыЗначенияДаты.ТекущаяСтраница = Элементы.СтраницаЗначенияДата; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура РасширенныеВозможностиНажатие(Элемент) - - МодульДлительныеОперацииКлиент = ОбщийМодуль("ДлительныеОперацииКлиент"); - Если ДеревоМетаданныхЗаполнено Тогда - Если Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаЧастотныеВозможности Тогда - Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаРасширенныеВозможности; - Если МакетОпределен Тогда - Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации - полные возможности'"); - КонецЕсли; - Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Обычный вид'"); - Иначе - Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаЧастотныеВозможности; - Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации'"); - Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Полные возможности'"); - КонецЕсли; - Иначе - Если ДеревоМетаданныхЗаполнено() Тогда - Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаРасширенныеВозможности; - Элементы.РасширенныеВозможности.Доступность = Истина; - Если МакетОпределен Тогда - Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации - полные возможности'"); - КонецЕсли; - Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Обычный вид'"); - Иначе - Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; - Элементы.РасширенныеВозможности.Доступность = Ложь; - МодульДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗначениеЧислоПриИзменении(Элемент) - Если ЗначениеЧисло = 0 Тогда - ТекстПредупреждения = НСтр("ru = 'Значение должно быть не нулевым.'"); - ПоказатьПредупреждение(, ТекстПредупреждения); - ЗначениеЧисло = 1; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ЗначениеДатаПриИзменении(Элемент) - Если ЗначениеДата = 0 Тогда - ТекстПредупреждения = НСтр("ru = 'Значение должно быть не нулевым.'"); - ПоказатьПредупреждение(, ТекстПредупреждения); - ЗначениеДата = 1; - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - #Область ОбработчикиКомандФормы &НаКлиенте @@ -247,23 +250,16 @@ Или ЗаданиеВыполнено(ИдентификаторЗадания) Тогда ОтключитьОбработчикОжидания("Подключаемый_ВыполнитьСкрытиеЗавершение"); Иначе - Если ФормаДлительнойОперации = Неопределено Тогда - ФормаДлительнойОперации = МодульДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтотОбъект, ИдентификаторЗадания); - КонецЕсли; + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ОбработатьРезультатВыполнениеЗадания", ЭтотОбъект); + МодульДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатДлительнойОперации, ОповещениеОЗакрытии); Возврат; КонецЕсли; РезультатЗапуска = СкрытиеКонфиденциальнойИнформации(); Если РезультатЗапуска.Статус <> "Выполнено" Тогда - МодульДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьСкрытиеКонфиденциальнойИнформации", - ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); - Если ФормаДлительнойОперации <> Неопределено Тогда - ФормаДлительнойОперации.ИдентификаторЗадания = ИдентификаторЗаданияВторой; - Иначе - ФормаДлительнойОперации = МодульДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтотОбъект, ИдентификаторЗаданияВторой); - КонецЕсли; + ОповещениеОЗакрытии = Новый ОписаниеОповещения("СкрытиеКонфиденциальнойИнформацииЗавершение", ЭтотОбъект); + МодульДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатДлительнойОперации, ОповещениеОЗакрытии); Иначе СообщитьПользователю(НСтр("ru = 'Скрытие конфиденциальной информации завершено.'")); КонецЕсли; @@ -278,16 +274,22 @@ &НаКлиенте Процедура СохранитьНастройки(Команда) - ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьНастройкиПродолжение", ЭтотОбъект); - НачатьПодключениеРасширенияРаботыСФайлами(ОписаниеОповещения); + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файл настроек'") + "(*.xml)|*.xml"; + ПараметрыСохранения.Диалог.МножественныйВыбор = Ложь; + ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, НастройкиОбработки(), , ПараметрыСохранения); КонецПроцедуры &НаКлиенте Процедура ЗагрузитьНастройки(Команда) - ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьНастройкиПродолжение", ЭтотОбъект); - НачатьПодключениеРасширенияРаботыСФайлами(ОписаниеОповещения); + Оповещение = Новый ОписаниеОповещения("ЗагрузитьНастройкиЗавершение", ЭтотОбъект); + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Файл настроек'") + "(*.xml)|*.xml"; + ПараметрыЗагрузки.Диалог.МножественныйВыбор = Ложь; + ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); КонецПроцедуры @@ -305,86 +307,46 @@ &НаСервере Функция ДеревоМетаданныхЗаполнено() - - МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); - - Если МодульДлительныеОперации = Неопределено - Или ИдентификаторЗадания = Неопределено Тогда - ДеревоОбрабатываемыхОбъектов = ПолучитьИзВременногоХранилища(АдресХранилища); - ЗначениеВРеквизитФормы(ДеревоОбрабатываемыхОбъектов, "ОбрабатываемыеОбъекты"); - ДеревоМетаданныхЗаполнено = Истина; - Возврат Истина; - ИначеЕсли МодульДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда - ДеревоОбрабатываемыхОбъектов = ПолучитьИзВременногоХранилища(АдресХранилища); - ЗначениеВРеквизитФормы(ДеревоОбрабатываемыхОбъектов, "ОбрабатываемыеОбъекты"); - ДеревоМетаданныхЗаполнено = Истина; - Возврат Истина; - Иначе + Если ИдентификаторЗадания <> Неопределено И Не ЗаданиеВыполнено(ИдентификаторЗадания) Тогда Возврат Ложь; КонецЕсли; + ДеревоОбрабатываемыхОбъектов = ПолучитьИзВременногоХранилища(АдресХранилища); + ЗначениеВРеквизитФормы(ДеревоОбрабатываемыхОбъектов, "ОбрабатываемыеОбъекты"); + ДеревоМетаданныхЗаполнено = Истина; + + Возврат Истина; КонецФункции &НаКлиенте -Процедура Подключаемый_ПроверитьВыполнениеЗадания() +Процедура ОбработатьРезультатВыполнениеЗадания(Результат, ДополнительныеПараметры) Экспорт - МодульДлительныеОперацииКлиент = ОбщийМодуль("ДлительныеОперацииКлиент"); - ДеревоМетаданныхЗаполнено = Ложь; - Попытка - Если ДеревоМетаданныхЗаполнено() Тогда - ДеревоМетаданныхЗаполнено = Истина; - ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания"); - КонецЕсли; - Исключение - ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания"); - КонецПопытки; - - Если ДеревоМетаданныхЗаполнено Тогда - Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаРасширенныеВозможности; - Элементы.РасширенныеВозможности.Доступность = Истина; - Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации - полные возможности'"); - Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Обычный вид'"); - Иначе - МодульДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + Если Результат.Статус = "Ошибка" Тогда + ВызватьИсключение Результат.ПодробноеПредставлениеОшибки; КонецЕсли; + ДеревоМетаданныхЗаполнено(); + + Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаРасширенныеВозможности; + Элементы.РасширенныеВозможности.Доступность = Истина; + Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации - полные возможности'"); + Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Обычный вид'"); КонецПроцедуры &НаКлиенте -Процедура Подключаемый_ПроверитьСкрытиеКонфиденциальнойИнформации() +Процедура СкрытиеКонфиденциальнойИнформацииЗавершение(Результат, ДополнительныеПараметры) Экспорт - МодульДлительныеОперацииКлиент = ОбщийМодуль("ДлительныеОперацииКлиент"); - Попытка - Если ТипЗнч(ФормаДлительнойОперации) = Тип("УправляемаяФорма") - И ФормаДлительнойОперации.Открыта() Тогда - - Если Не ЗаданиеВыполнено() Тогда - - МодульДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - - ПодключитьОбработчикОжидания( - "Подключаемый_ПроверитьСкрытиеКонфиденциальнойИнформации", - ПараметрыОбработчикаОжидания.ТекущийИнтервал, - Истина); - Иначе - МодульДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации( - ФормаДлительнойОперации); - ФормаДлительнойОперации = Неопределено; - СообщитьПользователю(НСтр("ru = 'Скрытие конфиденциальной информации завершено.'")); - КонецЕсли; - КонецЕсли; - Исключение - МодульДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); - ВызватьИсключение; - КонецПопытки; + Если Результат.Статус = "Ошибка" Тогда + ВызватьИсключение Результат.ПодробноеПредставлениеОшибки; + КонецЕсли; + + СообщитьПользователю(НСтр("ru = 'Скрытие конфиденциальной информации завершено.'")); КонецПроцедуры &НаСервере Функция ЗаданиеВыполнено(ИдентификаторФоновогоЗадания = Неопределено) МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); - Если ИдентификаторФоновогоЗадания = Неопределено Тогда ИдентификаторФоновогоЗадания = ИдентификаторЗаданияВторой; КонецЕсли; @@ -392,75 +354,6 @@ Возврат МодульДлительныеОперации.ЗаданиеВыполнено(ИдентификаторФоновогоЗадания); КонецФункции -&НаКлиенте -Процедура СохранитьНастройкиПродолжение(Подключено, ДополнительныеПараметры) Экспорт - - Если Подключено Тогда - Режим = РежимДиалогаВыбораФайла.Сохранение; - ДиалогСохранения = Новый ДиалогВыбораФайла(Режим); - ДиалогСохранения.МножественныйВыбор = Ложь; - ДиалогСохранения.Фильтр = НСтр("ru = 'Файл настроек'") + "(*.xml)|*.xml"; - ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьНастройкиЗавершение", ЭтотОбъект); - ДиалогСохранения.Показать(ОписаниеОповещения); - Иначе - ПолучитьФайл(НастройкиОбработки(), "settings.xml", Истина); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗагрузитьНастройкиПродолжение(Подключено, ДополнительныеПараметры) Экспорт - - Если Подключено Тогда - Режим = РежимДиалогаВыбораФайла.Открытие; - ДиалогВыбора = Новый ДиалогВыбораФайла(Режим); - ДиалогВыбора.МножественныйВыбор = Ложь; - ДиалогВыбора.Фильтр = НСтр("ru = 'Файл настроек'") + "(*.xml)|*.xml"; - ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьНастройкиЗавершение", ЭтотОбъект); - - НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогВыбора, Истина, УникальныйИдентификатор); - Иначе - ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьНастройкиПродолжениеПослеПомещенияФайла", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения,,, Истина); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗагрузитьНастройкиПродолжениеПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт - - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - УстановитьНастройки(Адрес, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура СохранитьНастройкиЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - Настройки = НастройкиОбработки(); - - ПолноеИмяФайла = Результат[0]; - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, Настройки)); - - Обработчик = Новый ОписаниеОповещения("НачатьПолучениеФайловЗавершение", ЭтотОбъект); - НачатьПолучениеФайлов(Обработчик, ПолучаемыеФайлы, ПолноеИмяФайла, Ложь); - -КонецПроцедуры - -&НаКлиенте -Процедура НачатьПолучениеФайловЗавершение(Результат, ДополнительныеПараметры) Экспорт - // Обработчик не требуется - Возврат; -КонецПроцедуры - &НаКлиенте Процедура ЗагрузитьНастройкиЗавершение(Результат, ДополнительныеПараметры) Экспорт @@ -468,18 +361,14 @@ Возврат; КонецЕсли; - УстановитьНастройки(Результат); + УстановитьНастройки(Результат.Хранение); КонецПроцедуры &НаСервере -Процедура УстановитьНастройки(Результат, РезультатВХранилище = Ложь) +Процедура УстановитьНастройки(Результат) - Если РезультатВХранилище Тогда - ФайлНастроек = ПолучитьИзВременногоХранилища(Результат); - Иначе - ФайлНастроек = ПолучитьИзВременногоХранилища(Результат[0].Хранение); - КонецЕсли; + ФайлНастроек = ПолучитьИзВременногоХранилища(Результат); ИмяФайла = ПолучитьИмяВременногоФайла("xml"); ФайлНастроек.Записать(ИмяФайла); @@ -569,13 +458,13 @@ ПараметрыВыполненияВФоне.НаименованиеФоновогоЗадания = НСтр("ru = 'Скрытие конфиденциальной информации'"); ПараметрыВыполненияВФоне.ОжидатьЗавершение = Ложь; - РезультатФоновогоЗадания = МодульДлительныеОперации.ВыполнитьВФоне( + РезультатДлительнойОперации = МодульДлительныеОперации.ВыполнитьВФоне( ОбработкаОбъект.Метаданные().ПолноеИмя() + ".МодульОбъекта.ЗаполнитьДеревоОбрабатываемыхОбъектов", ПараметрыПроцедуры, ПараметрыВыполненияВФоне); - АдресХранилища = РезультатФоновогоЗадания.АдресРезультата; - ИдентификаторЗадания = РезультатФоновогоЗадания.ИдентификаторЗадания; + АдресХранилища = РезультатДлительнойОперации.АдресРезультата; + ИдентификаторЗадания = РезультатДлительнойОперации.ИдентификаторЗадания; КонецПроцедуры diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl index 9cad80c44..49be4e7f9 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -290,8 +298,6 @@ Если ЗначениеЗаполнено(ПараметрыОтбора) Тогда - МетаданныеРегистра = НаборЗаписейРегистра.Метаданные(); - Субъекты = ПараметрыОтбора.Субъекты; ИменаИзмеренийСТипомСубъекта = ЗащитаПерсональныхДанныхПовтИсп.ИменаРеквизитовИсточникаСодержащихСубъект(ОбъектМетаданных.ПолноеИмя); ОбрабатыватьЗаписьПриНаличииСубъекта = ЗначениеЗаполнено(ИменаИзмеренийСТипомСубъекта); @@ -371,10 +377,7 @@ Процедура ОбработатьОбъектМетаданных(ОбъектМетаданных, ПараметрыОтбора) ОбработкаПорциями = Ложь; - Субъекты = ПараметрыОтбора.Субъекты; - ИменаРеквизитовСТипомСубъекта = Новый Массив; - ВключеноВерсионирование = Ложь; Если ЗначениеЗаполнено(Субъекты) Тогда @@ -1204,4 +1207,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl index 235ddd7c0..57f664f8e 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl index b97d3281b..7d99b117e 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -25,7 +32,7 @@ НСтрока = НСтр("ru = 'Следует указать хотя бы одно поле'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"СписокПолей"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока,,"СписокПолей"); Возврат; diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl index b49e3e07a..a4f877190 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -27,14 +34,14 @@ НСтрока = НСтр("ru = 'Следует указать хотя бы одно поле'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"СписокПолей",, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока,,"СписокПолей",, Отказ); ИначеЕсли МассивОтмеченныхЭлементовСписка.Количество() > МаксимальноеКоличествоПользовательскихПолей() Тогда // Значение должно быть не больше установленного. СтрокаСообщения = НСтр("ru = 'Уменьшите количество полей (можно выбирать не более [КоличествоПолей] полей)'"); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[КоличествоПолей]", Строка(МаксимальноеКоличествоПользовательскихПолей())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,,"СписокПолей",, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения,,"СписокПолей",, Отказ); КонецЕсли; diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl index 54a14e451..de577f720 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl index 50ebb68c5..8c0a04904 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -14,7 +21,7 @@ Если Не Параметры.Свойство("ИмяФайлаСообщенияОбмена") Тогда НСтрока = НСтр("ru = 'Форма не может быть открыта интерактивно.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(НСтрока,,,, Отказ); Возврат; КонецЕсли; @@ -392,6 +399,8 @@ Элементы.Закрыть1.КнопкаПоУмолчанию = Истина; + Возврат Неопределено; + КонецФункции // Страница 2 (ожидание): Сопоставление объектов. @@ -425,6 +434,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции // Страница 2 Обработчик оповещения о завершении фонового задания. @@ -454,6 +465,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции // Страница 4: Работа с результатом автоматического сопоставления. @@ -467,6 +480,8 @@ ПропуститьСтраницу = Истина; КонецЕсли; + Возврат Неопределено; + КонецФункции // Страница 5: Пустой результат автоматического сопоставления. @@ -476,6 +491,8 @@ Элементы.Закрыть.КнопкаПоУмолчанию = Истина; + Возврат Неопределено; + КонецФункции // Страница 2: Сопоставление объектов. @@ -556,7 +573,7 @@ &НаСервере Процедура ЗафиксироватьОшибку(ПодробноеПредставлениеОшибки) ЗаписьЖурналаРегистрации( - НСтр("ru = 'Помощник сопоставления объектов.Автоматическое сопоставление'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Помощник сопоставления объектов.Автоматическое сопоставление'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , ,ПодробноеПредставлениеОшибки); diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index e58095e18..10e1b7895 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -967,7 +974,7 @@ // Значение должно быть не нулевое. НСтрока = НСтр("ru = 'Следует указать хотя бы одно поле для отображения'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Объект.СписокПолейТаблицы",, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока,,"Объект.СписокПолейТаблицы",, Отказ); ИначеЕсли ПользовательскиеПоля.Количество() > МаксимальноеКоличествоПользовательскихПолей() Тогда @@ -975,7 +982,7 @@ СтрокаСообщения = НСтр("ru = 'Уменьшите количество полей (можно выбирать не более %1 полей)'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(МаксимальноеКоличествоПользовательскихПолей())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,,"Объект.СписокПолейТаблицы",, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения,,"Объект.СписокПолейТаблицы",, Отказ); КонецЕсли; @@ -1060,8 +1067,6 @@ Если НельзяУстановитьСвязьБыстро Тогда // Полноценная установка связи. - ИдентификаторСтрокиНачала = Элементы.ТаблицаСопоставления.ТекущаяСтрока; - ПараметрыОтбора = Новый Структура("СтатусСопоставления", ?(ТекущиеДанные.СтатусСопоставления = -1, 1, -1)); ПараметрыОтбора.Вставить("ИндексКартинки", ТекущиеДанные.ИндексКартинки); @@ -1265,6 +1270,8 @@ Элементы.КнопкиТаблицы.Доступность = Истина; Элементы.ГруппаЗаголовкаТаблицы.Доступность = Истина; + Возврат Неопределено; + КонецФункции // Страница 2 (ожидание): Сопоставление объектов. @@ -1305,6 +1312,8 @@ КонецЕсли; + Возврат Неопределено; + КонецФункции // Страница 2 Обработчик оповещения о завершении фонового задания. @@ -1350,6 +1359,8 @@ // Устанавливаем видимость и заголовки полей таблицы сопоставления. УстановитьВидимостьПолейТаблицы("ТаблицаСопоставления"); + + Возврат Неопределено; КонецФункции @@ -1449,7 +1460,7 @@ Процедура ЗафиксироватьОшибку(ПодробноеПредставлениеОшибки) ЗаписьЖурналаРегистрации( - НСтр("ru = 'Помощник сопоставления объектов.Анализ данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Помощник сопоставления объектов.Анализ данных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки); diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl index d6ec599f6..360c6b1c4 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Форма ожидает обязательные параметры: // // ОбъектДляСопоставления - Строка - описание объекта в текущей программе. diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ManagerModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ManagerModule.bsl index de2bd8d67..6f0e3ef88 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -94,11 +102,11 @@ // Определяем свойство "СписокИспользуемыхПолей". СопоставлениеОбъектов.СписокИспользуемыхПолей.Очистить(); - ОбщегоНазначенияКлиентСервер.ЗаполнитьКоллекциюСвойств(Параметры.РеквизитыФормы.СписокИспользуемыхПолей, СопоставлениеОбъектов.СписокИспользуемыхПолей); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Параметры.РеквизитыФормы.СписокИспользуемыхПолей, СопоставлениеОбъектов.СписокИспользуемыхПолей); // Определяем свойство "СписокПолейТаблицы". СопоставлениеОбъектов.СписокПолейТаблицы.Очистить(); - ОбщегоНазначенияКлиентСервер.ЗаполнитьКоллекциюСвойств(Параметры.РеквизитыФормы.СписокПолейТаблицы, СопоставлениеОбъектов.СписокПолейТаблицы); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Параметры.РеквизитыФормы.СписокПолейТаблицы, СопоставлениеОбъектов.СписокПолейТаблицы); // Загружаем таблицу неутвержденных связей. СопоставлениеОбъектов.ТаблицаНеутвержденныхСвязей.Загрузить(Параметры.ТаблицаНеутвержденныхСвязей); diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl index 6971e090c..b44471bce 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -121,7 +129,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Отказ = Истина; Возврат; @@ -193,7 +201,7 @@ Если ОбработкаОбменаДанными.ФлагОшибки() Тогда НСтрока = НСтр("ru = 'При загрузке сообщения обмена возникли ошибки: %1'"); НСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, ОбработкаОбменаДанными.СтрокаСообщенияОбОшибке()); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(НСтрока,,,, Отказ); Возврат; КонецЕсли; @@ -1932,7 +1940,7 @@ НСтрока = НСтр("ru = 'При загрузке сообщения обмена возникли ошибки: %1'"); НСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, ОбработкаОбменаДанными.СтрокаСообщенияОбОшибке()); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(НСтрока,,,, Отказ); Возврат Неопределено; КонецЕсли; @@ -2169,4 +2177,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form index 2df8df1a7..71ecf5708 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form @@ -536,7 +536,7 @@ <choiceList> <presentation> <key>ru</key> - <value>5</value> + <value>5 минут</value> </presentation> <value xsi:type="core:NumberValue"> <value>5</value> @@ -545,7 +545,7 @@ <choiceList> <presentation> <key>ru</key> - <value>10</value> + <value>10 минут</value> </presentation> <value xsi:type="core:NumberValue"> <value>10</value> @@ -554,7 +554,7 @@ <choiceList> <presentation> <key>ru</key> - <value>30</value> + <value>30 минут</value> </presentation> <value xsi:type="core:NumberValue"> <value>30</value> @@ -563,39 +563,6 @@ <textSize>Normal</textSize> </extInfo> </items> - <items xsi:type="form:Decoration"> - <name>Надпись</name> - <id>48</id> - <title> - <key>ru</key> - <value>минут</value> - - true - true - - true - - - НадписьРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - - НадписьКонтекстноеМеню - 49 - true - - Label - true - - Left - - true true diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl index cbd472adf..e1872f605 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -21,20 +29,11 @@ ПериодОбновления = 5; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаКнопкаОтмена", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСправка", "ТолькоВоВсехДействиях", Истина); - - КонецЕсли; - КонецПроцедуры #КонецОбласти -#Область ОбработчикиСобытийЭлементовУправленияФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ДеревоОтображаемыхДелПриИзменении(Элемент) diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl index 37395a6e4..5921a321f 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаСервере @@ -64,7 +72,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовУправленияФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура Подключаемый_ОбработатьНажатиеНаГиперссылку(Элемент, СтандартнаяОбработка) @@ -240,6 +248,7 @@ &НаСервере Процедура СформироватьСписокТекущихДел(ТекущиеДела) + ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент(); РазделыСВажнымиДелами = Новый Структура; СохраненныеНастройкиОтображения = ТекущиеДелаСлужебный.СохраненныеНастройкиОтображения(); Если СохраненныеНастройкиОтображения = Неопределено Тогда @@ -308,7 +317,12 @@ ТекущаяГруппа = ИмяГруппы; Группа = Группа(ИмяГруппы, ОбщаяГруппа); Если ИнтерфейсТакси Тогда - Группа.Отображение = ОтображениеОбычнойГруппы.СильноеВыделение; + Если ЭтоМобильныйКлиент Тогда + ВариантОтображения = ОтображениеОбычнойГруппы.Нет; + Иначе + ВариантОтображения = ОтображениеОбычнойГруппы.СильноеВыделение; + КонецЕсли; + Группа.Отображение = ВариантОтображения; КонецЕсли; Если РазделСвернут = Истина Тогда @@ -460,7 +474,7 @@ Возврат; ИначеЕсли Результат.Статус = "Ошибка" Тогда Элементы.ФормаНастроить.Доступность = ТолькоОбновлениеДел; - ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + ВызватьИсключение Результат.ПодробноеПредставлениеОшибки; ИначеЕсли Результат.Статус = "Выполнено" Тогда ЗагрузитьТекущиеДела(Результат.АдресРезультата); Элементы.ФормаНастроить.Доступность = Истина; diff --git a/SSL/src/DataProcessors/ТекущиеДела/ManagerModule.bsl b/SSL/src/DataProcessors/ТекущиеДела/ManagerModule.bsl index 5d4a85367..981972c1f 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl index 34e87f692..56d87474d 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index 0afd932a1..cfa0b6a77 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -626,4 +634,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl index 34e87f692..56d87474d 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl index c62559f0b..504f0db12 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -598,4 +606,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl index 34e87f692..56d87474d 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl index 848e380f9..27f38af61 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -690,4 +698,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Commands/УдалениеПомеченныхОбъектов/CommandModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Commands/УдалениеПомеченныхОбъектов/CommandModule.bsl index b4cd91ec9..0addb6465 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Commands/УдалениеПомеченныхОбъектов/CommandModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Commands/УдалениеПомеченныхОбъектов/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form index 3b7acfdbf..b4dc9c2f5 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form @@ -1146,7 +1146,6 @@ СтраницаПричиныНевозможностиУдаления 39 - VeryHigh ГруппаНеУдаленные 229 @@ -1619,7 +1618,6 @@ CommonPicture.ПиктограммыЭлементов - SelectionPresentationAndChoice true true @@ -2110,7 +2108,6 @@ true - true true 5 true @@ -2136,7 +2133,6 @@ CommonPicture.ПиктограммыЭлементов - SelectionPresentationAndChoice true
      diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index 4ceb8ad72..fb7205fbf 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -47,31 +55,10 @@ БыстрыйПоиск = Новый Структура; БыстрыйПоиск.Вставить("ПолныеИменаОбъектовМетаданных", Новый Соответствие); + Монопольно = Истина; РежимУдаления = "Полный"; ПриСозданииНаСервереУстановитьТекстПоясненияКОбработке(); ВидимостьДоступность(ЭтотОбъект); - Монопольно = Истина; - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.ГруппаПричины.ОтображатьЗаголовок = Истина; - Элементы.ГруппаПричины.Заголовок = НСтр("ru = 'Места использования'"); - - Для каждого ЭлементКоманднойПанели Из Элементы.СвязиНеУдаленныхКоманднаяПанель.ПодчиненныеЭлементы Цикл - - Если ТипЗнч(ЭлементКоманднойПанели) <> Тип("КнопкаФормы") Тогда - - Продолжить; - - КонецЕсли; - - ЭлементКоманднойПанели.Отображение = ОтображениеКнопки.Картинка; - ЭлементКоманднойПанели.ТолькоВоВсехДействиях = Ложь; - - КонецЦикла; - - КонецЕсли; - КонецПроцедуры &НаСервере @@ -399,24 +386,7 @@ КонецЕсли; ОткрытьФорму(ПутьКФорме); Иначе - ПолноеИмяОМ = БыстрыйПоиск.ПолныеИменаОбъектовМетаданных[ТипЗнч(Значение)]; - Если ТипЗнч(ПолноеИмяОМ) = Тип("Строка") Тогда - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПоказатьКарточку", Истина); - ПараметрыФормы.Вставить("Ключ", Значение); - ВидОМ = СтрРазделить(ПолноеИмяОМ, ".")[0]; - Если ВидОМ = "РЕГИСТРСВЕДЕНИЙ" - Или ВидОМ = "РЕГИСТРНАКОПЛЕНИЯ" - Или ВидОМ = "РЕГИСТРБУХГАЛТЕРИИ" - Или ВидОМ = "РЕГИСТРРАСЧЕТА" Тогда - ПолноеИмяФормы = ПолноеИмяОМ + ".ФормаЗаписи"; - Иначе - ПолноеИмяФормы = ПолноеИмяОМ + ".ФормаОбъекта"; - КонецЕсли; - ОткрытьФорму(ПолноеИмяФормы, ПараметрыФормы); - Иначе - ПоказатьЗначение(, Значение); - КонецЕсли; + ПоказатьЗначение(, Значение); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index 668d68cb1..aeef2ddc9 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -1008,7 +1016,7 @@ КонецЕсли; ЗаписьЖурналаРегистрации( - НСтр("ru = 'Удаление помеченных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Удаление помеченных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение, , Ссылка, diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Commands/УниверсальныйОбменДанными/CommandModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Commands/УниверсальныйОбменДанными/CommandModule.bsl index 2c1124522..c7c7d07d7 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Commands/УниверсальныйОбменДанными/CommandModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Commands/УниверсальныйОбменДанными/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl index 6f688824b..a847d8c66 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -349,7 +356,7 @@ Объект.ИмяФайлаОбмена = ИмяФайлаДанных; Файл = Новый Файл(Объект.ИмяФайлаОбмена); - АрхивироватьФайл = (ВРЕГ(Файл.Расширение) = ВРЕГ(".zip")); + Объект.АрхивироватьФайл = (ВРЕГ(Файл.Расширение) = ВРЕГ(".zip")); КонецПроцедуры @@ -1116,7 +1123,7 @@ КонецПроцедуры &НаСервере -Функция ВыполнитьПодключениеКИБПриемникуНаСервере() +Процедура ВыполнитьПодключениеКИБПриемникуНаСервере() ОбъектДляСервера = РеквизитФормыВЗначение("Объект"); ЗаполнитьЗначенияСвойств(ОбъектДляСервера, Объект); @@ -1128,7 +1135,7 @@ КонецЕсли; -КонецФункции +КонецПроцедуры // Устанавливает состояние пометки у подчиненных строк строки дерева значений // в зависимости от пометки текущей строки. @@ -1317,7 +1324,7 @@ ИмяПараметра = Парам.Ключ; - СтрокаТаблицы = ТаблицаПараметров.Найти(Парам.Ключ, "Наименование"); + СтрокаТаблицы = ТаблицаПараметров.Найти(ИмяПараметра, "Наименование"); Если СтрокаТаблицы <> Неопределено Тогда @@ -1439,8 +1446,6 @@ ИмяФайла = ПолучитьИмяВременногоФайла(Расширение); - Файл = Новый Файл(ИмяФайла); - Иначе Расширение = РасширениеФайла(ИмяФайлаДляРасширения); @@ -1550,8 +1555,8 @@ Если ИмяВременногоФайлаДанных = Неопределено Тогда - Возврат Неопределено; СообщитьПользователю(НСтр("ru = 'Не определен файл данных'")); + Возврат Неопределено; Иначе @@ -1730,7 +1735,8 @@ Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Обработчик = Новый ОписаниеОповещения("ОткрытьФормуНастройкиОтладкиОбработчиковЗавершение", ЭтотОбъект, ОбработчикиСобытийИзФайлаПравил); - ПараметрыОтладки = ОткрытьФорму(ИмяВызываемойФормы, ПараметрыФормы, ЭтотОбъект,,,,Обработчик, Режим); + + ОткрытьФорму(ИмяВызываемойФормы, ПараметрыФормы, ЭтотОбъект,,,,Обработчик, Режим); КонецПроцедуры @@ -1902,7 +1908,7 @@ КонецФункции &НаСервере -Функция ПроверитьВерсиюИРежимСовместимостиПлатформы() +Процедура ПроверитьВерсиюИРежимСовместимостиПлатформы() Информация = Новый СистемнаяИнформация; Если Не (Лев(Информация.ВерсияПриложения, 3) = "8.3" @@ -1918,7 +1924,7 @@ КонецЕсли; -КонецФункции +КонецПроцедуры &НаКлиенте Процедура ИзменитьРежимБезопаснаяЗагрузка(Интерактивно = Истина) diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl index 8766f26be..f2865648a 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index 02f5f71e2..e8631be9d 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -1373,7 +1381,7 @@ // Возвращаемое значение: // СтрокаТаблицыЗначений - Ссылка на правило конвертации в таблице правил. // -Функция НайтиПравило(Объект, ИмяПравила="") Экспорт +Функция НайтиПравило(Объект = Неопределено, ИмяПравила="") Экспорт Если Не ПустаяСтрока(ИмяПравила) Тогда @@ -1872,7 +1880,7 @@ КонецЕсли; ВыгрузитьСвойства(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКО.СвойстваПоиска, - УзелСсылки, ВыборкаДляВыгрузкиДанных, ИмяПредопределенногоЭлемента, ПКО.НеВыгружатьОбъектыСвойствПоСсылкам ИЛИ ТолькоПолучитьУзелСсылки); + УзелСсылки, ВыборкаДляВыгрузкиДанных, ИмяПредопределенногоЭлемента, ВыгрузитьТолькоСсылку); УзелСсылки.ЗаписатьКонецЭлемента(); УзелСсылки = УзелСсылки.Закрыть(); @@ -3043,7 +3051,7 @@ Продолжить; КонецЕсли; Ключ = Поле.Ключ; - Стр = Стр + Символы.ПС + Отступ + Символы.Таб + одДополнитьСтроку(Поле.Ключ, Выравнивание) + " = " + Строка(Значение); + Стр = Стр + Символы.ПС + Отступ + Символы.Таб + одДополнитьСтроку(Ключ, Выравнивание) + " = " + Строка(Значение); КонецЦикла; @@ -3090,7 +3098,7 @@ // Записывает информацию об ошибке в протокол выполнения обмена для обработчика очистки данных. // -Функция ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(КодСообщения, СтрокаОшибки, ИмяПравилаОчисткиДанных, Объект = "", ИмяОбработчика = "") +Процедура ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(КодСообщения, СтрокаОшибки, ИмяПравилаОчисткиДанных, Объект = "", ИмяОбработчика = "") ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); ЗП.ПОД = ИмяПравилаОчисткиДанных; @@ -3115,11 +3123,11 @@ ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; -КонецФункции +КонецПроцедуры // Регистрирует в протоколе выполнения ошибку обработчика ПКО (выгрузка). // -Функция ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(КодСообщения, СтрокаОшибки, ПКО, Источник, ИмяОбработчика) +Процедура ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(КодСообщения, СтрокаОшибки, ПКО, Источник, ИмяОбработчика) ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; @@ -3140,9 +3148,9 @@ ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; -КонецФункции +КонецПроцедуры -Функция ЗаписатьИнформациюОбОшибкеОбработчикиПВД(КодСообщения, СтрокаОшибки, ИмяПравила, ИмяОбработчика, Объект = Неопределено) +Процедура ЗаписатьИнформациюОбОшибкеОбработчикиПВД(КодСообщения, СтрокаОшибки, ИмяПравила, ИмяОбработчика, Объект = Неопределено) ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); ЗП.ПВД = ИмяПравила; @@ -3165,7 +3173,7 @@ ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; -КонецФункции +КонецПроцедуры Функция ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(КодСообщения, СтрокаОшибки, ИмяОбработчика) @@ -3571,7 +3579,7 @@ ИначеЕсли ИмяУзла = "НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике" Тогда // не влияет на обмен - НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике = одЗначениеЭлемента(ПравилаОбмена, одТипБулево); + одЗначениеЭлемента(ПравилаОбмена, одТипБулево); ИначеЕсли ИмяУзла = "ИспользоватьБыстрыйПоискПриЗагрузке" Тогда @@ -3595,7 +3603,7 @@ ИначеЕсли ИмяУзла = "ПриоритетОбъектовОбмена" Тогда // В универсальном обмене не участвует. - ПриоритетОбъектовОбмена = одЗначениеЭлемента(ПравилаОбмена, одТипСтрока); + одЗначениеЭлемента(ПравилаОбмена, одТипСтрока); ИначеЕсли ИмяУзла = "Приемник" Тогда @@ -4421,7 +4429,7 @@ ИначеЕсли ИмяУзла = "НеВыгружатьОбъектыСозданныеВБазеПриемнике" Тогда // Параметр игнорируется при обмене данными. - НеВыгружатьОбъектыСозданныеВБазеПриемнике = одЗначениеЭлемента(ПравилаОбмена, одТипБулево); + одЗначениеЭлемента(ПравилаОбмена, одТипБулево); ИначеЕсли ИмяУзла = "ОбъектВыборки" Тогда ОбъектВыборки = одЗначениеЭлемента(ПравилаОбмена, одТипСтрока); @@ -6129,7 +6137,6 @@ СвойстваМД = Менеджеры[Тип]; ИмяТипа = СвойстваМД.ИмяТипа; Менеджер = СвойстваМД.Менеджер; - ПометкаУдаления = Неопределено; Если ИмяТипа = "Справочник" ИЛИ ИмяТипа = "ПланВидовХарактеристик" Тогда @@ -7251,7 +7258,6 @@ СсылкаНаОбъект = Неопределено; СтруктураСвойств = Неопределено; ИмяТипаОбъекта = Неопределено; - ЭтоОбъектДокумент = Ложь; СсылкаНаОбъектФиктивная = Ложь; ПКО = Неопределено; АлгоритмПоиска = ""; @@ -11444,7 +11450,7 @@ ЗП.Объект = Данные; ЗП.ТипОбъекта = ТипДанныхДляВыгрузки; - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(72, ЗП, Истина); + ЗаписатьВПротоколВыполнения(72, ЗП, Истина); ЗаписьXML.Закрыть(); @@ -11675,7 +11681,7 @@ КонецПроцедуры -Функция ОбновитьПометкиВсехРодителейУПравилВыгрузки(СтрокиДереваПравилВыгрузки, НужноУстанавливатьПометки = Истина) +Процедура ОбновитьПометкиВсехРодителейУПравилВыгрузки(СтрокиДереваПравилВыгрузки, НужноУстанавливатьПометки = Истина) Если СтрокиДереваПравилВыгрузки.Строки.Количество() = 0 Тогда @@ -11683,15 +11689,13 @@ УстановитьПометкиРодителей(СтрокиДереваПравилВыгрузки, "Включить"); КонецЕсли; - Возврат Истина; - Иначе НужныПометки = Истина; Для Каждого СтрокаДереваПравил Из СтрокиДереваПравилВыгрузки.Строки Цикл - РезультатУстановки = ОбновитьПометкиВсехРодителейУПравилВыгрузки(СтрокаДереваПравил, НужныПометки); + ОбновитьПометкиВсехРодителейУПравилВыгрузки(СтрокаДереваПравил, НужныПометки); Если НужныПометки = Истина Тогда НужныПометки = Ложь; КонецЕсли; @@ -11700,7 +11704,7 @@ КонецЕсли; -КонецФункции +КонецПроцедуры Процедура ЗаполнитьСвойстваДляПоиска(СтруктураДанных, ПКС) @@ -12372,20 +12376,6 @@ мСчетчикЗагруженныхОбъектов = 1 + мСчетчикЗагруженныхОбъектов; - Если мСчетчикЗагруженныхОбъектов % КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда - - Если ПоследнийОбъектЗагрузки <> Неопределено Тогда - - СтрокаОбъектаЗагрузки = ", Объект: " + Строка(ТипЗнч(ПоследнийОбъектЗагрузки)) + " " + Строка(ПоследнийОбъектЗагрузки); - - Иначе - - СтрокаОбъектаЗагрузки = ""; - - КонецЕсли; - - КонецЕсли; - Если ЗапоминатьЗагруженныеОбъекты И мСчетчикЗагруженныхОбъектов % 100 = 0 Тогда @@ -12671,7 +12661,7 @@ КонецЕсли; Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); Отказ = Истина; КонецПопытки; @@ -12727,7 +12717,7 @@ КонецЕсли; Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); КонецПопытки; КонецЕсли; @@ -14038,8 +14028,7 @@ Менеджер = Менеджеры[ТипДанныхДляУдаления]; ИмяТипа = Менеджер.ИмяТипа; - Имя = Менеджер.Имя; - Свойства = Менеджеры[ТипДанныхДляУдаления]; + Свойства = Менеджеры[ТипДанныхДляУдаления]; Правило = Новый Структура("Имя,Непосредственно,ПередУдалением", "УдалениеОбъекта", Истина, ""); @@ -14281,4 +14270,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index 462a73c7e..e95c44e86 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -58,29 +66,6 @@ Элементы.ОписаниеУстановкиПериода.Заголовок, Формат(ОкончаниеПериода(ДобавитьМесяц(РассчитатьИтогиНа, -1)), "DLF=D"), Формат(ОкончаниеПериода(РассчитатьИтогиНа), "DLF=D")); - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаУстановитьПериодРассчитанныхИтогов", "Группировка", ГруппировкаПодчиненныхЭлементовФормы.Вертикальная); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаВключениеИтогов", "Группировка", ГруппировкаПодчиненныхЭлементовФормы.Вертикальная); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПерестроениеИЗаполнениеАгрегатов", "Группировка", ГруппировкаПодчиненныхЭлементовФормы.Вертикальная); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПолучениеОптимальныхАгрегатов", "Группировка", ГруппировкаПодчиненныхЭлементовФормы.Вертикальная); - - Элементы.ИтогиВключитьИспользованиеИтогов.ТолькоВоВсехДействиях = Истина; - Элементы.ИтогиВыключитьИспользованиеИтогов.ТолькоВоВсехДействиях = Истина; - Элементы.ВключитьИспользованиеТекущихИтогов.ТолькоВоВсехДействиях = Истина; - Элементы.ВыключитьИспользованиеТекущихИтогов.ТолькоВоВсехДействиях = Истина; - Элементы.ВключитьРазделениеИтогов.ТолькоВоВсехДействиях = Истина; - Элементы.ВыключитьРазделениеИтогов.ТолькоВоВсехДействиях = Истина; - Элементы.УстановитьПериодИтогов.ТолькоВоВсехДействиях = Истина; - Элементы.ПересчитатьИтоги.ТолькоВоВсехДействиях = Истина; - Элементы.ПересчитатьТекущиеИтоги.ТолькоВоВсехДействиях = Истина; - Элементы.ПересчитатьИтогиЗаПериод.ТолькоВоВсехДействиях = Истина; - Элементы.Найти.ТолькоВоВсехДействиях = Истина; - Элементы.ОтменитьПоиск.ТолькоВоВсехДействиях = Истина; - Элементы.ВыделитьВсе.ТолькоВоВсехДействиях = Истина; - - КонецЕсли; КонецПроцедуры @@ -664,125 +649,113 @@ &НаСервере Процедура УстановитьУсловноеОформление() - + УсловноеОформление.Элементы.Очистить(); - + // - + Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 0; - + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Итоги'")); - + // - + Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 1; - + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Агрегаты'")); - + // - + Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 2; - + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Просто итоговый регистр'")); - + // - + Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиИспользоватьТекущиеИтоги.Имя); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиПериодИтогов.Имя); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиРазделениеИтогов.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.ОстаткиИОбороты"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Ложь; - - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); - - КонецЕсли; - + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); + // - + Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 2; - - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); - - КонецЕсли; - + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); + // - + Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиИспользоватьИтоги.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 1; - - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); - - КонецЕсли; - + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); + // - + Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АгрегатыПоРегистрам.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("АгрегатыПоРегистрам.ПостроениеОптимально"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Ложь; - + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Ложь, Ложь, Ложь, )); - + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -903,7 +876,7 @@ Если Не ВыбраннаяСтрока.РежимАгрегатов И ВРег(ПараметрыИтогов.Действие) <> ВРег("УстановитьРежимАгрегатов") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Операция невозможна в режиме итогов'"), , ПолеСообщенияОбОшибке); @@ -1398,7 +1371,7 @@ Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( СообщениеОбОшибке + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), @@ -1448,7 +1421,7 @@ Исключение СообщениеОбОшибке = ПараметрыСервера.СообщениеОбОшибке + " (" + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + ")"; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке); Результат.Успешно = Ложь; КонецПопытки; diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl index c287ae965..46f17cb97 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl index c2c108fbc..050a7ee98 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Module.bsl index 362fa8bdd..85e9add25 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,13 +15,6 @@ Возврат; КонецЕсли; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда - - ВызватьИсключение НСтр("ru ='Создание резервной копии поддерживается только в операционной системе Windows. - |В текущей операционной системе резервная копия делается самостоятельно.'"); - - КонецЕсли; - ЗаполнитьЗначенияСвойств(Объект, Параметры); ОбновитьСостояниеЭлементовУправления(ЭтотОбъект); diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form index 9324df678..e78395334 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Form.form @@ -3535,23 +3535,6 @@
      true
      - - ДатаВремяОбновленияУстановлена - - <key>ru</key> - <value>Дата время обновления установлена</value> - - 3 - - Boolean - - - true - - - true - - КонфигурацияИзменена diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl index 682e639bc..0aa82ab97 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -15,11 +23,11 @@ Если Не ОбновлениеКонфигурации.ЕстьПраваНаУстановкуОбновления() Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для обновления конфигурации. Обратитесь к администратору.'"); - ИначеЕсли ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + ИначеЕсли Пользователи.ЭтоСеансВнешнегоПользователя() Тогда ВызватьИсключение НСтр("ru = 'Данная операция не доступна внешнему пользователю системы.'"); КонецЕсли; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + Если Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда Возврат; // Отказ устанавливается в ПриОткрытии(). КонецЕсли; @@ -363,11 +371,6 @@ КонецЕсли; ИначеЕсли НоваяТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер Тогда - Если Объект.КодЗадачиПланировщика = 0 И Не ДатаВремяОбновленияУстановлена Тогда - Объект.ДатаВремяОбновления = ВернутьДату(НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()) + 24*60*60, Объект.ДатаВремяОбновления); - ДатаВремяОбновленияУстановлена = Истина; - КонецЕсли; - ФункцияКнопкиДалее = (Объект.РежимОбновления = 0);// Если не обновляем сейчас, то "готово". Объект.ВосстанавливатьИнформационнуюБазу = Ложь; @@ -379,7 +382,7 @@ ОбновитьИнформациюОНаличииСоединений(Страницы.ВыборРежимаОбновленияСервер); Элементы.ПолеДатаВремяОбновления.Доступность = (Объект.РежимОбновления = 2); - Элементы.АдресЭлектроннойПочты.Доступность = Объект.ВыслатьОтчетНаПочту; + Элементы.АдресЭлектроннойПочты.Доступность = Объект.ВыслатьОтчетНаПочту; Если Не СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда ДоступностьКнопкиНазад = Ложь; @@ -578,16 +581,42 @@ УстановленоИсправлений = 0; Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл - Расширение = РасширенияКонфигурации.Создать(); - Расширение.БезопасныйРежим = Ложь; - Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе = Истина; - Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда - Расширение.ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); - КонецЕсли; - Данные = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение); - Попытка + Если СтрЗаканчиваетсяНа(ПомещенныйФайл.Имя, ".zip") Тогда + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение); + ДвоичныеДанные.Записать(ИмяАрхива); + + ИсправлениеНайдено = Ложь; + ЧтениеZip = Новый ЧтениеZipФайла(ИмяАрхива); + Для Каждого ЭлементАрхива Из ЧтениеZip.Элементы Цикл + Если ЭлементАрхива.Расширение = "cfe" Тогда + ИсправлениеНайдено = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ИсправлениеНайдено Тогда + ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог("Патчи"); + ЧтениеZip.Извлечь(ЭлементАрхива, ВременныйКаталог); + ПолноеИмяИсправления = ВременныйКаталог + ЭлементАрхива.Имя; + Данные = Новый ДвоичныеДанные(ПолноеИмяИсправления); + УдалитьФайлы(ПолноеИмяИсправления); + Иначе + ВызватьИсключение НСтр("ru = 'Файл не является исправлением.'"); + КонецЕсли; + ЧтениеZip.Закрыть(); + УдалитьФайлы(ИмяАрхива); + Иначе + Данные = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение); + КонецЕсли; + + Расширение = РасширенияКонфигурации.Создать(); + Расширение.БезопасныйРежим = Ложь; + Расширение.ИспользуетсяВРаспределеннойИнформационнойБазе = Истина; + Расширение.ЗащитаОтОпасныхДействий = ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений(); Расширение.Записать(Данные); + УстановленноеРасширение = ОбновлениеКонфигурации.РасширениеПоИдентификатору(Расширение.УникальныйИдентификатор); Если Не ОбновлениеКонфигурации.ЭтоИсправление(УстановленноеРасширение) Тогда Расширение.Удалить(); @@ -604,7 +633,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ИмяФайлаИсправления, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Установка'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Исправления.Установка'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); КонецПопытки; КонецЦикла; @@ -724,11 +753,6 @@ КонецПроцедуры -&НаКлиенте -Функция ВернутьДату(Дата, Время) - Возврат Дата(Год(Дата), Месяц(Дата), День(Дата), Час(Время), Минута(Время), Секунда(Время)); -КонецФункции - &НаСервере Функция ПараметрыСтраницыВыборРежимаОбновленияСервер(СообщенияДляЖурналаРегистрации) @@ -809,7 +833,8 @@ УказанФайлОбновления = Ложь; ИменаВыбранныхФайлов = СтрРазделить(ВыбранныеФайлы, ","); Для Каждого ИмяФайла Из ИменаВыбранныхФайлов Цикл - Если СтрЗаканчиваетсяНа(ИмяФайла, ".cfe") Тогда + Если СтрЗаканчиваетсяНа(ИмяФайла, ".cfe") + Или СтрЗаканчиваетсяНа(ИмяФайла, ".zip") Тогда ФайлыИсправлений.Добавить(ИмяФайла); Иначе // Это файл обновления. Если Не УказанФайлОбновления Тогда @@ -823,14 +848,14 @@ Если НуженФайлОбновления = 1 Тогда Если Не ЗначениеЗаполнено(ВыбранныеФайлы) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Укажите файл поставки обновления конфигурации.'"),,"Объект.ИмяФайлаОбновления"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Укажите файл поставки обновления конфигурации.'"),,"Объект.ИмяФайлаОбновления"); ТекущийЭлемент = Элементы.ПолеФайлОбновления; Возврат; КонецЕсли; Если Не ПустаяСтрока(Объект.ИмяФайлаОбновления) Тогда Файл = Новый Файл(Объект.ИмяФайлаОбновления); Если Не Файл.Существует() Или Не Файл.ЭтоФайл() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Файл поставки обновления конфигурации не найден.'"),,"Объект.ИмяФайлаОбновления"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Файл поставки обновления конфигурации не найден.'"),,"Объект.ИмяФайлаОбновления"); ТекущийЭлемент = Элементы.ПолеФайлОбновления; Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/ObjectModule.bsl b/SSL/src/DataProcessors/УстановкаОбновлений/ObjectModule.bsl index 8b1378917..e69de29bb 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УстановкаОбновлений/ObjectModule.bsl @@ -1 +0,0 @@ - diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ДопФайлОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ДопФайлОбновленияКонфигурации/Template.txt index e9735b751..235a1e0e1 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ДопФайлОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/ДопФайлОбновленияКонфигурации/Template.txt @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // helpers.js // Вспомогательные функции. diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt index e6463ca7b..f835b5a45 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt @@ -1,4 +1,12 @@ #Область ОбластьПараметров +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Параметры процедуры обновления var now = new Date() @@ -27,6 +35,7 @@ var executeDeferredHandlers = [ВыполнитьОтложенныеОбраб var tempLogFileName = 'templog.txt' var errorFileName = 'error.txt' var taskNameScheduleService = [ИмяЗадачиПланировщикаЗадач] // Если указано, то задача, которой запущен скрипт. +var runAppAdditionalParams = [ПараметрыЗапускаПредприятия] // Аргументы командной строки, которые следует добавить к запуску 1С:Предприятия в режиме клиента. #КонецОбласти #Область ОбластьОбновленияКонфигурации @@ -732,9 +741,10 @@ function runEnterprise () { return runApp( v8client, format( - 'ENTERPRISE {0} {1}', + 'ENTERPRISE {0} {1} {2}', infoBasePath, - infoBaseAuthorization), + infoBaseAuthorization, + runAppAdditionalParams), SW_SHOW, false) } @@ -800,4 +810,4 @@ ClusterPassword = fromUnicode(ClusterPassword) var infoBaseAuthorization = format('/N"{0}" /P"{1}" /WA-', adminName, InfoBasePassword) connectionString = format(connectionString, adminName, InfoBasePassword) -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/НеинтерактивноеОбновлениеКонфигурации/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/НеинтерактивноеОбновлениеКонфигурации/Template.txt index e7db69d3c..3e726a8af 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/НеинтерактивноеОбновлениеКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/НеинтерактивноеОбновлениеКонфигурации/Template.txt @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // updater.js function include (fileName) { diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптСозданияЗадачиПланировщикаЗадач/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптСозданияЗадачиПланировщикаЗадач/Template.txt index 520915915..fbfd5fe28 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптСозданияЗадачиПланировщикаЗадач/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптСозданияЗадачиПланировщикаЗадач/Template.txt @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + 'use strict' var StartBoundary = [ДатаЗапуска] // Дата запуска в формате yyyy-MM-ddTHH:mm:ss. diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптУдаленияПатчей/Template.txt b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптУдаленияПатчей/Template.txt index b1bf9cc1b..73d6a10bf 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптУдаленияПатчей/Template.txt +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Templates/СкриптУдаленияПатчей/Template.txt @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + 'use strict' // Example: diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/УстановкаОбновлений.mdo b/SSL/src/DataProcessors/УстановкаОбновлений/УстановкаОбновлений.mdo index 440dfbfc1..621d361c2 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/УстановкаОбновлений.mdo +++ b/SSL/src/DataProcessors/УстановкаОбновлений/УстановкаОбновлений.mdo @@ -214,6 +214,14 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <templates uuid="1528b799-1c0f-4244-85e8-e738b827934a"> + <name>МакетФайлаОбновленияКонфигурации</name> + <synonym> + <key>ru</key> + <value>Макет файла обновления конфигурации</value> + </synonym> + <templateType>TextDocument</templateType> + </templates> <templates uuid="45d79e4d-8c2a-432b-abb8-fb9046abea40"> <name>ДопФайлОбновленияКонфигурации</name> <synonym> @@ -230,14 +238,6 @@ </synonym> <templateType>TextDocument</templateType> </templates> - <templates uuid="1528b799-1c0f-4244-85e8-e738b827934a"> - <name>МакетФайлаОбновленияКонфигурации</name> - <synonym> - <key>ru</key> - <value>Макет файла обновления конфигурации</value> - </synonym> - <templateType>TextDocument</templateType> - </templates> <templates uuid="cb73c8c2-3b09-42e9-ac26-1bd51854efb6"> <name>НеинтерактивноеОбновлениеКонфигурации</name> <synonym> diff --git a/SSL/src/DefinedTypes/ДенежнаяСуммаЛюбогоЗнака/ДенежнаяСуммаЛюбогоЗнака.mdo b/SSL/src/DefinedTypes/ДенежнаяСуммаЛюбогоЗнака/ДенежнаяСуммаЛюбогоЗнака.mdo new file mode 100644 index 000000000..5cc3442e7 --- /dev/null +++ b/SSL/src/DefinedTypes/ДенежнаяСуммаЛюбогоЗнака/ДенежнаяСуммаЛюбогоЗнака.mdo @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:DefinedType xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="31b93291-a58f-4176-8318-58200e8bc56e"> + <producedTypes> + <containerType typeId="7e5bbe0e-d9d5-4d1a-bb0f-3301ac51f412" valueTypeId="1c008ca3-6095-4554-bbce-ea7066d86400"/> + </producedTypes> + <name>ДенежнаяСуммаЛюбогоЗнака</name> + <synonym> + <key>ru</key> + <value>Денежная сумма любого знака</value> + </synonym> + <type> + <types>Number</types> + <numberQualifiers> + <precision>15</precision> + <scale>2</scale> + </numberQualifiers> + </type> +</mdclass:DefinedType> diff --git a/SSL/src/DefinedTypes/ДенежнаяСуммаНеотрицательная/ДенежнаяСуммаНеотрицательная.mdo b/SSL/src/DefinedTypes/ДенежнаяСуммаНеотрицательная/ДенежнаяСуммаНеотрицательная.mdo new file mode 100644 index 000000000..37ed8cf43 --- /dev/null +++ b/SSL/src/DefinedTypes/ДенежнаяСуммаНеотрицательная/ДенежнаяСуммаНеотрицательная.mdo @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:DefinedType xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="293be1bc-49cb-4a99-add8-2a3a46829718"> + <producedTypes> + <containerType typeId="09e14b81-e36d-4ff8-b21b-c41172266147" valueTypeId="567be1a9-be0e-4fa9-beb0-1640363264c0"/> + </producedTypes> + <name>ДенежнаяСуммаНеотрицательная</name> + <synonym> + <key>ru</key> + <value>Денежная сумма неотрицательная</value> + </synonym> + <type> + <types>Number</types> + <numberQualifiers> + <precision>15</precision> + <scale>2</scale> + <nonNegative>true</nonNegative> + </numberQualifiers> + </type> +</mdclass:DefinedType> diff --git a/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo b/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo index 3f29d519b..5d1881669 100644 --- a/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo +++ b/SSL/src/DefinedTypes/ЗначениеДоступа/ЗначениеДоступа.mdo @@ -13,6 +13,7 @@ <types>CatalogRef.ПапкиФайлов</types> <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.КлючиДоступа</types> + <types>CatalogRef.ИдентификаторыОбъектовРасширений</types> <types>CatalogRef.ГруппыВнешнихПользователей</types> <types>CatalogRef.ГруппыПользователей</types> <types>EnumRef.ДополнительныеЗначенияДоступа</types> diff --git a/SSL/src/DefinedTypes/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект.mdo b/SSL/src/DefinedTypes/ЗначениеДоступаОбъект/ЗначениеДоступаОбъект.mdo similarity index 78% rename from SSL/src/DefinedTypes/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект.mdo rename to SSL/src/DefinedTypes/ЗначениеДоступаОбъект/ЗначениеДоступаОбъект.mdo index 909043a4a..48e0299b1 100644 --- a/SSL/src/DefinedTypes/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект/ЗначениеДоступаСГруппамиЗначенийДоступаОбъект.mdo +++ b/SSL/src/DefinedTypes/ЗначениеДоступаОбъект/ЗначениеДоступаОбъект.mdo @@ -3,10 +3,10 @@ <producedTypes> <containerType typeId="48a4b31b-a4f3-4873-8a7f-9ab499e64731" valueTypeId="0f76dfd6-d28e-4d1a-920e-6c6a9d0b0a9d"/> </producedTypes> - <name>ЗначениеДоступаСГруппамиЗначенийДоступаОбъект</name> + <name>ЗначениеДоступаОбъект</name> <synonym> <key>ru</key> - <value>Значение доступа с группами значений доступа объект</value> + <value>Значение доступа объект</value> </synonym> <type> <types>CatalogObject.УчетныеЗаписиЭлектроннойПочты</types> diff --git a/SSL/src/DefinedTypes/ПодписанныйОбъект/ПодписанныйОбъект.mdo b/SSL/src/DefinedTypes/ПодписанныйОбъект/ПодписанныйОбъект.mdo index 46d3a134a..9df120951 100644 --- a/SSL/src/DefinedTypes/ПодписанныйОбъект/ПодписанныйОбъект.mdo +++ b/SSL/src/DefinedTypes/ПодписанныйОбъект/ПодписанныйОбъект.mdo @@ -15,7 +15,7 @@ <types>CatalogRef.Файлы</types> <types>CatalogRef.СообщениеSMSПрисоединенныеФайлы</types> <types>CatalogRef.ВстречаПрисоединенныеФайлы</types> - <types>CatalogRef.ВерсииФайлов</types> <types>CatalogRef.ТелефонныйЗвонокПрисоединенныеФайлы</types> + <types>CatalogRef.ШаблоныСообщенийПрисоединенныеФайлы</types> </type> </mdclass:DefinedType> diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl index 2487f4363..4c6afbb44 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl index 4582c6386..7b07535dc 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоКонтакту/CommandModule.bsl index f1945cdc4..409119831 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоКонтакту/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоПредмету/CommandModule.bsl index f1945cdc4..409119831 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВзаимодействиеПоПредмету/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоКонтакту/CommandModule.bsl index e363a9142..5a308615a 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоКонтакту/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоПредмету/CommandModule.bsl index e363a9142..5a308615a 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречуПоПредмету/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоКонтакту/CommandModule.bsl index 0da90d1f5..cf340bc83 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоКонтакту/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоПредмету/CommandModule.bsl index 0da90d1f5..cf340bc83 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMSПоПредмету/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоКонтакту/CommandModule.bsl index e46c4390b..45c4d8542 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоКонтакту/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоПредмету/CommandModule.bsl index 7326bc69e..63fe7194d 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьЭлектронноеПисьмоПоПредмету/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НастройкиРаботыСПочтой/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НастройкиРаботыСПочтой/CommandModule.bsl index 5e6ebefb0..87769daaa 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/НастройкиРаботыСПочтой/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НастройкиРаботыСПочтой/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПечатьЭлектронногоПисьма/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПечатьЭлектронногоПисьма/CommandModule.bsl index a07bb644f..1a6cf6695 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПечатьЭлектронногоПисьма/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПечатьЭлектронногоПисьма/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоКонтакту/CommandModule.bsl index 25730c320..6609209e7 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоКонтакту/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоПредмету/CommandModule.bsl index 25730c320..6609209e7 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ПозвонитьПоПредмету/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/СохранитьПисьмоНаДиск/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/СохранитьПисьмоНаДиск/CommandModule.bsl index 545a8a7b8..c841673c7 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/СохранитьПисьмоНаДиск/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/СохранитьПисьмоНаДиск/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ВыборТипаПредмета/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ВыборТипаПредмета/Module.bsl index 017d00f1f..d780c84d2 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ВыборТипаПредмета/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ВыборТипаПредмета/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -28,7 +35,7 @@ #КонецОбласти -#Область ОбработчикиСобытийТаблицыТиповПредмета +#Область ОбработчикиСобытийЭлементовТаблицыФормыТиповПредмета &НаКлиенте Процедура ТаблицаТиповПредметовВыборЗначения(Элемент, Значение, СтандартнаяОбработка) @@ -68,7 +75,6 @@ #КонецОбласти - #Область СлужебныеПроцедурыИФункции &НаСервере diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form index 8bd1ceab2..2ba522075 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form @@ -1301,7 +1301,7 @@ <name>ВключатьПодписьПриОтветеПересылке</name> <title> <key>ru</key> - <value>Включать подпись при ответе пересылке</value> + <value>Включать подпись при ответе или пересылке</value> 6 diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl index ac9182386..ee0392071 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -45,8 +52,8 @@ Элементы.ОтправлятьСообщенияСразу.Видимость = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - Элементы.ПодписьПриОтвете.Картинка = ВзаимодействияКлиентСервер.ПолучитьКартинкуСтраницыПодписи(ВключатьПодписьПриОтветеПересылке); - Элементы.ПодписьДляНового.Картинка = ВзаимодействияКлиентСервер.ПолучитьКартинкуСтраницыПодписи(ВключатьПодписьДляНовыхСообщений); + Элементы.ПодписьПриОтвете.Картинка = Взаимодействия.КартинкаСтраницыПодписи(ВключатьПодписьПриОтветеПересылке); + Элементы.ПодписьДляНового.Картинка = Взаимодействия.КартинкаСтраницыПодписи(ВключатьПодписьДляНовыхСообщений); УправлениеДоступностью(ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl index 9ba557244..c04c6b4ee 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl index 5667c65f8..89e6f4d95 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -131,15 +138,15 @@ КонецЕсли; - СтруктураНаименованиеИРасширениеФайла = ВзаимодействияКлиентСервер.НаименованиеИРасширениеФайлаПоИмениФайла(ТекущиеДанные.ИмяФайла); + ЧастиИмениФайла = НаименованиеИРасширениеФайлаПоИмениФайла(ТекущиеДанные.ИмяФайла); ДанныеФайла = Новый Структура; ДанныеФайла.Вставить("СсылкаНаДвоичныеДанныеФайла", ТекущиеДанные.АдресВоВременномХранилище); ДанныеФайла.Вставить("ОтносительныйПуть", ""); ДанныеФайла.Вставить("ДатаМодификацииУниверсальная", ""); ДанныеФайла.Вставить("ИмяФайла", ТекущиеДанные.ИмяФайла); - ДанныеФайла.Вставить("Наименование", СтруктураНаименованиеИРасширениеФайла.Наименование); - ДанныеФайла.Вставить("Расширение", СтруктураНаименованиеИРасширениеФайла.Расширение); + ДанныеФайла.Вставить("Наименование", ЧастиИмениФайла.Наименование); + ДанныеФайла.Вставить("Расширение", ЧастиИмениФайла.Расширение); ДанныеФайла.Вставить("Размер", ТекущиеДанные.Размер); ДанныеФайла.Вставить("Редактирует", Неопределено); ДанныеФайла.Вставить("ПодписанЭП", Ложь); @@ -164,20 +171,15 @@ КонецЕсли; Если ТекущиеДанные.ЭтоВложениеПисьмо Тогда - ВзаимодействияКлиент.ОткрытьВложениеПисьмо(ТекущиеДанные.АдресВоВременномХранилище, ПараметрыОткрытияПисьмаВложения(), ЭтотОбъект); ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда - Если ВзаимодействияКлиентСервер.ЯвляетсяЭлектроннымПисьмом(ТекущиеДанные.Ссылка) + Если ВзаимодействияКлиент.ЯвляетсяЭлектроннымПисьмом(ТекущиеДанные.Ссылка) Или ВзаимодействияКлиентСервер.ЭтоФайлПисьмо(ТекущиеДанные.ИмяФайла) Тогда - ВзаимодействияКлиент.ОткрытьВложениеПисьмо(ТекущиеДанные.Ссылка, ПараметрыОткрытияПисьмаВложения(), ЭтотОбъект); - Иначе - УправлениеЭлектроннойПочтойКлиент.ОткрытьВложение(ТекущиеДанные.Ссылка, ЭтотОбъект); - КонецЕсли; Иначе @@ -189,7 +191,7 @@ ДвоичныеДанные = ПолучитьИзВременногоХранилища(ТекущиеДанные.АдресВоВременномХранилище); ДвоичныеДанные.Записать(ПутьКФайлу); КонецЕсли; - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу); + ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлу); #Иначе ПутьКФайлу = ТекущиеДанные.ИмяФайлаНаКомпьютере; ПолучитьФайл(ПутьКФайлу, ТекущиеДанные.ИмяФайла, Истина); @@ -225,7 +227,7 @@ ПочтовоеСообщение.УстановитьИсходныеДанные(ИсходныеДанные); Если ПочтовоеСообщение.СтатусРазбора = СтатусРазбораИнтернетПочтовогоСообщения.ОбнаруженыОшибки Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не удалось разобрать почтовое сообщение.'")); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не удалось разобрать почтовое сообщение.'")); Возврат; КонецЕсли; @@ -259,7 +261,7 @@ НоваяСтрока.Наименование = Вложение.ИмяФайла; НоваяСтрока.Ссылка = ПоместитьВоВременноеХранилище(Вложение.Данные, УникальныйИдентификатор); НоваяСтрока.ИДФайлаЭлектронногоПисьма = Вложение.Идентификатор; - НоваяСтрока.Расширение = ВзаимодействияКлиентСервер.РасширениеФайла(Вложение.ИмяФайла); + НоваяСтрока.Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(Вложение.ИмяФайла); Продолжить; @@ -267,7 +269,7 @@ НоваяСтрока = Вложения.Добавить(); НоваяСтрока.ИмяФайла = Вложение.ИмяФайла; - Расширение = ВзаимодействияКлиентСервер.РасширениеФайла(НоваяСтрока.ИмяФайла); + Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(НоваяСтрока.ИмяФайла); Если ТипЗнч(Вложение.Данные) = Тип("ДвоичныеДанные") Тогда НоваяСтрока.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); @@ -376,7 +378,7 @@ Для Каждого ПисьмоВложение Из ТаблицаПисемВложений Цикл - ПредставлениеПисьма = ВзаимодействияКлиентСервер.ПредставлениеПисьма(ПисьмоВложение.Тема, ПисьмоВложение.Дата); + ПредставлениеПисьма = Взаимодействия.ПредставлениеПисьма(ПисьмоВложение.Тема, ПисьмоВложение.Дата); НоваяСтрока = Вложения.Добавить(); НоваяСтрока.Ссылка = ПисьмоВложение.Письмо; @@ -418,7 +420,7 @@ КонецЕсли; - Заголовок = ВзаимодействияКлиентСервер.ПредставлениеПисьма(ТемаПисьма, ДатаПисьма); + Заголовок = Взаимодействия.ПредставлениеПисьма(ТемаПисьма, ДатаПисьма); КонецПроцедуры @@ -442,21 +444,37 @@ КонецЕсли; - ЗаголовокСтроки = Новый ФорматированнаяСтрока(НСтр("ru = 'Вложение к письму:'")); - ПредставлениеПисьма = ВзаимодействияКлиентСервер.ПредставлениеПисьма( ТемаПисьмаОснования, ДатаПисьмаОснования); + ЗаголовокСтроки = Новый ФорматированнаяСтрока(НСтр("ru = 'Вложение к письму:'")); + ПредставлениеПисьма = Взаимодействия.ПредставлениеПисьма( ТемаПисьмаОснования, ДатаПисьмаОснования); Если ПисьмоОснование = Неопределено Тогда - ТекстСтроки = Новый ФорматированнаяСтрока(ПредставлениеПисьма); + ТекстСтроки = Новый ФорматированнаяСтрока(ПредставлениеПисьма); Иначе - ТекстСтроки = Новый ФорматированнаяСтрока(ПредставлениеПисьма, , - ЦветаСтиля.ГиперссылкаЦвет, , - "ОткрытьВложение"); + ТекстСтроки = Новый ФорматированнаяСтрока(ПредставлениеПисьма, , + ЦветаСтиля.ГиперссылкаЦвет, , "ОткрытьВложение"); КонецЕсли; Элементы.ДекорацияПисьмоОснование.Заголовок = Новый ФорматированнаяСтрока(ЗаголовокСтроки, " ", ТекстСтроки); КонецПроцедуры +&НаКлиенте +Функция НаименованиеИРасширениеФайлаПоИмениФайла(Знач ИмяФайла) + + Результат = Новый Структура; + Результат.Вставить("Расширение", ""); + Результат.Вставить("Наименование", ""); + + МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь); + Если МассивСтрок.Количество() > 1 Тогда + + Результат.Расширение = МассивСтрок[МассивСтрок.Количество() - 1]; + Результат.Наименование = Лев(ИмяФайла, СтрДлина(ИмяФайла) - СтрДлина(Результат.Расширение) - 1); + Иначе + Результат.Наименование = ИмяФайла; + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти - - - diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index e305577e8..dc7106634 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -640,13 +648,15 @@ КонецЕсли; Для каждого ЭлементМассива Из ПараметрыПеретаскивания.Значение Цикл - Если ВзаимодействияКлиентСервер.ЯвляетсяЭлектроннымПисьмом(ЭлементМассива) Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - ДанныеСтроки = Элементы.Список.ДанныеСтроки(ЭлементМассива); - Если ДанныеСтроки.УчетнаяЗапись = СтрокаНазначение.УчетнаяЗапись Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение; - Возврат; - КонецЕсли; + Если Не ВзаимодействияКлиент.ЯвляетсяЭлектроннымПисьмом(ЭлементМассива) Тогда + Продолжить; + КонецЕсли; + + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + ДанныеСтроки = Элементы.Список.ДанныеСтроки(ЭлементМассива); + Если ДанныеСтроки.УчетнаяЗапись = СтрокаНазначение.УчетнаяЗапись Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение; + Возврат; КонецЕсли; КонецЦикла; ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; @@ -1233,9 +1243,7 @@ &НаКлиенте Процедура Подключаемый_ИзменитьОтборСтатус(Команда) - Статус = ВзаимодействияКлиентСервер.СтатусПоИмениКоманды(Команда.Имя); - - ПриИзмененииСтатусаСервер(Истина); + ИзменитьОтборСтатусСервер(Команда.Имя); ВосстановитьРаскрытыеУзлыДерева(); КонецПроцедуры @@ -1243,9 +1251,7 @@ &НаКлиенте Процедура Подключаемый_ИзменитьОтборТипВзаимодействия(Команда) - ТипВзаимодействия = ВзаимодействияКлиентСервер.ТипВзаимодействияПоИмениКоманды(Команда.Имя, ТолькоПочта); - - ПриИзмененииТипаСервер(); + ИзменитьОтборТипВзаимодействияСервер(Команда.Имя); ВосстановитьРаскрытыеУзлыДерева(); КонецПроцедуры @@ -1440,6 +1446,14 @@ ///////////////////////////////////////////////////////////////////////////////// // Обработка изменения быстрых отборов. +&НаСервере +Процедура ИзменитьОтборТипВзаимодействияСервер(ИмяКоманды) + + ТипВзаимодействия = Взаимодействия.ТипВзаимодействияПоИмениКоманды(ИмяКоманды, ТолькоПочта); + ПриИзмененииТипаСервер(); + +КонецПроцедуры + &НаСервере Процедура ПриИзмененииСтатусаСервер(ОбновлятьПанельНавигации) @@ -1447,7 +1461,7 @@ ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект, "Статус", ДатаДляОтбора); ШаблонЗаголовка = НСтр("ru = 'Статус: %1'"); - ПредставлениеСтатуса = ВзаимодействияКлиентСервер.СписокСтатусов().НайтиПоЗначению(Статус).Представление; + ПредставлениеСтатуса = Взаимодействия.СписокСтатусов().НайтиПоЗначению(Статус).Представление; Элементы.СписокСтатус.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеСтатуса); Для Каждого ЭлементПодменю Из Элементы.СписокСтатус.ПодчиненныеЭлементы Цикл Если ЭлементПодменю.Имя = ("УстановитьОтборСтатус_" + Статус) Тогда @@ -1463,6 +1477,29 @@ КонецПроцедуры +&НаСервере +Процедура ИзменитьОтборСтатусСервер(ИмяКоманды) + Статус = СтатусПоИмениКоманды(ИмяКоманды); + ПриИзмененииСтатусаСервер(Истина); +КонецПроцедуры + +&НаСервере +Функция СтатусПоИмениКоманды(ИмяКоманды) + + НайденнаяПозиция = СтрНайти(ИмяКоманды, "_"); + Если НайденнаяПозиция = 0 Тогда + Возврат "Все"; + КонецЕсли; + + СтрокаСтатус = Прав(ИмяКоманды, СтрДлина(ИмяКоманды) - НайденнаяПозиция); + Если Взаимодействия.СписокСтатусов().НайтиПоЗначению(СтрокаСтатус) = Неопределено Тогда + Возврат "Все"; + КонецЕсли; + + Возврат СтрокаСтатус; + +КонецФункции + &НаСервере Процедура ПриИзмененииОтветственногоСервер(ОбновлятьПанельНавигации) @@ -2911,7 +2948,21 @@ &НаСервере Процедура ДополнитьМенюПанелиНавигации() + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + Возврат; + КонецЕсли; + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + + Наборы = Новый Массив; + Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_Встреча")); + Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_ЗапланированноеВзаимодействие")); + Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_ТелефонныйЗвонок")); + Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_ЭлектронноеПисьмоВходящее")); + Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_ЭлектронноеПисьмоИсходящее")); + Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_СообщениеSMS")); + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Наборы", Наборы); Запрос.Текст = " |ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ | НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Свойство, @@ -2921,7 +2972,7 @@ |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты |ГДЕ - | НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Ссылка В (ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_Встреча), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЗапланированноеВзаимодействие), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ТелефонныйЗвонок), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоВходящее), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_СообщениеSMS)) + | НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Ссылка В (&Наборы) | |ОБЪЕДИНИТЬ ВСЕ | @@ -2932,7 +2983,7 @@ |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения |ГДЕ - | НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Ссылка В (ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_Встреча), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЗапланированноеВзаимодействие), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ТелефонныйЗвонок), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоВходящее), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_СообщениеSMS)) + | НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Ссылка В (&Наборы) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -3489,11 +3540,10 @@ Для Каждого Взаимодействие Из МассивВзаимодействий Цикл - Реквизиты = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); + Реквизиты = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); Реквизиты.РассмотретьПосле = ДатаРассмотрения; Реквизиты.РассчитыватьРассмотрено = Ложь; - - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Взаимодействие, Реквизиты); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Взаимодействие, Реквизиты); КонецЦикла; diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index e263a26cc..46c416dd1 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -328,18 +336,14 @@ &НаКлиенте Процедура Подключаемый_ИзменитьОтборТипВзаимодействия(Команда) - ТипВзаимодействия = ВзаимодействияКлиентСервер.ТипВзаимодействияПоИмениКоманды(Команда.Имя, ТолькоПочта); - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - ПриИзмененииТипаСервер(); - Иначе + ИзменитьОтборТипВзаимодействияСервер(Команда.Имя); + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница <> Элементы.СтраницаСписок Тогда ЗаполнитьДеревоВзаимодействийКлиент(); КонецЕсли; КонецПроцедуры &НаКлиенте -// Установить флаг "Рассмотрено" в выбранных взаимодействиях - клиентская часть. Процедура РассмотреноВыполнить(Команда) Если НЕ ВыборКорректен() Тогда @@ -349,7 +353,8 @@ ФлагРассмотрено = (Не Команда.Имя = "НеРассмотрено"); ВыполненаЗамена = Ложь; - УстановитьФлагРассмотрено(ВыполненаЗамена, ФлагРассмотрено); + МассивВзаимодействий = Новый Массив; + УстановитьФлагРассмотрено(ВыполненаЗамена, ФлагРассмотрено, МассивВзаимодействий); Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда @@ -365,10 +370,17 @@ КонецЕсли; + Если ВыполненаЗамена Тогда + + Для Каждого Взаимодействие Из МассивВзаимодействий Цикл + Оповестить("ЗаписьВзаимодействия", Взаимодействие); + КонецЦикла; + + КонецЕсли; + КонецПроцедуры &НаКлиенте -// Установить ответственного в выбранных взаимодействиях - клиентская часть. Процедура ОтветственныйВыполнить() Если НЕ ВыборКорректен() Тогда @@ -385,7 +397,6 @@ КонецПроцедуры &НаКлиенте -// Установить предмет в выбранных взаимодействиях - клиентская часть. Процедура ПредметВыполнить() Если НЕ ВыборКорректен() Тогда @@ -408,7 +419,6 @@ КонецПроцедуры &НаКлиенте -// Устанавливает реквизит "отработать после" в выбранных взаимодействиях - клиентская часть. Процедура ОтложитьРассмотрениеВыполнить(Команда) Если НЕ ВыборКорректен() Тогда @@ -492,6 +502,7 @@ УсловноеОформление.Элементы.Очистить(); СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "ДеревоВзаимодействий.Дата", Элементы.ДеревоВзаимодействийДата.Имя); + СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "Список.Дата", Элементы.Список.Имя); // @@ -534,11 +545,19 @@ КонецПроцедуры &НаСервере -// Установить флаг "Рассмотрено" в выбранных взаимодействиях - серверная часть. -Процедура УстановитьФлагРассмотрено(ВыполненаЗамена, ФлагРассмотрено) +Процедура ИзменитьОтборТипВзаимодействияСервер(ИмяКоманды) + + ТипВзаимодействия = Взаимодействия.ТипВзаимодействияПоИмениКоманды(ИмяКоманды, ТолькоПочта); + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + ПриИзмененииТипаСервер(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьФлагРассмотрено(ВыполненаЗамена, ФлагРассмотрено, МассивВзаимодействий) ВыполненаЗамена = Ложь; - МассивВзаимодействий = Новый Массив; Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда @@ -578,10 +597,6 @@ КонецПроцедуры &НаСервере -// Установить ответственного в выбранных взаимодействиях - серверная часть. -// Параметры: -// Ответственный - СправочникСсылка.Пользователи - устанавливаемый ответственный. -// МассивИзмененныхДокументов - Массив - массив документов взаимодействий, у которых изменился пользователь. Процедура УстановитьОтветственного(Ответственный, МассивИзмененныхДокументов) Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда @@ -621,9 +636,7 @@ КонецПроцедуры - &НаСервере -// Установить предмет в выбранных взаимодействиях - серверная часть. Процедура УстановитьПредмет(Предмет,ВыполненаЗамена) МассивВзаимодействий = Новый Массив; @@ -688,11 +701,11 @@ Для Каждого Взаимодействие Из МассивВзаимодействий Цикл - Реквизиты = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); + Реквизиты = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); Реквизиты.РассмотретьПосле = ДатаРассмотрения; Реквизиты.РассчитыватьРассмотрено = Ложь; - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Взаимодействие, Реквизиты); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Взаимодействие, Реквизиты); ВыполненаЗамена = Истина; КонецЦикла; @@ -707,11 +720,11 @@ ЭлементДерева = ДеревоВзаимодействий.НайтиПоИдентификатору(Взаимодействие); Если ЭлементДерева <> Неопределено И НЕ ЭлементДерева.Рассмотрено Тогда - Реквизиты = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); + Реквизиты = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия(); Реквизиты.РассмотретьПосле = ДатаРассмотрения; Реквизиты.РассчитыватьРассмотрено = Ложь; - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(ЭлементДерева.Ссылка, Реквизиты); + РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ЭлементДерева.Ссылка, Реквизиты); ВыполненаЗамена = Истина; КонецЕсли; @@ -954,7 +967,7 @@ ЗначениеВРеквизитФормы(ДеревоОбъект,"ДеревоВзаимодействий"); ШаблонЗаголовка = НСтр("ru = 'Тип взаимодействий: %1'"); - ПредставлениеТипа = ВзаимодействияКлиентСервер.СписокОтборовПоТипуВзаимодействий(ТолькоПочта).НайтиПоЗначению(ТипВзаимодействия).Представление; + ПредставлениеТипа = Взаимодействия.СписокОтборовПоТипуВзаимодействий(ТолькоПочта).НайтиПоЗначению(ТипВзаимодействия).Представление; Элементы.ДеревоТипВзаимодействия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеТипа); Для Каждого ЭлементПодменю Из Элементы.ДеревоТипВзаимодействия.ПодчиненныеЭлементы Цикл Если ЭлементПодменю.Имя = ("УстановитьОтборТипВзаимодействия_ДеревоТипВзаимодействия_" + ТипВзаимодействия) Тогда diff --git a/SSL/src/DocumentJournals/Взаимодействия/ManagerModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/ManagerModule.bsl index 64bbd1145..6b152588d 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/ManagerModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl index 5638d929e..3c4a42e04 100644 --- a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl index c64a84aaa..9947b67fb 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -9,7 +16,7 @@ КонецЕсли; // Для предотвращения открытия документа "Анкета" другими внешними пользователями. - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда Если НЕ Объект.Ссылка.Пустая() Тогда Если Объект.Респондент <> ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя() Тогда Отказ = Истина; @@ -195,11 +202,10 @@ &НаКлиенте Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект, "Объект.Комментарий"); + ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования, ЭтотОбъект); КонецПроцедуры - #КонецОбласти #Область ОбработчикиКомандФормы @@ -1215,7 +1221,7 @@ Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Не указан ответ на вопрос'") + "- "+ СтрЗаменить(Выборка.Ссылка.ПолныйКод(),"/",".") + " " + Выборка.Формулировка); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru='Не указан ответ на вопрос'") + "- "+ СтрЗаменить(Выборка.Ссылка.ПолныйКод(),"/",".") + " " + Выборка.Формулировка); КонецЦикла; Возврат Истина; diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form index 97173b089..20d869e1a 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Form.form @@ -520,6 +520,9 @@ true + + Список.Ref +
      true
      ВЫБРАТЬ diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl index 5a222c87c..da4913ab9 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -9,7 +17,7 @@ Возврат; КонецЕсли; - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда Отказ = Истина; КонецЕсли; diff --git a/SSL/src/Documents/Анкета/ManagerModule.bsl b/SSL/src/Documents/Анкета/ManagerModule.bsl index 40a63cca7..95ce87392 100644 --- a/SSL/src/Documents/Анкета/ManagerModule.bsl +++ b/SSL/src/Documents/Анкета/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Documents/Анкета/ObjectModule.bsl b/SSL/src/Documents/Анкета/ObjectModule.bsl index 566211e39..eca536a90 100644 --- a/SSL/src/Documents/Анкета/ObjectModule.bsl +++ b/SSL/src/Documents/Анкета/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -76,4 +84,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Form.form index 5a6e9e11e..db9a313da 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Form.form @@ -419,6 +419,9 @@ true + + Список.Ref +
      true
      ВЫБРАТЬ diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form index bf8583e00..57b88c8e1 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form @@ -97,8 +97,6 @@ Left true - 13 - true true true true @@ -111,7 +109,6 @@ ru ДФ=ЧЧ:мм - true true true Normal @@ -238,9 +235,9 @@ Left true - 13 - true + 10 true + false true true false @@ -252,7 +249,6 @@ ru ДФ=ЧЧ:мм - true true true Normal @@ -2178,6 +2174,12 @@ 0 + + CommonCommand.ПрисоединенныеФайлы + FormNavigationPanelGoTo + 0 + + diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl index 060755be9..08285b8af 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -46,6 +54,15 @@ Взаимодействия.ЗаполнитьСписокВыбораВремени(Элементы.ВремяНачала, 1800); Взаимодействия.ЗаполнитьСписокВыбораВремени(Элементы.ВремяОкончания, 1800); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + ГиперссылкаФайлов = МодульРаботаСФайлами.ГиперссылкаФайлов(); + ГиперссылкаФайлов.Размещение = "КоманднаяПанель"; + МодульРаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ГиперссылкаФайлов); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -82,6 +99,13 @@ ОбновитьОтображениеДанных(); ПроверитьДоступностьСозданияКонтакта(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаКлиенте @@ -101,6 +125,13 @@ ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "Встреча"); ПроверитьДоступностьСозданияКонтакта(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -200,7 +231,7 @@ Если НачалоДня(Объект.ДатаОкончания) + ВыделитьВремя(ВремяОкончания) < Объект.ДатаНачала Тогда ОчиститьСообщения(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Время окончания не может быть меньше времени начала.'"),,"ВремяОкончания"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Время окончания не может быть меньше времени начала.'"),,"ВремяОкончания"); ВремяОкончания = ВремяНачала + 1800; Объект.ДатаОкончания = НачалоДня(Объект.ДатаОкончания) + ВыделитьВремя(ВремяОкончания); Возврат; @@ -225,7 +256,11 @@ Если НачалоДня(ДатаОкончания) + ВыделитьВремя(ВремяОкончания) < Объект.ДатаНачала Тогда ОчиститьСообщения(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Дата окончания не может быть меньше даты начала.'"),,"ДатаОкончания"); + Если НачалоДня(ДатаОкончания) < НачалоДня(ДатаНачала) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Дата окончания не может быть меньше даты начала.'"),,"ДатаОкончания"); + Иначе + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Время окончания не может быть меньше времени начала.'"),,"ВремяОкончания"); + КонецЕсли; ДатаОкончания = Объект.ДатаНачала; Объект.ДатаОкончания = НачалоДня(ДатаОкончания) + ВыделитьВремя(ВремяОкончания); Возврат; @@ -250,6 +285,40 @@ КонецПроцедуры +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыУчастники @@ -336,8 +405,30 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + // Конец СтандартныеПодсистемы.Свойства +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/Documents/Встреча/Forms/ФормаСписка/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаСписка/Form.form index 84f082e57..e3cad94fc 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаСписка/Form.form @@ -232,6 +232,40 @@ true
      + + Ссылка + 31 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -391,6 +425,9 @@ true + + Список.Ref +
      true
      ВЫБРАТЬ diff --git a/SSL/src/Documents/Встреча/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаСписка/Module.bsl index da9443a89..adfe96293 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Documents/Встреча/ManagerModule.bsl b/SSL/src/Documents/Встреча/ManagerModule.bsl index 67061d0ce..1af57bbcb 100644 --- a/SSL/src/Documents/Встреча/ManagerModule.bsl +++ b/SSL/src/Documents/Встреча/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -67,18 +75,15 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - ВзаимодействияВызовСервера.ОбработкаПолученияДанныхВыбора( - ДанныеВыбора, - Параметры, - СтандартнаяОбработка, - "Встреча"); + ВзаимодействияСобытия.ОбработкаПолученияДанныхВыбора(Метаданные.Документы.Встреча.Имя, + ДанныеВыбора, Параметры, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Documents/Встреча/ObjectModule.bsl b/SSL/src/Documents/Встреча/ObjectModule.bsl index e7133ba8f..e29c48047 100644 --- a/SSL/src/Documents/Встреча/ObjectModule.bsl +++ b/SSL/src/Documents/Встреча/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -65,7 +73,7 @@ Если ДатаОкончания < ДатаНачала Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru='Дата окончания не может быть меньше даты начала.'"), , "ДатаОкончания", @@ -100,4 +108,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/Встреча/Встреча.mdo b/SSL/src/Documents/Встреча/Встреча.mdo index 23ba978f3..a0f7cedcc 100644 --- a/SSL/src/Documents/Встреча/Встреча.mdo +++ b/SSL/src/Documents/Встреча/Встреча.mdo @@ -67,9 +67,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_Встреча + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора + + Документ_Встреча -1 -1 @@ -83,9 +83,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_Встреча + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора + + Документ_Встреча -1 -1 diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Form.form index 3d88e28e8..cecd258b7 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Form.form @@ -420,6 +420,9 @@ true + + Список.Ref +
      true
      ВЫБРАТЬ diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form index 41526b3c7..227e231e1 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form @@ -1764,6 +1764,12 @@ CommonCommand.СтруктураПодчиненности + + CommonCommand.ПрисоединенныеФайлы + FormNavigationPanelGoTo + 0 + + diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl index eae5e8ad8..362abb302 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -44,6 +52,15 @@ ПриСозданииИПриЧтенииНаСервере(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + ГиперссылкаФайлов = МодульРаботаСФайлами.ГиперссылкаФайлов(); + ГиперссылкаФайлов.Размещение = "КоманднаяПанель"; + МодульРаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ГиперссылкаФайлов); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -79,6 +96,13 @@ ПроверитьДоступностьСозданияКонтакта(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаКлиенте @@ -98,6 +122,13 @@ ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ЗапланированноеВзаимодействие"); ПроверитьДоступностьСозданияКонтакта(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -197,6 +228,40 @@ КонецПроцедуры +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыУчастники @@ -283,8 +348,30 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + // Конец СтандартныеПодсистемы.Свойства +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Form.form index 85fc81d4d..c1b9ab7eb 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Form.form @@ -232,6 +232,40 @@ true
      + + Ссылка + 31 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -391,6 +425,9 @@ true + + Список.Ref +
      true
      ВЫБРАТЬ diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Module.bsl index da9443a89..adfe96293 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl index dbcee3ee7..6f52b7f9a 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -65,18 +73,15 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - ВзаимодействияВызовСервера.ОбработкаПолученияДанныхВыбора( - ДанныеВыбора, - Параметры, - СтандартнаяОбработка, - "ЗапланированноеВзаимодействие"); + ВзаимодействияСобытия.ОбработкаПолученияДанныхВыбора(Метаданные.Документы.ЗапланированноеВзаимодействие.Имя, + ДанныеВыбора, Параметры, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl index 9bfa4b6ea..a10ef08bc 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -71,4 +79,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo b/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo index 509f22f9f..e276eb3c8 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo @@ -67,9 +67,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЗапланированноеВзаимодействие + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора + + Документ_ЗапланированноеВзаимодействие -1 -1 @@ -83,9 +83,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЗапланированноеВзаимодействие + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора + + Документ_ЗапланированноеВзаимодействие -1 -1 @@ -178,7 +178,7 @@ ru - Описание телефонного звонка + Описание планируемого взаимодействия true true @@ -330,7 +330,7 @@ ru - Тема письма + Тема планируемого взаимодействия diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Form.form index ee3279ec7..365bb7340 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Form.form @@ -387,6 +387,9 @@ true + + Список.Ref +
      true
      Document.НазначениеОпросов diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl index 8aa5912e4..a370949cd 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -68,7 +75,7 @@ Если (Объект.ДатаНачала > Объект.ДатаОкончания) И (Объект.ДатаОкончания <> Дата(1,1,1)) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Дата начала не может быть больше чем дата окончания.'"),,"Объект.ДатаНачала"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Дата начала не может быть больше чем дата окончания.'"),,"Объект.ДатаНачала"); Отказ = Истина; КонецЕсли; diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl index b3406c0ff..6e9c7b2e2 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Module.bsl index f7bfc0529..b422d8ae1 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl b/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl index b978c9289..f9b71d982 100644 --- a/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl +++ b/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index e45dc6770..92ff0e20a 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -1,5 +1,12 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область ОбработчикиСобытий +#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -65,7 +72,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОрганизацияПриИзменении(Элемент) diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form index eca8a3e33..67709a369 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form @@ -430,6 +430,9 @@ true + + Список.Ref +
      true
      Document.ОтзывСогласияНаОбработкуПерсональныхДанных diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl index 74d2eb4bf..3f2691f68 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl index b81dc428d..85c66e1f1 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -24,7 +32,7 @@ Если Согласие <> Неопределено Тогда Если ДатаОтзыва = Согласие.ДатаПолучения Тогда ТекстСообщения = НСтр("ru = 'На указанную дату зарегистрировано согласие. Оформление отзыва согласия в тот же день не поддерживается.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Согласие.ДокументОснование, "Объект.ДатаОтзыва", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Согласие.ДокументОснование, "Объект.ДатаОтзыва", , Отказ); КонецЕсли; КонецЕсли; @@ -44,4 +52,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index 4038ed397..5af754b53 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -79,28 +86,7 @@ #КонецОбласти -#Область ОбработчикиКомандФормы - -// СтандартныеПодсистемы.ПодключаемыеКоманды -&НаКлиенте -Процедура Подключаемый_ВыполнитьКоманду(Команда) - ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); -КонецПроцедуры - -&НаСервере -Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) - ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ОбновитьКоманды() - ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); -КонецПроцедуры -// Конец СтандартныеПодсистемы.ПодключаемыеКоманды - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОрганизацияПриИзменении(Элемент) @@ -132,6 +118,27 @@ #КонецОбласти +#Область ОбработчикиКомандФормы + +// СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Процедура Подключаемый_ВыполнитьКоманду(Команда) + ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); +КонецПроцедуры + +&НаСервере +Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) + ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОбновитьКоманды() + ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); +КонецПроцедуры +// Конец СтандартныеПодсистемы.ПодключаемыеКоманды + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl index a0a67f2bd..bf225005c 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl index 27dcec28b..a76a17189 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -23,7 +31,6 @@ КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку ПДн (документ Office Open XML)'"); КомандаПечати.Картинка = БиблиотекаКартинок.ФорматWord2007; КомандаПечати.ПроверкаПроведенияПередПечатью = Истина; - КомандаПечати.ТребуетсяРасширениеРаботыСФайлами = Истина; КонецПроцедуры @@ -164,8 +171,6 @@ ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_СогласиеНаОбработкуПерсональныхДанных"; - ИмяМакета = "СогласиеНаОбработкуПерсональныхДанных"; - ОбластиМакета = Новый Структура; ОбластиМакета.Вставить("Заголовок"); ОбластиМакета.Вставить("НомерДата"); @@ -410,7 +415,7 @@ АдресХранилищаПечатнойФормы = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма); Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначения.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ЗакрытьОкноПечатнойФормы = Истина; Возврат ""; КонецПопытки; diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ObjectModule.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ObjectModule.bsl index b787a9a25..8f735732a 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ObjectModule.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -6,7 +14,7 @@ Если ЗначениеЗаполнено(СрокДействия) И СрокДействия < ДатаПолучения Тогда ТекстСообщения = НСтр("ru = 'Срок действия согласия противоречит дате получения.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.СрокДействия", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.СрокДействия", , Отказ); КонецЕсли; // Проверяем, что на указанную дату не было других записей о согласии. @@ -14,7 +22,7 @@ Если Согласие <> Неопределено Тогда Если ДатаПолучения = Согласие.ДатаПолучения Тогда ТекстСообщения = НСтр("ru = 'На указанную дату уже зарегистрировано согласие.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.ДатаПолучения", , Отказ); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.ДатаПолучения", , Отказ); КонецЕсли; КонецЕсли; @@ -35,4 +43,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/СообщениеSMS/Forms/ФормаВыбора/Form.form index 13b3543e5..78094bab9 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаВыбора/Form.form @@ -421,6 +421,9 @@ true + + Список.Ref +
      true
      ВЫБРАТЬ diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form index d63f4551a..fefee37d1 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form @@ -101,14 +101,15 @@ true - TextEditEnd - ТекстСообщенияОкончаниеВводаТекста + EditTextChange + ТекстСообщенияИзменениеТекстаРедактирования true true true true true + DontUse Normal @@ -2240,6 +2241,12 @@ 0 + + CommonCommand.ПрисоединенныеФайлы + FormNavigationPanelGoTo + 0 + + diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html index d1ef89351..b0f146841 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html @@ -36,7 +36,7 @@
    • Состояние доставки сообщений документа можно также проверить из окна документа, воспользовавшись командой Проверить состояние доставки.
    • Состояние SMS-сообщений отражается внизу документа и в таблице адресатов в колонке Состояние сообщения по каждому контакту отдельно.
    • Состояние сообщения конкретному адресату отображается в табличной части Адресаты. Может принимать одно из следующих значений: -
      • Черновик - сообщение еще отправлялось и может быть отредактировано. +
        • Черновик - сообщение еще не отправлялось и может быть отредактировано.
        • Исходящее - пользователь уже отправил сообщение, но оно еще не передавалось провайдеру.
        • Не удалось передать провайдеру - программа пыталась передать сообщение провайдеру, но не смогла этого сделать. Например, возникли технические проблемы на стороне провайдера.
        • Не отправлено провайдером - сообщение успешно передано провайдеру, но еще не было им обработано. @@ -46,7 +46,7 @@
        • Не доставлено - сообщение не удалось доставить адресату. Дальнейших попыток доставки сообщения не будет.
        • Не опознано провайдером - провайдер не опознал, что когда то принимал данное сообщение к доставке.
        • Ошибка получения статуса у провайдера - не удалось связаться с провайдером при попытке получения состояния сообщения.
      • Состояние документа в целом отображается в нижней левой части окна документа. Может принимать одно из следующих значений. -
        • Черновик - сообщение не отправлялось и доступно для редактирования. +
          • Черновик - сообщение ещё не отправлялось и доступно для редактирования.
          • Исходящее - пользователь уже отправил сообщение, но оно еще не передавалось провайдеру.
          • Доставляется - все сообщения переданы провайдеру и хотя бы по одному из них не закончена доставка до адресата.
          • Доставлено - все сообщения успешно доставлены адресатам. diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl index 1fc9dbf13..00730e5f0 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -56,6 +63,15 @@ КонецЕсли; // Конец СтандартныеПодсистемы.Свойства + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + ГиперссылкаФайлов = МодульРаботаСФайлами.ГиперссылкаФайлов(); + ГиперссылкаФайлов.Размещение = "КоманднаяПанель"; + МодульРаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ГиперссылкаФайлов); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -120,6 +136,14 @@ МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.ПодключаемыеКоманды + + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаКлиенте @@ -140,6 +164,13 @@ ПроверитьДоступностьСозданияКонтакта(); КоличествоАдресатов = Объект.Адресаты.Количество(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -233,12 +264,11 @@ КонецПроцедуры &НаКлиенте -Процедура ТекстСообщенияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) +Процедура ТекстСообщенияИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) - ОсталосьСимволов = ВзаимодействияКлиентСервер.СформироватьИнформационнуюНадписьКоличествоСимволовСообщений( - Объект.ОтправлятьВТранслите, - Текст); - Объект.ТекстСообщения = Текст; + ОсталосьСимволов = ВзаимодействияКлиентСервер.СформироватьИнформационнуюНадписьКоличествоСимволовСообщений( + Объект.ОтправлятьВТранслите, + Текст); КонецПроцедуры @@ -258,6 +288,40 @@ КонецПроцедуры +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыАдресаты @@ -373,6 +437,18 @@ // Конец СтандартныеПодсистемы.Свойства +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -416,6 +492,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + // Конец СтандартныеПодсистемы.Свойства @@ -483,7 +569,7 @@ Процедура ПроверитьЗаполнениеТелефона(Адресат, Отказ) Если ПустаяСтрока(Адресат.КакСвязаться) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Поле ""Номер телефона"" не заполнено.'"), , ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Адресаты", Адресат.НомерСтроки, "КакСвязаться"), @@ -493,7 +579,7 @@ КонецЕсли; Если СтрРазделить(Адресат.КакСвязаться, ";", Ложь).Количество() > 1 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Должен быть указан только один номер телефона'"), , ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Адресаты", Адресат.НомерСтроки, "КакСвязаться"), @@ -502,8 +588,8 @@ Возврат; КонецЕсли; - Если Не ВзаимодействияКлиентСервер.КорректноВведенНомерТелефона(Адресат.КакСвязаться) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + Если Не Взаимодействия.КорректноВведенНомерТелефона(Адресат.КакСвязаться) Тогда + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Введите номер телефона в международном формате. |Допускается использовать в номере пробелы, скобки и дефисы. |Например, ""+7 (123) 456-78-90"".'"), @@ -512,10 +598,10 @@ , Отказ); Возврат; - Иначе - Адресат.НомерДляОтправки = ФорматироватьНомер(Адресат.КакСвязаться); КонецЕсли; + Адресат.НомерДляОтправки = ФорматироватьНомер(Адресат.КакСвязаться); + КонецПроцедуры &НаСервере @@ -552,6 +638,7 @@ Процедура УправлениеДоступностью(Форма) СообщениеОтправлено = СообщениеОтправлено(Форма.Объект.Состояние); + СообщениеНеЧерновик = Форма.Объект.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Черновик"); ОтправкаДоступна = Истина; Если Форма.ИнформационнаяБазаФайловая Тогда @@ -579,11 +666,11 @@ КонецЕсли; Форма.Элементы.ФормаОтправить.Доступность = ОтправкаДоступна; - Форма.Элементы.Адресаты.ТолькоПросмотр = СообщениеОтправлено; - Форма.Элементы.ОтправлятьВТранслите.Доступность = НЕ СообщениеОтправлено; - Форма.Элементы.ТекстСообщения.ТолькоПросмотр = СообщениеОтправлено; + Форма.Элементы.Адресаты.ТолькоПросмотр = СообщениеНеЧерновик; + Форма.Элементы.ОтправлятьВТранслите.Доступность = НЕ СообщениеНеЧерновик; + Форма.Элементы.ТекстСообщения.ТолькоПросмотр = СообщениеНеЧерновик; Форма.Элементы.РассмотретьПосле.Доступность = Форма.НаКонтроле; - Форма.Элементы.ГруппаДатаОтправкиАктуальность.Доступность = НЕ СообщениеОтправлено; + Форма.Элементы.ГруппаДатаОтправкиАктуальность.Доступность = НЕ СообщениеНеЧерновик; Форма.Элементы.АдресатыПроверитьСтатусыДоставки.Доступность = Форма.ИнформационнаяБазаФайловая @@ -597,7 +684,7 @@ УстановитьПривилегированныйРежим(Истина); Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не выполнены настройки отправки SMS.'"),,"Объект"); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не выполнены настройки отправки SMS.'"),,"Объект"); Возврат; КонецЕсли; @@ -623,6 +710,7 @@ НоваяСтрока = Объект.Адресаты.Добавить(); НоваяСтрока.Адрес = ПереданныеПараметры.Кому; + НоваяСтрока.СостояниеСообщения = Перечисления.СостоянияСообщенияSMS.Черновик; ИначеЕсли ТипЗнч(ПереданныеПараметры.Адресаты) = Тип("СписокЗначений") Тогда @@ -630,6 +718,7 @@ НоваяСтрока = Объект.Адресаты.Добавить(); НоваяСтрока.КакСвязаться = ЭлементСписка.Значение; НоваяСтрока.Представление = ЭлементСписка.Представление; + НоваяСтрока.СостояниеСообщения = Перечисления.СостоянияСообщенияSMS.Черновик; КонецЦикла; ИначеЕсли ТипЗнч(ПереданныеПараметры.Адресаты) = Тип("Массив") Тогда @@ -640,6 +729,7 @@ НоваяСтрока.КакСвязаться = ЭлементМассива.Телефон; НоваяСтрока.ПредставлениеКонтакта = ЭлементМассива.Представление; НоваяСтрока.Контакт = ЭлементМассива.ИсточникКонтактнойИнформации; + НоваяСтрока.СостояниеСообщения = Перечисления.СостоянияСообщенияSMS.Черновик; КонецЦикла; @@ -685,6 +775,7 @@ МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер"); МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецПроцедуры + // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Form.form b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Form.form index 420dc2fbd..a7e23b14d 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Form.form @@ -233,6 +233,40 @@ true + + Ссылка + 31 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -396,6 +430,9 @@ true + + Список.Ref +
            true
            Document.СообщениеSMS diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl index aa3686ce1..60b5d31ad 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl index 8dc7f1ef9..6165cf656 100644 --- a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl +++ b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -65,18 +73,15 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - ВзаимодействияВызовСервера.ОбработкаПолученияДанныхВыбора( - ДанныеВыбора, - Параметры, - СтандартнаяОбработка, - "СообщениеSMS"); + ВзаимодействияСобытия.ОбработкаПолученияДанныхВыбора(Метаданные.Документы.СообщениеSMS.Имя, + ДанныеВыбора, Параметры, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl b/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl index 48b45251d..0efb491a0 100644 --- a/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl +++ b/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -48,7 +56,7 @@ Возврат; КонецЕсли; - Тема = ВзаимодействияКлиентСервер.ТемаПоТекстуСообщения(ТекстСообщения); + Тема = Взаимодействия.ТемаПоТекстуСообщения(ТекстСообщения); Взаимодействия.СформироватьСписокУчастников(ЭтотОбъект); КонецПроцедуры @@ -72,4 +80,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo b/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo index 5f6341035..053bd18fb 100644 --- a/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo +++ b/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo @@ -69,9 +69,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_СообщениеSMS + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора + + Документ_СообщениеSMS -1 -1 @@ -85,9 +85,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_СообщениеSMS + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора + + Документ_СообщениеSMS -1 -1 @@ -535,7 +535,6 @@ - ShowError Use Use diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаВыбора/Form.form index 3351f2473..1226e6eef 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаВыбора/Form.form @@ -421,6 +421,9 @@ true + + Список.Ref +
            true
            ВЫБРАТЬ diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form index 417288641..353763770 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form @@ -1647,6 +1647,12 @@ 0 + + CommonCommand.ПрисоединенныеФайлы + FormNavigationPanelGoTo + 0 + + diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl index 370cf9a5d..4bdb57832 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -53,6 +60,15 @@ ПриСозданииИПриЧтенииНаСервере(); ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ТелефонныйЗвонок"); + + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + ГиперссылкаФайлов = МодульРаботаСФайлами.ГиперссылкаФайлов(); + ГиперссылкаФайлов.Размещение = "КоманднаяПанель"; + МодульРаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ГиперссылкаФайлов); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры @@ -89,6 +105,13 @@ ПроверитьДоступностьСозданияКонтакта(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -137,6 +160,13 @@ ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтотОбъект, "ТелефонныйЗвонок"); ПроверитьДоступностьСозданияКонтакта(); + // СтандартныеПодсистемы.РаботаСФайлами + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецПроцедуры &НаСервере @@ -244,6 +274,40 @@ КонецПроцедуры +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, + ПараметрыПеретаскивания, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область ОбработчикиКомандФормы @@ -280,6 +344,18 @@ // Конец СтандартныеПодсистемы.Свойства +// СтандартныеПодсистемы.РаботаСФайлами +&НаКлиенте +Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент"); + МодульРаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда); + КонецЕсли; + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаСФайлами + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -351,6 +427,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + // Конец СтандартныеПодсистемы.Свойства &НаКлиенте diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Form.form index ee5dd2a4f..cb08668c5 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Form.form @@ -233,6 +233,40 @@ true + + Ссылка + 31 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -392,6 +426,9 @@ true + + Список.Ref +
            true
            Document.ТелефонныйЗвонок diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Module.bsl index 8ac3dba96..a3ea8222b 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl index a615120f5..91289add5 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -84,20 +92,15 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - ВзаимодействияВызовСервера.ОбработкаПолученияДанныхВыбора( - ДанныеВыбора, - Параметры, - СтандартнаяОбработка, - "ТелефонныйЗвонок"); + ВзаимодействияСобытия.ОбработкаПолученияДанныхВыбора(Метаданные.Документы.ТелефонныйЗвонок.Имя, + ДанныеВыбора, Параметры, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти - +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl index 4ef6fabd1..8014c4630 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -84,4 +92,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo index 3e5b96d29..2e3961e99 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo +++ b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo @@ -65,9 +65,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ТелефонныйЗвонок + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора + + Документ_ТелефонныйЗвонок -1 -1 @@ -81,9 +81,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ТелефонныйЗвонок + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора + + Документ_ТелефонныйЗвонок -1 -1 @@ -387,7 +387,7 @@ ru - Тема письма + Тема звонка diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Ответить/CommandModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Ответить/CommandModule.bsl index d3b1d4c77..c18fa9c14 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Ответить/CommandModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Ответить/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/ОтветитьВсем/CommandModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/ОтветитьВсем/CommandModule.bsl index dcb401cc8..3f67c4ae5 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/ОтветитьВсем/CommandModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/ОтветитьВсем/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Переслать/CommandModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Переслать/CommandModule.bsl index 56cf0c427..28592c09a 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Переслать/CommandModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Commands/Переслать/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form index 0f27d95cc..34dfc2776 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form @@ -430,6 +430,9 @@ true + + Список.Ref +
            true
            ВЫБРАТЬ diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl index 1706d08f0..ea7ee8d21 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийЭлементовШапкиФормы diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form index c85524fd4..1b1766c56 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form @@ -2103,6 +2103,7 @@ true + FunctionalOption.ИспользоватьПризнакРассмотрено true @@ -2122,6 +2123,7 @@ true + FunctionalOption.ИспользоватьПризнакРассмотрено true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl index 9f507e495..0ed4ff651 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -110,6 +117,10 @@ ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий, Ложь); ПолучателиОтветаПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиОтвета, Ложь); + + Если ПустаяСтрока(ПолучателиКопийПредставление) Тогда + Элементы.ПолучателиКопийПредставление.Видимость = Ложь; + КонецЕсли; ЗаполнитьДополнительнуюИнформацию(); @@ -463,13 +474,10 @@ &НаКлиенте Процедура ИзменитьКодировку(Команда) - СписокКодировок = ВзаимодействияКлиентСервер.СписокКодировок(); - + СписокКодировок = СписокКодировок(); ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВыборКодировкиПослеЗавершения", ЭтотОбъект); - СписокКодировок.ПоказатьВыборЭлемента(ОбработчикОповещенияОЗакрытии, - НСтр("ru = 'Выберите кодировку'"), - СписокКодировок.НайтиПоЗначению(НРег(Объект.Кодировка))); + НСтр("ru = 'Выберите кодировку'"), СписокКодировок.НайтиПоЗначению(НРег(Объект.Кодировка))); КонецПроцедуры @@ -492,6 +500,16 @@ // СтандартныеПодсистемы.Свойства +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено) @@ -692,4 +710,34 @@ // Конец СтандартныеПодсистемы.Свойства +&НаКлиенте +Функция СписокКодировок() + + СписокКодировок = Новый СписокЗначений; + + СписокКодировок.Добавить("ibm852", НСтр("ru = 'ibm852 (Центральноевропейская DOS)'")); + СписокКодировок.Добавить("ibm866", НСтр("ru = 'ibm866 (Кириллица DOS)'")); + СписокКодировок.Добавить("iso-8859-1", НСтр("ru = 'iso-8859-1 (Западноевропейская ISO)'")); + СписокКодировок.Добавить("iso-8859-2", НСтр("ru = 'iso-8859-2 (Центральноевропейская ISO)'")); + СписокКодировок.Добавить("iso-8859-3", НСтр("ru = 'iso-8859-3 (Латиница 3 ISO)'")); + СписокКодировок.Добавить("iso-8859-4", НСтр("ru = 'iso-8859-4 (Балтийская ISO)'")); + СписокКодировок.Добавить("iso-8859-5", НСтр("ru = 'iso-8859-5 (Кириллица ISO)'")); + СписокКодировок.Добавить("iso-8859-7", НСтр("ru = 'iso-8859-7 (Греческая ISO)'")); + СписокКодировок.Добавить("iso-8859-9", НСтр("ru = 'iso-8859-9 (Турецкая ISO)'")); + СписокКодировок.Добавить("iso-8859-15", НСтр("ru = 'iso-8859-15 (Латиница 9 ISO)'")); + СписокКодировок.Добавить("koi8-r", НСтр("ru = 'koi8-r (Кириллица KOI8-R)'")); + СписокКодировок.Добавить("koi8-u", НСтр("ru = 'koi8-u (Кириллица KOI8-U)'")); + СписокКодировок.Добавить("us-ascii", НСтр("ru = 'us-ascii США'")); + СписокКодировок.Добавить("utf-8", НСтр("ru = 'utf-8 (Юникод UTF-8)'")); + СписокКодировок.Добавить("windows-1250", НСтр("ru = 'windows-1250 (Центральноевропейская Windows)'")); + СписокКодировок.Добавить("windows-1251", НСтр("ru = 'windows-1251 (Кириллица Windows)'")); + СписокКодировок.Добавить("windows-1252", НСтр("ru = 'windows-1252 (Западноевропейская Windows)'")); + СписокКодировок.Добавить("windows-1253", НСтр("ru = 'windows-1253 (Греческая Windows)'")); + СписокКодировок.Добавить("windows-1254", НСтр("ru = 'windows-1254 (Турецкая Windows)'")); + СписокКодировок.Добавить("windows-1257", НСтр("ru = 'windows-1257 (Балтийская Windows)'")); + + Возврат СписокКодировок; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form index e0bda8b12..5f879f012 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form @@ -361,6 +361,9 @@ true + + Список.Ref +
            true
            Document.ЭлектронноеПисьмоВходящее diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Module.bsl index 8ac3dba96..a3ea8222b 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl index 12c11aadf..825b81170 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -143,24 +151,17 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - ВзаимодействияВызовСервера.ОбработкаПолученияДанныхВыбора( - ДанныеВыбора, - Параметры, - СтандартнаяОбработка, - "ЭлектронноеПисьмоВходящее"); + ВзаимодействияСобытия.ОбработкаПолученияДанныхВыбора(Метаданные.Документы.ЭлектронноеПисьмоВходящее.Имя, + ДанныеВыбора, Параметры, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - #Область СлужебныеПроцедурыИФункции #Область ОбработчикиОбновления diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl index 16203d6ec..cda125c06 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -62,4 +70,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo index 1accfd741..0b6b24262 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo @@ -71,9 +71,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоВходящее + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора + + Документ_ЭлектронноеПисьмоВходящее -1 -1 @@ -87,9 +87,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоВходящее + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора + + Документ_ЭлектронноеПисьмоВходящее -1 -1 diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Form.form index b45c872a0..cfee3b020 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Form.form @@ -423,6 +423,9 @@ true + + Список.Ref +
            true
            ВЫБРАТЬ diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form index 68aa2e389..de3f5d4d7 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form @@ -3317,6 +3317,7 @@ true + FunctionalOption.ИспользоватьПризнакРассмотрено true
            @@ -3336,6 +3337,7 @@ true + FunctionalOption.ИспользоватьПризнакРассмотрено true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index 61bda6aa0..2abc86512 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -195,7 +202,7 @@ СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Данные, ""); СтрокаТаблицыВложений.Расположение = 4; Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,"Вложения",, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,"Вложения",, Отказ); КонецПопытки; КонецЕсли; КонецЦикла; @@ -736,7 +743,9 @@ Отбор = Новый Структура("Адрес", Адрес); НайденныеСтроки = СписокПолучателей.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() > 1 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Такой адрес электронной почту уже есть в списке.'")); + ШаблонТекстаОшибки = НСтр("ru = 'Адрес %1 уже есть в списке.'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, Адрес) + ,, "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(НайденныеСтроки[0])) + "].Представление"); Отказ = Истина; Возврат; КонецЕсли; @@ -816,13 +825,13 @@ Если СписокПолучателей.Количество() = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru='Необходимо указать хотя бы одного получателя письма.'"),, "СписокПолучателей"); Возврат; ИначеЕсли (СписокПолучателей.Количество() = 1 И ПустаяСтрока(СписокПолучателей[0].Адрес)) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru='Необходимо указать хотя бы одного получателя письма.'"),, "СписокПолучателей[0].Представление"); Возврат; @@ -998,29 +1007,65 @@ Функция ПроверитьЗаполнениеСписковАдресатов() Отказ = Ложь; + АдресаПоПредставлению = Новый Соответствие; + АдресаПоЗначению = Новый Соответствие; + ШаблонТекстаОшибки = НСтр("ru = 'Адрес %1 уже есть в списке.'"); Для каждого СтрокаАдреса Из СписокПолучателей Цикл Результат = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(СтрокаАдреса.Представление); Для Каждого СтруктураАдреса Из Результат Цикл + Если Не ПустаяСтрока(СтруктураАдреса.ОписаниеОшибки) Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтруктураАдреса.ОписаниеОшибки, , "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(СтрокаАдреса)) + "].Представление"); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтруктураАдреса.ОписаниеОшибки, , "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(СтрокаАдреса)) + "].Представление"); КонецЕсли; + + Если АдресаПоПредставлению.Получить(СтруктураАдреса.Адрес) <> Неопределено Тогда + Отказ = Истина; + ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, + СтруктураАдреса.Адрес),, "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(СтрокаАдреса)) + "].Представление"); + Иначе + АдресаПоПредставлению.Вставить(СтруктураАдреса.Адрес, СтрокаАдреса.ПолучитьИдентификатор()); + КонецЕсли; + КонецЦикла; Если НЕ Отказ Тогда Результат = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(СтрокаАдреса.Адрес); Для Каждого СтруктураАдреса Из Результат Цикл + Если Не ПустаяСтрока(СтруктураАдреса.ОписаниеОшибки) Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтруктураАдреса.ОписаниеОшибки, , "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(СтрокаАдреса)) + "].Представление"); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтруктураАдреса.ОписаниеОшибки, , "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(СтрокаАдреса)) + "].Представление"); КонецЕсли; + + Если АдресаПоЗначению.Получить(СтруктураАдреса.Адрес) <> Неопределено Тогда + Отказ = Истина; + ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, + СтруктураАдреса.Адрес),, "СписокПолучателей[" + Строка(СписокПолучателей.Индекс(СтрокаАдреса)) + "].Представление"); + Иначе + АдресаПоЗначению.Вставить(СтруктураАдреса.Адрес, СтрокаАдреса.ПолучитьИдентификатор()); + КонецЕсли; + КонецЦикла; КонецЕсли; КонецЦикла; + Если НЕ Отказ Тогда + + Для каждого АдресПоЗначению Из АдресаПоЗначению Цикл + Если АдресаПоПредставлению.Получить(АдресПоЗначению.Ключ) <> Неопределено + И АдресаПоПредставлению.Получить(АдресПоЗначению.Ключ) <> АдресПоЗначению.Значение Тогда + Отказ = Истина; + Индекс = СписокПолучателей.Индекс(СписокПолучателей.НайтиПоИдентификатору(АдресПоЗначению.Значение)); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, + АдресПоЗначению.Ключ),, "СписокПолучателей[" + Строка(Индекс) + "].Представление"); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Возврат Отказ; КонецФункции @@ -1084,6 +1129,7 @@ Элементы.ОтправительПредставление.ТолькоПросмотр = Истина; Элементы.СписокПолучателейВариантОтправки.ТолькоПросмотр = Истина; Элементы.СписокПолучателейПредставление.РедактированиеТекста = Ложь; + Элементы.СписокПолучателей.ТолькоПросмотр = Истина; КонецЕсли; @@ -1151,7 +1197,7 @@ ДатаПисьма = ?(ЗначениеЗаполнено(РеквизитыПисьма.ДатаОтправления), РеквизитыПисьма.ДатаОтправления, РеквизитыПисьма.Дата); КонецЕсли; - ПредставлениеПисьма = ВзаимодействияКлиентСервер.ПредставлениеПисьма(РеквизитыПисьма.Тема, ДатаПисьма); + ПредставлениеПисьма = Взаимодействия.ПредставлениеПисьма(РеквизитыПисьма.Тема, ДатаПисьма); НоваяСтрока = Вложения.Добавить(); НоваяСтрока.Письмо = Письмо; @@ -1172,7 +1218,7 @@ Для Каждого ПисьмоВложение Из ТаблицаПисемВложений Цикл - ПредставлениеПисьма = ВзаимодействияКлиентСервер.ПредставлениеПисьма(ПисьмоВложение.Тема, ПисьмоВложение.Дата); + ПредставлениеПисьма = Взаимодействия.ПредставлениеПисьма(ПисьмоВложение.Тема, ПисьмоВложение.Дата); НоваяСтрока = Вложения.Добавить(); НоваяСтрока.Письмо = ПисьмоВложение.Письмо; @@ -1207,12 +1253,9 @@ &НаКлиенте Процедура ЗавершениеДобавленияПисьма(Результат, Параметры) Экспорт - Если ВзаимодействияКлиентСервер.ЯвляетсяЭлектроннымПисьмом(Результат) Тогда - + Если ВзаимодействияКлиент.ЯвляетсяЭлектроннымПисьмом(Результат) Тогда ДобавитьВложениеПисьмо(Результат); - Модифицированность = Истина; - КонецЕсли; КонецПроцедуры @@ -1338,10 +1381,10 @@ ЭтотОбъект); Исключение - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу); + ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлу); КонецПопытки; Иначе - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу); + ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлу); КонецЕсли; #Иначе @@ -1359,7 +1402,7 @@ ДвоичныеДанные = ПолучитьИзВременногоХранилища(ТекущиеДанные.ИмяФайлаНаКомпьютере); ДвоичныеДанные.Записать(ПутьКФайлу); КонецЕсли; - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ПутьКФайлу); + ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлу); #Иначе ПолучитьФайл(ПутьКФайлу, ТекущиеДанные.ИмяФайла, Истина); #КонецЕсли @@ -1402,6 +1445,11 @@ КонецЕсли; КонецЦикла; + ДанныеХранимыхВБазеПисемВложений = Взаимодействия.ДанныеХранимыхВБазеПисемВложений(ПереданныеПараметры.Основание.Основание); + Для Каждого СтрокаТаблицы Из ДанныеХранимыхВБазеПисемВложений Цикл + ДобавитьВложениеПисьмо(СтрокаТаблицы.Письмо); + КонецЦикла; + ИначеЕсли ПереданныеПараметры.Основание.Команда = "ПереслатьКакВложение" И Параметры.Основание.Свойство("Основание") Тогда @@ -1508,7 +1556,7 @@ НоваяСтрока.ИмяФайлаНаКомпьютере = Адрес; НоваяСтрока.ИмяФайла = ВыбранноеИмяФайла; - Расширение = ВзаимодействияКлиентСервер.РасширениеФайла(ВыбранноеИмяФайла); + Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ВыбранноеИмяФайла); НоваяСтрока.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); Элементы.Вложения.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); @@ -1559,12 +1607,10 @@ НоваяСтрока.Расположение = 2; НоваяСтрока.ИмяФайлаНаКомпьютере = ВыбранныйФайл; - ИмяФайла = ""; - Расширение = ""; - ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(ВыбранныйФайл, "", ИмяФайла); + ИмяФайла = ИмяФайлаБезКаталога(ВыбранныйФайл); НоваяСтрока.ИмяФайла = ИмяФайла; - Расширение = ВзаимодействияКлиентСервер.РасширениеФайла(ИмяФайла); + Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла); НоваяСтрока.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); ДополнительныеПараметры = Новый Структура("СтрокаТаблицыВложений", НоваяСтрока); ОписаниеОповещение = Новый ОписаниеОповещения("НовыйФайлПослеИнициализации", ЭтотОбъект, ДополнительныеПараметры); @@ -1592,12 +1638,10 @@ НоваяСтрока.Расположение = 2; НоваяСтрока.ИмяФайлаНаКомпьютере = ПолноеИмя; - ИмяФайла = ""; - Расширение = ""; - ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(ПолноеИмя, "", ИмяФайла); + ИмяФайла = ИмяФайлаБезКаталога(ПолноеИмя); НоваяСтрока.ИмяФайла = ИмяФайла; - Расширение = ВзаимодействияКлиентСервер.РасширениеФайла(ИмяФайла); + Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла); НоваяСтрока.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); ДополнительныеПараметры = Новый Структура("СтрокаТаблицыВложений", НоваяСтрока); ОписаниеОповещение = Новый ОписаниеОповещения("НовыйФайлПослеИнициализации", ЭтотОбъект, ДополнительныеПараметры); @@ -1606,6 +1650,24 @@ КонецПроцедуры +&НаКлиенте +Функция ИмяФайлаБезКаталога(Знач ПолноеИмяФайла) + + ИмяФайла = ПолноеИмяФайла; + Пока Истина Цикл + + Позиция = Макс(СтрНайти(ИмяФайла, "\"), СтрНайти(ИмяФайла, "/")); + Если Позиция = 0 Тогда + Возврат ИмяФайла; + КонецЕсли; + + ИмяФайла = Сред(ИмяФайла, Позиция + 1); + + КонецЦикла; + Возврат ИмяФайла; + +КонецФункции + #КонецОбласти #Область ФормированиеТелаПисьма @@ -1867,7 +1929,7 @@ КонецЕсли; КонецЕсли; ОписаниеВложения.ИмяФайла = Вложение.Представление; - Расширение = ВзаимодействияКлиентСервер.РасширениеФайла(ОписаниеВложения.ИмяФайла); + Расширение = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ОписаниеВложения.ИмяФайла); ОписаниеВложения.ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); КонецЦикла; КонецЕсли; @@ -2055,7 +2117,7 @@ НайденныеСтроки = ДоступныеДляОтправкиУчетныеЗаписи.НайтиСтроки(Новый Структура("УчетнаяЗапись", Объект.УчетнаяЗапись)); Если НайденныеСтроки.Количество() = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru ='Выбранная учетная запись не доступна для отправки писем'"),, "ОтправительПредставление", "Объект"); Возврат; КонецЕсли; @@ -2357,6 +2419,8 @@ ТабличнаяЧасть.Значение.Очистить(); КонецЦикла; + МассивРанееДобавленныхАдресов = Новый Массив; + Для Каждого Элемент Из Результат Цикл ТабличнаяЧасть = СоответствиеТабличныхЧастей.Получить(Элемент.Группа); @@ -2364,11 +2428,17 @@ ТабличнаяЧасть = Объект.ПолучателиПисьма; КонецЕсли; + Если МассивРанееДобавленныхАдресов.Найти(Элемент.Адрес) <> Неопределено Тогда + Продолжить; + КонецЕсли; + НоваяСтрока = ТабличнаяЧасть.Добавить(); НоваяСтрока.Адрес = Элемент.Адрес; НоваяСтрока.Представление = ОбработанноеПредставлениеАдресата(Элемент.Представление); НоваяСтрока.Контакт = Элемент.Контакт; + МассивРанееДобавленныхАдресов.Добавить(НоваяСтрока.Адрес); + КонецЦикла; ОчиститьДублиАдресатов(Объект.ПолучателиПисьма); @@ -2466,11 +2536,7 @@ ИмяСервераИсходящейПочты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.УчетнаяЗапись, "СерверИсходящейПочты", Истина); - Если УправлениеЭлектроннойПочтой.СерверИсходящейПочтыНеТребуетДополнительнойОтправкиПоIMAP(ИмяСервераИсходящейПочты) Тогда - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,,ПараметрыПисьма); - Иначе - Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,,ПараметрыПисьма,"Все"); - КонецЕсли; + Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект,,ПараметрыПисьма); Исключение @@ -2485,7 +2551,7 @@ Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Следующие адресаты электронного письма не приняты почтовым сервером: - |%1. Письмо отправлено остальным адресатам.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + |%1. Письмо отправлено остальным адресатам.'", ОбщегоНазначения.КодОсновногоЯзыка()), ПредставлениеОшибочныхАдресатов); Иначе @@ -2504,7 +2570,6 @@ Если НЕ ПисьмоОбъект.УдалятьПослеОтправки Тогда - ПисьмоОбъект.ИдентификаторСообщения = ИдентификаторПисьма; ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); ПисьмоОбъект.Записать(РежимЗаписиДокумента.Запись); @@ -2718,93 +2783,19 @@ &НаСервере Процедура УдалитьЭлементыСтаройПодписи(ТекстПисьмаФорматированныйДокумент, СтараяПодпись) - ТекстПисьмаБезПараграфов = Новый ФорматированныйДокумент; - ДобавитьФорматированныйДокументКФорматированномуДокументу(ТекстПисьмаБезПараграфов, ТекстПисьмаФорматированныйДокумент); - СтараяПодписьБезПараграфов = Новый ФорматированныйДокумент; - ДобавитьФорматированныйДокументКФорматированномуДокументу(СтараяПодписьБезПараграфов, СтараяПодпись); + ТекстHTMLФорматированныйДокумент = ""; + ВложенияФорматированныйДокумент = Новый Структура; - ПервыйЗначимыйЭлементПодпись = Неопределено; - ПоследнийЗначимыйЭлементПодпись = Неопределено; - КоличествоЭлементовПодпись = СтараяПодписьБезПараграфов.Элементы[0].Элементы.Количество(); - КоличествоЭлементовТекст = ТекстПисьмаБезПараграфов.Элементы[0].Элементы.Количество(); + ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(ТекстHTMLФорматированныйДокумент, ВложенияФорматированныйДокумент); - Для Инд = 0 По КоличествоЭлементовПодпись - 1 Цикл - - ЭлементПодписи = СтараяПодписьБезПараграфов.Элементы[0].Элементы[Инд]; - Если ТипЗнч(ЭлементПодписи) = Тип("ТекстФорматированногоДокумента") - Или ТипЗнч(ЭлементПодписи) = Тип("КартинкаФорматированногоДокумента") Тогда - - ПервыйЗначимыйЭлементПодпись = ЭлементПодписи; - Прервать; - - КонецЕсли; - - КонецЦикла; + ТекстHTMLСтараяПодпись = ""; + ВложенияСтараяПодпись = Новый Структура; - Для Инд = 0 По КоличествоЭлементовПодпись - 1 Цикл - - ЭлементПодписи = СтараяПодписьБезПараграфов.Элементы[0].Элементы[КоличествоЭлементовПодпись - 1 - Инд]; - Если ТипЗнч(ЭлементПодписи) = Тип("ТекстФорматированногоДокумента") - Или ТипЗнч(ЭлементПодписи) = Тип("КартинкаФорматированногоДокумента") Тогда - - ПоследнийЗначимыйЭлементПодпись = ЭлементПодписи; - Прервать; - - КонецЕсли; - - КонецЦикла; - - ИндексПервогоЭлементаТекст = -1; - ИндексПоследнегоЭлементаТекст = -1; - - Для Инд = 0 По КоличествоЭлементовТекст - 1 Цикл; - - ЭлементТекста = ТекстПисьмаБезПараграфов.Элементы[0].Элементы[КоличествоЭлементовТекст - 1 - Инд]; - Если ИндексПервогоЭлементаТекст = - 1 Тогда - Если ТипЗнч(ЭлементТекста) = ТипЗнч(ПервыйЗначимыйЭлементПодпись) Тогда - - Если ТипЗнч(ЭлементТекста) = Тип("ТекстФорматированногоДокумента") - И ЭлементТекста.Текст = ПервыйЗначимыйЭлементПодпись.Текст Тогда - ИндексПервогоЭлементаТекст = КоличествоЭлементовТекст - 1 - Инд; - КонецЕсли; - Если ТипЗнч(ЭлементТекста) = Тип("КартинкаФорматированногоДокумента") - И ЭлементТекста.Картинка = ПервыйЗначимыйЭлементПодпись.Картинка Тогда - ИндексПервогоЭлементаТекст = КоличествоЭлементовТекст - 1 - Инд; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если ИндексПоследнегоЭлементаТекст = - 1 Тогда - Если ТипЗнч(ЭлементТекста) = ТипЗнч(ПоследнийЗначимыйЭлементПодпись) Тогда - - Если ТипЗнч(ЭлементТекста) = Тип("ТекстФорматированногоДокумента") - И ЭлементТекста.Текст = ПоследнийЗначимыйЭлементПодпись.Текст Тогда - ИндексПоследнегоЭлементаТекст = КоличествоЭлементовТекст - 1 - Инд; - КонецЕсли; - Если ТипЗнч(ЭлементТекста) = Тип("КартинкаФорматированногоДокумента") - И ЭлементТекста.Картинка = ПоследнийЗначимыйЭлементПодпись.Картинка Тогда - ИндексПоследнегоЭлементаТекст = КоличествоЭлементовТекст - 1 - Инд; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если ИндексПервогоЭлементаТекст <> -1 И ИндексПоследнегоЭлементаТекст <> -1 Тогда - - Прервать; - - КонецЕсли; - - КонецЦикла; - - Если ИндексПервогоЭлементаТекст <> - 1 И ИндексПоследнегоЭлементаТекст <> -1 Тогда - - Для Инд = 0 По ИндексПоследнегоЭлементаТекст - ИндексПервогоЭлементаТекст Цикл - ТекстПисьмаБезПараграфов.Элементы[0].Элементы.Удалить(ИндексПоследнегоЭлементаТекст - Инд); - КонецЦикла; - - ТекстПисьмаФорматированныйДокумент = ТекстПисьмаБезПараграфов; - - КонецЕсли; + ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(ТекстHTMLСтараяПодпись, ВложенияСтараяПодпись); + + ТекстHTMLСтараяПодпись = Взаимодействия.СодержимоеТегаHTML(ТекстHTMLСтараяПодпись,"body"); + ТекстHTMLФорматированныйДокумент = СтрЗаменить(ТекстHTMLФорматированныйДокумент, ТекстHTMLСтараяПодпись, ""); + ТекстПисьмаФорматированныйДокумент.УстановитьHTML(ТекстHTMLФорматированныйДокумент, ВложенияФорматированныйДокумент); КонецПроцедуры @@ -2955,6 +2946,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.ШаблоныСообщений diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаСписка/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаСписка/Form.form index 4bbfbfdda..b1f7b90a0 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаСписка/Form.form @@ -304,6 +304,40 @@ true
            + + Ссылка + 37 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 38 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -463,6 +497,9 @@ true + + Список.Ref +
            true
            ВЫБРАТЬ diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаСписка/Module.bsl index da9443a89..adfe96293 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl index d2180b585..c534617e0 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -51,14 +58,14 @@ Если ПустаяСтрока(АдресПубликацииИнформационнойБазыВИнтернете) Тогда ТекстСообщения = НСтр("ru = 'Не указан адрес публикации информационной базы в интернете.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "АдресПубликацииИнформационнойБазыВИнтернете",, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "АдресПубликацииИнформационнойБазыВИнтернете",, Отказ); КонецЕсли; Если ПустаяСтрока(СсылкаНаОбъект) Тогда ТекстСообщения = НСтр("ru = 'Не указана внутренняя ссылка на объект.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "СсылкаНаОбъект",, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "СсылкаНаОбъект",, Отказ); КонецЕсли; diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl index 145286176..def8d486d 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -118,24 +126,17 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - ВзаимодействияВызовСервера.ОбработкаПолученияДанныхВыбора( - ДанныеВыбора, - Параметры, - СтандартнаяОбработка, - "ЭлектронноеПисьмоИсходящее"); + ВзаимодействияСобытия.ОбработкаПолученияДанныхВыбора(Метаданные.Документы.ЭлектронноеПисьмоИсходящее.Имя, + ДанныеВыбора, Параметры, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - #Область СлужебныеПроцедурыИФункции #Область ОбработчикиОбновления diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index 197e0eee9..f5b135498 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -416,4 +424,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo index e9f7ebbf6..38c445b95 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo @@ -67,9 +67,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоИсходящее + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.ИмяПредопределенногоНабора + + Документ_ЭлектронноеПисьмоИсходящее -1 -1 @@ -83,9 +83,9 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref - - Catalog.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоИсходящее + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.ИмяПредопределенногоНабора + + Документ_ЭлектронноеПисьмоИсходящее -1 -1 diff --git a/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo b/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo index aaa98c770..eaf21a924 100644 --- a/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo +++ b/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo @@ -70,4 +70,11 @@ Интернет (пассивный режим) + + ВнешняяСистема + + ru + Внешняя система + + diff --git a/SSL/src/Enums/СпособВыполненияПроверки/СпособВыполненияПроверки.mdo b/SSL/src/Enums/СпособыВыполненияПроверки/СпособыВыполненияПроверки.mdo similarity index 93% rename from SSL/src/Enums/СпособВыполненияПроверки/СпособВыполненияПроверки.mdo rename to SSL/src/Enums/СпособыВыполненияПроверки/СпособыВыполненияПроверки.mdo index efadf90f4..3f697a300 100644 --- a/SSL/src/Enums/СпособВыполненияПроверки/СпособВыполненияПроверки.mdo +++ b/SSL/src/Enums/СпособыВыполненияПроверки/СпособыВыполненияПроверки.mdo @@ -5,10 +5,10 @@ - СпособВыполненияПроверки + СпособыВыполненияПроверки ru - Способ выполнения проверки + Способы выполнения проверки Use diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo index d3415538c..6532cf3c5 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo @@ -40,6 +40,7 @@ CatalogObject.ОчередьЗаданий ConstantValueManager.СообщениеОбменаДаннымиИзГлавногоУзла ConstantValueManager.КаталогОбменаФайламиВМоделиСервисаLinux + ConstantValueManager.ПараметрыРезервногоКопирования ConstantValueManager.ИспользоватьАльтернативныйСерверДляЗагрузкиКурсовВалют ConstantValueManager.ПараметрыАдминистрированияИБ ConstantValueManager.ИспользуютсяПрофилиБезопасности diff --git a/SSL/src/EventSubscriptions/ОбновитьГруппыЗначенийДоступа/ОбновитьГруппыЗначенийДоступа.mdo b/SSL/src/EventSubscriptions/ОбновитьГруппыЗначенийДоступа/ОбновитьГруппыЗначенийДоступа.mdo index ddbd0cf14..1145667fb 100644 --- a/SSL/src/EventSubscriptions/ОбновитьГруппыЗначенийДоступа/ОбновитьГруппыЗначенийДоступа.mdo +++ b/SSL/src/EventSubscriptions/ОбновитьГруппыЗначенийДоступа/ОбновитьГруппыЗначенийДоступа.mdo @@ -6,7 +6,7 @@ Обновить группы значений доступа - DefinedType.ЗначениеДоступаСГруппамиЗначенийДоступаОбъект + DefinedType.ЗначениеДоступаОбъект BeforeWrite CommonModule.УправлениеДоступомСлужебный.ОбновитьГруппыЗначенийДоступа diff --git a/SSL/src/EventSubscriptions/ОбработкаПроверкиЗаполненияПрисоединенногоФайла/ОбработкаПроверкиЗаполненияПрисоединенногоФайла.mdo b/SSL/src/EventSubscriptions/ОбработкаПроверкиЗаполненияПрисоединенногоФайла/ОбработкаПроверкиЗаполненияПрисоединенногоФайла.mdo new file mode 100644 index 000000000..7dd4aa26a --- /dev/null +++ b/SSL/src/EventSubscriptions/ОбработкаПроверкиЗаполненияПрисоединенногоФайла/ОбработкаПроверкиЗаполненияПрисоединенногоФайла.mdo @@ -0,0 +1,13 @@ + + + ОбработкаПроверкиЗаполненияПрисоединенногоФайла + + ru + Обработка проверки заполнения присоединенного файла + + + DefinedType.ПрисоединенныйФайлОбъект + + FillCheckProcessing + CommonModule.РаботаСФайламиСлужебный.ОбработкаПроверкиЗаполненияПрисоединенногоФайла + diff --git a/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений.mdo b/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений.mdo new file mode 100644 index 000000000..2254b3286 --- /dev/null +++ b/SSL/src/EventSubscriptions/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений/ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений.mdo @@ -0,0 +1,14 @@ + + + ПереопределитьПолучаемуюФормуПрисоединенногоФайлаШаблоныСообщений + + ru + Переопределить получаемую форму присоединенного файла (Шаблоны сообщений) + + АПК:256 - обработчик в серверном модуле + + CatalogManager.ШаблоныСообщенийПрисоединенныеФайлы + + FormGetProcessing + CommonModule.ШаблоныСообщений.ОпределитьФормуПрисоединенногоФайла + diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Module.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Module.bsl index 9a5f1136f..fb8068356 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl index a1395f711..0361ef6b1 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl index 41163cf07..00bf4a488 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -39,414 +47,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, необходимые для совместимости с БСП2.4.1-2.4.3. - -// Позволяет переопределить настройки плана обмена, заданные по умолчанию. -// Значения настроек по умолчанию см. в ОбменДаннымиСервер.НастройкиПланаОбменаПоУмолчанию. -// -// Параметры: -// Настройки - Структура - Содержит настройки по умолчанию. -// ИдентификаторНастройки - Строка - имя дополнительной настройки обмена. -// -Процедура ОпределитьНастройки(Настройки, ИдентификаторНастройки) Экспорт - - Настройки.ПредупреждатьОНесоответствииВерсийПравилОбмена = Ложь; - Настройки.ЗаголовокКомандыДляСозданияНовогоОбменаДанными = ""; - -КонецПроцедуры - -// Возвращает имя файла настроек по умолчанию; -// В этот файл будут выгружены настройки обмена для приемника; -// Это значение должно быть одинаковым в плане обмена источника и приемника. -// -// Возвращаемое значение: -// Строка - имя файла по умолчанию для выгрузки настроек обмена данными. -// -Функция ИмяФайлаНастроекДляПриемника() Экспорт - - Возврат ""; - -КонецФункции - -// Возвращает структуру отборов на узле плана обмена с установленными значениями по умолчанию; -// Структура настроек повторяет состав реквизитов шапки и табличных частей плана обмена; -// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры, -// а для табличных частей используются структуры, -// содержащие массивы значений полей табличных частей плана обмена. -// -// Параметры: -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для -// разного состава настроек на узле для разных версий корреспондента. -// ИмяФормы - Строка - Имя используемой формы настройки узла. Возможно, например, использование -// различных форм для разных версий корреспондента. -// ИдентификаторНастройки - Строка - имя дополнительной настройки обмена. -// -// Возвращаемое значение: -// СтруктураНастроек - Структура - структура отборов на узле плана обмена. -// -Функция НастройкаОтборовНаУзле(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки) Экспорт - - Возврат Новый Структура; - -КонецФункции - -// Возвращает структуру значений по умолчанию для узла; -// Структура настроек повторяет состав реквизитов шапки плана обмена; -// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры. -// -// Параметры: -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для разного -// состава значений по умолчанию на узле для разных версий корреспондента. -// ИмяФормы - Строка - Имя используемой формы настройки значений по умолчанию. -// Возможно, например, использование различных форм для разных версий корреспондента. -// ИдентификаторНастройки - Строка - имя дополнительной настройки обмена. -// -// Возвращаемое значение: -// СтруктураНастроек - Структура - структура значений по умолчанию на узле плана обмена. -// -Функция ЗначенияПоУмолчаниюНаУзле(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки) Экспорт - - Возврат Новый Структура; - -КонецФункции - -// Возвращает строку описания ограничений миграции данных для пользователя; -// Прикладной разработчик на основе установленных отборов на узле должен сформировать строку описания ограничений -// удобную для восприятия пользователем. -// -// Параметры: -// НастройкаОтборовНаУзле - Структура - структура отборов на узле плана обмена, -// полученная при помощи функции НастройкаОтборовНаУзле(). -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для различного -// описания ограничений передачи данных в зависимости от версии корреспондента. -// ИдентификаторНастройки - Строка - имя дополнительной настройки обмена. -// -// Возвращаемое значение: -// Строка - Строка описания ограничений миграции данных для пользователя. -// -Функция ОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле, ВерсияКорреспондента, ИдентификаторНастройки) Экспорт - - Возврат ""; - -КонецФункции - -// Возвращает строку описания значений по умолчанию для пользователя; -// Прикладной разработчик на основе установленных значений по умолчанию на узле должен сформировать строку описания -// удобную для восприятия пользователем. -// -// Параметры: -// ЗначенияПоУмолчаниюНаУзле - Структура - структура значений по умолчанию на узле плана обмена, -// полученная при помощи функции ЗначенияПоУмолчаниюНаУзле(). -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для различного -// описания значений по умолчанию в зависимости от версии корреспондента. -// ИдентификаторНастройки - Строка - имя дополнительной настройки обмена. -// -// Возвращаемое значение: -// Строка - строка описания для пользователя значений по умолчанию. -// -Функция ОписаниеЗначенийПоУмолчанию(ЗначенияПоУмолчаниюНаУзле, ВерсияКорреспондента, ИдентификаторНастройки) Экспорт - - Возврат ""; - -КонецФункции - -// Устанавливает представление команды создания нового обмена данными. -// -// Возвращаемое значение: -// Строка - представление команды, выводимое в пользовательском интерфейсе. -// -Функция ЗаголовокКомандыДляСозданияНовогоОбменаДанными() Экспорт - - Возврат ""; - -КонецФункции - -// Определяет, будет ли использоваться помощник для создания новых узлов плана обмена. -// -// Возвращаемое значение: -// Булево - признак использования помощника. -// -Функция ИспользоватьПомощникСозданияОбменаДанными() Экспорт - - Возврат Ложь; - -КонецФункции - -// Определяет использование механизма регистрации объектов. -// -// Возвращаемое значение: -// Булево - Истина - если механизм регистрации объектов необходимо использовать для текущего плана обмена. -// Ложь - если механизм регистрации объектов использовать не требуется. -// -Функция ИспользоватьМеханизмРегистрацииОбъектов() Экспорт - - Возврат Ложь; - -КонецФункции - -// Возвращает пользовательскую форму для создания начального образа базы. -// Эта форма будет открыта после завершения настройки обмена с помощью помощника. -// Для планов обмена не РИБ функция возвращает пустую строку. -// -// Возвращаемое значение: -// Строка - имя используемой формы. -// -// Пример: -// Возврат "ПланОбмена.ОбменВРаспределеннойИнформационнойБазе.Форма.ФормаСозданияНачальногоОбраза"; -// -Функция ИмяФормыСозданияНачальногоОбраза() Экспорт - - Возврат ""; - -КонецФункции - -// Возвращает массив используемых транспортов сообщений для этого плана обмена. -// -// Возвращаемое значение: -// Массив - массив содержит значения перечисления ВидыТранспортаСообщенийОбмена. -// -// Пример: -// 1. Если план обмена поддерживает только два транспорта сообщений FILE и FTP, -// то тело функции следует определить следующим образом: -// -// Результат = Новый Массив; -// Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); -// Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); -// Возврат Результат; -// -// 2. Если план обмена поддерживает все транспорты сообщений, определенных в конфигурации, -// то тело функции следует определить следующим образом: -// -// Возврат ОбменДаннымиСервер.ВсеТранспортыСообщенийОбменаКонфигурации(); -// -Функция ИспользуемыеТранспортыСообщенийОбмена() Экспорт - - Результат = Новый Массив; - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); - - Возврат Результат; - -КонецФункции - -// Устанавливает признак использования плана обмена для организации обмена в модели сервиса. -// Если признак установлен, то в сервисе можно включить обмен данными -// с использованием этого плана обмена. -// Если признак не установлен, то план обмена будет использоваться только -// для обмена в локальном режиме работы конфигурации. -// -// Возвращаемое значение: -// Булево - признак использования плана обмена в модели сервиса. -// -Функция ПланОбменаИспользуетсяВМоделиСервиса() Экспорт - - Возврат Ложь; - -КонецФункции - -// Возвращает признак того, что план обмена поддерживает обмен данными с корреспондентом, работающим в модели сервиса. -// Если признак установлен, то становится возможным создать обмен данными когда эта информационная база -// работает в локальном режиме, а корреспондент в модели сервиса. -// -// Возвращаемое значение: -// Булево - признак возможности настройки обмена с корреспондентов в модели сервиса. -// -Функция КорреспондентВМоделиСервиса() Экспорт - - Возврат Ложь; - -КонецФункции - -// Возвращает имена реквизитов и табличных частей плана обмена, перечисленных через запятую, -// которые являются общими для пары обменивающихся конфигураций. -// -// Параметры: -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для разного -// состава общих данных узлов в зависимости от версии корреспондента. -// ИмяФормы - Строка - Имя используемой формы настройки значений по умолчанию. -// Возможно, например, использование различных форм для разных версий корреспондента. -// -// Возвращаемое значение: -// Строка - Список имен реквизитов. -// -Функция ОбщиеДанныеУзлов(ВерсияКорреспондента, ИмяФормы) Экспорт - - Возврат ""; -КонецФункции - -// Возвращает структуру отборов на узле плана обмена базы корреспондента с установленными значениями по умолчанию; -// Структура настроек повторяет состав реквизитов шапки и табличных частей плана обмена базы корреспондента; -// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры, -// а для табличных частей используются структуры, -// содержащие массивы значений полей табличных частей плана обмена. -// -// Параметры: -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для -// разного состава настроек на узле для разных версий корреспондента. -// ИмяФормы - Строка - Имя используемой формы настройки узла. Возможно, например, использование -// различных форм для разных версий корреспондента. -// ИдентификаторНастройки - Строка - имя дополнительной настройки обмена. -// -// Возвращаемое значение: -// СтруктураНастроек - Структура - структура отборов на узле плана обмена базы корреспондента. -// -Функция НастройкаОтборовНаУзлеБазыКорреспондента(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки) Экспорт - - Возврат Новый Структура; -КонецФункции - -// Возвращает структуру значений по умолчанию для узла базы корреспондента; -// Структура настроек повторяет состав реквизитов шапки плана обмена базы корреспондента; -// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры. -// -// Параметры: -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для разного -// состава значений по умолчанию на узле для разных версий корреспондента. -// ИмяФормы - Строка - Имя используемой формы настройки значений по умолчанию. -// Возможно, например, использование различных форм для разных версий корреспондента. -// ИдентификаторНастройки - Строка - имя дополнительной настройки обмена. -// -// Возвращаемое значение: -// СтруктураНастроек - Структура - структура значений по умолчанию на узле плана обмена базы корреспондента. -// -Функция ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки) Экспорт - - Возврат Новый Структура; -КонецФункции - -// Возвращает строку описания ограничений миграции данных для базы корреспондента, которая отображается пользователю; -// Прикладной разработчик на основе установленных отборов на узле базы корреспондента должен сформировать строку -// описания ограничений удобную для восприятия пользователем. -// -// Параметры: -// НастройкаОтборовНаУзле - Структура - структура отборов на узле плана обмена базы корреспондента, -// полученная при помощи функции НастройкаОтборовНаУзлеБазыКорреспондента(). -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для различного -// описания ограничений передачи данных в зависимости от версии корреспондента. -// ИдентификаторНастройки - Строка - имя дополнительной настройки обмена. -// -// Возвращаемое значение: -// Строка - строка описания ограничений миграции данных для пользователя. -// -Функция ОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзле, ВерсияКорреспондента, ИдентификаторНастройки) Экспорт - - Возврат ""; -КонецФункции - -// Возвращает строку описания значений по умолчанию для базы корреспондента, которая отображается пользователю; -// Прикладной разработчик на основе установленных значений по умолчанию на узле базы корреспондента должен сформировать -// строку описания -// удобную для восприятия пользователем. -// -// Параметры: -// ЗначенияПоУмолчаниюНаУзле - Структура - структура значений по умолчанию на узле плана обмена базы корреспондента, -// полученная при помощи функции ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(). -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для различного -// описания значений по умолчанию в зависимости от версии корреспондента. -// ИдентификаторНастройки - Строка - имя дополнительной настройки обмена. -// -// Возвращаемое значение: -// Строка - строка описания для пользователя значений по умолчанию. -// -Функция ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзле, ВерсияКорреспондента, ИдентификаторНастройки) Экспорт - - Возврат ""; -КонецФункции - -// Определяет текст пояснения для настройки параметров учета базы-корреспондента. -// -// Параметры: -// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для различного -// пояснения для настройки параметров учета в зависимости от версии корреспондента. -// -// Возвращаемое значение: -// Строка - строка описания пояснения для настройки параметров учета базы-корреспондента. -// -Функция ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента(ВерсияКорреспондента) Экспорт - - Возврат ""; -КонецФункции - -// Процедура предназначена для получения дополнительных данных, используемых при настройке обмена в базе-корреспонденте. -// -// Параметры: -// ДополнительныеДанные - Структура - Дополнительные данные, которые будут использованы -// в базе-корреспонденте при настройке обмена. -// В качестве значений структуры применимы только значения, поддерживающие XDTO-сериализацию. -// -Процедура ПолучитьДополнительныеДанныеДляКорреспондента(ДополнительныеДанные) Экспорт - -КонецПроцедуры - -// Обработчик события при подключении к корреспонденту. -// Событие возникает при успешном подключении к корреспонденту и получении версии конфигурации корреспондента -// при настройке обмена с использованием помощника через прямое подключение -// или при подключении к корреспонденту через Интернет. -// В обработчике можно проанализировать версию корреспондента и, -// если настройка обмена не поддерживается с корреспондентом указанной версии, то вызвать исключение. -// -// Параметры: -// ВерсияКорреспондента - Строка - (только чтение) версия конфигурации корреспондента, например, "2.1.5.1". -// -Процедура ПриПодключенииККорреспонденту(ВерсияКорреспондента) Экспорт - -КонецПроцедуры - -// Обработчик события при отправке данных узла-отправителя. -// Событие возникает при отправке данных узла-отправителя из текущей базы в корреспондент, -// до помещения данных узла в сообщения обмена. -// В обработчике можно изменить отправляемые данные или вовсе отказаться от отправки данных узла. -// -// Параметры: -// Отправитель - ПланОбменаОбъект - узел плана обмена, от имени которого выполняется отправка данных. -// Игнорировать - Булево - признак отказа от выгрузки данных узла. -// Если в обработчике установить значение этого параметра в Истина, -// то отправка данных узла выполнена не будет. Значение по умолчанию - Ложь. -// -Процедура ПриОтправкеДанныхОтправителя(Отправитель, Игнорировать) Экспорт - -КонецПроцедуры - -// Обработчик события при получении данных узла-отправителя. -// Событие возникает при получении данных узла-отправителя, -// когда данные узла прочитаны из сообщения обмена, но не записаны в информационную базу. -// В обработчике можно изменить полученные данные или вовсе отказаться от получения данных узла. -// -// Параметры: -// Отправитель - ПланОбменаОбъект - узел плана обмена, от имени которого выполняется получение данных. -// Игнорировать - Булево - признак отказа от получения данных узла. -// Если в обработчике установить значение этого параметра в Истина, -// то получение данных узла выполнена не будет. Значение по умолчанию - Ложь. -// -Процедура ПриПолученииДанныхОтправителя(Отправитель, Игнорировать) Экспорт - -КонецПроцедуры - -// Определяет текст пояснения для настройки параметров учета. -// -// Возвращаемое значение: -// Строка - строка описания пояснения для настройки параметров учета. -// -Функция ПояснениеДляНастройкиПараметровУчета() Экспорт - - Возврат ""; - -КонецФункции - -// Проверяет корректность настройки параметров учета. -// -// Параметры: -// Отказ - Булево - Признак невозможности продолжения настройки обмена из-за некорректно настроенных параметров учета. -// Получатель - ПланОбменаСсылка - Узел обмена, для которого выполняется проверка параметров учета. -// Сообщение - Строка - Содержит текст сообщения о некорректных параметрах учета. -// -Процедура ОбработчикПроверкиПараметровУчета(Отказ, Получатель, Сообщение) Экспорт - -КонецПроцедуры - // Конец СтандартныеПодсистемы.ОбменДанными // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl index 8fd6d4b54..bdd4de0d3 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -72,4 +80,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl index edc15aebf..e897ab29c 100644 --- a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo index d5555ff8c..07fe2cb0e 100644 --- a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo +++ b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo @@ -92,9 +92,15 @@ InformationRegister.УдалитьНаборыЗначенийДоступа + + Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания + InformationRegister.СостоянияРассылокОтчетов + + Constant.УдалитьАлгоритмШифрования + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы @@ -110,9 +116,24 @@ InformationRegister.НаличиеФайлов + + Constant.ИспользоватьПочтовыйКлиент + InformationRegister.УдалитьХранимыеФайлыВерсий + + Constant.ПараметрыАдминистрированияИБ + + + Constant.ИспользоватьШаблоныСообщений + + + Constant.ПараметрыИтоговИАгрегатов + + + Constant.КопироватьОбластиДанныхИзЭталонной + InformationRegister.СообщенияОбменаДанными @@ -131,12 +152,27 @@ InformationRegister.ВерсииОбъектов + + Constant.ДатаУведомленияОНовыхЗадачах + + + InformationRegister.ПоставляемыеМакетыПечати + InformationRegister.ЗамерыКомментарииСтатистики + + Constant.ИспользоватьЭлектронныеПодписи + Catalog.ПрофилиКлючевыхОпераций + + Constant.ПараметрыРезервногоКопирования + + + Constant.ИспользоватьДополнительныеОтчетыИОбработки + InformationRegister.СтатистикаКонфигурации @@ -146,6 +182,12 @@ ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения + + Constant.ПериодХраненияЗамеров + + + Constant.НастройкиПодчиненногоУзлаРИБ + InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма @@ -161,12 +203,24 @@ InformationRegister.КурсыВалют + + Constant.ВерсияДатЗапретаИзменения + + + Constant.НастройкаПроксиСервера + + + Constant.ЗапрещатьЗагрузкуФайловПоРасширению + InformationRegister.ОбработчикиСобытийСинхронизацииДанных Catalog.ВнешниеКомпоненты + + Constant.АдресПубликацииИнформационнойБазыВИнтернете + Catalog.СообщенияОбластейДанных @@ -218,21 +272,51 @@ InformationRegister.СоответствияОбъектовИнформационныхБаз + + Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме + + + Constant.ВерсияКлассификатораБанков + + + Constant.ВыполнятьЗамерыПроизводительности + + + Constant.ИспользоватьАльтернативныйСерверДляЗагрузкиКлассификатораБанков + + + Constant.ПрофильБезопасностиИнформационнойБазы + + + Constant.ДнейДоСкрытияПерсональныхДанныхСубъектов + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы InformationRegister.НастройкиОбменаДаннымиXDTO + + Constant.ИспользоватьПризнакРассмотрено + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений InformationRegister.СубъектыДляСкрытияПерсональныхДанных + + Constant.СписокРасширенийФайловOpenDocumentОбластиДанных + InformationRegister.УдалитьЗамерыВремениТехнологические + + Constant.УдалитьЛогинДляОтправкиSMS + + + Constant.ИспользоватьСинхронизациюДанныхВМоделиСервиса + InformationRegister.РейтингАктивностиОбластейДанных @@ -245,9 +329,15 @@ InformationRegister.УдалитьОбластиПерсональныхДанных + + Constant.РежимИспользованияИнформационнойБазы + Catalog.КлючевыеОперации + + Constant.СообщениеБлокировкиПриОбновленииКонфигурации + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных @@ -260,6 +350,9 @@ Catalog.Заметки + + Constant.УдалитьТипПровайдераЭП + Task.ЗадачаИсполнителя @@ -281,18 +374,36 @@ Catalog.СценарииОбменовДанными + + Constant.КлючОбластиДанных + + + Constant.ИспользоватьСкрытиеПерсональныхДанныхСубъектов + + + Constant.ДатаПоследнегоСтартаКлиентскогоСеанса + Catalog.ИдентификаторыОбъектовМетаданных + + Constant.ИспользоватьОбщиеДополнительныеЗначения + InformationRegister.ФайлыВРабочемКаталоге + + Constant.ИспользоватьШифрование + InformationRegister.ДанныеОбработанныеВЦентральномУзлеРИБ InformationRegister.ИсполнителиЗадач + + Constant.КаталогОбменаФайламиВМоделиСервиса + Document.ТелефонныйЗвонок @@ -305,6 +416,18 @@ Catalog.ОбщиеВнешниеКомпоненты + + Constant.СписокЗапрещенныхРасширенийОбластиДанных + + + Constant.ОтправлятьПисьмаВФорматеHTML + + + Constant.ИспользоватьПодчиненныеБизнесПроцессы + + + Constant.УдалитьЛогинДоступаКСервисуMorpher + InformationRegister.СостоянияКонтактовВзаимодействий @@ -317,9 +440,15 @@ InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом + + Constant.ИспользоватьДатыЗапретаЗагрузки + InformationRegister.ДанныеПроизводственногоКалендаря + + Constant.ИспользоватьВерсионированиеОбъектов + Catalog.ВерсииРасширений @@ -332,6 +461,12 @@ InformationRegister.УдалитьБлокировкиСеансовОбластиДанных + + Constant.УдалитьПарольСлужебногоПользователяМенеджераСервиса + + + Constant.СписокРасширенийТекстовыхФайлов + InformationRegister.ЗагруженныеВерсииАдресныхСведений @@ -347,15 +482,33 @@ Catalog.ШаблоныЗаданийОчереди + + Constant.СписокРасширенийФайловOpenDocument + Catalog.ПравилаПроверкиУчета + + Constant.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC + Document.Встреча Catalog.Пользователи + + Constant.ЗагрузитьСообщениеОбменаДанными + + + Constant.ПроверятьЭлектронныеПодписиНаСервере + + + Constant.ПровайдерSMS + + + Constant.ПоддержкаРезервногоКопирования + InformationRegister.НастройкиОтправителя @@ -383,18 +536,42 @@ InformationRegister.УдалитьВерсииПодсистем + + Constant.ОтложенноеОбновлениеЗавершеноУспешно + + + Constant.ИзвлекатьТекстыФайловНаСервере + + + Constant.УдалитьАлгоритмПодписи + + + Constant.КоличествоЗамеровВПакетеЭкспорта + + + Constant.ИспользоватьДополнительныеРеквизитыИСведения + InformationRegister.КлючиДоступаВнешнихПользователей Document.СообщениеSMS + + Constant.КаталогОбменаФайламиВМоделиСервисаLinux + InformationRegister.ОчередьИзвлеченияТекста + + Constant.ИспользоватьАнкетирование + Catalog.УчетныеЗаписиЭлектроннойПочты + + Constant.МаксимальныйРазмерФайла + InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов @@ -413,12 +590,21 @@ InformationRegister.ЗамерыОбластиСтатистики + + Constant.ПараметрыБлокировкиРаботыСВнешнимиРесурсами + Document.Анкета InformationRegister.КлючиДоступаНаборовГруппДоступа + + Constant.НастройкиВходаПользователей + + + Constant.ПараметрыАдресногоКлассификатора + Catalog.ПроизводственныеКалендари @@ -440,6 +626,12 @@ Catalog.СтраныМира + + Constant.СоздаватьЭлектронныеПодписиНаСервере + + + Constant.ИспользоватьДатуИВремяВСрокахЗадач + InformationRegister.СклоненияПредставленийОбъектов @@ -458,12 +650,24 @@ Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования + + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий + InformationRegister.НастройкиТранспортаОбменаДанными + + Constant.СтатусОбновленияКонфигурации + + + Constant.ИспользоватьОтправкуSMSВШаблонахСообщений + InformationRegister.СведенияОФайлах + + Constant.КоличествоПотоковОбновленияДоступа + InformationRegister.УдалитьОчередьИзвлеченияТекста @@ -488,6 +692,9 @@ InformationRegister.ОбновлениеКлючейДоступаПользователей + + Constant.ПрефиксОбластиДанных + Catalog.РассылкиОтчетов @@ -515,15 +722,33 @@ Catalog.ВнешниеПользователи + + Constant.ЧасовойПоясОбластиДанных + Catalog.ПапкиФайлов InformationRegister.НапоминанияПользователя + + Constant.ДатаОбновленияПовторноИспользуемыхЗначенийМРО + InformationRegister.ЗначенияГруппДоступа + + Constant.ИспользоватьАльтернативныйСерверДляЗагрузкиКурсовВалют + + + Constant.ИспользоватьПолнотекстовыйПоиск + + + Constant.КаталогСообщенийОбменаДаннымиДляWindows + + + Constant.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности + InformationRegister.КэшПрограммныхИнтерфейсов @@ -533,15 +758,57 @@ InformationRegister.НастройкиКомандПечати + + Constant.ДанныеДляОтложенногоОбновления + + + Constant.НеИспользоватьРазделениеПоОбластямДанных + + + Constant.КаталогСообщенийОбменаДаннымиДляLinux + + + Constant.УдалитьКонечнаяТочкаМенеджераСервиса + + + Constant.СведенияОБлокируемыхОбъектах + Catalog.ПредопределенныеВариантыОтчетов + + Constant.ИспользоватьЭлектроннуюПочтуВШаблонахСообщений + + + Constant.ОценкаПроизводительностиПериодЗаписи + + + Constant.ГлавныйУзел + + + Constant.УдалитьАлгоритмХеширования + + + Constant.ЗаголовокСистемы + InformationRegister.РучныеИзмененияГрафиковРаботы + + Constant.ИспользоватьБизнесПроцессыИЗадачи + Catalog.ГруппыПользователей + + Constant.ИспользуютсяПрофилиБезопасности + + + Constant.БлокировкаОтправкиБыстрыхСообщений + + + Constant.ОграничиватьДоступНаУровнеЗаписейУниверсально + InformationRegister.НастройкиОчисткиФайлов @@ -551,6 +818,12 @@ Catalog.ЗначенияСвойствОбъектовИерархия + + Constant.МаксимальныйРазмерФайлаОбластиДанных + + + Constant.ИспользоватьВнешнихПользователей + Catalog.УчетныеЗаписиСинхронизацииФайлов @@ -566,15 +839,30 @@ InformationRegister.СостоянияПапокПисем + + Constant.НастройкиКолонтитулов + + + Constant.ИспользоватьОнлайнПоддержку + + + Constant.УдалитьИмяСлужебногоПользователяМенеджераСервиса + InformationRegister.УдалитьНастройкиТранспортаОбмена ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач + + Constant.ИспользоватьГруппыПользователей + InformationRegister.ПсевдонимыПредопределенныхУзлов + + Constant.ИспользоватьНесколькоПроизводственныхКалендарей + InformationRegister.ПравилаДляОбменаДанными @@ -584,12 +872,21 @@ InformationRegister.АдресныеОбъекты + + Constant.НастройкаПодчиненногоУзлаРИБЗавершена + Catalog.ГруппыИсполнителейЗадач Catalog.ЗначенияСвойствОбъектов + + Constant.УдалитьПровайдерЭП + + + Constant.УдалитьВнутреннийАдресМенеджераСервиса + InformationRegister.ДатыПоследнейЗагрузкиПочтовыхСообщений @@ -605,6 +902,9 @@ InformationRegister.ИсторияАдресныхОбъектов + + Constant.СписокЗапрещенныхРасширений + InformationRegister.УдалитьЗамерыВремени @@ -629,24 +929,60 @@ InformationRegister.ПараметрыРаботыВерсийРасширений + + Constant.РазмерБлокаПередачиФайла + + + Constant.ИспользоватьНапоминанияПользователя + + + Constant.ПрефиксУзлаРаспределеннойИнформационнойБазы + + + Constant.СообщениеОбменаДаннымиИзГлавногоУзла + + + Constant.ИспользоватьЗаметки + Document.СогласиеНаОбработкуПерсональныхДанных InformationRegister.БуферОперацийСтатистики + + Constant.ПараметрыЦентраМониторинга + + + Constant.ОграничиватьДоступНаУровнеЗаписей + Catalog.ГруппыВнешнихПользователей InformationRegister.ЗамерыВремениТехнологические + + Constant.ИспользоватьРазделениеПоОбластямДанных + + + Constant.ХранитьФайлыВТомахНаДиске + + + Constant.ИспользоватьСервисСклоненияMorpher + + + Constant.СведенияОбОбновленииИБ + Catalog.ГруппыДоступа ChartOfCharacteristicTypes.УдалитьВидыДоступа + + Constant.КоличествоПотоковОбновленияИнформационнойБазы + InformationRegister.УдалитьОбластиДанных @@ -656,6 +992,9 @@ InformationRegister.УдалитьГруппыЗначенийДоступа + + Constant.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно + InformationRegister.ДатыЗапретаИзменения @@ -668,9 +1007,18 @@ InformationRegister.КлючиДоступаКРегистрам + + Constant.ИспользоватьДатыЗапретаИзменения + InformationRegister.КлючиДоступаКОбъектам + + Constant.ИспользоватьПрочиеВзаимодействия + + + Constant.ЭтоАвтономноеРабочееМесто + Catalog.НаборыГруппДоступа @@ -692,9 +1040,15 @@ InformationRegister.УдалитьПраваПоЗначениямДоступа + + Constant.УдалитьПарольДляОтправкиSMS + InformationRegister.ИдентификаторыОбъектовВерсийРасширений + + Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных + InformationRegister.УдалитьСтраныМира @@ -707,15 +1061,27 @@ InformationRegister.ДампыПлатформы + + Constant.АдресПубликацииИнформационнойБазыВЛокальнойСети + InformationRegister.КодировкиФайлов InformationRegister.ЗамерыОперацииСтатистики + + Constant.ПоследнееОбновлениеДоступа + Catalog.Файлы + + Constant.ИсточникДанныхАдресногоКлассификатора + + + Constant.ПредставлениеОбластиДанных + InformationRegister.ЗамерыСтатистики @@ -725,6 +1091,12 @@ InformationRegister.ОриентирыАдресныхОбъектов + + Constant.ВыполнитьРезервноеКопированиеОбластиДанных + + + Constant.СинхронизироватьФайлы + Catalog.ВерсииФайлов @@ -737,9 +1109,15 @@ Catalog.ОчередьЗаданийОбластейДанных + + Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском + InformationRegister.КомментарииОперацииСтатистики + + Constant.ИспользоватьОбщиеДополнительныеРеквизитыИСведения + InformationRegister.КонтактыВзаимодействий @@ -749,12 +1127,24 @@ InformationRegister.ПакетыДляОтправки + + Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации + Catalog.ПрофилиГруппДоступа Document.ЭлектронноеПисьмоВходящее + + Constant.ИспользоватьСинхронизациюДанных + + + Constant.ИдентификаторИнформационнойБазы + + + Constant.ИзменятьЗаданияЗаднимЧислом + InformationRegister.РежимыПодключенияВнешнихМодулей @@ -785,6 +1175,12 @@ InformationRegister.БлокировкиСеансовОбластейДанных + + Constant.ИспользоватьУдалениеПомеченныхОбъектов + + + Constant.ИспользоватьДатуНачалаЗадач + AsDescription InDialog BothWays diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ЗагрузитьАдресныйКлассификатор/CommandModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ЗагрузитьАдресныйКлассификатор/CommandModule.bsl index e9578baad..a3dcade34 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ЗагрузитьАдресныйКлассификатор/CommandModule.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ЗагрузитьАдресныйКлассификатор/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ОчиститьАдресныйКлассификатор/CommandModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ОчиститьАдресныйКлассификатор/CommandModule.bsl index f4a9ac757..60a66af4c 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ОчиститьАдресныйКлассификатор/CommandModule.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ОчиститьАдресныйКлассификатор/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ПодключитьИнтернетПоддержку/CommandModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ПодключитьИнтернетПоддержку/CommandModule.bsl index 28a50a6b5..b7cb2d62c 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ПодключитьИнтернетПоддержку/CommandModule.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/ПодключитьИнтернетПоддержку/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form index d36b5f3f9..df732c590 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form @@ -183,10 +183,6 @@ -1 Left
            - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl index 3c5298484..33e7304a5 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -10,16 +18,6 @@ АдресныйКлассификаторСлужебный.ПроверитьНачальноеЗаполнение(); // Инициализация списка регионов АутентификацияВыполнена = ДанныеАутентификацииСайтаСохранены(); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Элементы.Переместить(Элементы.ОК, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВариантыАктуализации", "ВидПереключателя", ВидПереключателя.Переключатель); - - КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -74,16 +72,10 @@ КонецФункции &НаСервереБезКонтекста -Функция УстановитьКонстанту() +Процедура УстановитьКонстанту() Константы.ИсточникДанныхАдресногоКлассификатора.Установить("Авто"); -КонецФункции - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - АдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(); - Закрыть(); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index e00ae5846..819be6d8a 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -10,38 +10,6 @@ ВыборРегионовЗагрузки 61 - - ГруппаМобильныйКлиент - 219 - true - true - - true - - - ru - Группа мобильный клиент - - - ГруппаМобильныйКлиентРасширеннаяПодсказка - 220 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - ГруппаКоманднаяПанельРегионов 206 @@ -340,8 +308,8 @@ MoveDown MoveUp - СубъектыРФГруппа - 151 + СубъектыРФПоля + 222 СубъектыРФЗагружать 20 @@ -381,9 +349,61 @@ true + + СубъектыРФКодСубъектаРФ + 227 + true + true + + true + + + СубъектыРФ.КодСубъектаРФ + + + СубъектыРФКодСубъектаРФРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + + СубъектыРФКодСубъектаРФКонтекстноеМеню + 228 + true + + InputField + Left + Auto + true + Left + true + Left + + 2 + true + false + true + + ru + ЧЦ=2; ЧВН= + + + ru + ЧЦ=2; ЧВН= + + true + true + true + Normal + + СубъектыРФПредставление - 17 + 224 true true @@ -394,7 +414,7 @@ СубъектыРФПредставлениеРасширеннаяПодсказка - 19 + 226 Label true true @@ -404,53 +424,24 @@ СубъектыРФПредставлениеКонтекстноеМеню - 18 + 225 true - LabelField - Left + InputField Auto true Left true - Left - + true true + true + true + true + true + Normal - - СубъектыРФЗагружено - 162 - true - - true - - - СубъектыРФ.Загружено - - - СубъектыРФЗагруженоРасширеннаяПодсказка - 164 - Label - true - true - - Left - - - - СубъектыРФЗагруженоКонтекстноеМеню - 163 - true - - CheckBoxField - Auto - true - Left - true - - true true @@ -458,11 +449,12 @@ <key>ru</key> - <value>Субъекты РФ</value> + <value>Субъекты РФ поля</value> + false - СубъектыРФГруппаРасширеннаяПодсказка - 152 + СубъектыРФПоляРасширеннаяПодсказка + 223 Label true true @@ -590,6 +582,7 @@ СубъектыРФ.Загружено + Left true @@ -614,7 +607,7 @@ Right ru - Загрузка истории переименования, переподчинения или исключения адресных сведений в адресном классификаторе. + Загрузка истории переименования, переподчинения или исключения адресных сведений в адресном классификаторе. Button @@ -797,7 +790,7 @@ ru - С веб-сайта 1С + С Портала 1С:ИТС САЙТ diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index 88828260a..779b01b53 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + // Форма параметризуется. Необязательные параметры: // // КодРегионаДляЗагрузки - Число, Строка, Массив - Код субъекта РФ (или их массив), загрузка которого @@ -32,7 +40,6 @@ Возврат; КонецЕсли; - АдресныйКлассификаторДоступен = АдресныйКлассификаторСлужебный.ПроверитьНачальноеЗаполнение(); ДоступнаЗагрузкаАдресныхСведенийИзИнтернет = АдресныйКлассификаторСлужебный.ДоступнаЗагрузкаАдресныхСведенийИзИнтернет(); Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") @@ -54,10 +61,6 @@ ТаблицаРегионов.Колонки.Добавить("Загружать", Новый ОписаниеТипов("Булево")); ТаблицаРегионов.Колонки.Добавить("РежимРаботы", Новый ОписаниеТипов("Строка")); - Для Каждого Регион Из ТаблицаРегионов Цикл - Регион.Представление = " " + Формат(Регион.КодСубъектаРФ, "ЧЦ=2; ЧН=; ЧВН=; ЧГ=") + ", " + Регион.Представление; - КонецЦикла; - Если Параметры.Свойство("ВыборАдресаПоПочтовомуИндексу") И КодИсточникаЗагрузки = "САЙТ" Тогда РежимРаботы = "ОБНОВЛЕНИЕ"; ПочтовыйИндекс = Параметры.Индекс; @@ -172,14 +175,6 @@ СохраняемыеВНастройкахДанныеМодифицированы = Истина; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаКомандЗагрузкиПанель", "ГоризонтальноеПоложение", ГоризонтальноеПоложениеЭлемента.Центр); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отмена", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СубъектыРФ", "ВариантУправленияВысотой", ВариантУправленияВысотойТаблицы.ВСтрокахТаблицы); - - КонецЕсли; - КонецПроцедуры &НаСервере @@ -229,7 +224,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура АдресЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -327,7 +322,7 @@ ЗагрузитьКлассификаторССайта(); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Не указан вариант загрузки классификатора.'") ); + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не указан вариант загрузки классификатора.'") ); КонецЕсли; @@ -424,7 +419,8 @@ Оповещение.ДополнительныеПараметры.Вставить("КодИсточникаЗагрузки", КодИсточника); Оповещение.ДополнительныеПараметры.Вставить("АдресЗагрузки", АдресИсточника); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + КонецПроцедуры // Завершение диалога предложения расширения для работы с файлами. @@ -626,7 +622,7 @@ // Переключаем режим - страницу. Элементы.ШагиЗагрузки.ТекущаяСтраница = Элементы.ОжиданиеЗагрузки; - ТекстСостоянияЗагрузки = НСтр("ru = 'Загрузка файлов с сайта поддержки пользователей...'"); + ТекстСостоянияЗагрузки = НСтр("ru = 'Загрузка файлов с Портала 1С:ИТС...'"); ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ПрогрессВыполнения", ЭтотОбъект); Задание = ЗапуститьФоновуюЗагрузкуССайтаНаСервере(КодыРегионов, ЗагружатьИсториюИзмененийАдресныхОбъектов, УникальныйИдентификатор); @@ -692,9 +688,12 @@ &НаСервереБезКонтекста Функция ЗапуститьФоновуюЗагрузкуССайтаНаСервере(КодыРегионов, ЗагружатьИсторию, УникальныйИдентификатор) + ПараметрыЗагрузки = АдресныйКлассификаторСлужебный.ПараметрыЗагрузкиКлассификатораАдресов(); + ПараметрыЗагрузки.ЗагружатьИсториюАдресов = ЗагружатьИсторию; + ПараметрыВызоваСервера = Новый Массив; ПараметрыВызоваСервера.Добавить(КодыРегионов); - ПараметрыВызоваСервера.Добавить(ЗагружатьИсторию); + ПараметрыВызоваСервера.Добавить(ПараметрыЗагрузки); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка адресного классификатора с сайта'"); @@ -846,8 +845,16 @@ &НаСервереБезКонтекста Функция ЗапуститьФоновуюЗагрузкуНаСервере(Знач КодыРегионов, Знач ОписаниеФайловЗагрузки, Знач Режим, Знач ЗагружатьИсториюИзмененийАдресныхОбъектов, Знач УникальныйИдентификатор) + Коды = Новый Массив; + Для каждого КодРегиона Из КодыРегионов Цикл + Коды.Добавить(КодРегиона.Значение); + КонецЦикла; + + ПараметрыЗагрузки = АдресныйКлассификаторСлужебный.ПараметрыЗагрузкиКлассификатораАдресов(); + ПараметрыЗагрузки.ЗагружатьИсториюАдресов = ЗагружатьИсториюИзмененийАдресныхОбъектов; + ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(КодыРегионов); + ПараметрыМетода.Добавить(Коды); // Файлы преобразуем в двоичные данные - хранилище не может быть разделено с сеансом фонового задания. ОписаниеФайлов = Новый Массив; @@ -858,8 +865,7 @@ ОписаниеФайлов.Добавить(ДанныеФайла); КонецЦикла; ПараметрыМетода.Добавить(ОписаниеФайлов); - ПараметрыМетода.Добавить(Режим); - ПараметрыМетода.Добавить(ЗагружатьИсториюИзмененийАдресныхОбъектов); + ПараметрыМетода.Добавить(ПараметрыЗагрузки); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка адресного классификатора'"); @@ -873,10 +879,10 @@ &НаКлиенте Функция КодыРегионовДляЗагрузки() - Результат = Новый Массив; + Результат = Новый СписокЗначений; - Для Каждого Регион Из СубъектыРФ.НайтиСтроки( Новый Структура("Загружать", Истина) ) Цикл - Результат.Добавить(Регион.КодСубъектаРФ); + Для Каждого Регион Из СубъектыРФ.НайтиСтроки(Новый Структура("Загружать", Истина)) Цикл + Результат.Добавить(Регион.КодСубъектаРФ, Регион.Представление); КонецЦикла; Возврат Результат; diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl index 7d993c07c..d3a37f0fe 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных // Флаг подтверждения, используется при закрытии. @@ -21,14 +29,6 @@ // Автосохранение настроек СохраняемыеВНастройкахДанныеМодифицированы = Истина; - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаКомандЗагрузкиПанель", "ГоризонтальноеПоложение", ГоризонтальноеПоложениеЭлемента.Центр); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СубъектыРФ", "ВариантУправленияВысотой", ВариантУправленияВысотойТаблицы.ВСтрокахТаблицы); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -59,7 +59,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СубъектыРФВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -234,7 +234,7 @@ КонецЕсли; Если Задание.Статус = "Выполнено" Тогда - Элементы.ШагиОчистки.ТекущаяСтраница = Элементы.УспешноеЗавершение; + Элементы.ШагиОчистки.ТекущаяСтраница = Элементы.УспешноеЗавершение; ТекстОписанияОчистки = НСтр("ru = 'Адресный классификатор успешно очищен.'"); ОбновитьПовторноИспользуемыеЗначения(); @@ -247,7 +247,7 @@ Элементы.ШагиОчистки.ТекущаяСтраница = Элементы.ВыборРегионовОчистки; ТекстОшибки = НСтр("ru = 'Не удается очистить адресный классификатор.'"); ТекстОшибки = ТекстОшибки + Символы.ПС + НСтр("ru = 'Техническая информация:'") + Задание.ПодробноеПредставлениеОшибки; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl index 06425cd29..2eebaebe6 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl index 40bd5aff0..379b2870b 100644 --- a/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -51,7 +59,7 @@ ТекДата = ТекущаяУниверсальнаяДатаВМиллисекундах(); ИдентификаторУдаления = Цел(Цел(ТекДата/1000)/ПериодИдентификатораУдаления)*ПериодИдентификатораУдаления; - КомментарийСсылка = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + КомментарийСсылка = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); ОбластьДанныхСсылка = РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку("0"); НаборЗаписей = СоздатьНаборЗаписей(); diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl index ce9bc2f3c..411e752d4 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборРеквизитовОбъекта/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -41,15 +48,6 @@ ЗначениеВРеквизитФормы(ДеревоРеквизитов, "РеквизитыОбъекта"); ВерсионированиеОбъектовПереопределяемый.ПриВыбореРеквизитовОбъекта(Параметры.Ссылка, РеквизитыОбъекта); - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.РеквизитыОбъектаВыбрать, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ФормаУстановитьФлажки, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ФормаСнятьФлажки, Элементы.ФормаКоманднаяПанель); - - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl index 4af1512b9..4ce636c37 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -204,7 +212,7 @@ Результат = ПерейтиНаВерсиюСервер(Ссылка, ТекущиеДанные.НомерВерсии, ОтменятьПроведение); Если Результат = "ОшибкаВосстановления" Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщенияОбОшибке); ИначеЕсли Результат = "ОшибкаПроведения" Тогда ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Переход на версию не был выполнен по причине: diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl index 4bc2acbef..855ec6f7d 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -60,7 +67,7 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовФормы +#Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ТаблицаОтчетаВыбор(Элемент, Область, СтандартнаяОбработка) diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl index f93ea32ff..cede2d3c8 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl index 2d6cd1fea..495a1e8e0 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийЭлементовТаблицыФормыСписок diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl index f8fd1829d..9a4f40872 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -143,10 +151,6 @@ // Изменения в табличных частях. ИзмененияТабличныхЧастей = РезультатСравнения["ТабличныеЧасти"]["и"]; - // Данная функциональность пока не реализуется. - ДобавленныеТабличныеЧасти = РезультатСравнения["ТабличныеЧасти"]["д"]; - УдаленныеТабличныеЧасти = РезультатСравнения["ТабличныеЧасти"]["у"]; - Для Каждого ЭлементСоответствия Из ВерсияОбъекта.ТабличныеЧасти Цикл ИмяТаблицы = ЭлементСоответствия.Ключ; @@ -382,9 +386,6 @@ Для ТекСчетчикУникальныйИд = 1 По СчетчикУникальныйИд[ИмяТабличнойЧасти] Цикл СтрокаУникальныйИдИзменена = Ложь; - // В случае если найдено изменение, необходимо так же показать изначальную версию, - // от которой происходят изменения. - НачальнаяВерсияЗаполнена = Ложь; // Поиск по всем версиям изменений по текущей строке (УникальныйИд = ТекСчетчикУникальныйИд) // если строка была удалена, то поиск можно прервать и перейти к следующей diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl index 80ddd56a8..0960288d9 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -23,4 +31,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Module.bsl index 2cd660d32..cfbcc7bea 100644 --- a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Module.bsl @@ -1,10 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ТолькоПросмотр = Истина; + ТолькоПросмотр = (Параметры.ТолькоПросмотр = Истина); // также может быть Неопределено КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/RecordSetModule.bsl b/SSL/src/InformationRegisters/ВерсииПодсистем/RecordSetModule.bsl new file mode 100644 index 000000000..6eed2fcde --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/RecordSetModule.bsl @@ -0,0 +1,55 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + НепроверяемыеРеквизиты = Новый Массив(); + Для каждого ЗаписьВерсии Из ЭтотОбъект Цикл + Если Не ПустаяСтрока(ЗаписьВерсии.Версия) И Не ЭтоПолныйНомерВерсии(ЗаписьВерсии.Версия) Тогда + ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректный номер версии: %1 (ожидалось значение в виде ""1.2.3.4"")'"), ЗаписьВерсии.Версия)); + Отказ = Истина; + НепроверяемыеРеквизиты.Добавить("Версия"); + КонецЕсли; + КонецЦикла; + + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НепроверяемыеРеквизиты); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЭтоПолныйНомерВерсии(Знач НомерВерсии) + + ЧастиВерсии = СтрРазделить(НомерВерсии, "."); + Если ЧастиВерсии.Количество() <> 4 Тогда + Возврат Ложь; + КонецЕсли; + + ТипЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный)); + Для Разряд = 0 По 3 Цикл + ЧастьВерсии = ЧастиВерсии[Разряд]; + Если ТипЧисло.ПривестиЗначение(ЧастьВерсии) = 0 И ЧастьВерсии <> "0" Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + Возврат Истина; + +КонецФункции + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo b/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo index eca629ad6..c9c78ce53 100644 --- a/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo @@ -70,6 +70,7 @@ + ShowError Use Use @@ -151,6 +152,7 @@ + ShowError Index Use Use diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Module.bsl index 16a8e7323..6740556ea 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl index 83d499df5..af50afa2c 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/ДампыПлатформы/ManagerModule.bsl b/SSL/src/InformationRegisters/ДампыПлатформы/ManagerModule.bsl index 1f0299d47..24ee2daa6 100644 --- a/SSL/src/InformationRegisters/ДампыПлатформы/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДампыПлатформы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Commands/МоиБизнесПроцессы/CommandModule.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Commands/МоиБизнесПроцессы/CommandModule.bsl index 0fe3fe0f0..15e3b1920 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Commands/МоиБизнесПроцессы/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Commands/МоиБизнесПроцессы/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl index 2bd985279..713ee90dc 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl index a6170bd2f..0607836a7 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl index 2e8bb206f..67177ed68 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl index 568aab9d2..1d861d2df 100644 --- a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl index e5a49c43d..337b1fe1f 100644 --- a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -97,4 +105,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ManagerModule.bsl b/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ManagerModule.bsl index 6536d0976..164487ae0 100644 --- a/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl index 7eb3a897a..183211d22 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl @@ -1,11 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыФормы = Новый Структура("ДатыЗапретаЗагрузкиДанных", Истина); - ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения", ПараметрыФормы); - + ДатыЗапретаИзмененияСлужебныйКлиент.ОткрытьДатыЗапретаЗагрузкиДанных( + ?(ПараметрКоманды <> Неопределено, ПараметрКоманды.Источник, Неопределено)); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl index d100dea40..1e9785f12 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl @@ -1,9 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения"); + ДатыЗапретаИзмененияСлужебныйКлиент.ОткрытьДатыЗапретаИзмененияДанных( + ?(ПараметрКоманды <> Неопределено, ПараметрКоманды.Источник, Неопределено)); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form index fb71e2f28..3f438c3cc 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form @@ -46,15 +46,6 @@ Tumbler 3 - - - ru - Не установлены - - - НетЗапрета - - ru @@ -767,7 +758,6 @@ CommonPicture.СостоянияПользователей - SelectionPresentationAndChoice true @@ -1012,10 +1002,6 @@ true true true - - ru - ДП=01.01.0001 - true true true @@ -2573,7 +2559,6 @@ HorizontalIfPossible Collapsible - true Button NormalSeparation true diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index fffd37e22..dd41960fb 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -78,8 +85,6 @@ НСтр("ru = 'Даты запрета загрузки данных прошлых периодов из других программ отключены в настройках.'"); Заголовок = НСтр("ru = 'Даты запрета загрузки данных'"); - Элементы.УстановкаДатыЗапрета.СписокВыбора.НайтиПоЗначению("НетЗапрета").Представление = - НСтр("ru = 'Не установлено'"); Элементы.УстановкаДатыЗапрета.СписокВыбора.НайтиПоЗначению("ДляВсехПользователей").Представление = НСтр("ru = 'Для всех информационных баз'"); Элементы.УстановкаДатыЗапрета.СписокВыбора.НайтиПоЗначению("ПоПользователям").Представление = @@ -116,17 +121,16 @@ Элементы.ИспользованиеДатЗапретаВыключеноНадпись.Заголовок = НСтр("ru = 'Даты запрета ввода и редактирования данных прошлых периодов отключены в настройках программы.'"); - + Элементы.ПользователиПолноеПредставление.Заголовок = + ?(ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"), + НСтр("ru = 'Пользователь, группа пользователей'"), НСтр("ru = 'Пользователь'")); ЗначениеДляВсехПользователей = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей; - СписокТиповПользователей.Добавить( Тип("СправочникСсылка.Пользователи"), НСтр("ru = 'Пользователь'")); - СписокТиповПользователей.Добавить( Тип("СправочникСсылка.ВнешниеПользователи"), НСтр("ru = 'Внешний пользователь'")); - НавигационнаяСсылка = - "e1cib/command/РегистрСведений.ДатыЗапретаИзменения.Команда.ДатыЗапретаИзмененияДанных"; + НавигационнаяСсылка = "e1cib/command/РегистрСведений.ДатыЗапретаИзменения.Команда.ДатыЗапретаИзмененияДанных"; КонецЕсли; Список = Элементы.СпособУказанияДатыЗапрета.СписокВыбора; @@ -150,11 +154,8 @@ Список.Удалить(Список.НайтиПоЗначению("ПоОбъектам")); КонецЕсли; - ИспользоватьВнешнихПользователей = ИспользоватьВнешнихПользователей - И ВнешниеПользователи.ИспользоватьВнешнихПользователей(); - - СправочникВнешниеПользователиДоступен = - ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи); + ИспользоватьВнешнихПользователей = ВнешниеПользователи.ИспользоватьВнешнихПользователей(); + СправочникВнешниеПользователиДоступен = ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи); ОбновитьНаСервере(); @@ -166,8 +167,7 @@ &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - Если ВРег(ИсточникВыбора.ИмяФормы) - = ВРег("РегистрСведений.ДатыЗапретаИзменения.Форма.РедактированиеДатыЗапрета") Тогда + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("РегистрСведений.ДатыЗапретаИзменения.Форма.РедактированиеДатыЗапрета") Тогда Если ВыбранноеЗначение <> Неопределено Тогда ВыделенныеСтроки = Элементы.ДатыЗапрета.ВыделенныеСтроки; @@ -178,8 +178,8 @@ Строка.КоличествоДнейРазрешения = ВыбранноеЗначение.КоличествоДнейРазрешения; Строка.ДатаЗапрета = ВыбранноеЗначение.ДатаЗапрета; ЗаписатьОписаниеИДатуЗапрета(Строка); - Строка.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(Строка); КонецЦикла; + УстановитьВычисляемыеПоля(ДатыЗапрета.ПолучитьЭлементы()); ОбновитьНаличиеДатЗапретаТекущегоПользователя(); КонецЕсли; @@ -264,30 +264,19 @@ КонецЕсли; ТекущаяУстановкаДатыЗапрета = ТекущаяУстановкаДатыЗапрета(Параметры.ДатыЗапретаЗагрузкиДанных); - - Если ТекущаяУстановкаДатыЗапрета = "ПоПользователям" - И ВыбранноеЗначение = "ДляВсехПользователей" Тогда - + Если ТекущаяУстановкаДатыЗапрета = "ПоПользователям" И ВыбранноеЗначение = "ДляВсехПользователей" Тогда ТекстВопроса = НСтр("ru = 'Отключить все даты запрета, кроме установленных для всех пользователей?'"); - - ИначеЕсли (ТекущаяУстановкаДатыЗапрета = "ПоПользователям" Или ТекущаяУстановкаДатыЗапрета = "ДляВсехПользователей") - И ВыбранноеЗначение = "НетЗапрета" Тогда - - ТекстВопроса = НСтр("ru = 'Отключить все установленные даты запрета?'") - - КонецЕсли; - - Если ЗначениеЗаполнено(ТекстВопроса) Тогда ПоказатьВопрос( Новый ОписаниеОповещения( "УстановкаДатыЗапретаОбработкаВыбораПродолжение", ЭтотОбъект, ВыбранноеЗначение), ТекстВопроса, РежимДиалогаВопрос.ДаНет); - Иначе - УстановкаДатыЗапрета = ВыбранноеЗначение; - ИзменитьУстановкуДатыЗапрета(ВыбранноеЗначение, Ложь); + Возврат; КонецЕсли; + УстановкаДатыЗапрета = ВыбранноеЗначение; + ИзменитьУстановкуДатыЗапрета(ВыбранноеЗначение, Ложь); + КонецПроцедуры &НаКлиенте @@ -369,7 +358,7 @@ Возврат; КонецЕсли; - КоличествоДнейРазрешения = Текст; + КоличествоДнейРазрешения = Число(Текст); ДатыЗапретаИзмененияСлужебныйКлиентСервер.УточнитьНастройкуДатыЗапретаПриИзменении(ЭтотОбъект); ЗаписатьОбщуюДатуЗапретаСОписанием(); @@ -450,31 +439,23 @@ ТекущиеДанные = Элемент.ТекущиеДанные; Поле = Элемент.ТекущийЭлемент; - Если ТекущиеДанные.Пользователь = ЗначениеДляВсехПользователей Тогда - Отказ = Истина; - ИначеЕсли Поле <> Элементы.ПользователиПолноеПредставление - И Не ЗначениеЗаполнено(ТекущиеДанные.Представление) Тогда + Если Поле <> Элементы.ПользователиПолноеПредставление И Не ЗначениеЗаполнено(ТекущиеДанные.Представление) Тогда // Все значения, кроме предопределенного значения "<Для всех пользователей>", // должны быть заполнены до установки описания или даты запрета. Элемент.ТекущийЭлемент = Элементы.ПользователиПолноеПредставление; КонецЕсли; - Если Отказ Тогда - Элементы.ПользователиПолноеПредставление.ТолькоПросмотр = Ложь; - Элементы.ПользователиКомментарий.ТолькоПросмотр = Ложь; - Иначе - Элементы.ПользователиКомментарий.ТолькоПросмотр = - Не ЗначениеЗаполнено(ТекущиеДанные.Представление); + Элементы.ПользователиКомментарий.ТолькоПросмотр = + Не ЗначениеЗаполнено(ТекущиеДанные.Представление); + + Если ЗначениеЗаполнено(ТекущиеДанные.Представление) Тогда + ОписаниеДанных = Новый Структура("ДатаЗапрета, ОписаниеДатыЗапрета, Комментарий"); + ЗаполнитьЗначенияСвойств(ОписаниеДанных, ТекущиеДанные); - Если ЗначениеЗаполнено(ТекущиеДанные.Представление) Тогда - ОписаниеДанных = Новый Структура("ДатаЗапрета, ОписаниеДатыЗапрета, Комментарий"); - ЗаполнитьЗначенияСвойств(ОписаниеДанных, ТекущиеДанные); - - ЗаблокироватьНаборЗаписейПользователяНаСервере(ТекущиеДанные.Пользователь, - АдресУстановленныхБлокировок, ОписаниеДанных); - - ЗаполнитьЗначенияСвойств(ТекущиеДанные, ОписаниеДанных); - КонецЕсли; + ЗаблокироватьНаборЗаписейПользователяНаСервере(ТекущиеДанные.Пользователь, + АдресУстановленныхБлокировок, ОписаниеДанных); + + ЗаполнитьЗначенияСвойств(ТекущиеДанные, ОписаниеДанных); КонецЕсли; КонецПроцедуры @@ -493,8 +474,7 @@ ДополнительныеПараметры.Вставить("ДатыЗапретаДляВсехПользователей", ТекущиеДанные.Пользователь = ЗначениеДляВсехПользователей); - Если ЗначениеЗаполнено(ТекущиеДанные.Представление) - И Не ТекущиеДанные.БезДатыЗапрета Тогда + Если ЗначениеЗаполнено(ТекущиеДанные.Представление) И Не ТекущиеДанные.БезДатыЗапрета Тогда // Для удаления пользователей с записями требуется подтверждение. Если ДополнительныеПараметры.ДатыЗапретаДляВсехПользователей Тогда ТекстВопроса = НСтр("ru = 'Отключить даты запрета для всех пользователей?'"); @@ -846,8 +826,11 @@ Отказ = Истина; ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; + ВыбраноНесколькоРазделов = Элементы.ДатыЗапрета.ВыделенныеСтроки.Количество() > 1; - Если ТекущиеДанные.ЭтоРаздел Тогда + Если ВыбраноНесколькоРазделов Тогда + ТекстВопроса = НСтр("ru = 'Отключить даты запрета для выбранных разделов?'"); + ИначеЕсли ТекущиеДанные.ЭтоРаздел Тогда Если ЗначениеЗаполнено(ТекущиеДанные.Раздел) Тогда Если ТекущиеДанные.ПолучитьЭлементы().Количество() > 0 Тогда ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -864,24 +847,19 @@ НСтр("ru = 'Отключить дату запрета для объекта ""%1""?'"), ТекущиеДанные.Объект); КонецЕсли; - Удалить = Истина; - + Если ВыбраноНесколькоРазделов Тогда + ПоказатьВопрос(Новый ОписаниеОповещения("ДатыЗапретаПередУдалениемЗавершение", + ЭтотОбъект, Элементы.ДатыЗапрета.ВыделенныеСтроки), + ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Возврат; + КонецЕсли; + Если ТекущиеДанные.ЭтоРаздел Тогда - Удалить = Ложь; ЭлементыРаздела = ТекущиеДанные.ПолучитьЭлементы(); - Если ДатаЗапретаУстановлена(ТекущиеДанные, ТекущийПользователь) - Или ЭлементыРаздела.Количество() > 0 Тогда + Если ДатаЗапретаУстановлена(ТекущиеДанные, ТекущийПользователь) Или ЭлементыРаздела.Количество() > 0 Тогда // Удаление даты запрета для раздела (т.е. всех объектов раздела). - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные); - ДополнительныеПараметры.Вставить("ЭлементыРаздела", ЭлементыРаздела); - ДополнительныеПараметры.Вставить("Удалить", Удалить); - - ПоказатьВопрос( - Новый ОписаниеОповещения( - "ДатыЗапретаПередУдалениемРазделаПродолжение", ЭтотОбъект, ДополнительныеПараметры), + ПоказатьВопрос(Новый ОписаниеОповещения("ДатыЗапретаПередУдалениемРаздела", ЭтотОбъект, ТекущиеДанные), ТекстВопроса, РежимДиалогаВопрос.ДаНет); Иначе ТекстСообщения = НСтр("ru = 'Для отключения даты запрета по конкретному объекту необходимо выбрать интересующий объект в одном из разделов.'"); @@ -892,36 +870,31 @@ Если ДатаЗапретаУстановлена(ТекущиеДанные, ТекущийПользователь) Тогда // Удаление даты запрета для объекта по разделу. - ПоказатьВопрос( - Новый ОписаниеОповещения( - "ДатыЗапретаПередУдалениемОбъектаПродолжение", ЭтотОбъект, ТекущиеДанные), - ТекстВопроса, РежимДиалогаВопрос.ДаНет); + ПоказатьВопрос(Новый ОписаниеОповещения("ДатыЗапретаПередУдалениемЗавершение", ЭтотОбъект, + Элементы.ДатыЗапрета.ВыделенныеСтроки), ТекстВопроса, РежимДиалогаВопрос.ДаНет); Возврат; КонецЕсли; - Если Удалить Тогда - ДатыЗапретаПриУдалении(ТекущиеДанные); - КонецЕсли; + ДатыЗапретаПриУдалении(ТекущиеДанные); КонецПроцедуры &НаКлиенте Процедура ДатыЗапретаПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) - Если НоваяСтрока Тогда - Если Не Элементы.ДатыЗапрета.ТекущиеДанные.ЭтоРаздел Тогда - Элементы.ДатыЗапрета.ТекущиеДанные.Раздел = ТекущийРаздел(, Истина); - КонецЕсли; - Если ЭтоВсеПользователи(ТекущийПользователь) - Или Не Элементы.ДатыЗапрета.ТекущиеДанные.ЭтоРаздел Тогда - Элементы.ДатыЗапрета.ТекущиеДанные.ОписаниеДатыЗапрета = "ПроизвольнаяДата"; - КонецЕсли; - Элементы.ДатыЗапрета.ТекущиеДанные.ОписаниеДатыЗапретаПредставление = - ПредставлениеОписанияДатыЗапрета(Элементы.ДатыЗапрета.ТекущиеДанные); - - ПодключитьОбработчикОжидания("ОбработчикОжиданияВыбратьОбъекты", 0.1, Истина); + Если Не НоваяСтрока Тогда + Возврат; КонецЕсли; + Если Не Элементы.ДатыЗапрета.ТекущиеДанные.ЭтоРаздел Тогда + Элементы.ДатыЗапрета.ТекущиеДанные.Раздел = ТекущийРаздел(, Истина); + КонецЕсли; + Если ЭтоВсеПользователи(ТекущийПользователь) Или Не Элементы.ДатыЗапрета.ТекущиеДанные.ЭтоРаздел Тогда + Элементы.ДатыЗапрета.ТекущиеДанные.ОписаниеДатыЗапрета = "ПроизвольнаяДата"; + КонецЕсли; + УстановитьПредставлениеОписанияДатыЗапрета(Элементы.ДатыЗапрета.ТекущиеДанные); + ПодключитьОбработчикОжидания("ОбработчикОжиданияВыбратьОбъекты", 0.1, Истина); + КонецПроцедуры &НаКлиенте @@ -937,8 +910,7 @@ Элементы.ДатыЗапретаПолноеПредставление.ТолькоПросмотр = Ложь; Элементы.ДатыЗапретаОписаниеДатыЗапретаПредставление.ТолькоПросмотр = Ложь; - Элементы.ДатыЗапретаОписаниеДатыЗапретаПредставление.ТолькоПросмотр = Ложь; - + УстановитьПредставлениеОписанияДатыЗапрета(ТекущиеДанные); ОбновитьНаличиеДатЗапретаТекущегоПользователя(); КонецПроцедуры @@ -949,10 +921,7 @@ СтандартнаяОбработка = Ложь; ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; - - Если ТекущиеДанные <> Неопределено - И ТекущиеДанные.Объект = ВыбранноеЗначение Тогда - + Если ТекущиеДанные <> Неопределено И ТекущиеДанные.Объект = ВыбранноеЗначение Тогда Возврат; КонецЕсли; @@ -1011,12 +980,9 @@ ОписаниеОбъекта.Представление = Строка(ТекущийОбъект); ОписаниеОбъекта.ПолноеПредставление = ОписаниеОбъекта.Представление; ОписаниеОбъекта.ОписаниеДатыЗапрета = "ПроизвольнаяДата"; - - ОписаниеОбъекта.ОписаниеДатыЗапретаПредставление = - ПредставлениеОписанияДатыЗапрета(ОписаниеОбъекта); - ОписаниеОбъекта.ЗаписьСуществует = ЗаписатьДаты; КонецЦикла; + УстановитьВычисляемыеПоля(КоллекцияОбъектов); Если ИдентификаторРаздела <> Неопределено Тогда Элементы.ДатыЗапрета.Развернуть(ИдентификаторРаздела, Истина); @@ -1225,24 +1191,46 @@ // Оформление пустой даты. Элемент = УсловноеОформление.Элементы.Добавить(); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДатыЗапретаДатаЗапрета.Имя); - Элемент.Оформление.УстановитьЗначениеПараметра("Формат", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ДП='%1'", НСтр("ru = 'Без запрета'"))); - ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); - ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ""); - ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатыЗапрета.ЗаписьСуществует"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатыЗапрета.ДатаЗапрета"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = '00010101'; + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + // Оформление неустановленного значения даты запрета. + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДатыЗапретаОписаниеДатыЗапретаПредставление.Имя); + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатыЗапрета.ДатаЗапрета"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + // Дата запрета по умолчанию. + Элемент = УсловноеОформление.Элементы.Добавить(); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Во всех остальных случаях, когда ниже нет уточняющих настроек.'")); + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользователиКомментарий.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиДатЗапрета.Пользователь"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + СписокЗначений = Новый СписокЗначений; + СписокЗначений.Добавить(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); + СписокЗначений.Добавить(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз); + ОтборЭлемента.ПравоеЗначение = СписокЗначений; + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиДатЗапрета.Комментарий"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; КонецПроцедуры @@ -1312,7 +1300,11 @@ РежимДиалогаВопрос.ДаНет); Иначе СпособУказанияДатыЗапрета = ВыбранноеЗначение; - ПрочитатьДанныеПользователя(ЭтотОбъект, ВыбранноеЗначение, Данные); + ТекстОшибки = ""; + ПрочитатьДанныеПользователя(ЭтотОбъект, ТекстОшибки, ВыбранноеЗначение, Данные); + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -1333,9 +1325,13 @@ Элементы.Пользователи.Обновить(); - ПрочитатьДанныеПользователя(ЭтотОбъект, - ДополнительныеПараметры.ВыбранноеЗначение, - ДополнительныеПараметры.Данные); + ТекстОшибки = ""; + ПрочитатьДанныеПользователя(ЭтотОбъект, ТекстОшибки, + ДополнительныеПараметры.ВыбранноеЗначение, ДополнительныеПараметры.Данные); + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); + КонецЕсли; КонецПроцедуры @@ -1424,8 +1420,7 @@ ОписаниеРаздела.ОписаниеДатыЗапрета = ""; ОписаниеРаздела.ПолучитьЭлементы().Очистить(); ОписаниеРаздела.ЗаписьСуществует = Ложь; - ОписаниеРаздела.ОписаниеДатыЗапретаПредставление = - ПредставлениеОписанияДатыЗапрета(ОписаниеРаздела); + УстановитьПредставлениеОписанияДатыЗапрета(ОписаниеРаздела); КонецЕсли; КонецЦикла; Иначе @@ -1463,18 +1458,24 @@ КонецПроцедуры &НаКлиенте -Процедура ДатыЗапретаПередУдалениемРазделаПродолжение(Ответ, ДополнительныеПараметры) Экспорт +Процедура ДатыЗапретаПередУдалениемРаздела(Ответ, ТекущиеДанные) Экспорт Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; - ТекущиеДанные = ДополнительныеПараметры.ТекущиеДанные; - ЭлементыРаздела = ДополнительныеПараметры.ЭлементыРаздела; + ОтключитьДатуЗапретаДляРаздела(ТекущиеДанные); + ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.ДатыЗапретаИзменения")); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтключитьДатуЗапретаДляРаздела(Знач ТекущиеДанные) + + ЭлементыРаздела = ТекущиеДанные.ПолучитьЭлементы(); ОбъектыРаздела = Новый Массив; ОбъектыРаздела.Добавить(ТекущиеДанные.Раздел); - Для Каждого ЭлементДанных Из ЭлементыРаздела Цикл ОбъектыРаздела.Добавить(ЭлементДанных.Объект); КонецЦикла; @@ -1485,38 +1486,41 @@ ЭлементыРаздела.Очистить(); ТекущиеДанные.ДатаЗапрета = '00010101'; ТекущиеДанные.ОписаниеДатыЗапрета = ""; - - Если ДополнительныеПараметры.Удалить Тогда - ДатыЗапретаПриУдалении(ТекущиеДанные); - Иначе - ТекущиеДанные.ОписаниеДатыЗапретаПредставление = - ПредставлениеОписанияДатыЗапрета(ТекущиеДанные); - КонецЕсли; - - ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.ДатыЗапретаИзменения")); - + ТекущиеДанные.КоличествоДнейРазрешения = 0; + УстановитьПредставлениеОписанияДатыЗапрета(ТекущиеДанные); + КонецПроцедуры &НаКлиенте -Процедура ДатыЗапретаПередУдалениемОбъектаПродолжение(Ответ, ТекущиеДанные) Экспорт +Процедура ДатыЗапретаПередУдалениемЗавершение(Ответ, ВыделенныеСтроки) Экспорт Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; - УдалитьЗаписьПользователя(АдресУстановленныхБлокировок, - ТекущийРаздел(), - ТекущиеДанные.Объект, - ТекущийПользователь); - - Если ТекущийРаздел() = ТекущиеДанные.Объект Тогда - // Удалена общая дата. - ДатаЗапрета = '00010101'; - ОписаниеДатыЗапрета = ""; - ЗаписьСуществует = Ложь; - КонецЕсли; - - ДатыЗапретаПриУдалении(ТекущиеДанные); + Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + ТекущиеДанные = ДатыЗапрета.НайтиПоИдентификатору(ВыделеннаяСтрока); + Если ТекущиеДанные = Неопределено Тогда // уже ранее удалено + Продолжить; + КонецЕсли; + + Если ТекущиеДанные.ЭтоРаздел Тогда + ОтключитьДатуЗапретаДляРаздела(ТекущиеДанные); + Продолжить; + КонецЕсли; + + ТекущийРаздел = ТекущиеДанные.ПолучитьРодителя(); + УдалитьЗаписьПользователя(АдресУстановленныхБлокировок, + ТекущийРаздел.Раздел, ТекущиеДанные.Объект, ТекущийПользователь); + Если ТекущийРаздел() = ТекущиеДанные.Объект Тогда + // Удалена общая дата. + ДатаЗапрета = '00010101'; + ОписаниеДатыЗапрета = ""; + ЗаписьСуществует = Ложь; + КонецЕсли; + + ДатыЗапретаПриУдалении(ТекущиеДанные); + КонецЦикла; ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.ДатыЗапретаИзменения")); @@ -1533,20 +1537,16 @@ КонецЕсли; Индекс = ДатыЗапретаЭлементы.Индекс(ТекущиеДанные); - ДатыЗапретаЭлементы.Удалить(Индекс); - Если ДатыЗапретаЭлементы.Количество() <= Индекс И Индекс > 0 Тогда Индекс = Индекс -1; КонецЕсли; Если ДатыЗапретаЭлементы.Количество() > 0 Тогда - Элементы.ДатыЗапрета.ТекущаяСтрока = - ДатыЗапретаЭлементы[Индекс].ПолучитьИдентификатор(); + Элементы.ДатыЗапрета.ТекущаяСтрока = ДатыЗапретаЭлементы[Индекс].ПолучитьИдентификатор(); ИначеЕсли ТекущийРодитель <> Неопределено Тогда - Элементы.ДатыЗапрета.ТекущаяСтрока = - ТекущийРодитель.ПолучитьИдентификатор(); + Элементы.ДатыЗапрета.ТекущаяСтрока = ТекущийРодитель.ПолучитьИдентификатор(); КонецЕсли; ОбновитьНаличиеДатЗапретаТекущегоПользователя(); @@ -1580,7 +1580,11 @@ ТекущийПользователь = СтарыйПользователь; КонецЕсли; - ПрочитатьДанныеПользователя(ЭтотОбъект); + ТекстОшибки = ""; + ПрочитатьДанныеПользователя(ЭтотОбъект, ТекстОшибки); + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); + КонецЕсли; КонецПроцедуры @@ -1611,8 +1615,7 @@ СпособУказанияЗначениеВСписке = Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(СпособУказанияДатыЗапрета); - Если ТекущийПользователь <> Неопределено - И СпособУказанияЗначениеВСписке <> Неопределено Тогда + Если ТекущийПользователь <> Неопределено И СпособУказанияЗначениеВСписке <> Неопределено Тогда ТекущийСпособУказания = ТекущийСпособУказанияДатыЗапрета( ТекущийПользователь, ЕдинственныйРаздел, ЗначениеДляВсехПользователей, НачалоДня); @@ -1620,8 +1623,11 @@ ТекущийСпособУказания = ?(ЗначениеЗаполнено(ТекущийСпособУказания), ТекущийСпособУказания, "ОбщаяДата"); - Если ТекущийСпособУказания <> СпособУказанияЗначениеВСписке.Значение Тогда - + // Предупреждение перед существенным изменением внешнего вида формы. + Если ТекущийСпособУказания <> СпособУказанияЗначениеВСписке.Значение + И Не (СпособУказанияЗначениеВСписке.Значение = "ПоРазделамИОбъектам" + И (ТекущийСпособУказания = "ПоРазделам" Или ТекущийСпособУказания = "ПоОбъектам")) Тогда + ЭлементСписка = Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению( ТекущийСпособУказания); @@ -1630,7 +1636,7 @@ "ОбновитьДанныеПользователяЗавершение", ЭтотОбъект, НовыйПользователь), - ТекстСообщенияСпособУказанияНеИспользован( + ТекстСообщенияИзбыточнаяНастройка( СпособУказанияЗначениеВСписке.Значение, ?(ЭлементСписка = Неопределено, ТекущийСпособУказания, ЭлементСписка.Представление), ТекущийПользователь, @@ -1666,7 +1672,11 @@ ДатыЗапрета.ПолучитьЭлементы().Очистить(); Элементы.ДанныеПользователя.ТекущаяСтраница = Элементы.СтраницаПользовательНеВыбран; Иначе - ПрочитатьДанныеПользователя(ЭтотОбъект); + ТекстОшибки = ""; + ПрочитатьДанныеПользователя(ЭтотОбъект, ТекстОшибки); + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); + КонецЕсли; РазвернутьДанныеПользователя(); КонецЕсли; @@ -1738,7 +1748,6 @@ КонецЕсли; ОписаниеВсехПользователей.Представление = ТекстПредставленияДляВсехПользователей(ЭтотОбъект); ОписаниеВсехПользователей.ПолноеПредставление = ОписаниеВсехПользователей.Представление; - ОписаниеВсехПользователей.Комментарий = ТекстКомментарияДляВсехПользователей(); Выгрузка.Сортировать("ОбщееНазначение Возр, ПолноеПредставление Возр"); ЗначениеВРеквизитФормы(Выгрузка, "ПользователиДатЗапрета"); @@ -1761,14 +1770,9 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ПрочитатьДанныеПользователя(Форма, ТекущийСпособУказания = Неопределено, Данные = Неопределено) +Процедура ПрочитатьДанныеПользователя(Форма, ТекстОшибки, ТекущийСпособУказания = Неопределено, Данные = Неопределено) - Если Форма.УстановкаДатыЗапрета = "НетЗапрета" Тогда - - РазблокироватьВсеЗаписиНаСервере(Форма.АдресУстановленныхБлокировок); - Возврат; - - ИначеЕсли Форма.УстановкаДатыЗапрета = "ПоПользователям" Тогда + Если Форма.УстановкаДатыЗапрета = "ПоПользователям" Тогда НайденныеСтроки = Форма.ПользователиДатЗапрета.НайтиСтроки( Новый Структура("Пользователь", Форма.ТекущийПользователь)); @@ -1825,8 +1829,7 @@ Форма.Элементы.РазрешитьИзменениеДанныхДоДатыЗапрета.ТолькоПросмотр = Истина; Форма.Элементы.КоличествоДнейРазрешения.ТолькоПросмотр = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; Возврат; КонецЕсли; @@ -1861,7 +1864,7 @@ Для Каждого Строка Из ДанныеПользователя Цикл НоваяСтрока = КоллекцияСтрок.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка.Значение); - НоваяСтрока.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(НоваяСтрока); + УстановитьПредставлениеОписанияДатыЗапрета(НоваяСтрока); КоллекцияПодстрок = НоваяСтрока.ПолучитьЭлементы(); Для Каждого Подстрока Из Строка.Значение.СписокПодстрок Цикл @@ -1870,8 +1873,7 @@ ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета( НоваяПодстрока, НоваяПодстрока.ОписаниеДатыЗапрета); - НоваяПодстрока.ОписаниеДатыЗапретаПредставление = - ПредставлениеОписанияДатыЗапрета(НоваяПодстрока); + УстановитьПредставлениеОписанияДатыЗапрета(НоваяПодстрока); КонецЦикла; Если НоваяСтрока.ЭтоРаздел Тогда @@ -2351,9 +2353,7 @@ ТекущиеЗначенияСвойств.ДатаЗапрета = ПрочитанныеСвойства.ДатаЗапрета; ТекущиеЗначенияСвойств.ОписаниеДатыЗапрета = ПрочитанныеСвойства.ОписаниеДатыЗапрета; ТекущиеЗначенияСвойств.КоличествоДнейРазрешения = ПрочитанныеСвойства.КоличествоДнейРазрешения; - РасчетныеСвойства = Новый Структура; - РасчетныеСвойства.Вставить("ОписаниеДатыЗапретаПредставление", ПредставлениеОписанияДатыЗапрета(ПрочитанныеСвойства)); - ЗаполнитьЗначенияСвойств(ТекущиеЗначенияСвойств, РасчетныеСвойства); + УстановитьПредставлениеОписанияДатыЗапрета(ТекущиеЗначенияСвойств); КонецЕсли; КонецПроцедуры @@ -2638,11 +2638,6 @@ &НаКлиенте Процедура ОбновитьНаличиеДатЗапретаТекущегоПользователя() - Если Элементы.Пользователи.ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - ТекущиеДанные = Элементы.Пользователи.ТекущиеДанные; - БезДатыЗапрета = Истина; Если СпособУказанияДатыЗапрета = "ОбщаяДата" Тогда Данные = ТекущиеДанныеОбщейДатыЗапрета(); @@ -2667,7 +2662,9 @@ КонецЦикла; КонецЕсли; - ТекущиеДанные.БезДатыЗапрета = БезДатыЗапрета; + Если Элементы.Пользователи.ТекущиеДанные <> Неопределено Тогда + Элементы.Пользователи.ТекущиеДанные.БезДатыЗапрета = БезДатыЗапрета; + КонецЕсли; КонецПроцедуры @@ -2972,7 +2969,6 @@ КонецЕсли; Если СпособУказанияДатыЗапрета <> СпособУказанияВБазеДанных - И УстановкаДатыЗапретаВБазеДанных <> "НетЗапрета" И (УстановкаДатыЗапрета = УстановкаДатыЗапретаВБазеДанных Или ЭтоВсеПользователи(ТекущийПользователь) ) Тогда @@ -2984,7 +2980,7 @@ КонецЕсли; Если СпособУказанияВБазеДанныхПредставление <> "" Тогда - ТекстУведомления = ТекстУведомления + ТекстСообщенияСпособУказанияНеИспользован( + ТекстУведомления = ТекстУведомления + ТекстСообщенияИзбыточнаяНастройка( СпособУказанияДатыЗапрета, СпособУказанияВБазеДанныхПредставление, ТекущийПользователь, @@ -3000,10 +2996,6 @@ Процедура ПолучитьТекущиеНастройки(УстановкаДатыЗапрета, СпособУказания, Знач Параметры) УстановкаДатыЗапрета = ТекущаяУстановкаДатыЗапрета(Параметры.ДатыЗапретаЗагрузкиДанных); - Если УстановкаДатыЗапрета = "НетЗапрета" Тогда - Возврат; - КонецЕсли; - СпособУказания = ТекущийСпособУказанияДатыЗапрета( Параметры.Пользователь, Параметры.ЕдинственныйРаздел, @@ -3063,7 +3055,7 @@ КонецПопытки; Если РезультатыЗапроса[0].Пустой() Тогда - ТекущаяУстановкаДатЗапрета = "НетЗапрета"; + ТекущаяУстановкаДатЗапрета = "ДляВсехПользователей"; ИначеЕсли РезультатыЗапроса[1].Пустой() Тогда ТекущаяУстановкаДатЗапрета = "ДляВсехПользователей"; @@ -3078,19 +3070,15 @@ &НаСервере Процедура УстановитьВидимость() - ИзменитьВидимость(Элементы.НастройкаДатыЗапрета, УстановкаДатыЗапрета <> "НетЗапрета"); + ИзменитьВидимость(Элементы.НастройкаДатыЗапрета, Истина); Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда - Если УстановкаДатыЗапрета = "НетЗапрета" Тогда - РасширеннаяПодсказка = НСтр("ru = 'Разрешена загрузка из других программ любых данных прошлых периодов.'"); - ИначеЕсли УстановкаДатыЗапрета = "ДляВсехПользователей" Тогда + Если УстановкаДатыЗапрета = "ДляВсехПользователей" Тогда РасширеннаяПодсказка = НСтр("ru = 'Даты запрета загрузки данных из других программ действуют одинаково для всех пользователей.'"); Иначе РасширеннаяПодсказка = НСтр("ru = 'Персональная настройка дат запрета загрузки данных прошлых периодов из других программ для выбранных пользователей.'"); КонецЕсли; Иначе - Если УстановкаДатыЗапрета = "НетЗапрета" Тогда - РасширеннаяПодсказка = НСтр("ru = 'Разрешены ввод и редактирование любых данных прошлых периодов.'"); - ИначеЕсли УстановкаДатыЗапрета = "ДляВсехПользователей" Тогда + Если УстановкаДатыЗапрета = "ДляВсехПользователей" Тогда РасширеннаяПодсказка = НСтр("ru = 'Даты запрета ввода и редактирования данных прошлых периодов действуют одинаково для всех пользователей.'"); Иначе РасширеннаяПодсказка = НСтр("ru = 'Персональная настройка дат запрета ввода и редактирования данных прошлых периодов для выбранных пользователей.'"); @@ -3098,10 +3086,6 @@ КонецЕсли; Элементы.УстановкаДатыЗапретаПояснение.Заголовок = РасширеннаяПодсказка; - Если УстановкаДатыЗапрета = "НетЗапрета" Тогда - Возврат; - КонецЕсли; - Если УстановкаДатыЗапрета <> "ДляВсехПользователей" Тогда ИзменитьВидимость(Элементы.УстановкаПоПользователям, Истина); Элементы.ТекущийПользовательПредставление.ОтображатьЗаголовок = Истина; @@ -3136,10 +3120,7 @@ Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Параметры.ДатыЗапретаЗагрузкиДанных); - Если ВыбранноеЗначение = "НетЗапрета" Тогда - Запрос.УстановитьПараметр("ОставитьДляВсехПользователей", Ложь); - - ИначеЕсли ВыбранноеЗначение = "ДляВсехПользователей" Тогда + Если ВыбранноеЗначение = "ДляВсехПользователей" Тогда Запрос.УстановитьПараметр("ОставитьДляВсехПользователей", Истина); Иначе Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Неопределено); @@ -3196,7 +3177,11 @@ КонецЕсли; ПрочитатьПользователей(); - ПрочитатьДанныеПользователя(ЭтотОбъект); + ТекстОшибки = ""; + ПрочитатьДанныеПользователя(ЭтотОбъект, ТекстОшибки); + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); + КонецЕсли; УстановитьВидимость(); @@ -3350,7 +3335,11 @@ КонецЦикла; НаборЗаписей.Записать(); - ПрочитатьДанныеПользователя(ЭтотОбъект); + ТекстОшибки = ""; + ПрочитатьДанныеПользователя(ЭтотОбъект, ТекстОшибки); + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); + КонецЕсли; КонецПроцедуры @@ -3402,45 +3391,34 @@ // Изменение описания даты запрета. ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПользовательПредставление", ""); + ПараметрыФормы.Вставить("РазделПредставление", ""); + ПараметрыФормы.Вставить("Объект", ""); Если УстановкаДатыЗапрета = "ПоПользователям" Тогда - ПараметрыФормы.Вставить("ПользовательПредставление", - Элементы.Пользователи.ТекущиеДанные.Представление); + ПараметрыФормы.ПользовательПредставление = Элементы.Пользователи.ТекущиеДанные.Представление; Иначе - ПараметрыФормы.Вставить("ПользовательПредставление", - ТекстПредставленияДляВсехПользователей(ЭтотОбъект)); + ПараметрыФормы.ПользовательПредставление = ТекстПредставленияДляВсехПользователей(ЭтотОбъект); КонецЕсли; + ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; + ПараметрыФормы.Вставить("ОписаниеДатыЗапрета", ТекущиеДанные.ОписаниеДатыЗапрета); + ПараметрыФормы.Вставить("КоличествоДнейРазрешения", ТекущиеДанные.КоличествоДнейРазрешения); + ПараметрыФормы.Вставить("ДатаЗапрета", ТекущиеДанные.ДатаЗапрета); + ПараметрыФормы.Вставить("НетДатыЗапретаПредставление", НетДатыЗапретаПредставление(ТекущиеДанные)); + Если ВыделенныеСтроки.Количество() = 1 Тогда - Если СпособУказанияДатыЗапрета = "ПоОбъектам" Тогда - - Если Элементы.ДатыЗапрета.ТекущиеДанные.ЭтоРаздел Тогда - ПараметрыФормы.Вставить("РазделПредставление", - Элементы.ДатыЗапрета.ТекущиеДанные.Представление); - ПараметрыФормы.Вставить("Объект", ""); - Иначе - ПараметрыФормы.Вставить("РазделПредставление", ""); - ПараметрыФормы.Вставить("Объект", Элементы.ДатыЗапрета.ТекущиеДанные.Объект); - КонецЕсли; + Если ТекущиеДанные.ЭтоРаздел Тогда + ПараметрыФормы.РазделПредставление = ТекущиеДанные.Представление; Иначе - Если Элементы.ДатыЗапрета.ТекущиеДанные.ЭтоРаздел Тогда - ПараметрыФормы.Вставить("РазделПредставление", - Элементы.ДатыЗапрета.ТекущиеДанные.Представление); - Иначе - ПараметрыФормы.Вставить("РазделПредставление", - Элементы.ДатыЗапрета.ТекущиеДанные.ПолучитьРодителя().Представление); - - ПараметрыФормы.Вставить("ОбъектПредставление", Элементы.ДатыЗапрета.ТекущиеДанные.Объект); - КонецЕсли; + ПараметрыФормы.Объект = ТекущиеДанные.Объект; + Если СпособУказанияДатыЗапрета <> "ПоОбъектам" Тогда + ПараметрыФормы.РазделПредставление = ТекущиеДанные.ПолучитьРодителя().Представление; + КонецЕсли; КонецЕсли; Иначе - ПараметрыФормы.Вставить("РазделПредставление", ""); - ПараметрыФормы.Вставить("Объект", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выбранные строки (%1)'"), ВыделенныеСтроки.Количество())); + ПараметрыФормы.Объект = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выбранные строки (%1)'"), ВыделенныеСтроки.Количество()); КонецЕсли; - ПараметрыФормы.Вставить("ОписаниеДатыЗапрета", Элементы.ДатыЗапрета.ТекущиеДанные.ОписаниеДатыЗапрета); - ПараметрыФормы.Вставить("КоличествоДнейРазрешения", Элементы.ДатыЗапрета.ТекущиеДанные.КоличествоДнейРазрешения); - ПараметрыФормы.Вставить("ДатаЗапрета", Элементы.ДатыЗапрета.ТекущиеДанные.ДатаЗапрета); ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.РедактированиеДатыЗапрета", ПараметрыФормы, ЭтотОбъект); @@ -3448,15 +3426,53 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеОписанияДатыЗапрета(Знач Данные) +Процедура УстановитьВычисляемыеПоля(Знач Данные) + + Для каждого СтрокаДанных Из Данные Цикл + УстановитьПредставлениеОписанияДатыЗапрета(СтрокаДанных); + Для каждого СтрокаДанных Из СтрокаДанных.ПолучитьЭлементы() Цикл + УстановитьПредставлениеОписанияДатыЗапрета(СтрокаДанных); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьПредставлениеОписанияДатыЗапрета(Знач Данные) + + // Представление неустановленного значения даты запрета. + Если Не ЗначениеЗаполнено(Данные.ДатаЗапрета) Тогда + Данные.ОписаниеДатыЗапретаПредставление = НетДатыЗапретаПредставление(Данные); + Если Не ПустаяСтрока(Данные.ОписаниеДатыЗапретаПредставление) Тогда + Возврат; + КонецЕсли; + КонецЕсли; Представление = ДатыЗапретаИзмененияСлужебныйКлиентСервер.ОписанияДатЗапрета()[Данные.ОписаниеДатыЗапрета]; Если Данные.КоличествоДнейРазрешения > 0 Тогда Представление = Представление + " (" + Формат(Данные.КоличествоДнейРазрешения, "ЧГ=") + ")"; КонецЕсли; - Возврат Представление; + Данные.ОписаниеДатыЗапретаПредставление = Представление; -КонецФункции +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция НетДатыЗапретаПредставление(Данные) + + Если Данные.ЭтоРаздел И Не Данные.Раздел.Пустая() Тогда + Возврат НСтр("ru = 'Общая дата для всех разделов'"); + ИначеЕсли Не Данные.ЭтоРаздел Тогда + ДанныеРаздела = Данные.ПолучитьРодителя(); + Если Не ЗначениеЗаполнено(ДанныеРаздела.ДатаЗапрета) Тогда + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Общая дата для раздела ""%1""'"), ДанныеРаздела.Представление); + Иначе + Возврат ДанныеРаздела.ОписаниеДатыЗапретаПредставление + " (" + ДанныеРаздела.Представление + ")"; + КонецЕсли; + КонецЕсли; + Возврат ""; + +КонецФункции &НаКлиентеНаСервереБезКонтекста Функция ВнутренняяДатаЗапрета(Данные) @@ -3609,12 +3625,10 @@ Функция КомментарийТекущегоПользователя(Форма) Если Форма.УстановкаДатыЗапрета = "ПоПользователям" Тогда - Комментарий = Форма.Элементы.Пользователи.ТекущиеДанные.Комментарий; - Иначе - Комментарий = ТекстКомментарияДляВсехПользователей(); + Возврат Форма.Элементы.Пользователи.ТекущиеДанные.Комментарий; КонецЕсли; - Возврат Комментарий; + Возврат ""; КонецФункции @@ -3651,13 +3665,6 @@ КонецФункции -&НаКлиентеНаСервереБезКонтекста -Функция ТекстКомментарияДляВсехПользователей() - - Возврат "(" + НСтр("ru = 'По умолчанию'") + ")"; - -КонецФункции - &НаКлиентеНаСервереБезКонтекста Функция ТекстПредставленияОбщейДаты() @@ -3666,7 +3673,7 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ТекстСообщенияСпособУказанияНеИспользован(СпособУказанияВФорме, СпособУказанияВБазеДанных, ТекущийПользователь, Форма) +Функция ТекстСообщенияИзбыточнаяНастройка(СпособУказанияВФорме, СпособУказанияВБазеДанных, ТекущийПользователь, Форма) Если СпособУказанияВФорме = "ПоРазделам" Или СпособУказанияВФорме = "ПоРазделамИОбъектам" Тогда Если ЭтоВсеПользователи(ТекущийПользователь) Тогда diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form index f35b2f167..09488e07b 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form @@ -137,10 +137,6 @@ true true true - - ru - ДП=01.01.0001 - true true true @@ -1448,6 +1444,13 @@ Boolean + + НетДатыЗапретаПредставление + + String + + + diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl index 8c60efcbc..c05e5693c 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -14,6 +21,9 @@ ОписаниеДатыЗапрета = Параметры.ОписаниеДатыЗапрета; КоличествоДнейРазрешения = Параметры.КоличествоДнейРазрешения; ДатаЗапрета = Параметры.ДатаЗапрета; + Если Не ПустаяСтрока(Параметры.НетДатыЗапретаПредставление) Тогда + Элементы.ЗапретИзмененияДанныхНеУстановлен.СписокВыбора[0].Представление = Параметры.НетДатыЗапретаПредставление; + КонецЕсли; РазрешитьИзменениеДанныхДоДатыЗапрета = КоличествоДнейРазрешения > 0; @@ -37,9 +47,16 @@ Элементы.ОбъектПредставление.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; Элементы.ОбъектПредставление.Гиперссылка = Ложь; Иначе - ПредставлениеОбъекта = Объект.Метаданные().ПредставлениеОбъекта; - Если ПустаяСтрока(ПредставлениеОбъекта) Тогда - ПредставлениеОбъекта = Объект.Метаданные().Представление(); + Если Метаданные.Документы.Содержит(Объект.Метаданные()) Тогда + ПредставлениеОбъекта = НСтр("ru = 'Документ'"); + ИначеЕсли Метаданные.Перечисления.Содержит(Объект.Метаданные()) Тогда + ПредставлениеОбъекта = НСтр("ru = 'Элемент'"); + Элементы.ОбъектПредставление.Гиперссылка = Ложь; + Иначе + ПредставлениеОбъекта = Объект.Метаданные().ПредставлениеОбъекта; + Если ПустаяСтрока(ПредставлениеОбъекта) Тогда + ПредставлениеОбъекта = Объект.Метаданные().Представление(); + КонецЕсли; КонецЕсли; Элементы.ОбъектПредставление.Заголовок = ПредставлениеОбъекта; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Module.bsl index 561e6f035..e8f018614 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl index 444328319..e813dc9ac 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl index 79a40d3db..827194674 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/ManagerModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl index b6ca3b62d..e510b7fc8 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -19,6 +26,8 @@ Процедура ПриЗаписи(Отказ, Замещение) + // В режиме ОбменДанными.Загрузка необходимо обновлять УИД в константе ВерсияДатЗапретаИзменения, + // который позволять сеансам определить, что нужно обновить кэш дат запрета изменения в памяти. Если ОбменДанными.Загрузка Тогда Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных(ЭтотОбъект); @@ -34,4 +43,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..122f36ce6 100644 --- a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -9,6 +16,9 @@ КонецЕсли; ТолькоПросмотр = Истина; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.Файл.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаСписка/Form.form index d87387b3b..9651e6ed0 100644 --- a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаСписка/Form.form @@ -149,6 +149,7 @@ Файл 16 + VeryHigh <key>ru</key> <value>Владелец данных</value> @@ -333,6 +334,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>Список</name> <id>1</id> diff --git a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаСписка/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ManagerModule.bsl index 9847bede8..55afea5ab 100644 --- a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -25,7 +33,6 @@ |УПОРЯДОЧИТЬ ПО | ВерсииФайлов.ДатаМодификацииУниверсальная УБЫВ"; - РезультатЗапроса = Запрос.Выполнить(); МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); diff --git a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ДвоичныеДанныеФайлов.mdo b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ДвоичныеДанныеФайлов.mdo index ba30900b5..2287028c5 100644 --- a/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ДвоичныеДанныеФайлов.mdo +++ b/SSL/src/InformationRegisters/ДвоичныеДанныеФайлов/ДвоичныеДанныеФайлов.mdo @@ -61,10 +61,6 @@ <type> <types>ValueStorage</types> </type> - <toolTip> - <key>ru</key> - <value>Двоичные данные файла</value> - </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <dataHistory>Use</dataHistory> diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/ManagerModule.bsl b/SSL/src/InformationRegisters/ДополнительныеСведения/ManagerModule.bsl index 239c7eeb6..5e32f8122 100644 --- a/SSL/src/InformationRegisters/ДополнительныеСведения/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl index bd4b72be4..efe819435 100644 --- a/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -22,4 +30,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Module.bsl index c0fe8c74d..9f1813ba2 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Module.bsl index 43a930bf5..de8fefd5e 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl index f4a721314..adcc6941b 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -81,7 +89,7 @@ ТекстЗапроса, Поля, "РегистрСведений.ЗависимостиПравДоступа", ТекстЗапросовВременныхТаблиц); Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЗависимостиПравДоступа"); + Блокировка.Добавить("РегистрСведений.ЗависимостиПравДоступа"); НачатьТранзакцию(); Попытка 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 @@ +<?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/InformationRegisters/ЗамерыВремени/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ЗамерыВремени/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..74b555a81 --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыВремени/Forms/ФормаСписка/Form.form @@ -0,0 +1,717 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>СписокКомпоновщикНастроекПользовательскиеНастройки</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + + <key>ru</key> + <value>Список</value> + + true + true + + true + + + Список + + true + None + + КлючеваяОперация + 16 + true + true + + true + + + Список.КлючеваяОперация + + + КлючеваяОперацияРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + КлючеваяОперацияКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДатаНачалаЗамера + 19 + true + true + + true + + + Список.ДатаНачалаЗамера + + + ДатаНачалаЗамераРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ДатаНачалаЗамераКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДатаНачалаЗамераЛокальная + 52 + + <key>ru</key> + <value>Дата начала замера локальная</value> + + true + true + + true + + + Список.ДатаНачалаЗамераЛокальная + + + ДатаНачалаЗамераЛокальнаяРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ДатаНачалаЗамераЛокальнаяКонтекстноеМеню + 53 + true + + LabelField + Enter + true + Left + true + + true + true + + + + НомерСеанса + 22 + true + true + + true + + + Список.НомерСеанса + + + НомерСеансаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + НомерСеансаКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДатаЗаписиНачалоЧаса + 25 + true + true + + true + + + Список.ДатаЗаписиНачалоЧаса + + + ДатаЗаписиНачалоЧасаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ДатаЗаписиНачалоЧасаКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ВремяВыполнения + 28 + true + true + + true + + + Список.ВремяВыполнения + + + ВремяВыполненияРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ВремяВыполненияКонтекстноеМеню + 29 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ВесЗамера + 31 + true + true + + true + + + Список.ВесЗамера + + + ВесЗамераРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ВесЗамераКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Комментарий + 34 + true + true + + true + + + Список.Комментарий + + + КомментарийРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 35 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДатаЗаписи + 37 + true + true + + true + + + Список.ДатаЗаписи + + + ДатаЗаписиРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ДатаЗаписиКонтекстноеМеню + 38 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДатаОкончания + 40 + true + true + + true + + + Список.ДатаОкончания + + + ДатаОкончанияРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ДатаОкончанияКонтекстноеМеню + 41 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Пользователь + 43 + true + true + + true + + + Список.Пользователь + + + ПользовательРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ПользовательКонтекстноеМеню + 44 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДатаЗаписиЛокальная + 46 + true + true + + true + + + Список.ДатаЗаписиЛокальная + + + ДатаЗаписиЛокальнаяРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ДатаЗаписиЛокальнаяКонтекстноеМеню + 47 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ВыполненСОшибкой + 49 + true + true + + true + + + Список.ВыполненСОшибкой + + + ВыполненСОшибкойРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ВыполненСОшибкойКонтекстноеМеню + 50 + true + + CheckBoxField + Enter + true + Left + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
            + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + + <key>ru</key> + <value>Список</value> + + 1 + + DynamicList + + + true + + + true + +
            true
            + + ВЫБРАТЬ + РегистрСведенийЗамерыВремени.КлючеваяОперация, + РегистрСведенийЗамерыВремени.ДатаНачалаЗамера, + ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, РегистрСведенийЗамерыВремени.ДатаНачалаЗамера / 1000 - 63555667200 + &ПоправкаЧасовогоПояса) КАК ДатаНачалаЗамераЛокальная, + РегистрСведенийЗамерыВремени.НомерСеанса, + РегистрСведенийЗамерыВремени.ДатаЗаписиНачалоЧаса, + РегистрСведенийЗамерыВремени.ВремяВыполнения, + РегистрСведенийЗамерыВремени.ВесЗамера, + РегистрСведенийЗамерыВремени.Комментарий, + РегистрСведенийЗамерыВремени.ДатаЗаписи, + РегистрСведенийЗамерыВремени.ДатаОкончания, + РегистрСведенийЗамерыВремени.Пользователь, + РегистрСведенийЗамерыВремени.ДатаЗаписиЛокальная, + РегистрСведенийЗамерыВремени.ВыполненСОшибкой +ИЗ + РегистрСведений.ЗамерыВремени КАК РегистрСведенийЗамерыВремени + InformationRegister.ЗамерыВремени + true + true + true + true + true + +
            + + + + + + diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ЗамерыВремени/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..505d6c24a --- /dev/null +++ b/SSL/src/InformationRegisters/ЗамерыВремени/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ТекущаяДатаСеанса = ТекущаяДатаСеанса(); + ПоправкаЧасовогоПояса = ТекущаяДатаСеанса - УниверсальноеВремя(ТекущаяДатаСеанса); + Список.Параметры.УстановитьЗначениеПараметра("ПоправкаЧасовогоПояса", ПоправкаЧасовогоПояса); + МассивПолей = Новый Массив; + МассивПолей.Добавить("ДатаНачалаЗамераЛокальная"); + Список.УстановитьОграниченияИспользованияВГруппировке(МассивПолей); + Список.УстановитьОграниченияИспользованияВОтборе(МассивПолей); + Список.УстановитьОграниченияИспользованияВПорядке(МассивПолей); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl index 4288a9397..c2838d798 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -44,102 +52,20 @@ Функция ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, Количество) Экспорт - МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос = Новый Запрос; - Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; НастроечнаяТаблицаИнтервалов = НастроечнаяТаблицаИнтервалов(); ТаблицаИнтервалов = ТаблицаИнтерваловПоНастройкам(НастроечнаяТаблицаИнтервалов); - ТекстЗапросаПоИнтервалам = ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, "Замеры", "ВремяВыполнения"); - МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + ТекстЗапросаПоИнтервалам_Поля = ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, "Замеры", "ВремяВыполнения", Истина); + ТекстЗапросаПоИнтервалам_Группировки = ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, "Замеры", "ВремяВыполнения", Ложь); - Запрос = Новый Запрос; - Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; - - Запрос.Текст = " - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | Замеры.КлючеваяОперация КАК КлючеваяОперацияСсылка - |ПОМЕСТИТЬ - | ВыборкаХудшиеОперации - |ИЗ - | РегистрСведений.ЗамерыВремени КАК Замеры - |ГДЕ - | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания - |"; - Запрос.УстановитьПараметр("ДатаНачала", (ДатаНачала - Дата(1,1,1)) * 1000); - Запрос.УстановитьПараметр("ДатаОкончания", (ДатаОкончания - Дата(1,1,1)) * 1000); - - Запрос.Выполнить(); - - РассчитатьСтатистикуОпераций(Запрос, ДатаНачала, ДатаОкончания, ПериодАгрегации); - - Запрос.Текст = " - |ВЫБРАТЬ - | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, - | СпрКлючевыеОперации.Наименование КАК КлючеваяОперация, - | СпрКлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, - | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения <= СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) КАК N_T, - | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > СпрКлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 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),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) - |ГДЕ - | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания - |СГРУППИРОВАТЬ ПО - | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), - | СпрКлючевыеОперации.Наименование, - | СпрКлючевыеОперации.ЦелевоеВремя, - | ТаблицаСтатистики.Максимум, - | ТаблицаСтатистики.Медиана, - | ТаблицаСтатистики.Минимум, - | ТаблицаСтатистики.Среднее, - | ТаблицаСтатистики.СтандартноеОтклонение, - | ТаблицаСтатистики.КоличествоОпераций, - | ТаблицаСтатистики.Максимум90, - | ТаблицаСтатистики.Медиана90, - | ТаблицаСтатистики.Минимум90, - | ТаблицаСтатистики.Среднее90, - | ТаблицаСтатистики.СтандартноеОтклонение90, - | ТаблицаСтатистики.КоличествоОпераций90 - |УПОРЯДОЧИТЬ ПО - | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) - |;"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "//%Интервалы", ТекстЗапросаПоИнтервалам); - Запрос.УстановитьПараметр("ДатаНачала", (ДатаНачала - Дата(1,1,1)) * 1000); + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса(); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "//%Интервалы_Поля", ТекстЗапросаПоИнтервалам_Поля); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "//%Интервалы_Группировки", ТекстЗапросаПоИнтервалам_Группировки); + Запрос.УстановитьПараметр("ДатаНачала", (ДатаНачала - Дата(1,1,1)) * 1000); Запрос.УстановитьПараметр("ДатаОкончания", (ДатаОкончания - Дата(1,1,1)) * 1000); Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); @@ -148,144 +74,34 @@ Возврат РезультатЗапроса; КонецФункции -Процедура РассчитатьСтатистикуОпераций(Запрос, ДатаНачала, ДатаОкончания, ПериодАгрегации) - - Запрос.Текст = " - |ВЫБРАТЬ - | КлючеваяОперацияСсылка - |ИЗ - | ВыборкаХудшиеОперации КАК КлючевыеОперации - |"; - - РезультатЗапроса = Запрос.Выполнить(); - - ЗапросСтатистики = Новый Запрос; - ЗапросСтатистики.Текст = " - |ВЫБРАТЬ - | ВремяВыполнения +Функция ТекстЗапроса() + Возврат "ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Period, + | СпрКлючевыеОперации.Наименование КАК KOD, + | СпрКлючевыеОперации.Имя КАК KON, + | СпрКлючевыеОперации.ИмяХеш КАК KOHash, + | Замеры.ВыполненСОшибкой КАК ExecutedWithError, + | //%Интервалы_Поля + | Сумма(1) КАК MeasurementQuantity, + | Среднее(Замеры.ВесЗамера) КАК AvgWeight, + | Максимум(Замеры.ВесЗамера) КАК MaxWeight |ИЗ | РегистрСведений.ЗамерыВремени КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.КлючевыеОперации КАК СпрКлючевыеОперации + |ПО + | Замеры.КлючеваяОперация = СпрКлючевыеОперации.Ссылка |ГДЕ - | Замеры.КлючеваяОперация = &КлючеваяОперация - | И Замеры.ДатаНачалаЗамера >= &ДатаНачала - | И Замеры.ДатаНачалаЗамера < &ДатаОкончания + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), + | //%Интервалы_Группировки + | СпрКлючевыеОперации.Имя, + | СпрКлючевыеОперации.ИмяХеш, + | СпрКлючевыеОперации.Наименование, + | Замеры.ВыполненСОшибкой |УПОРЯДОЧИТЬ ПО - | ВремяВыполнения - |"; - - ТаблицаСтатистики = ТаблицаСтатистикиИнициализировать(); - - Выборка = РезультатЗапроса.Выбрать(); - Пока Выборка.Следующий() Цикл - ДатаНачалаЦикла = ДатаНачала; - Пока ДатаНачалаЦикла < ДатаОкончания Цикл - ЗапросСтатистики.УстановитьПараметр("КлючеваяОперация", Выборка.КлючеваяОперацияСсылка); - ЗапросСтатистики.УстановитьПараметр("ДатаНачала", (ДатаНачалаЦикла - Дата(1,1,1)) * 1000); - ЗапросСтатистики.УстановитьПараметр("ДатаОкончания", (ДатаНачалаЦикла - Дата(1,1,1)) * 1000 + ПериодАгрегации); - - РезультатЗапросаСтатистики = ЗапросСтатистики.Выполнить(); - ТаблицаСтатистикиПолная = РезультатЗапросаСтатистики.Выгрузить(); - РезультатЗапросаСтатистики = Неопределено; - - РезультатАнализа = ПровестиАнализДанных(ТаблицаСтатистикиПолная); - КоличествоУдалить = Цел(ТаблицаСтатистикиПолная.Количество() * 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))); - - - Возврат ТаблицаСтатистики; - + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (ВЫРАЗИТЬ(Замеры.ДатаНачалаЗамера / 1000 / &ПериодАгрегации - 0.5 КАК ЧИСЛО(11, 0))) * &ПериодАгрегации - 63555667200)" КонецФункции // Возвращает таблицу настроек интервалов по умолчанию @@ -476,35 +292,31 @@ // Возвращаемое значение: // ТекстЗапроса - часть текста запроса, соответствующая переданной таблице интервалов. // -Функция ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, ИмяТаблицыИсточника, ИмяКолонкиИсточника) +Функция ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, ИмяТаблицыИсточника, ИмяКолонкиИсточника, СИменем) ТекстЗапроса = ""; - ШаблонСтроки = " СУММА(ВЫБОР - | КОГДА %1 %2 ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) КАК N_%3,"; + ШаблонСтроки = " КОГДА %1 %2 ТОГДА %3"; Для Каждого СтрокаИнтервала Из ТаблицаИнтервалов Цикл Если СтрокаИнтервала.НижняяГраница = 0 Тогда ТекстНижнейГраницы = ""; ТекстВерхнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " <= " + Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ="); - ИмяКолонкиВЗапросе = Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=_; ЧН=0; ЧГ=") ИначеЕсли СтрокаИнтервала.ВерхняяГраница = 0 Тогда ТекстНижнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " > " + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=.; ЧН=0; ЧГ="); ТекстВерхнейГраницы = ""; - ИмяКолонкиВЗапросе = "MORE_" + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=_; ЧН=0; ЧГ=") Иначе ТекстНижнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " > " + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=.; ЧН=0; ЧГ=") + " И "; ТекстВерхнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " <= " + Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ="); - ИмяКолонкиВЗапросе = Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=_; ЧН=0; ЧГ=") КонецЕсли; - ТекстЗапросаДляИнтервала = ОценкаПроизводительностиКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, ИмяКолонкиВЗапросе); - ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса),"",Символы.ПС) + ТекстЗапросаДляИнтервала; + ТекстЗапросаДляИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ=")); + ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", Символы.ПС) + ТекстЗапросаДляИнтервала; КонецЦикла; + ТекстЗапроса = "ВЫБОР " + ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", Символы.ПС) + " Иначе 0 Конец" + ?(СИменем, " КАК ExecutionTime, ", ","); + Возврат ТекстЗапроса; КонецФункции diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo index 9ed69b82f..dad571d1e 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo @@ -273,4 +273,13 @@ Use + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + diff --git a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl index dcf014ad3..017d6d937 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl @@ -1,105 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции Функция ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, Количество) Экспорт - МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос = Новый Запрос; - Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; НастроечнаяТаблицаИнтервалов = НастроечнаяТаблицаИнтервалов(); ТаблицаИнтервалов = ТаблицаИнтерваловПоНастройкам(НастроечнаяТаблицаИнтервалов); - ТекстЗапросаПоИнтервалам = ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, "Замеры", "ВремяВыполнения"); - МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + ТекстЗапросаПоИнтервалам_Поля = ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, "Замеры", "ВремяВыполнения", Истина); + ТекстЗапросаПоИнтервалам_Группировки = ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, "Замеры", "ВремяВыполнения", Ложь); - Запрос = Новый Запрос; - Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; - - Запрос.Текст = " - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | Замеры.КлючеваяОперация КАК КлючеваяОперацияСсылка - |ПОМЕСТИТЬ - | ВыборкаХудшиеОперации - |ИЗ - | РегистрСведений.ЗамерыВремениТехнологические КАК Замеры - |ГДЕ - | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания - |"; - Запрос.УстановитьПараметр("ДатаНачала", (ДатаНачала - Дата(1,1,1)) * 1000); - Запрос.УстановитьПараметр("ДатаОкончания", (ДатаОкончания - Дата(1,1,1)) * 1000); - - Запрос.Выполнить(); - - РассчитатьСтатистикуОпераций(Запрос, ДатаНачала, ДатаОкончания, ПериодАгрегации); - - Запрос.Текст = " - |ВЫБРАТЬ - | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, - | СпрКлючевыеОперации.Наименование КАК КлючеваяОперация, - | СпрКлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, - | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения <= СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) КАК N_T, - | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > СпрКлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 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),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) - |ГДЕ - | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания - |СГРУППИРОВАТЬ ПО - | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), - | СпрКлючевыеОперации.Наименование, - | СпрКлючевыеОперации.ЦелевоеВремя, - | ТаблицаСтатистики.Максимум, - | ТаблицаСтатистики.Медиана, - | ТаблицаСтатистики.Минимум, - | ТаблицаСтатистики.Среднее, - | ТаблицаСтатистики.СтандартноеОтклонение, - | ТаблицаСтатистики.КоличествоОпераций, - | ТаблицаСтатистики.Максимум90, - | ТаблицаСтатистики.Медиана90, - | ТаблицаСтатистики.Минимум90, - | ТаблицаСтатистики.Среднее90, - | ТаблицаСтатистики.СтандартноеОтклонение90, - | ТаблицаСтатистики.КоличествоОпераций90 - |УПОРЯДОЧИТЬ ПО - | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) - |;"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "//%Интервалы", ТекстЗапросаПоИнтервалам); - Запрос.УстановитьПараметр("ДатаНачала", (ДатаНачала - Дата(1,1,1)) * 1000); + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса(); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "//%Интервалы_Поля", ТекстЗапросаПоИнтервалам_Поля); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "//%Интервалы_Группировки", ТекстЗапросаПоИнтервалам_Группировки); + Запрос.УстановитьПараметр("ДатаНачала", (ДатаНачала - Дата(1,1,1)) * 1000); Запрос.УстановитьПараметр("ДатаОкончания", (ДатаОкончания - Дата(1,1,1)) * 1000); Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); @@ -108,144 +34,33 @@ Возврат РезультатЗапроса; КонецФункции -Процедура РассчитатьСтатистикуОпераций(Запрос, ДатаНачала, ДатаОкончания, ПериодАгрегации) - - Запрос.Текст = " - |ВЫБРАТЬ - | КлючеваяОперацияСсылка +Функция ТекстЗапроса() + Возврат "ВЫБРАТЬ + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Period, + | СпрКлючевыеОперации.Наименование КАК KOD, + | СпрКлючевыеОперации.Имя КАК KON, + | СпрКлючевыеОперации.ИмяХеш КАК KOHash, + | Ложь КАК ExecutedWithError, + | //%Интервалы_Поля + | Сумма(1) КАК MeasurementQuantity, + | Среднее(Замеры.ВесЗамера) КАК AvgWeight, + | Максимум(Замеры.ВесЗамера) КАК MaxWeight |ИЗ - | ВыборкаХудшиеОперации КАК КлючевыеОперации - |"; - - РезультатЗапроса = Запрос.Выполнить(); - - ЗапросСтатистики = Новый Запрос; - ЗапросСтатистики.Текст = " - |ВЫБРАТЬ - | ВремяВыполнения - |ИЗ - | РегистрСведений.ЗамерыВремени КАК Замеры + | РегистрСведений.ЗамерыВремениТехнологические КАК Замеры + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Справочник.КлючевыеОперации КАК СпрКлючевыеОперации + |ПО + | Замеры.КлючеваяОперация = СпрКлючевыеОперации.Ссылка |ГДЕ - | Замеры.КлючеваяОперация = &КлючеваяОперация - | И Замеры.ДатаНачалаЗамера >= &ДатаНачала - | И Замеры.ДатаНачалаЗамера < &ДатаОкончания + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + |СГРУППИРОВАТЬ ПО + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((Замеры.ДатаНачалаЗамера/1000)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), + | //%Интервалы_Группировки + | СпрКлючевыеОперации.Имя, + | СпрКлючевыеОперации.ИмяХеш, + | СпрКлючевыеОперации.Наименование |УПОРЯДОЧИТЬ ПО - | ВремяВыполнения - |"; - - ТаблицаСтатистики = ТаблицаСтатистикиИнициализировать(); - - Выборка = РезультатЗапроса.Выбрать(); - Пока Выборка.Следующий() Цикл - ДатаНачалаЦикла = ДатаНачала; - Пока ДатаНачалаЦикла < ДатаОкончания Цикл - ЗапросСтатистики.УстановитьПараметр("КлючеваяОперация", Выборка.КлючеваяОперацияСсылка); - ЗапросСтатистики.УстановитьПараметр("ДатаНачала", (ДатаНачалаЦикла - Дата(1,1,1)) * 1000); - ЗапросСтатистики.УстановитьПараметр("ДатаОкончания", (ДатаНачалаЦикла - Дата(1,1,1)) * 1000 + ПериодАгрегации); - - РезультатЗапросаСтатистики = ЗапросСтатистики.Выполнить(); - ТаблицаСтатистикиПолная = РезультатЗапросаСтатистики.Выгрузить(); - РезультатЗапросаСтатистики = Неопределено; - - РезультатАнализа = ПровестиАнализДанных(ТаблицаСтатистикиПолная); - КоличествоУдалить = Цел(ТаблицаСтатистикиПолная.Количество() * 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))); - - - Возврат ТаблицаСтатистики; - + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (ВЫРАЗИТЬ(Замеры.ДатаНачалаЗамера / 1000 / &ПериодАгрегации - 0.5 КАК ЧИСЛО(11, 0))) * &ПериодАгрегации - 63555667200)" КонецФункции // Возвращает таблицу настроек интервалов по умолчанию @@ -436,35 +251,31 @@ // Возвращаемое значение: // ТекстЗапроса - часть текста запроса, соответствующая переданной таблице интервалов. // -Функция ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, ИмяТаблицыИсточника, ИмяКолонкиИсточника) +Функция ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, ИмяТаблицыИсточника, ИмяКолонкиИсточника, СИменем) ТекстЗапроса = ""; - ШаблонСтроки = " СУММА(ВЫБОР - | КОГДА %1 %2 ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) КАК N_%3,"; + ШаблонСтроки = " КОГДА %1 %2 ТОГДА %3"; Для Каждого СтрокаИнтервала Из ТаблицаИнтервалов Цикл Если СтрокаИнтервала.НижняяГраница = 0 Тогда ТекстНижнейГраницы = ""; ТекстВерхнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " <= " + Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ="); - ИмяКолонкиВЗапросе = Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=_; ЧН=0; ЧГ=") ИначеЕсли СтрокаИнтервала.ВерхняяГраница = 0 Тогда ТекстНижнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " > " + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=.; ЧН=0; ЧГ="); ТекстВерхнейГраницы = ""; - ИмяКолонкиВЗапросе = "MORE_" + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=_; ЧН=0; ЧГ=") Иначе ТекстНижнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " > " + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=.; ЧН=0; ЧГ=") + " И "; ТекстВерхнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " <= " + Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ="); - ИмяКолонкиВЗапросе = Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=_; ЧН=0; ЧГ=") КонецЕсли; - ТекстЗапросаДляИнтервала = ОценкаПроизводительностиКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, ИмяКолонкиВЗапросе); - ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса),"",Символы.ПС) + ТекстЗапросаДляИнтервала; + ТекстЗапросаДляИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ=")); + ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", Символы.ПС) + ТекстЗапросаДляИнтервала; КонецЦикла; + ТекстЗапроса = "ВЫБОР " + ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", Символы.ПС) + " Иначе 0 Конец" + ?(СИменем, " КАК ExecutionTime, ", ","); + Возврат ТекстЗапроса; КонецФункции diff --git a/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/ManagerModule.bsl index dd682ab89..3563005e9 100644 --- a/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыКомментарииСтатистики/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -10,7 +18,7 @@ Процедура ЗаписатьРезультатЗапроса(Замеры) Если НЕ Замеры.Пустой() Тогда - НулевойИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + НулевойИдентификатор = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); НаборЗаписей = СоздатьНаборЗаписей(); diff --git a/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/ManagerModule.bsl index a6e4261ee..276149c37 100644 --- a/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыОбластиСтатистики/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/ManagerModule.bsl index 95ff1d50a..2d5aef9d2 100644 --- a/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыОперацииСтатистики/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ЗамерыСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыСтатистики/ManagerModule.bsl index 64698e303..f1c7d0b4f 100644 --- a/SSL/src/InformationRegisters/ЗамерыСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыСтатистики/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index 24bc616e0..314328565 100644 --- a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -1,32 +1,13 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс - -// Возвращает имя профиля безопасности для информационной базы или внешнего модуля. -// -// Параметры: -// ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, использующийся в -// качестве внешнего модуля. -// -// Возвращаемое значение: -// Строка - имя профиля безопасности. -// -Функция ИмяПрофиляБезопасности(Знач ПрограммныйМодуль) Экспорт - - Если ПрограммныйМодуль = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда - - Возврат Константы.ПрофильБезопасностиИнформационнойБазы.Получить(); - - Иначе - - Возврат РегистрыСведений.РежимыПодключенияВнешнихМодулей.РежимПодключенияВнешнегоМодуля(ПрограммныйМодуль); - - КонецЕсли; - -КонецФункции - -#КонецОбласти - #Область СлужебныеПроцедурыИФункции // Создает запрос администрирования профилей безопасности. @@ -307,6 +288,29 @@ КонецФункции +// Возвращает имя профиля безопасности для информационной базы или внешнего модуля. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, использующийся в +// качестве внешнего модуля. +// +// Возвращаемое значение: +// Строка - имя профиля безопасности. +// +Функция ИмяПрофиляБезопасности(Знач ПрограммныйМодуль) + + Если ПрограммныйМодуль = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда + + Возврат Константы.ПрофильБезопасностиИнформационнойБазы.Получить(); + + Иначе + + Возврат РегистрыСведений.РежимыПодключенияВнешнихМодулей.РежимПодключенияВнешнегоМодуля(ПрограммныйМодуль); + + КонецЕсли; + +КонецФункции + // Формирует имя профиля безопасности для информационной базы или внешнего модуля. // // Параметры: diff --git a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl index 810ec1bd0..3e160fc42 100644 --- a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl @@ -1,9 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции Процедура ПриЗаписи(Отказ, Замещение) + // ОбменДанными.Загрузка не требуется. + // Запись служебных данных в безопасном режиме запрещена. Если РаботаВБезопасномРежиме.УстановленБезопасныйРежим() Тогда ТекущийБезопасныйРежим = БезопасныйРежим(); @@ -48,4 +58,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Module.bsl index 6824e48f1..cc2180269 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl index 5bca1e6a8..01c255820 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -18,8 +26,8 @@ Процедура ОбновитьДанныеРегистра(ГруппыДоступа = Неопределено, ЕстьИзменения = Неопределено) Экспорт Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЗначенияГруппДоступа"); - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЗначенияГруппДоступаПоУмолчанию"); + Блокировка.Добавить("РегистрСведений.ЗначенияГруппДоступа"); + Блокировка.Добавить("РегистрСведений.ЗначенияГруппДоступаПоУмолчанию"); НачатьТранзакцию(); Попытка diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ЗначенияГруппДоступа.mdo b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ЗначенияГруппДоступа.mdo index 3982189d1..2496ec224 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ЗначенияГруппДоступа.mdo +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ЗначенияГруппДоступа.mdo @@ -59,10 +59,6 @@ Boolean - - ru - Значение разрешено. - Use diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Module.bsl index 61bc05aeb..9395a4292 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступаПоУмолчанию/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаЗаписи/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ИдентификаторыОбъектовВерсийРасширений/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl index 14b2fac77..8a23ab9f9 100644 --- a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo index d52949787..289058589 100644 --- a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo @@ -62,10 +62,6 @@ true - - ru - Номер сообщения. - Use @@ -81,10 +77,6 @@ ExchangePlanRef - - ru - Узел информационной базы - Use diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl index 2679cc11f..08383a86c 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/РолиИИсполнителиЗадач/CommandModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/РолиИИсполнителиЗадач/CommandModule.bsl index 53b023d6d..24c0bce0b 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/РолиИИсполнителиЗадач/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/РолиИИсполнителиЗадач/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl index 43f0faa22..c55a8f9e1 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl index 778dc3012..318c58e86 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl index 73b800099..1b696608e 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl index 461ddec49..7a9890389 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl index 2ad6af513..44c6538d0 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/ManagerModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/ManagerModule.bsl index ef5b3134f..fccad6550 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl index 06259782e..d4c6a96a3 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -128,4 +136,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаВнешнихПользователей/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Module.bsl index b5571367b..0eb944b01 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаКОбъектам/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаКРегистрам/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаНаборовГруппДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаНаборовГруппДоступа/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаНаборовГруппДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаНаборовГруппДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаНаборовГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаНаборовГруппДоступа/Forms/ФормаСписка/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаНаборовГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаНаборовГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/КлючиДоступаПользователей/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl index a54e2d50e..fe1b20a0b 100644 --- a/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl index 0c40e3fcc..523cff78a 100644 --- a/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -29,7 +37,7 @@ КонецЕсли; КонецЕсли; Иначе - Ссылка = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + Ссылка = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); КонецЕсли; Возврат Ссылка; diff --git a/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl index 80c033845..c2338703f 100644 --- a/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КонтактыВзаимодействий/ManagerModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда diff --git a/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl b/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl index 135e1c6bf..7d0c28174 100644 --- a/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -79,4 +87,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl index a76f9689d..b666e9232 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl index 1eb0f8ca0..6dc995ee6 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -40,10 +48,19 @@ ЗависимаяВалюта = Неопределено; ДополнительныеСвойства.Свойство("ОбновитьКурсЗависимойВалюты", ЗависимаяВалюта); - Если ЗависимаяВалюта <> Неопределено Тогда - ЗависимаяВалюта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗависимаяВалюта, - "Ссылка,Наценка,СпособУстановкиКурса,ФормулаРасчетаКурса"); - КонецЕсли; + + Для Каждого ЗаписьОсновнойВалюты Из ЭтотОбъект Цикл + + Если ЗависимаяВалюта <> Неопределено Тогда // Нужно обновить курс только указанной валюты. + ЗаблокироватьКурсЗависимойВалюты(ЗависимаяВалюта, ЗаписьОсновнойВалюты.Период); + Иначе + ЗависимыеВалюты = РаботаСКурсамиВалют.СписокЗависимыхВалют(ЗаписьОсновнойВалюты.Валюта, ДополнительныеСвойства); + Для Каждого ЗависимаяВалюта Из ЗависимыеВалюты Цикл + ЗаблокироватьКурсЗависимойВалюты(ЗависимаяВалюта, ЗаписьОсновнойВалюты.Период); + КонецЦикла; + КонецЕсли; + + КонецЦикла; Для Каждого ЗаписьОсновнойВалюты Из ЭтотОбъект Цикл @@ -69,6 +86,18 @@ КонецПроцедуры +Процедура ЗаблокироватьКурсЗависимойВалюты(ЗависимаяВалюта, ПериодОсновнойВалюты) + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КурсыВалют"); + ЭлементБлокировки.УстановитьЗначение("Валюта", ЗависимаяВалюта.Ссылка); + Если ЗначениеЗаполнено(ПериодОсновнойВалюты) Тогда + ЭлементБлокировки.УстановитьЗначение("Период", ПериодОсновнойВалюты); + КонецЕсли; + Блокировка.Заблокировать(); + +КонецПроцедуры + Процедура ОбновитьКурсЗависимойВалюты(ЗависимаяВалюта, ЗаписьОсновнойВалюты) НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); @@ -103,13 +132,17 @@ Процедура УдалитьКурсыПодчиненныхВалют() ВалютаВладелец = Отбор.Валюта.Значение; - Период = Отбор.Период; + Период = Отбор.Период.Значение; ЗависимаяВалюта = Неопределено; Если ДополнительныеСвойства.Свойство("ОбновитьКурсЗависимойВалюты", ЗависимаяВалюта) Тогда + ЗаблокироватьКурсЗависимойВалюты(ЗависимаяВалюта, Период); УдалитьКурсыВалюты(ЗависимаяВалюта, Период); Иначе ЗависимыеВалюты = РаботаСКурсамиВалют.СписокЗависимыхВалют(ВалютаВладелец, ДополнительныеСвойства); + Для Каждого ЗависимаяВалюта Из ЗависимыеВалюты Цикл + ЗаблокироватьКурсЗависимойВалюты(ЗависимаяВалюта.Ссылка, Период); + КонецЦикла; Для Каждого ЗависимаяВалюта Из ЗависимыеВалюты Цикл УдалитьКурсыВалюты(ЗависимаяВалюта.Ссылка, Период); КонецЦикла; @@ -125,7 +158,7 @@ НаборЗаписей.Записать(); КонецПроцедуры -Функция КурсВалютыПоФормуле(Валюта, Формула, Период) +Функция КурсВалютыПоФормуле(Знач Валюта, Знач Формула, Знач Период) ТекстЗапроса = "ВЫБРАТЬ | Валюты.Наименование КАК СимвольныйКод, @@ -140,7 +173,10 @@ Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Период", Период); - Выражение = СтрЗаменить(Формула, ",", "."); + Выражение = Формула; + Если СтрНайти(Выражение, ".") = 0 Тогда + Выражение = СтрЗаменить(Выражение, ",", "."); + КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Выражение = СтрЗаменить(Выражение, Выборка.СимвольныйКод, Формат(Выборка.Курс, "ЧРД=.; ЧГ=0")); @@ -157,18 +193,18 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Расчет курса валюты ""%1"" по формуле ""%2"" не выполнен:'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Валюта, Формула); + ОбщегоНазначения.КодОсновногоЯзыка()), Валюта, Формула); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке), + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Валюта, "Объект.ФормулаРасчетаКурса"); Если ДополнительныеСвойства.Свойство("ОбновитьКурсЗависимойВалюты") Тогда ВызватьИсключение ТекстОшибки + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - Иначе - ЗаписьЖурналаРегистрации(НСтр("ru = 'Валюты.Загрузка курсов валют'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, Валюта.Метаданные(), Валюта, - ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецЕсли; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Валюты.Загрузка курсов валют'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, Валюта.Метаданные(), Валюта, + ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); КонецЕсли; Результат = Неопределено; КонецПопытки; @@ -178,4 +214,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/Forms/ФормаЗаписи/Module.bsl index bd3c73010..0ed6e1a7c 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl index bfcd1d928..4e1289819 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -67,7 +75,7 @@ ОбновлениеВТекущемСеансе = ТребуетсяПеречитатьДанные Или ОбщегоНазначения.ИнформационнаяБазаФайловая() Или МонопольныйРежим() - Или ОбщегоНазначенияКлиентСервер.РежимОтладки() + Или ОбщегоНазначения.РежимОтладки() Или ТекущийРежимЗапуска() = Неопределено; Если ОбновлениеВТекущемСеансе Тогда @@ -286,7 +294,6 @@ КонецЕсли; Если (Протокол = "https" Или Протокол = "ftps") И ЗащищенноеСоединение = Неопределено Тогда - Сертификаты = Новый СертификатыУдостоверяющихЦентровОС; ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); КонецЕсли; @@ -298,8 +305,8 @@ ИнтернетПрокси = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); - ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(АдресWSDL); + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + ИнтернетПрокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси(АдресWSDL); КонецЕсли; Прокси = Новый WSПрокси(WSОпределения, URIПространстваИмен, ИмяСервиса, ИмяТочкиПодключения, @@ -357,20 +364,25 @@ Попытка Определения = Новый WSОпределения(АдресWSDL, ИмяПользователя, Пароль, ,Таймаут, ЗащищенноеСоединение); Исключение - РезультатДиагностики = ОбщегоНазначенияКлиентСервер.ДиагностикаСоединения(АдресWSDL); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить WS-определения по адресу |%1 |по причине: - |%2 - | - |Результат диагностики: - |%3'"), + |%2'"), АдресWSDL, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), - РезультатДиагностики.ОписаниеОшибки); + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + РезультатДиагностики = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(АдресWSDL); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + |Результат диагностики: + |%2'"), + РезультатДиагностики.ОписаниеОшибки); + КонецЕсли; + ВызватьИсключение ТекстОшибки; КонецПопытки; Возврат Определения; @@ -394,8 +406,8 @@ ИнтернетПрокси = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); - ИнтернетПрокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(АдресWSDL); + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + ИнтернетПрокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси(АдресWSDL); КонецЕсли; Попытка @@ -412,7 +424,7 @@ Попытка УдалитьФайлы(ИмяФайлаWSDL); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение WSDL'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение WSDL'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -520,7 +532,7 @@ Попытка УдалитьФайлы(ОписаниеФайла.Путь); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение WSDL'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение WSDL'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl index 4b68c72ac..b333beb73 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных @@ -103,4 +111,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Module.bsl index b76afbe68..8fbd2c418 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl index c96ce8001..4e103d1fa 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl index 1c03acbab..168c4386f 100644 --- a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl index 44b837a2a..95191a95c 100644 --- a/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/МоиНапоминания/CommandModule.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/МоиНапоминания/CommandModule.bsl index 16624053b..18a7125ad 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/МоиНапоминания/CommandModule.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/МоиНапоминания/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/НапоминанияПользователей/CommandModule.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/НапоминанияПользователей/CommandModule.bsl index c3404402f..e9d0512a5 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/НапоминанияПользователей/CommandModule.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/НапоминанияПользователей/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Form.form index 4866bb21f..cb2e7d05f 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Form.form @@ -535,6 +535,11 @@ true auto true + + + КоманднаяПанель + + Список 1 diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl index 9343b905a..37260a686 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -10,16 +17,6 @@ Список.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователи.ТекущийПользователь()); - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - Элементы.Переместить(Элементы.КнопкаСоздать, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.КнопкаИзменить, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.КнопкаУдалить, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.СтандартныеКоманды, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.ФормаСправка, Элементы.ФормаКоманднаяПанель); - - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form index bd4f18c55..e0f4fb5e5 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form @@ -461,290 +461,354 @@ НастройкаИсточника 74 - - НадписьЗа - 57 - - <key>ru</key> - <value>за</value> - - true - true - - true - - - НадписьЗаExtendedTooltip - 122 + + ГруппаИнтервалВремениОтносительноИсточника + 136 + + НадписьЗа + 57 + + <key>ru</key> + <value>за</value> + + true + true + + true + + + НадписьЗаExtendedTooltip + 122 + Label + true + true + + Left + + + + НадписьЗаКонтекстноеМеню + 58 + true + Label - true true - Left + Right - - - НадписьЗаКонтекстноеМеню - 58 - true - - Label - true - - Right - - - - ИнтервалВремениОтносительноИсточника - 59 - true - true - - true - - - ИнтервалВремениСтрокой - - None - - ru - Время, за которое необходимо напомнить до даты в реквизите предмета - - - OnChange - ПриИзмененииИнтервалаВремени - - - ИнтервалВремениОтносительноИсточникаExtendedTooltip - 123 - Label - true - true - - Left - - - - ИнтервалВремениОтносительноИсточникаКонтекстноеМеню - 60 - true - - InputField - Auto - true - Left - true - - 9 - true - true - false - true - true - true - true - OnValueChange - - - ru - 5 минут - - - 5м - - - - - ru - 10 минут - - - 10м - - - - - ru - 15 минут - - - 15м - - - - - ru - 30 минут - - - 30м - - - - - ru - 1 час - - - 1ч - - - - - ru - 2 часа - - - 2ч - - - - - ru - 4 часа - - - 4ч - - - - - ru - 8 часов - - - 8ч - - - - - ru - 1 день - - - 1д - - - - - ru - 2 дня - - - 2д - - - - - ru - 3 дня - - - 3д - - - - - ru - 1 неделю - - - 1н - - - - - ru - 2 недели - - - 2н - - - Normal - - - - НадписьДо - 33 - - <key>ru</key> - <value>до</value> - - true - true - - true - - - НадписьДоExtendedTooltip - 124 - Label - true - true - - Left - - - - НадписьДоКонтекстноеМеню - 34 - true - - Label - true - - Left - - - - ИмяРеквизитаИсточника - 35 - true - true - - true - - - Объект.ИмяРеквизитаИсточника - - None - - ru - Имя реквизита предмета, относительно которого устанавливается время напоминания - - - ИмяРеквизитаИсточникаExtendedTooltip - 125 - Label - true - true - - Left - - - - ИмяРеквизитаИсточникаКонтекстноеМеню - 36 - true - - InputField - Enter - true - Left - true - + + + ИнтервалВремениОтносительноИсточника + 59 + true + true + + true + + + ИнтервалВремениСтрокой + + None + + ru + Время, за которое необходимо напомнить до даты в реквизите предмета + - Clearing - ИмяРеквизитаИсточникаОчистка + OnChange + ПриИзмененииИнтервалаВремени - 20 + + ИнтервалВремениОтносительноИсточникаExtendedTooltip + 123 + Label + true + true + + Left + + + + ИнтервалВремениОтносительноИсточникаКонтекстноеМеню + 60 + true + + InputField + Auto + true + Left + true + + 9 + true + true + false + true + true + true + true + OnValueChange + + + ru + 5 минут + + + 5м + + + + + ru + 10 минут + + + 10м + + + + + ru + 15 минут + + + 15м + + + + + ru + 30 минут + + + 30м + + + + + ru + 1 час + + + 1ч + + + + + ru + 2 часа + + + 2ч + + + + + ru + 4 часа + + + 4ч + + + + + ru + 8 часов + + + 8ч + + + + + ru + 1 день + + + 1д + + + + + ru + 2 дня + + + 2д + + + + + ru + 3 дня + + + 3д + + + + + ru + 1 неделю + + + 1н + + + + + ru + 2 недели + + + 2н + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа интервал времени относительно источника</value> + + + ГруппаИнтервалВремениОтносительноИсточникаРасширеннаяПодсказка + 137 + Label true true - true - true - true - Normal + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаИмяРеквизитаИсточника + 138 + + НадписьДо + 33 + + <key>ru</key> + <value>до</value> + + true + true + + true + + + НадписьДоExtendedTooltip + 124 + Label + true + true + + Left + + + + НадписьДоКонтекстноеМеню + 34 + true + + Label + true + + Left + + + + ИмяРеквизитаИсточника + 35 + true + true + + true + + + Объект.ИмяРеквизитаИсточника + + None + + ru + Имя реквизита предмета, относительно которого устанавливается время напоминания + + + ИмяРеквизитаИсточникаExtendedTooltip + 125 + Label + true + true + + Left + + + + ИмяРеквизитаИсточникаКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + + Clearing + ИмяРеквизитаИсточникаОчистка + + 20 + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа имя реквизита источника</value> + + + ГруппаИмяРеквизитаИсточникаРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto true diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl index b7db0aecc..d80252ed7 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -169,7 +176,7 @@ СпособУстановкиВремениНапоминания = НСтр("ru = 'через'") + " " + ИнтервалВремениСтрокой; Иначе Если Элементы.СпособУстановкиВремениНапоминания.СписокВыбора.НайтиПоЗначению(СпособУстановкиВремениНапоминания) = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Интервал времени не определен.'"), , "СпособУстановкиВремениНапоминания"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Интервал времени не определен.'"), , "СпособУстановкиВремениНапоминания"); КонецЕсли; КонецЕсли; @@ -193,7 +200,7 @@ Если Объект.ИнтервалВремениНапоминания > 0 Тогда ИнтервалВремениСтрокой = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Интервал времени не определен'"), , "ИнтервалВремениСтрокой"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Интервал времени не определен'"), , "ИнтервалВремениСтрокой"); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form index 3b5191a77..2c46ebfe8 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form @@ -10,6 +10,7 @@ КнопкаОткрыть 11 + VeryLow true true @@ -37,6 +38,7 @@ КнопкаПрекратить 9 + VeryLow true true @@ -186,6 +188,7 @@ КнопкаОтложить 8 + VeryHigh true true @@ -716,6 +719,11 @@ true auto true + + + ПанельКнопок + + Напоминания @@ -980,9 +988,6 @@ <use> <common>true</common> </use> - <picture xsi:type="core:PictureRef"> - <picture>StdPicture.ShowData</picture> - </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>КомандаОткрыть</name> diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl index 0776d4a81..59e7ac79b 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -7,24 +14,17 @@ Возврат; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если ОбщегоНазначения.ЭтоВебКлиент() Тогда РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Элементы.Переместить(Элементы.КнопкаПрекратить, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.КнопкаОтложить, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КнопкаОткрыть", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КнопкаОтложить", "КнопкаПоУмолчанию", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КнопкаОтложить", "АктивизироватьПоУмолчанию", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КнопкаПрекратить", "ТолькоВоВсехДействиях", Истина); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.СрокПовторногоОповещения.Видимость = Ложь; + Элементы.КнопкаОтложить.Заголовок = НСтр("ru = 'Отложить'"); + Элементы.КнопкаОтложить.КнопкаПоУмолчанию = Истина; + Элементы.КнопкаОткрыть.ТолькоВоВсехДействиях = Истина; + Элементы.КнопкаПрекратить.ТолькоВоВсехДействиях = Истина; КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -86,7 +86,6 @@ КонецЕсли; Источник = Элемент.ТекущиеДанные.Источник; - ИсточникСтрокой = Элемент.ТекущиеДанные.ИсточникСтрокой; ЕстьИсточник = ЗначениеЗаполнено(Источник); Элементы.НапоминанияКонтекстноеМенюОткрыть.Доступность = ЕстьИсточник; diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/ManagerModule.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/ManagerModule.bsl index cd1925d44..10ae49540 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl index 326854c3c..3f26ae128 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -14,4 +22,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаЗаписи/Module.bsl index 8a79d9179..9e4eca0eb 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Module.bsl index 4f16c690a..c71f0efec 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl index 06ae8e5b2..0c7a4d62a 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -129,7 +137,7 @@ КонецЕсли; Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НаследованиеНастроекПравОбъектов"); + Блокировка.Добавить("РегистрСведений.НаследованиеНастроекПравОбъектов"); Если Объект = Неопределено Тогда ДополнительныеСвойства = Неопределено; @@ -168,9 +176,7 @@ СтандартныеПодсистемыСервер.ПроверитьДинамическоеОбновлениеВерсииПрограммы(); ЕстьИзменения = Истина; - Если ОбъектыСИзменениями <> Неопределено - И ОбъектыСИзменениями.Найти(Ссылка) = Неопределено Тогда - + Если ОбъектыСИзменениями <> Неопределено Тогда ОбъектыСИзменениями.Добавить(Ссылка); КонецЕсли; КонецЕсли; @@ -185,6 +191,10 @@ ВызватьИсключение; КонецПопытки; + Если ОбъектыСИзменениями <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СвернутьМассив(ОбъектыСИзменениями); + КонецЕсли; + КонецПроцедуры // Заполняет НаборЗаписей родителями объекта, включая себя, как родителя. @@ -308,9 +318,7 @@ СтандартныеПодсистемыСервер.ПроверитьДинамическоеОбновлениеВерсииПрограммы(); ЕстьИзменения = Истина; - Если ОбъектыСИзменениями <> Неопределено - И ОбъектыСИзменениями.Найти(Ссылка) = Неопределено Тогда - + Если ОбъектыСИзменениями <> Неопределено Тогда ОбъектыСИзменениями.Добавить(Ссылка); КонецЕсли; КонецЕсли; diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl index 12cb45818..61c247917 100644 --- a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Form.form b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Form.form index c09469400..147887419 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Form.form +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Form.form @@ -730,7 +730,6 @@ <borderColor xsi:type="core:ColorRef"> <color>Style.BorderColor</color> </borderColor> - <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> </items> <items xsi:type="form:Button"> diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Module.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Module.bsl index f17104321..99f17aea4 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/НастройкиХраненияИстории/Module.bsl @@ -1,4 +1,10 @@ - +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -22,13 +28,6 @@ ПоказыватьНастройкуРасписанияОчистки = Не ОбщегоНазначения.РазделениеВключено(); Элементы.Расписание.Видимость = ПоказыватьНастройкуРасписанияОчистки; Элементы.НастроитьРасписание.Видимость = ПоказыватьНастройкуРасписанияОчистки; - - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВариантВерсионированияГруппа", "Заголовок", НСтр("ru ='Сохранять версии'")); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -571,7 +570,7 @@ КонецЕсли; Если Результат.Статус = "Ошибка" Тогда - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Поиск устаревших версий объектов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Поиск устаревших версий объектов'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), "Ошибка", Результат.ПодробноеПредставлениеОшибки, , Истина); ВызватьИсключение Результат.КраткоеПредставлениеОшибки; КонецЕсли; diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl index ad8e882e1..32a45171b 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -16,4 +24,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Module.bsl index dc995e7d4..83f97c8a9 100644 --- a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl index 337094b59..327082d41 100644 --- a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl index c70b0e49f..cdf23225b 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl index 23044b77f..c0a016674 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl index 97c5d1426..bed0fae25 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl index 98620e65c..ce16f94eb 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form index ec60d1d77..7c686a30c 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Form.form @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> <items xsi:type="form:FormGroup"> <name>ГруппаУсловиеПоДате</name> <id>7</id> @@ -231,6 +231,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>РеквизитСТипомДата</name> <title> diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Module.bsl index b06572197..735a2afce 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаДобавленияУсловияПоДате/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -16,6 +24,11 @@ КонецЕсли; КонецЦикла; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ИнтервалИсключение.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.РеквизитСТипомДата.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Form.form index 80e8a6d66..6c76c9b70 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Form.form @@ -3,7 +3,6 @@ <items xsi:type="form:Table"> <name>ПравилоНастройкиОтбор</name> <id>10</id> - <displayImportance>VeryHigh</displayImportance> <title> <key>ru</key> <value>Правило настройки отбор</value> @@ -144,6 +143,7 @@ <verticalStretch>true</verticalStretch> <enableStartDrag>true</enableStartDrag> <enableDrag>true</enableDrag> + <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <viewMode>All</viewMode> <settingsNamedItemDetailedRepresentation>false</settingsNamedItemDetailedRepresentation> diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl index fd5db729e..397e190d1 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -10,6 +18,10 @@ Элементы.ДобавитьУсловиеПоДате.Доступность = Ложь; КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ПравилоНастройкиОтборГруппаКолонокПрименение.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -84,7 +96,6 @@ КонецЕсли; ВсеСправочники = Справочники.ТипВсеСсылки(); ВсеДокументы = Документы.ТипВсеСсылки(); - ЕстьТипДата = Ложь; ТекстЗапроса = "ВЫБРАТЬ | " + ТипОбъекта.Имя + ".Ссылка,"; @@ -101,7 +112,6 @@ Если Реквизит.Тип.СодержитТип(Тип("Дата")) Тогда МассивРеквизитовСТипомДата.Добавить(Реквизит.Имя, Реквизит.Синоним); ТекстЗапроса = ТекстЗапроса + Символы.ПС + "РАЗНОСТЬДАТ(" + Реквизит.Имя + ", &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт" + Реквизит.Имя + ","; - ЕстьТипДата = Истина; КонецЕсли; КонецЦикла; КонецЕсли; diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form index f9a15c2a6..fc47631d1 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form @@ -65,6 +65,7 @@ <items xsi:type="form:FormField"> <name>ДеревоОбъектовМетаданныхСинонимНаименованияОбъекта</name> <id>31</id> + <displayImportance>VeryHigh</displayImportance> <title> <key>ru</key> <value>Объект с файлами</value> @@ -111,6 +112,7 @@ <items xsi:type="form:FormField"> <name>ДеревоОбъектовМетаданныхТипВладельцаФайла</name> <id>107</id> + <displayImportance>Usual</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible/> @@ -150,6 +152,7 @@ <items xsi:type="form:FormField"> <name>ДеревоОбъектовМетаданныхДействие</name> <id>25</id> + <displayImportance>Usual</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -197,6 +200,7 @@ <items xsi:type="form:FormField"> <name>ДеревоОбъектовМетаданныхПериодОчистки</name> <id>28</id> + <displayImportance>Usual</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -244,6 +248,7 @@ <items xsi:type="form:FormField"> <name>ДеревоОбъектовМетаданныхПравилоОтбора</name> <id>34</id> + <displayImportance>VeryLow</displayImportance> <visible>true</visible> <enabled>true</enabled> <userVisible> diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl index dcca905c5..d3fc42763 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -24,28 +32,6 @@ Элементы.Расписание.Видимость = Ложь; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Элементы.Переместить(Элементы.ФормаДобавить, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаДобавить", "АктивизироватьПоУмолчанию", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаДобавить", "КнопкаПоУмолчанию", Истина); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаУстановитьДействиеОчиститьФайлыИВерсии", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаУстановитьДействиеОчиститьФайлы", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаУстановитьДействиеОчиститьВерсии", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаУстановитьДействиеНеОчищать", "ТолькоВоВсехДействиях", Истина); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСтаршеМесяца", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСтаршеШестиМесяцев", "ТолькоВоВсехДействиях", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаСтаршеГода", "ТолькоВоВсехДействиях", Истина); - - Элементы.ПериодОчисткиГруппа.ВажностьПриОтображении = ВажностьПриОтображении.ОченьНизкая; - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -335,13 +321,10 @@ ТаблицаТипов = Новый ТаблицаЗначений; ТаблицаТипов.Колонки.Добавить("ВладелецФайла"); ТаблицаТипов.Колонки.Добавить("ТипВладельцаФайла"); + ТаблицаТипов.Колонки.Добавить("ИмяВладельцаФайла"); ТаблицаТипов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); ТаблицаТипов.Колонки.Добавить("ВозможностьДетализации" , Новый ОписаниеТипов("Булево")); - - ВидИерархииГруппИЭлементов = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов; - МассивИсключений = РаботаСФайламиСлужебный.ОбъектыИсключенияПриОчисткеФайлов(); - Для Каждого Справочник Из МетаданныеСправочники Цикл Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); @@ -355,6 +338,7 @@ НоваяСтрока.ВладелецФайла = ТипВладельца; НоваяСтрока.ТипВладельцаФайла = Справочник; МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельца); + НоваяСтрока.ИмяВладельцаФайла = МетаданныеВладельца.ПолноеИмя(); Если Метаданные.Справочники.Содержит(МетаданныеВладельца) И МетаданныеВладельца.Иерархический Тогда @@ -375,7 +359,16 @@ УзелДокументы = Неопределено; УзелБизнесПроцессы = Неопределено; + ВладельцыФайлов = Новый Массив; Для Каждого Тип Из ТаблицаТипов Цикл + + Если СтрНачинаетсяС(Тип.ТипВладельцаФайла.Имя, "Удалить") + Или ВладельцыФайлов.Найти(Тип.ИмяВладельцаФайла) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ВладельцыФайлов.Добавить(Тип.ИмяВладельцаФайла); + Если ВсеСправочники.СодержитТип(Тип.ВладелецФайла) Тогда Если УзелСправочники = Неопределено Тогда УзелСправочники = ДеревоОМ.Строки.Добавить(); @@ -393,8 +386,6 @@ ДетализированнаяНастройка.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.ВладелецФайла; ДетализированнаяНастройка.Действие = Настройка.Действие; - ПредставлениеОтбора = ""; - ПравилоОтбора = Настройка.ПравилоОтбора.Получить(); ДетализированнаяНастройка.ПравилоОтбора = "Изменить"; ДетализированнаяНастройка.ПериодОчистки = Настройка.ПериодОчистки; ДетализированнаяНастройка.ЭтоФайл = Настройка.ЭтоФайл; diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl index acaad8e2d..01333cea8 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -53,7 +61,6 @@ Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл НоваяСтрока = ТаблицаВладельцевФайлов.Добавить(); НоваяСтрока.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипВладельца); - НоваяСтрокаЗначениеПустойСсылкиВладельца = НоваяСтрока.ВладелецФайла.ЗначениеПустойСсылки; НоваяСтрока.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Справочник); Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда НоваяСтрока.ЭтоФайл = Истина; @@ -62,8 +69,6 @@ КонецЕсли; КонецЦикла; - ВыборкаЗаписей = Выбрать(); - Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Module.bsl index 55697502b..ba03dba91 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,8 +15,6 @@ Возврат; КонецЕсли; - Чтение = Истина; - ТолькоПросмотр = Истина; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Module.bsl index 4eb61981d..7b7094579 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -10,7 +17,6 @@ Возврат; КонецЕсли; - Чтение = Истина; ТолькоПросмотр = Истина; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl index 931bc4530..83adc34fa 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -581,7 +589,7 @@ ТекстЗапроса, Поля, "РегистрСведений.НастройкиПравОбъектов", ТекстЗапросовВременныхТаблиц); Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиПравОбъектов"); + Блокировка.Добавить("РегистрСведений.НастройкиПравОбъектов"); НачатьТранзакцию(); Попытка diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/НастройкиПравОбъектов.mdo b/SSL/src/InformationRegisters/НастройкиПравОбъектов/НастройкиПравОбъектов.mdo index 49f03b005..be673ed62 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/НастройкиПравОбъектов.mdo +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/НастройкиПравОбъектов.mdo @@ -355,6 +355,7 @@ <value>Таблица</value> </synonym> <type> + <types>CatalogRef.ИдентификаторыОбъектовРасширений</types> <types>CatalogRef.ИдентификаторыОбъектовМетаданных</types> </type> <toolTip> diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form index ec60d1d77..7c686a30c 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> <items xsi:type="form:FormGroup"> <name>ГруппаУсловиеПоДате</name> <id>7</id> @@ -231,6 +231,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>КоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>РеквизитСТипомДата</name> <title> diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl index 69c806e51..7ea46900a 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -16,6 +24,11 @@ КонецЕсли; КонецЦикла; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ИнтервалИсключение.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.РеквизитСТипомДата.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -26,12 +39,12 @@ Процедура ОК(Команда) Если ИнтервалИсключение = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Количество дней не может быть равно 0.'"),,, "ИнтервалИсключение"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Количество дней не может быть равно 0.'"),,, "ИнтервалИсключение"); Возврат; КонецЕсли; Если Не ЗначениеЗаполнено(РеквизитСТипомДата) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Необходимо заполнить условия очистки файлов.'"),,, "РеквизитСТипомДата"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Необходимо заполнить условия очистки файлов.'"),,, "РеквизитСТипомДата"); Возврат; КонецЕсли; diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form index 970eec239..9a0812fd0 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form @@ -31,62 +31,107 @@ <excludedCommands>SortListAsc</excludedCommands> <excludedCommands>SortListDesc</excludedCommands> <excludedCommands>Tree</excludedCommands> - <items xsi:type="form:FormField"> - <name>ДеревоОбъектовМетаданныхСинхронизировать</name> - <id>44</id> + <items xsi:type="form:FormGroup"> + <name>ДеревоОбъектовМетаданныхГруппа</name> + <id>117</id> + <items xsi:type="form:FormField"> + <name>ДеревоОбъектовМетаданныхСинхронизировать</name> + <id>44</id> + <displayImportance>VeryLow</displayImportance> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ДеревоОбъектовМетаданных.Синхронизировать</segments> + </dataPath> + <titleLocation>None</titleLocation> + <handlers> + <event>OnChange</event> + <name>ДеревоОбъектовМетаданныхСинхронизироватьПриИзменении</name> + </handlers> + <extendedTooltip> + <name>ДеревоОбъектовМетаданныхСинхронизироватьРасширеннаяПодсказка</name> + <id>46</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ДеревоОбъектовМетаданныхСинхронизироватьКонтекстноеМеню</name> + <id>45</id> + <autoFill>true</autoFill> + </contextMenu> + <type>CheckBoxField</type> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> + </items> + <items xsi:type="form:FormField"> + <name>ДеревоОбъектовМетаданныхСинонимНаименованияОбъекта</name> + <id>29</id> + <displayImportance>VeryHigh</displayImportance> + <title> + <key>ru</key> + <value>Объект с файлами</value> + + true + true + + true + + + ДеревоОбъектовМетаданных.СинонимНаименованияОбъекта + + + ДеревоОбъектовМетаданныхСинонимНаименованияОбъектаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхСинонимНаименованияОбъектаКонтекстноеМеню + 30 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - ДеревоОбъектовМетаданных.Синхронизировать - - None - - OnChange - ДеревоОбъектовМетаданныхСинхронизироватьПриИзменении - - - ДеревоОбъектовМетаданныхСинхронизироватьРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - - ДеревоОбъектовМетаданныхСинхронизироватьКонтекстноеМеню - 45 - true - - CheckBoxField - Auto - true - Left - true - - - - ДеревоОбъектовМетаданныхСинонимНаименованияОбъекта - 29 <key>ru</key> <value>Объект с файлами</value> - true - true - - true - - - ДеревоОбъектовМетаданных.СинонимНаименованияОбъекта - - ДеревоОбъектовМетаданныхСинонимНаименованияОбъектаРасширеннаяПодсказка - 31 + ДеревоОбъектовМетаданныхГруппаРасширеннаяПодсказка + 118 Label true true @@ -94,30 +139,17 @@ Left - - ДеревоОбъектовМетаданныхСинонимНаименованияОбъектаКонтекстноеМеню - 30 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal + ColumnGroup + + InCell + auto + true
            ДеревоОбъектовМетаданныхТипВладельцаФайла 97 + VeryLow true true @@ -157,6 +189,7 @@ ДеревоОбъектовМетаданныхУчетнаяЗапись 47 + VeryLow true true @@ -203,6 +236,7 @@ ДеревоОбъектовМетаданныхПравилоОтбора 32 + VeryLow true true @@ -257,6 +291,10 @@ Selection ДеревоОбъектовМетаданныхВыбор
            + + BeforeAddRow + ДеревоОбъектовМетаданныхПередНачаломДобавления + BeforeDeleteRow ДеревоОбъектовМетаданныхПередУдалением @@ -565,7 +603,6 @@ true UserCmds Auto - InAdditionalSubmenu true true @@ -576,6 +613,7 @@ ru Синхронизация + true СинхронизацияРасширеннаяПодсказка 91 @@ -596,6 +634,37 @@ СтатусФоновогоЗадания 92 + + КартинкаФоновогоЗадания + 114 + true + true + + true + + + КартинкаФоновогоЗаданияРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + КартинкаФоновогоЗаданияКонтекстноеМеню + 115 + true + + true + true + + + CommonPicture.ДлительнаяОперация16 + + + ИнформацияОФоновомЗадании 94 @@ -624,7 +693,9 @@ true Label + true true + false Left @@ -638,6 +709,7 @@ ru Статус фонового задания + true СтатусФоновогоЗаданияРасширеннаяПодсказка 93 @@ -650,7 +722,7 @@ Page - Vertical + AlwaysHorizontal auto false @@ -701,6 +773,7 @@ UsualGroup HorizontalIfPossible + Center Auto true true @@ -1365,7 +1438,7 @@ 5 ru - Синхронизировать + Синхронизировать файлы с облаком сейчас true diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl index 7a1bb4d05..51b13e3bd 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -28,9 +35,13 @@ Элементы.Расписание.Видимость = Ложь; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаДобавитьСинхронизациюФайлов", "Отображение", ОтображениеКнопки.Картинка); + Элементы.ДеревоОбъектовМетаданных.Шапка = Ложь; + Элементы.ДеревоОбъектовМетаданныхУчетнаяЗапись.Видимость = Ложь; + Элементы.ДеревоОбъектовМетаданныхПравилоОтбора.Видимость = Ложь; + Элементы.ДеревоОбъектовМетаданныхСинхронизировать.Видимость = Ложь; + Элементы.ДеревоОбъектовМетаданныхТипВладельцаФайла.Видимость = Ложь; КонецЕсли; @@ -53,8 +64,6 @@ Процедура ДеревоОбъектовМетаданныхСинхронизироватьПриИзменении(Элемент) ТекущиеДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; - Модифицированность = Истина; - Если Не ЗначениеЗаполнено(ТекущиеДанные.УчетнаяЗапись) Тогда ТекущиеДанные.Синхронизировать = Ложь; ОткрытьФормуНастроек(); @@ -86,10 +95,13 @@ &НаКлиенте Процедура ДеревоОбъектовМетаданныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; ОткрытьФормуНастроек(); - +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; КонецПроцедуры &НаКлиенте @@ -130,7 +142,7 @@ СтрокаДерева = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; Если Не СтрокаДерева.ВозможностьДетализации Тогда ТекстСообщения = НСтр("ru = 'Добавление настройки возможно только для иерархических справочников'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); Возврат; КонецЕсли; @@ -204,111 +216,92 @@ &НаСервере Процедура ЗаполнитьТипыОбъектовВДеревеЗначений() - НастройкиСинхронизации = РегистрыСведений.НастройкиСинхронизацииФайлов.ТекущиеНастройкиСинхронизации(); + ДеревоНастроек = РеквизитФормыВЗначение("ДеревоОбъектовМетаданных"); + ДеревоНастроек.Строки.Очистить(); - ДеревоОМ = РеквизитФормыВЗначение("ДеревоОбъектовМетаданных"); - ДеревоОМ.Строки.Очистить(); + ТаблицаВладельцевФайлов = Новый ТаблицаЗначений; + ТаблицаВладельцевФайлов.Колонки.Добавить("ВладелецФайла"); + ТаблицаВладельцевФайлов.Колонки.Добавить("ТипВладельцаФайла"); + ТаблицаВладельцевФайлов.Колонки.Добавить("ИмяВладельцаФайла"); + ТаблицаВладельцевФайлов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); + ТаблицаВладельцевФайлов.Колонки.Добавить("ВозможностьДетализации", Новый ОписаниеТипов("Булево")); - МетаданныеСправочники = Метаданные.Справочники; + ИсключенияСинхронизацииФайлов = Новый Соответствие; + Для каждого ИсключениеСинхронизации Из РаботаСФайламиСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов() Цикл + ИсключенияСинхронизацииФайлов[ИсключениеСинхронизации] = Истина; + КонецЦикла; - ТаблицаТипов = Новый ТаблицаЗначений; - ТаблицаТипов.Колонки.Добавить("ВладелецФайла"); - ТаблицаТипов.Колонки.Добавить("ТипВладельцаФайла"); - ТаблицаТипов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); - ТаблицаТипов.Колонки.Добавить("ВозможностьДетализации", Новый ОписаниеТипов("Булево")); - - ВидИерархииГруппИЭлементов = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов; - - МассивИсключений = РаботаСФайламиСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(); - - Для Каждого Справочник Из МетаданныеСправочники Цикл + МетаданныеВладельцев = Новый Массив; + Для Каждого Справочник Из Метаданные.Справочники Цикл - Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда - - ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); - Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл - - МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельца); - Если МассивИсключений.Найти(МетаданныеВладельца) <> Неопределено Тогда - Продолжить; - КонецЕсли; - - НоваяСтрока = ТаблицаТипов.Добавить(); - НоваяСтрока.ВладелецФайла = ТипВладельца; - НоваяСтрока.ТипВладельцаФайла = Справочник; - НоваяСтрока.ВозможностьДетализации = Истина; - НоваяСтрока.ЭтоФайл = Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы"); - - КонецЦикла; - + Если Справочник.Реквизиты.Найти("ВладелецФайла") = Неопределено Тогда + Продолжить; КонецЕсли; + + ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); + Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл + + МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельца); + Если ИсключенияСинхронизацииФайлов[МетаданныеВладельца] <> Неопределено Тогда + Продолжить; + КонецЕсли; + МетаданныеВладельцев.Добавить(МетаданныеВладельца.ПолноеИмя()); + + НоваяСтрока = ТаблицаВладельцевФайлов.Добавить(); + НоваяСтрока.ВладелецФайла = ТипВладельца; + НоваяСтрока.ТипВладельцаФайла = Справочник; + НоваяСтрока.ИмяВладельцаФайла = МетаданныеВладельца.ПолноеИмя(); + НоваяСтрока.ВозможностьДетализации = Истина; + НоваяСтрока.ЭтоФайл = Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы"); + + КонецЦикла; КонецЦикла; - ВсеСправочники = Справочники.ТипВсеСсылки(); - ВсеДокументы = Документы.ТипВсеСсылки(); - Узлы = Новый Соответствие; + НастройкиСинхронизации = РегистрыСведений.НастройкиСинхронизацииФайлов.ТекущиеНастройкиСинхронизации(); + НастройкиСинхронизации.Индексы.Добавить("ИдентификаторВладельца, ЭтоФайл"); - Для Каждого Тип Из ТаблицаТипов Цикл + ИдентификаторыВладельцев = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(МетаданныеВладельцев); + + ВсеСправочники = Справочники.ТипВсеСсылки(); + ВсеДокументы = Документы.ТипВсеСсылки(); + УзелСправочники = Неопределено; + УзелДокументы = Неопределено; + УзелБизнесПроцессы = Неопределено; + + ВладельцыФайлов = Новый Массив; + Для Каждого СведенияОВладельце Из ТаблицаВладельцевФайлов Цикл + + Если СтрНачинаетсяС(СведенияОВладельце.ТипВладельцаФайла.Имя, "Удалить") + Или ВладельцыФайлов.Найти(СведенияОВладельце.ИмяВладельцаФайла) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ВладельцыФайлов.Добавить(СведенияОВладельце.ИмяВладельцаФайла); + НастройкаИмеетГлобальныеПравила = Ложь; - Если ВсеСправочники.СодержитТип(Тип.ВладелецФайла) Тогда - Если Узлы["Справочники"] = Неопределено Тогда - УзелСправочники = ДеревоОМ.Строки.Добавить(); + Если ВсеСправочники.СодержитТип(СведенияОВладельце.ВладелецФайла) Тогда + Если УзелСправочники = Неопределено Тогда + УзелСправочники = ДеревоНастроек.Строки.Добавить(); УзелСправочники.СинонимНаименованияОбъекта = НСтр("ru = 'Справочники'"); - Узлы.Вставить("Справочники", УзелСправочники); КонецЕсли; - НоваяСтрокаТаблицы = Узлы["Справочники"].Строки.Добавить(); - ИначеЕсли ВсеДокументы.СодержитТип(Тип.ВладелецФайла) Тогда - - Если Узлы["Документы"] = Неопределено Тогда - УзелДокументы = ДеревоОМ.Строки.Добавить(); + НоваяСтрокаТаблицы = УзелСправочники.Строки.Добавить(); + ИначеЕсли ВсеДокументы.СодержитТип(СведенияОВладельце.ВладелецФайла) Тогда + Если УзелДокументы = Неопределено Тогда + УзелДокументы = ДеревоНастроек.Строки.Добавить(); УзелДокументы.СинонимНаименованияОбъекта = НСтр("ru = 'Документы'"); - Узлы.Вставить("Документы", УзелДокументы); КонецЕсли; - НоваяСтрокаТаблицы = Узлы["Документы"].Строки.Добавить(); - ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип.ВладелецФайла) Тогда - - Если Узлы["БизнесПроцессы"] = Неопределено Тогда - УзелБизнесПроцессы = ДеревоОМ.Строки.Добавить(); + НоваяСтрокаТаблицы = УзелДокументы.Строки.Добавить(); + ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(СведенияОВладельце.ВладелецФайла) Тогда + Если УзелБизнесПроцессы = Неопределено Тогда + УзелБизнесПроцессы = ДеревоНастроек.Строки.Добавить(); УзелБизнесПроцессы.СинонимНаименованияОбъекта = НСтр("ru = 'Бизнес-процессы'"); - Узлы.Вставить("БизнесПроцессы", УзелБизнесПроцессы); КонецЕсли; - НоваяСтрокаТаблицы = Узлы["БизнесПроцессы"].Строки.Добавить(); + НоваяСтрокаТаблицы = УзелБизнесПроцессы.Строки.Добавить(); КонецЕсли; - ИдентификаторОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); - Отбор = Новый Структура("ВладелецФайла, ЭтоФайл", ИдентификаторОбъекта, Тип.ЭтоФайл); - ДетализированныеНастройки = НастройкиСинхронизации.НайтиСтроки(Отбор); - Если ДетализированныеНастройки.Количество() > 1 Тогда - НастройкаИмеетГлобальныеПравила = Истина; - Для Каждого Настройка Из ДетализированныеНастройки Цикл - ПравилоОтбора = Настройка.ПравилоОтбора.Получить(); - ДетализированнаяНастройка = НоваяСтрокаТаблицы.Строки.Добавить(); - ДетализированнаяНастройка.ВладелецФайла = Настройка.ВладелецФайла; - ДетализированнаяНастройка.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; - - ЕстьПравилоОтбора = Ложь; - Если ПравилоОтбора <> Неопределено Тогда - ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; - КонецЕсли; - - Если Не ПустаяСтрока(Настройка.Наименование) Тогда - ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.Наименование; - Иначе - ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.ВладелецФайла.Синоним; - КонецЕсли; - - ДетализированнаяНастройка.Синхронизировать = Настройка.Синхронизировать; - ДетализированнаяНастройка.УчетнаяЗапись = Настройка.УчетнаяЗапись; - ДетализированнаяНастройка.ЭтоФайл = Настройка.ЭтоФайл; - ДетализированнаяНастройка.ПравилоОтбора = - ?(ЕстьПравилоОтбора, НСтр("ru = 'Выбранные файлы'"), НСтр("ru = 'Все файлы'")); - - КонецЦикла; - КонецЕсли; - - ИдентификаторОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); - Отбор = Новый Структура("ИдентификаторВладельца, ЭтоФайл", ИдентификаторОбъекта, Тип.ЭтоФайл); + ИдентификаторОбъекта = ИдентификаторыВладельцев[СведенияОВладельце.ИмяВладельцаФайла]; + Отбор = Новый Структура("ИдентификаторВладельца, ЭтоФайл", ИдентификаторОбъекта, СведенияОВладельце.ЭтоФайл); ДетализированныеНастройки = НастройкиСинхронизации.НайтиСтроки(Отбор); Если ДетализированныеНастройки.Количество() > 0 Тогда Для Каждого Настройка Из ДетализированныеНастройки Цикл @@ -342,44 +335,40 @@ КонецЦикла; КонецЕсли; - МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип.ВладелецФайла); - НоваяСтрокаТаблицы.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); - НоваяСтрокаТаблицы.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ТипВладельцаФайла); + МетаданныеОбъекта = Метаданные.НайтиПоТипу(СведенияОВладельце.ВладелецФайла); + НоваяСтрокаТаблицы.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(СведенияОВладельце.ВладелецФайла); + НоваяСтрокаТаблицы.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(СведенияОВладельце.ТипВладельцаФайла); НоваяСтрокаТаблицы.СинонимНаименованияОбъекта = МетаданныеОбъекта.Синоним; - НоваяСтрокаТаблицы.ЭтоФайл = Тип.ЭтоФайл; - НоваяСтрокаТаблицы.ВозможностьДетализации = Тип.ВозможностьДетализации; + НоваяСтрокаТаблицы.ЭтоФайл = СведенияОВладельце.ЭтоФайл; + НоваяСтрокаТаблицы.ВозможностьДетализации = СведенияОВладельце.ВозможностьДетализации; - Если Не НастройкаИмеетГлобальныеПравила Тогда + Отбор = Новый Структура("ВладелецФайла, ЭтоФайл", НоваяСтрокаТаблицы.ВладелецФайла, НоваяСтрокаТаблицы.ЭтоФайл); + НайденныеНастройки = НастройкиСинхронизации.НайтиСтроки(Отбор); + + Если НайденныеНастройки.Количество() > 0 Тогда - Отбор = Новый Структура("ВладелецФайла, ЭтоФайл", НоваяСтрокаТаблицы.ВладелецФайла, НоваяСтрокаТаблицы.ЭтоФайл); - НайденныеНастройки = НастройкиСинхронизации.НайтиСтроки(Отбор); + ПравилоОтбора = НайденныеНастройки[0].ПравилоОтбора.Получить(); - Если НайденныеНастройки.Количество() > 0 Тогда - - ПравилоОтбора = НайденныеНастройки[0].ПравилоОтбора.Получить(); - - НоваяСтрокаТаблицы.Синхронизировать = НайденныеНастройки[0].Синхронизировать; - НоваяСтрокаТаблицы.УчетнаяЗапись = НайденныеНастройки[0].УчетнаяЗапись; - Если ПравилоОтбора <> Неопределено И ПравилоОтбора.Отбор.Элементы.Количество() > 0 Тогда - НоваяСтрокаТаблицы.ПравилоОтбора = ?(ПустаяСтрока(НайденныеНастройки[0].Наименование), НСтр("ru = 'Выбранные файлы'"), НайденныеНастройки[0].Наименование); - Иначе - НоваяСтрокаТаблицы.ПравилоОтбора = НСтр("ru = 'Все файлы'"); - КонецЕсли; - + НоваяСтрокаТаблицы.Синхронизировать = НайденныеНастройки[0].Синхронизировать; + НоваяСтрокаТаблицы.УчетнаяЗапись = НайденныеНастройки[0].УчетнаяЗапись; + Если ПравилоОтбора <> Неопределено И ПравилоОтбора.Отбор.Элементы.Количество() > 0 Тогда + НоваяСтрокаТаблицы.ПравилоОтбора = ?(ПустаяСтрока(НайденныеНастройки[0].Наименование), + НСтр("ru = 'Выбранные файлы'"), НайденныеНастройки[0].Наименование); Иначе - - НоваяСтрокаТаблицы.Синхронизировать = Перечисления.ВариантыОчисткиФайлов.НеОчищать; НоваяСтрокаТаблицы.ПравилоОтбора = НСтр("ru = 'Все файлы'"); - КонецЕсли; + Иначе + НоваяСтрокаТаблицы.Синхронизировать = Перечисления.ВариантыОчисткиФайлов.НеОчищать; + НоваяСтрокаТаблицы.ПравилоОтбора = НСтр("ru = 'Все файлы'"); КонецЕсли; + КонецЦикла; - Для Каждого УзелВерхнегоУровня Из ДеревоОМ.Строки Цикл + Для Каждого УзелВерхнегоУровня Из ДеревоНастроек.Строки Цикл УзелВерхнегоУровня.Строки.Сортировать("СинонимНаименованияОбъекта"); КонецЦикла; - ЗначениеВРеквизитФормы(ДеревоОМ, "ДеревоОбъектовМетаданных"); + ЗначениеВРеквизитФормы(ДеревоНастроек, "ДеревоОбъектовМетаданных"); КонецПроцедуры @@ -432,11 +421,13 @@ Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ЭлементДерева.ПолучитьРодителя() = Неопределено Тогда - Для Каждого ПодчиненныйЭлементДерева Из ЭлементДерева.ПолучитьЭлементы() Цикл - УстановитьЗначениеСинхронизацииОбъекта(ПодчиненныйЭлементДерева, Синхронизировать); - КонецЦикла; + Если ЭлементДерева.ПолучитьРодителя() <> Неопределено Тогда + УстановитьЗначениеСинхронизацииОбъекта(ЭлементДерева, Синхронизировать); + Продолжить; КонецЕсли; + Для Каждого ПодчиненныйЭлементДерева Из ЭлементДерева.ПолучитьЭлементы() Цикл + УстановитьЗначениеСинхронизацииОбъекта(ПодчиненныйЭлементДерева, Синхронизировать); + КонецЦикла; КонецЦикла; КонецПроцедуры @@ -779,4 +770,5 @@ КонецЕсли; КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Form.form index e026dc9e0..89c60b1ba 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Form.form +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Form.form @@ -49,6 +49,7 @@ Запись.УчетнаяЗапись + true None ru diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Module.bsl index 43baaacd3..b7b9da4da 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Module.bsl @@ -1,10 +1,16 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ИдентификаторВладельцаФайлов = Неопределено; - Если Параметры.Свойство("ВладелецФайла") Тогда Запись.ВладелецФайла = Параметры.ВладелецФайла; КонецЕсли; diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form index d06c231f7..75f69dbfe 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form @@ -93,6 +93,7 @@ ГруппаОбъектСинхронизации 67 + VeryHigh ГруппаСинхронизацияФайловОбъекта 72 @@ -317,6 +318,7 @@ ПравилоНастройкиОтбор 10 + VeryLow <key>ru</key> <value>Правило настройки отбор</value> @@ -823,6 +825,7 @@ <verticalStretch>true</verticalStretch> <enableStartDrag>true</enableStartDrag> <enableDrag>true</enableDrag> + <currentRowUse>SelectionPresentationAndChoice</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <viewMode>All</viewMode> <settingsNamedItemDetailedRepresentation>false</settingsNamedItemDetailedRepresentation> @@ -830,6 +833,7 @@ <items xsi:type="form:FormField"> <name>Наименование</name> <id>88</id> + <displayImportance>VeryHigh</displayImportance> <title> <key>ru</key> <value>Краткое описание правила</value> diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl index f72d31a5a..d3e72d3ba 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -78,6 +86,12 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ПравилоНастройкиОтбор.РасширеннаяПодсказка.Заголовок, ПредставлениеТипВФ); Элементы.ОбъектСинхронизацииВсеФайлы.СписокВыбора[0].Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ОбъектСинхронизацииВсеФайлы.СписокВыбора[0].Представление, ПредставлениеТипВФ); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.ПравилоНастройкиОтбор.Шапка = Ложь; + Элементы.Наименование.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.ПравилоНастройкиОтборГруппаКолонокПрименение.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -104,7 +118,7 @@ Если ОбъектСинхронизации = "ТолькоФайлыЭлемента" И Не ЗначениеЗаполнено(ЭлементСправочника) Тогда Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru = 'Не заполнен объект с присоединенными файлами.'"), , "ЭлементСправочника"); @@ -233,7 +247,6 @@ КонецЕсли; ВсеСправочники = Справочники.ТипВсеСсылки(); ВсеДокументы = Документы.ТипВсеСсылки(); - ЕстьТипДата = Ложь; ТекстЗапроса = "ВЫБРАТЬ | " + ТипОбъекта.Имя + ".Ссылка,"; @@ -250,7 +263,6 @@ Если Реквизит.Тип.СодержитТип(Тип("Дата")) Тогда МассивРеквизитовСТипомДата.Добавить(Реквизит.Имя, Реквизит.Синоним); ТекстЗапроса = ТекстЗапроса + Символы.ПС + "РАЗНОСТЬДАТ(" + Реквизит.Имя + ", &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт" + Реквизит.Имя + ","; - ЕстьТипДата = Истина; КонецЕсли; КонецЦикла; КонецЕсли; @@ -294,9 +306,14 @@ СинхронизацияСправочника = ОбъектСинхронизации = "ВсеФайлы"; +#Если МобильныйКлиент Тогда + Элементы.ПравилоСинхронизацииГруппа.Видимость = СинхронизацияСправочника; + Элементы.ЭлементСправочника.Видимость = Не СинхронизацияСправочника; +#Иначе Элементы.ПравилоСинхронизацииГруппа.Доступность = СинхронизацияСправочника; Элементы.ЭлементСправочника.Доступность = Не СинхронизацияСправочника; - +#КонецЕсли + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl index 177e3d6d0..19853bfa0 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -37,39 +45,36 @@ Процедура ОбновитьНастройкиСинхронизации() - МетаданныеСправочники = Метаданные.Справочники; - ТаблицаВладельцевФайлов = Новый ТаблицаЗначений; ТаблицаВладельцевФайлов.Колонки.Добавить("ВладелецФайла", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); ТаблицаВладельцевФайлов.Колонки.Добавить("ТипВладельцаФайла", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); ТаблицаВладельцевФайлов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); - Для Каждого Справочник Из МетаданныеСправочники Цикл - Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда + ИсключенияСинхронизацииФайлов = Новый Соответствие; + Для каждого ИсключениеСинхронизации Из РаботаСФайламиСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов() Цикл + ИсключенияСинхронизацииФайлов[ИсключениеСинхронизации.ПолноеИмя()] = Истина; + КонецЦикла; + + Для Каждого Справочник Из Метаданные.Справочники Цикл + Если Справочник.Реквизиты.Найти("ВладелецФайла") = Неопределено Тогда + Продолжить; + КонецЕсли; - ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); - Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл - НоваяСтрока = ТаблицаВладельцевФайлов.Добавить(); - НоваяСтрока.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипВладельца); - НоваяСтрокаЗначениеПустойСсылкиВладельца = НоваяСтрока.ВладелецФайла.ЗначениеПустойСсылки; - НоваяСтрока.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Справочник); - Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда - НоваяСтрока.ЭтоФайл = Истина; - КонецЕсли; - КонецЦикла; - КонецЕсли; + ТипыВладельцевФайлов = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(Справочник.Реквизиты.ВладелецФайла.Тип.Типы()); + Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл + + Если ИсключенияСинхронизацииФайлов[ТипВладельца.Ключ] <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ВладелецФайла = ТипВладельца.Значение; + НоваяСтрока = ТаблицаВладельцевФайлов.Добавить(); + НоваяСтрока.ВладелецФайла = ВладелецФайла; + НоваяСтрока.ТипВладельцаФайла= ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Справочник); + НоваяСтрока.ЭтоФайл = Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы"); + КонецЦикла; КонецЦикла; - МассивИсключений = РаботаСФайламиСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(); - Для каждого ОбъектИсключение Из МассивИсключений Цикл - НайденнаяСтрока = ТаблицаВладельцевФайлов.Найти(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектИсключение), "ВладелецФайла"); - Если НайденнаяСтрока <> Неопределено Тогда - ТаблицаВладельцевФайлов.Удалить(НайденнаяСтрока); - КонецЕсли; - КонецЦикла; - - ВыборкаЗаписей = Выбрать(); - Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Module.bsl index a4ddb8dc5..d11c000af 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -121,7 +128,7 @@ СообщениеПользователю = ""; Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Запись.Корреспондент, ПараметрыПодключения, СообщениеПользователю) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,, "WSПароль",, Отказ); + ОбщегоНазначения.СообщитьПользователю(СообщениеПользователю,, "WSПароль",, Отказ); Иначе // Проверка подключения прошла успешно, записываем пароль, если он был изменен Если WSПарольИзменен Тогда diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl index e198dc25b..ac41ae785 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -270,7 +278,7 @@ &НаСервере Процедура ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы() - Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда Возврат; КонецЕсли; @@ -393,12 +401,12 @@ &НаСервере Процедура ЗагрузитьПриоритетныеДанныеВПодчиненныйУзелРИБ() - Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда Возврат; КонецЕсли; - Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "ПропуститьЗагрузкуПриоритетныхДанныхПередЗапуском") Тогда Возврат; КонецЕсли; diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl index 357a58476..25fa5da5e 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -294,7 +302,7 @@ Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспортаСтрокой], СообщениеОбОшибке, НовыйПароль); Если Отказ Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); КонецЕсли; КонецПроцедуры @@ -324,7 +332,12 @@ КонецЕсли; - ОбменДаннымиВызовСервера.ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, ПараметрыСоединения); + // Выполняем попытку установки внешнего соединения. + Результат = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(ПараметрыСоединения); + // Выводим сообщение об ошибке. + Если Результат.Соединение = Неопределено Тогда + ОбщегоНазначения.СообщитьПользователю(Результат.КраткоеОписаниеОшибки, , , , Отказ); + КонецЕсли; КонецПроцедуры @@ -348,7 +361,7 @@ СообщениеПользователю = ""; Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Запись.Корреспондент, ПараметрыПодключения, СообщениеПользователю) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(СообщениеПользователю,,,, Отказ); КонецЕсли; КонецПроцедуры @@ -490,19 +503,28 @@ Если Результат = КодВозвратаДиалога.ОК Тогда - Отказ = Ложь; - ОчиститьСообщения(); Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда - - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); - + Оповещение = Новый ОписаниеОповещения("ПроверитьПодключениеCOMЗавершениеПослеПроверкиCOMСоединителя", ЭтотОбъект); + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь, Оповещение); + Иначе + ПроверитьПодключениеCOMЗавершениеПослеПроверкиCOMСоединителя(Истина, Неопределено); КонецЕсли; - ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключениеCOMЗавершениеПослеПроверкиCOMСоединителя(Зарегистрировано, Контекст) Экспорт + + Если Зарегистрировано Тогда - ОповеститьПользователяОРезультатахПодключения(Отказ); + Отказ = Ложь; + + ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ); + ОповеститьПользователяОРезультатахПодключения(Отказ) КонецЕсли; diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl index bbea630b6..14f160624 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl @@ -1,10 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс // Процедура добавляет запись в регистр по переданным значениям структуры. Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт - + НачатьТранзакцию(); Попытка ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиТранспортаОбменаДанными"); @@ -92,6 +100,43 @@ Возврат Результат; КонецФункции +Функция НастройкиТранспортаВнешнейСистемы(Корреспондент) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | НастройкиТранспортаОбменаДанными.ПараметрыПодключенияВнешнейСистемы КАК ПараметрыПодключенияВнешнейСистемы + |ИЗ + | РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспортаОбменаДанными + |ГДЕ + | НастройкиТранспортаОбменаДанными.Корреспондент = &Корреспондент + | И НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию = &ВидТранспортаСообщенийОбменаПоУмолчанию"); + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); + Запрос.УстановитьПараметр("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема); + + УстановитьПривилегированныйРежим(Истина); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Возврат Выборка.ПараметрыПодключенияВнешнейСистемы.Получить(); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Процедура СохранитьНастройкиТранспортаВнешнейСистемы(Корреспондент, ПараметрыПодключения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Корреспондент = Корреспондент; + МенеджерЗаписи.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема; + МенеджерЗаписи.ПараметрыПодключенияВнешнейСистемы = Новый ХранилищеЗначения(ПараметрыПодключения, Новый СжатиеДанных(9)); + + МенеджерЗаписи.Записать(Истина); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/RecordSetModule.bsl index 6407a6574..7241fa1bb 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -49,4 +57,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/НастройкиТранспортаОбменаДанными.mdo b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/НастройкиТранспортаОбменаДанными.mdo index 886885a1d..5990653d5 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/НастройкиТранспортаОбменаДанными.mdo +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/НастройкиТранспортаОбменаДанными.mdo @@ -107,10 +107,6 @@ <types>String</types> <stringQualifiers/> </type> - <toolTip> - <key>ru</key> - <value>Имя информационной базы на сервере 1С:Предприятия.</value> - </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <fullTextSearch>Use</fullTextSearch> @@ -149,10 +145,6 @@ <types>String</types> <stringQualifiers/> </type> - <toolTip> - <key>ru</key> - <value>Имя сервера 1С:Предприятия.</value> - </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <fullTextSearch>Use</fullTextSearch> @@ -605,6 +597,21 @@ <dataHistory>Use</dataHistory> <fillValue xsi:type="core:UndefinedValue"/> </resources> + <resources uuid="ffb3c2e4-bb9b-4d12-80bb-79e3c6d5700d"> + <name>ПараметрыПодключенияВнешнейСистемы</name> + <synonym> + <key>ru</key> + <value>Параметры подключения внешней системы</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </resources> <dimensions uuid="7e9fadd6-d0ad-4856-a195-1058f00bf488"> <name>Корреспондент</name> <synonym> diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/ManagerModule.bsl index 411d1ff53..f49b436e1 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/RecordSetModule.bsl index 6616a72a5..b285b5a8a 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -40,4 +48,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/НастройкиТранспортаОбменаСообщениями.mdo b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/НастройкиТранспортаОбменаСообщениями.mdo index 36063d9e4..f13e67e45 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/НастройкиТранспортаОбменаСообщениями.mdo +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаСообщениями/НастройкиТранспортаОбменаСообщениями.mdo @@ -60,10 +60,6 @@ <types>String</types> <stringQualifiers/> </type> - <toolTip> - <key>ru</key> - <value>Адрес веб-сервиса</value> - </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <fullTextSearch>Use</fullTextSearch> diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl index 67459bf5b..6b76c8e9b 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытий diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl index 4d7a38baa..cbeeca923 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -118,8 +126,8 @@ &НаСервере Процедура УстановитьКартинкиСтраниц() - Элементы.СтраницаПодписьПриОтвете.Картинка = ВзаимодействияКлиентСервер.ПолучитьКартинкуСтраницыПодписи(Запись.ВключатьПодписьПриОтветеПересылке); - Элементы.СтраницаПодписьДляНового.Картинка = ВзаимодействияКлиентСервер.ПолучитьКартинкуСтраницыПодписи(Запись.ВключатьПодписьДляНовыхСообщений); + Элементы.СтраницаПодписьПриОтвете.Картинка = Взаимодействия.КартинкаСтраницыПодписи(Запись.ВключатьПодписьПриОтветеПересылке); + Элементы.СтраницаПодписьДляНового.Картинка = Взаимодействия.КартинкаСтраницыПодписи(Запись.ВключатьПодписьДляНовыхСообщений); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаСписка/Module.bsl index 52729ef7a..dd3aa1b25 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийЭлементовШапкиФормы diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/ManagerModule.bsl index ced9f56eb..60082bc98 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/ОбластиСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбластиСтатистики/ManagerModule.bsl index ba49474f9..1d9c9bf69 100644 --- a/SSL/src/InformationRegisters/ОбластиСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбластиСтатистики/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl index 3f77195a0..95201368b 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl index d4a63ed3e..c8c05c963 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаЗаписи/Module.bsl index 1b0ef2390..2d83dfb31 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Module.bsl index cb0d3b6a9..27281a55b 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo index 17d9fda02..e561613b4 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/ОбновлениеКлючейДоступаКДанным.mdo @@ -125,6 +125,7 @@ <value>Список</value> </synonym> <type> + <types>CatalogRef.ИдентификаторыОбъектовРасширений</types> <types>CatalogRef.ИдентификаторыОбъектовМетаданных</types> </type> <toolTip> diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаЗаписи/Module.bsl index 719550872..150074222 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/ОбновлениеКлючейДоступаПользователей.mdo b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/ОбновлениеКлючейДоступаПользователей.mdo index 39c36f39a..73f716006 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/ОбновлениеКлючейДоступаПользователей.mdo +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаПользователей/ОбновлениеКлючейДоступаПользователей.mdo @@ -107,6 +107,7 @@ <value>Список</value> </synonym> <type> + <types>CatalogRef.ИдентификаторыОбъектовРасширений</types> <types>CatalogRef.ИдентификаторыОбъектовМетаданных</types> </type> <toolTip> diff --git a/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl index 5719bac02..8f818bc25 100644 --- a/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl index db7a44077..870d8a0aa 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl index 6081870cb..f5dc012e4 100644 --- a/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -107,7 +115,7 @@ Возврат МожноНовыйКомментарий; КонецФункции -Функция УвеличитьКоличествоУникальныхКомментариев(СсылкаОперация, СсылкаКомментарий) Экспорт +Процедура УвеличитьКоличествоУникальныхКомментариев(СсылкаОперация, СсылкаКомментарий) Экспорт НаборЗаписей = СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ИдентификаторОперации.Установить(СсылкаОперация); НаборЗаписей.Прочитать(); @@ -117,7 +125,7 @@ НаборЗаписей.Записать(Истина); РегистрыСведений.КомментарииОперацииСтатистики.СоздатьНовуюЗапись(СсылкаОперация, СсылкаКомментарий); -КонецФункции +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl index fb74ce3f1..9d19322f7 100644 --- a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -86,7 +94,7 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru='УдалитьСтарыеПакеты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru='УдалитьСтарыеПакеты'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; @@ -121,7 +129,7 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru='УдалитьПакеты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru='УдалитьПакеты'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаЗаписи/Module.bsl index 7d08d165e..138fe8d13 100644 --- a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl index 76eed780e..1f3e174c7 100644 --- a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl index 0d0565562..294c2a6e5 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -160,12 +168,12 @@ Если ТипЗнч(Параметры.ПроверяемыеРасширения) = Тип("Соответствие") Тогда Расширения = РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные); - ПодключенныеРасширения = Новый Массив; + ПодключенныеРасширения = Новый Соответствие; Для Каждого Расширение Из Расширения Цикл - ПодключенныеРасширения.Добавить(Расширение.Имя); + ПодключенныеРасширения[Расширение.Имя] = Истина; КонецЦикла; Для Каждого ПроверяемоеРасширение Из Параметры.ПроверяемыеРасширения Цикл - Если ПодключенныеРасширения.Найти(ПроверяемоеРасширение.Ключ) = Неопределено Тогда + Если ПодключенныеРасширения[ПроверяемоеРасширение.Ключ] = Неопределено Тогда НеподключенныеРасширения = НеподключенныеРасширения + ?(НеподключенныеРасширения = "", "", ", ") + ПроверяемоеРасширение.Значение; КонецЕсли; @@ -181,6 +189,14 @@ КонецПопытки; КонецЕсли; + Если ЗначениеЗаполнено(Параметры.ТекстДляАсинхронногоВызова) Тогда + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ВызватьИсключение Параметры.ТекстДляАсинхронногоВызова + ":" + Символы.ПС + ТекстОшибки; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + Результат = Новый Структура; Результат.Вставить("ТекстОшибки", ТекстОшибки); Результат.Вставить("НеподключенныеРасширения", НеподключенныеРасширения); @@ -189,7 +205,7 @@ КонецПроцедуры -Процедура ОбновитьПараметрыРаботыРасширений(ПроверяемыеРасширения = Неопределено, НеподключенныеРасширения = "") Экспорт +Процедура ОбновитьПараметрыРаботыРасширений(ПроверяемыеРасширения = Неопределено, НеподключенныеРасширения = "", ТекстДляАсинхронногоВызова = "") Экспорт Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат; @@ -201,11 +217,15 @@ ПараметрыВыполнения.Вставить("УстановленныеРасширения", Справочники.ВерсииРасширений.УстановленныеРасширения()); ПараметрыВыполнения.Вставить("ПроверяемыеРасширения", ПроверяемыеРасширения); ПараметрыВыполнения.Вставить("АдресРезультата", ПоместитьВоВременноеХранилище(Неопределено)); + ПараметрыВыполнения.Вставить("ТекстДляАсинхронногоВызова", ТекстДляАсинхронногоВызова); ПараметрыПроцедуры = Новый Массив; ПараметрыПроцедуры.Добавить(ПараметрыВыполнения); ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных( "СтандартныеПодсистемыСервер.ЗаполнитьВсеПараметрыРаботыРасширенийФоновоеЗадание", ПараметрыПроцедуры); + Если ЗначениеЗаполнено(ТекстДляАсинхронногоВызова) Тогда + Возврат; + КонецЕсли; ФоновоеЗадание.ОжидатьЗавершения(); Отбор = Новый Структура("УникальныйИдентификатор", ФоновоеЗадание.УникальныйИдентификатор); ФоновоеЗадание = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор)[0]; diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/Forms/ФормаЗаписи/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/Forms/ФормаСписка/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl index dc8aabcdf..fb8bff620 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -312,7 +320,7 @@ ПараметрыОперации.ОжидатьЗавершение = ОжидатьЗавершение; ПараметрыОперации.БезРасширений = Истина; - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() + Если ОбщегоНазначения.РежимОтладки() И Не ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) Тогда СообщитьПрогресс = Ложь; КонецЕсли; @@ -486,7 +494,7 @@ Если ЗначениеЗаполнено(СписокКритичныхИзменений) Тогда ИмяСобытия = НСтр("ru = 'Идентификаторы объектов метаданных.Требуется загрузить критичные изменения'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , СписокКритичныхИзменений); @@ -690,7 +698,7 @@ ПоследниеИзменения = ХранимыеДанныеПараметраРаботыПрограммы(ИмяПараметраХраненияИзменений); ИмяСобытия = НСтр("ru = 'Параметры работы программы.Не выполнено обновление в неразделенном режиме'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); Комментарий = НСтр("ru = '1. Перешлите сообщение в техническую поддержку. diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl index 769167b64..45bef2c2f 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl index 23044b77f..c0a016674 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl index 1a8bfd178..67898193b 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl index 9057d14a1..b44980898 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -29,4 +37,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form index b3b88bdd7..d64ab952b 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form @@ -92,77 +92,6 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>ГруппаМобильныйКлиент</name> - <id>23</id> - <items xsi:type="form:Decoration"> - <name>ДекорацияИнформация</name> - <id>25</id> - <title> - <key>ru</key> - <value>Декорация информация</value> - - true - true - - true - - ShowRight - - ДекорацияИнформацияРасширеннаяПодсказка - 27 - - <key>ru</key> - <value>В мобильном клиенте табличные документы доступны только для просмотра. Редактирование макетов производится в толстом, тонком или ВЕБ-клиенте.</value> - - Label - true - true - - Left - - - - ДекорацияИнформацияКонтекстноеМеню - 26 - true - - true - true - - - CommonPicture.Информация32 - - - - true - - true - - - <key>ru</key> - <value>Группа мобильный клиент</value> - - - ГруппаМобильныйКлиентРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - БольшеНеСпрашивать 6 diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl index b397facae..624978435 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -32,17 +39,13 @@ КонецЕсли; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаМобильныйКлиент", "Видимость", Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Группа", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отмена", "Видимость", Ложь); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Элементы.КакОткрывать.СписокВыбора.Очистить(); + Элементы.КакОткрывать.СписокВыбора.Добавить(0, НСтр("ru = 'Для просмотра'")); + Элементы.КакОткрывать.СписокВыбора.Добавить(1, НСтр("ru = 'Для редактирования'")); + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form index 9fb459be4..b0ef1c303 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form @@ -60,6 +60,10 @@ true OnValueChange Normal + + ru + Найти... + @@ -263,6 +267,7 @@ МакетыПечатныхФормПредставлениеМакета 59 + VeryHigh true true @@ -293,6 +298,7 @@ Left true + 40 true true true @@ -305,6 +311,7 @@ МакетыПечатныхФормПредставлениеВладельца 61 + VeryLow true true @@ -762,7 +769,6 @@ CommonPicture.ТипыМакетов - SelectionPresentation true @@ -804,6 +810,11 @@ true auto true + + + МакетыПечатныхФормКоманднаяПанель + + СпрашиватьРежимОткрытияМакета diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl index 8526a881c..925a566f1 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -27,7 +35,7 @@ Элементы.МакетыПечатныхФормГруппаПереключениеИспользуемогоМакета.Видимость = ЕстьПравоИзменения; Элементы.МакетыПечатныхФормУдалитьИзмененныйМакет.Видимость = ЕстьПравоИзменения; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда СпрашиватьРежимОткрытияМакета = Ложь; РежимОткрытияМакетаПросмотр = Истина; @@ -46,20 +54,6 @@ КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - Элементы.Переместить(Элементы.МакетыПечатныхФормГруппаОткрытиеМакета, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.МакетыПечатныхФормГруппаПереключениеИспользуемогоМакета, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.МакетыПечатныхФормУдалитьИзмененныйМакет, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.МакетыПечатныхФормГруппаВсеДействия, Элементы.ФормаКоманднаяПанель); - Элементы.Переместить(Элементы.МакетыПечатныхФормСправка, Элементы.ФормаКоманднаяПанель); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "МакетыПечатныхФормИзменитьМакет", "Видимость", Ложь); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -184,39 +178,21 @@ &НаСервере Процедура ЗаполнитьТаблицуМакетовПечатныхФорм() - КоллекцииОбъектовМетаданных = Новый Массив; - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Справочники); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Документы); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Обработки); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.БизнесПроцессы); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Задачи); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.ЖурналыДокументов); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Отчеты); - - Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл - Для Каждого ОбъектМетаданныхКоллекции Из КоллекцияОбъектовМетаданных Цикл - Для Каждого ОбъектМетаданныхМакет Из ОбъектМетаданныхКоллекции.Макеты Цикл - ТипМакета = ТипМакета(ОбъектМетаданныхМакет.Имя, ОбъектМетаданныхКоллекции.ПолноеИмя()); - Если ТипМакета = Неопределено Тогда - Продолжить; - КонецЕсли; - Если ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданныхКоллекции) Тогда - ДобавитьОписаниеМакета(ОбъектМетаданныхКоллекции.ПолноеИмя() + "." + ОбъектМетаданныхМакет.Имя, ОбъектМетаданныхМакет.Синоним, ОбъектМетаданныхКоллекции.Синоним, ТипМакета); - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - - Для Каждого ОбъектМетаданныхМакет Из Метаданные.ОбщиеМакеты Цикл - ТипМакета = ТипМакета(ОбъектМетаданныхМакет.Имя); - Если ТипМакета = Неопределено Тогда - Продолжить; - КонецЕсли; - ДобавитьОписаниеМакета("ОбщийМакет." + ОбъектМетаданныхМакет.Имя, ОбъектМетаданныхМакет.Синоним, НСтр("ru = 'Общий макет'"), ТипМакета); + Для Каждого ОписаниеМакета Из РегистрыСведений.ПоставляемыеМакетыПечати.ВсеМакетыПечатныхФормКонфигурации() Цикл + Владелец = ОписаниеМакета.Значение; + ИмяВладельца = ?(Метаданные.ОбщиеМакеты = Владелец, "ОбщийМакет", Владелец.ПолноеИмя()); + ПредставлениеВладельца = ?(Метаданные.ОбщиеМакеты = Владелец, НСтр("ru = 'Общий макет'"), Владелец.Представление()); + + Макет = ОписаниеМакета.Ключ; + ИмяМакета = ИмяВладельца + "." + Макет.Имя; + ПредставлениеМакета = Макет.Представление(); + + ТипМакета = ТипМакета(Макет.Имя, ИмяВладельца); + + ДобавитьОписаниеМакета(ИмяМакета, ПредставлениеМакета, ПредставлениеВладельца, ТипМакета); КонецЦикла; МакетыПечатныхФорм.Сортировать("ПредставлениеМакета Возр"); - УстановитьФлагиИспользованияИзмененныхМакетов(); КонецПроцедуры @@ -261,14 +237,16 @@ КонецПроцедуры &НаСервере -Функция ТипМакета(ИмяОбъектаМетаданныхМакета, ИмяОбъекта = Неопределено) +Функция ТипМакета(ИмяОбъектаМетаданныхМакета, ИмяОбъекта = "ОбщийМакет") Позиция = СтрНайти(ИмяОбъектаМетаданныхМакета, "ПФ_"); Если Позиция = 0 Тогда Возврат Неопределено; КонецЕсли; - Если ЗначениеЗаполнено(ИмяОбъекта) Тогда + Если ИмяОбъекта = "ОбщийМакет" Тогда + МакетПечатнойФормы = ПолучитьОбщийМакет(ИмяОбъектаМетаданныхМакета); + Иначе УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); @@ -276,8 +254,6 @@ УстановитьПривилегированныйРежим(Ложь); УстановитьОтключениеБезопасногоРежима(Ложь); - Иначе - МакетПечатнойФормы = ПолучитьОбщийМакет(ИмяОбъектаМетаданныхМакета); КонецЕсли; ТипМакета = Неопределено; @@ -295,12 +271,12 @@ &НаСервере Функция ИндексКартинки(Знач ТипМакета) - ТипыМакетов = Новый Массив; - ТипыМакетов.Добавить("DOC"); - ТипыМакетов.Добавить("ODT"); - ТипыМакетов.Добавить("MXL"); + ТипыМакетов = Новый Соответствие; + ТипыМакетов.Вставить("DOC", 0); + ТипыМакетов.Вставить("ODT", 1); + ТипыМакетов.Вставить("MXL", 2); - Результат = ТипыМакетов.Найти(ВРег(ТипМакета)); + Результат = ТипыМакетов[ВРег(ТипМакета)]; Возврат ?(Результат = Неопределено, -1, Результат); КонецФункции @@ -422,7 +398,7 @@ &НаСервереБезКонтекста Процедура СохранитьНастройкиРежимаОткрытияМакета(СпрашиватьРежимОткрытияМакета, РежимОткрытияМакетаПросмотр) - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда + Если НЕ ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкаОткрытияМакетов", "СпрашиватьРежимОткрытияМакета", СпрашиватьРежимОткрытияМакета); diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form index 5a262e64d..2595cf3d8 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Form.form @@ -189,6 +189,10 @@ </items> <horizontalAlign>Right</horizontalAlign> </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl index 663ac51d6..613c40fab 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ПроверкаПечатныхФорм/Module.bsl @@ -1,3 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form index 6aab1b8a1..de7adc46c 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> +<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> @@ -869,6 +869,11 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> + <mobileDeviceCommandBarContent> + <value xsi:type="core:StringValue"> + <value>ГруппаКоманднаяПанель</value> + </value> + </mobileDeviceCommandBarContent> <attributes> <name>ИмяОбъектаМетаданныхМакета</name> <title> diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl index b2988148d..b46936de3 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -33,10 +40,9 @@ Заголовок = НСтр("ru = 'Открытие макета печатной формы'"); КонецЕсли; - ТипКлиента = ?(ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(), "", "Не") + "ВебКлиент"; - КлючСохраненияПоложенияОкна = ТипКлиента + ВРег(ТипМакета); + ТипКлиента = ?(ОбщегоНазначения.ЭтоВебКлиент(), "", "Не") + "ВебКлиент"; - Если Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() И ТипМакета = "MXL" Тогда + Если Не ОбщегоНазначения.ЭтоВебКлиент() И Не ОбщегоНазначения.ЭтоМобильныйКлиент() И ТипМакета = "MXL" Тогда Элементы.НадписьЗавершениеИзмененияНеВебКлиент.Заголовок = НСтр( "ru = 'После внесения необходимых изменений в макет нажмите на кнопку ""Завершить изменение""'"); КонецЕсли; @@ -47,15 +53,10 @@ Элементы.КоманднаяПанель.ТекущаяСтраница = Элементы.ПанельЗагрузка; Элементы.КнопкаИзменить.КнопкаПоУмолчанию = Истина; - Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда // Временное решение для работы в мобильном клиенте, будет удалено в следующих версиях - - ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КнопкаОтменаЗагрузки", "Видимость", Ложь); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КнопкаОтменаИзменений", "Видимость", Ложь); - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ТипКлиента = "МобильныйКлиент"; КонецЕсли; - + КлючСохраненияПоложенияОкна = ТипКлиента + ВРег(ТипМакета); КонецПроцедуры &НаКлиенте @@ -96,7 +97,7 @@ &НаКлиенте Процедура СсылкаНаСтраницуПрограммыНажатие(Элемент) - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(АдресПрограммыДляОткрытияМакета); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(АдресПрограммыДляОткрытияМакета); КонецПроцедуры #КонецОбласти @@ -184,7 +185,7 @@ Элемент.Заголовок = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Элемент.Заголовок, СведенияДляЗаполнения); КонецЦикла; - ВидимостьСсылкиНаСтраницуПрограммы = (ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Или ТипФайла <> "mxl") И ТипФайла <> "docx"; + ВидимостьСсылкиНаСтраницуПрограммы = (ОбщегоНазначения.ЭтоВебКлиент() Или ТипФайла <> "mxl") И ТипФайла <> "docx"; Элементы.СсылкаНаСтраницуПрограммыПередЗагрузкойВебКлиент.Видимость = ВидимостьСсылкиНаСтраницуПрограммы; Элементы.СсылкаНаСтраницуПрограммыПередЗагрузкойНеВебКлиент.Видимость = ВидимостьСсылкиНаСтраницуПрограммы; Элементы.СсылкаНаСтраницуПрограммыЗавершениеИзмененияВебКлиент.Видимость = ВидимостьСсылкиНаСтраницуПрограммы; @@ -192,10 +193,10 @@ Элементы.НадписьПередЗагрузкойМакетаПрограммаНеВебКлиент.Видимость = ТипФайла <> "mxl"; - Элементы.СтраницаЗагрузкаНаКомпьютерВебКлиент.Видимость = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); - Элементы.СтраницаЗагрузкаВИнформационнуюБазуВебКлиент.Видимость = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); - Элементы.СтраницаЗагрузкаНаКомпьютерНеВебКлиент.Видимость = Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); - Элементы.СтраницаЗагрузкаВИнформационнуюБазуНеВебКлиент.Видимость = Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); + Элементы.СтраницаЗагрузкаНаКомпьютерВебКлиент.Видимость = ОбщегоНазначения.ЭтоВебКлиент(); + Элементы.СтраницаЗагрузкаВИнформационнуюБазуВебКлиент.Видимость = ОбщегоНазначения.ЭтоВебКлиент(); + Элементы.СтраницаЗагрузкаНаКомпьютерНеВебКлиент.Видимость = Не ОбщегоНазначения.ЭтоВебКлиент(); + Элементы.СтраницаЗагрузкаВИнформационнуюБазуНеВебКлиент.Видимость = Не ОбщегоНазначения.ЭтоВебКлиент(); КонецПроцедуры @@ -250,7 +251,7 @@ ФайлМакета = Новый Файл(ПутьКФайлуМакета); ФайлМакета.УстановитьТолькоЧтение(Истина); КонецЕсли; - ОбщегоНазначенияКлиент.ОткрытьФайлВПрограммеПросмотра(ПутьКФайлуМакета); + ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлуМакета); КонецЕсли; ПерейтиНаСтраницуЗавершенияИзменения(); diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl index 039a8905f..f4eec115a 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -58,7 +66,7 @@ НаборЗаписей.Отбор.ИмяМакета.Установить(Выборка.ИмяМакета); Если Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданныхМакета) = Неопределено Тогда - ИмяСобытия = НСтр("ru = 'Печать'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ИмяСобытия = НСтр("ru = 'Печать'", ОбщегоНазначения.КодОсновногоЯзыка()); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Обнаружен пользовательский макет, отсутствующий в метаданных конфигурации: |""%1"".'"), ИмяОбъектаМетаданныхМакета); @@ -70,7 +78,13 @@ Если ЭтоОбщийМакет Тогда МакетИзМетаданных = ПолучитьОбщийМакет(Выборка.ИмяМакета); Иначе + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + МакетИзМетаданных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Выборка.Объект).ПолучитьМакет(Выборка.ИмяМакета); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); КонецЕсли; Если Не УправлениеПечатью.МакетыРазличаются(МакетИзМетаданных, ИзмененныйМакет) Тогда diff --git a/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl b/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl index 651d01ac2..e7d1756ae 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеНастройкиДоступаКОбработкам/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ПоставляемыеМакетыПечати/ManagerModule.bsl b/SSL/src/InformationRegisters/ПоставляемыеМакетыПечати/ManagerModule.bsl new file mode 100644 index 000000000..1a6d08773 --- /dev/null +++ b/SSL/src/InformationRegisters/ПоставляемыеМакетыПечати/ManagerModule.bsl @@ -0,0 +1,165 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ОбновитьКонтрольнуюСуммуМакетов(Параметры) Экспорт + + ВерсияМакета = Метаданные.Версия; + + Если Параметры.Свойство("МакетыТребующиеОбновленияКонтрольнойСуммы") Тогда + ОбрабатываемыеМакеты = Параметры.МакетыТребующиеОбновленияКонтрольнойСуммы; + Иначе + ОбрабатываемыеМакеты = ВсеМакетыПечатныхФормКонфигурации(); + КонецЕсли; + + МакетыТребующиеОбновленияКонтрольнойСуммы = Новый Соответствие; + СписокОшибок = Новый Массив; + + Для Каждого ОписаниеМакета Из ОбрабатываемыеМакеты Цикл + Владелец = ОписаниеМакета.Значение; + ИмяВладельца = ?(Владелец = Метаданные.ОбщиеМакеты, "ОбщийМакет", Владелец.ПолноеИмя()); + ИдентификаторОбъектаМетаданныхВладельца = ?(Владелец = Метаданные.ОбщиеМакеты, Неопределено, ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Владелец)); + Макет = ОписаниеМакета.Ключ; + ИмяМакета = Макет.Имя; + + Если Владелец = Метаданные.ОбщиеМакеты Тогда + ДанныеМакета = ПолучитьОбщийМакет(Макет); + Иначе + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + ДанныеМакета = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Владелец.ПолноеИмя()).ПолучитьМакет(Макет); + + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + КонецЕсли; + + КонтрольнаяСумма = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(ДанныеМакета); + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.РегистрыСведений.ПоставляемыеМакетыПечати.ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("ИмяМакета", ИмяМакета); + ЭлементБлокировкиДанных.УстановитьЗначение("Объект", ИдентификаторОбъектаМетаданныхВладельца); + + НачатьТранзакцию(); + Попытка + БлокировкаДанных.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ПоставляемыеМакетыПечати.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ИмяМакета = Макет.Имя; + МенеджерЗаписи.Объект = ИдентификаторОбъектаМетаданныхВладельца; + МенеджерЗаписи.Прочитать(); + + Если Не МенеджерЗаписи.Выбран() Тогда + МенеджерЗаписи.ИмяМакета = Макет.Имя; + МенеджерЗаписи.Объект = ИдентификаторОбъектаМетаданныхВладельца; + КонецЕсли; + + Если МенеджерЗаписи.ВерсияМакета = ВерсияМакета Тогда + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + + МенеджерЗаписи.ВерсияМакета = ВерсияМакета; + МенеджерЗаписи.ПредыдущаяКонтрольнаяСумма = МенеджерЗаписи.КонтрольнаяСумма; + МенеджерЗаписи.КонтрольнаяСумма = КонтрольнаяСумма; + МенеджерЗаписи.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + ТекстОшибки = НСтр("ru = 'Не удалось записать сведения о макете'") + Символы.ПС + + Макет.ПолноеИмя() + Символы.ПС + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Контроль изменения поставляемых макетов'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, Макет, , ТекстОшибки); + + СписокОшибок.Добавить(ИмяВладельца + "." + ИмяМакета + ": " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + МакетыТребующиеОбновленияКонтрольнойСуммы.Вставить(ОписаниеМакета.Ключ, ОписаниеМакета.Значение); + КонецПопытки; + КонецЦикла; + + Если ЗначениеЗаполнено(МакетыТребующиеОбновленияКонтрольнойСуммы) Тогда + СписокОшибок.Вставить(0, НСтр("ru = 'Не удалось записать сведения о макетах печатных форм:'")); + Параметры.Вставить("МакетыТребующиеОбновленияКонтрольнойСуммы", МакетыТребующиеОбновленияКонтрольнойСуммы); + ТекстОшибки = СтрСоединить(СписокОшибок, Символы.ПС); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ВсеМакетыПечатныхФормКонфигурации() Экспорт + + Результат = Новый Соответствие; + + КоллекцииОбъектовМетаданных = Новый Массив; + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Справочники); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Документы); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Обработки); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.БизнесПроцессы); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Задачи); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.ЖурналыДокументов); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Отчеты); + + Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл + Для Каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл + Для Каждого Макет Из ОбъектМетаданных.Макеты Цикл + Если СтрНайти(Макет.Имя, "ПФ_") > 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..6385b3dcf --- /dev/null +++ b/SSL/src/InformationRegisters/ПоставляемыеМакетыПечати/ПоставляемыеМакетыПечати.mdo @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:InformationRegister 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="0b8c7a82-9865-4c5e-9bf1-ba6a7ef3a5d1"> + <producedTypes> + <selectionType typeId="5da1130c-435a-48b7-8782-02c4b45b34f7" valueTypeId="322ce8c1-417d-4b50-a73d-6d4d0eade24a"/> + <listType typeId="38cd673e-d5f6-4847-b5d4-443b92bc3d41" valueTypeId="66c2d862-3eaf-4f72-8204-eca7bc9566c6"/> + <managerType typeId="1326af77-9a11-4c96-9c0a-3afe005691b9" valueTypeId="19826ea6-6a3c-4935-a480-91f3434ff6ac"/> + <recordSetType typeId="c37c5229-a1cb-461b-bc5a-ea59ce7c5795" valueTypeId="5d4c4d4f-2202-42df-b1a4-df5b76b7d4d4"/> + <recordKeyType typeId="bbde4f47-c21c-4303-a24a-2b3884ba6ae4" valueTypeId="adc41871-ee3e-47c3-b6d6-6b1919d93b5b"/> + <recordType typeId="d7a514cd-d2ea-4c43-ac80-86d5d5ee5485" valueTypeId="d2317961-5c6d-4d04-a83a-76c65553ad54"/> + <recordManagerType typeId="171f66aa-6a8a-46e6-9767-aea5fcbd198e" valueTypeId="585e4385-c281-45e6-98df-e0650728d43a"/> + </producedTypes> + <name>ПоставляемыеМакетыПечати</name> + <synonym> + <key>ru</key> + <value>Поставляемые макеты печати</value> + </synonym> + <editType>InDialog</editType> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Active</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Recorder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Period</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <dataLockControlMode>Managed</dataLockControlMode> + <resources uuid="ea9fd5dd-b1de-41f8-87c2-ad3e8ee6b9bf"> + <name>КонтрольнаяСумма</name> + <synonym> + <key>ru</key> + <value>Контрольная сумма</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>32</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + </resources> + <resources uuid="1bc24f0c-7299-4d7d-994c-0e89056f1178"> + <name>ПредыдущаяКонтрольнаяСумма</name> + <synonym> + <key>ru</key> + <value>Предыдущая контрольная сумма</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>32</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + </resources> + <resources uuid="af958a75-241e-443a-8c1d-0c9240cca3a3"> + <name>ВерсияМакета</name> + <synonym> + <key>ru</key> + <value>Версия макета</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>20</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + </resources> + <dimensions uuid="d65cce37-81a6-4f75-84e1-7e5b6340aa13"> + <name>Объект</name> + <synonym> + <key>ru</key> + <value>Объект</value> + </synonym> + <type> + <types>CatalogRef.ИдентификаторыОбъектовРасширений</types> + <types>CatalogRef.ИдентификаторыОбъектовМетаданных</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <master>true</master> + <mainFilter>true</mainFilter> + </dimensions> + <dimensions uuid="b60ddb04-f87c-4e16-aad0-f06d80dfbe14"> + <name>ИмяМакета</name> + <synonym> + <key>ru</key> + <value>Имя макета</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>100</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:StringValue"/> + <mainFilter>true</mainFilter> + </dimensions> +</mdclass:InformationRegister> diff --git a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Module.bsl index 55697502b..f653e7331 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl index 92e8cb13c..7ee4ac713 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,8 +15,6 @@ Возврат; КонецЕсли; - Чтение = Истина; - ТолькоПросмотр = Истина; Список.Параметры.УстановитьЗначениеПараметра("ОбъектМетаданных", Параметры.ОбъектМетаданных); diff --git a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl index 2a8eed33f..f0af9910e 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -34,7 +42,7 @@ Запрос = ЗапросИзменений(Ложь); Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПраваРолей"); + Блокировка.Добавить("РегистрСведений.ПраваРолей"); НачатьТранзакцию(); Попытка @@ -349,7 +357,7 @@ Если Не ОбъектыРасширений И ОбъектМетаданных.РасширениеКонфигурации() <> Неопределено Тогда Продолжить; - КонецЕсли; + КонецЕсли; ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); ПолныеИменаОбъектовМетаданных.Добавить(ПолноеИмя); @@ -460,8 +468,9 @@ КонецФункции // Формирует пустую таблицу права ролей. +// Функция ТаблицаПравРолей(ОбъектыРасширений = Ложь, ВидИзмененияСтроки = Ложь) Экспорт - + ПраваРолей = СоздатьНаборЗаписей().Выгрузить(); ПраваРолей.Колонки.Добавить("РольПолноеИмя", Новый ОписаниеТипов("Строка")); ПраваРолей.Колонки.Добавить("ОбъектМетаданныхПолноеИмя", Новый ОписаниеТипов("Строка")); @@ -483,7 +492,7 @@ КонецЕсли; Возврат ПраваРолей; - + КонецФункции // Для функции ТаблицаПравРолей. @@ -499,7 +508,7 @@ СвойстваКолонки.Заголовок, СвойстваКолонки.Ширина); КонецПроцедуры - + Функция ИзмененныеОбъектыМетаданных(Изменения) Экспорт Изменения.Свернуть("ОбъектМетаданных, Роль, Добавление, Изменение", "ВидИзмененияСтроки"); diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl index 6acb5988a..6829ab8ad 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -57,15 +64,14 @@ ДополнительныеПараметры.Вставить("ШаблонПользовательскийСайт", ШаблонПользовательскийСайт); Если Не ПустаяСтрока(РасположениеКомплектаПравил.ПутьКФайлуКомплектаПравилВКаталогеШаблонов) - И ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда + И ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда ДополнительныеПараметры.Вставить("КаталогПоУмолчанию", КаталогAppData() + "1C\1Cv8\tmplts\"); ДополнительныеПараметры.Вставить("ПользовательскиеНастройкиШаблонов", КаталогAppData() + "1C\1CEStart\1CEStart.cfg"); ДополнительныеПараметры.Вставить("РасположениеФайла", ""); ТекстПредложения = НСтр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, ДополнительныеПараметры); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения); - + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения); Иначе УстановитьЗаголовокИнформацииОПолучении(ДополнительныеПараметры); КонецЕсли; @@ -180,7 +186,7 @@ Если Не ЗначениеЗаполнено(ИмяФайла) Тогда СтрокаСообщения = НСтр("ru = 'Не задано имя файла внешней обработки.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,, "ИмяФайлаОбработкиДляОтладкиВыгрузки",, ЕстьНезаполненныеПоля); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения,, "ИмяФайлаОбработкиДляОтладкиВыгрузки",, ЕстьНезаполненныеПоля); КонецЕсли; @@ -194,7 +200,7 @@ Если Не ЗначениеЗаполнено(ИмяФайла) Тогда СтрокаСообщения = НСтр("ru = 'Не задано имя файла внешней обработки.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,, "ИмяФайлаОбработкиДляОтладкиЗагрузки",, ЕстьНезаполненныеПоля); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения,, "ИмяФайлаОбработкиДляОтладкиЗагрузки",, ЕстьНезаполненныеПоля); КонецЕсли; @@ -208,7 +214,7 @@ Если Не ЗначениеЗаполнено(ИмяФайла) Тогда СтрокаСообщения = НСтр("ru = 'Не задано имя файла протокола обмена.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,, "ИмяФайлаПротоколаОбмена",, ЕстьНезаполненныеПоля); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения,, "ИмяФайлаПротоколаОбмена",, ЕстьНезаполненныеПоля); КонецЕсли; @@ -328,7 +334,7 @@ ЭтотОбъект, ДополнительныеПараметры); СтандартнаяОбработка = Ложь; - ОбщегоНазначенияКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаФорматированнойСтроки, Оповещение); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаФорматированнойСтроки, Оповещение); КонецПроцедуры @@ -425,7 +431,7 @@ Возврат; КонецЕсли; - ОбщегоНазначенияКлиент.ОткрытьПроводник(ДополнительныеПараметры.НавигационнаяСсылкаФорматированнойСтроки); + ФайловаяСистемаКлиент.ОткрытьПроводник(ДополнительныеПараметры.НавигационнаяСсылкаФорматированнойСтроки); КонецПроцедуры @@ -440,7 +446,7 @@ КонецЕсли; Если Не ПустаяСтрока(ТекстОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); Возврат; КонецЕсли; @@ -448,7 +454,7 @@ ЧастиИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(РезультатПомещенияФайлов.Имя); Если НРег(ЧастиИмени.Расширение) <> ".zip" Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Некорректный формат файла комплекта правил. Ожидается zip архив, содержащий три файла: + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Некорректный формат файла комплекта правил. Ожидается zip архив, содержащий три файла: |ExchangeRules.xml - правила конвертации для текущей программы; |CorrespondentExchangeRules.xml - правила конвертации для программы-корреспондента; |RegistrationRules.xml - правила регистрации для текущей программы.'")); @@ -557,7 +563,7 @@ Модифицированность = Ложь; // Кэш открытых сеансов для механизма регистрации стал неактуальным. - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); ОбновитьПовторноИспользуемыеЗначения(); ОбновитьИнформациюОПравилах(); @@ -854,11 +860,15 @@ &НаКлиенте Функция КаталогAppData() +#Если МобильныйКлиент Тогда + Возврат ""; +#Иначе App = Новый COMОбъект("Shell.Application"); Folder = App.Namespace(26); Результат = Folder.Self.Path; Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Результат); - +#КонецЕсли + КонецФункции &НаКлиенте diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl index f1625f3d9..3301dc33d 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОписаниеПеременных @@ -73,7 +80,7 @@ Если ИсточникПравил = "ЗагруженныеИзФайла" И ПустаяСтрока(Запись.ИмяФайлаПравил) Тогда СтрокаСообщения = НСтр("ru = 'Не задан файл правил обмена.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,,,, ЕстьНезаполненныеПоля); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения,,,, ЕстьНезаполненныеПоля); КонецЕсли; @@ -87,7 +94,7 @@ Если Не ЗначениеЗаполнено(ИмяФайла) Тогда СтрокаСообщения = НСтр("ru = 'Не задано имя файла внешней обработки.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,, "Запись.ИмяФайлаОбработкиДляОтладкиВыгрузки",, ЕстьНезаполненныеПоля); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения,, "Запись.ИмяФайлаОбработкиДляОтладкиВыгрузки",, ЕстьНезаполненныеПоля); КонецЕсли; @@ -101,7 +108,7 @@ Если Не ЗначениеЗаполнено(ИмяФайла) Тогда СтрокаСообщения = НСтр("ru = 'Не задано имя файла внешней обработки.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,, "Запись.ИмяФайлаОбработкиДляОтладкиЗагрузки",, ЕстьНезаполненныеПоля); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения,, "Запись.ИмяФайлаОбработкиДляОтладкиЗагрузки",, ЕстьНезаполненныеПоля); КонецЕсли; @@ -115,7 +122,7 @@ Если Не ЗначениеЗаполнено(ИмяФайла) Тогда СтрокаСообщения = НСтр("ru = 'Не задано имя файла протокола обмена.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,, "Запись.ИмяФайлаПротоколаОбмена",, ЕстьНезаполненныеПоля); + ОбщегоНазначенияКлиент.СообщитьПользователю(СтрокаСообщения,, "Запись.ИмяФайлаПротоколаОбмена",, ЕстьНезаполненныеПоля); КонецЕсли; @@ -357,7 +364,7 @@ КонецЕсли; Если Не ПустаяСтрока(ТекстОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); Возврат; КонецЕсли; @@ -416,7 +423,7 @@ Модифицированность = Ложь; // Кэш открытых сеансов для механизма регистрации стал неактуальным. - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); ОбновитьПовторноИспользуемыеЗначения(); КонецЕсли; diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl index 98a32471f..d011e7608 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОписаниеПеременных &НаКлиенте @@ -236,7 +244,7 @@ Модифицированность = Ложь; // Кэш открытых сеансов для механизма регистрации стал неактуальным. - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); ОбновитьПовторноИспользуемыеЗначения(); КонецЕсли; @@ -317,7 +325,7 @@ КонецЕсли; Если Не ПустаяСтрока(ТекстОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); Возврат; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Module.bsl index 5c4f628ae..1a28e0c53 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиКомандФормы &НаКлиенте diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl index b346cfbe0..acc9148ad 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl index 2031c3bc6..442baaf6c 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере @@ -73,7 +81,7 @@ КонецЕсли; КонецЦикла; - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); ОбновитьПовторноИспользуемыеЗначения(); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl index 9d8b24838..6ba43ba84 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl @@ -1,3 +1,13 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -21,9 +31,7 @@ КонецПроцедуры #КонецОбласти - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - + #Область СлужебныйПрограммныйИнтерфейс Функция ПравилаКонвертацииСовместимыСТекущейВерсией(ИмяПланаОбмена, ОписаниеОшибки, ДанныеОПравилах) Экспорт @@ -144,7 +152,7 @@ КонецЕсли; // Удаляем временный архив и временную папку, в которую был распакован архив. - УдалитьВременныйФайл(ИмяВременнойПапки); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременнойПапки); ИнформацияОПравилахКонвертации = "[ИнформацияОПравилахИсточника] | @@ -170,10 +178,6 @@ ИнформацияОПравилахИсточника = КонвертацияОбъектовИнформационныхБаз.ИнформацияОПравилах(Ложь); - Если КонвертацияОбъектовИнформационныхБаз.ФлагОшибки() Тогда - Отказ = Истина; - КонецЕсли; - // Получаем имя временного файла конвертации корреспондента в локальной ФС на сервере. ИмяВременногоФайлаКорреспондента = ПолучитьИмяВременногоФайла("xml"); // Получаем файл правил для зачитки. @@ -192,10 +196,6 @@ ИнформацияОПравилахКорреспондента = КонвертацияОбъектовИнформационныхБаз.ИнформацияОПравилах(Истина); - Если КонвертацияОбъектовИнформационныхБаз.ФлагОшибки() Тогда - Отказ = Истина; - КонецЕсли; - ИнформацияОПравилахКонвертации = СтрЗаменить(ИнформацияОПравилахКонвертации, "[ИнформацияОПравилахИсточника]", ИнформацияОПравилахИсточника); ИнформацияОПравилахКонвертации = СтрЗаменить(ИнформацияОПравилахКонвертации, "[ИнформацияОПравилахКорреспондента]", ИнформацияОПравилахКорреспондента); @@ -220,9 +220,9 @@ КонецЕсли; // Удаляем временные файлы правил. - УдалитьВременныйФайл(ИмяВременногоФайла); - УдалитьВременныйФайл(ИмяВременногоФайлаКорреспондента); - УдалитьВременныйФайл(ИмяВременногоФайлаРегистрации); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайлаКорреспондента); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайлаРегистрации); // Сделаем запись правил конвертации. ЗаписьПравилКонвертации = СоздатьМенеджерЗаписи(); @@ -468,8 +468,8 @@ КонецЕсли; // Удаляем временный архив и временную папку, в которую был распакован архив. - УдалитьВременныйФайл(ИмяВременнойПапки); - УдалитьВременныйФайл(ИмяВременногоАрхива); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременнойПапки); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоАрхива); КонецЕсли; @@ -552,7 +552,7 @@ КонецЕсли; // Удаляем временный файл правил. - УдалитьВременныйФайл(ИмяВременногоФайла); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); Если Не Отказ Тогда @@ -647,8 +647,8 @@ КонецЕсли; // Удаляем временный архив и временную папку, в которую был распакован архив. - УдалитьВременныйФайл(ИмяВременнойПапки); - УдалитьВременныйФайл(ИмяВременногоАрхива); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременнойПапки); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоАрхива); КонецЕсли; @@ -740,9 +740,9 @@ КонецЕсли; // Удаляем временные файлы правил. - УдалитьВременныйФайл(ИмяВременногоФайла); - УдалитьВременныйФайл(ИмяВременногоФайлаКорреспондента); - УдалитьВременныйФайл(ИмяВременногоФайлаРегистрации); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайлаКорреспондента); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайлаРегистрации); Если Не Отказ Тогда @@ -876,19 +876,11 @@ ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла); // Удаляем временный файл правил. - УдалитьВременныйФайл(ИмяВременногоФайла); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); Возврат ДвоичныеДанные; КонецФункции -Процедура УдалитьВременныйФайл(ИмяВременногоФайла) - - Если Не ПустаяСтрока(ИмяВременногоФайла) Тогда - УдалитьФайлы(ИмяВременногоФайла); - КонецЕсли; - -КонецПроцедуры - Процедура ВыполнитьПроверкуЗаполненияПолей(Отказ, Запись) Если ПустаяСтрока(Запись.ИмяПланаОбмена) Тогда @@ -1135,4 +1127,5 @@ #КонецОбласти -#КонецЕсли \ No newline at end of file +#КонецЕсли + diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl index 8366588ca..bbeec6f49 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -49,7 +57,6 @@ Процедура ПроверитьСуществованиеФайлаВнешнейОбработки(ИмяПроверяемогоФайла, ЭтоФайловаяБаза, Отказ) СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяПроверяемогоФайла); - ИмяФайла = СтруктураИмениФайла.ИмяБезРасширения; ИмяКаталогаПроверки = СтруктураИмениФайла.Путь; КаталогПроверки = Новый Файл(ИмяКаталогаПроверки); ФайлНаДиске = Новый Файл(ИмяПроверяемогоФайла); @@ -73,7 +80,7 @@ КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(СтрокаСообщения,,,, Отказ); КонецПроцедуры @@ -108,7 +115,7 @@ КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,,,, Отказ); + ОбщегоНазначения.СообщитьПользователю(СтрокаСообщения,,,, Отказ); КонецПроцедуры @@ -141,4 +148,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl index 723c5c234..b0efa27ec 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -126,13 +133,13 @@ Пока Выборка.Следующий() Цикл - Реквизиты = ВзаимодействияКлиентСервер.ПустаяСтруктураРеквизитыВзаимодействия(); + Реквизиты = РеквизитыВзаимодействия(); Реквизиты.Рассмотрено = Выборка.Рассмотрено; Реквизиты.РассмотретьПосле = Выборка.РассмотретьПосле; НаборЗаписей = СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Взаимодействие.Установить(Выборка.Ссылка); - ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Выборка.Ссылка, Реквизиты, НаборЗаписей); + ЗаписатьПредметыПапкиВзаимодействий(Выборка.Ссылка, Реквизиты, НаборЗаписей); ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); КонецЦикла; @@ -141,6 +148,108 @@ КонецПроцедуры +// Формирует пустую структуру для записи в регистр сведений ПредметыПапкиВзаимодействий. +// +Функция РеквизитыВзаимодействия() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Предмет" ,Неопределено); + Результат.Вставить("Папка" ,Неопределено); + Результат.Вставить("Рассмотрено" ,Неопределено); + Результат.Вставить("РассмотретьПосле" ,Неопределено); + Результат.Вставить("РассчитыватьРассмотрено",Истина); + + Возврат Результат; + +КонецФункции + +// Устанавливает папку, предмет и реквизиты рассмотрения для взаимодействий. +// +// Параметры: +// Ссылка - ДокументСсылка.ЭлектронноеПисьмоВходящее, +// ДокументСсылка.ЭлектронноеПисьмоИсходящее, +// ДокументСсылка.Встреча, +// ДокументСсылка.ЗапланированноеВзаимодействие, +// ДокументСсылка.ТелефонныйЗвонок - взаимодействие для которого будут установлены папка и предмет. +// Реквизиты - Структура - см. РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия. +// НаборЗаписей - РегистрСведений.ПредметыПапкиВзаимодействий.НаборЗаписей - набор записей регистра, если он уже создан +// на момент вызова процедуры. +// +Процедура ЗаписатьПредметыПапкиВзаимодействий(Взаимодействие, Реквизиты, НаборЗаписей = Неопределено) Экспорт + + Папка = Реквизиты.Папка; + Предмет = Реквизиты.Предмет; + Рассмотрено = Реквизиты.Рассмотрено; + РассмотретьПосле = Реквизиты.РассмотретьПосле; + РассчитыватьРассмотрено = Реквизиты.РассчитыватьРассмотрено; + + СоздаватьИЗаписывать = (НаборЗаписей = Неопределено); + + Если Папка = Неопределено И Предмет = Неопределено И Рассмотрено = Неопределено + И РассмотретьПосле = Неопределено Тогда + + Возврат; + + ИначеЕсли Папка = Неопределено ИЛИ Предмет = Неопределено ИЛИ Рассмотрено = Неопределено + ИЛИ РассмотретьПосле = Неопределено Тогда + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ПредметыПапкиВзаимодействий.Предмет, + | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма, + | ПредметыПапкиВзаимодействий.Рассмотрено, + | ПредметыПапкиВзаимодействий.РассмотретьПосле + |ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + |ГДЕ + | ПредметыПапкиВзаимодействий.Взаимодействие = &Взаимодействие"; + + Запрос.УстановитьПараметр("Взаимодействие",Взаимодействие); + + Результат = Запрос.Выполнить(); + Если НЕ Результат.Пустой() Тогда + + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Если Папка = Неопределено Тогда + Папка = Выборка.ПапкаЭлектронногоПисьма; + КонецЕсли; + + Если Предмет = Неопределено Тогда + Предмет = Выборка.Предмет; + КонецЕсли; + + Если Рассмотрено = Неопределено Тогда + Рассмотрено = Выборка.Рассмотрено; + КонецЕсли; + + Если РассмотретьПосле = Неопределено Тогда + РассмотретьПосле = Выборка.РассмотретьПосле; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Если СоздаватьИЗаписывать Тогда + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Взаимодействие.Установить(Взаимодействие); + КонецЕсли; + Запись = НаборЗаписей.Добавить(); + Запись.Взаимодействие = Взаимодействие; + Запись.Предмет = Предмет; + Запись.ПапкаЭлектронногоПисьма = Папка; + Запись.Рассмотрено = Рассмотрено; + Запись.РассмотретьПосле = РассмотретьПосле; + НаборЗаписей.ДополнительныеСвойства.Вставить("РассчитыватьРассмотрено", РассчитыватьРассмотрено); + + Если СоздаватьИЗаписывать Тогда + НаборЗаписей.Записать(); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #КонецЕсли diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl index d8e97b371..7173c0761 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -97,4 +105,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl b/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl index 464add7c4..e7fd9c77d 100644 --- a/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПредопределенныеВариантыОтчетовВерсийРасширений/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl index 7a569ec52..94eca43c9 100644 --- a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl +++ b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -330,13 +337,13 @@ ОчиститьСообщения(); Если ОтложенныйСтартПроцесса И ДатаОтложенногоСтарта < ТекущаяДатаСервера Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Дата и время отложенного старта должны быть больше текущей даты.'"),, + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Дата и время отложенного старта должны быть больше текущей даты.'"),, "ДатаОтложенногоСтарта"); ЗаполненаКорректно = Ложь; КонецЕсли; Если ОтложенныйСтартПроцесса И ДатаОтложенногоСтарта > СрокИсполнения Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Дата и время отложенного старта должны быть меньше срока исполнения задания.'"),, + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Дата и время отложенного старта должны быть меньше срока исполнения задания.'"),, "ДатаОтложенногоСтарта"); ЗаполненаКорректно = Ложь; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ManagerModule.bsl b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ManagerModule.bsl index dc52d7866..61aa4f151 100644 --- a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/Forms/ФормаЗаписи/Module.bsl index fd84ffe0e..a1010eaa8 100644 --- a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаКлиенте diff --git a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl index 26f6112a5..ce244172d 100644 --- a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Commands/ПутиКПрограммеНаСерверахLinux/CommandModule.bsl b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Commands/ПутиКПрограммеНаСерверахLinux/CommandModule.bsl index 3e40d352d..9e2133b2f 100644 --- a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Commands/ПутиКПрограммеНаСерверахLinux/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Commands/ПутиКПрограммеНаСерверахLinux/CommandModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытий &НаКлиенте diff --git a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаЗаписи/Module.bsl index 55201bbe8..d283f33f5 100644 --- a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl index 153eaee75..8cc1235a2 100644 --- a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl b/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl index 625a464ed..b8a15f595 100644 --- a/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -50,4 +58,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index 685111b4f..656284bcd 100644 --- a/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl b/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl index 825d8b68d..a4093ef9d 100644 --- a/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl @@ -1,9 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) + // ОбменДанными.Загрузка не требуется. + // Запись служебных данных в безопасном режиме запрещена. РаботаВБезопасномРежимеСлужебный.ПриЗаписиСлужебныхДанных(ЭтотОбъект); Если ОбменДанными.Загрузка Тогда @@ -26,4 +36,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/ManagerModule.bsl b/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/ManagerModule.bsl index e30b3e56b..05743c1ed 100644 --- a/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/RecordSetModule.bsl b/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/RecordSetModule.bsl index 07ca9f04d..0acb2506e 100644 --- a/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/РежимыПодключенияВнешнихМодулей/RecordSetModule.bsl @@ -1,9 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПриЗаписи(Отказ, Замещение) + // ОбменДанными.Загрузка не требуется. + // Запись служебных данных в безопасном режиме запрещена. РаботаВБезопасномРежимеСлужебный.ПриЗаписиСлужебныхДанных(ЭтотОбъект); Если ОбменДанными.Загрузка Тогда @@ -14,4 +24,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form index f94ecd8c5..da4f175c1 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form @@ -1302,7 +1302,6 @@ <initialListView>Auto</initialListView> <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> - <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> @@ -2356,7 +2355,6 @@ <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> <enableStartDrag>true</enableStartDrag> - <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> @@ -3481,7 +3479,6 @@ <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> <enableStartDrag>true</enableStartDrag> - <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> @@ -4561,7 +4558,6 @@ <rowPictureDataPath xsi:type="form:DataPath"> <segments>НепринятыеПоДате.DefaultPicture</segments> </rowPictureDataPath> - <currentRowUse>SelectionPresentation</currentRowUse> <autoMaxCardHeight>true</autoMaxCardHeight> <extInfo xsi:type="form:DynamicListTableExtInfo"> <autoRefreshPeriod>60</autoRefreshPeriod> diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl index 68d71315e..9832ea8c5 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -887,7 +894,7 @@ Если СравниваемыеВерсии.Количество() <> 2 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Нет версии для сравнения.'")); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Нет версии для сравнения.'")); Возврат; КонецЕсли; diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl index 7f9ce760c..d4d9415f8 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -18,7 +26,7 @@ НовоеЗначениеПометкиУдаления = Источник.ПометкаУдаления; - ОбменДаннымиВызовСервера.ЗарегистрироватьУстранениеПроблемы(СсылкаНаИсточник, ТипПроблемы, НовоеЗначениеПометкиУдаления); + ОбменДаннымиСлужебный.ЗарегистрироватьУстранениеПроблемы(СсылкаНаИсточник, ТипПроблемы, НовоеЗначениеПометкиУдаления); КонецЕсли; diff --git a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl index 0e751feea..eb6693991 100644 --- a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/ManagerModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -23,7 +30,7 @@ #КонецОбласти -#Область ОбработчикиОбновления +#Область СлужебныеПроцедурыИФункции Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт @@ -32,7 +39,7 @@ ДополнительныеПараметры.ПолноеИмяРегистра = Метаданные.РегистрыСведений.РезультатыПроверкиУчета.ПолноеИмя(); ОтработаныВсеПроблемы = Ложь; - КлючУникальности = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + КлючУникальности = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор(); Пока Не ОтработаныВсеПроблемы Цикл Запрос = Новый Запрос; diff --git a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/RecordSetModule.bsl b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/RecordSetModule.bsl index 7472f16a6..39eb88fe0 100644 --- a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -14,4 +22,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/RecordSetModule.bsl b/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/RecordSetModule.bsl index d966a6b6d..94438ece2 100644 --- a/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/РейтингАктивностиОбластейДанных/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -21,4 +29,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Module.bsl index 266dc08c4..ba03dba91 100644 --- a/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/СведенияОПользователях/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl b/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl index f29a9d0e3..a6b63413a 100644 --- a/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -15,4 +23,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl b/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl index fa5eb9615..5b9b3e30a 100644 --- a/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -24,9 +32,7 @@ | ПО Файлы.Ссылка = СведенияОФайлах.Файл |ГДЕ | Файлы.Ссылка > &Ссылка - | И СведенияОФайлах.Файл ЕСТЬ NULL - |УПОРЯДОЧИТЬ ПО - | Файлы.Ссылка"; + | И СведенияОФайлах.Файл ЕСТЬ NULL"; Запрос.УстановитьПараметр("Ссылка", Ссылка); МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); @@ -44,6 +50,39 @@ КонецЦикла; + Файл = ""; + ОтработаныВсеЗаписиРегистра = Ложь; + Пока Не ОтработаныВсеЗаписиРегистра Цикл + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000 + | СведенияОФайлах.Файл КАК Файл + |ИЗ + | РегистрСведений.СведенияОФайлах КАК СведенияОФайлах + |ГДЕ + | СведенияОФайлах.Файл > &Файл + | И СведенияОФайлах.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ПустаяСсылка)"; + Запрос.УстановитьПараметр("Файл", Файл); + ИзмеренияРегистра = Запрос.Выполнить().Выгрузить(); + + ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); + ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = "РегистрСведений.СведенияОФайлах"; + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ИзмеренияРегистра, ДополнительныеПараметры); + + КоличествоЗаписей = ИзмеренияРегистра.Количество(); + Если КоличествоЗаписей < 1000 Тогда + ОтработаныВсеЗаписиРегистра = Истина; + КонецЕсли; + + Если КоличествоЗаписей > 0 Тогда + Файл = ИзмеренияРегистра[КоличествоЗаписей-1].Файл; + КонецЕсли; + + КонецЦикла; + КонецПроцедуры // Обновить записи регистра. @@ -99,8 +138,47 @@ КонецЦикла; - Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.Файлы"); + ОбработкаФайловЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.Файлы"); + Выборка = ОбновлениеИнформационнойБазы.ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки( + Параметры.Очередь, "РегистрСведений.СведенияОФайлах"); + + Пока Выборка.Следующий() Цикл + + Попытка + + ТипХраненияФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Выборка.Файл, "ТипХраненияФайла"); + + НаборЗаписей = РегистрыСведений.СведенияОФайлах.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Файл.Установить(Выборка.Файл); + НаборЗаписей.Прочитать(); + + Для Каждого СведенияОФайле Из НаборЗаписей Цикл + СведенияОФайле.ТипХраненияФайла = ТипХраненияФайла; + КонецЦикла; + + НаборЗаписей.Записать(); + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); + + ОбъектовОбработано = ОбъектовОбработано + 1; + + Исключение + + ПроблемныхОбъектов = ПроблемныхОбъектов + 1; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать тип хранения файла: %1 по причине: + |%2'"), + Выборка.Файл, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + Выборка.Ссылка.Метаданные(), Выборка.Ссылка, ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + + ОбработкаРегистраЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "РегистрСведений.СведенияОФайлах"); + + Параметры.ОбработкаЗавершена = ОбработкаФайловЗавершена И ОбработкаРегистраЗавершена; Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Процедуре РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые файлы файлов (пропущены): %1'"), diff --git a/SSL/src/InformationRegisters/СведенияОФайлах/СведенияОФайлах.mdo b/SSL/src/InformationRegisters/СведенияОФайлах/СведенияОФайлах.mdo index 3d73cc5e7..e3f110090 100644 --- a/SSL/src/InformationRegisters/СведенияОФайлах/СведенияОФайлах.mdo +++ b/SSL/src/InformationRegisters/СведенияОФайлах/СведенияОФайлах.mdo @@ -286,6 +286,44 @@ </fillValue> <indexing>Index</indexing> </resources> + <resources uuid="f53a3a46-edad-4cc0-8814-3755c2ea2c03"> + <name>Служебный</name> + <synonym> + <key>ru</key> + <value>Служебный</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Признак того, что файл является служебным</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </resources> + <resources uuid="0a60b201-23f7-483b-ac16-5d270f32344e"> + <name>ТипХраненияФайла</name> + <synonym> + <key>ru</key> + <value>Тип хранения файла</value> + </synonym> + <type> + <types>EnumRef.ТипыХраненияФайлов</types> + </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"/> + <indexing>Index</indexing> + </resources> <resources uuid="78058cd3-eb56-483c-96f5-1bf8883abc76"> <name>ХранитьВерсии</name> <synonym> diff --git a/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Module.bsl index 2cd660d32..4a8987df4 100644 --- a/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/СеансыВерсийРасширений/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/RecordSetModule.bsl b/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/RecordSetModule.bsl index 0f688d1ac..d1ff7cb7f 100644 --- a/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -19,4 +27,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl index 7bbed941d..5d34a8bb1 100644 --- a/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl index de8b370ad..6f8294187 100644 --- a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -14,7 +22,7 @@ И Не ЗначениеЗаполнено(СтруктураЗаписи[ПроверяемыйРеквизит]) Тогда ОписаниеСобытия = НСтр("ru = 'Добавление записи регистра сведений ""Соответствия объектов информационных баз""'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ОбщегоНазначения.КодОсновногоЯзыка()); Комментарий = НСтр("ru = 'Не заполнен реквизит %1. Создание записи регистра невозможно.'"); Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Комментарий, ПроверяемыйРеквизит); ЗаписьЖурналаРегистрации(ОписаниеСобытия, diff --git a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl index f17863e72..a396d9b3e 100644 --- a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -35,4 +43,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl index 55697502b..ba03dba91 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,8 +15,6 @@ Возврат; КонецЕсли; - Чтение = Истина; - ТолькоПросмотр = Истина; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Module.bsl index 50c1e762f..151fe1270 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl index 5f629a0ce..6fdef004f 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -37,7 +45,7 @@ УстановитьПривилегированныйРежим(Истина); Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей"); + Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей"); НачатьТранзакцию(); Попытка diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl index 64faee028..3cfb9f23a 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -5,6 +12,8 @@ Процедура ПриЗаписи(Отказ, Замещение) + // В режиме ОбменДанными.Загрузка необходимо обновлять УИД в константе ВерсияДатЗапретаИзменения, + // который позволять сеансам определить, что нужно обновить кэш дат запрета изменения в памяти. Если ОбменДанными.Загрузка Тогда Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных(); @@ -32,5 +41,6 @@ #КонецОбласти -#КонецЕсли - +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl index 6462ee73f..c90b84237 100644 --- a/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияКонтактовВзаимодействий/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl index 4c3d6ec52..087005d01 100644 --- a/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/СостоянияОбменовДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/СостоянияОбменовДанными/RecordSetModule.bsl index 877db9fac..791cdcd85 100644 --- a/SSL/src/InformationRegisters/СостоянияОбменовДанными/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияОбменовДанными/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -15,4 +23,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl index 3384a161f..d2dcfb153 100644 --- a/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияПапокПисем/ManagerModule.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда diff --git a/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl index abcf5b0ef..969b086d9 100644 --- a/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияПредметовВзаимодействий/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl index 43b091b04..f895d8454 100644 --- a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl index 61910040f..1149aa28d 100644 --- a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/RecordSetModule.bsl index 877db9fac..791cdcd85 100644 --- a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/RecordSetModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -15,4 +23,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl index 2892c6722..8d5d576e2 100644 --- a/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl b/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl index 1e8657f9e..a5e6e24c0 100644 --- a/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -87,14 +95,14 @@ Возврат РезультатЗапроса; КонецФункции -Функция ЗаписатьСтатистикуКонфигурации(Знач СоответствиеИменМетаданных = Неопределено) Экспорт +Процедура ЗаписатьСтатистикуКонфигурации(Знач СоответствиеИменМетаданных = Неопределено) Экспорт СтатистикаКонфигурации = НовыйСтатистикаКонфигурации(СоответствиеИменМетаданных); Записать(СтатистикаКонфигурации.НеРазделенная, РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку("0", Истина)); Если СтатистикаКонфигурации.Разделенная <> Неопределено Тогда ЗаписатьРазделенную(СтатистикаКонфигурации.Разделенная); КонецЕсли; -КонецФункции +КонецПроцедуры Функция НовыйСтатистикаКонфигурации(СоответствиеИменМетаданных = Неопределено) СоответствиеИменМетаданныхРезультат = Новый Соответствие; @@ -249,13 +257,13 @@ Возврат СоответствиеИменМетаданныхПоОбластям; КонецФункции -Функция ЗаписатьНастройкиКонфигурации() Экспорт +Процедура ЗаписатьНастройкиКонфигурации() Экспорт НастройкиКонфигурации = БулевыФункциональныеОпции(); Записать(НастройкиКонфигурации.НеРазделенная, РегистрыСведений.ОбластиСтатистики.ПолучитьСсылку("0", Истина)); Если ЗначениеЗаполнено(НастройкиКонфигурации.Разделенная) Тогда ЗаписатьРазделенную(НастройкиКонфигурации.Разделенная); КонецЕсли; -КонецФункции +КонецПроцедуры Функция БулевыФункциональныеОпции() @@ -263,12 +271,7 @@ РазделениеВключено = ЦентрМониторингаСлужебный.РазделениеПоОбластямДанныхВключено() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса"); - Если РазделениеВключено Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - РазделительОсновныхДанных = МодульРаботаВМоделиСервиса.РазделительОсновныхДанных(); - РазделительВспомогательныхДанных = МодульРаботаВМоделиСервиса.РазделительВспомогательныхДанных();; - КонецЕсли; - + Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл ОписаниеТиповФункциональнойОпции = Новый ОписаниеТипов(ФункциональнаяОпция.Хранение.Тип); Если Метаданные.Константы.Содержит(ФункциональнаяОпция.Хранение) И ОписаниеТиповФункциональнойОпции.СодержитТип(Тип("Булево")) Тогда @@ -370,7 +373,7 @@ КонецЕсли; Исключение Инфо = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСтр("ru='СтатистикаКонфигурации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru='СтатистикаКонфигурации'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, ,, НСтр("ru='Не удалось установить разделение сеанса. Область данных'") + " = " + Формат(Выборка.ОбластьДанных, "ЧГ=0") diff --git a/SSL/src/InformationRegisters/СубъектыДляСкрытияПерсональныхДанных/СубъектыДляСкрытияПерсональныхДанных.mdo b/SSL/src/InformationRegisters/СубъектыДляСкрытияПерсональныхДанных/СубъектыДляСкрытияПерсональныхДанных.mdo index 3dbe14c8d..3b96999c8 100644 --- a/SSL/src/InformationRegisters/СубъектыДляСкрытияПерсональныхДанных/СубъектыДляСкрытияПерсональныхДанных.mdo +++ b/SSL/src/InformationRegisters/СубъектыДляСкрытияПерсональныхДанных/СубъектыДляСкрытияПерсональныхДанных.mdo @@ -112,6 +112,7 @@ </type> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> <fillValue xsi:type="core:UndefinedValue"/> diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Module.bsl index 55697502b..f653e7331 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Module.bsl index 3dd0862cf..80bad0b72 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl index d2443168f..d1c18ccc7 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -268,7 +276,7 @@ |&УсловиеОтбораГруппДоступа2:СтарыеДанные.ГруппаДоступа"); Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ТаблицыГруппДоступа"); + Блокировка.Добавить("РегистрСведений.ТаблицыГруппДоступа"); НачатьТранзакцию(); Попытка diff --git a/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/ManagerModule.bsl index 6c4aac702..a85af4163 100644 --- a/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/УдалитьГруппыЗначенийДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс diff --git a/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl index 9823d2160..98d681a62 100644 --- a/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -101,7 +109,7 @@ ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -110,7 +118,7 @@ Иначе ЗаписьЖурналаРегистрации( НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , diff --git a/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/ManagerModule.bsl index bc25bdf61..1f8bf31f1 100644 --- a/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/УдалитьНастройкиТранспортаОбмена.mdo b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/УдалитьНастройкиТранспортаОбмена.mdo index bf4f65858..354c06272 100644 --- a/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/УдалитьНастройкиТранспортаОбмена.mdo +++ b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбмена/УдалитьНастройкиТранспортаОбмена.mdo @@ -103,10 +103,6 @@ <types>String</types> <stringQualifiers/> </type> - <toolTip> - <key>ru</key> - <value>Имя информационной базы на сервере 1С:Предприятия.</value> - </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <fullTextSearch>Use</fullTextSearch> @@ -145,10 +141,6 @@ <types>String</types> <stringQualifiers/> </type> - <toolTip> - <key>ru</key> - <value>Имя сервера 1С:Предприятия.</value> - </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <fullTextSearch>Use</fullTextSearch> diff --git a/SSL/src/InformationRegisters/УдалитьПраваПоЗначениямДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьПраваПоЗначениямДоступа/ManagerModule.bsl index 4c2ab385e..12eb83455 100644 --- a/SSL/src/InformationRegisters/УдалитьПраваПоЗначениямДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/УдалитьПраваПоЗначениямДоступа/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс @@ -29,8 +37,8 @@ | УдалитьПраваПоЗначениямДоступа.Право"; Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиПравОбъектов"); - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.УдалитьПраваПоЗначениямДоступа"); + Блокировка.Добавить("РегистрСведений.НастройкиПравОбъектов"); + Блокировка.Добавить("РегистрСведений.УдалитьПраваПоЗначениямДоступа"); НачатьТранзакцию(); Попытка diff --git a/SSL/src/InformationRegisters/УдалитьРейтингАктивностиОбластейДанных/УдалитьРейтингАктивностиОбластейДанных.mdo b/SSL/src/InformationRegisters/УдалитьРейтингАктивностиОбластейДанных/УдалитьРейтингАктивностиОбластейДанных.mdo index efe1e26c4..e48328ecf 100644 --- a/SSL/src/InformationRegisters/УдалитьРейтингАктивностиОбластейДанных/УдалитьРейтингАктивностиОбластейДанных.mdo +++ b/SSL/src/InformationRegisters/УдалитьРейтингАктивностиОбластейДанных/УдалитьРейтингАктивностиОбластейДанных.mdo @@ -86,10 +86,6 @@ <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> diff --git a/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/ФайлыВРабочемКаталоге.mdo b/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/ФайлыВРабочемКаталоге.mdo index 49f72738f..afe3961b6 100644 --- a/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/ФайлыВРабочемКаталоге.mdo +++ b/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/ФайлыВРабочемКаталоге.mdo @@ -194,6 +194,7 @@ <value>Пользователь</value> </synonym> <type> + <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> @@ -202,7 +203,6 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <quickChoice>DontUse</quickChoice> <createOnInput>Use</createOnInput> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl index e4815b74e..834a8c349 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl index e5d458f0b..94ffb8bf8 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl index 5243fcaf3..54cd3b6a0 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -129,7 +137,7 @@ КонецВыборки = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("КонецВыборки"); Если Не ЗначениеЗаполнено(ПериодДень.Дата) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Не заполнено значение поля День.'"), , ); Отказ = Истина; Возврат; @@ -140,7 +148,7 @@ И НачалоВыборки.Значение > КонецВыборки.Значение И НачалоВыборки.Использование И КонецВыборки.Использование Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Значение начала периода не может быть больше значения конца.'"), , ); Отказ = Истина; Возврат; @@ -151,14 +159,14 @@ Пользователь = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("Пользователь").Значение; Если Не ЗначениеЗаполнено(Пользователь) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Не заполнено значение поля Пользователь.'"), , ); Отказ = Истина; Возврат; КонецЕсли; Если Отчеты.АнализЖурналаРегистрации.ИмяПользователяИБ(Пользователь) = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Формирование отчета возможно только для пользователя, которому указано имя для входа в программу.'"), , ); Отказ = Истина; Возврат; @@ -171,7 +179,7 @@ Если ТипЗнч(ПользователиИГруппы) = Тип("СправочникСсылка.Пользователи") Тогда Если Отчеты.АнализЖурналаРегистрации.ИмяПользователяИБ(ПользователиИГруппы) = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Формирование отчета возможно только для пользователя, которому указано имя для входа в программу.'"), , ); Отказ = Истина; Возврат; @@ -180,7 +188,7 @@ КонецЕсли; Если Не ЗначениеЗаполнено(ПользователиИГруппы) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ОбщегоНазначения.СообщитьПользователю( НСтр("ru = 'Не заполнено значение поля Пользователи.'"), , ); Отказ = Истина; Возврат; @@ -308,4 +316,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl index 794850f15..d9dcac564 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -8,8 +15,10 @@ Возврат; КонецЕсли; - Если ОбработатьВходящиеПараметры() Тогда - Отказ = Истина; + ОбработатьВходящиеПараметры(Отказ); + + Если Отказ Тогда + Возврат; КонецЕсли; ШаблонЗаголовка = НСтр("ru = 'Ответы на вопрос № %1 опроса %2 + от %3.'"); @@ -61,12 +70,12 @@ // Булево - отказ от запуска формы. // &НаСервере -Функция ОбработатьВходящиеПараметры() +Процедура ОбработатьВходящиеПараметры(Отказ) Если Параметры.Свойство("ВопросШаблонаАнкеты") Тогда ВопросШаблонаАнкеты = Параметры.ВопросШаблонаАнкеты; Иначе - Возврат Истина; + Отказ = Истина; КонецЕсли; Если Параметры.Свойство("Опрос") Тогда @@ -96,11 +105,9 @@ Если Параметры.Свойство("ВариантОтчета") Тогда ВариантОтчета = Параметры.ВариантОтчета; Иначе - Возврат Истина; + Отказ = Истина; КонецЕсли; - - Возврат Ложь; -КонецФункции +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl index dc285b695..ed866477c 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы @@ -208,7 +215,6 @@ Иначе - СтруктураОтбора = Новый Структура; НайденнаяСтрока = СтрокаДереваЯчейка.Строки.Найти(СоставТабличногоВопроса[ИндексКолонок - 1].ЭлементарныйВопрос,"ЭлементарныйВопрос"); Область = Макет.ПолучитьОбласть("ЯчейкаТабличногоВопроса"); @@ -281,9 +287,9 @@ Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ - | ДокументАнкета.Респондент КАК Респондент, - | ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, + | ЕСТЬNULL(ДокументАнкета.Респондент, НЕОПРЕДЕЛЕНО) КАК Респондент, + | ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, | ОтветыНаВопросыАнкет.Ответ |ИЗ | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет @@ -322,10 +328,8 @@ Возврат Истина; КонецЕсли; - Если Параметры.Свойство("ПолныйКод") Тогда + Если Параметры.Свойство("ПолныйКод") Тогда ПолныйКод = Параметры.ПолныйКод; - Иначе - Отказ = Истина; КонецЕсли; Если Параметры.Свойство("НаименованиеОпроса") Тогда diff --git a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl index c01db746e..d38b8c7a0 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Reports/АнализОпроса/ManagerModule.bsl b/SSL/src/Reports/АнализОпроса/ManagerModule.bsl index dd751e73f..782ef0edd 100644 --- a/SSL/src/Reports/АнализОпроса/ManagerModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -14,7 +22,7 @@ НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, ""); НастройкиВарианта.Описание = - НСтр("ru = 'Информация о респондентах заполнивших анкеты по опросу, + НСтр("ru = 'Информация о респондентах, заполнивших анкеты по опросу, |количестве ответов на вопросы, количестве данных вариантов ответов.'"); НастройкиВарианта.НастройкиДляПоиска.НаименованияПолей = НСтр("ru = 'Респондент diff --git a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl index 0c936accb..3d26f63ae 100644 --- a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции @@ -13,11 +21,11 @@ ТаблицаОтчета.Очистить(); - Если ВидОтчета = НСтр("ru='АнализОтветов'") Тогда + Если ВидОтчета ="АнализОтветов" Тогда СформироватьОтчетАнализОтветов(ТаблицаОтчета,Опрос); - ИначеЕсли ВидОтчета = НСтр("ru='АнализОтветивших'") Тогда + ИначеЕсли ВидОтчета = "АнализОтветивших" Тогда СформироватьОтчетАнализОтветивших(ТаблицаОтчета,Опрос); @@ -1150,4 +1158,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl index cd0befbc3..71ae3735f 100644 --- a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl +++ b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl b/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl index ec81fcaab..fd91a8d6f 100644 --- a/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl +++ b/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl index f446c5ba7..8190f8aa6 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl index f27fc7eba..6172fbe0f 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -33,8 +41,6 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -43,15 +49,9 @@ Возврат; КонецЕсли; -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда Возврат; КонецЕсли; -#Иначе - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - Возврат; - КонецЕсли; -#КонецЕсли СтандартнаяОбработка = Ложь; ВыбраннаяФорма = "ФормаОтчета"; @@ -60,8 +60,6 @@ #КонецОбласти -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - #Область СлужебныеПроцедурыИФункции // Вызывается из форма отчета. diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl index 0d647f402..c1e072ac8 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -391,4 +399,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl index 9a7c3bdd2..71f6561b6 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,10 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// #Область ОбработчикиСобытийФормы diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl index e67f87480..c9d09f211 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -33,8 +41,6 @@ #КонецОбласти -#КонецЕсли - #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -43,15 +49,9 @@ Возврат; КонецЕсли; -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда Возврат; КонецЕсли; -#Иначе - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - Возврат; - КонецЕсли; -#КонецЕсли СтандартнаяОбработка = Ложь; ВыбраннаяФорма = "ФормаОтчета"; @@ -60,8 +60,6 @@ #КонецОбласти -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - #Область СлужебныеПроцедурыИФункции // Вызывается из форма отчета. diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl index 354487ac8..3a240cc01 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -398,4 +406,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl b/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl index 0151bace3..080c90001 100644 --- a/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl +++ b/SSL/src/Reports/ДвиженияДокумента/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -17,11 +25,11 @@ НастройкиОтчета.Размещение.Вставить(ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(), "Важный"); НастройкиВарианта_Горизонталь = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной"); - НастройкиВарианта_Горизонталь.Описание = НСтр("ru = 'Движения документа (Горизонтально).'"); + НастройкиВарианта_Горизонталь.Описание = НСтр("ru = 'Горизонтальное размещение колонок с измерениями, ресурсами и реквизитами регистров.'"); НастройкиВарианта_Горизонталь.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Движения документа'"); НастройкиВарианта_Вертикаль = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Дополнительный"); - НастройкиВарианта_Вертикаль.Описание = НСтр("ru = 'Движения документа (Вертикально).'"); + НастройкиВарианта_Вертикаль.Описание = НСтр("ru = 'Вертикальное размещение колонок с измерениями, ресурсами и реквизитами позволяет расположить данные более компактно, для просмотра регистров с большим количеством колонок.'"); НастройкиВарианта_Вертикаль.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Движения документа'"); КонецПроцедуры @@ -58,6 +66,7 @@ Команда.Важность = "СмТакже"; Команда.ТипПараметра = ОписаниеТипаПараметраКоманды; Команда.Менеджер = "Отчет.ДвиженияДокумента"; + Команда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.L, Ложь, Истина, Истина); Возврат Команда; @@ -86,7 +95,7 @@ #Область СлужебныеПроцедурыИФункции -Функция ОписаниеТипаПараметраКоманды(КомандыОтчетов, Параметры, ДокументыСОтчетомОДвижениях) +Функция ОписаниеТипаПараметраКоманды(Знач КомандыОтчетов, Знач Параметры, Знач ДокументыСОтчетомОДвижениях) Если Не Параметры.Свойство("Источники") Тогда Возврат Неопределено; @@ -96,41 +105,38 @@ Если ДокументыСОтчетомОДвижениях <> Неопределено Тогда ОтключитьОтчетОтДокументов(КомандыОтчетов); + ДокументыСОтчетом = Новый Соответствие; + Для каждого ДокументСОтчетом Из ДокументыСОтчетомОДвижениях Цикл + ДокументыСОтчетом[ДокументСОтчетом] = Истина; + КонецЦикла; + Иначе + ДокументыСОтчетом = Неопределено; КонецЕсли; - Типы = Новый Массив; - ИсключаемыеТипы = Новый Массив; - + ТипыДокументовСДвижениями = Новый Массив; Для Каждого СтрокаИсточника Из СтрокиИсточников Цикл ТипСсылкиДанных = СтрокаИсточника.ТипСсылкиДанных; Если ТипЗнч(ТипСсылкиДанных) = Тип("Тип") Тогда - Типы.Добавить(ТипСсылкиДанных); + ТипыДокументовСДвижениями.Добавить(ТипСсылкиДанных); ИначеЕсли ТипЗнч(ТипСсылкиДанных) = Тип("ОписаниеТипов") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Типы, ТипСсылкиДанных.Типы()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ТипыДокументовСДвижениями, ТипСсылкиДанных.Типы()); КонецЕсли; КонецЦикла; - ОбщегоНазначенияКлиентСервер.СвернутьМассив(Типы); + ОбщегоНазначенияКлиентСервер.СвернутьМассив(ТипыДокументовСДвижениями); - Для Каждого ТекущийТип Из Типы Цикл - Если ЭтоПодключаемыйТип(ТекущийТип, ДокументыСОтчетомОДвижениях) Тогда - Продолжить; + Индекс = ТипыДокументовСДвижениями.Количество() - 1; + Пока Индекс >= 0 Цикл + Если Не ЭтоПодключаемыйТип(ТипыДокументовСДвижениями[Индекс], ДокументыСОтчетом) Тогда + ТипыДокументовСДвижениями.Удалить(Индекс); КонецЕсли; - ИсключаемыеТипы.Добавить(ТекущийТип); - КонецЦикла; + Индекс = Индекс - 1; + КонецЦикла; - Для Каждого ИсключаемыйТип Из ИсключаемыеТипы Цикл - Типы.Удалить(Типы.Найти(ИсключаемыйТип)); - КонецЦикла; - - Если Типы.Количество() = 0 Тогда - Возврат Неопределено; - Иначе - Возврат Новый ОписаниеТипов(Типы); - КонецЕсли; + Возврат ?(ТипыДокументовСДвижениями.Количество() > 0, Новый ОписаниеТипов(ТипыДокументовСДвижениями), Неопределено); КонецФункции @@ -149,12 +155,11 @@ Функция ЭтоПодключаемыйТип(ПроверяемыйТип, ДокументыСОтчетомОДвижениях) ОбъектМетаданных = Метаданные.НайтиПоТипу(ПроверяемыйТип); - Если ОбъектМетаданных = Неопределено Тогда Возврат Ложь; КонецЕсли; - Если ДокументыСОтчетомОДвижениях <> Неопределено И ДокументыСОтчетомОДвижениях.Найти(ОбъектМетаданных) = Неопределено Тогда + Если ДокументыСОтчетомОДвижениях <> Неопределено И ДокументыСОтчетомОДвижениях[ОбъектМетаданных] = Неопределено Тогда Возврат Ложь; КонецЕсли; diff --git a/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl index 7ed6a46e3..a1c1a003a 100644 --- a/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl +++ b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl @@ -23,7 +23,7 @@ // или уникальный идентификатор пользовательского варианта отчета. // Неопределено когда вызов без контекста. // Настройки - Структура - см. возвращаемое значение -// ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию(). // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт diff --git a/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl b/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl index 14e2b0ef1..f13be3752 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl +++ b/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Reports/Задания/ManagerModule.bsl b/SSL/src/Reports/Задания/ManagerModule.bsl index 71fced060..c49c14a7a 100644 --- a/SSL/src/Reports/Задания/ManagerModule.bsl +++ b/SSL/src/Reports/Задания/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Reports/Задания/ObjectModule.bsl b/SSL/src/Reports/Задания/ObjectModule.bsl index deb8a34a1..1b6fc1924 100644 --- a/SSL/src/Reports/Задания/ObjectModule.bsl +++ b/SSL/src/Reports/Задания/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -12,4 +20,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/Задачи/ManagerModule.bsl b/SSL/src/Reports/Задачи/ManagerModule.bsl index 3feb07c41..9aa5b779a 100644 --- a/SSL/src/Reports/Задачи/ManagerModule.bsl +++ b/SSL/src/Reports/Задачи/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Reports/Задачи/ObjectModule.bsl b/SSL/src/Reports/Задачи/ObjectModule.bsl index deb8a34a1..1b6fc1924 100644 --- a/SSL/src/Reports/Задачи/ObjectModule.bsl +++ b/SSL/src/Reports/Задачи/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -12,4 +20,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl index 5f55d6052..bbf79f4ce 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl index 5e9ff9b51..6e8c1ad63 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -44,27 +52,6 @@ #КонецОбласти -#Область СлужебныйПрограммныйИнтерфейс - -// Возвращает словарь свойств конфигурации. -// -// Возвращаемое значение: Структура: -// * Именительный - синоним вида модуля в именительном падеже, -// * Родительный - синоним вида модуля в родительном падеже. -// -Функция СловарьМодуляКонфигурации() Экспорт - - Результат = Новый Структура(); - - Результат.Вставить("Именительный", НСтр("ru = 'Программа'")); - Результат.Вставить("Родительный", НСтр("ru = 'Программы'")); - - Возврат Результат; - -КонецФункции - -#КонецОбласти - #Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. @@ -425,6 +412,23 @@ КонецФункции +// Возвращает словарь свойств конфигурации. +// +// Возвращаемое значение: Структура: +// * Именительный - синоним вида модуля в именительном падеже, +// * Родительный - синоним вида модуля в родительном падеже. +// +Функция СловарьМодуляКонфигурации() + + Результат = Новый Структура(); + + Результат.Вставить("Именительный", НСтр("ru = 'Программа'")); + Результат.Вставить("Родительный", НСтр("ru = 'Программы'")); + + Возврат Результат; + +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl index 63637c3d1..3fe990d2c 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -30,38 +38,31 @@ #КонецОбласти -#Область ОбработчикиСобытийОбъекта +#Область ОбработчикиСобытий -// Вызывается при выполнении отчета с помощью метода СкомпоноватьРезультат(). -// -// Параметры: -// ДокументРезультат - ТабличныйДокумент - документ, в который выводится результат, -// ДанныеРасшифровки - Произвольный - переменная, в которую необходимо поместить -// данные расшифровки, -// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения -// стандартной (системной) обработки события. -// Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДокументРезультат.Очистить(); НачатьТранзакцию(); - - УстановитьПривилегированныйРежим(Истина); - - Константы.ИспользуютсяПрофилиБезопасности.Установить(Истина); - Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Установить(Истина); - - Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения(); - - ЗапросыРазрешений = РаботаВБезопасномРежимеСлужебный.ЗапросыОбновленияРазрешенийКонфигурации(); - - Менеджер = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.МенеджерПримененияРазрешений(ЗапросыРазрешений); - - УстановитьПривилегированныйРежим(Ложь); - - ОтменитьТранзакцию(); + Попытка + УстановитьПривилегированныйРежим(Истина); + + Константы.ИспользуютсяПрофилиБезопасности.Установить(Истина); + Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Установить(Истина); + + Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения(); + ЗапросыРазрешений = РаботаВБезопасномРежимеСлужебный.ЗапросыОбновленияРазрешенийКонфигурации(); + Менеджер = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.МенеджерПримененияРазрешений(ЗапросыРазрешений); + + УстановитьПривилегированныйРежим(Ложь); + + ОтменитьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; ДокументРезультат.Вывести(Менеджер.Представление(Истина)); @@ -69,4 +70,6 @@ #КонецОбласти -#КонецЕсли +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx index 766cfb952..c03706e0a 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Templates/ПредставленияРазрешений/Template.mxlx @@ -10,7 +10,7 @@ </languageInfo> </languageSettings> <columns> - <size>7</size> + <size>9</size> <columnsItem> <index>0</index> <column> @@ -53,19 +53,25 @@ <formatIndex>7</formatIndex> </column> </columnsItem> + <columnsItem> + <index>7</index> + <column> + <formatIndex>8</formatIndex> + </column> + </columnsItem> </columns> <rowsItem> <index>0</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>10</f> + <f>11</f> </c> </c> </row> @@ -73,21 +79,21 @@ <rowsItem> <index>1</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> - </c> - </c> - <c> - <c> - <f>11</f> - <pictureParameter>Пиктограмма</pictureParameter> + <f>10</f> </c> </c> <c> <c> <f>12</f> + <pictureParameter>Пиктограмма</pictureParameter> + </c> + </c> + <c> + <c> + <f>13</f> <parameter>ТекстШапки</parameter> <detailParameter>ПрограммныйМодуль</detailParameter> </c> @@ -97,15 +103,15 @@ <rowsItem> <index>2</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>13</f> + <f>14</f> </c> </c> </row> @@ -113,15 +119,15 @@ <rowsItem> <index>3</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>13</f> + <f>14</f> </c> </c> </row> @@ -129,15 +135,15 @@ <rowsItem> <index>4</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>14</f> + <f>15</f> </c> </c> <c> <c> - <f>15</f> + <f>16</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -148,22 +154,23 @@ </c> <c> <c> - <f>14</f> + <f>15</f> </c> </c> <c> <c> - <f>14</f> + <f>15</f> + </c> + </c> + <c> + <i>5</i> + <c> + <f>15</f> </c> </c> <c> <c> - <f>14</f> - </c> - </c> - <c> - <c> - <f>14</f> + <f>15</f> </c> </c> </row> @@ -171,15 +178,15 @@ <rowsItem> <index>5</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>17</f> + <f>18</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -189,9 +196,9 @@ </c> </c> <c> - <i>4</i> + <i>5</i> <c> - <f>18</f> + <f>19</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -202,7 +209,7 @@ </c> <c> <c> - <f>18</f> + <f>19</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -216,28 +223,28 @@ <rowsItem> <index>6</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>19</f> + <f>20</f> <parameter>Path</parameter> </c> </c> <c> - <i>4</i> + <i>5</i> <c> - <f>20</f> + <f>21</f> <parameter>AllowedRead</parameter> </c> </c> <c> <c> - <f>20</f> + <f>21</f> <parameter>AllowedWrite</parameter> </c> </c> @@ -246,7 +253,17 @@ <rowsItem> <index>7</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> + <c> + <c> + <f>10</f> + </c> + </c> + <c> + <c> + <f>14</f> + </c> + </c> <c> <c> <f>9</f> @@ -254,27 +271,18 @@ </c> <c> <c> - <f>13</f> + <f>9</f> + </c> + </c> + <c> + <i>5</i> + <c> + <f>9</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> + <f>9</f> </c> </c> </row> @@ -282,15 +290,15 @@ <rowsItem> <index>8</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>21</f> + <f>22</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -304,15 +312,15 @@ <rowsItem> <index>9</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>17</f> + <f>18</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -322,9 +330,9 @@ </c> </c> <c> - <i>4</i> + <i>5</i> <c> - <f>18</f> + <f>19</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -338,15 +346,15 @@ <rowsItem> <index>10</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>22</f> + <f>23</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -356,9 +364,9 @@ </c> </c> <c> - <i>4</i> + <i>5</i> <c> - <f>23</f> + <f>24</f> <parameter>ComputerName</parameter> </c> </c> @@ -367,7 +375,17 @@ <rowsItem> <index>11</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> + <c> + <c> + <f>10</f> + </c> + </c> + <c> + <c> + <f>14</f> + </c> + </c> <c> <c> <f>9</f> @@ -375,27 +393,18 @@ </c> <c> <c> - <f>13</f> + <f>9</f> + </c> + </c> + <c> + <i>5</i> + <c> + <f>9</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> + <f>9</f> </c> </c> </row> @@ -403,15 +412,15 @@ <rowsItem> <index>12</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>21</f> + <f>22</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -425,15 +434,15 @@ <rowsItem> <index>13</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>17</f> + <f>18</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -443,9 +452,9 @@ </c> </c> <c> - <i>4</i> + <i>5</i> <c> - <f>24</f> + <f>25</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -459,15 +468,15 @@ <rowsItem> <index>14</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>25</f> + <f>26</f> <parameter>TemplateName</parameter> </c> </c> @@ -476,22 +485,22 @@ <rowsItem> <index>15</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>25</f> + <f>26</f> <parameter>Ключ</parameter> </c> </c> <c> - <i>4</i> + <i>5</i> <c> - <f>23</f> + <f>24</f> <parameter>Значение</parameter> </c> </c> @@ -500,7 +509,17 @@ <rowsItem> <index>16</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> + <c> + <c> + <f>10</f> + </c> + </c> + <c> + <c> + <f>14</f> + </c> + </c> <c> <c> <f>9</f> @@ -508,27 +527,18 @@ </c> <c> <c> - <f>13</f> + <f>9</f> + </c> + </c> + <c> + <i>5</i> + <c> + <f>9</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> + <f>9</f> </c> </c> </row> @@ -536,15 +546,15 @@ <rowsItem> <index>17</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>21</f> + <f>22</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -558,15 +568,15 @@ <rowsItem> <index>18</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>17</f> + <f>18</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -580,15 +590,15 @@ <rowsItem> <index>19</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>25</f> + <f>26</f> <parameter>CommandMask</parameter> </c> </c> @@ -597,7 +607,18 @@ <rowsItem> <index>20</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> + <c> + <c> + <f>10</f> + </c> + </c> + <c> + <c> + <f>14</f> + <tl/> + </c> + </c> <c> <c> <f>9</f> @@ -605,28 +626,18 @@ </c> <c> <c> - <f>13</f> - <tl/> + <f>9</f> + </c> + </c> + <c> + <i>5</i> + <c> + <f>9</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> + <f>9</f> </c> </c> </row> @@ -634,15 +645,15 @@ <rowsItem> <index>21</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>21</f> + <f>22</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -656,19 +667,19 @@ <rowsItem> <index>22</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>17</f> + <f>18</f> <tl> <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Протокол:</v8:content> + <v8:content>Протокол</v8:content> </v8:item> </tl> </c> @@ -676,7 +687,7 @@ <c> <i>3</i> <c> - <f>26</f> + <f>27</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -687,7 +698,7 @@ </c> <c> <c> - <f>27</f> + <f>28</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -698,7 +709,7 @@ </c> <c> <c> - <f>18</f> + <f>19</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -712,34 +723,34 @@ <rowsItem> <index>23</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>28</f> + <f>29</f> <parameter>Protocol</parameter> </c> </c> <c> <i>3</i> <c> - <f>29</f> + <f>30</f> <parameter>Host</parameter> </c> </c> <c> <c> - <f>30</f> + <f>31</f> <parameter>Port</parameter> </c> </c> <c> <c> - <f>31</f> + <f>32</f> <parameter>Description</parameter> </c> </c> @@ -748,7 +759,17 @@ <rowsItem> <index>24</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> + <c> + <c> + <f>10</f> + </c> + </c> + <c> + <c> + <f>14</f> + </c> + </c> <c> <c> <f>9</f> @@ -756,27 +777,18 @@ </c> <c> <c> - <f>13</f> + <f>9</f> + </c> + </c> + <c> + <i>5</i> + <c> + <f>9</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> + <f>9</f> </c> </c> </row> @@ -784,15 +796,15 @@ <rowsItem> <index>25</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>21</f> + <f>22</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -803,50 +815,51 @@ </c> <c> <c> - <f>32</f> + <f>33</f> </c> </c> <c> <c> - <f>4</f> - </c> - </c> - <c> - <c> - <f>5</f> + <f>34</f> </c> </c> <c> + <i>5</i> <c> <f>6</f> </c> </c> + <c> + <c> + <f>7</f> + </c> + </c> </row> </rowsItem> <rowsItem> <index>26</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>33</f> + <f>35</f> <tl> <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Расширение:</v8:content> + <v8:content>Расширение</v8:content> </v8:item> </tl> </c> </c> <c> - <i>4</i> + <i>5</i> <c> - <f>34</f> + <f>28</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -860,22 +873,22 @@ <rowsItem> <index>27</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>35</f> + <f>36</f> <parameter>Name</parameter> </c> </c> <c> - <i>4</i> + <i>5</i> <c> - <f>36</f> + <f>37</f> <parameter>Hash</parameter> </c> </c> @@ -884,7 +897,17 @@ <rowsItem> <index>28</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> + <c> + <c> + <f>10</f> + </c> + </c> + <c> + <c> + <f>14</f> + </c> + </c> <c> <c> <f>9</f> @@ -892,27 +915,18 @@ </c> <c> <c> - <f>13</f> + <f>9</f> + </c> + </c> + <c> + <i>5</i> + <c> + <f>9</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> + <f>9</f> </c> </c> </row> @@ -920,15 +934,15 @@ <rowsItem> <index>29</index> <row> - <formatIndex>37</formatIndex> + <formatIndex>38</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>38</f> + <f>39</f> </c> </c> </row> @@ -936,15 +950,15 @@ <rowsItem> <index>30</index> <row> - <formatIndex>37</formatIndex> + <formatIndex>38</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>38</f> + <f>39</f> </c> </c> </row> @@ -952,15 +966,15 @@ <rowsItem> <index>31</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>16</f> + <f>17</f> </c> </c> <c> <c> - <f>39</f> + <f>40</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -974,7 +988,17 @@ <rowsItem> <index>32</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> + <c> + <c> + <f>10</f> + </c> + </c> + <c> + <c> + <f>14</f> + </c> + </c> <c> <c> <f>9</f> @@ -982,27 +1006,18 @@ </c> <c> <c> - <f>13</f> + <f>9</f> + </c> + </c> + <c> + <i>5</i> + <c> + <f>9</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> + <f>9</f> </c> </c> </row> @@ -1010,163 +1025,188 @@ <rowsItem> <index>33</index> <row> - <formatIndex>8</formatIndex> + <formatIndex>9</formatIndex> <c> <c> - <f>9</f> + <f>10</f> </c> </c> <c> <c> - <f>13</f> + <f>14</f> </c> </c> </row> </rowsItem> <templateMode>true</templateMode> - <defaultFormatIndex>40</defaultFormatIndex> + <defaultFormatIndex>41</defaultFormatIndex> <height>34</height> <vgRows>34</vgRows> <merge> <r>1</r> <c>2</c> - <w>3</w> + <w>4</w> </merge> <merge> <r>4</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> <merge> <r>5</r> <c>1</c> - <w>2</w> + <w>3</w> </merge> <merge> <r>6</r> <c>1</c> - <w>2</w> + <w>3</w> </merge> <merge> <r>8</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> <merge> <r>9</r> <c>1</c> - <w>2</w> + <w>3</w> </merge> <merge> <r>9</r> - <c>4</c> + <c>5</c> <w>1</w> </merge> <merge> <r>10</r> <c>1</c> - <w>2</w> + <w>3</w> </merge> <merge> <r>10</r> - <c>4</c> + <c>5</c> <w>1</w> </merge> <merge> <r>12</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> <merge> <r>13</r> <c>1</c> - <w>2</w> + <w>3</w> </merge> <merge> <r>13</r> - <c>4</c> + <c>5</c> <w>1</w> </merge> <merge> <r>14</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> <merge> <r>15</r> <c>1</c> - <w>2</w> + <w>3</w> </merge> <merge> <r>15</r> - <c>4</c> + <c>5</c> <w>1</w> </merge> <merge> <r>17</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> <merge> <r>18</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> <merge> <r>19</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> <merge> <r>21</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> <merge> <r>22</r> <c>1</c> <w>1</w> </merge> + <merge> + <r>22</r> + <c>5</c> + <w>3</w> + </merge> <merge> <r>23</r> <c>1</c> <w>1</w> </merge> + <merge> + <r>23</r> + <c>5</c> + <w>3</w> + </merge> <merge> <r>25</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> <merge> <r>26</r> <c>1</c> - <w>2</w> + <w>3</w> </merge> <merge> <r>26</r> - <c>4</c> + <c>5</c> <w>1</w> </merge> <merge> <r>27</r> <c>1</c> - <w>2</w> + <w>3</w> </merge> <merge> <r>27</r> - <c>4</c> + <c>5</c> <w>1</w> </merge> <merge> <r>31</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> <merge> <r>33</r> <c>1</c> - <w>4</w> + <w>5</w> </merge> + <merge> + <r>-1</r> + <c>3</c> + <w>1</w> + </merge> + <verticalUnmerge> + <r>22</r> + <c>3</c> + <w>1</w> + </verticalUnmerge> + <verticalUnmerge> + <r>23</r> + <c>3</c> + <w>1</w> + </verticalUnmerge> <namedItem xsi:type="NamedItemCells"> <name>ГруппаAttachAddin</name> <area> @@ -1424,11 +1464,14 @@ <width>22</width> </format> <format> - <width>183</width> + <width>61</width> </format> <format> <font>0</font> - <width>238</width> + <width>312</width> + </format> + <format> + <width>72</width> </format> <format> <font>0</font> @@ -1552,14 +1595,14 @@ </format> <format> <font>0</font> - <leftBorder>0</leftBorder> - <topBorder>0</topBorder> - <bottomBorder>0</bottomBorder> + <border>0</border> + <width>327</width> <backColor>style:ReportHeaderBackColor</backColor> </format> <format> <font>0</font> <border>0</border> + <width>136</width> <backColor>style:ReportHeaderBackColor</backColor> </format> <format> @@ -1570,9 +1613,8 @@ </format> <format> <font>0</font> - <leftBorder>0</leftBorder> - <topBorder>0</topBorder> - <bottomBorder>0</bottomBorder> + <border>0</border> + <width>327</width> <textPlacement>Wrap</textPlacement> <fillType>Parameter</fillType> <hyperLink>false</hyperLink> @@ -1580,6 +1622,7 @@ <format> <font>0</font> <border>0</border> + <width>136</width> <textPlacement>Auto</textPlacement> <fillType>Parameter</fillType> <hyperLink>false</hyperLink> @@ -1593,6 +1636,8 @@ <format> <font>0</font> <border>0</border> + <width>139</width> + <textPlacement>Wrap</textPlacement> <fillType>Parameter</fillType> <editFormat> <v8:item> @@ -1605,6 +1650,10 @@ <font>0</font> <width>183</width> </format> + <format> + <font>0</font> + <width>238</width> + </format> <format> <font>0</font> <leftBorder>0</leftBorder> @@ -1613,12 +1662,6 @@ <width>170</width> <backColor>style:ReportHeaderBackColor</backColor> </format> - <format> - <font>0</font> - <border>0</border> - <width>136</width> - <backColor>style:ReportHeaderBackColor</backColor> - </format> <format> <font>0</font> <leftBorder>0</leftBorder> diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl index d5f25304c..c290bcf4d 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl index fc6503744..dfa1f80e6 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс @@ -144,4 +152,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 60cde6d8a..39ea35082 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/МестаИспользованияСсылок/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -79,13 +79,26 @@ <v8:Type>xs:boolean</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:boolean + + ИсточникДанных МестаИспользования КоличествоДанных ВЫБОР -КОГДА ВспомогательныеДанные ТОГДА 0 +КОГДА ЭтоСлужебныеДанные ТОГДА 0 ИНАЧЕ 1 КОНЕЦ @@ -226,7 +239,7 @@ </dcsset:groupItems> <dcsset:filter> <dcsset:item xsi:type="dcsset:FilterItemComparison"> - <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:item> diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl b/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl index c4e58bb88..5037e3a43 100644 --- a/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl b/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl index 559ba244c..95844e367 100644 --- a/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -36,8 +44,6 @@ КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); - ИдентификаторыНесуществующихПользователейИБ = Новый Массив; - ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ОбъемДанныхВсего", ОбъемДанныхВсего()); ВнешниеНаборыДанных.Вставить("ОбъемНенужныхФайлов", ТаблицаНенужныхФайлов); @@ -118,11 +124,6 @@ ЭлементИсключение = Неопределено; КонецЕсли; - ОчиститьТолькоВерсии = Ложь; - Если НастройкаОчистки.Действие = Перечисления.ВариантыОчисткиФайлов.ОчиститьВерсии Тогда - ОчиститьТолькоВерсии = Истина; - КонецЕсли; - ВременнаяСхемаКомпоновкиДанных.НаборыДанных[0].Запрос = ТекстЗапросаДляОчисткиФайлов( ВладелецФайла, НастройкаОчистки, @@ -139,8 +140,6 @@ ВременныйКомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ВременнаяСхемаКомпоновкиДанных)); - Настройки = ВременныйКомпоновщикНастроек.ПолучитьНастройки(); - Параметр = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТипВладельца"); Параметр.Значение = ТипЗнч(ВладелецФайла.ЗначениеПустойСсылки); Параметр.Использование = Истина; @@ -206,4 +205,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ОценкаПроизводительности/ManagerModule.bsl b/SSL/src/Reports/ОценкаПроизводительности/ManagerModule.bsl index 77d407e8a..db935bded 100644 --- a/SSL/src/Reports/ОценкаПроизводительности/ManagerModule.bsl +++ b/SSL/src/Reports/ОценкаПроизводительности/ManagerModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс diff --git a/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl b/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl index 913dc5746..462063e49 100644 --- a/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl +++ b/SSL/src/Reports/ОценкаПроизводительности/ObjectModule.bsl @@ -1,3 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -8,11 +16,11 @@ ПериодНастройкаПользовательская = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПериодНастройка.ИдентификаторПользовательскойНастройки); ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода"); - ПараметрДанных.Значение = ПериодНастройкаПользовательская.Значение.ДатаНачала; + ПараметрДанных.Значение = УниверсальноеВремя(ПериодНастройкаПользовательская.Значение.ДатаНачала); ПараметрДанных.Использование = Истина; ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода"); - ПараметрДанных.Значение = ПериодНастройкаПользовательская.Значение.ДатаОкончания; + ПараметрДанных.Значение = УниверсальноеВремя(ПериодНастройкаПользовательская.Значение.ДатаОкончания); ПараметрДанных.Использование = Истина; ПериодСравненияНастройка = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПериодСравнения"); @@ -22,11 +30,11 @@ И ПериодСравненияНастройкаПользовательская.Использование Тогда ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериодаСравненияЧисло"); - ПараметрДанных.Значение = (ПериодСравненияНастройкаПользовательская.Значение.ДатаНачала - Дата(1,1,1)) * 1000; + ПараметрДанных.Значение = (УниверсальноеВремя(ПериодСравненияНастройкаПользовательская.Значение.ДатаНачала) - Дата(1,1,1)) * 1000; ПараметрДанных.Использование = Истина; ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериодаСравненияЧисло"); - ПараметрДанных.Значение = (ПериодСравненияНастройкаПользовательская.Значение.ДатаОкончания - Дата(1,1,1)) * 1000; + ПараметрДанных.Значение = (УниверсальноеВремя(ПериодСравненияНастройкаПользовательская.Значение.ДатаОкончания) - Дата(1,1,1)) * 1000; ПараметрДанных.Использование = Истина; @@ -67,4 +75,6 @@ #КонецОбласти +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index c60066108..add9261b6 100644 --- a/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ОценкаПроизводительности/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -293,18 +293,28 @@ </v8:item> + + ВыполненСОшибкой + ВыполненСОшибкой + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выполнен с ошибкой</v8:content> + </v8:item> + + ИсточникДанных1 ВЫБРАТЬ ВЫБОР &ПереодичностьЗамеров КОГДА 1 - ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), ЧАС) + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ЧАС) КОГДА 2 - ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), ДЕНЬ) + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ДЕНЬ) КОГДА 3 ТОГДА ВЫБОР КОГДА Замеры.ДатаНачалаЗамера < &НачалоПериодаЧисло - ТОГДА ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200) - ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), НЕДЕЛЯ) + ТОГДА ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200 + &ПоправкаЧасовогоПояса) + ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), НЕДЕЛЯ) КОНЕЦ КОГДА 4 ТОГДА &ПериодНет @@ -334,7 +344,8 @@ КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, МИНИМУМ(Замеры.ВремяВыполнения) КАК МинимальноеЗначение, МАКСИМУМ(Замеры.ВремяВыполнения) КАК МаксимальноеЗначение, - Замеры.Пользователь + Замеры.Пользователь, + Замеры.ВыполненСОшибкой ПОМЕСТИТЬ ЗамерыТекущие ИЗ РегистрСведений.ЗамерыВремени КАК Замеры @@ -346,19 +357,20 @@ {ГДЕ (Замеры.ВремяВыполнения >= &КоэффициентНижнейГраницыЗамера * КлючевыеОперации.ЦелевоеВремя), (Замеры.ВремяВыполнения <= &КоэффициентВерхнейГраницыЗамера * КлючевыеОперации.ЦелевоеВремя), - Замеры.Пользователь} + Замеры.Пользователь, + Замеры.ВыполненСОшибкой} СГРУППИРОВАТЬ ПО ВЫБОР &ПереодичностьЗамеров КОГДА 1 - ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), ЧАС) + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ЧАС) КОГДА 2 - ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), ДЕНЬ) + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ДЕНЬ) КОГДА 3 ТОГДА ВЫБОР КОГДА Замеры.ДатаНачалаЗамера < &НачалоПериодаЧисло - ТОГДА ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200) - ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200), НЕДЕЛЯ) + ТОГДА ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200 + &ПоправкаЧасовогоПояса) + ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, Замеры.ДатаНачалаЗамера / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), НЕДЕЛЯ) КОНЕЦ КОГДА 4 ТОГДА &ПериодНет @@ -366,7 +378,8 @@ КлючевыеОперации.КлючеваяОперация, КлючевыеОперации.Приоритет, КлючевыеОперации.ЦелевоеВремя, - Замеры.Пользователь + Замеры.Пользователь, + Замеры.ВыполненСОшибкой ИНДЕКСИРОВАТЬ ПО ПериодЗамера, @@ -377,14 +390,14 @@ ВЫБРАТЬ ВЫБОР &ПереодичностьЗамеров КОГДА 1 - ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), ЧАС) + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ЧАС) КОГДА 2 - ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), ДЕНЬ) + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ДЕНЬ) КОГДА 3 ТОГДА ВЫБОР КОГДА Замеры.ДатаНачалаЗамера - (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло) < &НачалоПериодаЧисло - ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200), НЕДЕЛЯ) - ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), НЕДЕЛЯ) + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), НЕДЕЛЯ) + ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), НЕДЕЛЯ) КОНЕЦ КОГДА 4 ТОГДА &ПериодНет @@ -414,7 +427,8 @@ КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, МИНИМУМ(Замеры.ВремяВыполнения) КАК МинимальноеЗначение, МАКСИМУМ(Замеры.ВремяВыполнения) КАК МаксимальноеЗначение, - Замеры.Пользователь + Замеры.Пользователь, + Замеры.ВыполненСОшибкой ПОМЕСТИТЬ ЗамерыПредыдущие ИЗ РегистрСведений.ЗамерыВремени КАК Замеры @@ -424,19 +438,20 @@ ГДЕ Замеры.ДатаНачалаЗамера МЕЖДУ &НачалоПериодаСравненияЧисло И &КонецПериодаСравненияЧисло {ГДЕ - Замеры.Пользователь} + Замеры.Пользователь, + Замеры.ВыполненСОшибкой} СГРУППИРОВАТЬ ПО ВЫБОР &ПереодичностьЗамеров КОГДА 1 - ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), ЧАС) + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ЧАС) КОГДА 2 - ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), ДЕНЬ) + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), ДЕНЬ) КОГДА 3 ТОГДА ВЫБОР КОГДА Замеры.ДатаНачалаЗамера - (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло) < &НачалоПериодаЧисло - ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200), НЕДЕЛЯ) - ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200), НЕДЕЛЯ) + ТОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, &НачалоПериодаЧисло / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), НЕДЕЛЯ) + ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 1), СЕКУНДА, (Замеры.ДатаНачалаЗамера + (&НачалоПериодаЧисло - &НачалоПериодаСравненияЧисло)) / 1000 - 63555667200 + &ПоправкаЧасовогоПояса), НЕДЕЛЯ) КОНЕЦ КОГДА 4 ТОГДА &ПериодНет @@ -444,7 +459,8 @@ КлючевыеОперации.КлючеваяОперация, КлючевыеОперации.Приоритет, КлючевыеОперации.ЦелевоеВремя, - Замеры.Пользователь + Замеры.Пользователь, + Замеры.ВыполненСОшибкой ИНДЕКСИРОВАТЬ ПО ПериодЗамера, @@ -475,13 +491,15 @@ ЗамерыПредыдущие.МинимальноеЗначение КАК МинимальноеЗначениеПредыдущее, ЗамерыТекущие.МаксимальноеЗначение КАК МаксимальноеЗначение, ЗамерыПредыдущие.МаксимальноеЗначение КАК МаксимальноеЗначениеПредыдущее, - ЕСТЬNULL(ЗамерыТекущие.Пользователь, ЗамерыПредыдущие.Пользователь) КАК Пользователь + ЕСТЬNULL(ЗамерыТекущие.Пользователь, ЗамерыПредыдущие.Пользователь) КАК Пользователь, + ЕСТЬNULL(ЗамерыТекущие.ВыполненСОшибкой, ЗамерыПредыдущие.ВыполненСОшибкой) КАК ВыполненСОшибкой ИЗ ЗамерыТекущие КАК ЗамерыТекущие {ЛЕВОЕ СОЕДИНЕНИЕ} ЗамерыПредыдущие КАК ЗамерыПредыдущие ПО (ЗамерыПредыдущие.ПериодЗамера = ЗамерыТекущие.ПериодЗамера) И (ЗамерыПредыдущие.КлючеваяОперация = ЗамерыТекущие.КлючеваяОперация) - И (ЗамерыПредыдущие.Пользователь = ЗамерыТекущие.Пользователь) + И (ЗамерыПредыдущие.Пользователь = ЗамерыТекущие.Пользователь) + И (ЗамерыПредыдущие.ВыполненСОшибкой = ЗамерыТекущие.ВыполненСОшибкой) APDEX @@ -876,7 +894,7 @@ 0 true - РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), &Период.ДатаНачала, "Секунда") * 1000 + РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), УниверсальноеВремя(&Период.ДатаНачала), "Секунда") * 1000 КонецПериодаЧисло @@ -896,7 +914,7 @@ 0 true - РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), &Период.ДатаОкончания, "Секунда") * 1000 + РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), УниверсальноеВремя(&Период.ДатаОкончания), "Секунда") * 1000 НачалоПериодаСравненияЧисло @@ -916,7 +934,7 @@ 0 true - РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), &ПериодСравнения.ДатаНачала, "Секунда") * 1000 + РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), УниверсальноеВремя(&ПериодСравнения.ДатаНачала), "Секунда") * 1000 true Always @@ -938,7 +956,7 @@ 0 true - РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), &ПериодСравнения.ДатаОкончания, "Секунда") * 1000 + РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1), УниверсальноеВремя(&ПериодСравнения.ДатаОкончания), "Секунда") * 1000 true Always @@ -998,6 +1016,27 @@ true Always + + ПоправкаЧасовогоПояса + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поправка часового пояса</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + 0 + true + РАЗНОСТЬДАТ(УниверсальноеВремя(&Период.ДатаНачала), &Период.ДатаНачала, "Секунда") + Always +